Replace with bison-3.5

This removes the previous contents, unpacks the bison-3.5 contents, then
adds the required android external files:

  METADATA
  MODULE_LICENSE_GPL
  NOTICE

The Android.bp will be re-added in the next change.

Test: N/A -- see next change
Change-Id: Ibfbb6f583080f03fea83be58efdbbdbdca36c6f9
diff --git a/.prev-version b/.prev-version
new file mode 100644
index 0000000..4deff84
--- /dev/null
+++ b/.prev-version
@@ -0,0 +1 @@
+3.4.92
diff --git a/.tarball-version b/.tarball-version
new file mode 100644
index 0000000..5a95802
--- /dev/null
+++ b/.tarball-version
@@ -0,0 +1 @@
+3.5
diff --git a/.version b/.version
new file mode 100644
index 0000000..5a95802
--- /dev/null
+++ b/.version
@@ -0,0 +1 @@
+3.5
diff --git a/ABOUT-NLS b/ABOUT-NLS
index 4f50fb5..b1de1b6 100644
--- a/ABOUT-NLS
+++ b/ABOUT-NLS
@@ -18,35 +18,7 @@
 available translations.  They tell how people wanting to contribute and
 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.
-
-1.1 Quick configuration advice
-==============================
-
-If you want to exploit the full power of internationalization, you
-should configure it using
-
-     ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed.  So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation.  Future versions of GNU `gettext' will
-very likely convey even more functionality.  So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
-   So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-1.2 INSTALL Matters
+1.1 INSTALL Matters
 ===================
 
 Some packages are "localizable" when properly installed; the programs
@@ -56,36 +28,19 @@
 
    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 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:
+provides the GNU `gettext' functions.  Installers may use special
+options at configuration time for changing the default behaviour.  The
+command:
 
-     ./configure --with-included-gettext
      ./configure --disable-nls
 
-will, respectively, bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
+will _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 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
-
-to prevent auto-detection.
-
-   The configuration process will not test for the `catgets' function
-and therefore it will not be used.  The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
+probably detect the previously built and installed `libintl' library
+and will decide to use it.  If not, you may have to to use the
+`--with-libintl-prefix' option to tell `configure' where to look for it.
 
    Internationalized packages usually have many `po/LL.po' files, where
 LL gives an ISO 639 two-letter code identifying the language.  Unless
@@ -96,7 +51,7 @@
 `LINGUAS' should then contain a space separated list of two-letter
 codes, stating which languages are allowed.
 
-1.3 Using This Package
+1.2 Using This Package
 ======================
 
 As a user, if your language has been installed for this package, you
@@ -148,7 +103,7 @@
 to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
 (Portuguese as spoken in Portugal) in this context.
 
-1.4 Translating Teams
+1.3 Translating Teams
 =====================
 
 For the Free Translation Project to be a success, we need interested
@@ -177,566 +132,566 @@
 the terminology in use.  Proven linguistic skills are praised more than
 programming skills, here.
 
-1.5 Available Packages
+1.4 Available Packages
 ======================
 
 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
+matrix shows the current state of internationalization, as of June
+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       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
+     Ready PO files       af am an ar as ast az be be@latin bg bn_IN bs ca
+                        +--------------------------------------------------+
+     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 an ar as ast az be be@latin bg bn_IN bs ca
+                           6  0  1  2  3 19   1 10     3    28   3    1 38
 
-                          cs da  de  el en en_GB en_ZA eo es et eu fa fi
+                          crh cs da  de  el en en_GB en_ZA eo es et eu fa
                         +-------------------------------------------------+
-     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             |    []  []                    [] []    []        |
+     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             |        []                       []          []  |
+     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            |    []  []         ()                            |
+     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          |    []                                           |
+     libgnutls          |     []                                          |
+     libgpewidget       |        []  []                                   |
+     libgpg-error       |     []     []                                   |
+     libgphoto2         |        []  ()                                   |
+     libgphoto2_port    |        []  ()                             []    |
+     libgsasl           |                                                 |
+     libiconv           |     [] []  []                    []    []       |
+     libidn             |     []     []                    []             |
+     lifelines          |        []  ()                                   |
+     liferea            |     []     []  []                   []    []    |
+     lilypond           |     []     []                       []          |
+     linkdr             |        []  []                       []          |
+     lordsawar          |        []                                       |
      lprng              |                                                 |
-     lynx               | [] []  []                          []           |
-     m4                 | [] []  []  []                               []  |
+     lynx               |     [] []  []                          []       |
+     m4                 |     [] []  []  []                               |
      mailfromd          |                                                 |
-     mailutils          |                                 []              |
-     make               |    []  []                       []          []  |
+     mailutils          |                                     []          |
+     make               |        []  []                       []          |
      man-db             |                                                 |
      man-db-manpages    |                                                 |
-     minicom            | [] []  []                       []          []  |
-     mkisofs            |                                             []  |
+     minicom            |     [] []  []                       []          |
+     mkisofs            |                                                 |
      myserver           |                                                 |
-     nano               |        []                       []    []    []  |
-     opcodes            |        []                       []          []  |
-     parted             | []     []                                       |
+     nano               |            []                       []    []    |
+     opcodes            |            []                       []          |
+     parted             |     []     []                                   |
      pies               |                                                 |
-     popt               | [] []  []                    [] []          []  |
-     psmisc             | []     []                             []    []  |
-     pspp               |                                 []              |
-     pwdutils           |    []                                           |
-     radius             |                                 []              |
-     recode             | [] []  []  []                [] []          []  |
-     rosegarden         | ()     ()                       ()          ()  |
-     rpm                |    []  []                       []              |
+     popt               |     [] []  []                    [] []          |
+     psmisc             |     []     []                             []    |
+     pspp               |                                     []          |
+     pwdutils           |        []                                       |
+     radius             |                                     []          |
+     recode             |     [] []  []  []                [] []          |
+     rosegarden         |     ()     ()                       ()          |
+     rpm                |        []  []                       []          |
      rush               |                                                 |
      sarg               |                                                 |
      screem             |                                                 |
-     scrollkeeper       | [] []  []         []            []          []  |
-     sed                | []     []  []                [] [] []       []  |
-     sharutils          |    []  []                       [] []       []  |
+     scrollkeeper       |     [] []  []         []            []          |
+     sed                |     []     []  []                [] [] []       |
+     sharutils          |        []  []                       [] []       |
      shishi             |                                                 |
-     skencil            |    []  ()                       []              |
-     solfege            |        []                    []    []       []  |
-     solfege-manual     |                              []    []           |
-     soundtracker       |    []  []                       []              |
-     sp                 |        []                                       |
-     sysstat            |    []  []                             []    []  |
-     tar                | []     []                          [] []    []  |
-     texinfo            |        []                    [] []              |
-     tin                |        []                          []           |
+     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   | [] []  []                    [] []          []  |
+     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
+                          crh cs da  de  el en en_GB en_ZA eo es et eu fa
+                           5  64 105 117 18  1   8     0   28 89 18 19  0
 
-                          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
+                          fi  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   | []  []                    []    []     []          |
+                        +----------------------------------------------------+
+                          fi  fr  ga gl gu he hi hr hu hy id  is it ja ka kn
+                          105 121 53 20  4  8  3  5 53  2 120  5 84 67  0  4
 
                           ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
                         +-----------------------------------------------+
@@ -820,7 +775,7 @@
      grub               |                                               |
      gsasl              |                                               |
      gss                |                                               |
-     gst-plugins-bad    |                []                []           |
+     gst-plugins-bad    |             [] []                [] []        |
      gst-plugins-base   |             [] []                             |
      gst-plugins-good   |                []                []           |
      gst-plugins-ugly   |             [] []             [] [] []        |
@@ -920,7 +875,7 @@
      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
+                          20  5 10  1 13 48  4  2  2  4 24 10 20  3   1
 
                           nl  nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr
                         +---------------------------------------------------+
@@ -1004,7 +959,7 @@
      grub               | []           []                 []                |
      gsasl              | []           []                       []       [] |
      gss                |              []              []       []          |
-     gst-plugins-bad    | []           []         []      []    []          |
+     gst-plugins-bad    | []           []         []      []    []    []    |
      gst-plugins-base   | []           []         []      []    []          |
      gst-plugins-good   | []           []         []      []    []          |
      gst-plugins-ugly   | []           []         []      []    [] []       |
@@ -1041,7 +996,7 @@
      libgpewidget       | []           []                          []       |
      libgpg-error       |              []              []                   |
      libgphoto2         | []           []                                   |
-     libgphoto2_port    | []           []                 []    []          |
+     libgphoto2_port    | []           []         []      []    []          |
      libgsasl           | []           []              []       []       [] |
      libiconv           | []           []                       [] []    [] |
      libidn             | []           []                                   |
@@ -1101,10 +1056,10 @@
      wyslij-po          | []  []       []                                   |
      xchat              | []        [] []     []          []    [] [] [] [] |
      xdg-user-dirs      | []  [] [] [] []  [] []  []   [] []    [] [] [] [] |
-     xkeyboard-config   | []           []                 []    [] []       |
+     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
+                          135 10  4  7 105  1 29  62   47 91  3 54 46  9 37
 
                           sv  sw ta te tg th tr uk vi  wa zh_CN zh_HK zh_TW
                         +---------------------------------------------------+
@@ -1113,7 +1068,7 @@
      ant-phone          | []                 []    []      []               |  9
      anubis             | []                 [] [] []                       | 15
      aspell             |                       [] []  []                   | 20
-     bash               | []                       []                       | 11
+     bash               | []                    [] []                       | 12
      bfd                |                          []                       |  6
      bibshelf           | []                       []      []               | 16
      binutils           |                       [] []                       |  8
@@ -1127,7 +1082,7 @@
      coreutils          | []                    [] []      []               | 22
      cpio               | []                 [] [] []      []          []   | 13
      cppi               |                       [] []                       |  5
-     cpplib             | []                 [] [] []      []          []   | 13
+     cpplib             | []                 [] [] []      []          []   | 14
      cryptsetup         | []                       []                       |  7
      dfarc              |                          []                       |  9
      dialog             | []  []          []       []  []  []          []   | 30
@@ -1147,14 +1102,14 @@
      gcal               | []                 []                             |  5
      gcc                | []                 []            []               |  7
      gettext-examples   | []                 [] [] []      []    []    []   | 34
-     gettext-runtime    | []                 [] [] []      []    []    []   | 30
+     gettext-runtime    | []                 [] [] []      []    []    []   | 29
      gettext-tools      | []                 [] [] []      []          []   | 22
      gip                | []                       []      []          []   | 22
      gjay               |                          []                       |  3
      gliv               | []                 []    []                       | 14
      glunarclock        | []                       []  []  []          []   | 19
      gnubiff            | []                       []                       |  4
-     gnucash            |                    () [] ()                  ()   |  9
+     gnucash            |                    () [] ()      []          ()   | 10
      gnuedu             |                          []                  []   |  7
      gnulib             | []                    [] []      []               | 16
      gnunet             |                          []                       |  1
@@ -1188,9 +1143,9 @@
      grub               | []                       []      []               | 14
      gsasl              | []                       []      []          []   | 14
      gss                | []                       []      []               | 11
-     gst-plugins-bad    | []                 []    []      []               | 22
+     gst-plugins-bad    | []                 []    []      []               | 26
      gst-plugins-base   | []                 [] [] []      []               | 24
-     gst-plugins-good   | []                 [] [] []      []               | 25
+     gst-plugins-good   | []                 []    []      []               | 24
      gst-plugins-ugly   | []                 [] [] []      []               | 29
      gstreamer          | []                    [] []      []               | 22
      gtick              |                       [] []      []               | 13
@@ -1219,13 +1174,13 @@
      ld                 | []                 []    []                  []   | 11
      leafpad            | []                 [] [] []      []          []   | 33
      libc               | []                 []    []      []          []   | 21
-     libexif            |                          []      ()               |  6
+     libexif            |                          []      ()               |  7
      libextractor       |                          []                       |  1
      libgnutls          | []                       []      []               |  9
      libgpewidget       | []                       []      []               | 14
      libgpg-error       | []                       []      []               |  9
      libgphoto2         |                       [] []                       |  8
-     libgphoto2_port    | []                    [] []                  []   | 13
+     libgphoto2_port    | []                    [] []                  []   | 14
      libgsasl           | []                       []      []               | 13
      libiconv           | []                       []  []  []               | 21
      libidn             | ()                       []      []               | 11
@@ -1271,7 +1226,7 @@
      sp                 |                    []                             |  3
      sysstat            |                          []      []               | 15
      tar                | []                 [] [] []      []          []   | 23
-     texinfo            | []                 []    []      []               | 16
+     texinfo            | []                 [] [] []      []               | 17
      tin                |                                                   |  4
      unicode-han-tra... |                                                   |  0
      unicode-transla... |                                                   |  2
@@ -1284,11 +1239,11 @@
      wget               | []                 []    []      []          []   | 26
      wyslij-po          |                       [] []                       |  8
      xchat              | []              []    [] []      []          []   | 36
-     xdg-user-dirs      | []     []       [] [] [] []      []    []    []   | 60
-     xkeyboard-config   | []                 [] [] []                       | 25
+     xdg-user-dirs      | []     [] []    [] [] [] []      []    []    []   | 63
+     xkeyboard-config   | []                    [] []                       | 22
                         +---------------------------------------------------+
-       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
+       85 teams           sv  sw ta te tg th tr uk vi  wa zh_CN zh_HK zh_TW
+      178 domains         119  1  3  3  0 10 65 51 155 17  98     7    41    2618
 
    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
@@ -1301,12 +1256,12 @@
 lag between the mere existence a PO file and its wide availability in a
 distribution.
 
-   If May 2010 seems to be old, you may fetch a more recent copy of
+   If June 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://translationproject.org/extra/matrix.html'.
 
-1.6 Using `gettext' in new packages
+1.5 Using `gettext' in new packages
 ===================================
 
 If you are writing a freely available program and want to
diff --git a/AUTHORS b/AUTHORS
index 806b144..63946aa 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -24,7 +24,7 @@
 
 -----
 
-Copyright (C) 1998-2012 Free Software Foundation, Inc.
+Copyright (C) 1998-2015, 2018-2019 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/Android.bp b/Android.bp
deleted file mode 100644
index ee4a1f3..0000000
--- a/Android.bp
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2006 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-cc_defaults {
-    name: "bison_defaults",
-
-    cflags: [
-        "-Wall",
-        "-Wno-sign-compare",
-    ],
-
-    target: {
-        darwin: {
-            local_include_dirs: [
-                "darwin-lib",
-                "lib",
-            ],
-            cflags: ["-Wno-shift-count-overflow"],
-        },
-        linux: {
-            local_include_dirs: [
-                "linux-lib",
-                "lib",
-            ],
-            cflags: ["-Werror"],
-        },
-    },
-}
-
-cc_library_host_static {
-    name: "libbison",
-    defaults: ["bison_defaults"],
-
-    srcs: [
-        "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",
-    ],
-
-    target: {
-        darwin: {
-            srcs: [
-                "lib/error.c",
-                "lib/fpending.c",
-                "lib/getdelim.c",
-                "lib/getline.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/strndup.c",
-                "lib/strnlen.c",
-                "lib/strverscmp.c",
-                "lib/wcwidth.c",
-            ],
-        },
-
-        linux: {
-            srcs: ["lib/fcntl.c"],
-        },
-    },
-}
-
-//##########################################
-
-cc_binary_host {
-    name: "bison",
-    defaults: ["bison_defaults"],
-
-    cflags: [
-        "-DPKGDATADIR=\"prebuilts/build-tools/common/bison\"",
-
-        "-Wno-sometimes-uninitialized",
-        "-Wno-unused-parameter",
-    ],
-
-    static_libs: ["libbison"],
-
-    srcs: [
-        "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",
-    ],
-}
diff --git a/ChangeLog b/ChangeLog
index a3cee66..e4200fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15637 @@
+2019-12-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.5
+	* NEWS: Record release date.
+
+2019-12-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: prepare for 3.5
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: disable warnings from Clang on macOS
+	    $ cat test.cc
+	    #include <stddef.h>
+	    #include <stdint.h>
+
+	    ptrdiff_t half_max_capacity = PTRDIFF_MAX;
+	    $ clang++-mp-9.0 -pedantic -std=c++98 /tmp/test.cc -c
+	    /tmp/test.cc:4:31: warning: 'long long' is a C++11 extension [-Wc++11-long-long]
+	    ptrdiff_t half_max_capacity = PTRDIFF_MAX;
+	                                  ^
+	    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdint.h:149:23:
+	            note: expanded from macro 'PTRDIFF_MAX'
+	    #define PTRDIFF_MAX       INT64_MAX
+	                              ^
+	    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdint.h:75:26:
+	            note: expanded from macro 'INT64_MAX'
+	    #define INT64_MAX        9223372036854775807LL
+	                             ^
+	    1 warning generated.
+
+	* data/skeletons/glr.cc: here.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: fix it in C++
+	Another breakage revealed by vcsn.
+
+	* data/skeletons/c++.m4 (yytranslate_): Do not hard code "yy" and
+	"parser", both can be changed by the user.
+	Actually, since we are in the parser itself, there's really no need to
+	qualify the type.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix comments for %code blocks
+	In a project of mine, vcsn, this commit fixes the following comments.
+
+	    --- /tmp/parse.hh	2019-12-08 15:51:24.792934703 +0100
+	    +++ lib/vcsn/rat/parse.hh	2019-12-08 16:00:59.137107503 +0100
+	    @@ -43,7 +43,7 @@
+
+	     #ifndef YY_YY_USERS_AKIM_SRC_LRDE_2_LIB_VCSN_RAT_PARSE_HH_INCLUDED
+	     # define YY_YY_USERS_AKIM_SRC_LRDE_2_LIB_VCSN_RAT_PARSE_HH_INCLUDED
+	    -// //                    "%code requires" blocks.
+	    +// "%code requires" blocks.
+	     #line 20 "/Users/akim/src/lrde/2/lib/vcsn/rat/parse.yy"
+
+	       #include <iostream>
+	    @@ -1851,7 +1851,7 @@
+
+	    -// //                    "%code provides" blocks.
+	    +// "%code provides" blocks.
+	     #line 60 "/Users/akim/src/lrde/2/lib/vcsn/rat/parse.yy"
+
+	       #define YY_DECL_(Class) \
+
+	* data/skeletons/bison.m4 (b4_percent_code_get): Pass an expanded
+	string to b4_comment.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: pretend we are Bison 3.5
+	* src/parse-gram.y: Accept we're Bison 3.5.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix spello
+	* data/skeletons/lalr1.cc: here.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	todo: update
+	* TODO: Schedule some features for 3.6.
+	Remove obsolete stuff.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4.92
+	* NEWS: Record release date.
+
+2019-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: fixes
+	Reported by Paul Eggert.
+	https://lists.gnu.org/archive/html/bison-patches/2019-12/msg00014.html
+
+	* NEWS: here.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: minor changes
+	* README-hacking.md: here.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clearly deprecate YYPRINT
+	* doc/bison.texi (Prologue): Stop using YYPRINT as an example.
+	(The YYPRINT Macro): Clearly show this macro is deprecated.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: here.
+	No change in content.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: update
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: obey parse.error
+	* data/skeletons/lalr1.d (yysyntax_error): Let the dispatch be
+	bison-time, not runtime.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: also prefer YY_ASSERT to YYASSERT
+	Like the other skeletons.
+
+	* data/skeletons/variant.hh: here.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: obey the parse.assert %define variable
+	* data/skeletons/glr.c (YYASSERT): Rename as...
+	(YY_ASSERT): this, for consistency with yacc.c, and also to emphasize
+	the fact that this is not for the end user (YY_ prefix).
+	* tests/glr-regression.at: Define parse.assert.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: beware of short ranges for state numbers
+	Now that we use small integral types, possibly unsigned (e.g.,
+	unsigned char), to store state numbers, using -1 to denote an empty
+	state (i.e., a state that stores no semantical value) is very
+	dangerous: it will be confused with state 255, which might be
+	non-empty.
+
+	Rather than allocating a larger range of state numbers to keep the
+	empty-state apart, let's use the number of a state known to store no
+	value.  The initial state, numbered 0, seems to fit perfectly the job.
+
+	Reported by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-11/msg00016.html
+
+	* data/skeletons/lalr1.cc (empty_state): Be 0.
+
+2019-12-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: check it against api.token.constructor
+	* tests/scanner.at: here.
+
+2019-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	warnings: enable -Wuseless-cast, and eliminate warnings
+	Prompted by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-11/msg00016.html.
+
+	* configure.ac (warn_cxx): Add -Wuseless-cast.
+	* data/skeletons/c.m4 (b4_attribute_define): Define
+	YY_IGNORE_USELESS_CAST_BEGIN and YY_IGNORE_USELESS_CAST_END.
+	* data/skeletons/glr.c (YY_FPRINTF): New, replaces YYFPRINTF, wrapped
+	with YY_IGNORE_USELESS_CAST_BEGIN and YY_IGNORE_USELESS_CAST_END.
+	(YY_DPRINTF): Likewise.
+	* tests/actions.at: Remove useless cast.
+	* tests/headers.at: Adjust.
+
+2019-12-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style changes
+	* src/complain.h, src/complain.c: Comment changes.
+	* src/scan-skel.l: Reduce scopes.
+	* data/skeletons/bison.m4: Factor diagnostic functions.
+
+2019-12-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: style changes
+	* data/skeletons/glr.c (yysplitStack): Reduce scopes.
+	* tests/atlocal.in: Formatting changes.
+
+2019-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: get rid of symbol_type::token ()
+	It is not used.  And its implementation was wrong when api.token.raw
+	was defined, as it was still mapping to the external token numbers,
+	instead of the internal ones.  Besides it was provided only when
+	api.token.constructor is defined, yet always declared.
+
+	* data/skeletons/c++.m4 (by_type::token): Remove, useless.
+
+2019-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: remove useless cast about user_token_number_max_
+	Reported by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-11/msg00016.html
+
+	The cast is needed when yytranslate_'s argument type is token_type,
+	i.e., when api.token.constructor is defined.
+
+	    373. types.at:138: testing lalr1.cc api.value.type=variant api.token.constructor ...
+	    ======== Testing with C++ standard flags: ''
+	    ../../tests/types.at:138: bison --color=no -fno-caret  -o test.cc test.y
+	    ../../tests/types.at:138: $CXX $CXXFLAGS $CPPFLAGS  $LDFLAGS -o test test.cc $LIBS
+	    stderr:
+	    test.cc:966:16: error: result of comparison of constant 257 with
+	                    expression of type 'yy::parser::token_type'
+	                   (aka 'yy::parser::token::yytokentype') is always true
+	                   [-Werror,-Wtautological-constant-out-of-range-compare]
+	        else if (t <= user_token_number_max_)
+	                 ~ ^  ~~~~~~~~~~~~~~~~~~~~~~
+	    1 error generated.
+
+	It is because it is expected that when api.token.constructor is
+	defined, only symbol constructors will be used, that yytranslate_ then
+	takes a token_type.  But it is wrong: we still allow literal
+	characters in this case, as demonstrated by test 373 for instance.
+
+	    %define api.value.type variant
+	    %define api.token.constructor
+	    %token <std::pair<int, int>> '1' '2';
+	    [...]
+	    static yy::parser::symbol_type yylex ()
+	    {
+	      static char const input[] = "12";
+	      int res = input[toknum++];
+	      typedef yy::parser::symbol_type symbol;
+	      if (res)
+	        return symbol (res, std::make_pair (res - '0', res - '0' + 1));
+	      else
+	        return symbol (res);
+	    }
+
+	So let yytranslate_ always take an int, which makes the cast truly
+	useless.
+
+	* data/skeletons/c++.m4, data/skeletons/lalr1.cc (yytranslate_): here.
+
+2019-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: clean a few issues wrt special tokens
+	The C++ implementation of LAC did not skip the $undefined token,
+	probably because it was not exposed.  Expose it, and use clearer
+	names.
+
+	* data/skeletons/c++.m4: Don't define undef_token_ in yytranslate_,
+	but...
+	* data/skeletons/lalr1.cc (yy_undef_token_): here.
+	Use a more precise type to define yy_undef_token_ and yy_error_token_.
+	Unfortunately we move from a compile-time value defined via an enum to
+	a static const member.  Eventually we should make it constexpr.
+	Make LAC implementation more alike yacc.c's one.
+
+2019-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	d, java: improve yytranslate and neighbors
+	* data/skeletons/lalr1.d, data/skeletons/lalr1.java: Don't expose
+	yyuser_token_number_max_ and yyundef_token_.  Do as in C++: scope them
+	into yytranslate_, and only when api.token.raw is not defined.
+	(yyterror_): Rename as...
+	(yy_error_token_): this.
+	* data/skeletons/lalr1.d (token_number_type): New.
+	Use it.
+	Can't be done in the Java backend, as Java does not have type aliases.
+
+2019-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	d, java: get rid of a useless table
+	* data/skeletons/lalr1.d, data/skeletons/lalr1.java (yytoken_number_):
+	Remove, useless.
+	Was used in ancient C skeletons to support YYPRINT, long obsoleted by
+	%printer.
+
+2019-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++, d, java: remove yyerrcode
+	It is not used at all.  We will remove it also from yacc.c, but
+	later (see TODO).
+
+	* data/skeletons/lalr1.cc, data/skeletons/lalr1.d,
+	* data/skeletons/lalr1.java (yyerrcode_):
+	Remove.
+
+2019-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: improve typing
+	* data/skeletons/lalr1.cc (yysyntax_error_): symbol_type::type_get
+	returns a symbol_number_type (which is indeed an int).
+
+2019-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: remove useless cast about yyeof_
+	Reported by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-11/msg00016.html
+
+	* data/skeletons/c++.m4 (b4_yytranslate_define): Don't use yyeof_ as
+	if it had two different types.
+	It is used once against the input argument, which is the value
+	returned by yylex, which is an "external token number", typically an
+	int.  It is also used as output type, an "internal symbol number".
+	It turns out that in both cases we mean "0", but let's keep yyeof_
+	only for the case "internal symbol number", i.e., _after_ conversion
+	by yytranslate.
+	This frees us from one cast.
+
+2019-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr: style change
+	* data/skeletons/glr.c (YYDPRINTF): Expand into an empty statement,
+	instead of nothing.
+	Simplify callers.
+
+2019-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr: remove useless casts
+	Reported by GCC's -Wuseless-cast.
+
+	* data/skeletons/glr.c: Don't cast to yybool, it's useless.
+
+2019-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c, glr.c: fix crash when reporting errors in consistent states
+	The current code for yysyntax_error for %define parse.error verbose is
+	fishy (given that YYEMPTY is -2, invalid argument for yytname[]):
+
+	    static int
+	    yysyntax_error ([...])
+	    {
+	      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+	    [...]
+	      if (yytoken != YYEMPTY)
+
+	A nearby comment reports
+
+	    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".
+
+	So it _is_ possible to call yysyntax_error with yytoken == YYEMPTY,
+	albeit quite difficult when meaning to, so virtually impossible by
+	accident (after all, there was never a bug report about this).
+
+	I failed to produce a test case, but Joel E. Denny provided me with
+	one (added to the test suite below).  The yacc.c skeleton fails on
+	this, and once fixed dies on a second problem.  The glr.c skeleton was
+	also dying, but immediately of this second problem.
+
+	Indeed we were not allocating space for the error message's final \0.
+	This was hidden by the fact that we only had error messages with at
+	least an unexpected token displayed, so with at least one "%s" in the
+	format string, whose size (2) was included (incorrectly) in the final
+	size of the message (where the %s have been replaced by the actual
+	content).
+
+	* data/skeletons/glr.c, data/skeletons/yacc.c (yysyntax_error):
+	Do not invoke yytnamerr on YYEMPTY.
+	Clarify the computation of the length of the _final_ error message,
+	with the NUL terminator but without the '%s's.
+	* tests/conflicts.at (Syntax error in consistent error state):
+	New, contributed by Joel E. Denny.
+
+2019-11-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: avoid creating files whose name collide with standard headers
+	Having a file named "exception" is risky: the compiler might use that
+	file in #include.
+	Reported by 马俊 <majun123@whu.edu.cn>.
+
+	* tests/local.at (AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR): Generate
+	'exceptions', not 'exception'.
+
+2019-11-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: more details about the test suite
+	* README-hacking.md: here.
+
+2019-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4.91
+	* NEWS: Record release date.
+
+2019-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: pacify syntax-check
+	* cfg.mk: No need to translate *.md files.
+	* data/skeletons/glr.c, data/skeletons/yacc.c: Fix space issues.
+
+2019-11-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-11-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: don't promote dangling aliases
+	String literals as tokens serve two distinct purposes: freeing from
+	having to implement the keyword matching in the scanner, and improving
+	error messages.  Most of the time both can be achieved at the same
+	time, but on occasions, it does not work so well.
+
+	We promote their use for error messages.  We will also still support
+	the former case, but it is _not_ the recommended approach.
+
+	* doc/bison.texi (Tokens from Literals): Clearly state that we don't
+	recommend looking up the token types in the list of token names.
+
+2019-11-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: complain about undeclared string tokens
+	String literals, which allow for better error messages, are (too)
+	liberally accepted by Bison, which might result in silent errors.  For
+	instance
+
+	    %type <exVal> cond "condition"
+
+	does not define “condition” as a string alias to 'cond' (nonterminal
+	symbols do not have string aliases).  It is rather equivalent to
+
+	    %nterm <exVal> cond
+	    %token <exVal> "condition"
+
+	i.e., it gives the type 'exVal' to the "condition" token, which was
+	clearly not the intention.
+
+	Introduce -Wdangling-alias to catch this.
+
+	* src/complain.h, src/complain.c: Add support for -Wdangling-alias.
+	(argmatch_warning_args): Sort.
+	* src/symtab.c (symbol_check_defined): Complain about dangling
+	aliases.
+	* doc/bison.texi: Document it.
+	* tests/input.at (Dangling aliases): New test.
+
+2019-11-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: yacc reserves %type to nonterminals
+	On
+
+	    %token TOKEN1
+	    %type  <ival> TOKEN1 TOKEN2 't'
+	    %token TOKEN2
+	    %%
+	    expr:
+
+	bison -Wyacc gives
+
+	    input.y:2.15-20: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+	        2 | %type  <ival> TOKEN1 TOKEN2 't'
+	          |               ^~~~~~
+	    input.y:2.29-31: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+	        2 | %type  <ival> TOKEN1 TOKEN2 't'
+	          |                             ^~~
+	    input.y:2.22-27: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+	        2 | %type  <ival> TOKEN1 TOKEN2 't'
+	          |                      ^~~~~~
+
+	The messages appear to be out of order, but they are emitted when the
+	error is found.
+
+	* src/symtab.h (symbol_class): Add pct_type_sym, used to denote
+	symbols appearing in %type.
+	* src/symtab.c (complain_pct_type_on_token): New.
+	(symbol_class_set): Check that %type is not applied to tokens.
+	(symbol_check_defined): pct_type_sym also means undefined.
+	* src/parse-gram.y (symbol_decl.1): Set the class to pct_type_sym.
+	* src/reader.c (grammar_current_rule_begin): pct_type_sym also means
+	undefined.
+	* tests/input.at (Yacc's %type): New.
+
+2019-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: promote %nterm over %type
+	As an extension to POSIX Yacc, Bison's %type accepts tokens.
+	Unfortunately with string literals as implicit tokens, this is
+	misleading, and led some users to write
+
+	    %type <exVal> cond "condition"
+
+	believing that "condition" would be associated to the 'cond'
+	nonterminal (see https://github.com/apache/httpd/pull/72).
+
+	* doc/bison.texi: Promote %nterm rather than %type to declare the type
+	of nonterminals.
+
+2019-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: No visible changes.
+
+2019-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: work around warnings when Flex C output is compiled in C++
+	* doc/bison.texi (calc++/scanner.ll): here.
+	While at it, clarify clang vs. warnings.
+
+2019-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: be robust to old Perl versions on Cygwin
+	Reported by Denis Excoffier.
+	https://lists.gnu.org/archive/html/bug-bison/2019-11/msg00008.html.
+
+	* tests/output.at: Be sure to remove back up files.
+
+2019-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-11-12  kaneko y  <spiketeika@gmail.com>
+
+	gram.c: Fix condition of aver
+	* src/gram.c (grammar_dump): Fix condition of aver.
+	What we want to check is that rhs is followed by its rule.
+
+2019-11-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clarify build instructions
+	* README: A few fixes.
+	Explain how to install color support.
+	* README-hacking: Rename as...
+	* README-hacking.md: this, and convert to Markdown.
+	Improve typography.
+	Improve explanations about update-test.
+
+2019-11-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-11-11  Yuichiro Kaneko  <spiketeika@gmail.com>
+
+	gram.c: also print terminals in grammar_dump
+	* src/gram.c (grammar_dump): Print terminals likewise non terminals.
+	* tests/sets.at (Reduced Grammar): Update test case to catch up the
+	change and add a test case where prec and assoc are used.
+
+2019-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: work around Texinfo 6.7 bug
+	When @code is used in a @deftype... definition, it issues quotes.
+	Remove them.
+	See https://lists.gnu.org/archive/html/help-texinfo/2019-11/msg00004.html.
+
+	* doc/local.mk: here.
+
+2019-11-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: Wrap lines.
+	No semantical difference.
+
+2019-11-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: use upper case for tokens
+	* doc/bison.texi: here.
+
+2019-11-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: type-face fixes
+	* doc/bison.texi: Use @code for types in function definitions.
+
+2019-11-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: expose the type used to store line and column numbers
+	* data/skeletons/location.cc (position::counter_type)
+	(location::counter_type): New.
+	Use them.
+	* doc/bison.texi (C++ position, C++ location): Adjust.
+
+2019-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix comment and adjust to locale names on GNU/Linux
+	Reported by Denis Excoffier.
+
+	* tests/diagnostics.at: here.
+
+2019-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: really check complaints from m4
+	* tests/diagnostics.at (Locations from M4, Tabulations and multibyte
+	characters from M4): These tests are actually checking a message
+	coming from C, not from M4.  Replace with...
+	(Complaints from M4): This.
+
+2019-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: simplify prologue
+	* tests/testsuite.h: We no longer load gnulib in the tests.
+
+2019-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: add missing translation
+	* src/muscle-tab.c (muscle_percent_define_check_kind): Here.
+
+2019-11-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix old cast warnings
+	We still have a few old C casts in lalr1.cc, let's get rid of them.
+	Reported by Frank Heckenbach.
+
+	Actually, let's monitor all our casts using easy to grep macros.
+	Let's use these macros to use the C++ standard casts when we are in
+	C++.
+
+	* data/skeletons/c.m4 (b4_cast_define): New.
+	* data/skeletons/glr.c, data/skeletons/glr.cc,
+	* data/skeletons/lalr1.cc, data/skeletons/stack.hh,
+	* data/skeletons/yacc.c:
+	Use it and/or its casts.
+
+	* tests/actions.at, tests/cxx-type.at,
+	* tests/glr-regression.at, tests/headers.at, tests/torture.at,
+	* tests/types.at:
+	Use YY_CAST instead of C casts.
+
+	* configure.ac (warn_cxx): Add -Wold-style-cast.
+	* doc/bison.texi: Disable it.
+
+2019-11-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: be robust to tput errors
+	Reported by Denis Excoffier.
+
+	* tests/bison.in: here.
+
+2019-11-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: update ignores
+	I don't understand what happened in
+	10acc148bb90fac8a52a5d35f2bd18bd824c1639.
+
+2019-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4.90
+	* NEWS: Record release date.
+
+2019-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: finish propagating the unsigned->signed conversion in locations
+	* data/skeletons/location.cc: Remove the u (for unsigned) suffix from
+	the initial line and column.
+	* NEWS: AFAICT, only C++ backends have their location types changed.
+
+2019-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: fix cpp indentation
+	Reported by syntax-check.
+
+	* src/system.h: here.
+
+2019-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: glr.c: comment changes
+	* data/skeletons/glr.c: here.
+
+2019-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: pass -O1 to GCC8 with sanitizers
+	This build never finishes in the 50min credit given by Travis.  See if
+	with optimizations it works better.
+
+	* .travis.yml: here.
+
+2019-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: reduce the "scope" of global variables
+	We have too many global variables, adding structure would help.  For a
+	start, let's hide some of the variables closer to their usage.
+
+	* src/getargs.c, src/files.h (current_file): Move to...
+	* src/scan-gram.c: here.
+	* src/scan-gram.h (gram_in, gram__flex_debug): Remove, make them
+	private to the scanner.
+	* src/reader.h, src/reader.c (reader): Take a grammar file as argument.
+	Move the handling of scanner variables to...
+	* src/scan-gram.l (gram_scanner_open, gram_scanner_close): here.
+	(gram_scanner_initialize): Remove, replaced by gram_scanner_open.
+	* src/main.c: Adjust.
+
+2019-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: use grammar_file instead of current_file
+	* src/parse-gram (%initial-action): here.
+	(handle_skeleton): Don't depend on the current file name to look for
+	"local" skeletons (subject to changes coming from "#lines"): depend
+	only on the initial file name, the one given on the command line.
+
+2019-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: use grammar_file instead of current_file
+	Currently there are two globals denoting the input file: grammar_file
+	is the one from the command line, and current_file which might change
+	because of #line.  Use only the former.
+
+	* src/complain.c (error_message): here.
+	* tests/diagnostics.at: Adjust.
+
+2019-10-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: let symtab deal with the symbols
+	* src/reader.c (reader): Move the setting up of the builtin symbols to...
+	* src/symtab.c (symbols_new): here.
+
+2019-10-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: remove incorrect comment
+	Reported by Paul Eggert.
+
+	* src/system.h: here.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: fix previous commit: printing of state numbers
+	* data/skeletons/lalr1.cc: Printing a char prints... a char.
+	Print ints instead.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: use computed state types
+	This skeleton uses a single stack of state structures, so it is less
+	likely to benefit from a stack size reduction than yacc.c (which uses
+	several stacks: state number, value and location).  But it will reduce
+	the size of the LAC stack.
+
+	This skeleton was already using int for state numbers, so, contrary to
+	yacc.c, this brings nothing for large automata.
+
+	Overall, it is still nicer to make the skeletons alike.
+
+	* data/skeletons/lalr1.cc (state_type): Here.
+
+2019-10-24  kaneko y  <spiketeika@gmail.com>
+
+	README: Fix a typo
+	* README: Fix a typo. Git command name is submodule.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix missing dependencies
+	Reported by Thomas Petazzoni.
+	https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00000.html
+
+	* examples/c/reccalc/local.mk: Complete dependencies, including for
+	earlier versions of Automake (for sake of our CI, on top of Ubuntu
+	Xenial/Bionic, which feature only Automake 1.15).
+	(%D%/scan.c %D%/scan.h): Upgrade to the full version provided in
+	Automake's documentation.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: simplify location handling
+	Locations start at line 1.  Don't accept line 0.
+
+	* src/location.c (location_print): Don't print locations with line 0.
+	(location_caret): Simplify.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: reenable -Wtype-limits
+	See https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html
+	to https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00073.html.
+
+	Paul Eggert's changes in gnulib do fix the issue for modern GCCs (7,
+	8, 9) on macOS.  Unfortunately these warnings are back on the
+	CI (GNU/Linux) with GCC 4.6, 4.7, (not 4.8) and 4.9.
+
+	Disable the warning locally.
+
+	* configure.ac (warn_common, warn_tests): Remove -Wtype-limits.
+	* src/system.h (IGNORE_TYPE_LIMITS_BEGIN, IGNORE_TYPE_LIMITS_END): New.
+	* src/InadequacyList.c, src/parse-gram.c, src/parse-gram.y,
+	* src/symtab.c: Use it.
+
+2019-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: remove dmalloc support
+	Today sanitizers are a better alternative.
+
+	* m4/dmalloc.m4: Remove.
+	* configure.ac, src/system.h: Adjust.
+
+2019-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	gitignore: update
+
+2019-10-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	build: update gnulib submodule to latest
+
+2019-10-23  Yuichiro Kaneko  <spiketeika@gmail.com>
+
+	style: update comment in reader.c
+	rrhs and rlhs were removed by b2ed6e5826e772162719db595446b2c58e4ac5d6.
+
+	* src/reader.c (packgram): Update comment.
+
+2019-10-22  kaneko y  <spiketeika@gmail.com>
+
+	yacc.c: fix a typo
+	* data/skeletons/yacc.c (yysetstate): fix comment.
+
+2019-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: pacify syntax-check
+	* doc/.gitignore, src/complain.c, src/getargs.c,
+	* src/output.c: here.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	main: also free memory on errors
+	* src/derives.c (derives_free): Beware of NULL.
+	* src/main.c (main): Let the 'finish' label include memory release.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	To get bitset_free accept NULL.  See
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-10/msg00054.html
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scope in derives
+	* src/derives.c: here.
+	And prefer prefix to postfix increment.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: disable -Wtautological-constant-out-of-range-compare
+	Also see e31f92495ce14a5d924b148c8ea1470003cc47c1 and
+	https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html
+
+	* configure.ac (warn_common): Disable
+	-Wtautological-constant-out-of-range-compare.
+	(warn_tests): Restore it.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: formatting changes
+	* .travis.yml: Use the single line form of lists, when reduced to a
+	singletons.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: rename jobs
+	* .travis.yml (compile, test): Rename as...
+	(dist, check): these, which are more traditional for GNU projects.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: update README
+	* README: Be clearer that README-hacking _must_ be read.
+	Convert to Markdown.
+
+2019-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	bootstrap: relieve developpers from Gettext version mismatch issues
+	* .travis.yml (compile): Move the workaround from here...
+	* bootstrap.conf (bootstrap_epilogue): to there.
+
+2019-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: beware of GCC9 warnings in push mode
+	This is really weird: GCC points to the LHS of the assignment...
+
+	    260. headers.at:184: testing Sane headers: api.pure api.push-pull=both ...
+	    tests/headers.at:184: COLUMNS=1000; export COLUMNS;  bison --color=no -fno-caret -d -o input.c input.y
+	    tests/headers.at:184: $CC $CFLAGS $CPPFLAGS  -c -o input.o input.c
+	    stderr:
+	    input.c: In function 'yyparse':
+	    input.c:1276:16: error: 'yylval' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	     1276 |         yylval = *yypushed_val;
+	          |         ~~~~~~~^~~~~~~~~~~~~~~
+	    input.c: In function 'yypull_parse':
+	    input.c:1276:16: error: 'yylval' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	     1276 |         yylval = *yypushed_val;
+	          |         ~~~~~~~^~~~~~~~~~~~~~~
+	    cc1: all warnings being treated as errors
+	    stdout:
+	    tests/headers.at:184: exit code was 1, expected 0
+
+	See also d87c8ac79ab844d6a7a4f5103dcf7a842d18b611
+	and 9645a2b20ee7cbfa8bb4ac2237f87d598afe349c.
+
+	* tests/headers.at (Several parsers, Several parsers): Disable these
+	warnings when in push parser.
+
+2019-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: try GCC9 and Clang9
+	The logs show:
+
+	    Disallowing sources: llvm-toolchain-bionic-8, ubuntu-toolchain-r-test
+	    To add unlisted APT sources, follow instructions in
+	    https://docs.travis-ci.com/user/installing-dependencies#Installing-Packages-with-the-APT-Addon
+
+	* .travis.yml: Remove a few apt sources which are ignored in
+	Bionic (e.g., see
+	https://github.com/travis-ci/apt-source-safelist/issues/410).
+	Where needed, use sources/sourceline instead.
+	Also, don't use -DNDEBUG with older builds.
+
+2019-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: clarify version checking
+	* src/parse-gram.y: Use the same conventions for gnulib as elsewhere:
+	<header.h>.
+	(str_to_version): New.
+	(handle_require): Use it.
+	Prefer < to >.
+
+2019-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: disable -Wtype-limits, except in the test suite
+	The current implementation of lib/intprops.h results in "unsigned < 0"
+	comparisons, which triggers warnings.  See
+
+	https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html
+
+	* configure.ac (warn_common): Disable -Wtype-limits.
+	(warn_tests): Restore it.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	c++: port to Sun C++ 5.12
+	The documentation for Oracle Solaris Studio 12.3 (Sun C++ 5.12
+	2011/11/16) says it supports C++03.  This compiler rejects the
+	location.cc use of std::max for some reason; I don’t know why
+	since I don’t use C++ as a rule.  The simplest workaround is to
+	open-code ‘max’.
+	* data/skeletons/location.cc (add_):
+	Do max by hand rather than relying on std::max.
+	Don’t include <algorithm.h>; no longer needed.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	regen
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	tests: port to Solaris 10 grep
+	* tests/scanner.at (Token numbers: $1): Use $EGREP, not grep -E.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	tests: port to Solaris 10 sed
+	As documented in the Autoconf manual, Solaris 10 sed rejects
+	script labels contianing more than 7 characters.  POSIX requires
+	support for at least 8 characters, but we might as well be portable
+	to Solaris 10 which is still supported.
+	* tests/local.at (AT_SETS_CHECK): Use only the first 7 characters
+	in sed labels.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	bison: check for int overflow in token numbers
+	* src/symtab.c: Include intprops.h
+	(symbol_user_token_number_set): Don’t allow user_token_number ==
+	INT_MAX because too much other code adds 1 to the user token number.
+	(symbols_token_translations_init): Complain on integer overflow
+	instead of indulging in undefined behavior.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	bison: check for int overflow when scanning
+	* src/scan-gram.l: Include errno.h, for errno.
+	(scan_integer, handle_syncline): Check for integer overflow.
+	* tests/input.at (too-large.y): Adjust to match new diagnostics.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	bison: check version numbers more carefully
+	* src/parse-gram.y: Include intprops.h.
+	(handle_require): Don’t indulge in undefined behavior if the major
+	or minor number is out of range.  Instead, check that the
+	resulting value is nonnegative, fits in int, and that the minor
+	number is less than 100.  Also, check that a number was parsed.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	c: port YY_ATTRIBUTE_UNUSED to Sun C 5.12
+	Sun C 5.12 defines __SUNPRO_C to 0x5120 but diagnoses
+	‘__attribute__ ((__unused__))’.  Change the ifdefs to use
+	the same method as Gnulib in this area.
+	* data/skeletons/c.m4 (YY_ATTRIBUTE): Remove, since
+	not all attributes were added in the same compiler version.
+	(YY_ATTRIBUTE_PURE, YY_ATTRIBUTE_UNUSED):
+	Use specific GCC version for each attribute.
+	Pay no attention to __SUNPRO_C.
+	* tests/headers.at (Several parsers): Tighten tests accordingly.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	c: improve port of stdint.h usage to pre-C99
+	Oracle Solaris Studio 12.3 (Sun C 5.12 2011/11/16) by default does
+	not conform to C99; it defines __STDC_VERSION__ to be 199409L, so
+	the Bison code does not include <stdint.h> (not required by C89
+	amendment 1) even though this compiler does have <stdint.h>.  On
+	this platform <limits.h> defines INT_LEAST8_MAX (POSIX allows
+	this) so the skeleton got confused and thought that <stdint.h> had
+	been included even though it wasn’t.
+	* data/skeletons/c.m4 (b4_c99_int_type_define) [!__PTRDIFF_MAX__]:
+	Always include <limits.h>.
+	(YY_STDINT_H): Define when <stdint.h> was included.
+	All uses of expressions like ‘defined INT_LEAST8_MAX’ changed to
+	‘defined YY_STDINT_H’, since Sun C 5.12 <limits.h> defines macros
+	like INT_LEAST8_MAX but does not declare types like int_least8_t.
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	gnulib:update
+
+2019-10-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	autoconf:update
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: more updates
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: update
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: rename types for states
+	* data/skeletons/yacc.c (yy_state_num): Rename as...
+	(yy_state_t): this.
+	(yy_state_fast_t): New.
+	Use it.
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr: style changes
+	* data/skeletons/glr.c (yytnamerr): here.
+	(yyprocessOneStack): Initialize variables.
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: style changes
+	* data/skeletons/yacc.c: Move call to lac discard to clarify the
+	shifting of the token.
+	Like in lalr1.cc.
+
+2019-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: avoid $(...)
+	Reported by Paul Eggert.
+
+	* tests/local.at (AT_DATA_NO_FINAL_EOL): here.
+
+2019-10-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: use a portable 'truncate' implementation
+	Suggested by Paul Eggert.
+	https://lists.gnu.org/archive/html/bison-patches/2019-10/msg00044.html
+
+	* tests/local.at (AT_DATA_NO_FINAL_EOL): Use dd instead of perl.
+
+2019-10-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: factor the generation of files without the final eol
+	AFAICT Autotest 2.69 still does not support AT_DATA without the final
+	eol.
+
+	* tests/local.at (AT_DATA_NO_FINAL_EOL): New.
+	* tests/input.at: Use it.
+
+2019-10-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: refactor the handling of Perl
+	Let's make a difference between places where Perl is required for the
+	test (AT_PERL_REQUIRE), and the places where it's used to run the
+	test, but it's not not to run the test (AT_PERL_CHECK).
+
+	* tests/local.at (AT_REQUIRE): New.
+	(AT_PERL_CHECK, AT_PERL_REQUIRE): New.
+	Use them where appropriate.
+
+	* tests/local.mk ($(TESTSUITE)): Beware not to start the line with
+	'-pi' if Perl is empty, as Make understands this as "it's ok to fail".
+	Which it is not.
+
+2019-10-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: comment changes
+	* data/skeletons/lalr1.d: Here.
+
+2019-10-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	i18n: don't push too hard for '…'
+	Suggested by Paul Eggert.
+
+	* src/location.c (ellipsis): Clarify comment for translators.
+
+2019-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr: display line numbers in traces
+	Suggested by Lars Maier.
+
+	* data/skeletons/glr.c: Also display rule locations when rules are
+	deferred, and rejected.
+
+2019-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: be really robust to Perl missing
+	My previous tests (with ./configure PERL=false) have been fooled by
+	configure, that managed to find perl anyway.  This time, I ran this on
+	a Fedora in Docker, without Perl.
+
+	* tests/calc.at, tests/diagnostics.at, tests/headers.at,
+	* tests/input.at, tests/local.at, tests/named-refs.at,
+	* tests/output.at, tests/regression.at, tests/skeletons.at,
+	* tests/synclines.at, tests/torture.at: Don't require Perl.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure: perl is not required
+	But it's used in various places, including in some tests.
+
+	* configure.ac: here.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: update
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: prefer "…" to "..." if the locale supports it
+	* src/location.c (ellipsis, ellipsize): New.
+	Use them.
+
+2019-10-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+	c: improve patch for UCHAR_MAX etc. problem
+	* data/skeletons/c.m4 (b4_c99_int_type_define): Reorder to put the
+	signed types first, since they’re simpler and this keeps similar
+	code closer.  For signed types, don’t bother checking whether the
+	type promotes to int since the type must be signed anyway.  For
+	unsigned types, protect a test like ‘UCHAR_MAX <= INT_MAX’ with
+	‘!defined __UINT_LEAST8_MAX__’, as otherwise the logic is wrong
+	for oddball platforms; and once we do that, there should no need
+	for ‘defined INT_MAX’ so remove that.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: do not depend on config.h
+	Currently we face test suite failures in different environments,
+	because of a conflict between the definitions of isnan by gnulib, and
+	by the C++ library:
+
+	    262. headers.at:186: testing Sane headers: %locations %debug c++ ...
+	    ./headers.at:186: COLUMNS=1000; export COLUMNS;  bison --color=no -fno-caret -d -o input.cc input.y
+	    ./headers.at:186: $CXX $CXXFLAGS $CPPFLAGS  -c -o input.o input.cc
+	    stderr:
+	    In file included from /usr/include/c++/4.8.2/cmath:44:0,
+	                     from /usr/include/c++/4.8.2/random:38,
+	                     from /usr/include/c++/4.8.2/bits/stl_algo.h:65,
+	                     from /usr/include/c++/4.8.2/algorithm:62,
+	                     from location.hh:41,
+	                     from input.hh:90,
+	                     from input.cc:50:
+	    /u/cs/fac/eggert/src/gnu/bison/lib/math.h: In function 'bool isnan(double)':
+	    /u/cs/fac/eggert/src/gnu/bison/lib/math.h:2849:1: error: new declaration 'bool isnan(double)'
+	     _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool)
+	     ^
+	    In file included from /usr/include/features.h:375:0,
+	                     from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/os_defines.h:39,
+	                     from /usr/include/c++/4.8.2/x86_64-redhat-linux/bits/c++config.h:2097,
+	                     from /usr/include/c++/4.8.2/cstdlib:41,
+	                     from input.hh:48,
+	                     from input.cc:50:
+	    /usr/include/bits/mathcalls.h:235:1: error: ambiguates old declaration 'int isnan(double)'
+	     __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
+	     ^
+
+	There might be something to do in gnulib about this, but I believe
+	that gnulib should not be used in the test suite in the first place.
+
+	The test suite should work with other compilers than the one used to
+	compile the package.  For a start, Bison sources are more
+	demanding (C99) than the generated parsers.  Last time I tried, tcc
+	for example, was not able to compile Bison, yet our generated parsers
+	should compile cleanly with it.
+
+	Besides the problem at hand is with the C++ compiler, with is not the
+	one used to set up gnulib at configuration-time (config.h is mainly
+	built from probing the C compiler).
+
+	We should really not depend on gnulib in tests.
+
+	This was introduced in 2001 to check whether including
+	stdlib.h/string.h is safe thanks to STDC_HEADERS
+	(2ce1014469742b5c6618daf8506b69e38787c7d5).  Today, we assume at least
+	a C90 compiler, it should be safe enough.
+
+	* tests/local.at, tests/testsuite.h: Do not include config.h.
+	* tests/atlocal.in (conftest.cc): Likewise.
+	(CPPFLAGS): Do not expose lib/, as because of this we might picked up
+	gnulib replacement headers for system headers.
+
+	* tests/input.at: Use int instead of ptrdiff_t, for easier portability
+	(some machine on the CI did not find ptrdiff_t).
+	* tests/c++.at: Add missing include for getchar.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: spell check
+	* doc/bison.texi: Remove the index about yyoutput, it is no longer
+	documented.
+	Spell check.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style changes
+	* tests/actions.at: Prefer printf to fprintf.
+	Prefer yyo to yyoutput in %printer.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: formatting changes
+	* tests/actions.at, tests/local.at: here.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: add missing includes
+	* tests/actions.at, tests/c++.at, tests/headers.at,
+	* tests/regression.at: here.
+
+2019-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	c: don't assume that UCHAR_MAX, etc. are defined
+	A number of portability issues with GCC 4.6 .. 4.9 (inclusive):
+
+	    input.c:184:7: error: "UCHAR_MAX" is not defined [-Werror=undef]
+	     #elif UCHAR_MAX <= INT_MAX
+	           ^
+	    input.c:184:20: error: "INT_MAX" is not defined [-Werror=undef]
+	     #elif UCHAR_MAX <= INT_MAX
+	                        ^
+	    input.c:202:7: error: "USHRT_MAX" is not defined [-Werror=undef]
+	     #elif USHRT_MAX <= INT_MAX
+	           ^
+	    input.c:202:20: error: "INT_MAX" is not defined [-Werror=undef]
+	     #elif USHRT_MAX <= INT_MAX
+	                        ^
+
+	* data/skeletons/c.m4 (b4_c99_int_type_define): Don't assume they are
+	defined.
+
+2019-10-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure: don't require Flex
+	Flex should not be required to build Bison or run the test suite (of
+	course it is needed for maintaining Bison).  Yet the Automake
+	conditional FLEX_WORKS does not work.
+
+	* m4/flex.m4 (_AC_PROG_LEX_YYTEXT_DECL): Since this is called
+	conditionally, don't define LEX_IS_FLEX here, but rather...
+	(AC_PROG_LEX): here.
+	* configure.ac: Be more cautious about possibly undefined variables.
+
+2019-10-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Move the integer-type selection into c.m4
+	That way, glr.c can use it too.
+	* data/skeletons/c.m4 (b4_int_type):
+	Do not special-case ‘char’; it’s not worth the trouble,
+	as clang complains about char subscripts.
+	(b4_c99_int_type, b4_c99_int_type_define): New macros,
+	taken from yacc.c.
+	* data/skeletons/glr.c: Use b4_int_type_define.
+	* data/skeletons/yacc.c (b4_int_type): Remove, since there’s
+	no longer any need to redefine it.
+	Use b4_c99_int_type_define rather than its body.
+
+2019-10-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Use “least” types for integers in Yacc tables
+	This changes the Yacc skeleton to use “least” integer types to
+	keep tables smaller on some platforms, which should lessen cache
+	pressure.  Since Bison uses the Yacc skeleton, it follows suit.
+	* data/skeletons/yacc.c: Include limits.h and stdint.h if this
+	seems to be needed.
+	(yytype_uint8, yytype_int8, yytype_uint16, yytype_int16):
+	If available, use GCC predefined macros __INT_MAX__ etc. to select
+	a “least” type, as this avoids namespace hassles.  Otherwise, if
+	available fall back on selecting a “least” type via the C99 macros
+	INT_MAX, INT_LEAST8_MAX, etc.  Otherwise, fall further back on one of
+	the builtin C99 types signed char, short, and int.  Make sure that
+	any selected type promotes to int.  Ignore any macros YYTYPE_INT16,
+	YYTYPE_INT8, YYTYPE_UINT16, YYTYPE_UINT8 defined by the user.
+	(ptrdiff_t, PTRDIFF_MAX): Simplify in the light of the above.
+	(yytype_uint8, yytype_uint16): Do not assume that unsigned char
+	and unsigned short promote to int, as this isn’t true on some
+	platforms (e.g., TI TMS320C55x).
+	* src/parse-gram.y (YYTYPE_INT16, YYTYPE_INT8, YYTYPE_UINT16)
+	(YYTYPE_UINT8): Remove, as these are no longer effective.
+
+2019-10-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Port better to C++ platforms
+	* data/skeletons/yacc.c (YYPTRDIFF_T, YYPTRDIFF_MAXIMUM):
+	Default to long, not int.
+	(yy_lac_stack_realloc, yy_lac, yytnamerr, yyparse):
+	Avoid casts to YYPTRDIFF_T that were masking the problem.
+
+2019-10-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Work around GCC 4.8 false alarms without casts
+	* data/skeletons/yacc.c (yyparse):
+	Initialize yyes_capacity with a signed expression.
+	* tests/local.at (AT_YYLEX_DEFINE(c)):
+	Use enum to avoid cast.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: make recheck
+	* tests/local.mk (recheck): New.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: also show suggested %empty
+	* src/reader.c (grammar_rule_check_and_complete): Suggest to add %empty.
+	* tests/actions.at, tests/diagnostics.at: Adjust expectations.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: sort symbols per location
+	Because the checking of the grammar is made by phases after the whole
+	grammar was read, we sometimes have diagnostics that look weird.  In
+	some case, within one type of checking, the entities are not checked
+	in the order in which they appear in the file.  For instance, checking
+	symbols is done on the list of symbols sorted by tag:
+
+	    foo.y:1.20-22: warning: symbol BAR is used, but is not defined as a token and has no rules [-Wother]
+	        1 | %destructor {} QUX BAR
+	          |                    ^~~
+	    foo.y:1.16-18: warning: symbol QUX is used, but is not defined as a token and has no rules [-Wother]
+	        1 | %destructor {} QUX BAR
+	          |                ^~~
+
+	Let's sort them by location instead:
+
+	    foo.y:1.16-18: warning: symbol 'QUX' is used, but is not defined as a token and has no rules [-Wother]
+	        1 | %destructor {} QUX BAR
+	          |                ^~~
+	    foo.y:1.20-22: warning: symbol 'BAR' is used, but is not defined as a token and has no rules [-Wother]
+	        1 | %destructor {} QUX BAR
+	          |                    ^~~
+
+	* src/location.h (location_cmp): Be robust to empty file names.
+	* src/symtab.c (symbol_cmp): Sort by location.
+	* tests/input.at: Adjust expectations.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: suggest fixes for undeclared symbols
+	From
+
+	    input.y:1.17-19: warning: symbol baz is used, but is not defined as a token and has no rules [-Wother]
+	         1 | %printer {} foo baz
+	           |                 ^~~
+
+	to
+
+	    input.y:1.17-19: warning: symbol 'baz' is used, but is not defined as a token and has no rules; did you mean 'bar'? [-Wother]
+	        1 | %printer {} foo baz
+	          |                 ^~~
+	          |                 bar
+
+	* bootstrap.conf: We need fstrcmp.
+	* src/symtab.c (symbol_from_uniqstr_fuzzy): New.
+	(complain_symbol_undeclared): Use it.
+	* tests/diagnostics.at (Suggestions): New.
+	* data/bison-default.css (insertion): Rename as...
+	(fixit-insert): this, as this is what GCC uses.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: isolate complain_symbol_undeclared
+	* src/symtab.c (complain_symbol_undeclared): New.
+	Use it.
+	Use quote on the guilty symbol (like GCC does, and we also do
+	elsewhere).
+	* tests/input.at: Adjust.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: simplify the handling of symbol and semantic_type tables
+	Both are stored in a hash, and back in the days, we used to iterate
+	over these tables using hash_do_for_each.  However, the order of
+	traversal was not deterministic, which was a nuisance for
+	deterministic output (and therefore also a problem for tests).  So at
+	some point (83b60c97ee1f98bb1f15ffa38acdc4cc765515f5) we generated a
+	sorted list of these symbols, and symbols_do actually iterated on that
+	list.  But we kept the constraints of using hash_do_for_each, which
+	requires a lot of ceremonial code, and makes it hard/unnatural to
+	preserve data between iterations (see the next commit).
+
+	Alas, this is C, not C++.
+
+	Let's remove this abstraction, and directly iterate on the sorted
+	tables.
+
+	* src/symtab.c (symbols_do): Remove.
+	Adjust callers to use a simple for-loop instead.
+	(table_sort): New.
+	(symbols_check_defined): Use it.
+	(symbol_check_defined_processor, symbol_pack_processor)
+	(semantic_type_check_defined_processor, symbol_translation_processor):
+	Remove.
+	Simplify the corresponding functions (that no longer need to return a
+	bool).
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: display suggested update after the caret-info
+	This commit adds the suggestion in green, on the line below the
+	caret-and-tildes.
+
+	    foo.y:1.1-14: warning: deprecated directive: '%error-verbose', use '%define parse.error verbose' [-Wdeprecated]
+	        1 | %error-verbose
+	          | ^~~~~~~~~~~~~~
+	          | %define parse.error verbose
+
+	The current approach, with location_caret_suggestion, is fragile:
+	there's a protocol of calls to the complain functions which is strict.
+	We should rather have a richer structure describing the diagnostics,
+	including with submessages such as the suggestions, passed in the end
+	to the routines in charge of formatting and printing them.
+
+	* src/location.h, src/location.c (location_caret_suggestion): New.
+	* src/complain.c (deprecated_directive): Use it.
+	* tests/diagnostics.at, tests/input.at: Adjust expectations.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: isolate caret_set_column
+	* src/location.c (caret_info): Add width and skip members.
+	(caret_set_column): New.
+	Use it.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: isolate caret_set_file
+	* src/location.c (caret_set_file): New.
+	Store the current line's length in caret_info.line_len.
+	Pay attention to fseek's return value.
+	Extracted from...
+	(location_caret): here.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: use tput to get the number of columns
+	* tests/bison.in: here.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: update
+	I no longer agree with that item, there are indeed two things to
+	report: lack of definition, and being useless.  We could have either
+	one without the other, they are not directly related.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: work around warnings from G++ 4.8
+	input.c: In function 'int yyparse()':
+	input.c: error: conversion to 'long int' from 'long unsigned int'
+	                may change the sign of the result [-Werror=sign-conversion]
+	   yyes_capacity = sizeof yyesa / sizeof *yyes;
+	                                ^
+	cc1plus: all warnings being treated as errors
+
+	* data/skeletons/yacc.c: here.
+
+2019-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: work around warnings from Clang++ 3.3 and 3.4
+	When we run the test suite with these C++ compilers to compile C code,
+	we get:
+
+	    239. synclines.at:440: testing syncline escapes: yacc.c ...
+	    ../../tests/synclines.at:440: $CC $CFLAGS $CPPFLAGS \"\\\"\".c -o \"\\\"\" ||
+	              exit 77
+	    stderr:
+	    stdout:
+	    ../../tests/synclines.at:440: COLUMNS=1000; export COLUMNS;  bison --color=no -fno-caret  -o \"\\\"\".c \"\\\"\".y
+	    ../../tests/synclines.at:440: $CC $CFLAGS $CPPFLAGS  $LDFLAGS -o \"\\\"\" \"\\\"\".c $LIBS
+	    stderr:
+	    "\"".c:1102:41: error: implicit conversion loses integer precision: 'long' to 'int' [-Werror,-Wshorten-64-to-32]
+	          YYPTRDIFF_T yysize = yyssp - yyss + 1;
+	                      ~~~~~~   ~~~~~~~~~~~~~^~~
+	    1 error generated.
+
+	    193. conflicts.at:545: testing parse.error=verbose and consistent errors: lr.type=canonical-lr parse.lac=full ...
+	    input.c:737:75: error: implicit conversion loses integer precision: 'long' to 'int'
+	                           [-Werror,-Wshorten-64-to-32]
+	      YYPTRDIFF_T yysize_old = *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
+	                  ~~~~~~~~~~                               ~~~~~~~~~~~~~~~~~~~^~~
+	    input.c:901:48: error: implicit conversion loses integer precision: 'long' to 'int'
+	                           [-Werror,-Wshorten-64-to-32]
+	                YYPTRDIFF_T yysize = yyesp - *yyes + 1;
+	                            ~~~~~~   ~~~~~~~~~~~~~~^~~
+
+	* data/skeletons/yacc.c: Add more casts.
+
+2019-10-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: avoid a GCC 4.8 warning
+	GCC 4.8 reports:
+
+	    input.y:57:33: error: conversion to 'int' from 'long unsigned int'
+	                          may alter its value [-Werror=conversion]
+	       int input_elts = sizeof input / sizeof input[0];
+	                                     ^
+
+	* tests/local.at (AT_YYLEX_DEFINE(c)): Add a cast (sorry, Paul!).
+
+2019-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* data/skeletons/glr.c (yysplitStack): Pacify Clang 8.
+
+2019-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Avoid quiet conversion of pointer to bool
+	* src/location.c (caret_set_file):
+	* src/scan-code.l (contains_dot_or_dash):
+	Do not quietly convert pointer to bool, as Oracle Developer Studio
+	12.6 complains and it is arguably confusing style anyway.
+
+2019-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Port ARGMATCH_DEFINE_GROUP calls to C99
+	* src/complain.c, src/getargs.c: Omit ‘;’ after call
+	to ARGMATCH_DEFINE_GROUP, as C99 does not allow ‘;’ there.
+
+2019-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Port lexcalc scan.l to Solaris 10
+	* examples/c/lexcalc/scan.l: Include errno.h.
+
+2019-10-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: use casts instead of pragmas when losing integer width
+	For instance with Clang 4, 8, etc.:
+
+	    input.c:1166:12: error: implicit conversion loses integer precision: 'int' to 'yy_state_num' (aka 'signed char') [-Werror,-Wconversion]
+	      *yyssp = yystate;
+	             ~ ^~~~~~~
+
+	And GCC 8:
+
+	    input.c:1166:12: error: implicit conversion loses integer precision: 'int' to 'yy_state_num' (aka 'signed char') [-Werror,-Wimplicit-int-conversion]
+	      *yyssp = yystate;
+	             ~ ^~~~~~~
+
+	* data/skeletons/yacc.c (YY_CONVERT_INT_BEGIN): Remove.
+	Adjust callers.
+
+2019-10-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: fix warnings about undefined macros
+	For instance with GCC 4.9 and --enable-gcc-warnings:
+
+	    25. input.at:1201: testing Torturing the Scanner ...
+	    ../../tests/input.at:1344: $CC $CFLAGS $CPPFLAGS  -c -o input.o input.c
+	    stderr:
+	    input.c:239:18: error: "__STDC_VERSION__" is not defined [-Werror=undef]
+	     # elif 199901 <= __STDC_VERSION__
+	                      ^
+	    input.c:256:18: error: "__STDC_VERSION__" is not defined [-Werror=undef]
+	     # elif 199901 <= __STDC_VERSION__
+	                      ^
+
+	* data/skeletons/yacc.c: Check that __STDC_VERSION__ is defined before
+	using it.
+
+2019-10-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check more state numbers
+	* tests/torture.at (State number type): Also check 128, 129 and
+	32768.
+
+2019-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* doc/bison.texi (Table of Symbols): Mention memory exhaustion.
+
+2019-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify mfcalc error handling
+	* doc/bison.texi (Mfcalc Symbol Table, Mfcalc Lexer):
+	Don’t abort on memory allocation failure or integer overflow.
+	Instead, comment that these things aren’t checked for.
+
+2019-10-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix comments suggesting to use %require
+	* data/skeletons/location.cc, data/skeletons/stack.hh: Here.
+
+2019-10-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: simplify uses of size_t
+	* data/skeletons/stack.hh (stack::index_type): New type.
+	(stack::size, stack::operator[]): Be about an index_type rather than a
+	size_type and an int.
+
+2019-10-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fixes for old compilers
+	On the CI with GCC 6:
+
+	    examples/c++/calc++/parser.cc:845:5: error: 'ptrdiff_t' was not declared in this scope
+	         ptrdiff_t yycount = 0;
+	         ^~~~~~~~~
+	    examples/c++/calc++/parser.cc:845:5: note: suggested alternatives:
+	    /usr/include/x86_64-linux-gnu/c++/6/bits/c++config.h:202:28: note:   'std::ptrdiff_t'
+	       typedef __PTRDIFF_TYPE__ ptrdiff_t;
+	                                ^~~~~~~~~
+
+	* data/skeletons/lalr1.cc: Qualify ptrdiff_t and size_t with std::.
+
+2019-10-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: be robust to -DNDEBUG
+	input.y: In function 'yylex':
+	input.y:67:7: error: unused variable 'input_elts' [-Werror=unused-variable]
+	   int input_elts = sizeof input / sizeof input[0];
+	       ^~~~~~~~~~
+	cc1: all warnings being treated as errors
+
+	* tests/input.at, tests/local.at: Avoid that.
+
+2019-10-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: remove the symlink before creating it
+	Currently we fail if we rerun a job that succeeded to push the
+	tarball.
+
+2019-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Adjust ‘Big horizontal’ test case
+	* tests/torture.at (Big horizontal): Adjust to recent changes with
+	integers.  If there are states 0..256, Bison now uses a signed
+	rather than an unsigned 16-bit integer.
+
+2019-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	regen
+
+2019-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Prefer signed to unsigned integers
+	This patch contains more fixes to prefer signed to unsigned
+	integer types, as modern tools like 'gcc -fsanitize=undefined'
+	can check for signed integer overflow but not unsigned overflow.
+	* NEWS: Document the API change.
+	* boostrap.conf (gnulib_modules): Add intprops.
+	* data/skeletons/glr.c: Include stddef.h and stdint.h,
+	since this skeleton can assume C99 or later.
+	(YYSIZEMAX): Now signed, and the minimum of SIZE_MAX and PTRDIFF_MAX.
+	(yybool) [!__cplusplus]: Now signed (which is how bool behaves).
+	(YYTRANSLATE): Avoid use of unsigned, and make the macro
+	safe even for values greater than UINT_MAX.
+	(yytnamerr, struct yyGLRState, struct yyGLRStateSet, struct yyGLRStack)
+	(yyaddDeferredAction, yyinitStateSet, yyinitGLRStack)
+	(yyexpandGLRStack, yymarkStackDeleted, yyremoveDeletes)
+	(yyglrShift, yyglrShiftDefer, yy_reduce_print, yydoAction)
+	(yyglrReduce, yysplitStack, yyreportTree, yycompressStack)
+	(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError)
+	(yyparse, yy_yypstack, yypstack, yypdumpstack):
+	* tests/input.at (Torturing the Scanner):
+	Prefer ptrdiff_t to size_t.
+	* data/skeletons/c++.m4 (b4_yytranslate_define):
+	* src/AnnotationList.c (AnnotationList__computePredecessorAnnotations):
+	* src/AnnotationList.h (AnnotationIndex):
+	* src/InadequacyList.h (InadequacyListNodeCount):
+	* src/closure.c (closure_new):
+	* src/complain.c (error_message, complains, complain_indent)
+	(complain_args, duplicate_directive, duplicate_rule_directive):
+	* src/gram.c (nritems, ritem_print, grammar_dump):
+	* src/ielr.c (ielr_compute_ritem_sees_lookahead_set)
+	(ielr_item_has_lookahead, ielr_compute_annotation_lists)
+	(ielr_compute_lookaheads):
+	* src/location.c (columns, boundary_print, location_print):
+	* src/muscle-tab.c (muscle_percent_define_insert)
+	(muscle_percent_define_check_values):
+	* src/output.c (prepare_rules, prepare_actions):
+	* src/parse-gram.y (id, handle_require):
+	* src/reader.c (record_merge_function_type, packgram):
+	* src/reduce.c (nuseless_productions, nuseless_nonterminals)
+	(inaccessable_symbols):
+	* src/relation.c (relation_print):
+	* src/scan-code.l (variant, variant_table_size, variant_count)
+	(variant_add, get_at_spec, show_sub_message, show_sub_messages)
+	(parse_ref):
+	* src/scan-gram.l (<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>)
+	(scan_integer, convert_ucn_to_byte, handle_syncline):
+	* src/scan-skel.l (at_complain):
+	* src/symtab.c (complain_symbol_redeclared)
+	(complain_semantic_type_redeclared, complain_class_redeclared)
+	(symbol_class_set, complain_user_token_number_redeclared):
+	* src/tables.c (conflict_tos, conflrow, conflict_table)
+	(conflict_list, save_row, pack_vector):
+	* tests/local.at (AT_YYLEX_DEFINE(c)):
+	Prefer signed to unsigned integer.
+	* data/skeletons/lalr1.cc (yy_lac_check_):
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR):
+	* tests/local.at (AT_YYLEX_DEFINE(c)):
+	Omit now-unnecessary casts.
+	* data/skeletons/location.cc (b4_location_define):
+	* doc/bison.texi (Mfcalc Lexer, C++ position, C++ location):
+	Prefer int to unsigned for line and column numbers.
+	Change example to abort explicitly on memory exhaustion,
+	and fix an off-by-one bug that led to undefined behavior.
+	* data/skeletons/stack.hh (stack::operator[]):
+	Also allow ptrdiff_t indexes.
+	(stack::pop, slice::slice, slice::operator[]):
+	Index arg is now ptrdiff_t, not int.
+	(stack::ssize): New method.
+	(slice::range_): Now ptrdiff_t, not int.
+	* data/skeletons/yacc.c (b4_state_num_type): Remove.
+	All uses replaced by b4_int_type.
+	(YY_CONVERT_INT_BEGIN, YY_CONVERT_INT_END): New macros.
+	(yylac, yyparse): Use them around conversions that -Wconversion
+	would give false alarms about. 	Omit unnecessary casts.
+	(yy_stack_print): Use int rather than unsigned, and omit
+	a cast that doesn’t seem to be needed here any more.
+	* examples/c++/variant.yy (yylex):
+	* examples/c++/variant-11.yy (yylex):
+	Omit no-longer-needed conversions to unsigned.
+	* src/InadequacyList.c (InadequacyList__new_conflict):
+	Don’t assume *node_count is unsigned.
+	* src/output.c (muscle_insert_unsigned_table):
+	Remove; no longer used.
+
+2019-10-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Prefer signed types for indexes in skeletons
+	* NEWS: Mention this.
+	* data/skeletons/c.m4 (b4_int_type):
+	Prefer char if it will do, and prefer signed types to unsigned if
+	either will do.
+	* data/skeletons/glr.c (yy_reduce_print): No need to
+	convert rule line to unsigned long.
+	(yyrecoverSyntaxError): Put action into an int to
+	avoid GCC warning of using a char subscript.
+	* data/skeletons/lalr1.cc (yy_lac_check_, yysyntax_error_):
+	Prefer ptrdiff_t to size_t.
+	* data/skeletons/yacc.c (b4_int_type):
+	Prefer signed types to unsigned if either will do.
+	* data/skeletons/yacc.c (b4_declare_parser_state_variables):
+	(YYSTACK_RELOCATE, YYCOPY, yy_lac_stack_realloc, yy_lac)
+	(yytnamerr, yysyntax_error, yyparse): Prefer ptrdiff_t to size_t.
+	(YYPTRDIFF_T, YYPTRDIFF_MAXIMUM): New macros.
+	(YYSIZE_T): Fix "! defined YYSIZE_T" typo.
+	(YYSIZE_MAXIMUM): Take the minimum of PTRDIFF_MAX and SIZE_MAX.
+	(YYSIZEOF): New macro.
+	(YYSTACK_GAP_MAXIMUM, YYSTACK_BYTES, YYSTACK_RELOCATE)
+	(yy_lac_stack_realloc, yyparse): Use it.
+	(YYCOPY, yy_lac_stack_realloc): Cast to YYSIZE_T to pacify GCC.
+	(yy_reduce_print): Use int instead of unsigned long when int
+	will do.
+	(yy_lac_stack_realloc): Prefer long to unsigned long when
+	either will do.
+	* tests/regression.at: Adjust to these changes.
+
+2019-09-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: use the most appropriate integral type for state numbers
+	Currently we properly use the "best" integral type for tables,
+	including those storing state numbers.  However the variables for
+	state numbers used in yyparse (and its dependencies such as
+	yy_stack_print) still use int16_t invariably.  As a consequence, very
+	large models overflow these variables.
+
+	Let's use the "best" type for these variables too.  It turns out that
+	we can still use 16 bits for twice larger automata: stick to unsigned
+	types.
+
+	However using 'unsigned' when 16 bits are not enough is troublesome
+	and generates tons of warnings about signedness issues.  Instead,
+	let's use 'int'.
+
+	Reported by Tom Kramer.
+	https://lists.gnu.org/archive/html/bug-bison/2019-09/msg00018.html
+
+	* data/skeletons/yacc.c (b4_state_num_type): New.
+	(yy_state_num): Be computed from YYNSTATES.
+	* tests/linear: New.
+	* tests/torture.at (State number type): New.
+	Use it.
+
+2019-09-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: introduce a type for states
+	* data/skeletons/yacc.c (yy_state_num): New.
+	Use it for arrays of states.
+
+2019-09-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: prefer symbolic values rather than litterals
+	Instead of
+
+	    #define YYPACT_NINF -130
+	    #define yypact_value_is_default(Yystate) \
+	      (!!((Yystate) == (-130)))
+
+	generate
+
+	    #define YYPACT_NINF (-130)
+	    #define yypact_value_is_default(Yyn) \
+	      ((Yyn) == YYPACT_NINF)
+
+	* data/skeletons/c.m4 (b4_table_value_equals): Add support for $4.
+	* data/skeletons/glr.c, data/skeletons/yacc.c: Use it.
+	Also, use shorter macro argument names, the name of the macro is clear
+	enough.
+
+2019-09-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: change misleading macro argument name
+	* data/skeletons/glr.c, data/skeletons/yacc.c
+	(yypact_value_is_default): It does not take a rule number as argument.
+
+2019-09-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	Merge remote-tracking branch 'upstream/maint'
+	* upstream/maint:
+	  c++: add copy ctors for compatibility with the IAR compiler
+	  CI: show git status
+	  CI: disable ICC
+	  tests: pass -jN from Make to the test suite
+	  quotearg: avoid leaks
+	  maint: post-release administrivia
+
+2019-09-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: add copy ctors for compatibility with the IAR compiler
+	Reported by Andreas Damm.
+	https://savannah.gnu.org/support/?110032
+
+	* data/skeletons/lalr1.cc (stack_symbol_type::operator=): New
+	overload, const, to please the IAR C++ compiler (version ca 2013).
+
+2019-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: show git status
+
+2019-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: disable ICC
+	It seems that Intel changed something in their license management.
+	https://github.com/nemequ/icc-travis/issues/15
+
+2019-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: pass -jN from Make to the test suite
+	I am sooooo tired of typing "make -j5 TESTSUITEFLAGS=-j5"...
+	Should have done this years ago.
+
+	* cfg.mk (TESTSUITEFLAGS): here.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	quotearg: avoid leaks
+	Reported by Tomasz Kłoczko.
+	https://lists.gnu.org/archive/html/bug-bison/2019-09/msg00008.html
+
+	* src/main.c (main): Free quotearg's memory later.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: get the screen width from the terminal
+	* bootstrap.conf: We need winsz-ioctl and winsz-termios.
+	* src/location.c (columns): Use winsize to get the number of
+	columns.
+	Code taken from the GNU Coreutils.
+	* src/location.h, src/location.c (caret_init): New.
+	* src/complain.c (complain_init): Call it.
+	* tests/bison.in: Export COLUMNS so that users of tests/bison can
+	enjoy proper line truncation.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: don't print ellipsis on the caret line
+	From
+
+	    9 | ...TUVWXYZ  ABCDEFGHIJKLMNOPQRSTUVWXYZ  ABCDEFGHIJKL
+	      | ...         ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	to
+
+	    9 | ...TUVWXYZ  ABCDEFGHIJKLMNOPQRSTUVWXYZ  ABCDEFGHI...
+	      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	* src/location.c (location_caret): here.
+	* tests/diagnostics.at: Adjust expectations.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: also show truncation at the end of line with "..."
+	From
+
+	    9 | ...TUVWXYZ  ABCDEFGHIJKLMNOPQRSTUVWXYZ  ABCDEFGHIJKL
+	      | ...         ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	to
+
+	    9 | ...TUVWXYZ  ABCDEFGHIJKLMNOPQRSTUVWXYZ  ABCDEFGHI...
+	      | ...         ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	* src/location.c (location_caret): here.
+	* tests/diagnostics.at: Adjust expectations.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: check that quoted lines are truncated
+	* tests/diagnostics.at (Screen width: 60 columns, Screen width: 80
+	columns, Screen width: 200 columns): New tests.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: truncate quoted sources to fit the screen
+	* src/location.c (min_int, columns): New.
+	(location_caret): Compute the line width.  Based on it, compute how
+	many columns must be skipped before the quoted location and truncated
+	after, to fit the sceen width.
+	* tests/local.at (AT_QUELL_VALGRIND): Transform into...
+	(AT_SET_ENV_IF, AT_SET_ENV): these.
+	Define COLUMNS to protect the test suite from the user's environment.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: learn how to count column number with multibyte chars
+	So far diagnostics were cheating: in addition to the 'column' field of
+	locations (based on actual screen width per multibyte characters and
+	on tabulation expansion), the scanner sets the 'byte' field.
+	Diagnostics used this byte count to decide where to insert (color)
+	style.
+
+	We want to be able to truncate the quoted lines when there are too
+	wide to fit the screen.  This requires that the diagnostics learn how
+	to count columns, the byte-in-boundary trick no longer works.
+
+	Bytes are still used for fix-its.
+
+	* bootstrap.conf: We need mbfile for mbf_getc.
+	* src/location.c (caret_info): We need an mbfile.
+	(caret_set_file): Initialize it.
+	(caret_getc): Convert to mbfile.
+	(location_caret): Instead of relying on the byte position to decide
+	where to insert the color style, count the current column using
+	boundary_compute.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style: rename member for clariy
+	* src/location.c (caret_info): Now that we no longer have a 'file'
+	member (see previous commit), rename 'source' as 'file'.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style: use a boundary to track the caret_info
+	* src/location.c (caret_info): Replace file and line with pos, a
+	boundary.  This will allow us to use features of the boundary type,
+	such as boundary_compute.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: extract boundary_compute from location_compute
+	The handling of the contributions of the tabulations in the columns is
+	burried inside location_compute.  We will soon be willing to use the
+	boundary part of the computation (to compute the current column number
+	each time we read a multibyte char).
+
+	* src/location.c (boundary_compute): New, extracted from...
+	(location_compute): here.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style: add caret_set_file
+	To make the following commits easier to read.
+
+	* src/location.c (caret_set_file): New.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style: minor changes
+	* src/location.c (location_caret): Factor two branches of an if.
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: show git status
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: update ignores
+
+2019-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: update ignores
+
+2019-09-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	quotearg: avoid leaks
+	Reported by Tomasz Kłoczko.
+	https://lists.gnu.org/archive/html/bug-bison/2019-09/msg00008.html
+
+	* src/main.c (main): Free quotearg's memory later.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: pass -jN from Make to the test suite
+	I am sooooo tired of typing "make -j5 TESTSUITEFLAGS=-j5"...
+	Should have done this years ago.
+
+	* cfg.mk (TESTSUITEFLAGS): here.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: handle eof in yytranslate
+	* data/skeletons/lalr1.java (yytranslate_): Handle eof here, as is done
+	in lalr1.cc.
+	* tests/javapush.at: Adjust.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: handle eof in yytranslate
+	This changes the traces from
+
+	    Reading a token:
+	    Now at end of input.
+
+	to
+
+	    Reading a token:
+	    Next token is token $end (7FFEE56E6474)
+
+	which is ok.  Actually it is even better, as it gives the location
+	when locations are enabled, and is clearer when rules explicitly use
+	the EOF token.
+
+	* data/skeletons/lalr1.d (yytranslate_): Handle eof here, as is done
+	in lalr1.cc.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: use api.token.raw
+	* src/parse-gram.y: Here.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: document it
+	* doc/bison.texi: here.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: cannot be used with character literals
+	* src/parse-gram.y (CHAR): api.token.raw and character literals are
+	mutually exclusive.
+	* tests/input.at (Character literals and api.token.raw): New.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: apply to the other skeletons
+	* data/skeletons/c++.m4, data/skeletons/glr.c,
+	* data/skeletons/lalr1.c, data/skeletons/lalr1.java:
+	Add support for api.token.raw.
+
+	* tests/scanner.at: Check them.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: check it
+	* tests/local.at (AT_TOKEN_RAW_IF): New.
+	* tests/local.mk: New.
+	Use it.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.token.raw: implement
+	Bison used to feature %raw, documented as follows:
+
+	    @item %raw
+	    The output file @file{@var{name}.h} normally defines the tokens with
+	    Yacc-compatible token numbers.  If this option is specified, the
+	    internal Bison numbers are used instead.  (Yacc-compatible numbers start
+	    at 257 except for single character tokens; Bison assigns token numbers
+	    sequentially for all tokens starting at 3.)
+
+	Unfortunately, as far as I can tell, it never worked: token numbers
+	are indeed changed in the generated tables (from external token number
+	to internal), yet the code was still applying the mapping from
+	external token numbers to internal token numbers.
+
+	This commit reintroduces the feature as it was expected to be.
+
+	* data/skeletons/bison.m4 (b4_token_format): When api.token.raw is
+	enabled, use the internal token number.
+	* data/skeletons/yacc.c (yytranslate): Don't emit if api.token.raw is
+	enabled.
+	(YYTRANSLATE): Adjust.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: tidy yacc.c
+	* data/skeletons/yacc.c: Include 'c.m4' first.
+	Then sort the handling of %define variables.
+	* tests/input.at: Adjust.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: disable ICC
+	It seems that Intel changed something in their license management.
+	https://github.com/nemequ/icc-travis/issues/15
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix use of complain_indent
+	* src/symtab.c (symbol_class_set): Here.
+	* tests/diagnostics.at, tests/input.at, tests/regression.at: Adjust
+	expectations.
+
+2019-09-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	input: stop treating lone CRs as end-of-lines
+	We used to treat lone CRs (\r, aka ^M) as regular NLs (\n), probably
+	to please Classic MacOS.  As of today, it makes more sense to treat \r
+	like a plain white space character.
+
+	https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00027.html
+
+	* src/scan-gram.l (no_cr_read): Remove.  Instead, use...
+	(eol): this new abbreviation denoting end-of-line.
+	* src/location.c (caret_getc): New.
+	(location_caret): Use it.
+	* tests/diagnostics.at (Carriage return): Adjust expectations.
+	(CR NL): New.
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	Merge tag 'v3.4.2' into HEAD
+	bison 3.4.2
+
+	* tag 'v3.4.2': (24 commits)
+	  version 3.4.2
+	  CI: always uninstall icc
+	  news: more bug fixes thanks to Marc Schönefeld
+	  diagnostics: beware of unexpected EOF when quoting the source file
+	  gnulib: update
+	  build: fix distcheck
+	  tests: add noexcept to please GCC 9
+	  news: update
+	  fix: don't die when EOF token is defined twice
+	  tests: check token redeclaration
+	  yacc.c: beware of GCC's -Wmaybe-uninitialized
+	  glr.c: initialize vector of bools
+	  gnulib: update
+	  check for memory exhaustion
+	  diagnostics: avoid global variables
+	  diagnostics: fix invalid error message indentation
+	  git: ignore files generated in gnulib-po
+	  c++: avoid duplicate definition of YYUSE
+	  gnulib: update
+	  CI: more compilers
+	  ...
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4.2
+	* NEWS: Record release date.
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: always uninstall icc
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: more bug fixes thanks to Marc Schönefeld
+
+2019-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: beware of unexpected EOF when quoting the source file
+	When the input file contains lone CRs (aka, ^M, \r), the locations see
+	a new line.  Diagnostics look only at \n as end-of-line, so sometimes
+	there is an offset in diagnostics.  Worse yet: sometimes we loop
+	endlessly waiting for \n to come from a continuous stream of EOF.
+
+	Fix that:
+	- check for EOF
+	- beware not to call end_use_class if begin_use_class was not
+	  called (which would abort).  This could happen if the actual
+	  line is shorter that the expected one.
+
+	Prompted by a (private) report from Marc Schönefeld.
+
+	* src/location.c (location_caret): here.
+	* tests/diagnostics.at (Carriage return): New.
+
+2019-09-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Contains the creation of the xhash module.
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-09/msg00046.html
+
+	* src/muscle-tab.c, src/state.c, src/symtab.c, src/uniqstr.c:
+	Use hash_xinitialize.
+
+2019-09-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix distcheck
+	* configure.ac (gl_LIBOBJS): Adjust so that the generated files are
+	indeed the expected ones.
+
+2019-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: beware of unexpected EOF when quoting the source file
+	When the input file contains lone CRs (aka, ^M, \r), the locations see
+	a new line.  Diagnostics look only at \n as end-of-line, so sometimes
+	there is an offset in diagnostics.  Worse yet: sometimes we loop
+	endlessly waiting for \n to come from a continuous stream of EOF.
+
+	Fix that:
+	- check for EOF
+	- beware not to call end_use_class if begin_use_class was not
+	  called (which would abort).  This could happen if the actual
+	  line is shorter that the expected one.
+
+	Prompted by a (private) report from Marc Schönefeld.
+
+	* src/location.c (location_caret): here.
+	* tests/diagnostics.at (Carriage return): New.
+
+2019-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Contains the creation of the xhash module.
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-09/msg00046.html
+
+	* src/muscle-tab.c, src/state.c, src/symtab.c, src/uniqstr.c:
+	Use hash_xinitialize.
+
+2019-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix distcheck
+	* configure.ac (gl_LIBOBJS): Adjust so that the generated files are
+	indeed the expected ones.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: add noexcept to please GCC 9
+	    bison/tests/c++.at:552: bison --color=no -fno-caret  -o list.cc list.y
+	    bison/tests/c++.at:552: $CXX $CXXFLAGS $CPPFLAGS  $LDFLAGS -o list list.cc $LIBS
+	    stderr:
+	    gcc9/c++/ext/new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = string; _Args = {string}; _Tp = string]':
+	    gcc9/c++/bits/alloc_traits.h:482:2:   required from 'static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = string; _Args = {string}; _Tp = string; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:888:67:   required from 'void std::__relocate_object_a(_Tp*, _Up*, _Allocator&) [with _Tp = string; _Up = string; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:920:47:   required from '_ForwardIterator std::__relocate_a_1(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = string*; _ForwardIterator = string*; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:942:37:   required from '_ForwardIterator std::__relocate_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = string*; _ForwardIterator = string*; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_vector.h:430:35:   required from 'static constexpr bool std::vector<_Tp, _Alloc>::_S_nothrow_relocate(std::true_type) [with _Tp = string; _Alloc = std::allocator<string>; std::true_type = std::integral_constant<bool, true>]'
+	    gcc9/c++/bits/stl_vector.h:446:28:   required from 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const string&}; _Tp = string; _Alloc = std::allocator<string>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<string*, std::vector<string> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = string*]'
+	    gcc9/c++/bits/stl_vector.h:1195:4:   required from 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = string; _Alloc = std::allocator<string>; std::vector<_Tp, _Alloc>::value_type = string]'
+	    list.y:126:110:   required from here
+	    gcc9/c++/bits/vector.tcc:459:44:   in 'constexpr' expansion of 'std::vector<string>::_S_use_relocate()'
+	    list.y:41:7: error: but 'string::string(string&&)' does not throw; perhaps it should be declared 'noexcept' [-Werror=noexcept]
+	       41 |       string (string&& s)
+	          |       ^~~~~~
+
+	* tests/c++.at (Variants): Add noexcept where appropriate.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: add noexcept to please GCC 9
+	    bison/tests/c++.at:552: bison --color=no -fno-caret  -o list.cc list.y
+	    bison/tests/c++.at:552: $CXX $CXXFLAGS $CPPFLAGS  $LDFLAGS -o list list.cc $LIBS
+	    stderr:
+	    gcc9/c++/ext/new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = string; _Args = {string}; _Tp = string]':
+	    gcc9/c++/bits/alloc_traits.h:482:2:   required from 'static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = string; _Args = {string}; _Tp = string; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:888:67:   required from 'void std::__relocate_object_a(_Tp*, _Up*, _Allocator&) [with _Tp = string; _Up = string; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:920:47:   required from '_ForwardIterator std::__relocate_a_1(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = string*; _ForwardIterator = string*; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_uninitialized.h:942:37:   required from '_ForwardIterator std::__relocate_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = string*; _ForwardIterator = string*; _Allocator = std::allocator<string>]'
+	    gcc9/c++/bits/stl_vector.h:430:35:   required from 'static constexpr bool std::vector<_Tp, _Alloc>::_S_nothrow_relocate(std::true_type) [with _Tp = string; _Alloc = std::allocator<string>; std::true_type = std::integral_constant<bool, true>]'
+	    gcc9/c++/bits/stl_vector.h:446:28:   required from 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const string&}; _Tp = string; _Alloc = std::allocator<string>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<string*, std::vector<string> >; typename std::_Vector_base<_Tp, _Alloc>::pointer = string*]'
+	    gcc9/c++/bits/stl_vector.h:1195:4:   required from 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = string; _Alloc = std::allocator<string>; std::vector<_Tp, _Alloc>::value_type = string]'
+	    list.y:126:110:   required from here
+	    gcc9/c++/bits/vector.tcc:459:44:   in 'constexpr' expansion of 'std::vector<string>::_S_use_relocate()'
+	    list.y:41:7: error: but 'string::string(string&&)' does not throw; perhaps it should be declared 'noexcept' [-Werror=noexcept]
+	       41 |       string (string&& s)
+	          |       ^~~~~~
+
+	* tests/c++.at (Variants): Add noexcept where appropriate.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: update
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	fix: don't die when EOF token is defined twice
+	With
+
+	    %token EOF 0 EOF 0
+
+	we get
+
+	    input.y:3.14-16: warning: symbol EOF redeclared [-Wother]
+	        3 | %token EOF 0 EOF 0
+	          |              ^~~
+	    input.y:3.8-10: previous declaration
+	        3 | %token EOF 0 EOF 0
+	          |        ^~~
+	    Assertion failed: (nsyms == ntokens + nvars), function check_and_convert_grammar,
+	        file /Users/akim/src/gnu/bison/src/reader.c, line 839.
+
+	Reported by Marc Schönefeld.
+
+	* src/symtab.c (symbol_user_token_number_set): Register only the
+	first definition of the end of input token.
+	* tests/input.at (Symbol redeclared): Check that case.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check token redeclaration
+	* src/symtab.c (symbol_class_set): Report previous definitions when
+	redeclared.
+	* tests/input.at (Symbol redeclared): New.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: beware of GCC's -Wmaybe-uninitialized
+	Test 400 (calc.at:773: testing Calculator api.push-pull=both
+	api.pure=full parse.error=verbose %debug %locations %defines
+	api.prefix={calc} %verbose %yacc) fails on the CI with GCC 8 on
+	Bionic:
+
+	    400. calc.at:773: testing Calculator api.push-pull=both api.pure=full parse.error=verbose %debug %locations %defines api.prefix={calc} %verbose %yacc  ...
+	    ../../tests/calc.at:773: bison --color=no -fno-caret -Wno-deprecated -o calc.c calc.y
+	    ../../tests/calc.at:773: $CC $CFLAGS $CPPFLAGS  $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+	    stderr:
+	    calc.y: In function 'int calcpush_parse(calcpstate*, int, const CALCSTYPE*, CALCLTYPE*)':
+	    calc.y:26:20: error: 'yylval.CALCSTYPE::ival' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	     %printer { fprintf (yyo, "%d", $$); } <ival>;
+	                        ^
+	    calc.c:1272:9: note: 'yylval.CALCSTYPE::ival' was declared here
+	     YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
+	             ^~~~~~
+	    cc1plus: all warnings being treated as errors
+	    stdout:
+	    ../../tests/calc.at:773: exit code was 1, expected 0
+	    400. calc.at:773: 400. Calculator api.push-pull=both api.pure=full parse.error=verbose %debug %locations %defines api.prefix={calc} %verbose %yacc  (calc.at:773): FAILED (calc.at:773)
+
+	* data/skeletons/c.m4 (yy_symbol_value_print): Disable the warning
+	locally.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: initialize vector of bools
+	The CI, with CC='gcc-7 -fsanitize=undefined,address
+	-fno-omit-frame-pointer', reports:
+
+	    calc.cc:1652:50: runtime error: load of value 190, which is not a valid value for type 'bool'
+	    ../../tests/calc.at:867: cat stderr
+	    --- expout	2019-09-05 20:30:37.887257545 +0000
+	    +++ /home/travis/build/bison-3.4.1.72-79a1-dirty/_build/tests/testsuite.dir/at-groups/438/stdout	2019-09-05 20:30:37.887257545 +0000
+	    @@ -1 +1,2 @@
+	     syntax error
+	    +calc.cc:1652:50: runtime error: load of value 190, which is not a valid value for type 'bool'
+	    438. calc.at:867: 438. Calculator glr.cc  (calc.at:867): FAILED (calc.at:867)
+
+	The problem is that yylookaheadNeeds is not initialized in
+	yyinitStateSet, and when it is copied, the value is not 0 or 1.
+
+	* data/skeletons/glr.c (yylookaheadNeeds): Initialize yylookaheadNeeds.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Contains a fix for
+	https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00016.html.
+	See
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-09/msg00005.html.
+	Reported by 江 祖铭 (Zu-Ming Jiang).
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	check for memory exhaustion
+	hash_initialize returns NULL when out of memory.  Check for it, and
+	die cleanly instead of crashing.
+
+	Reported by 江 祖铭 (Zu-Ming Jiang).
+	https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00015.html
+
+	* src/muscle-tab.c, src/state.c, src/symtab.c, src/uniqstr.c:
+	Check the value returned by hash_initialize.
+
+2019-09-08  László Várady  <laszlo.varady93@gmail.com>
+
+	diagnostics: avoid global variables
+	* src/complain.c (indent_ptr): Remove.
+	(error_message, complains): Take indent as an argument.
+	Adjust callers.
+
+2019-09-08  László Várady  <laszlo.varady93@gmail.com>
+
+	diagnostics: fix invalid error message indentation
+	https://lists.gnu.org/archive/html/bison-patches/2019-08/msg00007.html
+
+	When Bison is started with a flag that suppresses warning messages, the
+	error_message() function can produce a few gigabytes of indentation
+	because of a dangling pointer.
+
+	* src/complain.c (error_message): Don't reset indent_ptr here, but...
+	(complain_indent): here.
+	* tests/diagnostics.at (Indentation with message suppression): Check
+	this case.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: ignore files generated in gnulib-po
+	Because of them, the CI generates "-dirty" tarballs.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid duplicate definition of YYUSE
+	Reported by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-06/msg00009.html
+
+	* data/skeletons/lalr1.cc (b4_shared_declarations): Remove the
+	duplicate definition of YYUSE, the other one coming from
+	b4_attribute_define.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	This update brings file from Gettext 0.20, which is not available on
+	the CI yet.
+
+	.travis.yml: Adjust.
+	Use Bionic now that it's available.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: more compilers
+	* .travis.yml: Bionic is now available, with GCC8.
+	GCC7 sanitizers work, but they are too longer: cover only part 1.
+	Redefine part 1 and part 2 so that part 1 is really the core of the
+	tests: not playing with POSIX and C++ compiler for C code.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: fail fast
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: propagate sftp failures
+	* .travis.yml (stage: "compile"): here.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: avoid useless git costs
+	Travis answered favorably to my suggestion to provide a means to
+	disable git clone on some jobs (issue 7542).  See
+	https://docs.travis-ci.com/user/customizing-the-build/#disabling-git-clone.
+
+	* .travis.yml: Disable git globally, enable it for i. the compile job,
+	and ii. the test job on ICC which needs the install-icc.sh script.
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: factor
+	* .travis.yml (Clang 7 libc++ and ASAN part 2): Reuse bits from "Clang
+	7 libc++ and ASAN part 1".
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Contains a fix for
+	https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00016.html.
+	See
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-09/msg00005.html.
+	Reported by 江 祖铭 (Zu-Ming Jiang).
+
+2019-09-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	fix: don't die when EOF token is defined twice
+	With
+
+	    %token EOF 0 EOF 0
+
+	we get
+
+	    input.y:3.14-16: warning: symbol EOF redeclared [-Wother]
+	        3 | %token EOF 0 EOF 0
+	          |              ^~~
+	    input.y:3.8-10: previous declaration
+	        3 | %token EOF 0 EOF 0
+	          |        ^~~
+	    Assertion failed: (nsyms == ntokens + nvars), function check_and_convert_grammar,
+	        file /Users/akim/src/gnu/bison/src/reader.c, line 839.
+
+	Reported by Marc Schönefeld.
+
+	* src/symtab.c (symbol_user_token_number_set): Register only the
+	first definition of the end of input token.
+	* tests/input.at (Symbol redeclared): Check that case.
+
+2019-09-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check token redeclaration
+	* src/symtab.c (symbol_class_set): Report previous definitions when
+	redeclared.
+	* tests/input.at (Symbol redeclared): New.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: initialize vector of bools
+	The CI, with CC='gcc-7 -fsanitize=undefined,address
+	-fno-omit-frame-pointer', reports:
+
+	    calc.cc:1652:50: runtime error: load of value 190, which is not a valid value for type 'bool'
+	    ../../tests/calc.at:867: cat stderr
+	    --- expout	2019-09-05 20:30:37.887257545 +0000
+	    +++ /home/travis/build/bison-3.4.1.72-79a1-dirty/_build/tests/testsuite.dir/at-groups/438/stdout	2019-09-05 20:30:37.887257545 +0000
+	    @@ -1 +1,2 @@
+	     syntax error
+	    +calc.cc:1652:50: runtime error: load of value 190, which is not a valid value for type 'bool'
+	    438. calc.at:867: 438. Calculator glr.cc  (calc.at:867): FAILED (calc.at:867)
+
+	The problem is that yylookaheadNeeds is not initialized in
+	yyinitStateSet, and when it is copied, the value is not 0 or 1.
+
+	* data/skeletons/glr.c (yylookaheadNeeds): Initialize yylookaheadNeeds.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: beware of GCC's -Wmaybe-uninitialized
+	Test 400 (calc.at:773: testing Calculator api.push-pull=both
+	api.pure=full parse.error=verbose %debug %locations %defines
+	api.prefix={calc} %verbose %yacc) fails on the CI with GCC 8 on
+	Bionic:
+
+	    400. calc.at:773: testing Calculator api.push-pull=both api.pure=full parse.error=verbose %debug %locations %defines api.prefix={calc} %verbose %yacc  ...
+	    ../../tests/calc.at:773: bison --color=no -fno-caret -Wno-deprecated -o calc.c calc.y
+	    ../../tests/calc.at:773: $CC $CFLAGS $CPPFLAGS  $LDFLAGS -o calc calc.c calc-lex.c calc-main.c $LIBS
+	    stderr:
+	    calc.y: In function 'int calcpush_parse(calcpstate*, int, const CALCSTYPE*, CALCLTYPE*)':
+	    calc.y:26:20: error: 'yylval.CALCSTYPE::ival' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	     %printer { fprintf (yyo, "%d", $$); } <ival>;
+	                        ^
+	    calc.c:1272:9: note: 'yylval.CALCSTYPE::ival' was declared here
+	     YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
+	             ^~~~~~
+	    cc1plus: all warnings being treated as errors
+	    stdout:
+	    ../../tests/calc.at:773: exit code was 1, expected 0
+	    400. calc.at:773: 400. Calculator api.push-pull=both api.pure=full parse.error=verbose %debug %locations %defines api.prefix={calc} %verbose %yacc  (calc.at:773): FAILED (calc.at:773)
+
+	* data/skeletons/c.m4 (yy_symbol_value_print): Disable the warning
+	locally.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: fix LAC support
+	* data/skeletons/lalr1.cc (ctor): Initialize yy_lac_established_.
+	This is quite painful to write, and ugly to read.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: fix comment
+	* tests/atlocal.in: here.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: more compilers
+	* .travis.yml: Bionic is now available, with GCC8.
+	GCC7 sanitizers work, but they are too longer: cover only part 1.
+	Redefine part 1 and part 2 so that part 1 is really the core of the
+	tests: not playing with POSIX and C++ compiler for C code.
+
+2019-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: fail fast
+
+2019-09-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	This update brings file from Gettext 0.20, which is not available on
+	the CI yet.
+
+	.travis.yml: Adjust.
+	Use Bionic now that it's available.
+
+2019-09-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	check for memory exhaustion
+	hash_initialize returns NULL when out of memory.  Check for it, and
+	die cleanly instead of crashing.
+
+	Reported by 江 祖铭 (Zu-Ming Jiang).
+	https://lists.gnu.org/archive/html/bug-bison/2019-08/msg00015.html
+
+	* src/muscle-tab.c, src/state.c, src/symtab.c, src/uniqstr.c:
+	Check the value returned by hash_initialize.
+
+2019-08-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: LAC for C++
+
+2019-08-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: remove useless imports
+	* examples/d/calc.y, tests/calc.at: here.
+
+2019-08-18  László Várady  <laszlo.varady93@gmail.com>
+
+	diagnostics: avoid global variables
+	* src/complain.c (indent_ptr): Remove.
+	(error_message, complains): Take indent as an argument.
+	Adjust callers.
+
+2019-08-18  László Várady  <laszlo.varady93@gmail.com>
+
+	diagnostics: fix invalid error message indentation
+	https://lists.gnu.org/archive/html/bison-patches/2019-08/msg00007.html
+
+	When Bison is started with a flag that suppresses warning messages, the
+	error_message() function can produce a few gigabytes of indentation
+	because of a dangling pointer.
+
+	* src/complain.c (error_message): Don't reset indent_ptr here, but...
+	(complain_indent): here.
+	* tests/diagnostics.at (Indentation with message suppression): Check
+	this case.
+
+2019-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: use resize to shrink a vector
+	Suggested by Adrian Vogelsgesang.
+	https://lists.gnu.org/archive/html/bison-patches/2019-08/msg00009.html
+
+	* data/skeletons/lalr1.cc (yy_lac_check_): here.
+
+2019-08-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: check LAC support
+	* tests/conflicts.at, tests/input.at, tests/regression.at: here.
+
+2019-08-09  Adrian Vogelsgesang  <avogelsgesang@tableau.com>
+
+	lalr1.cc: add LAC support
+	Implement lookahead correction (LAC) for the C++ skeleton.  LAC is a
+	mechanism to make sure that we report the correct list of expected
+	tokens if a syntax error occurs.  So far, LAC was only supported for
+	the C skeleton "yacc.c".
+
+	* data/skeletons/lalr1.cc: Add LAC support.
+	* doc/bison.texi: Update.
+
+2019-08-09  Adrian Vogelsgesang  <avogelsgesang@tableau.com>
+
+	style: readability improvements to yacc.c
+	* data/skeletons/yacc.c (yysyntax_error): Change the nesting of `m4`
+	conditions slightly to make it more readable.
+	The generated C code stays unchanged.
+
+2019-08-09  Adrian Vogelsgesang  <avogelsgesang@tableau.com>
+
+	lalr1.cc: reduce "scope"
+	* data/skeletons/lalr1.cc (yy_lr_goto_state_): Make it static.
+
+2019-08-09  Adrian Vogelsgesang  <avogelsgesang@tableau.com>
+
+	lalr1.cc: fix indentation of table declarations in the header
+	* data/skeletons/lalr1.cc: Fix indentation of table declarations in
+	the generated header.
+
+2019-08-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: prepare LAC tests for more languages
+	* tests/regression.at: Use %expect to avoid warnings.
+	Set the keywords to facilitate running specific tests.
+	Use macros such as AT_YYLEX_DECLARE to facilitate tests for other
+	languages.
+	Likewise for AT_FULL_COMPILE.
+
+2019-08-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: ignore files generated in gnulib-po
+	Because of them, the CI generates "-dirty" tarballs.
+
+2019-07-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: use the modern argmatch interface
+	* src/complain.h (warnings): Remove Werror.
+	Adjust dependencies.
+	Sort.
+	Remove useless comments (see the doc in argmatch group).
+	* src/complain.c (warnings_args, warnings_types): Remove.
+	(warning_argmatch): Use argmatch_warning_value.
+	(warnings_print_categories): Use argmatch_warning_argument.
+
+2019-07-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: avoid spurious empty lines in the option table
+	In Texinfo. empty lines in multitable rows generate empty lines in the
+	output.  Avoid them altogether.
+
+	With help from Gavin Smith.
+	https://lists.gnu.org/archive/html/bug-texinfo/2019-07/msg00000.html
+
+	* build-aux/cross-options.pl: Separate rows with empty lines.
+	So, to be more readable, generate a single line for each row.
+	Use Perl format to this end.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	--fixed-output-files: detach from --yacc
+	See the previous commit.  This option should be removed, -o suffices.
+
+	* src/getargs.c (FIXED_OUTPUT_FILES): New.
+	Add support for it.
+	(getargs): Define loc, and use it.
+	This is safer when we need to pass a pointer to a location.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	%fixed-output-files: detach from %yacc
+	The name fixed-output-files is pretty clear: generate y.tab.c, as Yacc
+	does.  So let's detach this from %yacc which does more: it requires
+	POSIX Yacc behavior.
+
+	This directive is obsolete since December 29th 2001
+	8c9a50bee13474c1491df8f79f075f5214dda0d1.  It does not show in the
+	doc.  I don't want to spend more time on improving its diagnostics, it
+	could be removed just as well as far as I'm concerned.
+
+	* src/scan-gram.l, src/parse-gram.y (%fixed-output-files): Detach from
+	%yacc.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clarify control flow
+	* src/getargs.c (language_argmatch): Initialize msg.
+	Check it instead of relying on a return.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	remove MS-DOS support
+	DJGPP support was dropped in Bison 3.3
+	(c239e53bab8e87b30889ac446d3b513da9951a35).
+
+	AS_FILE_NAME was introduced in
+	ae4048011562c250d2f3c96687422d99a38745ce.
+
+	* src/getargs.c (AS_FILE_NAME): Remove.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: declare options in the same order as in --help
+	* src/getargs.c (long_options): here.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Contains a fix for argmatch to get proper man pages.
+	See https://lists.gnu.org/archive/html/bug-gnulib/2019-07/msg00038.html
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment change
+	* src/getargs.c: here.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: remove the --report=look-aheads alias
+	Years ago we moved from 'look-ahead' to 'lookahead', and that alias
+	was kept for backward compatibility.  But now that we use argmatch to
+	generate the documentation, that value clutters the doc.
+
+	* src/getargs.c (argmatch_report_args): Remove the
+	--report=look-aheads alias.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fix inaccuracies wrt --define and --force-define
+	The doc says that -Dfoo=bar is the same as %define foo "bar".  It is
+	not: the quotes are not added (and it makes a difference).
+
+	* doc/bison.texi (Tuning the Parser): Fix the definition of -D/-F
+	* src/getargs.c (usage): Likewise.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: put diagnostics related options together
+	* doc/bison.texi (Diagnostics): New section.
+	Move --warning, --color and --style there.
+	* src/getargs.c (usage): Likewise.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: move -y's documentation into "Tuning the Parser"
+	Let's clarify --help: use clearer "section" names, as in the doc.
+	Move --yacc to where it belongs.
+
+	* src/getargs.c (usage): Rename "Parser" as "Tuning the Parser", as in
+	the doc.
+	Rename "Output" as "Output Files"
+	Move --yacc to "Tuning the Parser".
+	* doc/bison.texi: Likewise.
+
+2019-07-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: document colorized diagnostics
+	* src/getargs.c (argmatch_color_group): New.
+	(usage): Document --color and --style.
+	* doc/bison.texi (Bison Options): Split into three subsections.
+	Document --color and --style.
+
+2019-07-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: use new features of the argmatch module
+	It can now generate the usage message.
+
+	* src/complain.h (feature_fixit_parsable): Rename as...
+	(feature_fixit): this, for column economy.
+	Adjust dependencies.
+	(warning_usage): New.
+	Use it.
+	* src/complain.h, src/complain.c, src/getargs.h, src/getargs.c:
+	Use ARGMATCH_DEFINE_GROUP instead of the older interface.
+
+2019-07-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	preserve the indentation in the ouput
+	Preserve the actions' initial indentation.  For instance, on
+
+	    | %define api.value.type {int}
+	    | %%
+	    | exp: exp '/' exp { if ($3)
+	    |                     $$ = $1 + $3;
+	    |                   else
+	    |                     $$ = 0; }
+
+	we used to generate
+
+	    |     { if (yyvsp[0])
+	    |                     yyval = yyvsp[-2] + yyvsp[0];
+	    |                   else
+	    |                    yyval = 0; }
+
+	now we produce
+
+	    |                  { if (yyvsp[0])
+	    |                     yyval = yyvsp[-2] + yyvsp[0];
+	    |                   else
+	    |                     yyval = 0; }
+
+	See https://lists.gnu.org/archive/html/bison-patches/2019-06/msg00012.html.
+
+	* data/skeletons/bison.m4 (b4_symbol_action): Output the code in
+	column 0, leave indentation matters to the C code.
+	* src/output.c (user_actions_output): Preserve the incoming
+	indentation in the output.
+	(prepare_symbol_definitions): Likewise for %printer/%destructor.
+	* tests/synclines.at (Output columns): New.
+
+2019-07-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: prefer passing locations by pointer
+	The code is inconsistent: sometimes we pass by value, sometimes by
+	reference.  Let's stick to the last, more conventional for large
+	values in C.
+
+	* src/scan-code.l: Pass locations by reference.
+
+2019-06-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid duplicate definition of YYUSE
+	Reported by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bug-bison/2019-06/msg00009.html
+
+	* data/skeletons/lalr1.cc (b4_shared_declarations): Remove the
+	duplicate definition of YYUSE, the other one coming from
+	b4_attribute_define.
+
+2019-06-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* examples/c/lexcalc/local.mk, examples/c/reccalc/local.mk:
+	Here.
+
+2019-06-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: restructure for clarity
+	* tests/calc.at (AT_CALC_MAIN, AT_CALC_LEX): Rewrite on top of
+	AT_LANG_DISPATCH.
+
+2019-06-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: track locations
+	* configure.ac (DCFLAGS): Pass -g.
+	* data/skeletons/d.m4 (b4_locations_if): Remove, let bison.m4's one do
+	its job.
+	* data/skeletons/lalr1.d (position): Leave filename empty by default.
+	(position::toString): Don't print empty file names.
+	(location::this): New ctor.
+	(location::toString): Match the implementations of C/C++.
+	(yy_semantic_null): Leave undefined, the previous implementation does
+	not compile.
+	* tests/calc.at: Improve the implementation for D.
+	Enable more checks, in particular using locations.
+	* tests/local.at (AT_YYERROR_DEFINE(d)): Fix its implementation.
+
+2019-06-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: style changes
+	* data/skeletons/lalr1.d: Use a more traditional quotation scheme.
+	Formatting changes.
+
+2019-06-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: put internal details inside the parser
+	Avoid name clashes, etc.
+
+	* data/skeletons/lalr1.d (YYStackElement, YYStack): Move inside the
+	parser.
+
+2019-06-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-06-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	remove "experimental" warnings
+	Sadly enough, AFAIK, there were never answers to the "More user
+	feedback will help to stabilize it" sentences.  Remove them.
+
+	* src/getargs.c: IELR, canonical LR and XML output are here to stay,
+	and they are no more experimental than some other features.
+	* doc/bison.texi: Likewise.
+	Also remove "experimental" warning for Java, LAC, LR tuning options,
+	and named references.
+
+2019-06-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: propagate sftp failures
+	* .travis.yml (stage: "compile"): here.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: honor %define parse.trace
+	* data/skeletons/lalr1.d: Don't generate debug code if parse.trace is
+	not enabled.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: style changes
+	* data/skeletons/lalr1.d: here.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: prefer delegation to duplication
+	* data/skeletons/lalr1.d: Delegate the construction of the scanner.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: enable #line output
+	* data/skeletons/d.m4 (b4_sync_start): New.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: style changes
+	* data/skeletons/lalr1.d: here.
+	* examples/d/calc.y: Remove incorrect support for decimal numbers.
+	Formatting changes.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in glr.c
+	* data/skeletons/glr.c: here.
+
+2019-06-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: honor %define parse.trace
+	* data/skeletons/lalr1.java: Don't generate debug code if parse.trace
+	is not enabled.
+
+2019-06-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: fix support for api.prefix
+	* data/skeletons/java.m4: here.
+	* tests/java.at: Check it.
+
+2019-06-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: style changes
+	* data/skeletons/lalr1.java: Use more conventional function names for
+	Java.
+	Prefer < and <= to => and >.
+	Use the same approach for m4 quotation as in the other skeletons.
+	Fix indentation issues.
+
+	* tests/calc.at, tests/java.at, tests/javapush.at: Fix quotation style.
+	(main): Use 'args', not 'argv', the former seems more conventional and
+	is used elsewhere in Bison.
+	Prefer character literals to integers to denote characters.
+	* examples/java/Calc.y: Likewise.
+
+2019-06-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: avoid useless git costs
+	Travis answered favorably to my suggestion to provide a means to
+	disable git clone on some jobs (issue 7542).  See
+	https://docs.travis-ci.com/user/customizing-the-build/#disabling-git-clone.
+
+	* .travis.yml: Disable git globally, enable it for i. the compile job,
+	and ii. the test job on ICC which needs the install-icc.sh script.
+
+2019-06-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: simplify strings to translate
+	* src/conflicts.c (log_resolution): Don't translate indentation.
+
+2019-06-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes, propagate const
+	* src/conflicts.c (conflicts_output): here.
+
+2019-06-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use clearer types
+	* src/conflicts.c (conflicts): Array of Booleans.
+
+2019-06-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: prefer %empty
+	* tests/regression.at: here.
+
+2019-06-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: factor
+	* .travis.yml (Clang 7 libc++ and ASAN part 2): Reuse bits from "Clang
+	7 libc++ and ASAN part 1".
+
+2019-06-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	lr0: more debug traces
+	* src/lr0.c (kernel_check): New.
+	(new_itemsets, save_reductions): Add traces.
+
+2019-06-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	traces: add some colors
+	This is an experiment.  Maybe more styles will be used (in which case
+	a short-hand function will be useful), maybe it will be just reverted.
+	* data/bison-default.css (.traces0): New.
+	* src/lalr.c (lalr): Use it.
+
+2019-06-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: make sure the default action properly works in C++
+	See e3fdc370495ffdedadd6ac621e32e34a0e1a9de0: in C++ we generate
+	explicitly the code for the default action instead of simply copying
+	blindly the semantic value buffer.  This is important when copying
+	raw memory is not enough, as exemplified by move-only types.
+
+	This is currently tested by examples/c++/variant.yy and variant-11.yy.
+	But it is safer to also have a test in the main test suite.
+
+	* tests/local.at (AT_REQUIRE_CXX_STD): Fix.
+	(AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS): Define/undefine
+	AT_BISON_OPTIONS.
+	* tests/c++.at (Default action): New.
+
+2019-06-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: main: support -s and -p
+	* tests/local.at (AT_MAIN_DEFINE(c), AT_MAIN_DEFINE(c++)): here.
+
+2019-06-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: remove useless support of '.' in integers
+	* tests/calc.at: here.
+	* doc/bison.texi: Avoid uninitialized variables.
+
+2019-05-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: refactor checks on sets
+	It will be convenient to check sets elsewhere.
+
+	* tests/sets.at (AT_EXTRACT_SETS): Transform into...
+	* tests/local.at (AT_SETS_CHECK): this.
+	* tests/sets.at: Adjust.
+
+2019-05-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	update-test: some file names have dashes in them
+	* build-aux/update-test (log): Rename as...
+	(trace): this, to avoid clashes with the log variable.
+	(getargs): Clarify the type of the arguments.
+
+2019-05-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: take SHELL into account
+	Reported by Dennis Clarke.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00053.html
+
+	* examples/local.mk, tests/local.mk: here.
+
+2019-05-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update to get gnulib translations
+	This update contains a fix needed for gnulib-po to work properly.
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-05/msg00146.html
+
+2019-05-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clarify the purpose of symbol_type constructors
+	Reported by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2019-02/msg00006.html
+
+	* doc/bison.texi (Complete Symbols): Here.
+
+2019-05-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	thanks: fix an address
+
+2019-05-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-05-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4.1
+	* NEWS: Record release date.
+
+2019-05-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2019-05-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: remove useless apt-get update
+	The apt addons already ran it for us, it is not needed.
+
+	* .travis.yml: here.
+
+2019-05-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: beware of to_string portability issues
+	Reported by Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00033.html
+
+	* m4/bison-cxx-std.m4 (_BISON_CXXSTD_11_snippet): Check it.
+
+2019-05-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: avoid Texinfo portability issues
+	Reported by Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00024.html
+	Fixed by Karl Berry.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00034.html
+
+	* doc/bison.texi: Don't specify the langage, rely on the default.
+	Avoid blank pages.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: don't run those that require f?lex when it's not available
+	Reported by Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00026.html
+
+	* configure.ac (FLEX_WORKS): New.
+	* examples/c/lexcalc/local.mk, examples/c/reccalc/local.mk: Use it.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: don't crash when libtextstyle is installed
+	Reported by neok m4700.
+	https://lists.gnu.org/archive/html/bison-patches/2019-05/msg00025.html
+	https://github.com/akimd/bison/pull/11
+
+	* src/complain.c (complain_init_color): style_file_prepare _needs_ a
+	string as second argument.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: avoid useless git costs
+	The final gain is small: 2h2min instead 2h9min.  But that is still an
+	improvement.
+
+	* .travis.yml (git.depth): Make the clone very shallow.
+	(git.submodules): Don't clone gnulib in test jobs.
+	(jobs.include.compile.script): Do it here.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	fix: copyable instead of copiable
+	Reported by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00020.html
+
+	* data/skeletons/lalr1.cc, doc/bison.texi: here.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.4
+	* NEWS: Record release date.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	fix: use copiable, not copyable
+	Reported by Hans Åberg.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00017.html
+
+	* data/skeletons/lalr1.cc, doc/bison.texi: here.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update for 3.4
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: adjust to GCC9 diagnostics with a margin
+	* tests/synclines.at (_AT_SYNCLINES_COMPILE): Remove the margin.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: %pure-parser is obsolete
+	Reported by Uxio Prego.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00029.html
+
+	* src/scan-gram.l, src/parse-gram.y (PERCENT_PURE_PARSER)
+	(handle_pure_parser): New.
+	Issue a deprecation/update notice for %pure-parser.
+	* doc/bison.texi (Java Bison Interface): Don't mention %pure-parser.
+	* tests/actions.at, tests/input.at: Adjust.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: clean up convention for colored diagnostics
+	* data/diagnostics.css: Rename as...
+	* data/bison-default.css: this.
+	Add the GPL header.
+	This is the convention followed by Bruno Haible in gettext.
+	Adjust dependencies.
+	* src/complain.c (complain_init_color): Use BISON_STYLE instead of
+	BISON_DIAGNOSTICS_STYLE.
+
+2019-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: use a pipeline: first build the tarball, then check it
+	Build the tarball in one job, check it in many.
+	Unfortunately no real gain in overall duration.
+	With help from Clément Démoulins.
+
+	* .travis.yml: here.
+	Remove all the tricks that were used to be able to boostrap on old
+	distros.
+	(before_install): Merge into 'script', because before_install applies
+	to all the jobs, and we don't want to run it for the 'compile' job.
+
+2019-05-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix srcdir/builddir issues
+	* examples/d/local.mk, examples/java/local.mk: here.
+
+2019-05-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	In preparation for Bison 3.4, revert to the version before this
+	commit:
+
+	    commit 03752516b21091cf3c4beea7e8b9bcad462d50ed
+	    Author: John Darrington <john@darrington.wattle.id.au>
+	    Date:   Sun May 12 00:42:36 2019 +0200
+
+	    version-etc: Ease translation.
+
+	    * lib/version-etc.c (version_etc_arn, emit_bug_reporting_address):
+	    Move URLs and formatting newlines out of translatable string.
+
+	because it changes the messages for --version, translated in
+	gnulib.po.  These changes are not yet available on the translation
+	project, so we would have a regression in the set of translated
+	strings.
+
+2019-05-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: do not use $< in plain rules
+	It works only in implicit rules (or with GNU Make, but not with
+	Solaris Make).
+
+	Reported by Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00009.html
+	Diagnosed thanks to Kiyoshi Kanazawa.
+
+	* examples/c/reccalc/local.mk, examples/d/local.mk,
+	* examples/java/local.mk: Don't use $< in non implicit rules.
+
+2019-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.3.91
+	* NEWS: Record release date.
+
+2019-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2019-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-05-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: remove incorrect comment
+	* src/getargs.c: here.
+	It's documented in getargs.h anyway.
+
+2019-05-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: use colors for diagnostics in TeX too
+	Thanks to Gavin Smith and Patrice Dumas.
+	http://lists.gnu.org/archive/html/help-texinfo/2019-04/msg00015.html
+
+	* doc/bison.texi (@colorWarning, @colorError, @colorNotice)
+	(@colorOff): Define for TeX and HTML.
+	(@dwarning, @derror, @dnotice): Use them.
+
+2019-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update to fix location tracking in UTF-8 on Solaris
+	This update contains Bruno Haible's fix for the location tracking
+	issue reported by Kiyoshi Kanazawa.
+
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-05/msg00020.html
+	https://lists.gnu.org/archive/html/bug-bison/2019-04/msg00020.html
+
+2019-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: rename --style=debug as --color=debug
+	It is more consistent with --color=html, --color=test, etc.
+
+	* src/getargs.h, src/getargs.c (style_debug): Rename as...
+	(color_debug): this.
+	(getargs_colors): Rename --style=debug as --color=debug.
+	Adjust dependencies.
+
+2019-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: support --color=html
+	Based on a message from Bruno Haible.
+	https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=commitdiff;h=fe18e92743b7226791a5f28d7c786941a1bf8cc9
+
+	This does not generate proper HTML: special characters are not escaped
+	for instance.  This is a hidden feature meant for Bison developers,
+	not end users.
+
+	* src/complain.c (complain_init_color): Support --color=html.
+
+2019-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: use %empty instead of comments
+	* tests/c++.at, tests/glr-regression.at: here.
+
+2019-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: sort them before applying them
+	An experimental commit introduced a fix-it hint that changes comments
+	such as "/* empty */" into %empty.  But in some case, because
+	diagnostics are not necessarily emitted in order, the fixits also come
+	in disorder, which must never happen, as the fixes are installed in
+	one pass.
+
+	* src/fixits.c (fixits_register): Insert them in order.
+
+2019-05-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use warning_is_enabled instead of duplicating it
+	* src/complain.c (deprecated_directive): Here.
+
+2019-05-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: be sure to preserve the action when adding %empty
+	Currently we remove the rhs to install %empty instead.
+
+	* src/reader.c (grammar_rule_check_and_complete): Insert the missing
+	%empty in front of the rhs, not in replacement thereof.
+	* tests/actions.at (Add missing %empty): Check that.
+
+2019-05-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't duplicate the portability prologue
+	* tests/actions.at, tests/input.at: Don't repeat the prologue, skip it.
+	* tests/diagnostics.at, tests/local.at: Comment changes.
+
+2019-05-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use consistently *_loc for locations
+	Some members are called foo_location, others are foo_loc.  Stick to
+	the latter.
+
+	* src/gram.h, src/location.h, src/location.c, src/output.c,
+	* src/parse-gram.y, src/reader.h, src/reader.c, src/reduce.c,
+	* src/scan-gram.l, src/symlist.h, src/symlist.c, src/symtab.h,
+	* src/symtab.c:
+	Use _loc consistently, not _location.
+
+2019-05-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clarify the use of symbol_lists' locations
+	symbol_list features a 'location' and a 'sym_loc' member.  The former
+	is expected to be set only for symbol_lists that denote a symbol (not
+	a type name), and the latter should only denote the location of the
+	symbol/type name.  Yet both are set, and the name "location" is too
+	unprecise.
+
+	* src/symlist.h, src/symlist.c (symbol_list::location): Rename as
+	rhs_loc for clarity.  Move it to the "section" of data valid only
+	for rules.
+	* src/reader.c, src/scan-code.l: Adjust.
+
+2019-05-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: update gnulib-po/.gitignore
+
+2019-04-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't require a D compiler
+	Reported by Kiyoshi Kanazawa.
+	http://lists.gnu.org/archive/html/bug-bison/2019-04/msg00018.html
+
+	* tests/atlocal.in (BISON_DC_WORKS): New.
+	* tests/local.at (AT_COMPILE_D): Use it.
+
+2019-04-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: use svg instead of png
+	* doc/bison.texi, doc/local.mk: here.
+
+2019-04-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: use colors
+	* doc/bison.texi (dwarning, derror, dnotice): New.
+	Use them in the diagnostics.
+	* doc/local.mk (AM_MAKEINFOFLAGS): Pass customization variables.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.3.90
+	* NEWS: Record release date.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: add missing CLEANFILES
+	* examples: here.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: don't generate the graph reports
+	Revert "build: also generate the graph
+	reports" (4ec413da32760defe1bf382c048d1d2f67e0b58a).  The problem is
+	Automake's ylwrap which does not rename y.dot with the appropriate
+	name.  We should completely stop using Automake's support for Yacc,
+	which is not something I will do right now.  So step back.
+
+	* Makefile.am (AM_YFLAGS_WITH_LINES): Don't pass --graph.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: don't regen the parser during dist if unneeded
+	* Makefile.am (gen-synclines): New.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: don't ship the sources generated from the parser
+	Because some of our examples use
+
+	    %C%_reccalc_SOURCES = %D%/parse.y
+
+	Automake ships parse.y and parse.c, and possibly parse.h when it
+	"understands" that there is one.  This is not what we want: ship only
+	parser.y.  Yet we still want to use Automake to compile the sources
+	from parser.y.  The easiest seems to use
+
+	    nodist_%C%_reccalc_SOURCES = %D%/parse.y
+
+	together with
+
+	    dist_reccalc_DATA = %D%/parse.y %D%/scan.l %D%/Makefile %D%/README.md
+
+	which guarantees that parse.y is indeed shipped.
+
+	* examples/c/calc/local.mk, examples/c/lexcalc/local.mk,
+	* examples/c/reccalc/local.mk: Always use nodist_*SOURCES for parsers,
+	let the dist_*_DATA rules do their job.
+
+2019-04-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: various fixes for syntax-check
+	* cfg.mk: Disable checks where needed (e.g., we do want to check the
+	behavior with tabs).
+	(sc_at_parser_check): Remove.  Unfortunately since
+	a11c144609255bc6e42c2aff83548e91cbd05425 we no longer use the './'
+	prefix to run programs in the current directory.  That was so that we
+	could run Java programs like the other, although they are no run with
+	the `./` prefix (see 967a59d2c08a33f24708450561e2f8010b604523).
+	As a consequence this sc check no longer makes sense.
+	However, since now AT_PARSER_CHECK passes the `./` prefix itself, this
+	sc-check was superfluous.
+	* examples/c/reccalc/scan.l: Use memcpy, not strncpy.
+	* src/ielr.c, src/reader.c: Obfuscate "lr(0)" so that the sc-check for
+	"space before paren" does not fire.
+	* tests/diagnostics.at: Avoid space-tab, use tab-tab.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clarify -fsyntax-error
+	* NEWS, doc/bison.texi: here.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	traces: use colors for the semantic values
+	This makes reading the trace slightly easier.  It would be very nice
+	to highlight the "big steps", especially reductions.  But this is a
+	private experiment: do not use it.
+
+	* data/diagnostics.css (value): New.
+	* src/parse-gram.y: Use no delimiters and no c quotation for strings
+	to facilitate debugging.
+	(tron, troff, TRACE): New.
+	Not very elegant, but until there is support for printf-formats in
+	libtextstyle, it shall be enough.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: give m4 precise locations
+	Currently we pass only the columns based on the screen-width, which is
+	important for the carets.  But we don't pass the bytes-based columns,
+	which is important for the colors.  Pass both.
+
+	* src/muscle-tab.c (muscle_boundary_grow): Also pass the byte-based column.
+	* src/location.c (location_caret): Clarify.
+	(boundary_set_from_string): Adjust to the new format.
+	* tests/diagnostics.at (Tabulations and multibyte characters from M4): New.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix locations coming from M4
+	Locations issued from M4 need the byte-based column for the
+	diagnostics to work properly.  Currently they were unassigned, which
+	typically resulted in partially non-colored diagnostics.
+
+	* src/location.c (boundary_set_from_string): Fix the parsed location.
+	* src/muscle-tab.c (muscle_percent_define_default): Set the byte values.
+	* tests/diagnostics.at (Locations from M4): New.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: show locations in full when debugging
+	This is meant for developers, not end users, that's why I attached it
+	to --trace.
+
+	* src/getargs.h, src/getargs.c (trace_locations): New.
+	* src/location.c (location_print): Use it.
+
+2019-04-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: use flush, not fflush
+	* src/complain.c: here.
+
+2019-04-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: use gettext-h
+	We were using the gnulib's gettext module with tricks in
+	bootstrap.conf to avoid useless files.  Instead, use gnulib's
+	gettext-h module.
+
+	* .travis.yml: Force Gettext 0.18.3 on Trusty.
+	* bootstrap.conf: Use gettext-h instead of gettext.
+	(excluded_files): Remove.
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.19.
+
+2019-04-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2019-04-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	api.location.type: support it in C
+	Reported by Balázs Scheidler.
+
+	* data/skeletons/c.m4 (b4_location_type_define): Use api.location.type
+	if defined.
+	* doc/bison.texi: Document it.
+	* tests/local.at (AT_C_IF, AT_LANG_CASE): New.
+	Support Span in C.
+	* tests/calc.at (Span): Convert it to be usable in C and C++.
+	Check api.location.type with yacc.c and glr.c.
+
+2019-04-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	updates: insert/remove %empty
+	* src/reader.c (grammar_rule_check_and_complete): Generate fixits for
+	adding/removing %empty.
+	* tests/actions.at, tests/diagnostics.at, tests/existing.at: Adjust.
+
+2019-04-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-04-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: better rule locations
+	The "identifier and colon" of a rule is implemented as a single token,
+	but whose location is only that of the identifier (so that messages
+	about the lhs of a rule are accurate).  When reducing empty rules, the
+	default location is the single point location on the end of the
+	previous symbol.  As a consequence, when Bison parses a grammar, the
+	location of the right-hand side of an empty rule is based on the
+	lhs, *independently of the position of the colon*.  And the colon can
+	be way farther, separated by comments, white spaces, including empty
+	lines.
+
+	As a result, some messages look really bad.  For instance:
+
+	    $ cat foo.y
+	    %%
+	    foo     : /* empty */
+	    bar
+	    : /* empty */
+
+	gives
+
+	    $ bison -Wall foo.y
+	    foo.y:2.4: warning: empty rule without %empty [-Wempty-rule]
+	        2 | foo     : /* empty */
+	          |    ^
+	    foo.y:3.4: warning: empty rule without %empty [-Wempty-rule]
+	        3 | bar
+	          |    ^
+
+	The carets are not at the right column, not even the right line.
+
+	This commit passes the colon "again" after the "id colon" token, which
+	gives more accurate locations for these messages:
+
+	    $ bison -Wall foo.y
+	    foo.y:2.10: warning: empty rule without %empty [-Wempty-rule]
+	        2 | foo     : /* empty */
+	          |          ^
+	    foo.y:4.2: warning: empty rule without %empty [-Wempty-rule]
+	        4 | : /* empty */
+	          |  ^
+
+	* src/scan-gram.l (SC_AFTER_IDENTIFIER): Rollback the colon, so that
+	we scan it again afterwards.
+	(INITIAL): Scan colons.
+	* src/parse-gram.y (COLON): New.
+	(rules): Parse the colon after the rule's id_colon (and possible
+	named reference).
+	* tests/actions.at, tests/conflicts.at, tests/diagnostics.at,
+	* tests/existing.at: Adjust.
+
+2019-04-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: track byte-columns, not character-columns
+	Because the fix-its were ready the character-based columns, but were
+	applied on byte-based columns, the result with multibyte characters or
+	tabs could be "interesting".  For instance
+
+	    %fixed-output_files
+	            %fixed_output-files
+	    %fixed-output-files
+	    %define api.prefix {foo}
+	    %no-default-prec
+
+	would give
+
+	         %fixed-%fixed-output-files  %fixed_output-files
+	    %fixed-orefix= "foo"
+	    o_default-prec
+
+	* src/fixits.c (fixit_print, fixits_run): Work on byte-base columns.
+	* tests/input.at: Check it.
+
+2019-04-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: expose a means to know whether a warning is enabled
+	* src/complain.h, src/complain.c (warning_is_enabled): New.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: let it use its own PO domain
+	See
+	https://www.gnu.org/software/gnulib/manual/html_node/Localization.html.
+
+	* bootstrap.conf: Create gnulib-po.
+	* Makefile.am, configure.ac: Use it.
+	* po/POTFILES.in: Remove files now in gnulib.
+	* src/main.c: Open the bison-gnulib domain.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: don't try to quote special files
+	Based on a report by Todd Freed.
+	http://lists.gnu.org/archive/html/bug-bison/2019-04/msg00000.html
+	See also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90034
+
+	* src/location.c (caret_info): Also track the file name.
+	(location_caret): Don't quote special files.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: document the change of format
+	* doc/bison.texiL Adjust output.
+	Also, Graphviz has no uppercsae V.
+	* NEWS: Explain the format change.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: copy GCC9's format
+	Currently, when we quote the source file, we indent it with one space,
+	and preserve tabulations, so there is a discrepancy and the visual
+	rendering is bad.  One way out is to indent with a tab instead of a
+	space, but then this space can be used for more information.  This is
+	what GCC9 does.  Let's play copy cats.
+
+	See
+	https://lists.gnu.org/archive/html/bison-patches/2019-04/msg00025.html
+	https://developers.redhat.com/blog/2019/03/08/usability-improvements-in-gcc-9/
+	https://gcc.gnu.org/onlinedocs/gccint/Guidelines-for-Diagnostics.html#Guidelines-for-Diagnostics
+
+	* src/location.c (location_caret): Prefix quoted lines with the line
+	number and a pipe, fitting 8 columns.
+
+	* tests/actions.at, tests/c++.at, tests/conflicts.at,
+	* tests/diagnostics.at, tests/input.at, tests/java.at,
+	* tests/named-refs.at, tests/reduce.at, tests/regression.at,
+	* tests/sets.at: Adjust expectations.
+	Partly by "./build-aux/update-test tests/testsuite.dir/*/testsuite.log"
+	repeatedly, and partly by hand.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix the handling of multibyte characters
+	This is a pity: efforts were invested in computing correctly the
+	number of screen columns consumed by multibyte characters, but the
+	routines that do that were fed by single-byte inputs...
+
+	As a consequence Bison never displayed correctly locations when there
+	are multibyte characters.
+
+	* src/scan-gram.l (mbchar): New.
+	Use it instead of . in the catch-all clause.
+	* tests/diagnostics.at (Tabulations): Enhance into...
+	(Tabulations and multibyte characters): this.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: check the handling of tabulations
+	* tests/diagnostics.at (Tabulations): here.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix styling issues
+	Single point locations (equal boundaries) are troublesome, and we were
+	incorrectly ending the style in their case.  Which results in an abort
+	in libtextstyle.
+
+	There is also a confusion between columns as displayed on the
+	screen (which take into account multibyte characters and tabulations),
+	and the number of bytes.  Counting the screen-column
+	incrementally (character by character) is uneasy (because of multibyte
+	characters), and I don't want to maintain a buffer of the current line
+	when displaying the diagnostic.  So I believe the simplest solution is
+	to track the byte number in addition to the screen column.
+
+	* src/location.h, src/location.c (boundary): Add the byte-column.
+	Adjust dependencies.
+	* src/getargs.c, src/scan-gram.l: Adjust.
+	* tests/diagnostics.at: Check zero-width locations.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: check the styling
+	Enable checking of styles even when libtextstyle is not installed.
+
+	* src/getargs.h, src/getargs.c (style_debug): New.
+	(getargs_colors): Set it when --style=debug.
+	* src/complain.c (begin_use_class, end_use_class): Use it.
+	* tests/diagnostics.at: New.
+
+2019-04-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: update
+	Let's prepare 3.4 with more or less what we have.  Schedule some
+	features for 3.5 and 3.6.  Remove obsolete stuff.
+
+2019-04-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: sort the warning categories
+	* doc/bison.texi, src/getargs.c: here.
+
+2019-04-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* tests/actions.at, tests/calc.at, tests/input.at: here.
+
+2019-04-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	graphviz: move constant computation out of a loop
+	* src/graphviz.c (output_red): here.
+
+2019-04-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix memory leak in libtextstyle
+	* src/complain.h, src/complain.c (complain_free): New.
+	* src/main.c: Use it.
+
+2019-04-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: remove useless feature
+	* tests/calc.at (read_signed_integer): Rename as...
+	(read_integer): this.
+	We never read signs here.
+
+2019-04-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	traces: make closure() less verbose
+	* src/getargs.h, src/getargs.c (trace_closure): New.
+	* src/closure.c (closure): Use it.
+
+2019-04-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: also generate the graph reports
+	* Makefile.am (AM_YFLAGS_WITH_LINES): here.
+
+2019-04-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: minor style change
+	* data/skeletons/yacc.c: To improve consistency with other similar
+	pieces of code.
+
+2019-04-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in lalr.c
+	* src/lalr.c (initialize_goto_follows): here.
+
+2019-04-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* src/closure.h, src/closure.c, src/lalr.c: here.
+
+2019-04-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	traces: improve logs
+	* src/lalr.c: Move logs to a better place to understand the chronology
+	of events.
+	* src/symlist.c (symbol_list_syms_print): Don't dump core on type
+	elements.
+
+2019-04-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: minor fixes
+	* doc/bison.texi: Use consistently $ and @kbd in shell examples.
+	Prefer sticking to English words: output and file instead of outfile
+	and infile.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	bison: use no-lines
+	The 'regen' commit in Bison's history are a nuisance.  They are
+	especially big because of the #lines.  Let's generate our parse
+	without these lines in the repository, but generate them in the
+	tarball.
+
+	* Makefile.am (AM_YFLAGS_WITH_LINES): New.
+	(AM_YFLAGS): Use it.
+	(dist-hook): Regenerate the parser with #lines.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	no-lines: avoid leaving an empty line instead of the syncline
+	Currently, with --no-lines, instead of "#line file line\n", we emit
+	"\n".  Let's emit nothing.
+
+	* data/skeletons/bison.m4 (b4_syncline): Emit at end-of-line when enabled.
+	* data/skeletons/bison.m4, data/skeletons/c.m4, data/skeletons/glr.cc,
+	* data/skeletons/lalr1.cc, src/output.c: Use dnl after b4_syncline to
+	avoid spurious empty lines.
+
+	* tests/synclines.at (Sync Lines): Make sure that --no-lines is like
+	grep -v #line.
+	* tests/calc.at: Make sure that a rich grammar file behaves properly
+	with %no-lines.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: use full locations for diagnostics about destructors
+	Currently we use the syncline to report errors about a symbol's
+	destructor/printer.  This is not accurate (only file and line), and
+	this is incorrect: the file name is double quotes (a recent change,
+	needed to make sure we escape properly double quotes in it).  And
+	worst of all: with --no-line, b4_syncline expands to nothing.
+
+	Rather, push the locations into the backend, and use them.
+
+	* src/muscle-tab.h, src/muscle-tab.c (muscle_location_grow): Make it
+	public.
+	* src/output.c (prepare_symbol_definitions): Use it to pubish the
+	location of the printer and destructor.
+	* data/skeletons/lalr1.java: Use complain_at instead of complain.
+	* tests/java.at (Java invalid directives): Adjust expectations.
+	* data/skeletons/bison.m4 (b4_symbol_action_location): Remove.
+	We should not use b4_syncline this way.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: prefer errors to fatal errors
+	Fatal errors are inconvenient, and should be reserved to cases where
+	we cannot continue.  Here, it could even be warnings actually: these
+	directives will simply be ignored.
+
+	* data/skeletons/lalr1.java: Prefer error (b4_complain) to fatal
+	errors (b4_fatal).
+	* tests/java.at (Java invalid directives): New.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: formatting changes
+	* tests/javapush.at: here.
+
+2019-04-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: offer more flexibility in debugging routines
+	* src/state.h, src/state.c (state_transitions_print): New, extracted
+	from...
+	(state_transitions_set): here.
+
+2019-03-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: don't overbook memory
+	I never understood why we book ngotos+1 slots for relations between
+	gotos: there are at most ngotos images, not ngotos+1 (and "includes"
+	does have cases where a goto is in relation with itself, so it's not
+	ngotos-1).
+
+	Maybe bbf37f2534a8e5a6b4e28047f0a10903e6dc73f9 explains the +1: a bug
+	left us register a goto several times on occasion, and the +1 might
+	have been a means to avoid this problem in most cases.  Now that this
+	bug is addressed, we should no longer overbook memory, if only for the
+	clarity of the code ("why ngotos+1 instead of ngotos?").
+
+	* src/lalr.c: A goto has at most ngotos images, not ngotos+1.
+	While at it, avoid useless repeated call to map_goto introduced in
+	bbf37f2534a8e5a6b4e28047f0a10903e6dc73f9.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: show lookback for debug
+	* src/lalr.c (lookback_print): New.
+	(build_relations): Use it.
+	Also show edges.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: don't crash when declaring the error token as an nterm
+	Reported by wcventure.
+	http://lists.gnu.org/archive/html/bug-bison/2019-03/msg00008.html
+
+	* src/symtab.c (complain_class_redeclared): Don't print empty
+	locations.
+	There can only be empty locations for predefined symbols.  And the
+	only symbol that is lexically available is the error token.  So this
+	appears to be the only possible way to have an error involving an
+	empty location.
+	* tests/input.at (Symbol class redefinition): Check it.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: fix segmentation violation
+	The "includes" relation [DeRemer 1982] is between gotos, so of course,
+	for a given goto, there cannot be more that ngotos (number of gotos)
+	images.  But we manipulate the set of images of a goto as a list,
+	without checking that an image was not already introduced.  So we can
+	"register" way more images than ngotos, leading to a crash (heap
+	buffer overflow).
+
+	Reported by wcventure.
+	http://lists.gnu.org/archive/html/bug-bison/2019-03/msg00007.html
+
+	For the records, this bug is present in the first committed version of
+	Bison.
+
+	* src/lalr.c (build_relations): Don't insert the same goto several
+	times.
+	* tests/sets.at (Build Relations): New.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	state: more debug traces
+	* src/state.c (state_transitions_set): Show the transitions.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename variables for consistency
+	* src/lalr.c: Use trans for transitions, and reds for reductions, as
+	elsewhere in the code.
+	* src/state.h: Comment changes.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	gram: fix and improve log message
+	It seems that not many people read these logs: the error was
+	introduced in 2001 (3067fbef531832df1e43bbd28787655808361eed),
+
+	* src/gram.c (grammar_dump): Fix the headers of the table: remove
+	duplicate display of "Ritem Range".
+	While at it, remove duplicate display of the rule number (and remove
+	an incorrect comment about it: these numbers _are_ equal).
+	* tests/sets.at (Reduced Grammar): Use useless rule, nterm and token
+	in the example.
+
+2019-03-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: add a tool for mass updates
+	When we update some output format, too many adjustements must be made
+	by hand.  This script updates most tests based on the actual output
+	made during the tests.
+
+	* build-aux/update-test: New.
+
+2019-03-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: remove now useless _GL_UNUSED
+	* src/getargs.c (getargs_colors): Here.
+	Useless since 4d34b06fb3a38eb050439084476a6b3e292c5680.
+
+2019-03-24  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tables: use bitsets for a performance boost
+	Suggested by Yuri at
+	<http://lists.gnu.org/archive/html/bison-patches/2012-01/msg00000.html>.
+
+	The improvement is marginal for most grammars, but notable for large
+	grammars (e.g., PosgreSQL's postgre.y), and very large for the
+	sample.y grammar submitted by Yuri in
+	http://lists.gnu.org/archive/html/bison-patches/2012-01/msg00012.html.
+	Measured with --trace=time -fsyntax-only.
+
+	parser action tables    postgre.y     sample.y
+	Before                 0,129 (44%)  37,095 (99%)
+	After                  0,117 (42%)   5,046 (93%)
+
+	* src/tables.c (pos): Replace this set of integer coded as an unsorted
+	array or integers with...
+	(pos_set): this bitset.
+
+2019-03-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: don't suggest api.header.include when --defines is not used
+	See 4e19ab9fcd28c9361ff08f46e5e353effb0a0520: the suggestion to
+	include the header file should not be emitted when the header is not
+	generated.
+
+	* data/skeletons/yacc.c: Here.
+
+2019-03-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: clarify variable names
+	* src/reader.c (grammar_rule_check_and_complete): When 'p' and 'lhs'
+	are aliases, prefer the latter, for clarity and consistency.
+	(grammar_current_rule_begin): Avoid 'p', current_rule suffices.
+	* src/gram.h, src/gram.c: Comment changes.
+
+	ptdr#	calc.tab.c
+
+2019-03-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style changes
+	* src/location.c (location_caret): Clarify a bit.
+
+2019-03-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: use gnulib's libtextstyle-optional
+	Bruno Haible just added a default implementation of libtextstyle's
+	interface when the library is not available.
+	https://lists.gnu.org/archive/html/bison-patches/2019-03/msg00025.html
+
+	* gnulib: Update.
+	* bootstrap.conf: Replace libtextstyle with libtextstyle-optional.
+	* src/complain.c, src/getargs.c: Remove now useless cpp guards.
+
+2019-03-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: fix handling of style in limit cases
+	* src/location.c (location_caret): Beware of the cases where the start
+	and end columns are the same, or when the location is multilines.
+
+2019-03-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	warnings: don't use _Noreturn with G++ 4.7 in C++98 mode
+	The timevar and bitset modules now use the c99 module which causes
+	$CXX to now include -std=gnu++11 when possible.  Unfortunately, G++
+	4.7 does not implement [[noreturn]] in C++11 mode, so our tests of
+	glr.cc (which uses _Noreturn) fail with
+
+	    input.cc:954:1: error: expected unqualified-id before '[' token
+
+	right before [[noreturn]].  4.8 works fine.
+
+	* data/skeletons/c.m4 (b4_attribute_define): Do not use [[noreturn]]
+	with GCC 4.7.
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: tests: use more a natural approach for the scanner
+	See f8408562f8439654261418406296e4108d2a995f.
+
+	* tests/calc.at: Stop imitating the C API.
+	Prepare more tests to run in the future.
+	%verbose works as expected (what a surprise, it's unrelated to the
+	skeleton...).
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename spec_defines_file as spec_header_file
+	The variable spec_defines_file denotes the name of the generated
+	header.  Its name is derived from --defines/%defines, whose name in
+	turn is derived from the fact that the header, in Yacc, contained the
+
+	Not only does the header now contain a lot more than just the token
+	definitions, but we no longer even generate macros, but an enum...
+
+	Let's modernize our vocabulary.
+
+	* src/files.h, src/files.c (spec_defines_file): Rename as...
+	(spec_header_file): this.
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: provide a means to include the header in the implementation
+	Currently when --defines is used, we generate a header, and paste an
+	exact copy of it into the generated parser implementation file.  Let's
+	provide a means to #include it instead.
+
+	We don't do it by default because of the Autotools' ylwrap.  This
+	program wraps invocations of yacc (that uses a fixed output name:
+	y.tab.c, y.tab.h, y.output) to support a more modern naming
+	scheme (dir/foo.y -> dir/foo.tab.c, dir/foo.tab.h, etc.).  It does
+	that by renaming the generated files, and then by running sed to
+	propagate these renamings inside the files themselves.
+
+	Unfortunately Automake's Makefiles uses Bison as if it were Yacc (with
+	--yacc or with -o y.tab.c) and invoke bison via ylwrap.  As a
+	consequence, as far as Bison is concerned, the output files are
+	y.tab.c and y.tab.h, so it emits '#include "y.tab.h"'.  So far, so
+	good.  But now ylwrap processes this '#include "y.tab.h"' into
+	'#include "dir/foo.tab.h"', which is not guaranteed to always work.
+
+	So, let's do the Right Thing when the output file is not y.tab.c, in
+	which case the user should %define api.header.include.  Binding this
+	behavior to --yacc is tempting, but we recently told people to stop
+	using --yacc (as it also enables the Yacc warnings), but rather to use
+	-o y.tab.c.
+
+	Yacc.c is the only skeleton concerned: all the others do include their
+	header.
+
+	* data/skeletons/yacc.c (b4_header_include_if): New.
+	(api.header.include): Provide a default value when the output is not
+	y.tab.c.
+	* src/parse-gram.y (api.header.include): Define.
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: don't link against LIBS
+	* tests/local.at (AT_COMPILE_D): Don't pass LIBS, dmd does not like
+	being given -lintl.
+
+2019-03-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	address warnings from GCC's UB sanitizer
+	Running with CC='gcc-mp-8 -fsanitize=undefined' revealed Undefined
+	Behaviors.
+	https://lists.gnu.org/archive/html/bison-patches/2019-03/msg00008.html
+
+	* src/state.c (errs_new): Don't call memcpy with NULL as source.
+	* src/location.c (add_column_width): Don't assume that the column
+	argument is nonnegative: the scanner sometimes "backtracks" (e.g., see
+	ROLLBACK_CURRENT_TOKEN and DEPRECATED) in which case we can have
+	negative column numbers (temporarily).
+	Found in test 3 (Invalid inputs).
+
+2019-03-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: use libtextstyle for colored output
+	Bruno Haible released libtextstyle, a library for colored output based
+	on CSS.  Let's use it to generate colored diagnostics, provided
+	libtextstyle is available.
+
+	See
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-01/msg00176.html
+	https://lists.gnu.org/archive/html/bison-patches/2019-02/msg00073.html
+	https://lists.gnu.org/archive/html/bison-patches/2019-02/msg00084.html
+	https://lists.gnu.org/archive/html/bison-patches/2019-03/msg00007.html
+
+	* bootstrap.conf (gnulib_modules): Use libtextstyle when possible.
+	* data/diagnostics.css: New.
+	* src/complain.c (begin_use_class, end_use_class, flush)
+	(severity_style, complain_init_color): New.
+	Use them.
+	* src/getargs.c (getargs_colors): New.
+	(getargs): Use it.
+	Skip --color and --style.
+	* src/location.h, src/location.c (location_print): Use a style.
+
+	* tests/bison.in: Force --color=yes when stderr is a tty.
+	* tests/local.at: Disable colors during the test suite.
+	* tests/input.at: Adjust expectations to the extra options passed on
+	the command line.
+
+2019-03-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clean up complain.c
+	* src/complain.c (severity_prefix): New.
+	(error_message): Take the severity as argument, instead of the prefix.
+
+2019-03-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: emit the header before the implementation file
+	* data/skeletons/yacc.c: here.
+	This is more logical for the time stamps, but it's also required by
+	following patches: the shared declarations are also in charge of
+	handling api.value.type=union.  So far, they are run in the
+	implementation file in both cases (with or without header).  But if we
+	run them only in the header, then the implementation file is emited
+	with incorrect support for api.value.type=union.
+	Arguably we should not have such dependencies.  This is because we
+	have side-effects in our backend (redefining the symbols' type and
+	type_tag).  In the future we should find a better solution for this,
+	without sacrificing the independence of the backend from bison
+	itself (i.e., I don't think we should handle api.value.type=union in
+	bison, leave it to m4).
+
+2019-03-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	simplify the generated #line
+	Currently we generate things like:
+
+	    #line 683 "src/parse-gram.y" /* yacc.c:316  */
+
+	The first part is of course very important: compilers point the users
+	to their grammar file rather than into the generated parser.  The
+	second part points to the place in the skeletons that generated this
+	piece of code.
+
+	This dependency on the Bison skeletons generates lots of useless 'git
+	diff'.  This location is useless for the regular user (who does not
+	care about the skeletons) and is actually not useful for Bison
+	developpers too (I never used this to locate the code in skeletons
+	that generated output).  So disable it completely.  If someone thinks
+	this was actually useful, a %define variable should be provided to
+	control the level of verbosity of '#line', in replacement of
+	--no-lines.
+
+	So now, generate:
+
+	    #line 683 "src/parse-gram.y"
+
+	* data/skeletons/bison.m4 (b4_sync_end): Emit nothing.
+
+2019-03-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-03-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: remove duplicates
+	* tests/regression.at (Invalid inputs, Invalid inputs with {}):
+	Remove, there are exact copies of them in input.at.
+
+2019-03-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: simplify the API to build the scanner of the example
+	* examples/d/calc.y (calcLexer): Add an overload for File.
+	Use it.
+
+2019-03-01  H. S. Teoh  <hsteoh@quickfur.ath.cx>
+
+	d: modernize the scanner of the example
+	https://lists.gnu.org/archive/html/bison-patches/2019-02/msg00121.html
+
+	* examples/d/calc.y (CalcLexer): Stop shoehorning C's API into D: use
+	a range based approach in the scanner, rather than some imitation of
+	getc/ungetc.
+	(main): Adjust.
+
+2019-03-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: tests: use fewer global variables
+	* tests/calc.at: Move 'input' into the scanner.
+
+2019-02-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: clarify the count of lookaheads
+	* src/lalr.c (state_lookahead_tokens_count): Remove wierd `+=` that is
+	actually an `=`.
+
+2019-02-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: clarify the API
+	* src/state.h, src/state.c (state_reduction_find): Clarify.
+	Die on errors.
+	* src/lalr.c (goto_list_new): New.
+	Use it.
+
+2019-02-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: improve traces
+	* src/lalr.c (follows_print): Just print the symbol tag.
+	Take and print a title.
+	Indent the output.
+	Use it to print the various steps of the computation.
+	(lookahead_tokens_print): Fix a lie: the number displayed is not the
+	number of tokens.
+	Don't display states that don't even have reductions.
+
+2019-02-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: print the 'reads' relation
+	* src/relation.h, src/relation.c (relation_print): Accept and use a
+	title.
+	Don't print empty rows.
+	Indent the output.
+	Adjust dependencies.
+	* src/lalr.c (initialize_goto_follows): Print 'reads' in traces.
+
+2019-02-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* src/lr0.c: here.
+
+2019-02-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	dlang: initial changes to run the calc tests on it
+	* configure.ac (DCFLAGS): Define.
+	* tests/atlocal.in: Receive it.
+	* data/skeletons/d.m4 (api.parser.class): Remove spurious YY.
+	* data/skeletons/lalr1.d (yylex): Return an int instead of a
+	YYTokenType, so that we can use characters as tokens.
+	* examples/d/calc.y: Adjust.
+	* tests/local.at: Initial support for D.
+	(AT_D_IF, AT_DATA_GRAMMAR(D), AT_YYERROR_DECLARE(d))
+	(AT_YYERROR_DECLARE_EXTERN(d), AT_YYERROR_DEFINE(d))
+	(AT_MAIN_DEFINE(d), AT_COMPILE_D, AT_LANG_COMPILE(d), AT_LANG_EXT(d)):
+	New.
+	* tests/calc.at: Initial support for D.
+	* tests/headers.at
+
+2019-02-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: improve the example
+	* examples/d/calc.y: Exit with failure on errors.
+	Remove useless operators (=, !) meant for the test suite.
+	Add unary + for symmetry.
+	* examples/d/calc.test: Adjust expectations.
+
+2019-02-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style changes
+	* tests/local.at AT_YYERROR_DEFINE(java): Use more consistent names.
+
+2019-02-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: eliminate useless indirection
+	* src/relation.h, src/relation.c (relation_digraph): Don't take the
+	biteetv as a pointer, it is already a pointer (as it's an array).
+
+2019-02-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename function for clarity
+	Commit db34f7988941444bdc5f2b6adcf7fb83648f9a18 renames the variable F
+	as goto_follows, but forgot to rename this function.
+
+	* src/lalr.c (initialize_F): Rename as...
+	(initialize_goto_follows): this.
+
+2019-02-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr: more debug traces
+	I need to be able to read includes and goto_follows.
+
+	* src/relation.h, src/relation.c (relation_print): Provide a means to
+	pretty-print the nodes of the relation.
+	* src/lalr.c (goto_print, follows_print): New.
+	(set_goto_map): Use goto_print.
+	(build_relations): Show INCLUDES.
+	(compute_FOLLOWS): Rename as...
+	(compute_follows): this.
+	Show FOLLOWS.
+
+2019-02-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: minor changes
+	* examples/c/calc/calc.y, src/lalr.c: Reduce scope.
+	* src/gram.c: Prefer < to >.
+
+2019-02-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clarify the computation of the lookback edges
+	* src/lalr.c (build_relations): Reduce the scopes.
+	Instead of keeping rp alive in two different loops, clarify the second
+	one by having an index on the path we traverse (i.e., use that index
+	to compute the source state _and_ the symbol that labels the
+	transition).
+	This allows to turn an obscure 'while'-loop in a clearer (IMHO)
+	'for'-loop.  We also consume more variables (by introducing p instead
+	of making more side effects on length), but we're in 2019, I don't
+	think this matters.  What does matter is that (IMHO again), this is
+	now clearer.
+	Also, use clearer names.
+
+2019-02-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in tables.c
+	* src/tables.c: here.
+	* src/lalr.c: Prefer < to >.
+
+2019-02-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: formatting changes
+	* data/skeletons/d.m4, data/skeletons/lalr1.d: Avoid trailing spaces.
+
+2019-02-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: remove stray examples
+	* examples/c/reentrant-calc: Remove.
+	I did not mean to include this example, it was replaced by
+	examples/c/reccalc.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: factor the execution of Java parsers
+	* tests/local.at (AT_MAIN_DEFINE(java)): Exit failure on failure.
+	(AT_PARSER_CHECK): If in Java, run AT_JAVA_PARSER_CHECK.
+	* tests/conflicts.at (AT_CONSISTENT_ERRORS_CHECK): Simplify.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix a Java tests
+	* tests/conflicts.at (AT_CONSISTENT_ERRORS_CHECK): Fix quotation error.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: simplify AT_PARSER_CHECK usage
+	Currently the caller must specify the ./ prefix to its command.  Let's
+	avoid that: it will be nicer to read, make it easier to have a version
+	that works for Java and C/C++.
+
+	* tests/local.at (AT_PARSER_CHECK): Prefix the command with ./.
+	Adjust callers.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: java: factor the definition of Position
+	* tests/local.at (AT_JAVA_POSITION_DEFINE): New.
+	* tests/java.at, tests/javapush.at: Use it.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: dispatch per lang on AT_DATA_GRAMMAR
+	* tests/java.at: Do that.
+	* tests/conflicts.at: Simplify.
+
+	* tests/actions.at, tests/c++.at, tests/input.at, tests/local.at,
+	* tests/named-refs.at:
+	Use AT_BISON_OPTION_PUSHDEFS/AT_BISON_OPTION_POPDEFS.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: dispatch per lang on the definition of yylex
+	* tests/local.at (AT_YYLEX_DEFINE): Dispatch on the language.
+	(AT_YYLEX_DEFINE(java)): New.
+	* tests/conflicts.at, tests/java.at: Use it.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: de-duplicate
+	* tests/conflicts.at (AT_YYLEX_PROTOTYPE): Don't define it, leave that
+	task to AT_DATA_GRAMMAR.
+	But be honest: tell AT_BISON_OPTION_PUSHDEFS all the options we use.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: formatting changes
+	* tests/local.at: here.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	graph: prefer *.gv to *.dot
+	Reported by Hans Åberg.
+	https://lists.gnu.org/archive/html/help-bison/2019-02/msg00064.html
+
+	* src/files.c (spec_graph_file): Use `*.gv` when 3.4 or better,
+	otherwise `*.dot`.
+	* src/parse-gram.y (handle_require): Pretend we are already 3.4.
+	* doc/bison.texi: Adjust.
+	* tests/local.at, tests/output.at: Exercise this.
+
+2019-02-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fixes to please older versions of Texinfo
+	Currently, we have errors:
+
+	    ./doc/bison.texi:13005: node `History' lacks menu item for `Yacc' despite being its Up target
+
+	* doc/bison.texi (History): Add the local menu.
+	While at it, add a few index entries.
+
+2019-02-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: style changes
+	* doc/bison.texi (Bibliography): Add [Corbett 1984] and [Johnson
+	1978].
+	(History): Use them.
+	And other minor changes.
+
+2019-02-17  Eric S. Raymond  <esr@thyrsus.com>
+
+	doc: a history section
+	* bison.texi (A Brief History of the Greater Ungulates): New section.
+
+2019-02-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: add an example with a reentrant parser in Flex+Bison
+	Suggested by Eric S. Raymond.
+	https://lists.gnu.org/archive/html/bison-patches/2019-02/msg00066.html
+
+	* examples/c/reentrant-calc/Makefile, examples/c/reentrant-calc/README.md,
+	* examples/c/reentrant-calc/parse.y, examples/c/reentrant-calc/scan.l
+	* examples/c/reentrant-calc/lexcalc.test,
+	* examples/c/reentrant-calc/local.mk:
+	New.
+
+2019-02-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fixes in lexcalc
+	* examples/c/lexcalc/parse.y: Formatting/comment changes.
+	(line): Don't return a value.
+	Print the result here, which avoids printing a value for lines with an
+	error.
+	(yyerror): Be sure to increment the pointed, not the pointer...
+	* examples/c/lexcalc/lexcalc.test: Check errors.
+	* examples/c/lexcalc/local.mk: Fix a dependency.
+
+2019-02-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix distcheck
+	Regression introduced in 05a80977798abf472bfc11c477751303ad604733.
+
+	* doc/local.mk (bison.help): Don't depend on the path of the bison
+	executable.
+
+2019-02-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: move pkgdatadir to files.*
+	Let's move it to a more logical place.
+
+	* src/output.h, src/output.c (pkgdatadir): Move to...
+	* src/files.h, src/files.c: here.
+
+2019-02-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename cleanup_caret as caret_free
+	* src/location.c, src/location.h, src/main.c: here.
+
+2019-02-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: avoid default in switch on enums
+	* src/assoc.c (assoc_to_string): here.
+
+2019-02-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: run tests/bison, not src/bison
+	* doc/local.mk: Don't run src/bison, as it expects to find all its
+	files installed.  Instead, run tests/bison which is ready to run in
+	builddir.
+
+2019-02-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-02-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment and names changes in map_goto
+	* src/lalr.h, src/lalr.c: Use clearer names.
+
+2019-02-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: support parse.assert
+	While hacking on the computation of the automaton, I had yystate being
+	equal to -1, and the parser loops.  Let's catch this when
+	parser.assert is enabled.
+
+	* data/skeletons/yacc.c (YY_ASSERT): New.
+	Use it.
+	Not using the name YYASSERT, to make it clear that this is private.
+	glr.c should probably move to YY_ASSERT too.
+	Also, while at it, report 'Entering state...' even before growing the
+	stacks.
+
+2019-02-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: depend on Bison's sources
+	* examples/c/calc/local.mk, examples/c/lexcalc/local.mk,
+	* examples/c/mfcalc/local.mk, examples/c/rpcalc/local.mk:
+	Regenerate the files if dependencies have changed.
+
+2019-02-12  Eric S. Raymond  <esr@thyrsus.com>
+
+	README: point to README-hacking
+	* README (Build from git): New.
+	* README-hacking: Describe easier submodule update.
+
+2019-02-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: a single space before closing comments
+	I don't think this style:
+
+	    /* 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 ();
+
+	or more readable than
+
+	    /* 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 ();
+
+	Actually, I think the latter is more readable, and helps with width
+	issues in the PDF.  As a matter of fact, I would happily move to //
+	only for single line comments.
+
+	* doc/bison.texi: A single space before closing comments.
+
+2019-02-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: modernize the examples
+	* doc/bison.texi: Prefer 'fun' to 'fnct'.
+	Reduce local variable scopes.
+	Prefer strdup to malloc + strcpy.
+	Avoid gratuitous casts.
+	Use simpler names (e.g., 'name' instead of 'fname').
+	Avoid uses of 0 for NULL.
+	Avoid using NULL when possible (e.g., 'p' instead of 'p != NULL').
+	Prefer union names to casts (e.g. 'yylval.VAR = s' instead of
+	'*((symrec**) &yylval) = s').
+	Give arguments a name in fun declarations.
+	Use our typedefs instead of duplicating them (func_t).
+	Stop promoting an explicit $$ = $1;, it should be implicit (Bison
+	might be able to eliminate useless chain rules).
+	Help a bit Texinfo by making smaller groups.
+	Rely on the C compiler to call function pointers (prefer
+	'$1->value.fun ($3)' to (*($1->value.fnctptr))($3)').
+
+2019-02-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: add a simple infix calculator in C
+	Currently we have no simple example: rpcalc in reverse Polish, mfcalc
+	has functions, and lexcalc is using lex.
+
+	* examples/c/calc/Makefile, examples/c/calc/calc.y,
+	* examples/c/calc/calc.test, examples/c/calc/local.mk: New.
+
+2019-02-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix annoying off-by-one errors
+	* examples/extexi: Since we issue #lines only at the beginning of
+	@example, leave empty line when removing content (such as @comment
+	lines), otherwise the lines that follow have incorrect source line
+	location.  This leaves ugly empty lines, but they are removed when you
+	tidy the output for the end user: sequences of \n are mapped to at
+	most two sucessive \n.
+
+2019-02-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: factor printing of rules
+	* src/gram.h, src/gram.c (rule_print): New.
+	Use it.
+
+2019-02-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use lower case for variable names
+	* src/relation.c (INDEX, VERTICES): Rename as...
+	(indexes, vertices): these.
+
+2019-02-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in relation.c
+
+2019-02-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	report: stop counting uselessly
+	* src/print.c (print_nonterminal_symbols): Replace left_count and
+	right_count with on_left and on_right.
+
+2019-02-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	report: clean up its format
+	The format is inconsistent.  For instance most sections are
+	indented (including "Terminals unused in grammar" for instance), but
+	the sections "Terminals, with rules where they appear" and
+	"Nonterminals, with rules where they appear" are not.  Let's indent
+	them.  Also, these two sections try to wrap the output to avoid lines
+	too long.  Yet we don't do that in the rest of the file, for instance
+	when listing the lookaheads of an item.
+
+	For instance in the case of Bison's parse-gram.output we go from:
+
+	    Terminals, with rules where they appear
+
+	    "end of file" (0) 0
+	    error (256) 28 88
+	    "string" <char*> (258) 9 13 16 17 20 23 24 109 116
+	    [...]
+
+	    Nonterminals, with rules where they appear
+
+	    $accept (58)
+	        on left: 0
+	    input (59)
+	        on left: 1, on right: 0
+	    prologue_declarations (60)
+	        on left: 2 3, on right: 1 3
+	    prologue_declaration (61)
+	        on left: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24
+	        25 26 27 28 29, on right: 3
+	    [...]
+
+	to
+
+	    Terminals, with rules where they appear
+
+	    "end of file" (0) 0
+	    error (256) 28 88
+	    "string" <char*> (258) 9 13 16 17 20 23 24 109 116
+	    [...]
+
+	    Nonterminals, with rules where they appear
+
+	        $accept (58)
+	            on left: 0
+	        input (59)
+	            on left: 1
+	            on right: 0
+	        prologue_declarations (60)
+	            on left: 2 3
+	            on right: 1 3
+	        prologue_declaration (61)
+	            on left: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29
+	            on right: 3
+	    [...]
+
+	* src/print.c (END_TEST): Remove.
+	(print_terminal_symbols): Don't try to wrap the output.
+	(print_nonterminal_symbols): Likewise.
+	Make two different lines for occurrences on the left, and occurrence
+	on the rhs of the rules.
+	Indent by 4 and 8, not 3.
+	* src/reduce.c (reduce_output): Indent by 4, not 3.
+
+	* tests/conflicts.at, tests/existing.at, tests/reduce.at,
+	* tests/regression.at, tests/report.at:
+	Adjust.
+
+2019-02-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	add LR(0) output
+	This should not be used to generate parsers.  My point is actually to
+	facilitate debugging (when tweaking the generation of the LR(0)
+	automaton for instance, not carying -yet- about lookaheads).
+
+	* src/reader.c (prepare_percent_define_front_end_variables): Add lr(0).
+	* src/conflicts.c (set_conflicts): Be robust to reds not having
+	lookaheads at all.
+	* src/ielr.c (LrType, lr_type_get): Adjust.
+	(ielr): Implement support for LR(0).
+	* src/lalr.c (lalr_free): Don't free LA when it's not computed.
+
+2019-02-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in derives.c
+	* src/derives.c: here.
+
+2019-02-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes and refactoring in state.c
+	* src/state.h, src/state.c: Comment changes.
+	(transitions_to): Take a state* as argument.
+	* src/lalr.h, src/lalr.c: Comment changes.
+	(initialize_F): Use clear variable names.
+
+2019-02-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix typos
+	* tests/reduce.at: here.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	Merge branch maint
+	* maint:
+	  maint: post-release administrivia
+	  version 3.3.2
+	  style: minor fixes
+	  NEWS: named constructors are preferable to symbol_type ctors
+	  gram: fix handling of nterms in actions when some are unused
+	  style: rename local variable
+	  CI: update the ICC serial number for travis-ci.org
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.3.2
+	* NEWS: Record release date.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: minor fixes
+	* NEWS, src/reduce.c, src/reduce.h: Use 'nonterminal'.
+	Fix comments.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: named constructors are preferable to symbol_type ctors
+	Reported by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00043.html
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	gram: fix handling of nterms in actions when some are unused
+	Since Bison 3.3, semantic values in rule actions (i.e., '$...') are
+	passed to the m4 backend as the symbol number.  Unfortunately, when
+	there are unused symbols, the symbols are renumbered _after_ the
+	numbers were used in the rule actions.  As a result, the evaluation of
+	the skeleton failed because it used non existing symbol numbers.
+	Which is the happy scenario: we could use numbers of other existing
+	symbols...
+
+	Reported by Balázs Scheidler.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00044.html
+
+	Translating the rule actions after the symbol renumbering moves too
+	many parts in bison.  Relying on the symbol identifiers is more
+	troublesome than it might first seem: some don't have an
+	identifier (tokens with only a literal string), some might have a
+	complex one (tokens with a literal string with characters special for
+	M4).  Well, these are tokens, but nterms also have issues: "dummy"
+	nterms (for midrule actions) are named $@32 etc. which is risky for
+	M4.
+
+	Instead, let's simply give M4 the mapping between the old numbers and
+	the new ones.  To avoid confusion between old and new numbers, always
+	emit pre-renumbering numbers as "orig NUM".
+
+	* data/README: Give details about "orig NUM".
+	* data/skeletons/bison.m4 (__b4_symbol, _b4_symbol): Resolve the
+	"orig NUM".
+	* src/output.c (prepare_symbol_definitions): Pass nterm_map to m4.
+	* src/reduce.h, src/reduce.c (nterm_map): Extract it from
+	nonterminals_reduce, to make it public.
+	(reduce_free): Free it.
+	* src/scan-code.l (handle_action_dollar): When referring to a nterm,
+	use "orig NUM".
+	* tests/reduce.at (Useless Parts): New, based Balázs Scheidler's
+	report.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: strengthen some of them
+	* tests/reduce.at: Check that the generated parsers are proper C.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: rename data/README as data/README.md
+	So that it is properly rendered by online git services.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/symlist.c (symbol_list_free): New.
+
+2019-02-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: prefer snprintf to sprintf
+	* src/symtab.c (dummy_symbol_get): There's no need for the buffer to
+	be so big and static.
+	Use snprintf for safety.
+
+2019-02-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment and name changes
+	* src/output.c (prepare_symbol_names): here.
+	* src/reader.c: Remove obsolete comment.
+	* src/scan-code.l: Use || for Boolean or.
+
+2019-02-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* src/reader.c, src/scan-code.l: here.
+
+2019-02-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	make: regenerate the example parsers when bison changes
+	* Makefile.am (dependencies): Also depend on Bison's sources.
+
+2019-02-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename local variable
+	* src/reduce.c (nonterminals_reduce): Rename nontermmap as nterm_map.
+	We will expose it.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	gram: detect and report (in debug traces) useless chain rules
+	A rule is a useless chain iff it's a chain (aka unit, or injection)
+	rule (i.e., the RHS has length 1), and it's useless (it has no used
+	defined semantic action).
+
+	* src/gram.h, src/gram.c (rule_useless_chain_p): New.
+	(grammar_dump): Report useless chain rules.
+	* tests/sets.at: Check the traces.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	lr(0): more debug traces
+	* src/lr0.c (core_print, kernel_print): New.
+	Use them.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	lr(0): remove useless conditional
+	* src/lr0.c (new_itemsets): There's no harm in setting a Boolean
+	several times.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: sort includes and avoid assignments
+	* src/symtab.c: Sort includes.
+	* src/gram.c (grammar_rules_print_xml): Avoid assignments to define
+	'usefulness'.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use item_rule
+	* src/print-graph.c, src/print-xml.c: here.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	gram: factor the printing of items and the computation of their rule
+	There are several places where we need to recover the rule from an
+	item, let's factor that into item_rule.  We also want to print items
+	in a nice way: we do it when generating the *output file, but it is
+	also useful in debug messages.
+
+	* src/gram.h, src/gram.c (item_rule, item_print): New.
+	* src/print.c (print_core): Use them.
+	* src/state.h, src/state.c: Propagate constness.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in print-xml
+	* src/print-xml.c: here.
+
+2019-01-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check XML and dot reports
+	* tests/report.at: Here.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: update the ICC serial number for travis-ci.org
+	On travis-ci.org, there are five concurrent slaves, instead of three
+	on travis-ci.com.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: update the ICC serial number for travis-ci.org
+	On travis-ci.org, there are five concurrent slaves, instead of three
+	on travis-ci.com.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* src/lr0.c, src/state.c, src/state.h: here.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	closure: initialize it once for all
+	The memory allocated by 'closure' (and some data such as 'fderives')
+	is used to computed a state's full itemset from its core.  This is
+	needed during the construction of the LR(0) automaton, and the memory
+	is reclaimed immediately afterwards.
+
+	Unfortunately the reports (graph, text, xml) also need this
+	information when describing the states with their full itemsets.  As a
+	consequence the memory was allocated again, fderives computed again
+	too, and more --trace reports are generated which only duplicate what
+	was already reported.
+
+	Stop that.  It does mean that we release the memory later (hence the
+	peak memory usage is higher now), but I don't think that's a problem
+	today.
+
+	* src/lr0.c (generate_states): Don't call closure_free.
+	* src/state.c (states_free): Do it here.
+	(for symmetry with closure_new which is called in generate_states).
+	* src/print-graph.c, src/print-xml.c, src/print.c: You can now expect
+	the closure module to be functional.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename closure_* functions as closure_*
+	This is more consistent with the other files.
+
+	* closure.h, closure.c (new_closure, free_closure): Rename as...
+	(closure_new, closure_free): this.
+	Adjust dependencies.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	lr0: use a bitset for the set of "shiftable symbols"
+	This will make it easier to add new elements (that might already be
+	part of shift_symbol) without having to worry about the size of
+	shift_symbol (which is currently a fixed size vector).
+
+	I could not measure any significant differences in performances in the
+	generation of LR(0) automaton (benched on gramamrs of Ruby, C, and C++).
+
+	* src/lr0.c (shift_symbol): Make it a bitset.
+
+2019-01-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	add -fsyntax-only
+	When debugging Bison itself, this is very handy, especially when
+	tweaking the frontend badly enough to break the backends. It can also
+	be used to check a grammar.
+
+	* src/getargs.h, src/getargs.c (feature_syntax_only): New.
+	(feature_args, feature_types): Adjust.
+	* src/main.c (main): Use it.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: beware of collisions on status
+	* src/symtab.h (status): Rename as...
+	(declaration_status): this, to avoid colliding with status, the
+	argument of 'usage'.
+	'status' seems a tad too general to be used only here.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	usage: document -ffixit
+	* src/getargs.c (usage): Document -ffixit.
+	Document the aliases of -f.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in state.c and ielr.c
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	Merge branch 'maint'
+	* maint:
+	  maint: post-release administrivia
+	  version 3.3.1
+	  yacc: issue warnings, not errors, for Bison extensions
+	  style: formatting changes in NEWS and complain.c
+	  tests: don't depend on the user's definition of SHELL
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.3.1
+	* NEWS: Record release date.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: issue warnings, not errors, for Bison extensions
+	Reported by Kiyoshi Kanazawa.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00029.html
+
+	* src/getargs.c (getargs): Let --yacc imply -Wyacc, not -Werror=yacc.
+	* tests/input.at: Adjust.
+	* doc/bison.tex (Bison Options): Document.
+
+2019-01-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes in NEWS and complain.c
+
+2019-01-27  Kiyoshi Kanazawa  <yoi_no_myoujou@yahoo.co.jp>
+
+	tests: don't depend on the user's definition of SHELL
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00031.html
+
+	* examples/test (SHELL): Set it to /bin/sh.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	traces: always print the reduced grammar and fix it
+	* src/gram.c (grammar_dump): Print the effective number first instead
+	of last.  And fix it (remove the incorrect "+1").
+	Use t/f for Booleans.
+	* src/reduce.c: When asked, always print the reduced grammar, even if
+	there was nothing useless.
+	* tests/sets.at (Reduced Grammar): Check that.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename LR0.* as lr0.*
+	Let's stick to lower case for file names.
+
+	* src/LR0.h, src/LR0.c: Rename as...
+	* src/lr0.h, src/lr0.c: these.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename print_graph.* as print-graph.*
+	These are the only files with _.
+
+	* src/print_graph.h, src/print_graph.c: Rename as...
+	* src/print-graph.h, src/print-graph.c: these.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: various fixes
+	* src/gram.c: Use consistent variable names.
+	Prefix prefix unary operators.
+	(grammar_dump): Use rule_rhs_length instead of duplicating it.
+	* src/reduce.c: Avoid useless variables.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes in gram.h
+	* src/gram.h: Shorten comments.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.3
+	* NEWS: Record release date.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix comment
+	* data/skeletons/c++.m4: here.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* data/skeletons/lalr1.cc: Add dnl.
+	* data/skeletons/bison.m4: Comment the use of dnl.
+
+2019-01-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: run the printer/destructor test on glr.cc
+	* tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Adjust for
+	glr.cc, and use it.
+
+2019-01-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-01-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	--update: when used, do not generate the output files
+	It is inconvenient that we also generate the output files when we
+	update the grammar file, and it's somewhat unexpected.  Let's not do
+	that.
+
+	* src/main.c (main): Skip generation when --update is passed.
+	* src/getargs.c (usage): Update the help message.
+	* doc/bison.texi (Bison Options): Likewise.
+	* tests/input.at: Check that we don't generate the output.
+
+2019-01-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: let redundant definitions be only warnings
+	After all, this is clearly harmless.
+
+	* src/muscle-tab.c (muscle_percent_define_insert): Let equal
+	definitions of a %define variable be only a warning.
+	Adjust test cases.
+
+2019-01-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: improve check for updated variable names
+	* tests/input.at ("%define" backward compatibility): Don't define
+	twice "api.namespace", so that we don't get an error, which stops the
+	process too soon to see an error about the value given to
+	'lr.keep-unreachable-state'.
+
+2019-01-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: remove redundancy
+	Don't repeat the name of the warning in the sub messages.  E.g.,
+	remove the second "[-Wother]" in the following message
+
+	    foo.y:2.1-27: warning: %define variable 'parse.error' redefined [-Wother]
+	     %define parse.error verbose
+	     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+	    foo.y:1.1-27:     previous definition [-Wother]
+	     %define parse.error verbose
+	     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	* src/complain.c (error_message): Don't print the warning type when
+	it's indented.
+	Adjust test cases.
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: better "scope" a workaround for GCC
+	* data/skeletons/lalr1.cc: Enable it only for GCC 4.8 and before.
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: address -Wweak-vtables warnings
+	Reported by Derek Clegg
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00021.html
+
+	    aux/parser-internal.h:429:12: error: 'syntax_error' has no out-of-line virtual
+	         method definitions; its vtable will be emitted in every translation unit
+	         [-Werror,-Wweak-vtables]
+	       struct syntax_error : std::runtime_error
+
+	To avoid this warning, we need syntax_error to have a virtual function
+	defined in a compilation unit.  Let it be the destructor.  To comply
+	with C++98, this dtor should be 'throw()'.  Merely making YY_NOEXCEPT
+	be 'throw()' in C++98 triggers
+	errors (http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00022.html),
+	so let's introduce YY_NOTHROW and flag only ~syntax_error with it.
+
+	Also, since we now have an explicit dtor, we need to provide an copy
+	ctor.
+
+	* configure.ac (warn_cxx): Add -Wweak-vtables.
+	* data/skeletons/c++.m4 (YY_NOTHROW): New.
+	(syntax_error): Declare the dtor, and define the copy ctor.
+	* data/skeletons/glr.cc, data/skeletons/lalr1.cc (~syntax_error):
+	Define.
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: prefer bool to char
+	* src/state.h, src/state.c (state::consistent): Make it a bool.
+	Adjust dependencies.
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: be more alike lalr1.cc
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* data/skeletons/c++.m4: Un-remove an end-of-line.
+
+2019-01-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: fixes
+
+2019-01-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-01-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.2.91
+	* NEWS: Record release date.
+
+2019-01-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: various fixes
+	Some reported by syntax-check.
+
+	* po/POTFILES.in: Add fixits.cc.
+	* src/muscle-tab.c: Don't cast for free.
+	* src/files.c: Reduce scopes.
+	* cfg.mk: We need the cast for free in muscle_percent_define_insert.
+
+2019-01-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: document -ffixit and --update
+	* doc/bison.texi (Bison Options): here.
+
+2019-01-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: style fixes
+	* doc/bison.texi: Use @kbd where appropriate.
+	Update ^~~~ marks for caret-errors.
+	* build-aux/cross-options.pl: Do not add quotes to %define's argument.
+
+2019-01-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update for fixits and --update
+
+2019-01-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: handle duplicates of %name-prefix
+	The test case "Deprecated directives" (currently 56) no longer emits
+	warnings after 'bison -u'!
+
+	* src/files.h, src/files.c (spec_name_prefix_loc): New.
+	* src/parse-gram.y (handle_name_prefix): Emit fixits for duplicate
+	%name-prefix.
+	* tests/input.at (Deprecated directives): Adjust.
+
+2019-01-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-01-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: handle %file-prefix
+	* src/files.h, src/files.c (spec_file_prefix_loc): New.
+	* src/scan-gram.l (%file-prefix): Delegate diagnostics to...
+	* src/parse-gram.y (handle_file_prefix): here.
+	* src/complain.c (duplicate_directive): Quote the directive.
+	* tests/input.at: Adjust.
+
+2019-01-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: handle per-rule duplicates
+	* src/complain.c (duplicate_rule_directive): Here.
+	* tests/actions.at (Invalid uses of %empty): Check it.
+
+2019-01-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: fix warnings about duplicates
+	* src/complain.c (duplicate_directive): Fix the complaint level.
+	* tests/input.at: Adjust.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: properly indent the "previous declaration" message
+	* src/complain.c (duplicate_directive, duplicate_rule_directive):
+	Here.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename some functions for consistency
+	"handle_" is the prefix used in scan-code.l for instance.
+
+	* src/parse-gram.y (do_error_verbose, do_name_prefix, do_require)
+	(do_skeleton, do_yacc):
+	Rename as...
+	(handle_error_verbose, handle_name_prefix, handle_require)
+	(handle_skeleton, handle_yacc):
+	these.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: report duplicate %yacc directives
+	We should use -ffixit and --update to clean files with duplicate
+	directives.  And we should complain only once about duplicate obsolete
+	directives: keep only the "duplicate" warning.  Let's start with %yacc.
+
+	For instance on:
+
+	    %fixed-output_files
+	    %fixed-output-files
+	    %yacc
+	    %%
+	    exp:
+
+	This run of bison:
+
+	    $ bison /tmp/foo.y -u
+	    foo.y:1.1-19: warning: deprecated directive, use '%fixed-output-files' [-Wdeprecated]
+	     %fixed-output_files
+	     ^~~~~~~~~~~~~~~~~~~
+	    foo.y:2.1-19: warning: duplicate directive [-Wother]
+	     %fixed-output-files
+	     ^~~~~~~~~~~~~~~~~~~
+	    foo.y:1.1-19: previous declaration
+	     %fixed-output_files
+	     ^~~~~~~~~~~~~~~~~~~
+	    foo.y:3.1-5: warning: duplicate directive [-Wother]
+	     %yacc
+	     ^~~~~
+	    foo.y:1.1-19: previous declaration
+	     %fixed-output_files
+	     ^~~~~~~~~~~~~~~~~~~
+	    bison: file 'foo.y' was updated (backup: 'foo.y~')
+
+	gives:
+
+	    %fixed-output-files
+	    %%
+	    exp:
+
+	* src/location.h, src/location.c (location_empty): New.
+	* src/complain.h, src/complain.c (duplicate_directive): New.
+
+	* src/getargs.h, src/getargs.c (yacc_flag): Instead of a Boolean, be
+	the location of the definition.
+	Update dependencies.
+
+	* src/scan-gram.l (%yacc, %fixed-output-files): Move the handling of
+	its warnings to...
+	* src/parse-gram.y (do_yacc): This new function.
+
+	* tests/input.at (Deprecated Directives): Adjust expectations.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename duplicate_directive as duplicate_rule_directive
+	* src/complain.h, src/complain.c: here.
+	Adjust callers.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: suggest running --update if there are fixits
+	* src/fixits.h, src/fixits.c (fixits_empty): New.
+	* src/complain.c (deprecated_directive): Register the Wdeprecated
+	fixits only if -Wdeprecated was enabled, so that we don't apply
+	updates if the user didn't ask for them.
+	* src/main.c (main): If there were fixits, issue a warning suggesting
+	running with --update.
+	Free uniqstrs after the fixits, since the latter use the former.
+	* tests/headers.at, tests/input.at: Update expectations.
+
+2019-01-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	fixits: avoid generating empty lines
+	* src/fixits.c (fixits_run): If erase the content of a line, also
+	erase the following \n.
+	* tests/input.at (Deprecated directives): Update expectations.
+
+2019-01-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure: don't try to run C++ warnings on C
+	Reported by Derek Clegg.
+	https://lists.gnu.org/archive/html/bison-patches/2019-01/msg00066.html
+
+	* configure.ac: here.
+
+2019-01-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	c, c++: avoid implicit fall-throw
+	Reported by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00004.html
+
+	* configure.ac (warn_common): Add -Wimplicit-fallthrough.
+	This does trigger failures in the test suite.
+	* data/skeletons/glr.c, data/skeletons/lalr1.cc,
+	* data/skeletons/yacc.c, tests/c++.at:
+	Make fall-throws explicit.
+
+2019-01-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid -Wundefined-func-template warnings from clang
+	Reported by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00006.html
+
+	Clang does not like this:
+
+	    template <typename D>
+	    struct basic_symbol : D
+	    {
+	      basic_symbol();
+	    };
+
+	    struct by_type {};
+
+	    struct symbol_type : basic_symbol<by_type>
+	    {
+	      symbol_type(){}
+	    };
+
+	It gives:
+
+	    $ clang++-mp-7.0 -Wundefined-func-template foo.cc -c
+	    foo.cc:11:3: warning: instantiation of function 'basic_symbol<by_type>::basic_symbol'
+	                 required here, but no definition is available [-Wundefined-func-template]
+	      symbol_type(){}
+	      ^
+	    foo.cc:4:3: note: forward declaration of template entity is here
+	      basic_symbol();
+	      ^
+	    foo.cc:11:3: note: add an explicit instantiation declaration to suppress this warning
+	                 if 'basic_symbol<by_type>::basic_symbol' is explicitly instantiated in
+	                 another translation unit
+	      symbol_type(){}
+	      ^
+	    1 warning generated.
+
+	The same applies for the basic_symbol's destructor and `clear()`.
+
+	* configure.ac (warn_cxx): Add -Wundefined-func-template.
+	This triggered one failure in the test suite:
+	* tests/headers.at (Sane headers): here, where we check that we can
+	compile the generated headers in other compilation units than the
+	parser's.
+	Add a variant type to make sure that basic_symbol and symbol_type are
+	properly generated in this case.
+	* data/skeletons/c++.m4 (basic_symbol): Inline the definitions of the
+	destructor and of `clear` in the class definition.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	Revert the last two commits
+	They should not have been pushed, sorry about that.
+
+	This reverts
+	- commit 8575bd06ae6e65f3a30b21a3e022a968e4c7ae7a.
+	- commit 55bf52860eac5c1394dc344a691220272df32b09.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid warnings about extraneous semi-colons
+	Reported by Derek Clegg.
+
+	* configure.ac (warn_common): Add -Wextra-semi.
+	* data/skeletons/c++.m4: Remove extraneous semi-colon.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	WIP
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: add fixit support for duplicate removal
+	* src/muscle-tab.c (muscle_percent_define_insert): Register a fixit
+	for duplicate removal.
+	* tests/input.at: Adjust expectations.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: improve the accuracy for %error-verbose
+	Avoid duplicate warnings about %error-verbose, once for deprecation,
+	another for duplicate.  Keep only the duplicate warning for the second
+	occurrence of %error-verbose.
+
+	This will help removal fixits.
+
+	* src/scan-gram.l (%error-verbose): Return as a PERCENT_ERROR_VERBOSE
+	token.
+	* src/parse-gram.y (do_error_verbose): New.
+	Use it.
+	* src/muscle-tab.c (muscle_percent_variable_update): Handle pseudo
+	variables such as %error-verbose.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: avoid duplicate warnings for deprecated directives
+	Currently, on
+
+	    %define parser_class_name "Parser"
+	    %define parser_class_name "Parser"
+	    %%
+	    exp:;
+
+	we issue:
+
+	    foo.y:1.9-25: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
+	     %define parser_class_name "Parser"
+	             ^~~~~~~~~~~~~~~~~
+	    foo.y:2.9-25: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
+	     %define parser_class_name "Parser"
+	             ^~~~~~~~~~~~~~~~~
+	    foo.y:2.9-25: error: %define variable 'api.parser.class' redefined
+	     %define parser_class_name "Parser"
+	             ^~~~~~~~~~~~~~~~~
+	    foo.y:1.9-25:     previous definition
+	     %define parser_class_name "Parser"
+	             ^~~~~~~~~~~~~~~~~
+
+	Let's get rid of the second warning about the deprecated variable
+	parser_class_name.  This is noise, but it will also be a problem with
+	fixits for removing duplicates, as we will first generate the update,
+	and then it's too late to remove it: fixits do not edit the result of
+	previous fixits.
+
+	So generate this instead:
+
+	    foo.y:1.1-34: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
+	     %define parser_class_name "Parser"
+	     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	    foo.y:2.1-34: error: %define variable 'api.parser.class' redefined
+	     %define parser_class_name "Parser"
+	     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	    foo.y:1.1-34:     previous definition
+	     %define parser_class_name "Parser"
+	     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	* src/muscle-tab.c (muscle_percent_variable_update): Pass the warning
+	to the caller, instead of issuing it.
+	(muscle_percent_define_insert): Issue this warning only if we don't
+	have to complain about a duplicate definition.
+	* tests/input.at: Adjust expectations.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: update the grammar file
+	Let's use the fixits to actually update the grammar files.
+
+	* src/getargs.h, src/getargs.c (update_flag): New.
+	* src/fixits.h, src/fixits.c (fixits_run): New.
+	* src/main.c (main): Invoke fixits_run when --update is passed.
+	* tests/input.at (Deprecated directives): Check --update.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: improve accuracy for deprecated %define variables
+	* src/parse-gram.y: Use the location of the whole definition to record
+	the location of a %define variable, instead of just the name of the
+	variable.
+	Adjust tests.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: keep the fixits
+	Introduce proper support for fixits, instead of just printing them on
+	demand.
+
+	* bootstrap.conf: We need gnulib's xlists.
+	* src/fixits.h, src/fixits.c: New.
+	* src/complain.c (deprecated_directive): Use fixits_register.
+	* src/main.c (main): Use fixits_free.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: add -ffixit support for deprecated features
+	Issue directives for IDE/editors to fix the source file.
+	http://clang.llvm.org/docs/UsersManual.html#cmdoption-fdiagnostics-parseable-fixits
+
+	Do it for deprecated features.  For instance:
+
+	    $ cat foo.y
+	    %error-verbose
+
+	    %name-prefix = "foo"
+	    %name-prefix="bar"
+	    %define parser_class_name "Parser"
+
+	    %%
+	    exp:;
+
+	    $ LC_ALL=C ./_build/8d/tests/bison -ffixit /tmp/foo.yy
+	    /tmp/foo.yy:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
+	     %error-verbose
+	     ^^^^^^^^^^^^^^
+	    fix-it:"/tmp/foo.yy":{1:1-1:15}:"%define parse.error verbose"
+	    /tmp/foo.yy:3.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated]
+	     %name-prefix = "foo"
+	     ^^^^^^^^^^^^^^^^^^^^
+	    fix-it:"/tmp/foo.yy":{3:1-3:21}:"%define api.prefix {foo}"
+	    /tmp/foo.yy:4.1-18: warning: deprecated directive, use '%define api.prefix {bar}' [-Wdeprecated]
+	     %name-prefix="bar"
+	     ^^^^^^^^^^^^^^^^^^
+	    fix-it:"/tmp/foo.yy":{4:1-4:19}:"%define api.prefix {bar}"
+	    /tmp/foo.yy:5.9-25: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
+	     %define parser_class_name "Parser"
+	             ^^^^^^^^^^^^^^^^^
+	    fix-it:"/tmp/foo.yy":{5:9-5:26}:"%define api.parser.class {Parser}"
+	    /tmp/foo.yy:5.9-25: error: %define variable 'api.parser.class' is not used
+	     %define parser_class_name "Parser"
+	             ^^^^^^^^^^^^^^^^^
+
+	* src/getargs.h, src/getargs.c (feature_fixit_parsable): New.
+	(feature_types, feature_args): Use it.
+	* src/complain.c (deprecated_directive): Use it.
+
+	* tests/input.at: Check it.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: prefer ^~~~ to ^^^^ to underline code
+	That's what both GCC and Clang do, and it is indeed much nicer to
+	read.  From:
+
+	    foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
+	     %error-verbose
+	     ^^^^^^^^^^^^^^
+	    foo.y:4.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated]
+	     %name-prefix = "foo"
+	     ^^^^^^^^^^^^^^^^^^^^
+
+	to:
+
+	    foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
+	     %error-verbose
+	     ^~~~~~~~~~~~~~
+	    foo.y:4.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated]
+	     %name-prefix = "foo"
+	     ^~~~~~~~~~~~~~~~~~~~
+
+	* src/location.c (location_caret): Use ^~~~.
+	Adjust tests expectations.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: improve them for %name-prefix
+	Currently the diagnostics for %name-prefix are not precise enough.  In
+	particular, they does not show that braces must be used instead of
+	quotes.
+
+	Before:
+
+	    foo.y:3.1-14: warning: deprecated directive, use '%define api.prefix' [-Wdeprecated]
+	     %name-prefix = "foo"
+	     ^^^^^^^^^^^^^^
+
+	After:
+
+	    foo.y:3.1-20: warning: deprecated directive, use '%define api.prefix {foo}' [-Wdeprecated]
+	     %name-prefix = "foo"
+	     ^^^^^^^^^^^^^^^^^^^^
+
+	To do this we need the value passed to %name-prefix, so move the
+	warning from the scanner to the parser.
+
+	Accuracy will be very important for the forthcoming changes.
+
+	* src/parse-gram.y (do_name_prefix): New.
+	(PERCENT_NAME_PREFIX): Have a semantic value: the raw source, with
+	possibly underscores, equal sign, and spaces.  This is used to provide
+	a more accurate message.  It does not take comments into account,
+	but...
+	* src/scan-gram.l (%name-prefix): Delegate the warnings to the parser.
+
+	* tests/headers.at, tests/input.at: Adjust expectations.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	diagnostics: style: avoid allocating memory when not needed
+	* src/muscle-tab.c (muscle_percent_variable_update): Avoid allocating
+	memory when it is not needed, which should be most of the time (when
+	there's no update to perform).
+	Adjust callers.
+
+2019-01-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid warnings about extraneous semi-colons
+	Reported by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00005.html
+
+	* configure.ac (warn_cxx): Add -Wextra-semi.
+	* data/skeletons/c++.m4: Remove extraneous semi-colon.
+
+2019-01-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: minor changes
+	* src/muscle-tab.c: Sort alphabetically.
+	* src/scan-gram.l: Reduce scopes.
+	Initialize variables.
+
+2019-01-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: beware of -Wshadow
+	This line:
+
+	    slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
+
+	triggers warnings:
+
+	    parse.h:1790:11: note: shadowed declaration is here
+
+	Reported by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00002.html
+
+	* configure.ac (warn_c): Move -Wshadow to...
+	(warn_common): here.
+	* data/skeletons/stack.hh (slice): Define as an inner class of stack.
+	* data/skeletons/lalr1.cc: Adjust.
+	Rename the variable as 'range' instead of 'slice'.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.2.90
+	* NEWS: Record release date.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: fix relocatability
+	* src/yacc.in (prefix): Define it, as it's typically needed for
+	exec_prefix.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	syntax-check: adjust paths
+	* cfg.mk: here.
+	(require_config_h): New.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting clean up
+	* data/skeletons/d.m4, examples/d/calc.y, src/output.c,
+	* src/parse-gram.y:
+	No tab, no trailing spaces.
+	Reported by syntax-check.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	po: remove bitset/stats.c
+	* po/POTFILES.in: here.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix usage of AT_PARSER_CHECK
+	The parser must be the first command.  Caught by syntax-check.
+
+	* tests/c++.at: here.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: isolate the creation of tname in a function
+	* src/output.c (prepare_symbol_names): New.
+	Use it.
+
+2019-01-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: formatting changes
+	* tests/input.at, tests/regression.at: here.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: use @option consistently
+	* doc/bison.texi: Use @option, not @code, for options.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: avoid negated if
+	* data/skeletons/yacc.c: Prefer a "direct" conditional.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: bump copyrights to 2019
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	java/d: rename some %define variables for consistency
+	See 890ee8a1fd288b3cc1c21c49ea0ece696ef40565 and
+	https://lists.gnu.org/archive/html/bison-patches/2019-01/msg00024.html.
+
+	* data/skeletons/d.m4, data/skeletons/java.m4
+	(abstract, annotations, extends, final, implements, public, strictfp):
+	Rename as...
+	(api.parser.abstract, api.parser.annotations, api.parser.extends)
+	(api.parser.final, api.parser.implements, api.parser.public)
+	(api.parser.strictfp):
+	these.
+
+	* src/muscle-tab.c (muscle_percent_variable_update): Ensure backward
+	compatibility.
+
+	* doc/bison.texi, examples/d/calc.y, examples/java/Calc.y,
+	tests/input.at: Adjust.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	java/d: remove useless macros
+	There are many macros that are defined and used just
+	once (b4_public_if, b4_abstract_if, etc.).  That's overkill.  Rather,
+	let's define a macro to build the "public class YYParser" line.
+
+	It appears that the same syntax with "extends", "abstract", etc. is
+	implemented in the D parser, which looks very fishy...
+
+	* data/skeletons/d.m4, data/skeletons/java.m4 (b4_public_if)
+	(b4_abstract_if, b4_final_if, b4_strictfp_if): Replace with
+	(b4_parser_class_declaration): this.
+	* data/skeletons/lalr1.d, data/skeletons/lalr1.java: Adjust.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clean tests
+	* tests/named-refs.at: here.
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	In particular, report uninitialized submodules instead of breaking
+	symlinks.
+
+	For reports, see
+	https://lists.gnu.org/archive/html/bug-bison/2011-05/msg00012.html
+	https://lists.gnu.org/archive/html/help-bison/2018-12/msg00034.html
+
+	For a fix, see
+	https://lists.gnu.org/archive/html/bug-gnulib/2019-01/msg00024.html
+
+2019-01-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: fix the handling of syntax_error from the scanner
+	Commit 90a8537e6287f92fb3d5be0258a69247a742f12e was right, but issued
+	two error messages.  Commit 80ef7e7639f99618bee490b2dea02b5fd9ab28e5
+	tried to address that by mapping yychar and yytoken to empty, but that
+	completely breaks the invariants of glr.c.  In particular, yygetToken
+	can be called repeatedly and is expected to return the latest result,
+	unless yytoken is YYEMPTY.  Since the previous attempt was "recording"
+	that the token was coming from an exception by setting it to YYEMPTY,
+	instead of getting again the faulty token, we fetched another one.
+
+	Rather, revert to the first approach: map yytoken to "invalid token",
+	but record in yychar the fact that we come from an exception thrown in
+	the scanner.
+
+	* data/skeletons/glr.c (YYFAULTYTOK): New.
+	(yygetToken): Use it to record syntax errors from the scanner.
+	* tests/c++.at (Syntax error as exception): In addition to checking
+	syntax_error with error recovery, make sure it also behaves as
+	expected without.
+
+2019-01-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	clearly deprecate %name-prefix
+	* src/scan-gram.l (%name-prefix): Issue a deprecation warning.
+
+	* tests/calc.at, tests/headers.at, tests/input.at, tests/java.at,
+	* tests/javapush.at, tests/local.at: Adjust expectations.
+	Or disable -Wdeprecated.
+
+	* doc/bison.texi: Document that %name-prefix is replaced by %define
+	api.prefix.
+
+2019-01-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: clean up the Java/D examples
+	* examples/java/Calc.y: Fix indentation.
+	Sort.
+	Don't use %name-prefix, since api.parser.class is already defined.
+	* examples/d/calc.y: Likewise.
+
+2019-01-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: here.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	rename parser_class_name as api.parser.class
+	The previous name was historical and inconsistent.
+
+	* src/muscle-tab.c (define_directive): Use the proper value passing
+	syntax, based on the muscle kind.
+	(muscle_percent_variable_update): Use the right value passing syntax.
+	Migrate from parser_class_name to api.parser.class.
+
+	* data/skeletons: Migrate from parser_class_name to api.parser.class.
+
+	* doc/bison.texi (%define Summary): Document both parser_class_name
+	and api.parser.class.
+	Promote the latter over the former.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* src/scan-gram.l: Here.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: glr.c: prefer returning a value rather than passing pointers
+	This is very debatable.  This function is not pure at all, so it could
+	stick to returning void: that's a common coding style to tell the
+	difference between "real" (pure) functions and side-effecting
+	subroutines.  However, we already have this style elsewhere (e.g.,
+	yylex), and I feel the callers are somewhat nice to read this way.
+
+	* data/skeletons/glr.c (yygetLRActions): Return the action rather than
+	passing by pointer.
+	While at it, fix type of yytoken.
+	Adjust callers.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: don't issue two error messages when syntax_error is thrown
+	Reported by Askar Safin.
+	https://lists.gnu.org/archive/html/bison-patches/2019-01/msg00000.html
+
+	* data/skeletons/glr.c (yygetToken): Return YYEMPTY when an exception
+	is thrown.
+	* data/skeletons/lalr1.cc: Log when an exception is caught.
+	* tests/c++.at (Syntax error as exception): Be sure to recover from
+	error before triggering another error.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	skeletons: shorten b4_parser_class_name to b4_parser_class
+	* skeletons/c++.m4, skeletons/d.m4, skeletons/glr.c, skeletons/glr.cc,
+	* skeletons/java.m4, skeletons/lalr1.cc, skeletons/lalr1.d,
+	* skeletons/lalr1.java: Here.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: remove duplicate definition of YYLLOC_DEFAULT
+	It's already provided by glr.c.
+
+	* data/skeletons/glr.cc (b4_post_prologue): Here.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: sort includes in scanners
+	* src/scan-code.l, src/scan-gram.l, src/scan-skel.l: Reorder includes.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes in the doc
+	* doc/bison.texi: here.
+
+2019-01-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: remove stray empty lines
+	* data/skeletons/glr.c, data/skeletons/glr.cc: here.
+	* data/skeletons/bison.m4 (b4_glr_cc_if): Move it here.
+
+2018-12-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.cc: support syntax_error exceptions
+	Kindly requested by Аскар Сафин (Askar Safin).
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00033.html
+
+	* data/skeletons/glr.c (b4_glr_cc_if): New.
+	Use it.
+	(yygetToken): Catch syntax_errors.
+	* data/skeletons/glr.cc (YY_EXCEPTIONS): New.
+	* tests/c++.at: Check it.
+
+2018-12-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: factor the calls to yylex
+	The call protocol of yylex is quite complex, and repeated three
+	times.  Let's factor it.
+
+	* data/skeletons/glr.c (yygetToken): New.
+	Use it.
+
+2018-12-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in glr.c
+	* data/skeletons/glr.c (yyrecoverSyntaxError): here.
+
+2018-12-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: refactor
+
+2018-12-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: inline the implementation of syntax_error in its definition
+	This way, it is easier to make sure its implementation is available in
+	glr.cc too, which is not the case currently.
+
+	* data/skeletons/c++.m4 (b4_public_types_define): Move the
+	implementation of syntax_error...
+	(b4_public_types_declare): here.
+
+2018-12-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* tests/input.at: here.
+
+2018-12-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbol: don't crash on symbol without content
+	When running with --trace=parse, we may crash.
+
+	* src/symtab.c (symbol_print): Avoid that.
+
+2018-12-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	README-hacking: update
+
+2018-12-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: get rid of a useless function
+	Useless since 58d7a1a1c7497ba51a35fcf991c5b047f692fe18 (2006).
+
+	* src/parse-gram.y, src/reader.h (token_name): Remove, unused.
+
+2018-12-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	parsers: fix minor stylistic issues
+	* data/skeletons/variant.hh (b4_token_constructor_declare): Remove,
+	unused since the previous commit.
+	Fix indentation issues.
+	* data/skeletons/c++.m4: Fix indentation issues.
+
+2018-12-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: check several parsers in the same program
+	* tests/local.at (AT_LOCATION_TYPE_IF): Turn into...
+	(AT_LOCATION_TYPE_SPAN_IF): this.
+	Adjust dependencies.
+	* tests/headers.at (Several parsers): Add another C++ parser,
+	which uses the first C++ parser's locations.
+
+2018-12-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: variants: fuse declarations and definitions
+	We used to create a short definition of yy::parser with all the
+	implementations of its member functions outside.  But yy::parser is no
+	longer short and simple to read.  Maintaining each function twice is
+	painful: a lot of redundancy but different indentation levels, output
+	which depends on whether we are in a header or not (see
+	d132c2d5455135f63a7497c38358eadd6e3a6af8), etc.
+
+	Let's simplify this and put the implementations into the class
+	definition itself.
+
+	Discussed in this monologue:
+	https://lists.gnu.org/archive/html/bison-patches/2018-12/msg00058.html.
+
+	* data/skeletons/c++.m4, data/skeletons/lalr1.cc,
+	* data/skeletons/variant.hh (b4_basic_symbol_constructor_define)
+	(_b4_token_constructor_declare, b4_token_constructor_declare)
+	Merge into...
+	(b4_basic_symbol_constructor_define, _b4_token_constructor_define)
+	(b4_token_constructor_define): these.
+
+2018-12-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix dependencies
+	Commit 112ccb5ed73ba5c64b0b5300d8b9b686f02f094c moved the skeletons
+	from dist_pkgdata_DATA to dist_skeletons_DATA, hence broke the dependencies.
+
+	* Makefile.am (dependencies): New.
+	Use it where appropriate.
+
+2018-12-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: move stack<T> inside yy::parser
+	We used to define such auxiliary structures outside the class, mainly
+	as a matter of style to keep the definition of yy::parser short and
+	simple.  However, now there's a lot more code generated inside the
+	class definition (e.g., all the token constructors), so the
+	readability no longer applies.
+
+	However, if we move stack (and slice) inside yy::parser, then it
+	should no longer be needed to change the namespace to have multiple
+	parsers: changing the class name should suffice.
+
+	One common argument against inner classes is that they code bloat.  It
+	hardly applies here, since typically different parsers will have
+	different semantic value types, hence different actual stack types.
+
+	* data/skeletons/lalr1.cc: Invoke b4_stack_define inside yy::parser.
+
+2018-12-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: make bison a relocatable package
+	Suggested by David Barto
+	https://lists.gnu.org/archive/html/help-bison/2015-02/msg00004.html
+	and Victor Zverovich.
+	https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00121.html
+
+	This is very easy to do, thanks to work by Bruno Haible in gnulib.
+	See "Supporting Relocation" in gnulib's documentation.
+
+	* bootstrap.conf: We need relocatable-prog and relocatable-script (for yacc).
+
+	* src/yacc.in: New.
+	* configure.ac, src/local.mk: Instantiate it.
+	* src/main.c, src/output.c (main, pkgdatadir): Use relocatable2.
+
+	* doc/bison.texi (FAQ): Document it.
+
+2018-12-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	README: wrap paragraphs
+
+2018-12-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-12-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	package: move skeletons into data/skeletons
+	* data/bison.m4, data/c++-skel.m4, data/c++.m4, data/c-like.m4,
+	* data/c-skel.m4, data/c.m4, data/d-skel.m4, data/d.m4, data/glr.c,
+	* data/glr.cc, data/java-skel.m4, data/java.m4, data/lalr1.cc,
+	* data/lalr1.d, data/lalr1.java, data/location.cc, data/stack.hh,
+	* data/variant.hh, data/yacc.c:
+	Move to...
+	* data/skeletons: here.
+	Use b4_skeletonsdir instead of b4_pkgdatadir.
+
+	* data/local.mk, src/output.c: Adjust.
+
+2018-12-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style: use consistently this/that instead of this/other
+	* data/lalr1.cc, data/variant.hh: here.
+
+2018-12-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: also provide a copy constructor for symbol_type
+	Suggested by Wolfgang Thaller.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00081.html
+
+	* data/c++.m4 (basic_symbol, by_type): Instead of provide either move
+	or copy constructor, always provide the copy one.
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): Check it.
+
+2018-12-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix double free when a symbol_type was moved
+	Currently the following piece of code crashes (with parse.assert),
+	because we don't record that s was moved-from, and we invoke its dtor.
+
+	    {
+	      auto s = parser::make_INT (42);
+	      auto s2 = std::move (s);
+	    }
+
+	Reported by Wolfgang Thaller.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00077.html
+
+	* data/c++.m4 (by_type): Provide a move-ctor.
+	(basic_symbol): Be sure not to read a moved-from value.
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): Check this case.
+
+2018-12-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style: improve tests
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): Provide better
+	assertions.
+	Use them.
+	Avoid useless Bison invocations.
+
+2018-12-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style: use consistently this/that instead of this/other
+	* data/c++.m4: here.
+
+2018-12-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fixes
+	* tests/c++.at: Use AT_YYLEX_PROTOTYPE etc.
+	Which requires that we use the same argument names (lvalp, etc.).
+	* tests/local.at (AT_NAME_PREFIX): Fix regex.
+
+2018-12-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style: rename a few macros for clarity
+	* data/c++.m4, data/lalr1.cc, data/variant.hh:
+	s/b4_symbol_constructor/b4_token_constructor/g, as this is really what
+	is being defined.
+
+2018-12-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: exhibit a safe symbol_type
+	Instead of introducing make_symbol (whose name, btw, somewhat
+	infringes on the user's "name space", if she defines a token named
+	"symbol"), let's make the construction of symbol_type safer, using
+	assertions.
+
+	For instance with:
+
+	    %token ':' <std::string> ID <int> INT;
+
+	generate:
+
+	    symbol_type (int token, const std::string&);
+	    symbol_type (int token, const int&);
+	    symbol_type (int token);
+
+	It does mean that now named token constructors (make_ID, make_INT,
+	etc.) go through a useless assert, but I think we can ignore this: I
+	assume any decent compiler will inline the symbol_type ctor inside the
+	make_TOKEN functions, which will show that the assert is trivially
+	verified, hence I expect no code will be emitted for it.  And anyway,
+	that's an assert, NDEBUG controls it.
+
+	* data/c++.m4 (symbol_type): Turn into a subclass of
+	basic_symbol<by_type>.
+	Declare symbol constructors when variants are enabled.
+	* data/variant.hh (_b4_type_constructor_declare)
+	(_b4_type_constructor_define): Replace with...
+	(_b4_symbol_constructor_declare, _b4_symbol_constructor_def): these.
+	Generate symbol_type constructors.
+	* doc/bison.texi (Complete Symbols): Document.
+	* tests/types.at: Check.
+
+2018-12-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: provide symbol constructors per type
+	On
+
+	    %token <int> FOO BAR
+
+	we currently generate make_FOO(int) and make_BAR(int).  However, in
+	order to factor their scanners, some users would also like to have
+	make_symbol(tok, int), where tok is FOO or BAR.  To ensure type
+	safety, add assertions that do check that value type and token type
+	match.  Bind this assertion to the parse.assert %define variable.
+
+	Suggested by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00034.html
+	Should also match expectations from Аскар Сафин.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00023.html
+
+	* data/variant.hh: Use b4_token_visible_if where applicable.
+	(_b4_type_constructor_declare, _b4_type_constructor_define): New.
+	Use them.
+
+2018-12-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style changes
+	* data/c++.m4, data/variant.hh: Improve layout of the generated code.
+	Avoid casts.
+	(_b4_symbol_constructor_declare, _b4_symbol_constructor_define): Rename
+	as...
+	(_b4_token_maker_declare, _b4_token_maker_define): these.
+	* tests/types.at: Improve pair printing.
+
+2018-12-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: simplify tests
+	* tests/types.at: Simplify C++ instantiations.
+
+2018-12-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use b4_token_visible_if
+	And other formatting/comment changes.
+
+	* data/variant.hh: Here.
+
+2018-12-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-12-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix token constructors for types with commas
+	Bitten by macros, again.
+	See 680b715518795c8648360fcf05f3772c04d2eed2.
+
+	* data/variant.hh (_b4_symbol_constructor_declare)
+	(_b4_symbol_constructor_define): Do not use user types, which can
+	include commas as in `std::pair<int, int>`, to macros.
+
+	* tests/local.at: Adjust the lex related macros to support the
+	case of token constructors.
+	* tests/types.at: Also check token constructors on types with commas.
+
+2018-12-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-12-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbols: document the overhaul of symbol declarations
+	* doc/bison.texi (Symbol Decls): New.
+
+2018-12-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbols: check more invalid declarations
+	* tests/input.at (Invalid %nterm uses): Rename as...
+	(Invalid symbol declarations): this.
+	Extend.
+
+2018-12-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbols: check the previous commit
+	* tests/input.at (Symbol declarations): New.
+
+2018-12-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-12-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbols: clean up their parsing
+	Prompted by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html
+
+	We have four classes of directives that declare symbols: %nterm,
+	%type, %token, and the family of %left etc.  Currently not all of them
+	support the possibility to have several type tags (`<type>`), and not
+	all of them support the fact of not having any type tag at all
+	(%type).  Let's unify this.
+
+	- %type
+	  POSIX Yacc specifies that %type is for nonterminals only.  However,
+	  some Bison users want to use it for both tokens and nterms
+	  (actually, Bison's own grammar does this in several places, e.g.,
+	  CHAR).  So it should accept char/string literals.
+
+	  As a consequence cannot be used to declare tokens with their alias:
+	  `%type foo "foo"` would be ambiguous (are we defining foo = "foo",
+	  or are these two different symbols?)
+
+	  POSIX specifies that it is OK to use %type without a type tag.  I'm
+	  not sure what it means, but we support it.
+
+	- %token
+	  Accept token declarations with number and string literal:
+	  (ID|CHAR) NUM? STRING?.
+
+	- %left, etc.
+	  They cannot be the same as %token, because we accept to declare the
+	  symbol with %token, and to then qualify its precedence with %left.
+	  Then `%left foo "foo"` would also be ambiguous: foo="foo", or two
+	  symbols.
+
+	  They cannot be simply a list of identifiers, but POSIX Yacc says we
+	  can declare token numbers here.  I personally think this is a bad
+	  idea, precedence management is tricky in itself and should not be
+	  cluttered with token declaration issues.
+
+	  We used to accept declaring a token number on a string literal here
+	  (e.g., `%left "token" 1`).  This is abnormal.  Either the feature is
+	  useful, and then it should be supported in %token, or it's useless
+	  and we should not support it in corner cases.
+
+	- %nterm
+	  Obviously cannot accept tokens, nor char/string literals.  Does not
+	  exist in POSIX Yacc, but since %type also works for terminals, it is
+	  a nice option to have.
+
+	* src/parse-gram.y: Avoid relying on side effects.  For instance, get
+	rid of current_type, rather, build the list of symbols and iterate
+	over it to assign the type.
+	It's not always possible/convenient.  For instance, we still use
+	current_class.
+	Prefer "decl" to "def", since in the rest of the implementation we
+	actually "declare" symbols, we don't "define" them.
+	(token_decls, token_decls_for_prec, symbol_decls, nterm_decls): New.
+	Use them for %token, %left, %type and %nterm.
+	* src/symlist.h, src/symlist.c (symbol_list_type_set): New.
+	* tests/regression.at b/tests/regression.at
+	(Token number in precedence declaration): We no longer accept
+	to give a number to string literals.
+
+2018-12-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	symbols: set tag_seen when assigning a type to symbols
+	* src/reader.h, src/reader.c (tag_seen): Move to...
+	* src/symtab.h, src/symtab.c: here.
+	(symbol_type_set): Set it to true.
+	* src/parse-gram.y: Don't.
+
+2018-12-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: isolate test about Yacc warnings
+	* tests/input.at (Yacc warnings): New.
+	(AT_CHECK_UNUSED_VALUES): Remove checks about yacc.
+
+2018-12-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: warn about string literals in Yacc mode
+	* src/scan-gram.l (scan_integer): Warn.
+	* tests/input.at (Yacc warnings on symbols): Check.
+
+2018-12-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: warn about hexadecimal token numbers in Yacc mode
+	* src/scan-gram.l (scan_integer): Warn.
+	* tests/input.at (Yacc warnings on symbols): Check.
+
+2018-12-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: reprecate %nterm back
+	After having spent quite some time on cleaning the handling of symbol
+	declarations in the grammar files, I believe we should keep it.
+
+	It looks like it's a duplicate of %type, but it is not.  While POSIX
+	Yacc requires %type to apply only to nonterminal symbols, it appears
+	that both byacc and bison accept it for tokens too.  And some
+	experienced users do actually expect this feature to group
+	symbols (terminal or not) by type ("On the other hand, it is generally
+	more useful IMHO to group terminals and non-terminals with the same
+	type tag together",
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html).
+	Even Bison's own parser does this today (see CHAR).
+
+	Basically reverts 7928c3e6fbdf47ff81184966cee937e6aa694b94.
+
+	* src/scan-gram.l (%nterm): Dedeprecate, but issue a Wyacc warning.
+	* tests/input.at: Adjust expectations.
+	(Yacc warnings  on symbols): New.
+	* src/symtab.c (symbol_class_set): Fix error introduced in
+	20b07467938cf880a1d30eb30d6e191843a21fec.
+
+2018-12-11  Eduard Staniloiu  <edi33416@gmail.com>
+
+	CI: add dmd support
+	* .travis.yml: here.
+
+2018-12-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: s/non-terminal/nonterminal/
+	I personally prefer 'non terminal', or 'non-terminal', but
+	'nonterminal' is the common spelling.
+
+	* data/glr.c, src/parse-gram.y, src/symtab.c, src/symtab.h,
+	* tests/input.at, doc/refcard.tex: here.
+
+2018-12-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: rename error functions for clarity
+	* src/symtab.c (symbol_redeclaration, semantic_type_redeclaration)
+	(user_token_number_redeclaration):
+	Rename as...
+	(complain_symbol_redeclared, complain_semantic_type_redeclared)
+	(complain_user_token_number_redeclared):
+	this.
+
+2018-12-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: improve the error message for symbol class redefinition
+	Currently our error messages include both "symbol redeclared" and
+	"symbol redefined", and they mean something different.  This is
+	obscure, let's make this clearer.
+
+	I think the idea between 'definition' vs. 'declaration' is that in the
+	case of the nonterminals, the actual definition is its set of rules,
+	so %nterm would be about declaration.  The case of %token is less
+	clear.
+
+	* src/symtab.c (complain_class_redefined): New.
+	(symbol_class_set): Use it.
+	Simplify the logic of this function to clearly skip its body when the
+	preconditions are not met.
+	* tests/input.at (Symbol class redefinition): New.
+
+2018-12-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: simplify computation of yydebug
+	* examples/c/lexcalc/parse.y: here.
+
+2018-12-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: support variadic emplace
+	Suggested by Askar Safin.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00006.html
+
+	* data/variant.hh: Implement.
+	* tests/types.at: Check.
+	* doc/bison.texi: Document.
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: add a simple Flex+Bison example in C
+	Suggested by Askar Safin.
+	http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00003.html
+
+	* examples/c/lexcalc/Makefile, examples/c/lexcalc/README.md,
+	* examples/c/lexcalc/lexcalc.test, examples/c/lexcalc/local.mk,
+	* examples/c/lexcalc/parse.y, examples/c/lexcalc/scan.l:
+	New.
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: sort them per language and complete them
+	Convert some of the READMEs to Markdown, which is now more common, and
+	nicely displayed in some git hosting services.
+
+	Add missing READMEs and Makefiles.  Generate XML, HTML and Dot files.  Be
+	sure to ship the test files.  Complete CLEANFILES to remove all generated
+	files.
+
+	* examples/calc++: Move into...
+	* examples/c++: here.
+	* examples/mfcalc, examples/rpcalc: Move into...
+	* examples/c: here.
+
+	* examples/README.md, examples/c++/calc++/Makefile, examples/c/local.mk,
+	* examples/c/mfcalc/Makefile, examples/c/rpcalc/Makefile,
+	* examples/d/README.md, examples/java/README.md:
+	New files.
+
+	* examples/test (medir): Be robust to deeper directory nesting.
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: minor refactoring
+	* src/parse-gram.y (symbol.prec): Reuse int.opt.
+
+2018-12-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: move checks inside the called functions
+	Revamping the handling of the symbols is the grammar is much more
+	delicate than I anticipated.  Let's first move things around for
+	clarity.
+
+	* src/symtab.c (symbol_make_alias): Don't accept to alias
+	non-terminals.
+	(symbol_user_token_number_set): Don't accept user token numbers
+	for non-terminals.
+	Don't do anything in case of redefinition, instead of trying to
+	update.  The flow is eaier to follow this way.
+
+2018-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: fix double definition of YYSemanticType
+	* data/lalr1.d: When moving to b4_user_union_members, it also defines
+	b4_tag_seen_flag, so we had two definitions.
+
+2018-12-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: fix incorrect condition to raise a syntax error
+	* src/parse-gram.y (symbol_def): Fix test.
+
+2018-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: fix use of b4_union_members
+	* data/lalr1.d: Use b4_user_union_members instead.
+
+2018-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* data/variant.hh: here.
+
+2018-12-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	java, d: add a Makefile for the example
+	* examples/java/Makefile, examples/d/Makefile: New.
+
+2018-12-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in ielr.c
+	* src/ielr.c: here.
+
+2018-12-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: scope reduction in lalr.c
+	* src/lalr.c: here.
+
+2018-12-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	d, java: compute static subtractions
+	* data/d.m4, data/java.m4: Use b4_subtract where appropriate.
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: add an example
+	* examples/d/calc.test, examples/d/calc.y, examples/d/local.mk:
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: update the skeleton
+	* data/d.m4, data/lalr1.d: Catch up with Bison.
+	And actually, also catch up with D.
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: add experimental support for the D language
+	* configure.ac (ENABLE_D): New.
+	* src/getargs.c (valid_languages): Add d.
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	d: add skeleton for the D language
+	Contributed by Oliver Mangold.
+	https://lists.gnu.org/archive/html/help-bison/2012-01/msg00000.html
+
+	* README-D.txt, d-skel.m4, d.m4, lalr1.d: New.
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: regenerate them when version.texi changes
+	When we extract the examples from the documentation, %require
+	"@value{VERSION}" is replaced with the current version.  If we change
+	the git branch, without changing the documentation, the generated
+	examples will %require a version of Bison that differs from the actual
+	version.
+
+	* examples/local.mk (extracted.stamp): Depend on doc/version.texi.
+
+2018-12-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	skeletons: start some technical documentation
+	* data/README: Convert to Markdown.
+	Start documenting some of the macros used in all our skeletons.
+	Simplify and fix the documentation of the macros in the skeletons.
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	backend: revamp the handling of symbol types
+	Currently it is the front end that passes the symbol types to the
+	backend.  For instance:
+
+	  %token <ival> NUM
+	  %type <ival> exp1 exp2
+	  exp1: NUM { $$ = $1; }
+	  exp2: NUM { $<ival>$ = $<ival>1; }
+
+	In both cases, $$ and $1 are passed to the backend as having type
+	'ival' resulting in code like `val.ival`.  This is troublesome in the
+	case of api.value.type=union, since in that the case the code this:
+
+	  %define api.value.type union
+	  %token <int> NUM
+	  %type <int> exp1 exp2
+	  exp1: NUM { $$ = $1; }
+	  exp2: NUM { $<int>$ = $<int>1; }
+
+	because in this case, since the backend does not know the symbol being
+	processed, it is forced to generate casts in both cases: *(int*)(&val)`.
+	This is unfortunate in the first case (exp1) where there is no reason
+	at all to use a cast instead of `val.NUM` and `val.exp1`.
+
+	So instead delegate the computation of the actual value type to the
+	backend: pass $<ival>$ as `symbol-number, ival` and $$ as
+	`symbol-number, MULL`, instead of passing `ival` before.
+
+	* src/scan-code.l (handle_action_dollar): Find the symbol the action
+	is about, not just its tyye.  Pass both symbol-number, and explicit
+	type tag ($<tag>n when there is one) to b4_lhs_value and b4_rhs_value.
+
+	* data/bison.m4 (b4_symbol_action): adjust to the new signature to
+	b4_dollar_pushdef.
+
+	* data/c-like.m4 (_b4_dollar_dollar, b4_dollar_pushdef): Accept the
+	symbol-number as new argument.
+
+	* data/c.m4 (b4_symbol_value): Accept the symbol-number as new
+	argument, and use it.
+	(b4_symbol_value_union): Accept the symbol-number as new
+	argument, and use it to prefer ready a union member rather than
+	casting the union.
+	* data/yacc.c (b4_lhs_value, b4_rhs_value): Accept the new
+	symbol-number argument.
+	Adjust uses of b4_dollar_pushdef.
+	* data/glr.c (b4_lhs_value, b4_rhs_value): Adjust.
+
+	* data/lalr1.cc (b4_symbol_value_template, b4_lhs_value): Adjust
+	to the new symbol-number argument.
+	* data/variant.hh (b4_symbol_value, b4_symbol_value_template): Accept
+	the new symbol-number argument.
+
+	* data/java.m4 (b4_symbol_value, b4_rhs_data): New.
+	(b4_rhs_value): Use them.
+	* data/lalr1.java: Adjust to b4_dollar_pushdef, and use b4_rhs_data.
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment and formatting changes
+	* data/bison.m4, data/c++.m4, data/glr.c, data/java.m4, data/lalr1.cc,
+	* data/yacc.c, src/scan-code.l:
+	Fix comments.
+	Prefer POS to denote the position of a symbol in a rule, since NUM
+	is also used to denote symbol numbers.
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: make sure the build dir exists
+	* examples/java/local.mk (%D%/Calc.java): here.
+
+2018-12-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: don't define variant<S>, directly define semantic_type
+	Instead of defining yy::variant<S> and then alias
+	yy::parser::semantic_type to variant<sizeof (union_type)>, directly
+	define yy::parser::semantic_type.
+
+	This model is more appropriate if we want to sit the storage on top of
+	unions in C++11.
+
+	* data/variant.hh (b4_variant_define): Specialize and inline the
+	definition into...
+	(b4_value_type_declare): Here.
+	Define union_type here.
+	* data/lalr1.cc: Adjust.
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: use noexcept and constexpr
+	There are probably more opportunities for them.
+	So far, I observed no performance improvements.
+
+	* data/c++.m4, data/lalr1.cc, data/stack.hh: here.
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: also display the examples' test suite log
+	* .travis.yml: here.
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: add an example
+	* examples/java/Calc.y: New, based on test 495: "Calculator
+	parse.error=verbose %locations".
+	* examples/java/Calc.test, examples/java/local.mk: New.
+
+	* configure.ac (ENABLE_JAVA): New.
+	* examples/test (prog): Be ready to run Java programs.
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: unsigned int -> unsigned
+	See
+	https://lists.gnu.org/archive/html/bison-patches/2018-08/msg00027.html
+
+	* src/output.c (muscle_insert_unsigned_int_table): Rename as...
+	(muscle_insert_unsigned_table): this.
+
+2018-12-01  Akim Demaille  <akim.demaille@gmail.com>
+
+	output: restore yyrhs and yyprhs
+	This was demanded several times.  See for instance:
+
+	- David M. Warme
+	  https://lists.gnu.org/archive/html/help-bison/2011-04/msg00003.html
+
+	- box12009
+	  http://lists.gnu.org/archive/html/bug-bison/2016-10/msg00001.html
+
+	Basically, this reverts:
+
+	- commit 3d3bc1fe30f356cf674a979409e86ea0f88de4a0
+	  Get rid of (yy)rhs and (yy)prhs
+
+	- commit d333175f63f402dbadb647175e40ad88bf1defb5
+	  Avoid compiler warning.
+
+	Note that since these tables are not needed in the generated parsers,
+	no skeleton requests them.  This change only brings back their
+	definition to M4, making it possible to user-defined skeletons to use
+	these tables.
+
+	* src/output.c (muscle_insert_item_number_table): Define.
+	(prepare_rules): Generate the rhs and prhs tables.
+
+2018-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: shorten side-effects on current_type
+	* src/parse-gram.y (tag.opt): Don't change current_type.
+	Rather, return its value.
+	Adjust dependencies.
+
+2018-11-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/symlist.c: here.
+
+2018-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't name C++ files *.c
+	* tests/synclines.at (syncline escapes): Here.
+	Otherwise, Clang generates an error and skips the test.
+
+2018-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: factor the symbol definition
+	* src/parse-gram.y (int.opt, string_as_id.opt): New.
+	(symbol_def): Use it.
+
+2018-11-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: improve location of string alias errors
+	* src/parse-gram.y (symbol_def): Pass the right location for symbol_make_alias.
+	* tests/regression.at (Duplicate string): Move to...
+	* tests/input.at: here.
+	(Token collisions): New.
+
+2018-11-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: complain about Bison directives when -Wyacc
+	* src/complain.h, src/complain.c (bison_directive): New.
+	* src/scan-gram.l (BISON_DIRECTIVE): New.
+	Use it for Bison extensions.
+
+2018-11-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: here.
+
+2018-11-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: fix quotation in the test suite
+	* tests/input.at: here.
+
+2018-11-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	%nterm: do not accept character literals
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html
+
+	* src/complain.h: Formatting change.
+	* src/parse-gram.y (id): Reject character literals used in a context
+	for non-terminals.
+	* tests/input.at (Invalid %nterm uses): Check that.
+
+2018-11-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	%nterm: do not accept numbers nor string alias
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html
+
+	* src/parse-gram.y (symbol_def): Refuse string aliases and numbers
+	for non-terminals.
+	(prologue_declaration): Recover from errors ended with ';'.
+	* tests/input.at (Invalid %nterm uses): New.
+
+2018-11-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: update
+
+2018-11-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: Here.
+
+2018-11-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* tests/testsuite.at: here.
+
+2018-11-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update ignores
+
+2018-11-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update to use its bitsets
+	Bison's bitset were moved to gnulib.
+
+	* lib/abitset.c, lib/abitset.h, lib/bbitset.h, lib/bitset.c,
+	* lib/bitset.h, lib/ebitset.c, lib/ebitset.h, lib/lbitset.c,
+	* lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c,
+	* lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h,
+	* lib/lbitset.h, lib/vbitset.c, lib/vbitset.h:
+	Remove.
+
+	* gnulib: Update.
+	* bootstrap.conf, lib/local.mk: Adjust.
+
+2018-11-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: use conditional dependencies
+	* bootstrap.conf: here.
+
+2018-11-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: run on xenial
+	Xenial (Ubuntu 16.04) is finally available on Travis.  Let's use it.
+
+	Among the changes:
+
+	- Automake 1.14.1 -> 1.15.0
+	- Doxygen  1.8.6  -> 1.8.11
+	- Flex     2.5.35 -> 2.6.0, with plenty of new compiler warnings
+	- Gettext  0.18.3 -> 0.19.7
+	- Graphviz 2.36.0 -> 2.38.0
+	- Texinfo  5.2    -> 6.1
+
+	* .travis.yml: here.
+
+2018-11-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: we don't need git show
+	* .travis.yml: Don't run it.
+
+2018-11-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	warning: avoid warnings about unreachable code
+	Reported by Uxio Prego.
+	https://lists.gnu.org/archive/html/help-bison/2018-11/msg00031.html
+
+	We also need to move the unreachable 'goto' to a reachable place,
+	otherwise clang complains about the code being unreachable anyway.
+	See also https://bugs.llvm.org/show_bug.cgi?id=39736.
+
+	Interestingly, we don't have to apply that trick to
+	`#define YYCDEBUG if (false) std::cerr`, clang does not warn when the
+	code comes from macro expansion.
+
+	* configure.ac: Use -Wunreachable-code when supported.
+	* data/lalr1.cc, data/yacc.c: Pacify clang's warning about `if (0)`
+	by using a macro.
+	Another possibility was to move this statement to a reachable place.
+	* tests/actions.at, tests/c++.at: Avoid generating unreachable code.
+
+2018-11-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: avoid generating dead code
+	We should probably introduce some struct and functions to deal with
+	stack management, rather than open coding it.  yyparse would be much
+	nicer to read, and a better model for possible other skeletons.
+
+	* data/yacc.c (yyparse::yysetstate): Avoid generating code when
+	neither yyoverflow nor YYSTACK_RELOCATE is defined.
+
+2018-11-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	%expect-rr: tune the number of conflicts per rule
+	Currently on a grammar such as
+
+	    exp : a '1' | a '2' | a '3' | b '1' | b '2' | b '3'
+	    a:
+	    b:
+
+	we count only one rr-conflict on the `b:` rule, i.e., we expect:
+
+	    b: %expect-rr 1
+
+	although there are 3 conflicts in total.  That's because in the
+	conflicted state we count only a single conflict, not three (one for
+	each of the lookaheads: '1', '2', '3').
+
+	    State 0
+
+	        0 $accept: . exp $end
+	        1 exp: . a '1'
+	        2    | . a '2'
+	        3    | . a '3'
+	        4    | . b '1'
+	        5    | . b '2'
+	        6    | . b '3'
+	        7 a: . %empty  ['1', '2', '3']
+	        8 b: . %empty  ['1', '2', '3']
+
+	        '1'       reduce using rule 7 (a)
+	        '1'       [reduce using rule 8 (b)]
+	        '2'       reduce using rule 7 (a)
+	        '2'       [reduce using rule 8 (b)]
+	        '3'       reduce using rule 7 (a)
+	        '3'       [reduce using rule 8 (b)]
+	        $default  reduce using rule 7 (a)
+
+	        exp  go to state 1
+	        a    go to state 2
+	        b    go to state 3
+
+	See https://lists.gnu.org/archive/html/bison-patches/2013-02/msg00106.html.
+
+	* src/conflicts.c (rule_has_state_rr_conflicts): Rename as...
+	(count_rule_state_sr_conflicts): this.
+	DWIM.
+	(count_rule_rr_conflicts): Adjust.
+	* tests/conflicts.at (%expect-rr in grammar rules)
+	(%expect-rr too much in grammar rules)
+	(%expect-rr not enough in grammar rules): New.
+
+2018-11-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	%expect-rr: fix the computation of the overall number of conflicts
+	On a grammar such as
+
+	   exp: "num" | "num" | "num"
+
+	we currently report only one RR conflict, instead of two.
+
+	This bug is present since the origins of Bison
+
+	    commit 08089d5d35ece0c7d41659cc1bc09638e2abb151
+	    Author: David MacKenzie <djm@djmnet.org>
+	    Date:   Tue Apr 20 05:42:52 1993 +0000
+
+	       Initial revision
+
+	and was preserved in
+
+	    commit 676385e29c4aedfc05d20daf1ef20cd4ccc84856
+	    Author: Paul Hilfinger <Hilfinger@CS.Berkeley.EDU>
+	    Date:   Fri Jun 28 02:26:44 2002 +0000
+
+	       Initial check-in introducing experimental GLR parsing.  See entry in
+	       ChangeLog dated 2002-06-27 from Paul Hilfinger for details.
+
+	See
+	https://lists.gnu.org/archive/html/bison-patches/2018-11/msg00011.html
+
+	* src/conflicts.h, src/conflicts.c (count_state_rr_conflicts)
+	(count_rr_conflicts): Use only the correct count of conflicts.
+	* tests/glr-regression.at: Fix expectations.
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: generate *.output files
+	* tests/glr-regression.at: here.
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	%expect: tune the number of conflicts per rule
+	Currently on a grammar such as
+
+	    exp: "number" | exp "+" exp | exp "*" exp
+
+	we count only one sr-conflict for both binary rules, i.e., we expect:
+
+	    exp: "number" | exp "+" exp  %expect 1 | exp "*" exp  %expect 1
+
+	although there are 4 conflicts in total.  That's because in the states
+	in conflict, for instance that for the "+" rule:
+
+	    State 6
+
+	        2 exp: exp . "+" exp
+	        2    | exp "+" exp .  [$end, "+", "*"]
+	        3    | exp . "*" exp
+
+	        "+"  shift, and go to state 4
+	        "*"  shift, and go to state 5
+
+	        "+"       [reduce using rule 2 (exp)]
+	        "*"       [reduce using rule 2 (exp)]
+	        $default  reduce using rule 2 (exp)
+
+	we count only a single conflict, although there are two (one on "+"
+	and another with "*").
+
+	See https://lists.gnu.org/archive/html/bison-patches/2013-02/msg00106.html.
+
+	* src/conflicts.c (rule_has_state_sr_conflicts): Rename as...
+	(count_rule_state_sr_conflicts): this.
+	DWIM.
+	(count_rule_sr_conflicts): Adjust.
+	* tests/conflicts.at (%expect in grammar rules): New.
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: reduce scopes
+	* src/conflicts.c, src/reader.c: Minor style changes.
+
+2018-11-21  Paul Hilfinger  <hilfingr@eecs.berkeley.edu>
+
+	allow %expect and %expect-rr modifiers on individual rules
+	This change allows one to document (and check) which rules participate
+	in shift/reduce and reduce/reduce conflicts.  This is particularly
+	important GLR parsers, where conflicts are a normal occurrence.  For
+	example,
+
+	    %glr-parser
+	    %expect 1
+	    %%
+
+	    ...
+
+	    argument_list:
+	      arguments %expect 1
+	    | arguments ','
+	    | %empty
+	    ;
+
+	    arguments:
+	      expression
+	    | argument_list ',' expression
+	    ;
+
+	    ...
+
+	Looking at the output from -v, one can see that the shift-reduce
+	conflict here is due to the fact that the parser does not know whether
+	to reduce arguments to argument_list until it sees the token AFTER the
+	following ','.  By marking the rule with %expect 1 (because there is a
+	conflict in one state), we document the source of the 1 overall shift-
+	reduce conflict.
+
+	In GLR parsers, we can use %expect-rr in a rule for reduce/reduce
+	conflicts.  In this case, we mark each of the conflicting rules.  For
+	example,
+
+	    %glr-parser
+	    %expect-rr 1
+
+	    %%
+
+	    stmt:
+	      target_list '=' expr ';'
+	    | expr_list ';'
+	    ;
+
+	    target_list:
+	      target
+	    | target ',' target_list
+	    ;
+
+	    target:
+	      ID %expect-rr 1
+	    ;
+
+	    expr_list:
+	      expr
+	    | expr ',' expr_list
+	    ;
+
+	    expr:
+	      ID %expect-rr 1
+	    | ...
+	    ;
+
+	In a statement such as
+
+	    x, y = 3, 4;
+
+	the parser must reduce x to a target or an expr, but does not know
+	which until it sees the '='.  So we notate the two possible reductions
+	to indicate that each conflicts in one rule.
+
+	See https://lists.gnu.org/archive/html/bison-patches/2013-02/msg00105.html.
+
+	* doc/bison.texi (Suppressing Conflict Warnings): Document %expect,
+	%expect-rr in grammar rules.
+	* src/conflicts.c (count_state_rr_conflicts): Adjust comment.
+	(rule_has_state_sr_conflicts): New static function.
+	(count_rule_sr_conflicts): New static function.
+	(rule_nast_state_rr_conflicts): New static function.
+	(count_rule_rr_conflicts): New static function.
+	(rule_conflicts_print): New static function.
+	(conflicts_print): Also use rule_conflicts_print to report on individual
+	rules.
+	* src/gram.h (struct rule): Add new fields expected_sr_conflicts,
+	expected_rr_conflicts.
+	* src/reader.c (grammar_midrule_action): Transfer expected_sr_conflicts,
+	expected_rr_conflicts to new rule, and turn off in current_rule.
+	(grammar_current_rule_expect_sr): New function.
+	(grammar_current_rule_expect_rr): New function.
+	(packgram): Transfer expected_sr_conflicts, expected_rr_conflicts
+	to new rule.
+	* src/reader.h (grammar_current_rule_expect_sr): New function.
+	(grammar_current_rule_expect_rr): New function.
+	* src/symlist.c (symbol_list_sym_new): Initialize expected_sr_conflicts,
+	expected_rr_conflicts.
+	* src/symlist.h (struct symbol_list): Add new fields expected_sr_conflicts,
+	expected_rr_conflicts.
+	* tests/conflicts.at: Add tests "%expect in grammar rule not enough",
+	"%expect in grammar rule right.", "%expect in grammar rule too much."
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-11-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	remove ancient lint directives
+	* data/c++.m4, data/yacc.c: Remove surprising remains of lint
+	directives.
+
+2018-11-21  Jannick  <thirdedition@gmx.net>
+
+	doc: calc++: remove ancient fix for flex
+	* doc/bison.texi (Calc++ Scanner): Remove fix for Flex 2.5.31-2.5.33.
+
+2018-11-21  Jannick  <thirdedition@gmx.net>
+
+	doc: calc++: ignore \r in the scaner
+	* doc/bison.texi (Calc++ Scanner): Ignore \r.
+
+2018-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: harmonize the labels of yyparse
+	* data/glr.c, data/lalr1.cc, data/yacc.c: Fix indentation and
+	other formatting issues.
+
+2018-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: avoid lengthy actions
+	We also lack a consistent naming for directive implementations.
+	`directive_skeleton` is too long, `percent_skeleton` is not very nice
+	looking, `process_skeleton` looks ambiguous, `do_skeleton` is somewhat
+	ambiguous too, but seems a better track.
+
+	* src/parse-gram.y (version_check): Rename as...
+	(do_require): this.
+	(do_skeleton): New.
+	Use it.
+
+2018-11-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: using macros around user types breaks when they include comma
+	We may generate code such as
+
+	    basic_symbol (typename Base::kind_type t, YY_RVREF (std::pair<int,int>) v);
+
+	which, of course, breaks, because YY_RVREF sees two arguments.  Let's
+	not play tricks with _VA_ARGS__, I'm unsure about it portability.
+	Anyway, I plan to change more things in this area.
+
+	Reported by Sébastien Villemot.
+	http://lists.gnu.org/archive/html/bug-bison/2018-11/msg00014.html
+
+	* data/variant.hh (b4_basic_symbol_constructor_declare)
+	(b4_basic_symbol_constructor_define): Don't use macro on user types.
+	* tests/types.at: Check that we support pairs.
+
+2018-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	README: update
+
+2018-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: remove duplicate definition
+	Probably imported by 6d58c632025cb6928a90e4176577982bfb9c3981, a merge
+	commit.
+
+	* tests/atlocal.in (POSIXLY_CORRECT_IS_EXPORTED): Define it once.
+
+2018-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: fix use of _Noreturn
+	In C++, [[noreturn]] must not be between "static" and the rest of the
+	function signature, it must precede it.  C's _Noreturn does not seem
+	to have such a constraint, but it is therefore compatible with the C++
+	constraint.  Since we #define _Noreturn as [[noreturn]] is modern C++,
+	be sure to push the _Noreturn first.
+
+	Unfortunately this was not caught by the test suite, because it always
+	loads config.h first, and config.h contains another definition of
+	_Noreturn that does not use [[noreturn]], and hides ours.  That's
+	probably a sign we should avoid always loading config.h.
+
+	* data/glr.c (yyFail, yyMemoryExhausted): here.
+
+2018-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: run the api.value.type tests for all C++ standards
+	* tests/local.at (AT_LANG_FOR_EACH_STD): New.
+	(AT_REQUIRE_CXX_VERSION): Rename as...
+	(AT_REQUIRE_CXX_STD): this.
+	Accept an argument for what to do when the requirement is not met.
+	* tests/types.at (api.value.type): Check all the C++ stds.
+
+2018-11-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: split the ASAN job in two
+	The following commit introduce even more compilations/runs than
+	before, and with ASAN on, we go beyond to 50min credit from Travis.
+
+	* .travis.yml (Clang 7 libc++ and ASAN): Split in two.
+
+2018-11-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: use YY_CPLUSPLUS
+	* data/c++.m4: here.
+
+2018-11-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: factor the handling of __cplusplus into YY_CPLUSPLUS
+	* data/c++.m4 (b4_cxx_portability): Define it.
+	Use it.
+	* data/lalr1.cc, data/variant.hh: Use it.
+
+2018-11-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: formatting changes
+	* src/scan-gram.l: here.
+
+2018-11-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: clarify some magic constant
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): here.
+
+2018-11-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: remove useless includes
+	* examples/c++/variant-11.yy, examples/c++/variant.yy: here.
+	Fix warning when storing a long into an int.
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: compile the C++ examples with warnings
+	* examples/c++/local.mk: Pass $(WARN_CXXFLAGS_TEST).
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: deprecate %error-verbose
+	It is unfortunate that %error_verbose was properly diagnosed as
+	obsoleted by "%define parse.error verbose", but %error-verbose was
+	not.
+
+	* src/parse-gram.y (%error-verbose): Remove support.
+	* src/scan-gram.l: Do it here instead, with a warning.
+	* tests/input.at (Deprecated directives): Check it.
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: migrate from %error-verbose to %define parse.error verbose
+	* tests/actions.at, tests/c++.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/javapush.at,
+	* tests/local.at, tests/regression.at, tests/skeletons.at,
+	* tests/torture.at:
+	Here.
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	parser: deprecate %nterm
+	It has several weaknesses.
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html
+
+	* src/scan-gram.l: here.
+
+2018-11-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix syncline tests
+	These tests are skipped with GCC:
+
+	    "\"".c:1:5: error: function declaration isn't a prototype [-Werror=strict-prototypes]
+	     int main() { return 0; }
+	         ^~~~
+
+	* tests/synclines.at: Stop writing C++ in C.
+	* tests/local.at: Formatting changes.
+
+2018-11-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: expected features of Bison 3.3
+
+2018-11-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc: reduce scope in push mode
+	* data/yacc.c (yypull_parse): Here.
+
+2018-11-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* data/c++.m4, data/glr.c, data/lalr1.java, data/yacc.c
+	(yytranslate, YYTRANSLATE): Harmonize comments.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: simplify a default construction
+	* data/lalr1.cc (yytnamerr_): here.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: no longer accept %define variable names in quotes
+	It was never documented.
+
+	* src/parse-gram.y (variable): Here.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	dogfooding: use api.value.type union
+	* src/parse-gram.y (api.value.type): Set to union.
+	Replace occurrences of %union with explicit %types.
+	* src/scan-gram.l: Adjust yylval's field names.
+	(RETURN_VALUE): No longer needs the Field argument.
+	Use it more.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	djgpp: remove
+	Support for DJGPP was announced to be removed in the NEWS of Bison
+	3.1 (2018-08-27) unless someone expressed interest.  There was no answer.
+
+	* djgpp: Remove.
+	* NEWS, Makefile.am, cfg.mk, po/POTFILES.in: Adjust.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	scanner: simplify use of gettext
+	* src/scan-gram.l (unexpected_end): Leave the actual call to gettext
+	to the caller.
+
+2018-11-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clean up the scanner and parser
+	* src/scan-gram.l: Formatting changes.
+	Add "missing" assertion for symmetry.
+	* src/parse-gram.y: Formatting changes.
+
+2018-11-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-11-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.2.1
+	* NEWS: Record release date.
+
+2018-11-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix issues in the generated tarball
+	Reported by Andre da Costa Barros.
+	https://savannah.gnu.org/patch/?9716
+
+	* examples/calc++/local.mk: We no longer generate position.hh and
+	stack.hh.  Leaving them here triggers their concurrent generation,
+	which fails.
+	(%C%_calc___CPPFLAGS): Fix the extracted headers in the source tree.
+	* examples/mfcalc/local.mk (%C%_mfcalc_CPPFLAGS): Ditto.
+
+2018-11-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix typo
+	Reported by Horst Von Brand.
+	https://savannah.gnu.org/support/?109580
+
+	* examples/local.mk (.PHOMY): Rename as...
+	(.PHONY): this.
+
+2018-11-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-11-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: ship them
+	Currently, the examples are extracted on the user's side.
+	Unfortunately, that requires that the user has Perl, which is
+	otherwise not needed for Bison.  Let's ship the examples instead.
+
+	The examples were handled this way so that we could depend on
+	configure flags: if --enable-gcc-warnings is passed, it is understood
+	as "I'm a maintainer", so the examples are generated with `#line`s.
+	Regular users should not see them, so they are now unconditionally
+	removed when rolling a tarball.
+
+	Reported by Mike Frysinger.
+	https://lists.gnu.org/archive/html/bison-patches/2015-04/msg00000.html
+
+	* examples/local.mk: Ship all the extracted files.
+	(examples-unline): New.
+	Make sure that the generated tarballs do not contain the #lines.
+
+2018-11-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: minor fixes in doc/
+	* doc/local.mk: Consistently use *.tmp for temporary files.
+	Fix comments.
+
+2018-11-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: maximize chances of errors sooner
+	* .travis.yml: Try clang and icc soon, so that we don't have to wait
+	for the end of the run to know that they fail.
+
+2018-11-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: improve the generated documentation
+	* data/lalr1.cc, data/location.cc: Improve documenting comments.
+	* tests/c++.at (Doxygen Documentation): Fix AT_BISON_OPTION_PUSHDEFS,
+	so that the generated yyerror is correct.
+	* tests/c++.at, tests/headers.at: Prefer %empty.
+
+2018-11-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't fail if the C++ compiler does not work
+	Also, make sure that `make dist` generates a correct tarball even if
+	the C++ compiler does not work.
+
+	Reported by Nelson H. F. Beebe.
+
+	* m4/cxx.m4 (BISON_CXX_WORKS): Define to true/false instead of
+	true/exit 77.  The latter is too dangerous to use (it directly quits).
+	(ENABLE_CXX): New name for the Automake conditional, for consistency
+	with ENABLE_CXX11 etc.
+	* tests/local.at (AT_COMPILE, AT_COMPILE_CXX): Adjust to the new
+	semantics of BISON_CXX_WORKS.
+	* examples/c++/local.mk: Skip the variant test if C++ does not work.
+	* examples/calc++/local.mk: Likewise.
+
+2018-11-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't disable C++ warnings in C files
+	This triggers error with GCC.
+	See eff6739124c61bb5660d78453210d1d6a17d30e7.
+
+	* tests/testsuite.h: Disable -Wzero-as-null-pointer-constant only for
+	C++.
+
+2018-11-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: workaround portability issue
+	On some systems (x86_64-pc-solaris2.11), with Developer Studio 12.5's
+	CC, we get:
+
+	    ".../include/CC/Cstd/vector.cc", line 127: Error: Cannot assign const yy::parser::stack_symbol_type to yy::parser::stack_symbol_type without "yy::parser::stack_symbol_type::operator=(const yy::parser::stack_symbol_type&)";.
+	    ".../include/CC/Cstd/vector", line 475:     Where: While instantiating "std::vector<yy::parser::stack_symbol_type>::__insert_aux(yy::parser::stack_symbol_type*, const yy::parser::stack_symbol_type&)".
+	    ".../include/CC/Cstd/vector", line 475:     Where: Instantiated from non-template code.
+	    1 Error(s) detected.
+
+	Don't expect __cplusplus to be always defined.  If it's not, consider
+	this is C++98.
+
+	Reported by Nelson H. F. Beebe.
+
+	* data/c++.m4, data/lalr1.cc, examples/c++/variant.yy, tests/local.at,
+	* tests/testsuite.h:
+	An undefined __cplusplus means pre C++11.
+
+2018-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: work around getopt portability issues
+	On some systems, we don't use our getopt.  As a consequence the error
+	messages vary:
+
+	    $ bison --skeleton
+	    bison: option requires an argument -- skeleton
+	    Try 'bison --help' for more information.
+
+	instead of
+
+	    bison: option '--skeleton' requires an argument
+	    Try 'bison --help' for more information.
+
+	Reported by Jannick and Nelson H. F. Beebe.
+	https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00140.html
+
+	* tests/input.at (Invalid number of arguments): work around getopt
+	portability issues.
+
+2018-11-03  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: -Wzero-as-null-pointer-constant was added to GCC 4.7
+	It is not supported by previous versions.
+	See https://www.gnu.org/software/gcc/gcc-4.7/changes.html
+	Reported by Nelson H. F. Beebe.
+
+	* doc/bison.texi (Calc++ Scanner): here.
+
+2018-11-02  Adam Sampson  <ats@offog.org>
+
+	examples: #include <cstring> in calc++
+	strerror is defined by <string.h>, and recent versions of GNU libstdc++
+	no longer include this automatically from <string>.
+
+2018-10-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	c: provide a definition of _Noreturn that works for C++
+	On Solaris, GCC 7.3 defines:
+
+	                      -std=c++14  -std=c++17
+	    __cplusplus       201402L       201703L
+	    __STDC_VERSION__  199901L       201112L
+
+	So the current #definition of _Noreturn sees that 201112 <=
+	__STDC_VERSION__, i.e., that C11 is supported, so it expects _Noreturn
+	to be supported.  Apparently it is not.
+
+	This is only for C++, the test suite works for C.  However, the test
+	suite does not try several C standards, maybe we should...
+
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00064.html
+
+	* data/c.m4 (b4_attribute_define): Define _Noreturn as [[noreturn]] in
+	modern C++.
+
+2018-10-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c: update the definition of _Noreturn
+	Does not work on Solaris 11.3 x86/64:
+
+	    479. c++.at:1293: testing C++ GLR parser identifier shadowing ...
+	    ======== Testing with C++ standard flags: '-std=c++17'
+	    ./c++.at:1332: $BISON_CXX_WORKS
+	    stderr:
+	    stdout:
+	    ./c++.at:1332: $CXX $CXXFLAGS $CPPFLAGS  $LDFLAGS -o input input.cc $LIBS
+	    stderr:
+	    input.cc:837:8: error: '_Noreturn' does not name a type
+	     static _Noreturn void
+	            ^~~~~~~~~
+	    input.cc:845:8: error: '_Noreturn' does not name a type
+	     static _Noreturn void
+	            ^~~~~~~~~
+
+	Reported by Kiyoshi Kanazawa.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00051.html
+
+	* data/c.m4 (b4_attribute_define): Use the snippet which is currently
+	in gnulib's m4/gnulib-common.m4 (which seems a little more advanced
+	than lib/_Noreturn.h).
+
+2018-10-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: don't expect the shell to support 'local'
+	It doesn't work on Solaris 11.3 x86/64.
+	Reported by Kiyoshi Kanazawa.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00051.html
+
+	* examples/test: Don't use 'local'.
+
+2018-10-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: fix warning
+	Reported by Hans Åberg.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00047.html
+
+	* lib/bitset.c (bitset_count_): here.
+
+2018-10-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix use of gnulib Make variables
+	Reported by Kiyoshi Kanazawa.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00048.html
+
+	* lib/local.mk (lib_libbison_a_LIBADD): Merge into...
+	* src/local.mk (src_bison_LDADD): here.
+
+2018-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.2
+	* NEWS: Record release date.
+
+2018-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: don't depend on the libc to generate bison.help
+	The "Report translation bugs to..." part of --help is issued only on
+	glibc systems.  So if the tarball is not wrapped on such a system, and
+	used on such a system (or the converse), then bison.help will differ
+	on the user's system, and help2man will be called to update bison.1.
+
+	But help2man should not be a requirement.
+
+	Reported by Alexandre Duret-Lutz.
+
+	* doc/local.mk (doc/bison.help): Remove the possible doc about
+	translation bugs.
+	Pass LC_ALL=C, as reported in src/getargs.c's usage().
+	(doc/cross-options.texi): Use bison.help instead of calling bison
+	--help.
+
+2018-10-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: always issue the "generated by" message
+	Some users rely on this sentence to know that the file can be ignored.
+	Reported by Alexandre Duret-Lutz.
+
+	* data/bison.m4 (b4_generated_by): New.
+	(b4_copyright): Use it.
+	* data/location.cc, data/stack.hh: Use it too, for the stub files
+	(position.hh and stack.hh).
+
+2018-10-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	cfg.mk: remove exceptions for timevar
+	They appear to be no longer needed.
+
+	* cfg.mk: here.
+
+2018-10-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clean up src/AnnotationList.c
+	* src/AnnotationList.c: Reduce scopes.
+
+2018-10-28  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: clean up print.c
+	* src/print.c: Reduce scopes.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up bbitset.h
+	* lib/libiberty.h: Inline in...
+	* lib/bbitset.h: here.
+	* lib/local.mk: Adjust.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up bitset.h
+	* lib/bitset.h: Fix include order.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up vbitset.c
+	* lib/vbitset.c: Reduce scopes, etc.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up lbitset.c
+	* lib/lbitset.c: Reduce scopes, etc.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up ebitset.c
+	* lib/ebitset.c: Reduce scopes, etc.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up bitset_stats.c
+	* lib/bitset_stats.c: Reduce scopes, etc.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up bitset.c
+	* lib/bitset.c: Reduce scopes, etc.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bitset: clean up abitset.c
+	* lib/abitset.c: Reduce scopes, etc.
+
+2018-10-27  Jannick  <thirdedition@gmx.net>
+
+	xml2dot.xsl: fix typos in comments
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fix distcheck
+	The extracted example, simple.yy, does not use %require "3.2", so it
+	generates a stack.hh, which breaks distcheck.
+
+	* doc/bison.texi: Fix it.
+
+2018-10-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: prepare for 3.2
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: beware of Windows file name constraints
+	Don't expect to be able to build a file named '"\"".y' (6 characters)
+	on Windows.
+
+	Reported by Jannick.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00042.html
+
+	* tests/synclines.at (syncline escapes): Skip if we failed to create
+	the file.
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix invocation of m4_map
+	* tests/actions.at, tests/synclines.at: m4_map takes a list of
+	arguments in $2, m4_map_args takes arguments in $2, $3, etc.
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: spell check
+	* README, doc/bison.texi, examples/README, examples/c++/README: here.
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: add a Makefile for C++ short examples
+	* examples/c++/Makefile: New.
+	* examples/c++/local.mk, examples/c++/README: Adjust.
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: some improvements
+	* doc/bison.texi (Calc++ Scanner): Show how exception can be thrown
+	from auxiliary functions.
+	Clarify the meaning of the various flex %options we use.
+	Get rid of a warning.
+	(Calc++ Parsing Driver): Use the parser as a functor.
+
+2018-10-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: check the errors
+	* examples/test (run): Check stderr, unless -noerr is passed.
+	* examples/calc++/calc++.test, examples/mfcalc/mfcalc.test: Check
+	errors.
+
+2018-10-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: minor fixes
+	* doc/bison.texi: Simplify wording.
+	Fix Texinfo error.
+	(Complete Symbols): Handle the token EOF.
+	(Calc++ Parser): In the modern C++ world, prefer assignment to swap.
+	(Strings are Destroyed): Prefer an explicit 'continue' to a comment.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure: quit on trying to get ICC and Flex be friends
+	The CI is using Flex 2.5.35.  And ICC is too picky for it.  Let's stop
+	making these warnings errors.  I wish I could disable them in the
+	source files using the ICC version and the Flex version, but ICC's
+	pragma support is unclear, and I'm tired of fighting it.
+
+	* configure.ac (FLEX_SCANNER_CXXFLAGS): Make warnings warnings.
+	* examples/c++/local.mk: Comment changes.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: mention earlier how to disable the generation of location.hh
+	Suggested by Victor Khomenko.
+
+	* doc/bison.texi (C++ Bison Interface): Here.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: std::to_string is available in C++11
+	Reported by Victor Khomenko.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00033.html
+
+	* doc/bison.texi, examples/c++/variant-11.yy: Use std::to_string
+	instead of ours.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: move the variant examples into the C++ directory
+	* examples/variant-11.test examples/variant-11.yy,
+	* examples/variant.test examples/variant.yy:
+	Move into examples/c++/.
+	* examples/c++/README: New.
+	* examples/README, examples/c++/local.mk, examples/local.mk:
+	Adjust.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: an introductory example for C++
+	Suggested by Victor Khomenko.
+	http://lists.gnu.org/archive/html/bug-bison/2018-08/msg00037.html
+
+	* doc/bison.texi (A Simple C++ Example): New.
+	* examples/c++/local.mk, examples/c++/simple.test: New.
+	Extract, check, and install this new example.
+	* examples/local.mk: Adjust.
+	* examples/test: Adjust to the case where the dirname differs
+	from the test name.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: remove a few copies of the Copyright from the generated Makefile
+	* build-aux/local.mk, cfg.mk, examples/calc++/local.mk,
+	* examples/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk, lib/local.mk, src/local.mk,
+	* tests/local.mk:
+	Use Automake comments so that we don't get a copy of each in the
+	generated Makefile.
+
+2018-10-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: make operator() an alias to the parse function
+	* data/glr.cc, data/lalr1.cc (operator()): New.
+	* doc/bison.texi: Update.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: enable more warnings during tests
+	Prompted by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00018.html
+
+	* configure.ac: here.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: work around strange typing issues
+	On the CI, both GCC and Clang report:
+
+	    src/parse-gram.c: In function 'yy_lac':
+	    src/parse-gram.c:1479:29: error: format '%hd' expects argument of type 'int',
+	       but argument 3 has type 'yytype_int16 {aka long int}' [-Werror=format=]
+	             YYDPRINTF ((stderr, " G%hd", yystate));
+	                                 ^
+
+	Although yytype_int16 is supposed to be a short int, not a long int.
+	This must be explored.
+
+	* data/yacc.c (yy_lac): Work around typing issue.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: don't define _Noreturn uselessly
+	Clang warns:
+
+	     aux/x.h:97:11: error: macro name is a reserved identifier
+	           [-Werror,-Wreserved-id-macro]
+	     #  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+
+	Reported by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00024.html
+
+	* data/c.m4 (b4_attribute_define): Don't define _Noreturn unconditionally.
+	* data/glr.c: Ask for _Noreturn.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	pacify ICC 16.0.3 20160415
+	Found on the CI.
+
+	yacc.c:
+
+	    error #2259: non-pointer conversion from "int" to "yytype_int16={short}" may lose significant bits
+	        yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyesp
+	                ^
+
+	glr.c:
+
+	    error #2259: non-pointer conversion from "int" to "yybool={unsigned char}" may lose significant bits
+	      yybool yynormal YY_ATTRIBUTE_UNUSED = (yystackp->yysplitPoint == YY_NULLPTR);
+	                                          ^
+
+	    error #2259: non-pointer conversion from "int" to "yybool={unsigned char}" may lose significant bits
+	      return yypact_value_is_default (yypact[yystate]);
+	             ^
+
+	    error #2259: non-pointer conversion from "int" to "yybool={unsigned char}" may lose significant bits
+	      return 0 < yyaction;
+	             ^
+
+	    error #2259: non-pointer conversion from "int" to "yybool={unsigned char}" may lose significant bits
+	      return yyaction == 0;
+	             ^
+
+	    error #2259: non-pointer conversion from "int" to "yybool={unsigned char}" may lose significant bits
+	      yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
+	                                                     ^
+
+	* data/glr.c, data/yacc.c: Avoid these warnings.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	flex: work around more warnings
+	* doc/bison.texi: here.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: clang 5 defines nullptr as a macro
+	* examples/variant.yy: So don't do it.
+	* examples/variant-11.yy: Fix comment.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: be strict about types
+	* data/glr.c: Don't use `foo |= bar` with foo and bar being yybool:
+	the result appears to be an int, not a yybool.
+	Use yybool where appropriate.
+	Add casts where needed.
+
+2018-10-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: fix warnings about integral types
+	Reported by Derek Clegg.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00018.html
+
+	Rather than adding casts, we should be more careful with types.  For
+	instance yystate should be a yytype_int16.  But currently we can't: it
+	is also used sometimes for storing other things that state numbers.
+
+	* data/yacc.c (yyparse): Add missing casts.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	yacc.c: clarify the computation of yystate
+	The yacc.c skeleton is old, and was using many tricks to save
+	registers.  Today's register allocators can do this themselves.  Let's
+	keep the code simpler to read and let compilers do their job.
+
+	* data/yacc.c: Avoid using yystate for different types of content.
+	An inline function would be better, but doing this portably will be
+	a problem.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	printf returns a signed int
+	* tests/local.at: Adjust location_print's signature.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: be strict about types
+	* tests/actions.at, tests/c++.at, tests/cxx-type.at,
+	* tests/glr-regression.at, tests/local.at, tests/torture.at,
+	* tests/types.at:
+	Pay stricter attention to types to avoid warnings.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix signedness issues
+	* data/lalr1.cc, data/stack.hh: The callers of stack use int, while
+	stack is based on size_type.  Add overloads to avoid warnings.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: minor changes
+	* data/lalr1.cc: Fix oldish comment.
+	* data/stack.hh: Prefer typename for type names.
+	Use size() instead of duplicating it.
+	* examples/variant-11.yy, examples/variant.yy (yylex): Use int,
+	as this is the type of the semantic value.
+
+2018-10-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	all: display a clear warning about private macros
+	* data/bison.m4 (b4_disclaimer): New.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c: Use it.
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: minor simplification
+	* data/stack.hh: Prefer a default argument value to two constructors.
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	all: avoid useless comments and #lines
+	Currently we emit useless code for places where we might issue user
+	content, but there is none.  This commit avoids this.  Besides, some
+	of the comments looked like implementation details ("Copy the first
+	part of user declarations"), rather than made for the reader of the
+	result ("First part of user prologue").
+
+	On Bison's parse-gram.c we get:
+
+	    @@ -76,10 +76,6 @@
+	     #define yynerrs         gram_nerrs
+
+	    -/* Copy the first part of user declarations.  */
+	    -
+	    -#line 82 "src/parse-gram.c" /* yacc.c:339  */
+	    -
+
+	* data/bison.m4 (b4_define_user_code): Accept a comment to document
+	the section.
+	Do not emit any code if the content is empty.
+	Adjust callers to not emit the comment.
+	Do not
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, data/yacc.c:
+	Adjust.
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: refactor
+	* tests/actions.at, tests/synclines.at: Prefer iteration to
+	copy-paste.
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: rename AT_SKEL_CC_IF/AT_SKEL_JAVA_IF as AT_CXX_IF/AT_JAVA_IF
+	The previous name is too obscure, and the other macros for C++ use
+	CXX, not CC.
+
+	* tests/local.at (AT_SKEL_CC_IF, AT_SKEL_JAVA_IF): Rename as...
+	(AT_CXX_IF, AT_JAVA_IF): these.
+	Adjust callers.
+
+2018-10-21  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: check that emplace for rvalues works
+	See the previous commit.
+
+	* tests/local.at (AT_REQUIRE_CXX_VERSION): New.
+	* tests/types.at (api.value.type): Check emplace in C++14.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: prefer a perfect forwarding version of variant's emplace
+	* data/variant.hh (emplace): In modern C++, use only a perfect
+	forwarding version.
+	And use it.
+	* doc/bison.texi: Document it.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: prefer 'emplace' to 'build'
+	When we introduced variants in Bison, C++ did not have the 'emplace'
+	functions, and we chose 'build'.  Let's align with modern C++ and
+	promote 'emplace' rather than 'build'.
+
+	* data/lalr1.cc, data/variant.hh (emplace): New.
+	(build): Deprecate in favor of emplace.
+	* doc/bison.texi: Adjust.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	%printer: promote yyo rather than yyoutput
+	* doc/bison.texi: Promote yyo rather than yyoutput.
+
+	* data/c.m4, data/glr.cc, tests/types.at, tests/calc.at,
+	tests/regression.at: Adjust.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: improve the C++ section
+	* doc/bison.texi (C++ Parser): file.hh and location.hh are no longer
+	mandatory.
+	Various minor fixes.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: reorder C++ sections
+	* doc/bison.texi (C++ Parser Interface): Document before semantic_type
+	and location_type.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	git: don't ignore auxiliary Texinfo files
+	As a matter of fact, I think it is wrong to gitignore generated files
+	that belong to the build tree.  There should be the strict minimum,
+	and it's up to people that build in place to adjust their own
+	~/.gitignore.
+
+	* doc/.gitignore: here.
+	Remove files we no longer produce (thanks to texi2dvi).
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: do not exhibit private macros
+	* examples/variant-11.yy: here.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: don't obfuscate std::move when not needed
+	* data/lalr1.cc, data/variant.hh: Avoid macros that depend on the
+	version of C++ when not needed.
+
+2018-10-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: add missing gnulib libs
+	Reported by Denis Excoffier.
+
+	* lib/local.mk, src/local.mk: here.
+
+2018-10-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-10-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.1.91
+	* NEWS: Record release date.
+
+2018-10-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-10-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: force stack resizing with unique_ptr
+	In the previous commit we fixed a problem when the C++ stack was
+	resized.  The test was using ints.  Let's add a test with someone
+	quite touchy: unique_ptr
+
+	* examples/variant-11.yy: Accept an argument, which is the number of
+	numbers to send to the parser.
+	* examples/variant-11.test: Check with many numbers.
+
+2018-10-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: fix stack symbol move
+	In some casing, once we moved a stack symbol, we forget to mark the
+	source stack symbol as emptied.  As a consequence, it may be destroyed
+	a second time.
+
+	This happens when the stack has to be resized.
+
+	* data/lalr1.cc (stack_symbol_type::stack_symbol_type): Record that
+	the source was emptied.
+	(stack_symbol_type::operator=): Likewise.
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): Force the stack
+	to be resized.  Check its content.
+
+2018-10-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: improve the doc of the examples
+	* examples/README: here.
+
+2018-10-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: recognize C++ even when it's not lalr1.cc or glr.cc
+	* src/reader.c (grammar_rule_check_and_complete): If a user uses her
+	own skeleton but sets the language to C++, recognize it as C++.
+
+2018-10-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-10-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.1.90
+	* NEWS: Record release date.
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: don't generate the position/stack files
+	* examples/variant-11.yy, examples/variant.yy: Require 3.2.
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	pacify syntax-checks
+	* lib/lbitset.c, tests/c++.at: here.
+	* cfg.mk: Add exceptions.
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	generate the default action only for C++
+	This commit adds restrictions to what was done in
+	01898726e27c8cf64f8fcea7f26f8ce62f3f5cf2 [1].
+
+	Rici Lake [2] has shown that it's risky to disable the pre-action, at
+	least now.  Also, generating the default $$ = $1 action can have bad
+	effects in some cases [3].
+
+	The original change [1] was prompted for C++.  Let's try it there
+	only, for a start.  We could restrict it further to lalr1.cc with
+	variants, but we need to see in the wild how this change behaves.  And
+	it is not unreasonable to expect grammar files in C++ to behave better
+	wrt types.
+
+	See
+	[1] https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00050.html
+	[2] https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00061.html
+	[3] https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00066.html
+
+	* src/getargs.c: Style changes.
+	* src/reader.c (grammar_rule_check_and_complete): Complete only for
+	C++.
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-10-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: let %require "3.2" disable the generation of obsolete files
+	The files stack.hh and position.hh are deprecated.  Rather than
+	devoting specify %define variables to discard them (api.position.file
+	and api.stack.file), and rather than having to use special rules when
+	api.location.file is used, let's simply decide that from %require
+	"3.2" onwards, these files will not be generated.
+
+	The only noticeable thing here is that, in order to be able to check
+	the behavior of %require "3.2", to have this version (which is still
+	3.1-*) to accept %require "3.2".
+
+	* src/gram.h, src/gram.c (required_version): New.
+	* src/parse-gram.y (version_check): Set it.
+	* src/output.c (prepare): Pass it m4.
+	* data/bison.m4 (b4_required_version_if): Receive it and use it.
+	* data/location.cc, data/stack.hh: Replace the api.*.file with only
+	required version comparison.
+	* tests/input.at: No longer check api.stack.file and api.position.file.
+	* NEWS, doc/bison.texi: Don't mention them.
+	Document the %require 3.2 behavior.
+	* tests/output.at: Use %require 3.2 instead.
+
+2018-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	java: bump to Java SE 7
+	macOS 10.14 no longer supports versions of Java earlier than 5.
+	And Java 6 will be deprecated by the end of this year.  So let's move
+	our requirement to Java 7.
+	Reported by Yu Yijun.
+	https://lists.gnu.org/archive/html/bug-bison/2018-09/msg00060.html
+	Suggested by Paul Eggert and Bruno Haible.
+	http://lists.gnu.org/archive/html/bug-gnulib/2018-10/msg00094.html
+
+	* configure.ac: Require Java 7, both compiler and runtime.
+
+2018-10-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: do not advertise %nterm
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html
+
+	* NEWS, doc/bison.texi: here.
+
+2018-10-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	generate the default semantic action
+	Currently, in C, the default semantic action is implemented by being
+	always run before running the actual user semantic action.  As a
+	consequence, when the user action is run, $$ is already set as $1.
+
+	In C++ with variants, we don't do that, since we cannot manipulate the
+	semantic value without knowing its exact type.  When variants are
+	enabled, the only guarantee is that $$ is default contructed and ready
+	to the used.
+
+	Some users still would like the default action to be run with
+	variants.  Frank Heckenbach's parser in
+	C++17 (http://lists.gnu.org/archive/html/bug-bison/2018-04/msg00011.html)
+	provides this feature, but relying on std::variant's dynamic typing,
+	which we forbid in lalr1.cc.
+
+	The simplest seems to be actually generating the default semantic
+	action (in all languages/skeletons).  This makes the pre-action (that
+	sets $$ to $1) useless.  But...  maybe some users depend on this, in
+	spite of the comments that clearly warn againt this.  So let's not
+	turn this off just yet.
+
+	* src/reader.c (grammar_rule_check_and_complete): Rename as...
+	(grammar_rule_check_and_complete): this.
+	Install the default semantic action when applicable.
+	* examples/variant-11.yy, examples/variant.yy, tests/calc.at:
+	Exercise the default semantic action, even with variants.
+
+2018-10-14  Jannick  <thirdedition@gmx.net>
+
+	xml2xhtml.xsl: add UTF-8 encoding
+	To make arrows appear nicely in the browser. Currently it is shown as
+	some garbled something in mine (Firefox).
+
+	* data/xslt/xml2xhtml.xsl: here.
+
+2018-10-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: reorder some calls to separate checks from assignments
+	* src/reader.c (packgram): Move assignments to rules[ruleno] after the
+	checks on the rule.
+
+2018-10-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: style: add missing space before parens
+	* data/c++.m4, data/lalr1.cc, data/stack.hh, data/variant.hh,
+	* examples/variant-11.yy: here.
+
+2018-10-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update timevar
+	See
+	https://lists.gnu.org/archive/html/bug-gnulib/2018-10/msg00005.html.
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/vbitset.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/vbitset.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/lbitset.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/lbitset.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/ebitset.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/ebitset.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitsetv.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitsetv.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitsetv-print.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitsetv-print.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitset_stats.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitset_stats.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitset.c
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bitset.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/bbitset.h
+
+2018-10-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/abitset.c
+
+2018-10-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: modernize lib/abitset.h
+
+2018-10-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: issue a better CPP guard and Doxygen file command
+	Currently we use "<dir><api.location.file>" as \file argument, and as
+	base for the CPP guard.  This is not nice when <dir> is absolute, in
+	which case it is expected that the user will use api.location.include
+	to get something nicer.  If defined, use that name instead.
+
+	* data/location.cc (b4_location_path): New.
+	Use it.
+	* tests/c++.at (Shared locations): Check the guard and Doxygen doc.
+
+2018-10-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: remove stray empty line
+	* data/stack.hh: here.
+
+2018-10-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: spell check
+
+2018-10-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: document api.*.file and the like
+	* doc/bison.texi (Exposing the Location Classes): New.
+	(%define Summary): Document api.location.file, api.location.include,
+	api.stack.file and api.position.file.
+	(C++ Bison Interface): stack.hh and position.hh are deprecated.
+
+2018-10-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: add missing gnulib libs
+	* src/local.mk (LDADD): Here.
+
+2018-10-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: let timevar be dealt with by gnulib
+	* lib/local.mk (lib_libbison_a_SOURCES): Remove timevar.
+
+2018-10-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix distcheck
+	Now that distcheck no longer fails (see previous commit), let's
+	address the shortcomings.
+
+	* Makefile.am (CLEANDIRS, clean-local): New.
+	* doc/local.mk, examples/calc++/local.mk, examples/local.mk,
+	* examples/mfcalc/local.mk, examples/rpcalc/local.mk,
+	* src/local.mk
+	(CLEANDIRS): Get rid of Apple's *.dSYM directories.
+	(CLEANFILES): Get rid of *.output files.
+	* examples/variant-11.yy, examples/variant.yy: Don't generate
+	any of the auxiliary files (location.hh and the like).
+
+2018-10-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	README: work around a nasty behavior of gettext
+	`make update-po` runs:
+
+	    package_gnu="$(PACKAGE_GNU)"; \
+	    test -n "$$package_gnu" || { \
+	      if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+	             LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+	                           -size -10000000c -exec grep 'GNU @PACKAGE@' \
+	                           /dev/null '{}' ';' 2>/dev/null; \
+	           else \
+	             LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+	           fi; \
+	         } | grep -v 'libtool:' >/dev/null; then \
+	         package_gnu=yes; \
+	       else \
+	         package_gnu=no; \
+	       fi; \
+	    }; \
+
+	and based on the result, put GNU or not in the following line from
+	bison.pot:
+
+	    # This file is distributed under the same license as the GNU bison package.
+
+	It turns out that in my environment some log files had the 'GNU bison'
+	string (note the lower case), but in distcheck, these files are no
+	longer visible, so the generate bison.pot was different, and distcheck
+	failed because we try to update bison.pot, which is read only in
+	distcheck.
+
+	The heuristics should look accept 'GNU Bison', not just 'GNU bison'.
+	But let's please it to make sure we have our 'GNU'.
+
+	* README: Mention 'GNU bison'.
+
+2018-10-07  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: document api.*.file changes
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: provide a means to control how location.hh is included
+	Users may want to generate the location file elsewhere, say
+	$top_srcdir/include/ast/location.hh.  Yet, we should not generate
+	`#include "$top_srcdir/include/ast/location.hh"` but probably
+	something like `#include <ast/location.hh>`, or `#include
+	"ast/location.hh", or `#include <location.hh>`.  It entirely depends
+	on the compiler flags (-I/-isystem) that are used.  Bison cannot guess
+	what is expected, so let's give the user a means to tell how the
+	location file should be included.
+
+	* data/location.cc (b4_location_file): New.
+	* data/glr.cc, data/lalr1.cc: Use it.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: support absolute api.location.file names
+	In the case a user wants to create location.hh elsewhere, it can be
+	helpful to define api.location.file to some possibly absolute path
+	such as -Dapi.location.file='"$(top_srcdir)/include/ast/location.hh"'.
+	Currently this does not work with `-o foo/parser.cc`, as we join foo/
+	and $(top_srcdir) together, the latter starting with slash.
+
+	We should not try to do that in m4, manipulating file names is quite
+	complex when you through Windows file name in.  Let m4 delegate this
+	to gnulib.
+
+	* src/scan-skel.l (at_output): Accept up to two arguments.
+	* data/bison.m4 (b4_output): Adjust.
+	* tests/skeletons.at (Fatal errors but M4 continues producing output):
+	Adjust to keep the error.
+
+	* data/location.cc, data/stack.hh: Leave the concatenation to @output.
+	* tests/output.at: Exercise api.location.file with an absolute path.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: when api.location.file is defined, don't generate stack.hh
+	Make it easier to have fewer files.
+
+	* data/stack.hh: Don't generate stack.hh when api.location.file is
+	specified.
+	* tests/calc++.at, tests/output.at: Adjust tests.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: make position.hh completely useless
+	Let's put the definition of position into location.hh, there's no real
+	value in keeping them separate: they are small, and share the same
+	requirements.
+
+	To help users transition to this new model, still generate position.hh
+	by default, but as a simple include to location.hh.
+
+	* data/location.cc (api.position.file): Accept only 'none' as possible
+	value.
+	(position.hh): Make it a stub.
+	(location.hh): Adjust.
+	(b4_position_define): Merge into...
+	(b4_location_define): this.
+	* data/glr.cc, data/lalr1.cc, tests/input.at, tests/output.at: Adjust.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: make stack.hh completely useless
+	Let's completely deprecate stack.hh.  Don't provide a means to give it
+	a new name, allow only its removal.
+
+	See https://lists.gnu.org/archive/html/bison-patches/2018-09/msg00151.html
+	and https://lists.gnu.org/archive/html/bison-patches/2018-09/msg00182.html.
+
+	* data/stack.hh: Reduce stack.hh to a simple comment explaining how to
+	get rid of it.
+	* data/lalr1.cc: Adjust
+	* tests/input.at (%define file variables): Adjust.
+	* tests/output.at: Remove cases where stack.hh was removed.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: add support for api.position.file and api.location.file
+	* data/location.cc: Sort includes.
+	(b4_position_file, b4_location_file): New.
+	When there's a file for locations but not for positions, include the
+	definition of position in the location file.
+	* data/lalr1.cc (b4_shared_declarations): Include the
+	position/location file when it exists.
+	Otherwise, define the class.
+	* data/glr.cc: Likewise.
+	* tests/input.at (%define file variables): Check them.
+	* tests/output.at (C++ output): Check various cases with
+	api.position.file and api.location.file.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: provide control over the stack.hh file name
+	It was not a good idea to generate the file stack.hh.  It never was.
+	But now we have to deal with backward compatibility: if we stop
+	generating it, the build system of some build system will probably
+	break.
+
+	So offer the user a means to (i) decide what the name of the output
+	file should be, and (ii) not generate this file at all (its content
+	will be inline where the parser is defined).
+
+	* data/lalr1.cc (b4_percent_define_check_file_complain)
+	(b4_percent_define_check_file): New.
+	* data/stack.hh: Generate the file only if api.stack.file is not
+	empty.
+	In that case, use it as file name.
+	* data/lalr1.cc: Adjust to include the right file, or to include
+	the definition of stack.
+	* tests/calc.at, tests/output.at: Exercise api.stack.file.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: c++: don't fuse prefix and namespace
+	They are not the same concept.  It appears that we still consider that
+	api.prefix is the default for api.namespace.  We should stop that.
+
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	Separate namespace and prefix.
+	Adjust dependencies.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: tests: factor file extension computations
+	* tests/local.at (AT_LANG_HDR): New.
+	* tests/calc.at, tests/headers.at, tests/synclines.at: Use it, and
+	AT_LANG_EXT.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style changes
+	* data/lalr1.cc: Formatting changes.
+	Remove duplicate definition of YY_NULLPTR.
+	Add quotes to help Emacs track balanced parens.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	lib: introduce xpath_join
+	* lib/path-join.h, lib/path-join.c: New.
+	* lib/local.mk: Adjust.
+	* src/output.c: Use it.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: travis finally knows about llvm-toolchain-trusty-7
+	See https://github.com/travis-ci/apt-source-safelist/pull/392.
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-10-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: restore spello made on purpose
+
+2018-10-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	THANKS: add Josh Soref
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: whether
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: typedef
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: troubleshooting
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: transparent
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: translated
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: transitions
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: transition
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: tracking
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: suppress
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: succesful
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: storage
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: safely
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: responsibility
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: resources
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: releases
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: reduction
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: reachable
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: rawtoknumflag
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: possibly
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: persistent
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: outputting
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: otherwise
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: occurrence
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: namespace
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: minimal
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: invocations
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: initialize
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: incorrectly
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: included
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: illicit
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: handling
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: gratuitously
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: grammar
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: generation
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: generate
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: forewarn
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: fnchange
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: family
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: extensions
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: enum
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: diagnostics
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: determined
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: detailed
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: descriptive
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: definitions
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: declaration
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: corrupted
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: consuming
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: consistently
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: conflicts
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: concatenation
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: complete
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: compatibility
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: comparison
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: combination
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: characters
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: builddir
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: assoc
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: appropriate
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: alignment
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: aggregate
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: adjust
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: additional
+
+2018-10-05  Josh Soref  <jsoref@users.noreply.github.com>
+
+	spelling: accurately
+
+2018-10-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	README-hacking: details about make check-local
+
+2018-10-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-10-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	main: fix error message for missing argument
+	* src/getargs.c (getargs): Don't display any argv other that argv[0]
+	when reporting a missing argument.
+	* tests/bison.in: Neutralize path differences in stderr.
+	* tests/input.at (Invalid number of arguments): New.
+
+2018-09-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: move timevar to it
+	* lib/timevar.c, lib/timevar.h, m4/timevar.m4: Remove.
+	* gnulib: Update.
+	* configure.ac: Adjust.
+	* lib/timevar.def: Use lower case for the timevvars.
+	Adjust dependencies.
+
+2018-09-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: comment changes
+	* data/glr.cc, data/lalr1.cc: here.
+
+2018-09-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-09-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	getargs: use LC_MESSAGES trick only on glibc
+	* src/getargs.c (usage): Rely on setlocale (LC_MESSAGES, NULL)
+	trick only on glibc, as POSIX does not specify the output
+	of setlocale in this case, and the Gnulib localename module
+	source code indicates that the trick works only on glibc.
+
+2018-09-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	uniqstr: avoid need for VLAs
+	C11 no longer requires support for variable-length arrays, and
+	VS2015 does not have them.  Redo UNIQSTR_CONCAT to use a method
+	that is simpler and better anyway.
+	* src/uniqstr.c (uniqstr_vsprintf): Remove; no longer needed.
+	* src/uniqstr.h (UNIQSTR_GEN_FORMAT, UNIQSTR_GEN_FORMAT_):
+	* src/uniqstr.c (uniqstr_concat): New function.
+	* src/uniqstr.h (UNIQSTR_CONCAT): Use it instead of using
+	uniqstr_vsprintf.
+
+2018-09-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clean up the C++ section
+	* doc/bison.texi: Minor fixes in typography.
+	It is no longer require to pass --defines for C++ (it was addressed
+	long ago).
+	No longer refer to the `variant` define variable, it was replaced by
+	`api.value.type variant`.
+	Prefer nullptr to 0 for the null pointer.
+	Use deftypeop for constructors.
+	(Complete Symbols): Give the expected signature of yylex.
+	Don't document the symbol_type constructors, as we want users to focus
+	on make_TOKEN.
+	Also show the case without locations.
+
+2018-09-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: fixes for clang and asan
+	Bison's test 464 (Syntax error as exception) fails on the CI.
+	Do not use clang with asan on Ubuntu's libc++.
+	https://bugs.llvm.org/show_bug.cgi?id=17379
+
+	* .travis.yml (Clang 7 libc++ and ASAN): New.
+	(Clang 6 -O3 and libc++): Really use libc++.
+	(Clang 5): Don't use libc++, nor asan (does not work either, same
+	reason).
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in muscle-tab.c
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: remove useless parens
+	* data/bison.m4, data/glr.c, data/glr.cc, data/lalr1.cc,
+	* data/lalr1.java, data/location.cc, data/yacc.c: Call b4_output_end
+	without parens.
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix warning message for automove
+	* src/scan-code.l: Remove 'enabled'.
+	Use only $k (numeric), even for named references, for clarity.
+	* tests/c++.at: Adjust expectations.
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: minor refactoring
+	* data/bison.m4: Formatting changes.
+	* src/scan-code.l: Avoid loops, prefer standard string functions.
+	(find_prefix_end): Be const correct.
+	Avoid useless intermediate variables.
+	(variant_add): Be const correct.
+	(parse_ref): Prefer variable definitions to assignments.
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: don't exit
+	* .travis.yml: Prefer `false` to `exit`, as it completely ends the
+	script (so we don't get the logs).
+
+2018-09-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: really use Clang 3.3 and 3.4, not 5.0
+	* .travis.yml: Don't define CC/CXX, it does not work.
+	Use `[[...]]` instead of `[...]`.
+	Show the compiler versions.
+	(Clang 3.3, Clang 3.4): Specify the path to avoid using
+	/usr/local/clang-5.0.0/bin's clang.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: more compiler configurations
+	* .travis.yml (GCC 8): Use sanitizers.
+	(Clang 5 -O3): Remove, replaced by...
+	(Clang 7 ASAN and libc++, Clang 6 -O3 and libc++): New.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: rename and simplify the -std checks for C++
+	Too much code duplication.
+
+	* m4/bison-cxx-std.m4: s/BISON_CXX_COMPILE_STDCXX/BISON_CXXSTD/.
+	(BISON_CXXSTD): New.
+	* configure.ac: Use it.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: check for C++98 and 03 like the others
+	* m4/bison-cxx-std.m4 (BISON_CXX_COMPILE_STDCXX_98)
+	(BISON_CXX_COMPILE_STDCXX_03): New.
+	* configure.ac: Use them.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: use our own version of ax_check_link_flag
+	The message on configure is misleading:
+
+	    checking whether the linker accepts -std=c++11... yes
+	    checking whether the linker accepts -std=c++14... yes
+	    checking whether the linker accepts -std=c++17... no
+
+	It is the compiler that we check, not just the linker.
+
+	* m4/ax_check_link_flag.m4: Remove.
+	* m4/bison-check-compiler-flag.m4: New.
+	* m4/bison-cxx-std.m4: Use it.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix Autoconf macros to check for C++ standard flags
+	* m4/bison-cxx-std.m4: Since now we link the program, we need a
+	program: main was missing and linking was failing.
+
+2018-09-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix a memory leak
+	This has been bugging me for while.  I was hard to reproduce: it
+	worked only on GNU/Linux, probably because libc++ implements the small
+	string optimization, while libstdc++ did not and actually allocated on
+	the heap for this small string.
+
+	See https://lists.gnu.org/archive/html/bison-patches/2018-09/msg00110.html.
+
+	* tests/types.at (api.value.type): Do not provide a semantic value to
+	EOF.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: work around Flex's use of 'register'
+	The CI uses an old version of Flex.
+	See 65fa634cdcfc5cf59b8b074670f488bba4df57cd.
+
+	* doc/bison.texi (calc++/scanner.ll): Here.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: don't declare getrusage if we don't use it
+	This fails on MinGW.
+	Reported by Simon Sobisch.
+	http://lists.gnu.org/archive/html/bug-bison/2018-09/msg00058.html
+
+	* lib/timevar.c: Don't provide default prototypes for functions
+	we don't use.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: get rid of a useless macro
+	* lib/timevar.h (timevar_report): Rename as...
+	(timevar_enabled): this.
+	* lib/timevar.c (TIMEVAR_ENABLE): Remove.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: introduce and use get_current_time
+	* lib/timevar.c: here.
+	Remove useless prototypes.
+	(timevar_accumulate): Be const correct.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: rename get_time as set_to_current_time
+	* lib/timevar.c: here.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: reduce scopes
+	* lib/timevar.c: here.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: document in the header, not in the implementation
+	* lib/timevar.c: Move documentation from here...
+	* lib/timevar.h: to there.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: remove useless 'extern' for prototypes
+	* lib/timevar.h, lib/timevar.c: here.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: rename init_timevar as timevar_init
+	* lib/timevar.h, lib/timevar.c: here.
+	* src/main.c: Adjust.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: we don't care about backward compatibility
+	* lib/timevar.h, lib/timevar.c (get_run_time, print_time): Remove.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: prefer #elif
+	* lib/timevar.c: Use #if/#elif to be clearer about mutually exclusive
+	cases.
+	Indent CPP nested directives.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: assume ANSI C
+	Suggested by Bruno Haible.
+	https://lists.gnu.org/archive/html/bug-gnulib/2018-09/msg00102.html
+
+	* lib/timevar.c: Wow...  This was still KnR C!
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	timevar: remove remains of GCC
+	* lib/timevar.h, lib/timevar.c: Rename the header guard.
+	Get rid of parts meant for GCC only.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	news: c++: move semantics
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: issue a warning with a value is moved several times
+	Suggested by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2018-09/msg00022.html
+
+	* src/scan-code.l (parse_ref): Check multiple occurrences of rhs
+	values.
+	* tests/c++.at (Multiple occurrences of $n and api.value.automove): New.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: introduce api.value.automove
+	Based on work by Frank Heckenbach.
+	See http://lists.gnu.org/archive/html/bug-bison/2018-04/msg00000.html
+	and http://lists.gnu.org/archive/html/bug-bison/2018-09/msg00019.html.
+
+	* data/lalr1.cc (b4_rhs_value): Use YY_MOVE api.rhs.automove is set.
+	* doc/bison.texi (%define Summary): Document api.rhs.automove.
+	* examples/variant-11.yy: Use it.
+
+	* tests/local.at (AT_AUTOMOVE_IF): New.
+	* tests/c++.at (Variants): Check move semantics.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: c++: use a custom string type
+	The forthcoming automove feature, to be properly checked, will require
+	that we can rely on the value of a moved-from string, which is not
+	something the C++ standard guarantees.  So introduce our own wrapper.
+
+	Suggested by Frank Heckenbach.
+	https://lists.gnu.org/archive/html/bison-patches/2018-09/msg00111.html
+
+	* tests/c++.at (Variants): Introduce and use a new 'string' class.
+
+2018-09-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: prepare a test for automove
+	The 'Variants' tests are well suited to check support for move, and in
+	particular for the forthcoming automove feature.  But the tests were
+	written to show the best practice in C++98, using swap:
+
+	    list "," item { std::swap ($$, $1); $$.push_back ($3); }
+
+	This cannot work with std::move.  So, make this example simpler, based
+	on regular assignment instead of swap, which is a regression for
+	C++98 (as the new traces show), but will be an improvement for modern
+	C++ with automove.
+
+	* tests/c++.at (Variants): Stop using swap.
+	We don't generate a header file, so remove the 'require' code section.
+	Adjust expectations.
+
+2018-09-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in gram.c
+	* src/gram.c: here.
+
+2018-09-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in reduce.c
+	* src/reduce.c: Here.
+
+2018-09-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-09-20  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: work around ICC's limitations
+	Several types of failures.  First, unable to pass the file name
+	properly to the linker.
+
+	    ./synclines.at:416: $CC $CFLAGS $CPPFLAGS  $LDFLAGS -o \"\\\"\" \"\\\"\".c $LIBS
+	    stderr:
+	    ld: cannot open output file "/"": No such file or directory
+	    stdout:
+
+	Unable to save under such a file name.
+
+	    ./synclines.at:421: $CXX $CXXFLAGS $CPPFLAGS -c $LDFLAGS -o \"\\\"\" \"\\\"\".cc $LIBS
+	    stderr:
+	    error: can't open file "/"" for write
+	    compilation aborted for "\"".cc (code 1)
+
+	Spurious output because of warning flags is failed to reject as an
+	error during configure:
+
+	    ./headers.at:343: $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx ||
+	              exit 77
+	    --- /dev/null	2018-09-18 21:21:37.745649000 +0000
+	    +++ /home/travis/build/akimd/bison/tests/testsuite.dir/at-groups/222/stderr	2018-09-18 21:28:17.291919519 +0000
+	    @@ -0,0 +1,7 @@
+	    +icpc: command line warning #10006: ignoring unknown option '-Wcast-align'
+	    +icpc: command line warning #10006: ignoring unknown option '-fparse-all-comments'
+	    +icpc: command line warning #10006: ignoring unknown option '-Wdocumentation'
+	    +icpc: command line warning #10006: ignoring unknown option '-Wnull-dereference'
+	    +icpc: command line warning #10006: ignoring unknown option '-Wnoexcept'
+	    +icpc: command line warning #10006: ignoring unknown option '-fno-color-diagnostics'
+	    +icpc: command line warning #10006: ignoring unknown option '-Wno-keyword-macro'
+	    stdout:
+
+	* tests/local.at (AT_SKIP_IF_CANNOT_LINK_C_AND_CXX): Also ignore
+	stderr, as with ICC we get
+	* tests/synclines.at (syncline escapes): Don't link the output.
+
+2018-09-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fix typo
+	Introduced in the previous commit.
+
+	* doc/bison.texi: here.
+
+2018-09-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use midrule only, not mid-rule
+	The code was already using midrule only, never mid_rule.  This is
+	simpler to remember, and matches a similar change we made from
+	look-ahead to lookahead.
+
+	* NEWS, doc/bison.texi, src/reader.c, src/scan-code.h, src/scan-code.l
+	* tests/actions.at, tests/c++.at, tests/existing.at: here.
+
+2018-09-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: use _foo for private macros, not foo_
+	We use both styles, let's stick to a single one.  Autoconf uses the
+	prefix one, let's do the same.
+
+	* data/bison.m4, data/c++.m4, data/c-like.m4, data/lalr1.cc,
+	* data/variant.hh, data/yacc.c: Rename all the b4_*_ macros
+	as _b4_*.
+
+2018-09-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: don't accept a broken standard lib for C++
+	On the CI, we had failures such as:
+
+	    ./c++.at:401:  $PREPARSER ./list
+	    stderr:
+	    ./list: error while loading shared libraries: libc++.so.1:
+	            cannot open shared object file: No such file or directory
+
+	because we accepted `-std=c++ -stdlib=libc++` although libc++ is not
+	installed on the machine.
+
+	* m4/ax_check_compile_flag.m4 (AX_CHECK_COMPILE_FLAG): Rewrite as...
+	* m4/bison-check-compile-flag.m4 (BISON_CHECK_COMPILE_FLAG): this, so
+	that we use AC_LINK_IFELSE to check the compiler (and its std lib)
+	instead of AC_COMPILE_IFELSE.
+
+2018-09-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+	doc: document older compiler issues
+	* doc/bison.texi (Compiler Requirements for GLR):
+	Rename from Compiler Requirements.
+	(I can't build Bison): Add FAQ for older compilers.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: work around ICC limitations
+	The CI is littered with
+
+	    #                             -*- compilation -*-
+	    423. regression.at:907: testing Dancer %glr-parser ...
+	    ./regression.at:907: bison -fno-caret -o dancer.c dancer.y
+	    ./regression.at:907: $BISON_C_WORKS
+	    stderr:
+	    stdout:
+	    ./regression.at:907: $CC $CFLAGS $CPPFLAGS  $LDFLAGS -o dancer dancer.c $LIBS
+	    stderr:
+	    icc: command line warning #10006: ignoring unknown option '-Wcast-align'
+	    icc: command line warning #10006: ignoring unknown option '-fparse-all-comments'
+	    icc: command line warning #10006: ignoring unknown option '-Wdocumentation'
+	    icc: command line warning #10006: ignoring unknown option '-Wnull-dereference'
+	    icc: command line warning #10006: ignoring unknown option '-Wbad-function-cast'
+	    icc: command line warning #10006: ignoring unknown option '-fno-color-diagnostics'
+	    icc: command line warning #10006: ignoring unknown option '-Wno-keyword-macro'
+	    dancer.c(755): error #1628: function declared with "noreturn" does return
+	      }
+	      ^
+
+	    dancer.c(761): error #1628: function declared with "noreturn" does return
+	      }
+	      ^
+
+	    compilation aborted for dancer.c (code 2)
+
+	ICC sees that `longjmp(buf, 1);` does not return, it sees that
+	`abort();` does not either, but fails to see it for
+	`longjmp(buf, 1); abort();`
+
+	* data/glr.c (YYLONGJMP): Be even clearer on the fact this does not
+	return.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: more
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: change strategy to pass CXXFLAGS and the like
+	Putting them in the env is useless.  We don't want to pass
+	`CPPFLAGS="$CPPFLAGS"` to configure, as it means "set it to nothing"
+	when $CPPFLAGS is not set, which is not what we want.
+
+	This correctly started to use libc++, but it is not installed on the
+	Ubuntu.  We will see later if we can use it.
+
+	* .travis.yml: Define CONFIGUREFLAGS, and pass it to configure.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: also use GCC 4.7 and 4.8
+	* .travis.yml (matrix): here.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: name the items of the matrix
+	* .travis.yml: here.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: also check with ICC
+	* build-aux/install-icc.sh: New.
+	* .travis.yml (icc): New.
+	Use -k to get as many errors as possible from the start.
+	* src/complain.c (warnings_types): Use a more precise type.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: be sure to exit on failures
+	a807cfa6eb1a5362ead0b7c99bdc8fd2f4f896da completely broke the whole
+	point of having a CI: we always exit with success!
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: strengthen the C++ standard flag test
+	On the CI, we have this spurious failure with clang 3.9 with
+	-std=c++17:
+
+	    In file included from list.y:23:
+	    In file included from /usr/include/c++/4.8/iostream:39:
+	    In file included from /usr/include/c++/4.8/ostream:38:
+	    In file included from /usr/include/c++/4.8/ios:42:
+	    In file included from /usr/include/c++/4.8/bits/ios_base.h:41:
+	    In file included from /usr/include/c++/4.8/bits/locale_classes.h:40:
+	    In file included from /usr/include/c++/4.8/string:52:
+	    In file included from /usr/include/c++/4.8/bits/basic_string.h:2815:
+	    In file included from /usr/include/c++/4.8/ext/string_conversions.h:43:
+	    /usr/include/c++/4.8/cstdio:120:11: error: no member named 'gets' in the global namespace
+	      using ::gets;
+	            ~~^
+
+	This shows that our test, based on gl_WARN_ADD, is a joke.  We have to
+	really check for at least a bit of C++.
+
+	* m4/ax_check_compile_flag.m4, m4/bison-cxx-std.m4: New.
+	* configure.ac: Use them to make sure the compiler actually works.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix memory leak
+	This was reported by ASAN on the CI.
+
+	* tests/types.at (api.value.type): Don't set a semantic value to EOF.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr.c: prefer true/false to 1/0 in C++
+	* data/glr.c: here.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: work around Flex's use of 'register'
+	The CI uses an old version of Flex.
+
+	* doc/bison.texi (calc++/scanner.ll): Here.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fight G++ warnings about zero as null pointer constant
+	In C++ pre C++11 it is standard practice to use 0 for the null pointer.
+	But GCC pre 8 -std=c++98 with -Wzero-as-null-pointer-constant warns about
+	this.
+
+	So disable -Wzero-as-null-pointer-constant when compiling C++ pre 11.
+	Let's do this in AT_DATA_SOURCE_PROLOGUE (which is pasted on top of
+	all the test grammar files).  Unfortunately, that shifts all the
+	locations in the expected error messages, which would be too noisy.
+	Instead, let's introduce testsuite.h, which can vary in length, and
+	include it in AT_DATA_SOURCE_PROLOGUE.
+
+	* tests/testsuite.h: New.
+	Disable -Wzero-as-null-pointer-constant's warning with GCC pre 8,
+	C++ pre 11.
+	* tests/local.at (AT_DATA_SOURCE_PROLOGUE): Use it.
+	* tests/atlocal.in (CPPFLAGS): Find it.
+	* tests/local.mk: Ship it.
+	* data/c.m4 (YY_NULLPTR): Prefer ((void*)0) to 0 in C.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: make sure `git describe` works
+	For some reasons, the checkout on travis may not have any tags, so
+	`git describe` fails, so bootstrap fails.
+
+	* .travis.yml: If git describe fails, install some tag.
+
+2018-09-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: install Doxygen
+	* .travis.yml: here, so that its tests are not skipped.
+	Remove valgrind: it's too expensive on the CI, and asan does the job.
+
+2018-09-16  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: prefer %D% in Automake files
+	* tests/local.mk: Prefer %D%/ to tests/.
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in complain.c
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in tables.c
+	* src/tables.c: here.
+	* src/state.h: Formatting changes.
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in graphviz.c
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in LR0.c
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes in print_graph.c
+	* src/print_graph.c: here.
+
+2018-09-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: formatting changes
+	* doc/bison.texi: No changes in the output.
+
+2018-09-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: run the C++ tests on all the available standards
+	This is much of course more efficient than in the matrix of the CI (or
+	on our own machines), but a bit more tedious.
+
+	* configure.ac (CXX03_CXXFLAGS, CXX11_CXXFLAGS, CXX14_CXXFLAGS)
+	(CXX17_CXXFLAGS, CXX2A_CXXFLAGS, STDCXX_FLAGS): New.
+	* tests/atlocal.in: Receive them.
+	* tests/local.at (AT_FOR_EACH_CXX): New.
+	* tests/c++.at: Use AT_FOR_EACH_CXX.
+
+2018-09-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: allow to override variables with envvars
+	* tests/atlocal.in: Allow the user to change interesting variables
+	(CFLAGS, CXXFLAGS, etc.).
+
+2018-09-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: modern C++ no longer needs an assignment for symbols
+	Reported by Frank Heckenbach.
+	http://lists.gnu.org/archive/html/bug-bison/2018-03/msg00002.html
+
+	Actually the assignment operator should never be needed: the C++98
+	requirements for vector::push_back is CopyInsertable, which does not require
+	an assignment operator.  However, libstdc++ shipped with GCC up to (and
+	including) 6 uses the assignment operator (which affects Clang on top of
+	libstdc++, but also ICC).  So let's keep it for legacy C++.
+
+	See https://gcc.godbolt.org/z/q0XXmC.
+
+	* data/lalr1.cc (stack_symbol_type::operator=): Remove.
+	* data/c++.m4 (basic_symbol::operator=): Ditto.
+	* tests/c++.at (C++ Variant-based Symbols Unit Tests): Adjust.
+
+2018-09-13  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: support move semantics
+	Modern C++ (i.e., C++11 and later) introduced "move only" types: types such
+	as std::unique_ptr<T> that can never be duplicated.  They must never be
+	copied (by assignments and constructors), they must be "moved".  The
+	implementation of lalr1.cc used to copy symbols (including their semantic
+	values).  This commit ensures that values are only moved in modern C++, yet
+	remain compatible with C++98/C++03.
+
+	Suggested by Frank Heckenbach, who provided a full implementation on
+	top of C++17's std::variant.
+	See http://lists.gnu.org/archive/html/bug-bison/2018-03/msg00002.html,
+	and https://lists.gnu.org/archive/html/bison-patches/2018-04/msg00002.html.
+
+	Symbols (terminal/non terminal) are handled by several functions that used
+	to take const-refs, which resulted eventually in a copy pushed on the stack.
+	With modern C++ (C++11 and later) the callers must use std::move, and the
+	callees must take their arguments as rvalue refs (foo&&).  In order to avoid
+	duplicating these functions to support both legacy C++ and modern C++, let's
+	introduce macros (YY_MOVE, YY_RVREF, etc.)  that rely on copy-semantics for
+	C++98/03, and move-semantics for modern C++.
+
+	That's easy for inner types, when the parser's functions pass arguments to
+	each other.  Functions facing the user (make_NUMBER, make_STRING, etc.)
+	should support both rvalue-refs (for instance to support move-only types:
+	make_INT (std::make_unique<int> (1))), and lvalue-refs (so that we can pass
+	a variable: make_INT (my_int)).  To avoid the multiplication of the
+	signatures (there is also the location), let's take the argument by value.
+
+	See:
+	https://lists.gnu.org/archive/html/bison-patches/2018-09/msg00024.html.
+
+	* data/c++.m4 (b4_cxx_portability): New.
+	(basic_symbol): In C++11, replace copy-ctors with move-ctors.
+	In C++11, replace copies with moves.
+	* data/lalr1.cc (stack_symbol_type, yypush_): Likewise.
+	Use YY_MOVE to avoid useless copies.
+	* data/variant.hh (variant): Support move-semantics.
+	(make_SYMBOL): In C++11, in order to support both read-only lvalues,
+	and rvalues, take the argument as a copy.
+	* data/stack.hh (yypush_): Use rvalue-refs in C++11.
+	* tests/c++.at: Use move semantics.
+
+	* tests/headers.at: Adjust to the new macros (YY_MOVE, etc.).
+
+	* configure.ac (CXX98_CXXFLAGS, CXX11_CXXFLAGS, CXX14_CXXFLAGS)
+	(CXX17_CXXFLAGS, ENABLE_CXX11): New.
+	* tests/atlocal.in: Receive them.
+
+	* examples/variant.yy: Don't define things in std.
+	* examples/variant-11.test, examples/variant-11.yy: New.
+	Check the support of move-only types.
+	* examples/README, examples/local.mk: Adjust.
+
+2018-09-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: factor the definition of full compilation
+	* tests/local.at (AT_LANG_EXT): New.
+	(AT_FULL_COMPILE): Simplify.
+
+2018-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: use clang with libc++
+	GCC uses libstdc++.  Let's also check libc++.
+
+	* .travis.yml: here.
+
+2018-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: use address sanitizer
+	* .travis.yml (matrix): Use the latest (available) clang with asan.
+
+2018-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: sort the matrix in reverse-chronological
+	There are only three builds at a time: show the result of modern
+	compilers first.
+
+	* .travis.yml (matrix): Sort in reverse-chronological.
+
+2018-09-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: use -fparse-all-comments with -Wdocumentation
+	Clang checks only /** ... */ comments without this flag.
+
+	* configure.ac (warn_common): Also check -fparse-all-comments.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	TODO: minor updates
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix support for --disable-dependency-tracking
+	Reported by Juan Manuel Guerrero.
+	https://lists.gnu.org/archive/html/bug-bison/2014-07/msg00000.html.
+
+	* examples/local.mk (%D%/extracted.stamp): Make sure the output
+	directory exists.
+	* examples/extexi (process): Likewise.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure.ac: fix definition of NO_EXCEPTIONS_CXXFLAGS
+	* configure.ac: Always define it, not just when --enable-gcc-warnings
+	is passed.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	skeletons: style/comment changes
+	* data/c++.m4, data/c.m4, data/glr.c: Here.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	variant: indent better the generated code
+	* data/variant.hh (b4_basic_symbol_constructor_declare)
+	(b4_basic_symbol_constructor_define): here.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: don't generate useless constructors when variant is used
+	This generates less code, which is nicer to read, but also takes less
+	chances with compilers such as G++ 4.8 that are too strict and check
+	"dead code" (templated code that is not instantiated).
+
+	* data/c++.m4 (b4_symbol_type_declare, b4_symbol_type_define): When
+	variants are used, don't generate code meant for non variants.
+
+2018-09-09  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: Clang 6.0 is not available
+	But Clang 3.3 and 3.4 are.
+
+	* .travis.yml (addons): Remove, it appears to be ignore if the matrix
+	also defines it.
+	(matrix): Update.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: work around warnings in Flex
+	See ea0db44fedc8d5cbdc5c3180bef0285d7ae83803.  We also need to disable
+	the warning in the examples (but don't want to clutter the
+	documentation with such details).
+
+	* doc/bison.texi (scanner.ll): Disable Clang's -Wdocumentation.
+	While at it, hide the other kludges.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: more compiler configurations
+	* .travis.yml: here.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	configure: reveal the name of the Valgrind suppression file we use
+	* configure.ac: here.
+	* build-aux/Linux.valgrind (libstdcxx_init): New.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: work around warnings in Flex 2.5.35
+	That's the version on Ubuntu Precise.
+	See also 1dac131ec45ffa1e382319a94640c65bd10f6aa5.
+
+	* src/flex-scanner.h: Disable -Wdocumentation.
+	* doc/bison.texi: Turn off a warning triggered by Flex 2.6.4.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: show the version of the tools we use
+	We have failures on Flex output, which are probably related to an old
+	release.  Let's check.
+
+	    In file included from src/scan-code-c.c:3:
+	    src/scan-code.c:2198:21: error: empty paragraph passed to '@param' command
+	          [-Werror,-Wdocumentation]
+	     * @param line_number
+	       ~~~~~~~~~~~~~~~~~^
+
+	* .travis.yml: here.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: run more maintainer tests and show the logs
+	Running all these tests might be overkill: it is very long, and don't
+	need full portability checks.  Besides, some tests under Valgrind are
+	too slow and get killed by the CI (timeout of 10min without output).
+
+	* .travis.yml: here.
+
+2018-09-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: enable compiler warnings
+	* .travis.yml: here.
+	* README-hacking: We no longer aim at K&R C.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: work around GCC warnings on Flex code
+	See ef98967ada3c1cd48c177d7349e65a709bb49b97.
+
+	* src/flex-scanner.h: Disable -Wnull-dereference for GCC 6+.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix target naming convention
+	We have some maintainer-check-foo and some maintainer-foo-check.  Keep
+	only the former.
+
+	* tests/local.mk (maintainer-push-check, maintainer-xml-check)
+	(maintainer-release-check): Rename as...
+	(maintainer-check-push, maintainer-check-xml)
+	(maintainer-check-release): these.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix variable naming convention
+	Most of our variables for C++ flags are named FOO_CXXFLAGS, not
+	CXXFLAGS_FOO.
+
+	* configure.ac, tests/atlocal.in, tests/calc.at
+	(NO_EXCEPTIONS_CXXFLAGS): Rename as...
+	(CXXFLAGS_NO_EXCEPTIONS): this.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix maintainer-check-g++ make recipe
+	Clang++ issues warnings when it's used to compile C.  This make target
+	is precisely checking whether we can do that.
+
+	* configure.ac (NO_DEPRECATED_CXXFLAGS): New.
+	* tests/atlocal.in: Use it.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix maintainer-check-valgrind make recipe
+	* tests/local.mk (maintainer-check-valgrind): Run the with Valgrind
+	when it's available, not the converse.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	CI: prepare for travis
+	* .travis.yml: New.
+
+2018-09-06  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: beware of shell portability issues
+	This completes 2d7e7438024e47650c3a0c9f5f313c6eb6acae2d.
+
+	Some shells don't grok "local var=`cmd`" very well: they need the rhs
+	to be quoted.
+
+	    ./examples/test: 72: local: you.,: bad variable name
+	    FAIL examples/variant.test (exit status: 2)
+
+	Reported by Étienne Renault.
+
+	* examples/test (run): Quote the values in 'local' assignments.
+
+2018-09-04  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style changes
+	* tests/c++.at: Formatting changes.
+	Use 'using' to shorten the code.
+
+2018-09-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: disable GCC7 warnings for some tests
+	With GCC7 we have warnings (false positive):
+
+	    x8.c: In function 'x8_parse':
+	    x8.c:1233:16: error: 'yylval' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	             yylval = *yypushed_val;
+	             ~~~~~~~^~~~~~~~~~~~~~~
+	    x8.c: In function 'x8_pull_parse':
+	    x8.c:1233:16: error: 'yylval' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	             yylval = *yypushed_val;
+	             ~~~~~~~^~~~~~~~~~~~~~~
+
+	See also 9645a2b20ee7cbfa8bb4ac2237f87d598afe349c.
+
+	* tests/local.at (AT_PUSH_IF): New.
+	(AT_BISON_OPTION_POPDEFS): Pop it, and pop AT_PURE_IF.
+	* tests/headers.at (Several parsers, Several parsers): Disable these
+	warnings when in push parser.
+
+2018-09-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: don't issue the definition of symbol_type when not used
+	Currently, in glr.cc, we emit the definitions of basic_symbol and
+	symbol_type, although there are not used.
+
+	* data/c++.m4 (b4_public_types_declare): Extract these definitions from
+	here, and move them...
+	(b4_symbol_type_declare): here.
+	(b4_public_types_declare): Also remove the definition of the symbol
+	constructors.
+	* data/lalr1.cc (b4_shared_declarations): Adjust: call
+	b4_symbol_type_declare and b4_symbol_constructor_declare.
+
+2018-09-02  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: beware of shell portability issues
+	Some shells don't grok `local var=$val` very well: they need the rhs
+	to be quoted.
+
+	    ./examples/test: 66: local: you.,: bad variable name
+	    FAIL examples/variant.test (exit status: 2)
+
+	Reported by Étienne Renault.
+
+	* examples/test (run): Quote the values in 'local' assignments.
+
+2018-08-31  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: leave 'inline' on the definition, not the declaration
+	This is for consistency with the other uses of 'inline' in the C++
+	skeletons.  On examples/variant.yy, this change gives:
+
+	    --- examples/variant.hh	2018-08-31 07:16:57.214222580 +0200
+	    +++ examples/variant.hh	2018-08-31 07:19:52.285431997 +0200
+	    @@ -444,15 +444,15 @@
+	         typedef basic_symbol<by_type> symbol_type;
+
+	         // Symbol constructors declarations.
+	    -    static inline
+	    +    static
+	         symbol_type
+	         make_END_OF_FILE (const location_type& l);
+
+	    -    static inline
+	    +    static
+	         symbol_type
+	         make_TEXT (const ::std::string& v, const location_type& l);
+
+	    -    static inline
+	    +    static
+	         symbol_type
+	         make_NUMBER (const int& v, const location_type& l);
+
+	    @@ -945,19 +945,23 @@
+	         };
+	         return static_cast<token_type> (yytoken_number_[type]);
+	       }
+	    +
+	       // Implementation of make_symbol for each symbol type.
+	    +  inline
+	       parser::symbol_type
+	       parser::make_END_OF_FILE (const location_type& l)
+	       {
+	         return symbol_type (token::END_OF_FILE, l);
+	       }
+
+	    +  inline
+	       parser::symbol_type
+	       parser::make_TEXT (const ::std::string& v, const location_type& l)
+	       {
+	         return symbol_type (token::TEXT, v, l);
+	       }
+
+	    +  inline
+	       parser::symbol_type
+	       parser::make_NUMBER (const int& v, const location_type& l)
+	       {
+	    @@ -967,7 +971,7 @@
+
+	     } // yy
+	    -#line 971 "examples/variant.hh" // lalr1.cc:380
+	    +#line 975 "examples/variant.hh" // lalr1.cc:380
+
+	and no changes on variant.cc.
+
+	* data/c++.m4 (b4_public_types_define): Formatting changes.
+	* data/variant.hh (b4_symbol_value_template_, b4_symbol_constructor_declare_):
+	Move the 'inline' from declaration to implementation.
+
+2018-08-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: style changes
+	Instead of
+
+	    parser::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that)
+	      : super_type (that.state, that.location)
+	    {
+	      value = that.value;
+	    }
+
+	generate
+
+	    parser::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that)
+	      : super_type (that.state, that.value, that.location)
+	    {}
+
+	* data/lalr1.cc (stack_symbol_type): Improve the copy ctor, when not
+	using the variants.
+	(yypush_): Rename arguments for clarity.
+
+2018-08-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: the assignment operator does not have to be const
+	* data/lalr1.cc (stack_symbol_type::operator=): Don't copy the
+	argument, move it.
+
+2018-08-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style changes
+	* tests/c++.at (C++ Variant-based Symbols): Rename as...
+	(C++ Variant-based Symbols Unit Tests): this.
+	Comment/style changes.
+
+2018-08-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-08-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.1
+	* NEWS: Record release date.
+
+2018-08-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: tabs are ok in a Makefile
+	* cfg.mk: TABs are ok in examples/calc++/Makefile.
+
+2018-08-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: make sure the generated header is self container
+	See the previous commit.
+
+	* data/lalr1.cc: Be sure to define YY_NULLPTR.
+	* tests/headers.at: Check the case that was failing.
+
+2018-08-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check that headers are sane
+	The header generated for variants with assertions but without
+	locations, is not self-contained.  Prepare a check for this.
+
+	* tests/headers.at (Sane headers): New, extracted from...
+	(Several parsers): here.
+
+2018-08-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	"C++: restore copy-constructor for stack_symbol_type
+	Benchmarks show that it is more efficient to keep this copy
+	constructor, rather than forcing the use of the default constructor
+	and then assignment.
+
+	This reverts commit 7ab25ad0208d00f509613e1e151aa3043cf2862f.
+
+2018-08-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: calc++: a Makefile and a README
+	* examples/calc++/Makefile, examples/calc++/README: New.
+	* examples/calc++/local.mk: Ship and install them.
+	* doc/bison.texi: Formatting changes.
+
+2018-08-25  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+
+2018-08-25  Jiahao Li  <jiahaoli@fb.com>
+
+	variant: fix uninitialized memory access in `variant<>`
+	Currently, in bison's C++ parser template (`lalr.cc`), the `variant<>`
+	struct's `build()` method uses placement-new in the form `new (...) T`
+	to initialize a variant type.  However, for POD variant types, this
+	will leave the memory space uninitialized.  If we subsequently tries
+	to `::move` into a variant object in such state, the call can trigger
+	clang's undefined behavior sanitizer due to accessing the
+	uninitialized memory.
+
+	https://lists.gnu.org/archive/html/bison-patches/2018-08/msg00098.html
+
+	* data/variant.hh (build): Always initialize the stored value.
+
+2018-08-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-08-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: calc++: minor improvements
+	* doc/bison.texi (A Complete C++ Example): Prefer throw exceptions
+	from the scanner.
+	Show the invalid characters.
+	Since the scanner sends exceptions, it no longer needs to report
+	errors, so we can get rid of the driver's routine to report error,
+	do it in yyerror.
+	Use @group/@end group to improve rendering.
+
+2018-08-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: calc++: make sure the file name in location is set
+	Reported by Hans Åberg.
+	http://lists.gnu.org/archive/html/bug-bison/2018-08/msg00039.html
+
+	* doc/bison.texi (A Complete C++ Example): Move the token's location
+	from the scanner to the driver.
+
+2018-08-24  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: calc++: remove prefixes
+	This example uses the calcxx_ prefix for each class.  That's uselessly
+	heavy.
+
+	* doc/bison.texi (A Complete C++ Example): Simplify the class names.
+	Since now 'driver' denotes the class, use 'drv' for the values.
+	Formatting changes.
+
+2018-08-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix the leading empty line
+	* examples/extexi: Really avoid the first empty line.
+	Remove useless `next`.
+
+2018-08-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: shorten the name of the calc++ files
+	* doc/bison.texi: Turn the calc++- prefix into calc++/.
+	* examples/extexi (%file_wanted): Replace with
+	(&file_wanted): this.
+	* examples/calc++/local.mk: Adjust.
+
+2018-08-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: disable -Wmaybe-uninitialized in some tests
+	On these tests, at -O2 and above, GCC 8 complains that yylval may be
+	uninitialized.  But it seems wrong: it is initialized.  Rather than
+	turning off the warning in the skeleton (hence possibility hiding
+	relevant warnings of user parsers), let's turn it off in the tests
+	only.
+
+	    163: parse.error=verbose and consistent errors:      FAILED (conflicts.at:625)
+	    165: parse.error=verbose and consistent errors: lr.default-reduction=consistent FAILED (conflicts.at:635)
+	    166: parse.error=verbose and consistent errors: lr.default-reduction=accepting FAILED (conflicts.at:641)
+	    167: parse.error=verbose and consistent errors: lr.type=canonical-lr FAILED (conflicts.at:645)
+	    168: parse.error=verbose and consistent errors: parse.lac=full FAILED (conflicts.at:650)
+	    169: parse.error=verbose and consistent errors: parse.lac=full lr.default-reduction=accepting FAILED (conflicts.at:655)
+
+	We get:
+
+	    input.c: In function 'yyparse':
+	    input.c:980:9: error: 'yylval' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	     YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
+	             ^~~~~~
+	    cc1: all warnings being treated as errors
+
+	See https://lists.gnu.org/archive/html/bison-patches/2018-08/msg00063.html.
+
+	* tests/conflicts.at (AT_CONSISTENT_ERRORS_CHECK): Disable
+	-Wmaybe-uninitialized.
+
+2018-08-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clarify that the push parser object can be reused
+	Suggested by Rici Lake.
+	https://lists.gnu.org/archive/html/bug-bison/2018-08/msg00033.html
+
+	* doc/bison.texi: Complete description of the first node in the main
+	@menu.
+	(Push Decl): Remove the 'experimental' warnings about push parser.
+	Clarify that the push parser object can be reused in several parses.
+
+2018-08-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: support compilation with disabled support for exceptions
+	Reported by Brooks Moses <bmoses@google.com>
+	http://lists.gnu.org/archive/html/bison-patches/2018-02/msg00000.html
+
+	* data/lalr1.cc (YY_EXCEPTIONS): New.
+	Use it to disable try/catch clauses.
+
+	* doc/bison.texi (C++ Parser Interface): Document it.
+
+	* configure.ac (CXXFLAGS_NO_EXCEPTIONS): New.
+	* tests/atlocal.in: Receive it.
+	* tests/local.at (AT_FULL_COMPILE, AT_LANG_COMPILE):
+	Accept a new argument, extra compiler flags.
+	* tests/calc.at: Run the C++ calculator with exception support disabled.
+
+2018-08-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: add empty lines
+	Currently the examples are too dense, let's put empty lines where
+	'#line' would be issued.  And also remove some spurious empty
+	lines (remains from @group, @end group, etc.).
+
+	* examples/extexi: Do that.
+	* examples/local.mk (extexiFLAGS): Rename as...
+	(EXTEXIFLAGS): this.
+
+2018-08-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: check the variant example
+	* examples/mfcalc/local.mk, examples/rpcalc/local.mk: Define the
+	programs in a more natural order, source, preproc, then linker.
+
+	* examples/test: Be ready to work on programs that are not in
+	a subdir.
+	* examples/variant.test: New.
+	* examples/local.mk: Use it.
+	* examples/variant.yy: Don't use 0 for nullptr.
+	Use a more natural output for a list of string.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: fix portability issue with MSVC 2017
+	Visual Studio issues a C4146 warning on '-static_cast<unsigned>(rhs)'.
+	The code is weird, probably to cope with INT_MIN.  Let's go back to
+	using std::max (whose header is still included in position.hh...) like
+	originally, but with the needed casts.
+
+	Reported by 長田偉伸, and with help from Rici Lake.
+
+	See also
+	http://lists.gnu.org/archive/html/bug-bison/2013-02/msg00000.html
+	and commit 75ae8299840bbd854fa2474d38402bbb933c6511.
+
+	* data/location.cc (position::add_): Take min as an int.
+	Use std::max.
+	While here, get rid of a couple of useless inlines.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: fix concurrent build failure
+	Reported by Dengke Du and Robert Yang.
+	https://lists.gnu.org/archive/html/bison-patches/2017-07/msg00000.html
+
+	* src/local.mk (src/yacc): Make sure the directory exists.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	lalr1.cc: remove debug comment
+	* data/lalr1.cc: Remove a comment about indentation.
+	I'm not sure it would be nice to indent even more, it's already quite
+	of the right.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fix the name of the GFDL section
+	Reported by dine <2500418497@qq.com>.
+	http://lists.gnu.org/archive/html/bug-bison/2016-10/msg00000.html
+
+	I mirrored what the Coreutils do.
+
+	* doc/bison.texi (Copying This Manual): Rename as...
+	(GNU Free Documentation License): this, since that the name we
+	used in the preamble.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: clarify the destructor selection example
+	Reported by Gary L Peskin.
+	http://lists.gnu.org/archive/html/help-bison/2016-02/msg00000.html
+
+	* doc/bison.texi (Destructor Decl): here.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	portability: don't use _Pragma with ICC
+	ICC defines __GNUC__ [1], but does not support GCC's _Pragma for
+	diagnostics.  As a matter of fact, I believe it does not support
+	_Pragma at all (only #pragma) [2].
+
+	Reported by Maxim Prohorenko.
+	https://savannah.gnu.org/support/index.php?108339
+
+	[1] https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-gcc-compatibility-and-interoperability
+	[2] https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-pragmas
+
+	* data/c.m4 (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN): Exclude ICC from
+	the club.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: typed mid-rule actions
+	* doc/bison.texi (Mid-Rule Actions): Restructure to insert...
+	(Typed Mid-Rule Actions): this new section.
+	Move the manual translation of mid-rule actions into regular actions
+	to...
+	(Mid-Rule Action Translation): here.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	escape properly the file names in #line for printer/destructor
+	Reported by Jannick.
+	http://lists.gnu.org/archive/html/bug-bison/2017-05/msg00001.html
+
+	"Amusingly" enough, we have the same problem with %defines when the
+	parser file name has backslashes or quotes: we generate #includes with
+	an incorrect C string.
+
+	* src/output.c (prepare_symbol_definitions): Escape properly the file
+	names before passing them to M4.
+	* data/bison.m4, data/lalr1.cc: Don't simply put the file name between
+	two quotes (that should have been strong enough a smell...), expect
+	the string to be properly quoted.
+	* tests/synclines.at: New tests to check this.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix title and improve quoting
+	* tests/synclines.at: here.
+	Also, prefer '%code' to ;%{...%}' for yylex/yyerror prototypes.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/output.c: here.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/scan-code.l: here.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/parse-gram.y: Declare iterator within the for-loop.
+
+2018-08-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style changes
+	* tests/c++.at, tests/local.at: Formatting and title changes.
+
+2018-08-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	reader: simplify the search of the start symbol
+	Suggested by Paul Eggert.
+
+	* src/reader.c (find_start_symbol): Don't check 'res', we know it is
+	not null.  That suffices to avoid the GCC warnings.
+	* bootstrap.conf: We don't need 'assume', which doesn't exist anyway.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: fix GCC8 warnings about uninitialized values
+	In 0931d14728fb4a2272399f2c927ae78e2607b4fb I removed too many
+	initializations from some ctors: some were not about base ctors, but
+	about member variables.  In fact, more of them were missing to please
+	GCC 8.
+
+	While at it, generate more natural code for C++ without variant:
+	instead of
+
+	    template <typename Base>
+	    parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
+	      : Base (other)
+	      , value ()
+	    {
+	      value = other.value
+	    }
+
+	generate
+
+	    template <typename Base>
+	    parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
+	      : Base (other)
+	      , value (other.value)
+	    {}
+
+	* data/c++.m4 (basic_symbol::basic_symbol): Always initialize 'value',
+	it might be a POD without a ctor.
+	* data/lalr1.cc (stack_symbol_type::stack_symbol_type): Likewise.
+	* data/variant.hh (variant::variant): Default initialize the buffer too.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: style: use %empty
+	* tests/conflicts.at: here.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix warnings in push mode
+	Fix warning with GCC 8, -DNDEBUG.
+
+	    422. push.at:83: testing Multiple impure instances ...
+	    input.y: In function 'main':
+	    input.c:1022:12: error: potential null pointer dereference [-Werror=null-dereference]
+	       if (!yyps->yynew && yyps->yyss != yyps->yyssa)
+	            ~~~~^~~~~~~
+
+	* data/yacc.c (pstate_delete): Do nothing if called on null pointer.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: avoid GCC 8 warnings
+	GCC 8 issues warnings whose root cause was a bit hard to find.
+
+	    calc.cc: In member function 'virtual int yy::parser::parse()':
+	    calc.cc:810:18: warning: '*((void*)&<anonymous> +8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
+	         , location (l)
+	                      ^
+	    calc.cc: In member function 'void yy::parser::yypush_(const char*, yy::parser::stack_symbol_type&)':
+	    calc.cc:810:18: warning: '*((void*)&<anonymous> +8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
+	         , location (l)
+	                      ^
+	    calc.cc: In member function 'void yy::parser::yypush_(const char*, yy::parser::state_type, yy::parser::symbol_type&)':
+	    calc.cc:810:18: warning: '*((void*)&<anonymous> +8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
+	         , location (l)
+	                      ^
+
+	The problem is with locations that don't have a constructor, such as
+	Span (in calc.cc) which is POD.  It is POD on purpose: so that we can
+	use that structure to test glr.cc which cannot use non POD in its
+	(C) stacks.
+
+	* data/c++.m4 (basic_symbol): Also ensure that 'location' is
+	initialized.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: avoid compiler warnings
+	* tests/calc.at (AT_CALC_MAIN): Declare yyparse and operator<< in an
+	unnamed namespace to avoid "not declared" warnings (clang
+	-Weverything).
+	Remove useless prototypes.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	build: work around GCC warnings on Flex code
+	With GCC 7.3.0 and Flex 2.6.4, we get warnings on all the generated
+	scanners:
+
+	    examples/calc++/calc++-scanner.cc: In function 'void yyrestart(FILE*)':
+	    examples/calc++/calc++-scanner.cc:1611:20: error: potential null pointer dereference [-Werror=null-dereference]
+	     /* %endif */
+	      ~~~~~~~~~~~       ^
+	    examples/calc++/calc++-scanner.cc:1607:19: error: potential null pointer dereference [-Werror=null-dereference]
+	     /* %if-c-only */
+	      ~~~~~~~~~~~~~~~  ^
+	    examples/calc++/calc++-scanner.cc:1611:20: error: potential null pointer dereference [-Werror=null-dereference]
+	     /* %endif */
+	      ~~~~~~~~~~~       ^
+	    examples/calc++/calc++-scanner.cc:1607:19: error: potential null pointer dereference [-Werror=null-dereference]
+	     /* %if-c-only */
+	      ~~~~~~~~~~~~~~~  ^
+	    cc1plus: all warnings being treated as errors
+
+	Obviously the lines are incorrect, and the warnings are emitted twice.
+	Still, let's get rid of these warnings.
+
+	* doc/bison.texi, src/flex-scanner.h: Disable these warnings in code
+	generated by Flex.
+
+2018-08-15  Akim Demaille  <akim.demaille@gmail.com>
+
+	fix incorrect C code
+	Commit 3df32101e7978eaafa63bce8908de3dcae4d9cda introduced invalid C
+	code.  Caught by GCC 7.3.0.
+
+	* bootstrap.conf (gnulib_modules): We need assume.
+	* src/reader.c (find_start_symbol): Fix the signature (too much C++,
+	sorry...).
+	Prefer 'assume' to 'assert', so that we don't have these warnings even
+	when NDEBUG is defined.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: fix Englishoes
+	* examples/README: Fix my mistakes.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	examples: ship and install variant.yy
+	This file was meant to be shown as an example.  Install it.
+
+	* README, data/README: Put Emacs metadata in the final section.
+	* examples/README: New.
+	* examples/variant.yy: Use %empty.
+	* examples/local.mk: Install both these files.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: remove useless copy-constructor
+	We currently generate copy constructors such as the following
+	one (taken from examples/variant.yy):
+
+	    parser::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that)
+	      : super_type (that.state, that.location)
+	    {
+	      switch (that.type_get ())
+	      {
+	        case 3: // TEXT
+	        case 8: // item
+	          value.copy< ::std::string > (that.value);
+	          break;
+
+	        case 7: // list
+	          value.copy< ::std::vector<std::string> > (that.value);
+	          break;
+
+	        case 4: // NUMBER
+	          value.copy< int > (that.value);
+	          break;
+
+	        default:
+	          break;
+	      }
+	    }
+
+	they are actually useless: we never need it.
+
+	* data/lalr1.cc: Don't generate the stack_symbol_type copy ctor.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: symbol constructors: add a missing reference
+	Fix a typo so that instead of
+
+	    basic_symbol::basic_symbol (typename Base::kind_type t, const int v)
+
+	we now generate
+
+	    basic_symbol::basic_symbol (typename Base::kind_type t, const int& v)
+
+	* data/variant.hh (b4_basic_symbol_constructor_declare)
+	(b4_basic_symbol_constructor_define): Add missing reference.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: remove useless calls to the base default constructor
+	* data/c++.m4, data/stack.hh, data/variant.hh: here.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: prefer size_type to unsigned for indexes
+	* data/stack.hh (size_type): New, based on the container type.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: m4: remove useless reference to 'int' in integral types
+	* m4/cxx.m4: Prefer 'unsigned' to 'unsigned int'.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: doc: remove useless reference to 'int' in integral types
+	* doc/bison.texi: Prefer 'unsigned' to 'unsigned int'.  Likewise for
+	long and short.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: lib: remove useless reference to 'int' in integral types
+	* lib/abitset.c, lib/bbitset.h, lib/bitset.c, lib/bitset.h,
+	* lib/bitset_stats.c, lib/bitsetv-print.c, lib/bitsetv.c,
+	* lib/bitsetv.h, lib/ebitset.c, lib/lbitset.c, lib/timevar.c,
+	* lib/vbitset.c:
+	Prefer 'unsigned' to 'unsigned int'.  Likewise for long and short.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: src: remove useless reference to 'int' in integral types
+	* src/AnnotationList.c, src/AnnotationList.h, src/InadequacyList.h,
+	* src/closure.c, src/closure.h, src/gram.c, src/gram.h, src/ielr.c,
+	* src/location.c, src/output.c, src/reader.c, src/relation.c,
+	* src/scan-code.l, src/scan-gram.l, src/tables.c, src/tables.h:
+	Prefer 'unsigned' to 'unsigned int'.  Likewise for long and short.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: tests: remove useless reference to 'int' in integral types
+	* tests/actions.at, tests/cxx-type.at: Prefer 'unsigned' to 'unsigned
+	int'.  Likewise for long and short.
+
+2018-08-14  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: data: remove useless reference to 'int' in integral types
+	* data/c.m4, data/glr.c, data/yacc.c: Prefer 'unsigned' to 'unsigned
+	int'.  Likewise for long and short.
+
+2018-08-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	* bootstrap.conf: gnulib_mk is defined again by bootstrap.
+
+2018-08-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: avoid type aliases
+	* doc/bison.texi (C++ Location Values): Use 'unsigned' instead of
+	'uint'.
+
+2018-08-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: remove the "experimental" warning for some features
+	Several features were flagged 'experimental' and waiting for user
+	feedback to 'stabilize', but i. AFAIK, no user ever reported anything
+	about them, ii. they'be been here long enough to prove they don't do
+	harm.
+
+	* doc/bison.texi: No longer experimental: default %printer and
+	%destructor (typed: <*> and untyped: <>), %define api.value.type union
+	and variant, Java parsers, XML output, LR family (lr, ielr, lalr),
+	semantic predicates (%?).
+
+2018-08-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check variants and typed mid-rule actions
+	See
+	http://lists.gnu.org/archive/html/bison-patches/2018-08/msg00013.html
+
+	* tests/c++.at (Variants and Typed Mid-rule Actions): New.
+
+2018-08-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix minor issues
+	* tests/actions.at: Fix some log messages.
+	Prefer #error to fprintf: it fixes the invalid use of yyoutput in
+	%destructor, and it is an even stronger check: that the code is not
+	even emitted.  The portability of #error is not really a problem here,
+	since the point is anyway to have the compilation fail.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	c++: variant: add more assertions
+	* data/variant.hh (variant::as): Check yytypeid_ before
+	checking *yytypeid_.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: -fcaret is enabled by default
+	* doc/bison.texi (Mid-Rule Action Translation): So no need to pass it.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/closure.c, src/conflicts.c: here.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	rule actions cannot be typed
+	Make sure that we cannot apply a type to the (main) action of a rule.
+
+	* src/reader.c (grammar_rule_check): Issue the warning.
+	* tests/input.at (Cannot type action): Check the warning.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	warn about typed mid-rule actions in Yacc mode
+	* src/reader.c (grammar_current_rule_action_append): Warn.
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Check.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check typed mid-rule actions
+	* tests/input.at (_AT_UNUSED_VALUES_DECLARATIONS): Check
+	typed mid-rule actions.
+	* tests/report.at (Reports): Check that types of typed mid-rule
+	actions are reported.
+	* tests/actions.at (Typed mid-rule actions): Check that
+	the values of typed mid-rule actions are correct.
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-08-11  Akim Demaille  <akim.demaille@gmail.com>
+
+	add support for typed mid-rule actions
+	Prompted on Piotr Marcińczyk's message:
+	http://lists.gnu.org/archive/html/bug-bison/2017-06/msg00000.html.
+	See also http://lists.gnu.org/archive/html/bug-bison/2018-06/msg00001.html.
+
+	Because their type is unknown to Bison, the values of midrule actions are
+	not treated like the others: they don't have %printer and %destructor
+	support.  In addition, in C++, (Bison) variants cannot work properly.
+
+	Typed midrule actions address these issues.  Instead of:
+
+	    exp: { $<ival>$ = 1; } { $<ival>$ = 2; }   { $$ = $<ival>1 + $<ival>2; }
+
+	write:
+
+	    exp: <ival>{ $$ = 1; } <ival>{ $$ = 2; }   { $$ = $1 + $2; }
+
+	* src/scan-code.h, src/scan-code.l (code_props): Add a `type` field to
+	record the declared type of an action.
+	(code_props_rule_action_init): Add a type argument.
+	* src/parse-gram.y: Accept an optional type tag for actions.
+	* src/reader.h, src/reader.c (grammar_current_rule_action_append): Add
+	a type argument.
+	(grammar_midrule_action): When a mid-rule is typed, pass its type to
+	the defined dummy non terminal symbol.
+
+2018-08-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: make room for more cases
+	* tests/input.at (AT_CHECK_UNUSED_VALUES): Add an empty line
+	to allow more symbols, and adjust line numbers.
+	Use a more consistent m4 quoting scheme.
+
+2018-08-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	warnings: address -Wnull-dereference in reader.c
+	Based on a patch by David Michael.
+	http://lists.gnu.org/archive/html/bison-patches/2018-07/msg00000.html
+
+	* src/reader.c (find_start): New, extracted from...
+	(check_and_convert_grammar): here.
+
+2018-08-05  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: ielr: reduce scopes
+	* src/ielr.c: Use modern C to reduce the scopes of some variables.
+
+2018-07-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: move to C99 to reduce scopes
+	* src/symtab.c, src/reader.c: Freely mix statements and variable
+	definitions.  And use for-loops with initializers.
+
+2018-07-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: split a function in two
+	grammar_current_rule_action_append was used in two different places:
+	for actual action (`{...}`), and for predicates (`%?{...}`).  Let's
+	split this in two different functions.
+
+	* src/reader.h, src/reader.c (grammar_current_rule_predicate_append): New.
+	Extracted from...
+	(grammar_current_rule_action_append): here.
+	Remove arguments that don't apply.
+	Adjust dependencies.
+
+2018-07-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix typo
+	* tests/actions.at: Remove (harmless) stray character.
+
+2018-07-26  Akim Demaille  <akim.demaille@gmail.com>
+
+	print: remove unused function
+	This function was unused since 1991's original import by
+	rms (e06f0c34427faedc7afbec9554adbffc4c87312e).
+
+	* src/print.c (print_token): Remove.
+
+2018-06-23  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: fix Texinfo syntax error
+	* doc/bison.texi (Understanding): here.
+
+2018-06-22  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: we now show the type of the symbols
+	* doc/bison.texi (Understanding Your Parser): Update the output
+	from Bison.
+	Use types in the example, and show them in the report.
+	* NEWS: Update.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: check the typed symbols in the reports
+	* tests/report.at: New.
+	* tests/local.mk, tests/testsuite.at: Use it.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	report: display the type of the symbols
+	* src/print.c (print_nonterminal_symbols, print_terminal_symbols):
+	Also should the type of the symbols.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/print.c (print_terminal_symbols, print_nonterminal_symbols): Here.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: split large function
+	* src/print.c (print_grammar): Split into...
+	(print_terminal_symbols, print_nonterminal_symbols): these.
+	Adjust dependencies.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: reduce scopes
+	* src/print.c (print_grammar): Shorten scopes.
+
+2018-06-18  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	Fixes the `make install-pdf` problem reported by Hans Åberg in
+	http://lists.gnu.org/archive/html/bug-bison/2018-06/msg00000.html
+	that had already been fixed by Joel E. Denny in
+	http://lists.gnu.org/archive/html/bug-bison/2012-04/msg00011.html
+	Final fix in
+	http://lists.gnu.org/archive/html/bug-gnulib/2018-06/msg00019.html
+
+2018-06-17  Akim Demaille  <akim.demaille@gmail.com>
+
+	Merge maint into master
+	* upstream/maint: (48 commits)
+	  THANKS: update an address
+	  tests: adjust syncline tests to GCC 7
+	  glr: fix improperly placed synclines
+	  bison: be git grep friendly
+	  Replace ftp with https
+	  maint: post-release administrivia
+	  version 3.0.5
+	  bison: style: indentation fixes
+	  regen
+	  bison: please address sanitizer
+	  C++: style: fix indentation
+	  NEWS: update
+	  C++: style: prefer `unsigned` to `unsigned int`
+	  C++: style: space before paren
+	  C++: fix -Wdeprecated warnings
+	  tests: fix -Wdeprecated warning
+	  maint: update syntax-check exclusions
+	  autoconf: update
+	  regen
+	  Update copyright years
+	  ...
+
+2018-05-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	THANKS: update an address
+
+2018-05-30  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: adjust syncline tests to GCC 7
+	GCC 7 also underlines the error.
+
+	    syncline.c:4:2: error: #error "4"
+	     #error "4"
+	      ^~~~~
+
+	* tests/synclines.at (_AT_SYNCLINES_COMPILE): Remove tildas from GCC 7.
+
+2018-05-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	glr: fix improperly placed synclines
+	Predicates with GLR are issued with synclines in the middle of C code:
+
+	          case 2:
+	      if (! (#line 6 "sempred.y" /* glr.c:816  */
+	      new_syntax)) YYERROR;
+	    #line 793 "sempred.tab.c" /* glr.c:816  */
+	      break;
+
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2018-05/msg00033.html
+
+	* data/c.m4 (b4_predicate_case): Be sure to start on column 0.
+	It would be nicer if b4_syncline could ensure this by itself
+	(that would avoid ugly code when synclines are disabled), but that's
+	way more work.
+	* tests/glr-regression.at (Predicates): Be a real end-to-end test.
+	This would have caught this error years ago...
+
+2018-05-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	bison: be git grep friendly
+	* src/output.c (user_actions_output): Make calls to b4_case and
+	b4_predicate_case explicit.
+
+2018-05-29  Akim Demaille  <akim.demaille@gmail.com>
+
+	Replace ftp with https
+	Reported by Hans Åberg.
+
+	* README, cfg.mk, doc/bison.texi: here.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: post-release administrivia
+	* NEWS: Add header line for next release.
+	* .prev-version: Record previous version.
+	* cfg.mk (old_NEWS_hash): Auto-update.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	version 3.0.5
+	* NEWS: Record release date.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bison: style: indentation fixes
+	* src/parse-gram.y: here.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	bison: please address sanitizer
+	* src/parse-gram.y (add_param): Asan does not like that the second
+	argument of strspn is not 0-terminated.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: style: fix indentation
+	* data/variant.hh (b4_symbol_variant): De-indent, as the callers are
+	indented.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	NEWS: update
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: style: prefer `unsigned` to `unsigned int`
+	* data/c++.m4: here.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: style: space before paren
+	* data/c++.m4, data/lalr1.cc: here.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: fix -Wdeprecated warnings
+	For instance on test 99:
+
+	    In file included from @@.cc:56:
+	    @@.hh:409:26: error: definition of implicit copy constructor for
+	                         'stack_symbol_type' is deprecated because it
+	                         has a user-declared copy assignment operator
+	                         [-Werror,-Wdeprecated]
+	          stack_symbol_type& operator= (const stack_symbol_type& that);
+	                         ^
+
+	Reported by Derek Clegg.
+	https://lists.gnu.org/archive/html/bison-patches/2018-05/msg00036.html
+
+	* configure.ac (warn_tests): Add -Wdeprecated.
+	* data/lalr1.cc (stack_symbol_type): Add an explicit copy ctor.
+	We cannot rely on the explicit default implementation (`= default`)
+	as we support C++ 98.
+
+2018-05-27  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: fix -Wdeprecated warning
+	With recent compilers:
+
+	    input.yy:49:5: error: definition of implicit copy assignment
+	                          operator for 'Object' is deprecated because
+	                          it has a user-declared destructor
+	                          [-Werror,-Wdeprecated]
+	        ~Object ()
+	        ^
+	    input.yy:130:35: note: in implicit copy assignment operator for
+	                           'Object' first required here
+	        { yylhs.value.as< Object > () = yystack_[0].value.as< Object > (); }
+
+	* tests/c++.at (Object): Add missing assignment operator.
+
+2018-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	maint: update syntax-check exclusions
+	sc_two_space_separator_in_usage complains about bootstrap:
+
+	    two_space_separator_in_usage
+	    /Users/akim/src/gnu/bison/bootstrap:905:   --aux-dir $build_aux\
+	    /Users/akim/src/gnu/bison/bootstrap:906:   --doc-base $doc_base\
+	    /Users/akim/src/gnu/bison/bootstrap:907:   --lib $gnulib_name\
+	    /Users/akim/src/gnu/bison/bootstrap:908:   --m4-base $m4_base/\
+	    /Users/akim/src/gnu/bison/bootstrap:909:   --source-base $source_base/\
+	    /Users/akim/src/gnu/bison/bootstrap:910:   --tests-base $tests_base\
+	    /Users/akim/src/gnu/bison/bootstrap:911:   --local-dir $local_gl_dir\
+	    maint.mk: help2man requires at least two spaces between an option and its description
+
+	* cfg.mk: Exclude bootstrap from this check.
+
+2018-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	autoconf: update
+	* submodules/autoconf: Update to latest master.
+	No difference on the M4 files we use.
+
+2018-05-19  Akim Demaille  <akim.demaille@gmail.com>
+
+	regen
+
+2018-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	Update copyright years
+	Run `make update-copyright`.
+
+2018-05-12  Nate Guerin  <nathan.guerin@riseup.net>
+
+	Add a missing word in the documentation
+	Small patch adds the word 'to' to the documentation.
+
+2018-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	Examples: improve C++ style
+	* examples/variant.yy: Prefer vector to list.
+	Remove useless inline.
+
+2018-05-12  Akim Demaille  <akim.demaille@gmail.com>
+
+	Avoid compiler warnings
+	At least GCC 7.3, with -O1 or -O2 (but not -O0 or -O3) generates
+	warnings with -Wnull-dereference when using yyformat: it fails to see
+	yyformat cannot be null.
+
+	Reported by Frank Heckenbach, https://savannah.gnu.org/patch/?9620.
+
+	* configure.ac: Use -Wnull-dereference if supported.
+	* data/glr.c, data/lalr1.cc, data/yacc.c: Define yyformat in such
+	a way that GCC cannot not see that yyformat is defined.
+	Using `default: abort();` also addresses the issue, but forces
+	the inclusion of `stdlib.h`, which we avoid.
+
+2018-05-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: fix uses of `inline`
+	Sometimes `inline` would be used in *.cc files on symbols that are not
+	exported (useless but harmless), and sometimes on exported symbols
+	such as the constructor of syntax_error (harmful: linking fails).
+
+	Reported several times, including:
+
+	- by Dennis T
+	  http://lists.gnu.org/archive/html/bug-bison/2016-03/msg00002.html
+	- by Frank Heckenbach
+	  https://savannah.gnu.org/patch/?9616
+
+	* data/c++.m4 (b4_inline): New: expands to `inline` or nothing.
+	Use it where appropriate.
+	* data/lalr1.cc: Use it where appropriate.
+
+	* tests/c++.at (Syntax error as exception): Put the scanner in another
+	compilation unit to exercise the constructor of syntax_error.
+
+2018-05-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: remove useless `inline` in CC files
+	* data/glr.cc, data/lalr1.cc: Remove `inline` from implementations
+	that are not in headers.
+
+2018-05-10  Akim Demaille  <akim.demaille@gmail.com>
+
+	C++: remove useless `inline` on templates
+	Templates are implicitly `inline`.
+
+	* data/c++.m4, data/lalr1.cc: Remove `inline` from templates.
+
+2018-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	style: don't use std::endl
+	* data/lalr1.cc, doc/bison.texi, etc/bench.pl.in, examples/variant.yy,
+	* tests/actions.at, tests/atlocal.in, tests/c++.at, tests/headers.at,
+	* tests/local.at, tests/types.at:
+	Don't use std::endl, it flushes uselessly, and is considered bad
+	style.
+
+2018-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	doc: wrap
+	* README-hacking: Refill paragraphs.
+
+2018-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	gnulib: update
+	* README-hacking: Commit before bootstrapping.
+	* bootstrap.conf: gnulib_mk is no longer defined by bootstrap.
+	* bootstrap, gnulib, lib/.gitignore, m4/.gitignore: Update/regen.
+
+2018-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	tests: we might need to find gnulib headers
+	    315. calc.at:596: testing Calculator  ...
+	    ++ cat
+	    ++ test x = x1
+	    ++ set +x
+	    bison/tests/calc.at:596: bison -fno-caret -o calc.c calc.y
+	    ++ bison -fno-caret -o calc.c calc.y
+	    ++ set +x
+	    bison/tests/calc.at:596: $BISON_C_WORKS
+	    stderr:
+	    stdout:
+	    ++ set +x
+	    bison/tests/calc.at:596: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c $LIBS
+	    ++ ccache clang-mp-6.0 -Qunused-arguments -O3 -g -Wall -Wextra -Wno-sign-compare -Wcast-align -Wdocumentation -Wformat -Wpointer-arith -Wwrite-strings -Wbad-function-cast -Wshadow -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes -Wmissing-declarations -Wmissing-prototypes -Wundef -pedantic -Wsign-compare -fno-color-diagnostics -Wno-keyword-macro -Werror -Ibison/_build/6s/lib -DNDEBUG -isystem /opt/local/include -I/opt/local/include -L/opt/local/lib -o calc calc.c bison/_build/6s/lib/libbison.a -lintl -Wl,-framework -Wl,CoreFoundation
+	    stderr:
+	    In file included from calc.y:198:
+	    bison/_build/6s/lib/unistd.h:592:11: fatal error: 'getopt-pfx-core.h' file not found
+	    # include <getopt-pfx-core.h>
+	              ^~~~~~~~~~~~~~~~~~~
+	    1 error generated.
+	    stdout:
+	    bison/tests/calc.at:596: exit code was 1, expected 0
+	    315. calc.at:596: 315. Calculator  (calc.at:596): FAILED (calc.at:596)
+
+	* tests/atlocal.in (CPPFLAGS): Find gnulib's headers.
+
+2018-05-08  Akim Demaille  <akim.demaille@gmail.com>
+
+	getargs: rename argument to avoid gnulib's renaming
+	With Clang 6.0:
+
+	      CC       src/bison-getargs.o
+	    bison/src/getargs.c:67:12: error: parameter 'option' not found in the
+	                               function declaration [-Werror,-Wdocumentation]
+	     *  \param option   option being decoded.
+	               ^~~~~~
+	    bison/src/getargs.c:67:12: note: did you mean 'rpl_option'?
+
+	* src/getargs.c: Don't use `option` as a documentation argument.
+
+2017-09-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Capitalize "Polish" when it's a proper adjective
+
+2017-09-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Adjust to recent Gnulib changes
+
+2017-09-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	autoconf: update
+
+2017-09-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+	gnulib: update
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1, yacc: use the default location as initial error location
+	Currently lalr1.cc makes an out-of-bound access when trying to read @1
+	in rules with an empty rhs (i.e., when there is no @1) that raises an
+	error (YYERROR).
+
+	glr.c already gracefully handles this by using @$ as initial location
+	for the errors.  Let's do that in yacc.c and lalr1.cc.
+
+	* data/lalr1.cc, data/yacc.c: Use @$ to initialize the error location.
+	* tests/actions.at: Check that case.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: formatting and comment changes
+	* data/glr.c: Avoid empty lines.
+	* data/lalr1.cc: Use the same comments as in glr.c and yacc.c.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: style: use "unsigned", not "unsigned int"
+	This style appears to be more traditional, at least in C++.
+	For instance in the standard, [facets.examples].
+	There are occurrences using "unsigned int" too though.
+
+	* data/lalr1.cc, data/location.cc, data/stack.hh: here.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: style: remove useless "inline" and fix space issues
+	* data/lalr1.cc, data/c++.m4: Formatting changes.
+	* data/stack.hh: Remove useless "inline".
+	Add documentation.
+	* data/location.cc: Prefer {} for empty bodies.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: beware of additional warnings from GCC 5
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Avoid warnings about
+	unused functions.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: beware that clang warns about "#define private public"
+	We use this trick to write some test about internal details.  But
+	since we use -Werror, clang++ 3.6 dies issueing a warning about it.
+
+	* configure.ac (warn_tests): Disable this warning.
+
+2015-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: update our Valgrind suppression files
+	* build-aux/linux-gnu.valgrind, build-aux/darwin11.4.0.valgrind: Rename as...
+	* build-aux/Linux.valgrind, build-aux/Darwin.valgrind: these.
+	* build-aux/Linux.valgrind: Add suppression clause.
+	* configure.ac: Update.
+	* tests/local.mk: Use it.
+
+2015-03-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: improve html and pdf rendering
+	* doc/bison.texi: Help html conversion to understand where the
+	function names end.
+	Beware of PDF width.
+
+2015-03-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fixes in the C++ part
+	Reported by Askar Safin.
+
+	http://lists.gnu.org/archive/html/bug-bison/2015-02/msg00018.html
+	http://lists.gnu.org/archive/html/bug-bison/2015-02/msg00019.html
+
+	* doc/bison.texi (Split Symbols): Fix access to token types.
+	yylval is a pointer, so use ->.
+	Fix coding style issues: space before paren.
+
+2015-02-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: be robust to platforms that support UTF-8 even with LC_ALL=C
+	Because musl supports UTF-8 with LC_ALL=C, gcc produces:
+
+	  input.y: In function ‘yyparse’:
+
+	instead of:
+
+	  input.y: In function 'yyparse':
+
+	Reported by Ferdinand Thiessen.
+	http://lists.gnu.org/archive/html/bug-bison/2015-02/msg00001.html
+
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Skip syncline tests when
+	we can't trust error messages issued about a function body.
+
+2015-02-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: java: avoid recent Java features
+	Tests 463 and 464 fail with Java 1.4 compilers.
+
+	Reported by Michael Felt.
+	<http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00091.html>
+
+	* tests/javapush.at: Use StringBuffer instead of StringBuilder.
+
+2015-01-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: c++: fix symbol lookup issue
+	Sun C 5.13 SunOS_sparc 2014/10/20 reports errors on tests 430-432.
+
+	Reported by Dennis Clarke.
+	<http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00087.html>
+
+	* tests/c++.at (Variants): Be sure to emit operator<< before using it:
+	use "%code top" rather than "%code".
+	Prefer std::vector to std::list.
+	Do not define anything in std::, to avoid undefined behavior.
+
+2015-01-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: post-release administrivia
+	  version 3.0.4
+	  gnulib: update
+	  build: re-enable compiler warnings, and fix them
+	  tests: c++: fix a C++03 conformance issue
+	  tests: fix a title
+	  c++: reserve 200 slots in the parser's stack
+	  tests: be more robust to unrecognized synclines, and try to recognize xlc
+	  tests: fix C++ conformance
+	  build: fix some warnings
+	  build: avoid infinite recursions on include_next
+
+2015-01-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.
+
+2015-01-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 3.0.4
+	* NEWS: Record release date.
+
+2015-01-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2015-01-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: re-enable compiler warnings, and fix them
+	There are warnings (-Wextra) in generated C++ code:
+
+	  ltlparse.cc: In member function 'ltlyy::parser::symbol_number_type
+	  ltlyy::parser::by_state::type_get() const':
+	  ltlparse.cc:452:33: warning: enumeral and non-enumeral type in
+	  conditional expression
+	      return state == empty_state ? empty_symbol : yystos_[state];
+
+	Reported by Alexandre Duret-Lutz.
+
+	It turns out that -Wall and -Wextra were disabled because of a stupid
+	typo.
+
+	* configure.ac: Fix the stupid typo.
+	* data/lalr1.cc, src/AnnotationList.c, src/InadequacyList.c,
+	* src/ielr.c, src/print.c, src/scan-code.l, src/symlist.c,
+	* src/symlist.h, src/symtab.c, src/tables.c, tests/actions.at,
+	* tests/calc.at, tests/cxx-type.at, tests/glr-regression.at,
+	* tests/named-refs.at, tests/torture.at:
+	Fix warnings, mostly issues about variables used only with assertions,
+	which are disabled with -DNDEBUG.
+
+2015-01-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: c++: fix a C++03 conformance issue
+	This fixes test 241 on xLC:
+
+	"input.y", line 42.11: 1540-0274 (S) The name lookup for "report" did not find a declaration.
+	"input.y", line 42.11: 1540-1292 (I) Static declarations are not considered for a function call if the function is not qualified.
+
+	where report is:
+
+	  static void
+	  report (std::ostream& yyo, int ival, float fval)
+	  {
+	    yyo << "ival: " << ival << ", fval: " <<  fval;
+	  }
+
+	and line 42 is:
+
+	  %printer { report (yyo, $$,       $<fval>$); } <ival>;
+
+	It turns out that indeed this function must not be declared static,
+	<http://stackoverflow.com/a/17662745/1353549>.  Let's put it into an
+	anonymous namespace.
+
+	Reported by Thomas Jahns.
+	http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html
+
+	* tests/actions.at (Qualified $$ in actions): Don't use "static",
+	prefer anonymous namespace.
+
+2015-01-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix a title
+	* tests/conflicts.at: De-overquote.
+
+2015-01-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: reserve 200 slots in the parser's stack
+	This is consistent with what is done with yacc.c and glr.c.  Because
+	it also avoids that the stack needs to be resized very soon, it should
+	help keeping tests about destructors more reliable.
+
+	Indeed, if the stack is created too small, very soon the C++ library
+	needs to enlarge it, which means creating a new one, copying the
+	elements from the initial one onto it, and then destroy the elements
+	of the initial stack: that would be a spurious call to a destructor.
+
+	Reported by Thomas Jahns.
+	http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html
+
+	* data/stack.hh (stack::stack): Reserve 200 slots.
+	* tests/c++.at: Remove traces of stack expansions.
+
+2015-01-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: be more robust to unrecognized synclines, and try to recognize xlc
+	Reported by Thomas Jahns.
+	http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html
+
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Rename as...
+	(_AT_SYNCLINES_COMPILE): this.
+	Try to recognize xlc locations.
+	(AT_SYNCLINES_COMPILE): New.  Skips the test if we can't read the
+	synclines.
+
+2015-01-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix C++ conformance
+	Reported by Thomas Jahns.
+	http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html
+
+	* tests/c++.at (Exception safety): Add missing include.
+	Don't use const_iterator for erase.
+
+2015-01-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix some warnings
+	Reported by John Horigan.
+	http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00034.html
+
+	* src/graphviz.c, src/symtab.h: Address compiler warnings.
+
+2015-01-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint' into origin/master
+	* origin/maint:
+	  doc: minor fixes
+	  gnulib: strtoul is considered obsolete and now useless
+	  c++: avoid warnings when destructors don't use $$
+	  maint: post-release administrivia
+	  version 3.0.3
+	  gnulib: update
+
+2015-01-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: avoid infinite recursions on include_next
+	On MacOS X 10.5 PPC with Apple's GCC 4.0.1:
+
+	  % uname -a
+	  Darwin aria.cielonegro.org 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:0
+	  1 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh
+	  % gcc --version
+	  powerpc-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493)
+	  Copyright (C) 2005 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.
+
+	building in place enters into an infinite recursion on "#include_next":
+
+	  % gmake V=1
+	  [snip]
+	  depbase=`echo lib/math.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
+	  gcc -std=gnu99    -I. -Ilib -I. -I./lib   -g -O2 -MT lib/math.o -MD -MP -MF $depbase.Tpo -c -o lib/math.o lib/math.c &&\
+	  mv -f $depbase.Tpo $depbase.Po
+	  In file included from lib/math.h:27,
+	                   from lib/math.h:27,
+	                   from lib/math.h:27,
+	                   from lib/math.h:27,
+	  [snip]
+	                   from lib/math.h:27,
+	                   from lib/math.h:27,
+	                   from lib/math.c:3:
+	  lib/math.h:27:23: error: #include nested too deeply
+	  Makefile:3414: recipe for target 'lib/math.o' failed
+	  gmake[2]: *** [lib/math.o] Error 1
+
+	Using -I./lib instead of -Ilib fixes the problem.
+
+	Reported by Pho.
+	<https://lists.gnu.org/archive/html/bison-patches/2014-01/msg00000.html>
+
+	* Makefile.am (AM_CPPFLAGS): Use -I./lib instead of -Ilib.
+
+2015-01-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: minor fixes
+	* doc/bison.texi: Fix warnings about colon in reference names.
+	* data/bison.m4, src/files.h: Fix comments.
+	* doc/Doxyfile.in: update.
+
+2015-01-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: strtoul is considered obsolete and now useless
+	* bootstrap.conf: here.
+
+2015-01-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: avoid warnings when destructors don't use $$
+	* data/c++.m4: here.
+
+2015-01-15  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.
+
+2015-01-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 3.0.3
+	* NEWS: Record release date.
+
+2015-01-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2015-01-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	symbol: use the first occurrence as an LHS as defining location
+	Currently on the following grammar:
+
+	    %type <foo> foo
+	    %%
+	    start: foo | bar | "baz"
+	    foo: foo
+	    bar: bar
+
+	bison reports:
+
+	    warning: 2 nonterminals useless in grammar [-Wother]
+	    warning: 4 rules useless in grammar [-Wother]
+	    1.13-15: warning: nonterminal useless in grammar: foo [-Wother]
+	     %type <foo> foo
+	                 ^^^
+	    3.14-16: warning: nonterminal useless in grammar: bar [-Wother]
+	     start: foo | bar | "baz"
+	                  ^^^
+	    [...]
+
+	i.e., the location of the first occurrence of a symbol is taken as its
+	definition point.  In the case of nonterminals, the first occurrence
+	as a left-hand side of a rule makes more sense:
+
+	    warning: 2 nonterminals useless in grammar [-Wother]
+	    warning: 4 rules useless in grammar [-Wother]
+	    4.1-3: warning: nonterminal useless in grammar: foo [-Wother]
+	     foo: foo
+	     ^^^
+	    5.1-3: warning: nonterminal useless in grammar: bar [-Wother]
+	     bar: bar
+	     ^^^
+	    [...]
+
+	* src/symtab.h, src/symtab.c (symbol::location_of_lhs): New.
+	(symbol_location_as_lhs_set): New.
+	* src/parse-gram.y (current_lhs): Use it.
+	* tests/reduce.at: Update locations.
+
+2015-01-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	reduce: don't complain about rules whose lhs is useless
+	In the following grammar, the 'exp' nonterminal is trivially useless.
+	So, of course, its rules are useless too.
+
+	    %%
+	    input: '0' | exp
+	    exp: exp '+' exp | exp '-' exp | '(' exp ')'
+
+	Previously all the useless rules were reported, including those whose
+	left-hand side is the 'exp' nonterminal:
+
+	    warning: 1 nonterminal useless in grammar [-Wother]
+	    warning: 4 rules useless in grammar [-Wother]
+	    2.14-16: warning: nonterminal useless in grammar: exp [-Wother]
+	     input: '0' | exp
+	                  ^^^
+	    2.14-16: warning: rule useless in grammar [-Wother]
+	     input: '0' | exp
+	                  ^^^
+	  ! 3.6-16: warning: rule useless in grammar [-Wother]
+	  !  exp: exp '+' exp | exp '-' exp | '(' exp ')'
+	  !       ^^^^^^^^^^^
+	  ! 3.20-30: warning: rule useless in grammar [-Wother]
+	  !  exp: exp '+' exp | exp '-' exp | '(' exp ')'
+	  !                     ^^^^^^^^^^^
+	  ! 3.34-44: warning: rule useless in grammar [-Wother]
+	  !  exp: exp '+' exp | exp '-' exp | '(' exp ')'
+	  !                                   ^^^^^^^^^^^
+
+	The interest of being so verbose is dubious.  I suspect most of the
+	time nonterminals are not expected to be useless, so the user wants to
+	fix the nonterminal, not remove its rules.  And even if the user
+	wanted to get rid of its rules, the position of these rules probably
+	does not help more that just having the name of the nonterminal.
+
+	This commit discard these messages, marked with '!', and keep the
+	others.  In particular, we still report:
+
+	    2.14-16: warning: rule useless in grammar [-Wother]
+	     input: '0' | exp
+	                  ^^^
+
+	All the useless rules (including the '!' ones) are still reported in
+	the reports (xml, text, etc.); only the diagnostics on stderr change.
+
+	* src/gram.c (grammar_rules_useless_report): Don't complain about
+	useless rules whose lhs is useless.
+	* src/reduce.h, src/reduce.c (reduce_nonterminal_useless_in_grammar):
+	Take a sym_content as argument.
+	Adjust callers.
+	* tests/reduce.at (Useless Rules, Underivable Rules, Reduced Automaton):
+	Adjust.
+
+2015-01-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: reduce: use unsigned to count a number of objects
+	* src/reduce.h, src/reduce.c (nuseful_productions, nuseless_productions)
+	(nuseful_nonterminals, nuseless_nonterminals): Declare as unsigned.
+	Simplify "0 <" tests into non-zero tests.
+
+2015-01-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: reduce: introduce and use a swap for bitset
+	* src/reduce.c (bitset_swap): New.
+	Use it.
+
+2015-01-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: reduce: reduce scopes and other stylistic changes
+	* src/reduce.c: Various stylistic changes:
+	Reduce scopes.
+	Prefer ++i to i++.
+	Prefer < to >.
+
+2015-01-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: split a large test case into several smaller ones
+	  package: a bit of trouble shooting indications
+	  doc: liby's main arms the internationalization
+	  bison: avoid warnings from static code analysis
+	  c++: fix the use of destructors when variants are enabled
+	  style: tests: simplify the handling of some C++ tests
+	  c++: symbols can be empty, so use it
+	  c++: variants: don't leak the lookahead in error recovery
+	  c++: provide a means to clear symbols
+	  c++: clean up the handling of empty symbols
+	  c++: comment and style changes
+	  c++: variants: comparing addresses of typeid.name() is undefined
+	  c++: locations: complete the API and fix comments
+	  build: do not clean figure sources in make clean
+
+2015-01-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: split a large test case into several smaller ones
+	* tests/conflicts.at (AT_CONSISTENT_ERRORS_CHECK): Move AT_SETUP/AT_CLEANUP
+	into it, so that we don't skip non Java tests following a test case in Java.
+
+2015-01-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: a bit of trouble shooting indications
+	* README-hacking: here.
+
+2015-01-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: liby's main arms the internationalization
+	Reported by Nicolas Bedon.
+	<https://lists.gnu.org/archive/html/bug-bison/2014-11/msg00005.html>
+
+	* doc/bison.texi (Yacc Library): Document the call the setlocale.
+
+2015-01-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	bison: avoid warnings from static code analysis
+	A static analysis tool reports that some callers of symbol_list_n_get
+	might get NULL and not handle it properly.  This is not the case, yet
+	we can suppress this pattern.
+
+	Reported by Mike Sullivan.
+	<https://lists.gnu.org/archive/html/bug-bison/2013-12/msg00027.html>
+
+	* src/symlist.c (symbol_list_n_get): Actually it is never called
+	to return 0.  Enforce this postcondition via aver.
+	(symbol_list_n_type_name_get): Simplify accordingly.  In particular,
+	discards a (translated) useless error message.
+	* src/symlist.h: Adjust documentation.
+	* src/scan-code.l: Style change.
+
+2015-01-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: fix the use of destructors when variants are enabled
+	When using variants, destructors generate invalid code.
+	<http://lists.gnu.org/archive/html/bug-bison/2014-09/msg00005.html>
+	Reported by Michael Catanzaro.
+
+	* data/c++.m4 (~basic_symbol): b4_symbol_foreach works on yysym:
+	define it.
+	* tests/c++.at (Variants): Check it.
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: tests: simplify the handling of some C++ tests
+	* tests/c++.at: here.
+	(Doxygen): Pass %define, so that files such as position.hh etc.
+	are generated, instead of putting everything into input.hh.
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: symbols can be empty, so use it
+	The previous patches ensure that symbols (symbol_type and
+	stack_symbol_type) can be empty, cleared, and their emptiness can be
+	checked.  Therefore, yyempty, which codes whether yyla is empty or
+	not, is now useless.
+
+	In C skeletons (e.g., yacc.c), the fact that the lookahead is empty is
+	coded by "yychar = YYEMPTY", which is exactly what this patch
+	restores, since yychar/yytoken corresponds to yyla.type.
+
+	* data/lalr1.cc (yyempty): Remove.
+	Rather, depend on yyla.empty ().
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: variants: don't leak the lookahead in error recovery
+	During error recovery, when discarding the lookeahead, we don't
+	destroy it, which is caught by parse.assert assertions.
+
+	Reported by Antonio Silva Correia.
+	With an analysis and suggested patch from Michel d'Hooge.
+	<http://savannah.gnu.org/support/?108481>
+
+	* tests/c++.at (Variants): Strengthen the test to try syntax errors
+	with discarded lookahead.
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: provide a means to clear symbols
+	The symbol destructor is currently the only means to clear a symbol.
+	Unfortunately during error recovery we might have to clear the
+	lookahead, which is a local variable (yyla) that has not yet reached
+	its end of scope.
+
+	Rather that duplicating the code to destroy a symbol, or rather than
+	destroying and recreating yyla, let's provide a means to clear a
+	symbol.
+
+	Reported by Antonio Silva Correia, with an analysis from Michel d'Hooge.
+	<http://savannah.gnu.org/support/?108481>
+
+	* data/c++.m4, data/lalr1.cc (basis_symbol::clear, by_state::clear)
+	(by_type::clear): New.
+	(basic_symbol::~basic_symbol): Use clear.
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: clean up the handling of empty symbols
+	* data/c++.m4, data/lalr1.cc (yyempty_): Remove, replaced by...
+	(empty_symbol, by_state::empty_state): these.
+	(basic_symbol::empty): New.
+
+2015-01-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: comment and style changes
+	* data/c++.m4, data/lalr1.cc: More documentation.
+	Tidy.
+	* tests/c++.at (string_cast): Rename as...
+	(to_string): this C++11 name.
+
+2015-01-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: variants: comparing addresses of typeid.name() is undefined
+	Instead of storing and comparing pointers to names of types, store
+	pointers to the typeids, and compares the typeids.
+	Reported by Thomas Jahns.
+	<http://lists.gnu.org/archive/html/bug-bison/2014-03/msg00001.html>
+
+	* data/variant.hh (yytname_): Replace with...
+	(yytypeid_): this.
+
+2015-01-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: locations: complete the API and fix comments
+	There are no support for += between locations, and some comments are wrong.
+	Reported by Alexandre Duret-Lutz.
+
+	* data/location.cc: Fix.
+	* doc/bison.texi: Document.
+	* tests/c++.at: Check.
+
+2015-01-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: do not clean figure sources in make clean
+	"make clean && make" fails in in-tree builds.
+
+	* doc/local.mk (CLEANDIRS): Replace with...
+	(CLEANFILES): this safer list of files to clean.
+
+2015-01-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  build: don't try to generate docs when cross-compiling
+	  package: fix a reporter's name
+	  %union: fix the support for named %union
+	  package: bump to 2015
+	  flex: don't trust YY_USER_INIT
+	  yacc.c: fix broken union when api.value.type=union and %defines are used
+	  doc: fix missing xref
+	  gnulib: update
+	  location: remove some ugly debugging code traces
+	  build: use abort to pacify compiler errors
+	  package: bump to 2014
+	  doc: specify documentation encoding
+
+2015-01-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: don't try to generate docs when cross-compiling
+	When cross-compiling don't run the generated bison to update the docs.
+	Reported by Aaro Koskinen.
+	<http://lists.gnu.org/archive/html/bison-patches/2014-03/msg00000.html>
+
+	* configure.ac (CROSS_COMPILING): New.
+	* doc/local.mk: Use it.
+
+2015-01-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: fix a reporter's name
+	* THANKS, build-aux/git-log-fix: s/Bernd Edligner/Bernd Edlinger/.
+
+2015-01-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	%union: fix the support for named %union
+	Bison supports a union tag, for obscure reasons.  But it does a poor
+	job at it, especially since Bison 3.0.
+	Reported by Stephen Cameron and Tobias Frost.
+
+	It did not ensure that the name was not given several times.  An easy
+	way to do this is to make the %union tag be handled as a %define
+	variable, as they cannot be defined several times.
+
+	Since Bison 3.0, the synclines were wrongly placed, resulting in
+	invalid code.  Addressing this issue, because of the way the union tag
+	was stored (as a code muscle), would have been tedious.  Unless we
+	rather define the %union tag as a %percent variable, whose synclines
+	are easier to manipulate.
+
+	So replace the b4_union_name muscle by the api.value.union.name
+	%define variable, document, and check.
+
+	* data/bison.m4: Make sure that api.value.union.name has a keyword value.
+	* data/c++.m4: Make sure that api.value.union.name is not defined.
+	* data/c.m4 (b4_union_name): No longer use it, use api.value.union.name.
+	* doc/bison.texi (%define Summary): Document it.
+	* src/parse-gram.y (union_name): No longer define b4_uion_name, but
+	api.value.union.name.
+	* tests/input.at (Redefined %union name): New.
+	* tests/synclines.at (%union name syncline): New.
+	* tests/types.at: Check named %unions.
+
+2015-01-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: bump to 2015
+	Which also requires:
+
+	* gnulib: Update.
+
+2014-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	flex: don't trust YY_USER_INIT
+	Reported by Bernd Edlinger and others.
+
+	* src/scan-gram.l: here.
+
+2014-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc.c: fix broken union when api.value.type=union and %defines are used
+	Reported by Rich Wilson.
+
+	* data/c.m4 (b4_symbol_type_register): Append to b4_union_members,
+	not b4_user_union_members.
+	The latter invokes the former, but it is the former which is reinitialized
+	to empty by b4_value_type_setup_union.
+	* tests/types.at: Check it.
+
+	This reveals another bug, this time in the case of glr.c parsers.
+
+	* data/glr.c: Generate the header file before the implementation file,
+	to be sure that the setup is run before what depends on it.
+
+2014-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix missing xref
+	Reported by xolodho.
+
+	* doc/bison.texi (Printer Decl): here.
+
+2014-12-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2014-02-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	location: remove some ugly debugging code traces
+	* data/location.cc: here.
+
+2014-02-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: use abort to pacify compiler errors
+	clang, with -DNDEBUG and -Werror fails on some functions that might
+	lack a return.  This is because aver is just another assert, discarded
+	with -DNDEBUG.  So use abort.
+
+	* src/muscle-tab.c, src/scan-skel.l: here.
+
+2014-02-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: bump to 2014
+	* AUTHORS, ChangeLog-2012, Makefile.am, NEWS, PACKAGING, README,
+	* README-alpha, README-hacking, THANKS, TODO, bootstrap.conf,
+	* build-aux/darwin11.4.0.valgrind, build-aux/local.mk,
+	* build-aux/update-b4-copyright,
+	* build-aux/update-package-copyright-year, cfg.mk, configure.ac,
+	* data/README, data/bison.m4, data/c++-skel.m4, data/c++.m4,
+	* data/c-like.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/local.mk, data/location.cc, data/stack.hh, data/variant.hh,
+	* 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/local.mk, djgpp/subpipe.c, djgpp/subpipe.h,
+	* djgpp/testsuite.sed, doc/bison.texi, doc/local.mk, doc/refcard.tex,
+	* etc/README, etc/bench.pl.in, etc/local.mk,
+	* examples/calc++/calc++.test, examples/calc++/local.mk,
+	* examples/extexi, examples/local.mk, examples/mfcalc/local.mk,
+	* examples/mfcalc/mfcalc.test, examples/rpcalc/local.mk,
+	* examples/rpcalc/rpcalc.test, examples/test, examples/variant.yy,
+	* 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/local.mk, 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/flex.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/graphviz.h, src/ielr.c, src/ielr.h, src/lalr.c, src/lalr.h,
+	* src/local.mk, 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.c, 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/bison.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/javapush.at, tests/local.at,
+	* tests/local.mk, 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, tests/types.at:
+	here.
+
+2014-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+	doc: specify documentation encoding
+	* doc/bison.texi: Add '@documentencoding UTF-8'; needed since the
+	manual contains UTF-8 characters.  This will cause the .info files
+	to contain UTF-8 quotes and the like, which should be OK nowadays.
+	Add @documentlanguage while we're at it.
+
+2013-12-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	symbols: properly fuse the properties of two symbol aliases
+	This completes and fixes a7280757105b2909f6a58fdd1c582de8e278319a.
+	Reported by Valentin Tolmer.
+
+	Before it Bison used to put the properties of the symbols
+	(associativity, printer, etc.) in the 'symbol' structure.  An
+	identifier-named token (FOO) and its string-named alias ("foo")
+	duplicated these properties, and symbol_check_alias_consistency()
+	checked that both had compatible properties and fused them, at the end
+	of the parsing of the grammar.
+
+	The commit a7280757105b2909f6a58fdd1c582de8e278319a introduces a
+	sym_content structure that keeps all these properties, and ensures
+	that both aliases point to the same sym_content (instead of
+	duplicating).  However, it removed symbol_check_alias_consistency,
+	which resulted in the non-fusion of *existing* properties:
+
+	  %token FOO "foo"
+	  %left FOO %left "foo"
+
+	was properly diagnosed as a redeclaration, but
+
+	  %left FOO %left "foo"
+	  %token FOO "foo"
+
+	was not, as the properties of FOO and "foo" were not checked before
+	fusion.  It certainly also means that
+
+	  %left "foo"
+	  %token FOO "foo"
+
+	did not transfer properly the associativity to FOO.
+
+	The fix is simple: reintroduce symbol_check_alias_consistency (under a
+	better name, symbol_merge_properties) and call it where appropriate.
+
+	Also, that commit made USER_NUMBER_HAS_STRING_ALIAS useless, but left
+	it.
+
+	* src/symtab.h (USER_NUMBER_HAS_STRING_ALIAS): Remove, unused.
+	Adjust dependencies.
+	* src/symtab.c (symbol_merge_properties): New, based on the former
+	symbol_check_alias_consistency.
+	* tests/input.at: Re-enable tests that we now pass.
+
+2013-12-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  package: install the examples
+	  package: install README and the like in docdir
+	  diagnostics: fix the order of multiple declarations reports
+	  symbol: provide an easy means to compare them in source order
+
+2013-12-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: install the examples
+	Currently, we do not install the various examples extracted from the
+	documentation.  Let's do it, as they are useful starting points.
+
+	* configure.ac: When --enable-gcc-warnings is set, enable ENABLE_GCC_WARNINGS.
+	* examples/extexi: No longer issue synclines by default.
+	* examples/local.mk: Except if ENABLE_GCC_WARNINGS.
+	* examples/calc++/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk: Install the example files.
+
+2013-12-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	package: install README and the like in docdir
+	* Makefile.am: here.
+
+2013-12-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: fix the order of multiple declarations reports
+	On
+
+	  %token FOO "foo"
+	  %printer {} "foo"
+	  %printer {} FOO
+
+	we report
+
+	  /tmp/foo.yy:2.10-11: error: %printer redeclaration for FOO
+	   %printer {} "foo"
+	            ^^
+	  /tmp/foo.yy:3.10-11:     previous declaration
+	   %printer {} FOO
+	            ^^
+
+	* src/symtab.c (locations_sort): New.
+	Use it.
+	* tests/input.at (Invalid Aliases): Stress the order of diagnostics.
+
+2013-12-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	symbol: provide an easy means to compare them in source order
+	* src/symtab.c (symbols_sort): New.
+	(user_token_number_redeclaration): Taken from here.
+
+2013-12-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint: (43 commits)
+	  maint: post-release administrivia
+	  version 3.0.2
+	  gnulib: update
+	  output: do not generate source files when late errors are caught
+	  output: record what generated files are source or report files
+	  output: do not generate source files when early errors are caught
+	  xml: also use "%empty" with html output
+	  style: formatting changes
+	  xml: also display %empty for empty right-hand sides
+	  reports: display %empty in the generated pointed-rules
+	  news: YYERROR vs variants
+	  style: scope reduction in lalr.cc
+	  lalr1.cc: formatting changes
+	  lalr1.cc: fix the support of YYERROR with variants
+	  tests: check $$'s destruction with variant, YYERROR, and no error recovery
+	  tests: simplify useless obfuscation
+	  skeletons: use better names when computing a "goto"
+	  maint: post-release administrivia
+	  version 3.0.1
+	  aver: it is no longer "protected against NDEBUG"
+	  ...
+
+2013-12-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.
+
+2013-12-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 3.0.2
+	* NEWS: Record release date.
+
+2013-12-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+	* gnulib: here.
+
+2013-12-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	output: do not generate source files when late errors are caught
+	Reported by Alexandre Duret-Lutz as "second problem" in:
+	http://lists.gnu.org/archive/html/bug-bison/2013-09/msg00015.html
+
+	* bootstrap.conf: We need the "unlink" module.
+	* src/files.h, src/files.c (unlink_generated_sources): New.
+	* src/output.c: Use it.
+	* tests/output.at: Check the case of late errors.
+
+2013-12-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	output: record what generated files are source or report files
+	* src/files.h, src/files.c (output_file_name_check): Take an additional
+	argument to record whether a file is a source or report file.
+	* src/files.c (generated_file): New.
+	(file_names, file_names_count): Replace with...
+	(generated_files, generated_files_size): these.
+	* src/scan-skel.l: Adjust.
+
+2013-12-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	output: do not generate source files when early errors are caught
+	Reported by Alexandre Duret-Lutz as "second problem" in:
+	http://lists.gnu.org/archive/html/bug-bison/2013-09/msg00015.html
+
+	One problem is that some errors are caught early, before the
+	generation of output files, while others can only be detected
+	afterwards (since, for instance, skeletons can raise errors
+	themselves).
+
+	This will be addressed in two steps: early errors do not generate
+	source files at all, while later errors will remove the files that
+	have already been generated.
+
+	* src/scan-skel.l (yyout): Open to /dev/null when there are errors.
+	* tests/output.at (AT_CHECK_FILES): Factored out of...
+	(AT_CHECK_OUTPUT): this.
+	Fuse the "SHELLIO" argument in the "FLAGS" one.
+	Use $5 to denote the expected exit status.
+	Add a test case for early errors.
+
+2013-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	xml: also use "%empty" with html output
+	* data/xslt/xml2xhtml.xsl: No longer issue an Epsilon, display as in
+	dot and text formats.
+
+2013-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: formatting changes
+	* src/print-xml.c: here.
+
+2013-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	xml: also display %empty for empty right-hand sides
+	* data/xslt/xml2dot.xsl, data/xslt/xml2text.xsl: Display %empty where needed.
+
+2013-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	reports: display %empty in the generated pointed-rules
+	* src/print.c (print_core): Use %empty for empty rules.
+	* src/print_graph.c (print_core): Ditto.
+	* tests/conflicts.at, tests/output.at, tests/reduce.at: Adjust
+	expectations.
+
+2013-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: YYERROR vs variants
+
+2013-11-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: scope reduction in lalr.cc
+	* src/lalr.c: Shorten variable scopes.
+	(lookahead_tokens_print): Use the same variable name in two loops
+	iterating over the same structure.
+
+2013-11-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: formatting changes
+	* data/lalr1.cc: Fix indentation.
+
+2013-11-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: fix the support of YYERROR with variants
+	When variant are enabled, the yylhs variable (the left-hand side of
+	the rule being reduced, i.e. $$ and @$) is explicitly destroyed when
+	YYERROR is called.  This is because before running the user code, $$
+	is initialized, so that the user can properly use it.
+
+	However, when quitting yyparse, yylhs is also reclaimed by the C++
+	compiler: the variable goes out of scope.
+
+	Instead of trying to be too smart, let the compiler do its job: reduce
+	the scope of yylhs to exactly the reduction.  This way, whatever the
+	type of scope exit (regular, exception, return, goto...) this variable
+	will be properly reclaimed.
+
+	Reported by Paolo Simone Gasparello.
+	<http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00003.html>
+
+	* data/lalr1.cc (yyparse): Reduce the scope of yylhs.
+	* tests/c++.at: We now pass this test.
+
+2013-11-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: check $$'s destruction with variant, YYERROR, and no error recovery
+	When variant are enabled, the yylhs variable (the left-hand side of
+	the rule being reduced, i.e. $$ and @$) is explicitly destroyed when
+	YYERROR is called.  This is because before running the user code, $$
+	is initialized, so that the user can properly use it.
+
+	However, when quitting yyparse, yylhs is also reclaimed by the C++
+	compiler: the variable goes out of scope.
+
+	This was not detected by the test suite because (i) the Object tracker
+	was too weak, and (ii) the problem does not show when there is error
+	recovery.
+
+	Reported by Paolo Simone Gasparello.
+	<http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00003.html>
+
+	* tests/c++.at (Exception safety): Improve the objects logger to make
+	sure that we never destroy twice an object.
+	Also track copy-constructors.
+	Use a set instead of a list.
+	Display the logs before running the function body, this is more
+	useful in case of failure.
+	Generalize to track with and without error recovery.
+
+2013-11-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: simplify useless obfuscation
+	* tests/c++.at: $$ is not special for M4, there is no need to "escape"
+	it.
+
+2013-11-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: use better names when computing a "goto"
+	* data/glr.c (yyLRgotoState): Name the symbol argument yysym, instead
+	of yylhs.
+	* data/lalr1.cc (yy_lr_goto_state_): Likewise.
+	* data/lalr1.java (yy_lr_goto_state_): New, modeled after the previous
+	two routines.
+	Use it.
+
+2013-11-12  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.
+
+2013-11-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 3.0.1
+	* NEWS: Record release date.
+
+2013-11-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	aver: it is no longer "protected against NDEBUG"
+	Apply the same rules for aver as for assert: no side effects,
+	especially not important ones.
+
+	* src/AnnotationList.c, src/muscle-tab.c: Adjust aver uses to resist
+	to -DNDEBUG.
+
+2013-11-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	parsers: rename YY_NULL as YY_NULLPTR to avoid conflicts with Flex
+	Flex also defines YY_NULL (to 0).  Avoid gratuitous conflicts.
+
+	* data/c.m4 (b4_null_define): Rename YY_NULL as YY_NULLPTR.
+
+	* data/glr.c, data/lalr1.cc, data/location.cc, data/variant.hh,
+	* data/yacc.c, src/parse-gram.c, tests/actions.at, tests/c++.at,
+	* tests/cxx-type.at, tests/glr-regression.at, tests/headers.at,
+	* tests/push.at, tests/regression.at:
+	Adjust.
+
+2013-11-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: use Automake 1.14's non-recursive Makefile features
+	* configure.ac: Require Automake 1.14.
+	* examples/calc++/local.mk, examples/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk, tests/local.mk: Use %D% and %C%.
+
+2013-11-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: restore maintainer-push-check
+	* tests/local.mk: here.
+
+2013-11-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: use __attribute__((__pure__)) to avoid warnings
+	Building C++ parsers with -Wsuggest-attribute=const and
+	-Wsuggest-attribute=noreturn triggers warning in generated code.
+
+	* data/lalr1.cc: Call b4_attribute_define.
+	(debug_stream, debug_level): Flag as pure.
+	* tests/headers.at (Several parsers): There are now more YY macros
+	that "leak".
+
+2013-11-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: update the handling of compiler attributes
+	* data/c.m4 (b4_attribute_define): Instead of defining __attribute__,
+	define YY_ATTRIBUTE conditionally.
+	(YY_ATTRIBUTE_PURE, YY_ATTRIBUTE_UNUSED, _Noreturn): New.
+	Use them.
+	* data/glr.c: Use them.
+
+2013-11-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2013-10-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: use /* ... */ comments
+	* src/complain.c: Here.
+
+2013-10-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: skip C++ tests that are too demanding for some compilers
+	Some tests now fail when compiled with G++ 4.3 or 4.4 on MacPorts.
+
+	* tests/local.at (AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR): New.
+	* tests/c++.at (Exception safety): Use it.
+
+2013-10-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	install: do not install yacc.1 when --disable-yacc
+	* configure.ac (ENABLE_YACC): New conditional.
+	(YACC_SCRIPT, YACC_LIBRARY): Remove.
+	* lib/local.mk, src/local.mk: Use the former instead of the latter.
+	* doc/local.mk: Use ENABLE_YACC to avoid installing yacc.1.
+
+2013-10-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: avoid tabs
+	* src/scan-code.l: here.
+
+2013-10-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: fix generated doxygen comments
+	* configure.ac: Enable -Wdocumentation if supported.
+	* data/lalr1.cc: Fix comments.
+
+2013-10-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	fix: uniqstr are already pointers
+	* src/uniqstr.c (uniqstr_assert): Remove incorrect double indirection,
+	and now useless cast.
+
+2013-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	bison: pacify Sun C 5.12
+	* src/scan-code.l (show_sub_message):
+	Redo initializations to work around a bogus Sun C 5.12 warning.
+	(parse_ref): Remove unreachable code that Sun C 5.12 complains about.
+	* src/uniqstr.h (uniqstr_vsprintf): Use
+	_GL_ATTRIBUTE_FORMAT_PRINTF (...)  instead of __attribute__
+	((__format__ (__printf__, ...))).  Otherwise, Sun C 5.12
+	complains about an unknown attribute.
+
+2013-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	maint: git now ignores rpcalc
+	* examples/rpcalc/.gitignore: Ignore rpcalc.
+
+2013-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	build: examples/calc++/calc++ requires flex
+	* configure.ac (FLEX_CXX_WORKS): New AM_CONDITIONAL.
+	* examples/calc++/local.mk (examples/calc++/calc++):
+	Build if FLEX_CXX_WORKS, not BISON_CXX_WORKS.
+
+2013-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	maint: mention help2man, texinfo, apt-get
+	* README-hacking: Add help2man, texinfo.
+	Describe how to add packages if you're using Debian.
+
+2013-10-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+	maint: git now ignores .log and .trs files
+	* .gitignore: Add *.log, *.trs.
+
+2013-10-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix incorrect object construction
+	Reported by Ken Moffat.
+	http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00009.html
+
+	* tests/c++.at (Exception safety): Here.
+
+2013-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: allow spaces between "%?" and "{" in predicates
+	Reported by Rici Lake.
+	http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00004.html
+	http://stackoverflow.com/questions/19330171/
+
+	* src/scan-gram.l: Do not try to be too smart when diagnosing invalid
+	directives.
+	* tests/glr-regression.at (Predicates): New test.
+
+2013-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: "-Werror -Wno-error=foo" must not emit errors
+	Currently "-Werror -Wno-error=foo" still turns "foo" warnings into errors.
+	Reported by Alexandre Duret-Lutz.
+	See http://lists.gnu.org/archive/html/bug-bison/2013-09/msg00015.html.
+
+	* src/complain.c (errority, errority_flag): New.
+	(complain_init): Initialize the latter.
+	(warning_argmatch): Extract the loop iterating on the flag's bits.
+	Set and unset errority_flag here.
+	(warnings_argmatch): -Wno-error is not the same as -Wno-error=everything:
+	we must remember if category foo was explicitly turned in an error/warning
+	via -W(no-)error=foo.
+	(warning_severity): Use errority_flag.
+
+	* tests/input.at (Symbols): Just check --yacc, not -Wyacc, that's the
+	job of tests on -W.
+	(-Werror is not affected by -Wnone and -Wall): Rename as...
+	(-Werror combinations): this.
+	Tests more combinations of -W, -W(no-)error, and -W(no-)error=foo.
+	* tests/local.at (AT_BISON_CHECK_WARNINGS): Don't expect -Werror
+	to turn runs that issue warnings into runs with errors, as the
+	warnings might be enforced as warnings by -Wno-error=foo, in which
+	case -Werror does not change anything.
+
+	* doc/bison.texi (Bison Options): Try to be clearer about how
+	-W(no-)error and -W(no-)error=foo interact.
+
+2013-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	comment changes
+	* src/complain.h, src/complain.c: More documentation, more comments.
+
+2013-10-04  Andreas Schwab  <schwab@linux-m68k.org>
+
+	location: fix EOF check
+	* location.c (location_caret): Use int, not char, for values from
+	getc.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: variant: remove empty line
+	* data/variant.hh (b4_symbol_constructor_define_): Remove
+	stray eol.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  glr: more assertions
+	  glr: shorten scopes
+	  glr: formatting changes
+	  glr: better use of tracing macros
+	  examples: improve the output of the "variant" example
+	  variant: remove useless assertion
+	  tests: remove stray debugging traces
+	  tests: do not use grep -q
+	  build: don't require flex for ordinary builds
+	  maint: update .gitignore
+	  build: port to pre-5.8.7 perl
+	  tests: minor change to make it easier to test other skeletons
+	  uniqstr: fix assertion
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: simplify the invocation of YYLLOC_DEFAULT
+	The commit which introduces yyresolveLocations (commit
+	8710fc41aaebc5d167a2783a4b8b60849a803869) saves and restores the
+	look-ahead (type, value and location) for no clear reason.  This
+	appears to be useless.
+
+	* data/glr.c (yyresolveLocations): Don't save/restore the current
+	look-ahead to call YYLLOC_DEFAULT.
+	Minor style changes.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: more assertions
+	* data/glr.c (yyaddDeferredAction, yyglrShiftDefer, yypdumpstack):
+	More assertions.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: shorten scopes
+	* data/glr.c (yyglrReduce): Define yyflag with its value.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: formatting changes
+	* data/glr.c: here.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: better use of tracing macros
+	* data/glr.c (yydestroyGLRState): Use YY_SYMBOL_PRINT instead of
+	yy_symbol_print.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	examples: improve the output of the "variant" example
+	* examples/variant.yy: Improve the printing of lists.
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	variant: remove useless assertion
+	* data/variant.hh (move): Remove precondition assertion which is
+	ensured by the first call of the body (this precondition is also one
+	of "build").
+
+2013-09-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: remove stray debugging traces
+	* tests/atlocal.in: Remove traces.
+	Be ready to remove conftest.dSYM generated on OS X.
+
+2013-09-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: do not use grep -q
+	Reported by Daniel Galloway.
+	http://lists.gnu.org/archive/html/bug-bison/2013-08/msg00020.html
+
+	* tests/java.at: Ignore grep's output instead.
+
+2013-08-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	build: don't require flex for ordinary builds
+	* configure.ac (LEX): Don't fail if this is lex, as flex is not
+	required for ordinary builds.  Instead, issue a warning and
+	substitute a no-op LEX.  Reported by Michael Felt in
+	<http://lists.gnu.org/archive/html/bug-bison/2013-08/msg00009.html>.
+
+2013-08-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+	maint: update .gitignore
+	* .gitignore: Add *.eps, *.o, *.pdf, *.png, *.stamp, *~,
+	.deps, .dirstamp.  Needed to suppress unwanted chatter from
+	'git status' after a bootstrap build.
+
+2013-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	build: port to pre-5.8.7 perl
+	* examples/local.mk (extract): Omit -f from perl options.
+	This doesn't work with perl versions before 5.8.7
+	that are configured without USE_SITECUSTOMIZE.
+	Reported by Michael Felt in
+	<http://lists.gnu.org/archive/html/bug-bison/2013-08/msg00006.html>.
+
+2013-08-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: minor change to make it easier to test other skeletons
+	* tests/c++.at (Variants): Pass the skeleton as argument.
+
+2013-08-01  Valentin Tolmer  <valentin.tolmer@gmail.com>
+
+	uniqstr: fix assertion
+	* src/uniqstr.c (uniqstr_assert): Really make sure str is a uniqstr,
+	not just whether some uniqstr with the same content was registered.
+
+2013-08-01  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	symbols: improve symbol aliasing
+	Rather than having duplicate info in the symbol and the alias that has
+	to be resolved later on, both the symbol and the alias have a common
+	pointer to a separate structure containing this info.
+
+	* src/symtab.h (sym_content): New structure.
+	* src/symtab.c (sym_content_new, sym_content_free, symbol_free): New
+
+	* src/AnnotationList.c, src/conflicts.c, src/gram.c, src/gram.h,
+	* src/graphviz.c, src/ielr.c, src/output.c, src/parse-gram.y, src/print.c
+	* src/print-xml.c, src/print_graph.c, src/reader.c, src/reduce.c,
+	* src/state.h, src/symlist.c, src/symtab.c, src/symtab.h, src/tables.c:
+	Adjust.
+
+	* tests/input.at: Fix expectations (order changes).
+
+2013-08-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: ship the ASCII art figures
+	We don't ship the *.txt files that are used to build the info
+	file.
+	Reported by Colin Daley.
+
+	* doc/figs/example.txt: New.
+	* doc/local.mk (bison.info): Depend on the txt files.
+	And ship them.
+
+2013-08-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: prefer the ".gv" extension to ".dot"
+	See http://marc.info/?l=graphviz-devel&m=129418103126092 for the
+	motivation (basically, some word processor now uses *.dot).
+
+	* doc/figs/example-reduce.dot: Rename as...
+	* doc/figs/example-reduce.gv: this.
+	* doc/figs/example-shift.dot: Rename as...
+	* doc/figs/example-shift.gv: this.
+	* doc/figs/example.dot: Rename as...
+	* doc/figs/example.gv: this.
+	* doc/local.mk: Adjust.
+
+2013-07-25  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.
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 3.0
+	* NEWS: Record release date.
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: prepare 3.0
+	* NEWS (3.0): Reorder.
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix invalid assignment when using variants in C++11
+	* tests/c++.at (Exception safety): In variant mode $$ is an instance
+	of Object.  Assigning YY_NULL in C++98 is incorrect, but behaves ok,
+	as it assigns YY_NULL=0 using Object::operator= (char v).  It is wrong
+	in C++11 as there is operator for "$$ = nullptr".
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc: beware of "uninitialized uses" warnings
+	Again some issues with the fact that yylval is reported by GCC as
+	possibly not initialized in some cases.  Here, the case at hand is the
+	%destructor.
+
+	I am still not convinced that it is worth going all the trouble of
+	using pragmas to disable temporarily some warnings, instead of just
+	initializing the looking symbol once for all, but that's what Paul
+	voted for, see
+	<http://lists.gnu.org/archive/html/bison-patches/2012-10/msg00050.html>.
+
+	* data/c.m4 (b4_attribute_define): Define
+	YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN, YY_IGNORE_MAYBE_UNINITIALIZED_END,
+	YY_INITIAL_VALUE here, as we will need them in the generation of the
+	destructor function, which is defined in yacc.c before yyparse, which
+	was in charge of defining these macros.
+	* data/yacc.c (b4_declare_scanner_communication_variables): Simplify:
+	trying to factor the definitions of the case pure and impure is
+	too complex.
+	Actually, it is not even clear that this macro should really exist,
+	as even the calls are complex.
+	Be careful not to issue a lone ";", as this is a statement, and C90
+	forbids declarations after statements ; so write
+	"YY_INITIAL_VALUE(Decl;)", not "YY_INITIAL_VALUE(Decl);".
+
+2013-07-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2013-07-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: skip C++ tests if we can't compile a simple program
+	There are possible conflicts between gnulib replacement functions (in
+	<stdio.h>) and their C++ wrappers (in <stream>).  Trying to address
+	these in configure seems too hard, and I don't know how to fix the issue
+	in gnulib.  Cowardly avoid the problem by skipping C++ tests when this
+	happens.
+	Reported by Stefano Lattarini.
+	http://lists.gnu.org/archive/html/bug-bison/2013-06/msg00001.html
+
+	* tests/atlocal.in (BISON_CXX_WORKS): Also set it to "skip" if we can't
+	compile a simple program using <stream>.
+	* tests/local.at: Comment changes.
+
+2013-07-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix 'find' portability issues
+	Reported by Stefano Lattarini.
+	http://lists.gnu.org/archive/html/bug-bison/2013-06/msg00000.html
+
+	* tests/output.at (AT_CHECK_OUTPUT): Use Perl instead.
+
+2013-06-24  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.
+
+2013-06-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.7.91
+	* NEWS: Record release date.
+
+2013-06-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: prepare for 2.7.91
+	* NEWS (2.7.91): Java push parsers.
+
+2013-06-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	java: rename YYMORE as YYPUSH_MORE for consistency with C
+	http://lists.gnu.org/archive/html/bison-patches/2013-06/msg00008.html
+
+	* data/lalr1.java, doc/bison.texi, tests/javapush.at:
+	s/YYMORE/YYPUSH_MORE.
+
+2013-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix Java push failure when running with BISON_USE_PUSH_FOR_PULL
+	* tests/javapush.at (Trivial Push Parser with api.push-pull verification):
+	When push for pull is enabled, there is one such function generated.
+
+2013-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: minor changes in the Java tests
+	* tests/java.at (AT_CHECK_JAVA_GREP): Ignore the exit status.
+	* tests/javapush.at (AT_CHECK_JAVA_GREP): Be more alike the previous
+	one.
+	Formating changes.
+	Remove stray debugging "jj" file.
+
+2013-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	java: push: do not reset the error counter
+	* data/lalr1.java (parse): here, when in push-pull is in "both" mode.
+	This breaks the test suite, for instance
+	make check TESTSUITEFLAGS='-d 388 BISON_USE_PUSH_FOR_PULL=1'.
+	More generally make maintainer-push-check.
+
+2013-06-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: add Valgrind suppression file for GNU/Linux
+	* build-aux/linux-gnu.valgrind: New.
+	* build-aux/local.mk: Ship it.
+	* configure.ac: Use it.
+
+2013-06-13  Dennis Heimbigner  <dmh@unidata.ucar.edu>
+
+	java: add push-parser support
+	* data/lalr1.java: Capture the declarations as m4 macros to avoid
+	duplication.  When push parsing, the declarations occur at the class
+	instance level rather than within the parse() function.
+
+	Change the way that the parser state is initialized.  For
+	push-parsing, the parse state declarations are moved to
+	"push_parse_initialize()", which is called on the first invocation of
+	"push_parse()". The %initial-action code is also inserted after the
+	invocation of "push_parse_initialize()".
+
+	The body of the parse loop is modified to return values at appropriate
+	points when doing push parsing.  In order to make push parsing work,
+	it is necessary to divide YYNEWSTATE into two states: YYNEWSTATE and
+	YYGETTOKEN. On the first call to push_parse(), the state is
+	YYNEWSTATE. On all later entries, the state is set to YYGETTOKEN. The
+	YYNEWSTATE switch arm falls through into YYGETTOKEN. YYGETTOKEN
+	indicates that a new token is potentially needed.  Normally, with a
+	pull parser, this new token would be obtained by calling "yylex()". In
+	the push parser, the value YYMORE is returned to the caller. On the
+	next call to push_parse(), the parser will return to the YYGETTOKEN
+	state and continue operation.
+
+	* tests/javapush.at: New test file for java push parsing.
+	* tests/testsuite.at: Use it.
+	* tests/local.mk: Adjust.
+	* doc/bison.texi (Java Push Parser Interface): New.
+
+2013-06-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: ship all the files, even if the C++ compiler is broken
+	* examples/calc++/local.mk: Be sure to ship calc++.test even if
+	the current C++ compiler is not sufficient to run the tests.
+
+2013-06-05  Dennis Heimbigner  <dmh@unidata.ucar.edu>
+
+	style: comment changes in Java skeleton
+	* data/lalr1.java: Here.
+
+2013-06-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix a G++ warning
+	* tests/c++.at: Use YY_NULL instead of 0 for the null pointer.
+	And formatting changes.
+
+2013-06-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix a warning from clang
+	* src/muscle-tab.c: Declare local functions static.
+
+2013-05-30  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.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.7.90
+	* NEWS: Record release date.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: syntax-check fixes
+	* data/yacc.c, src/Sbitset.c, src/Sbitset.h, src/muscle-tab.h,
+	* src/output.c, src/parse-gram.y, src/reader.c, src/symtab.c,
+	* src/uniqstr.c, src/uniqstr.h: Fix space before parens.
+	* cfg.mk (_space_before_paren_exempt): Add needed exceptions.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	xml: use %empty in the text output
+	* data/xslt/xml2text.xsl: here.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: locally disable new GCC warnings that fail on Flex generated code
+	* configure.ac: here.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	fix a memory leak
+	* src/print-xml.c (num_escape_bufs): New.
+	(print_xml): Be sure to release all the escape_bufs.
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-05-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: be sure to include config.h first in the generated parser
+	Using %code for config.h is wrong, as some headers will already have
+	been included by Bison.  In some cases, e.g., glibc's string.h, this
+	results in some declaration not being made for lack of definition of
+	_GNU_SOURCE, which is performed by config.h.
+
+	* src/parse-gram.y: here.
+
+2013-05-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: post-release administrivia
+	  version 2.7.1
+	  regen
+
+2013-05-29  Petr Machata  <pmachata@redhat.com>
+
+	drop unused options --raw, -n, -e, --include and -I
+	* --raw appears to be ignored.  It was marked as obsolete in the
+	  commit ec3bc39, and documented as no longer supported as of 1.29
+	  (2001-09-07).  Support for %raw appears to have been dropped in
+	  e9955c83 on 2002-06-11, but --raw was kept around.  Maybe it's time
+	  to drop it as well?
+
+	* Commit e9955c83 dropped support for %no-parser as well, and
+	  converted it to option.  --no-parser was later dropped in 728c4be2
+	  on 2007-08-12, but -n was kept around, probably as an omission.  All
+	  three are documented as removed since 2.3b (2008-05-27).
+
+	* -e existed for a single day in 2001.  It was introduced in eeeb962b
+	  on 2001-11-27.  The handling was removed in c7925b99 on 2001-11-28,
+	  but "e" was kept in the list of short options.  Probably an
+	  omission.
+
+	* --include appears to be dead code.  The option sets a variable, but
+	  that variable is not used anywhere.  It was added in f6bd5427 on
+	  2001-11-26 as a %-directive, with comments that it's not yet
+	  implemented.  It was converted to a command-line option later, but
+	  doesn't seem to ever have been actually implemented.
+
+2013-05-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2013-04-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: always point to the first directive
+	Some directives cannot be used several times (e.g., a given symbol may
+	only have a single printer).  In case of repeated definitions, an
+	error is issued for the second definition, yet it is not discarded,
+	and becomes the definition used for the rest of the file.
+
+	This is not consistent with the idea that multiple definitions are not
+	allowed: discard any repeated directive.
+
+	* src/symtab.c (symbol_type_set, symbol_code_props_set)
+	(semantic_type_code_props_set, symbol_class_set, symbol_translation):
+	Discard repeated directives.
+	* tests/input.at (Default %printer and %destructor redeclared)
+	(Per-type %printer and %destructor redeclared): Update expectations.
+
+2013-04-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: factor test for printer/desctructor redefined
+	* tests/input.at (Default %printer and %destructor redeclared):
+	Introduce AT_TEST to factor.
+
+2013-04-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: use appropriate location for useless precedence/associativity
+	* src/symtab.c (symbol_precedence_set): Use prec_location, not
+	location (which is the first occurrence of the symbol, possibly just
+	%token).
+	Also, as redefinitions are not allowed, keep the first values, not
+	the subsequent ones.
+	* tests/conflicts.at, tests/existing.at, tests/regression.at: Adjust.
+
+2013-04-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: factor duplicate expected warnings
+	* tests/existing.at: Instead of "t ? abc : aBc", write "a(t?b:B)c".
+
+2013-04-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: enable -Wsign-compare and fix corresponding warnings
+	-Wsign-compare was disabled for bison's own code, following gnulib's
+	approach.  However, the generated parsers should not trigger such
+	warnings.
+
+	Reported by Efi Fogel.
+	http://lists.gnu.org/archive/html/help-bison/2013-04/msg00018.html
+
+	See also http://stackoverflow.com/questions/16101062 for the weird
+	"-(unsigned)i" piece of code.
+
+	* configure.ac (warn_tests): Enable -Wsign-compare.
+	* data/location.cc (position::add_): New.
+	(position::lines, position::columns): Use it.
+	* tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): Fix signedness issues.
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: check more cases of %define variables with code values
+	* data/bison.m4 (b4_percent_define_check_kind): Fix overquotation.
+	(api.location.type, api.position.type): Check they have code values here.
+	* data/c++.m4 (api.location.type): No longer checked here.
+	(parser_class_name): Check it here.
+	* data/java.m4 (api.value.type, init_throws, lex_throws, parser_class_name)
+	(throws, annotations, extends, implements): Check they have code values.
+	* doc/bison.texi: Fix every incorrect occurrence of %define.
+	Document the additional syntax for %define: code values.
+	Document the additional syntax for -D/-F: string and code values.
+	* tests/calc.at, tests/headers.at, tests/input.at, tests/java.at,
+	* tests/local.at: Fix dependencies.
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: do not convert $ and @ in code values of %define variables
+	* src/parse-gram.y (value: "{...}"): Just strip the braces, but pass
+	the value as is.
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: no longer use the "braceless" non-terminal
+	The purpose of this symbol was only to factor function calls.  As a
+	result the actions were indeed simpler, but the grammar was somewhat
+	uselessly obfuscated.  Get rid of this symbol, but introduce functions
+	to simplify dependencies.
+
+	There is no (intended) changes of behavior here.
+
+	* src/parse-gram.y (strip_braces, translate_code(
+	(translate_code_braceless): New.
+	(braceless): Remove, use "{...}" instead, and one of the previous
+	functions depending on the context.
+	(STRING, "%{...%}", EPILOGUE): Declare as <code>, instead of <chars>,
+	the difference between both is useless (well, I couldn't make sense of
+	it, even after having read the initial commit that introduced them).
+	(%union): Remove the now useless "chars" type.
+	Adjust the printers.
+	* src/scan-gram.l: Adjust.
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: avoid %{...%} in our parser
+	* src/parse-gram.y (%{...%}): Split in %code and %code requires.
+	* src/location.h: Add missing includes for self containedness.
+
+2013-04-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: use %code for local function declarations in our parser
+	* src/parse-gram.y (version_check, gram_error, char_name, lloc_default):
+	Move their prototypes from %{...%} to %code.
+	(YYLLOC_DEFAULT, YY_LOCATION_PRINT): Move from %{...%} to %code.
+	(current_lhs): Move its implementation to the epilogue.
+
+2013-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: check the kind of api.prefix, api.location.type
+	* data/bison.m4: Check api.prefix.
+	* data/c++.m4: Check api.location.type.
+	* doc/bison.texi: Fix uses of api.value.type, api.prefix, api.location.type.
+	Document {...} values for %define.
+	* src/parse-gram.y: Fix use of api.prefix.
+	* tests/calc.at: Fix uses of api.location.type.
+	* tests/input.at: Check api.prefix, and api.location.type.
+
+2013-04-15  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.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	version 2.7.1
+	* NEWS: Record release date.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: enforce definition syntax for keyword variables
+	* src/muscle-tab.c (muscle_percent_define_get_kind)
+	(muscle_percent_define_check_kind): New.
+	(muscle_percent_define_default): Variables with a default value are
+	of "keyword" kind.
+	(muscle_percent_define_flag_if, muscle_percent_define_check_values):
+	Check that the variable is of keyword kind.
+	* data/bison.m4: Likewise, but in M4.  That is to say...
+	(b4_percent_define_default): Define the kind when the variable is undefined.
+	(b4_percent_define_check_kind): Use a better error message.
+	(_b4_percent_define_check_values, _b4_percent_define_check_values):
+	Former "enum" variables should be defined using the keyword syntax.
+	* doc/bison.texi: Update.
+	A couple of fixes.
+	* tests/input.at (%define keyword variables): New.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: let -D/-F support the three kinds of %define variable values
+	See http://lists.gnu.org/archive/html/bison-patches/2013-04/msg00012.html
+
+	* src/getargs.c (getargs): Recognize {value} and "value" for -D and -F.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: minor refactoring
+	* src/muscle-tab.c (muscle_percent_define_default): Reduce the scopes.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: minor simplification which uncovers a missing warning
+	* src/muscle-tab.c (muscle_percent_define_ensure): Discover the virtues
+	of || to factor conditionals.
+	* NEWS: As api.pure is no longer flagged as "used" by accident,
+	we now have warnings for useless definitions.
+	* tests/calc.at: So remove api.pure settings when running C++ tests,
+	since C++ skeletons use a pure interface.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: factor the field retrieval
+	* src/muscle-tab.c (muscle_percent_define_get_raw): New.
+	Use it where appropriate.
+	(location_decode): No longer fetch the value from the table,
+	take the value as argument.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: factor the handling of used variables
+	* src/muscle-tab.c (muscle_percent_define_use): New, corresponding
+	to b4_percent_define_use.
+	Use it where appropriate.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: factor the computation of variable names
+	* src/muscle-tab.c (muscle_name): New.
+	Use it.
+	Propagate "uniqstr" as value type instead of plain "char const *".
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: factor the kind check in M4
+	* data/bison.m4 (b4_percent_define_check_kind): New.
+	Use it to check api.token.prefix.
+	* data/c++.m4: Check the kind of api.namespace.
+	* doc/bison.texi: Update a reference to former 'namespace' variable.
+	* tests/input.at ("%define" code variables): Check api.namespace.
+
+2013-04-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: factor conditionals on defined %define variables
+	* data/bison.m4 (b4_percent_define_ifdef_): New.
+	Use it where appropriate.
+
+2013-04-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.token.prefix: use code values
+	* data/bison.m4: Remove useless (and incorrect: m4_* instead of b4_*)
+	default assignment to api.token.prefix.
+	Check that api.token.prefix is assigned code.
+	* tests/input.at (%define code variables): New test.
+	* NEWS, doc/bison.texi, tests/c++.at, tests/calc.at,
+	* tests/java.at, tests/local.at: Adjust to use braces.
+
+2013-04-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: fix several issues with locations
+	Reported by Daniel Frużyński.
+	http://lists.gnu.org/archive/html/bug-bison/2013-02/msg00000.html
+
+	* data/location.cc (position::columns, position::lines): Check for
+	underflow.
+	Fix some weird function signatures.
+	(location): Accept signed integers as arguments where appropriate.
+	Add operator- and operator+=.
+	* doc/bison.texi (C++ position, C++ location): Various fixes
+	and completion.
+	* tests/c++.at (C++ Locations): New tests.
+
+2013-04-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscles: be sure that %code snippets are not glue together on a single line
+	Recently "braceless" in the parser was changed so that an eol was no
+	longer added to the value.  This is not correct when a %code is used
+	multiple times, because the syncline of the next snippet might be
+	appended to the last (and not ended) line of the previous snippet.
+
+	* src/muscle-tab.h (muscle_grow): Make it private.
+	* src/muscle-tab.c (muscle_grow): Accept a fourth argument: a required
+	terminator.
+	Adjust callers.
+	* tests/input.at (Multiple %code): New.
+
+2013-04-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: fix comments
+	* tests/actions.at: Fix incorrect "prototype".
+
+2013-04-10  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  glr.cc: fix a clang warning
+	  maint: update copyright years
+	  build: fix VPATH issue
+	  build: avoid clang's colored diagnostics in the test suite
+	  tests: please clang and use ".cc", not ".c", for C++ input
+	  gnulib: update
+	  skeletons: avoid empty switch constructs
+	  lalr1.cc: fix compiler warnings
+	  yacc.c: do not use __attribute__ unprotected
+	  tests: style changes
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.value.type: use keyword/brace values
+	Suggested by Joel E. Denny.
+	http://lists.gnu.org/archive/html/bison-patches/2013-03/msg00016.html
+
+	* data/bison.m4 (b4_percent_define_get_kind): New.
+	(b4_variant_flag): Check that api.value.type is defined as the 'variant'
+	keyword value.
+	* data/c.m4 (_b4_value_type_setup_keyword): New.
+	(b4_value_type_setup): Use it to simplify reading.
+	Use b4_define_silent.
+	Decode api.value.type, including its type.
+	(b4_value_type_define): Likewise.
+	* data/c++.m4 (b4_value_type_declare): Adjust the decoding of api.value.type,
+	taking its kind into account.
+	* doc/bison.texi: Adjust all the examples to the new syntax.
+	* NEWS: Ditto.
+	* tests/types.at: Adjust
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.value.type: diagnose guaranteed failure with --yacc
+	Instead of generating invalid C code, generate an error when --yacc and
+	'%define api.value.type union' are used together.
+
+	* data/bison.m4: Issue an error in this case.
+	* tests/types.at (%yacc vs. %define api.value.type union): New, check this
+	error.
+	* doc/bison.texi (Type Generation): Document it.
+	* tests/output.at: Check that '-o y.tab.c' and '-y' behave equally
+	wrt generated file names.
+	* NEWS (Use of YACC='bison -y'): New.
+	Promote the use of 'bison -o y.tab.c'.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: style changes
+	* doc/bison.texi (Destructor Decl, Printer Decl): Group series of %token
+	and %type together.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: display locations in error as recommended by GNU Coding Standards
+	* doc/bison.texi (Actions and Locations): here.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: api.value.type union
+	* doc/bison.texi (Type Generation): New section.
+	(Multi-function Calc): Convert to use api.value.type=union.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: move the section about "%union" where types are discussed
+	* doc/bison.texi (Union Decl): Move to...
+	(Defining Language Semantics): here.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: deprecate #define YYSTYPE in favor of %define api.value.type
+	* doc/bison.texi: Convert examples with YYSTYPE to use api.value.type.
+	Deprecate YYSTYPE.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	value type: accept "->" in type tags
+	Provide a means to dereference pointers when defining tags.  One
+	example could be:
+
+	  %code requires
+	  {
+	    typedef struct ListElementType
+	    {
+	      union value
+	      {
+	        int intVal;
+	        float floatVal;
+	        char* charptrVal;
+	      } value;
+
+	      struct ListElementType* next;
+	    } ListElementType;
+	  }
+
+	  %union
+	  {
+	    ListElementType* list;
+	  }
+
+	  %token <list->value.charptrVal> STRING
+	  %token <list->value.intVal> INTEGER
+	  %token <list->value.floatVal> REAL
+	  %type <list> ElementList LiteralType
+
+	* src/scan-code.l, src/scan-gram.l: Accept "->" in tags.
+	* tests/types.at: Add more test cases to cover this case.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: simplify the scanning of type tags
+	* src/scan-gram.l: Remove the rule for simple tags: the "complex" case
+	subsumes it.  It was more efficient, but duplicated the code for a
+	negligible benefit.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.value.type: implement proper support, check, and document
+	* data/c.m4 (b4_symbol_type_register, b4_type_define_tag)
+	(b4_symbol_value_union, b4_value_type_setup_union)
+	(b4_value_type_setup_variant, b4_value_type_setup):
+	New.
+	(b4_value_type_define): Use it to set up properly the type.
+	Handle the various possible values of api.value.type.
+	* data/c++.m4 (b4_value_type_declare): Likewise.
+	* data/lalr1.cc (b4_value_type_setup_variant): Redefine.
+
+	* tests/types.at: New.
+	Exercise all the C/C++ skeletons with different types of
+	api.value.type values.
+	* tests/local.mk, tests/testsuite.at: Use it.
+
+	* doc/bison.texi (%define Summary): Document api.value.type.
+	* NEWS: Advertise it, together with api.token.constructor.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	m4: allow the definition of side-effect only macros
+	* data/bison.m4 (b4_divert_kill, b4_define_silent): New.
+	* data/c.m4: Comment change.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	variant: fix inconsistent quotation
+	* data/variant.hh (b4_char_sizeof): De-overquote.
+	(b4_value_type_declare): De-underquote.
+
+2013-04-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	m4: style changes in error messages
+	* data/bison.m4: Use $0 to denote the current macro's name.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: fix a clang warning
+	* data/glr.cc (b4_epilogue): Be sure to end with an end-of-line,
+	so that the file does end with one.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update copyright years
+	Run "make update-copyright".
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix VPATH issue
+	* Makefile.am (update-b4-copyright, update-package-copyright-year): Fix
+	path to build-aux.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: avoid clang's colored diagnostics in the test suite
+	The syncline tests, which try to recognize compiler diagnostics,
+	are confused by escapes for colors.
+
+	* configure.ac (warn_tests): New, to factor the warnings for both
+	C and C++ tests.
+	Add -fno-color-diagnostics to it.
+	* tests/local.at (AT_TEST_TABLES_AND_PARSE): Do not remove glue
+	together compiler flags.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: please clang and use ".cc", not ".c", for C++ input
+	When fed with foo.c, clang++ 3.2 answers:
+
+	  clang: error: treating 'c' input as 'c++' when in C++ mode,
+	                this behavior is deprecated
+
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use *.cc and *.hh
+	for C++.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: avoid empty switch constructs
+	Reported by Rob Conde.
+	http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html
+
+	* data/c.m4 (b4_symbol_actions): Rename as...
+	(_b4_symbol_actions): this.
+	(b4_symbol_actions): New wrapper.
+	Do not emit empty switches.
+	Adjust all b4_symbol_actions callers.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: fix compiler warnings
+	Reported by Rob Conde.
+	http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html
+
+	* data/stack.hh (operator=, stack(const stack&)): Make this class
+	uncopyable, i.e., "undefine" these operators: make them private and
+	don't implement them.
+	(clear): New.
+	* data/lalr1.cc: Use it instead of an assignment.
+	(parser): Make this class uncopyable.
+
+2013-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc.c: do not use __attribute__ unprotected
+	Reported by Victor Khomenko.
+	http://lists.gnu.org/archive/html/bug-bison/2013-04/msg00001.html
+
+	* data/glr.c (YYUSE, __attribute__): Fuse their definition into...
+	* data/c.m4 (b4_attribute_define): this new macro.
+	* data/yacc.c, data/glr.c: Use it.
+
+2013-04-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.namespace: demonstrate and use {...} values instead of "..." values
+	* tests/c++.at, tests/input.at: Use "%define api.namespace {foo}" instead
+	of using quotes.
+	* tests/local.at (AT_SETUP_STRIP, AT_NAME_PREFIX): Recognize uses of
+	braces instead of quotes.
+	* doc/bison.texi: Use braces for api.namespace's values.
+
+2013-04-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: do not add a \n at the end of blocks of code
+	Now that we use "braceless" (which is {...} blocks of code with
+	initial and final braces stripped) to denote "short" values (such as
+	api.namespaces), the added end-of-line is a nuisance.  As a matter of
+	fact, this extra-safety was useless, as every expansion of "braceless"
+	(aka, "user code") is followed by an end of line.
+
+	* src/parse-gram.y, src/parse-gram.c (braceless): Instead of replacing
+	the final brace by \n, just delete the brace.
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: record the kind of %define variable values
+	Provide a means to tell the difference between "keyword" values (e.g.,
+	%define api.pull both), "string" values (e.g., %define file.name
+	"foo"), and "code" values (e.g., %define api.namespace {calc}).
+
+	Suggested by Joel E. Denny.
+	http://lists.gnu.org/archive/html/bison-patches/2013-03/msg00016.html
+
+	* src/muscle-tab.h, src/muscle-tab.c (muscle_kind, muscle_kind_new)
+	(muscle_kind_string): New.
+	(muscle_percent_define_insert): Take the kind as new argument.
+	Insert it in the muscle table.
+	Adjust callers.
+	* src/getargs.c: Adjust callers.
+	* src/parse-gram.y: Ditto.
+	(content.opt): Remove, replaced by...
+	(value): this new non-terminal, whose semantics value is stored
+	in the new "value" union member.
+	Provide a printer.
+	Support values in braces in additions to keyword and string values.
+
+	fuse me
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: fix comments
+	* src/muscle-tab.c (muscle_percent_define_ensure): Update obsolete
+	comments.
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: style changes
+	* src/parse-gram.y (PARAM_TYPE): Remove useless typedef guard.
+	There's a header guard.
+	Use 'yyo' with %printer.
+	Use a consistent style for %union one-liners.
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: split %union to group together related aspects
+	* src/parse-gram.y (INT): Fuse the %type and %token declaration.
+	Move its %union right before its introduction.
+	(%union): Split in several %unions, right before their use.
+
+2013-04-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: refactor
+	* src/muscle-tab.c (muscle_lookup, muscle_entry_new): New.
+	(muscle_insert, muscle_grow, muscle_find_const, muscle_find): Use them.
+
+2013-04-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: comment changes
+	* src/muscle-tab.c: Move the documentation of public functions to...
+	* src/muscle-tab.h: here.
+	Fix comment consistency issues.
+
+2013-04-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	muscle: minor refactoring
+	* src/muscle-tab.h (MUSCLE_INSERT_C_STRING): Use MUSCLE_INSERT_STRING.
+
+2013-03-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-03-06  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	gram: correct token numbering in precedence declarations
+	In a precedence declaration, when tokens are declared with a litteral
+	character (e.g., 'a') or with a identifier (e.g., B), Bison behaved
+	differently: the litteral tokens would be numbered first, and then the
+	other ones, leading to the following grammar:
+
+	  %right A B 'c' 'd'
+
+	being numbered as such: 'c' 'd' A B.
+
+	* src/parse-gram.y (symbol.prec): Set the symbol number when reading the
+	symbols.
+	* tests/conflicts.at (Token declaration order: literals vs. identifiers):
+	New.
+
+2013-03-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update autoconf submodule
+	* submodules/autoconf: Up to master.
+	No significant changes in the files we use (m4sugar.m4 and foreach.m4).
+
+2013-03-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: no longer include the yacc category in -Wall
+	It would be a pity to warn the users against Bison features...
+	http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00107.html
+
+	* src/complain.h, src/complain.c (Wall): Disable Wyacc.
+	(Weverything): New (hidden so far) category which really denotes all
+	the categories (what used to be Wall).
+	(warnings_args, warnings_types): Adjust.
+	(warning_argmatch): Now !none = Weverything and conversely, no longer Wall.
+	* NEWS, doc/bison.texi, src/getargs.c: Adjust the documentation.
+	* tests/input.at (-Werror is not affected by -Wnone and -Wall): Adjust
+	by not using a -Wyacc type of warning.
+
+2013-03-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: no longer detect and cure missing semicolon at end of actions
+	Bison 3.0 is already breaking backward compatibility with other
+	features.  It is an appropriate time to drop this feature.  Note that
+	it was disabled when --yacc is passed.  See
+	http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00102.html
+
+	Basically, revert e8cd1ad655bcc704b06fb2f191dc3ac1df32b796.
+
+	* src/scan-code.l (braces_level, need_semicolon, in_cpp): Remove.
+	Remove every rule needed to detect and add missing semicolon.
+	* tests/actions.at (Fix user actions without a trailing semicolon):
+	Remove.
+	* NEWS: Adjust.
+
+2013-03-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: stop using bison -y
+	* Makefile.am (YACC): Pass -o y.tab.c, so that ylwrap is happy, and
+	yet we don't pass --yacc to bison.
+	(AM_YFLAGS): Disable Yacc warnings.
+
+2013-02-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: rename b4_semantic_type_declare as b4_value_type_declare
+	This is to match the names used in C and api.value.type, even if the
+	parser actually defines semantic_type.
+
+	* data/c++.m4 (b4_semantic_type_declare): Rename as...
+	(b4_value_type_declare): this.
+	* data/variant.hh: Likewise.
+
+2013-02-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: typo
+	* NEWS: here.
+
+2013-02-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: space changes in the tests
+	* tests/local.at: here.
+
+2013-02-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: formatting changes in the doc
+	* doc/bison.texi: Use @file where appropriate.
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix invalid C++11 code
+	* tests/c++.at (Object): Somehow instances of Object were assigned
+	YY_NULL, which is 0 most of the time (that case passes), but is
+	nullptr in C++11, and there is nothing in Object to support such an
+	assignment (failure).  Use 0 as value, and provide the needed
+	assignment operator.
+	Also, use a more natural order within the class definition.
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix failures with G++ 4.8 in Flex scanner
+	* configure.ac (WARN_NO_NULL_CONVERSION_CXXFLAGS): Rename as...
+	(FLEX_SCANNER_CXXFLAGS): this.
+	Pass -Wno-zero-as-null-pointer-constant to G++ if it supports it.
+	* examples/calc++/local.mk: Adjust.
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: rename variant private members
+	* data/variant.hh (buffer, tname, as_, raw, align_me): Rename as...
+	(yybuffer_, yytname_,yyas_, yyraw, yyalign_me): these.
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: space changes
+	* data/variant.hh: Be sure to leave a space before arguments in function
+	calls.
+
+2013-02-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	variant: fix G++ 4.4 warnings
+	The changes by Théophile Ranquet about type punning issues need
+	to be extend to in-place new to please G++ 4.4.7.
+
+	* data/variant.hh (variant::as_): New, factors the casts that avoid
+	compiler warnings.
+	(as, build): Use them.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: spell fixes
+	* NEWS: here.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: factor and enhance messages about duplicate rule directives
+	When reporting a duplicate directive on a rule, point to its first
+	occurrence:
+
+	one.y:11.10-15: error: only one %empty allowed per rule
+	   %empty {} %empty
+	             ^^^^^^
+	one.y:11.3-8: previous declaration
+	   %empty {} %empty
+	   ^^^^^^
+
+	And consistently discard the second one.
+
+	* src/complain.h, src/complain.c (duplicate_directive): New.
+	* src/reader.c: Use it where appropriate.
+	* src/symlist.h, src/symlist.c (symbol_list): Add a dprec_location member.
+	* tests/actions.at: Adjust expected output.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: no longer use backquotes
+	* tests/actions.at, tests/atlocal.in, tests/c++.at, tests/calc.at,
+	* tests/conflicts.at, tests/existing.at, tests/glr-regression.at,
+	* tests/input.at, tests/java.at, tests/local.at, tests/sets.at,
+	* tests/synclines.at, doc/bison.texi, lib/libiberty.h, lib/timevar.h:
+	Use single quotes.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: no longer use backquotes
+	* README, REFERENCES, TODO, configure.ac, data/README, data/bison.m4,
+	* data/c++.m4, data/c.m4, data/java.m4, data/lalr1.cc,
+	* data/lalr1.java, data/yacc.c, doc/local.mk, etc/bench.pl.in,
+	* src/conflicts.c, src/files.c, src/getargs.c, src/gram.h, src/lalr.c,
+	* src/location.c, src/location.h, src/muscle-tab.c, src/muscle-tab.h,
+	* src/output.c, src/parse-gram.c, src/parse-gram.y, src/print-xml.c,
+	* src/print.c, src/reader.c, src/reduce.c, src/scan-skel.l,
+	* src/symtab.h, src/system.h, src/tables.c:
+	Use single quotes, as currently recommended by the GNU Coding Standards.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: no longer use backquotes in messages
+	* src/getargs.c (usage): Use single quotes.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: use %empty instead of /* empty */
+	* doc/bison.texi: Change the comments into explicit %empty.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: introduce %empty and -Wempty-rule
+	* doc/bison.texi (Grammar Rules): Make it a @section which
+	contains...
+	(Rules Syntax): this new subsection (with the previous contents of
+	"Grammar Rules".
+	(Empty Rules): New subsection, extracted from the former
+	"Grammar Rules".
+	Document %empty.
+	(Recursion): New a subsection of "Grammar Rules".
+	Complete a few index entries.
+	(Bison Options): Document -Wempty-rule.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	report: use %empty to denote empty rules
+	* src/gram.c (rule_rhs_print): Use %empty for empty rules.
+	* tests/conflicts.at, tests/regression.at, tests/sets.at: Adjust.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: %empty enables -Wempty-rule
+	* src/complain.h, src/complain.c (warning_is_unset): New.
+	* src/reader.c (grammar_current_rule_empty_set): If enabled -Wempty-rule,
+	if not disabled.
+	* tests/actions.at (Implicitly empty rule): Check this feature.
+	Also check that -Wno-empty-rule does disable this warning.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	-Wempty-rule: diagnose empty rules without %empty
+	* src/complain.h, src/complain.c (warning_empty_rule, Wempty_rule):
+	New warning category.
+	(warnings_args, warnings_types): Adjust.
+	* src/reader.c (grammar_rule_check): Check the empty rules are
+	flagged by %empty.
+	* tests/actions.at (Implicitly empty rule): New.
+	* tests/existing.at: Add expected warnings.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: use %empty
+	* tests/actions.at, tests/input.at, tests/reduce.at,
+	* tests/regression.at:
+	here.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: use %empty
+	Avoid that Bison's own use of "bison -Wall" trigger warnings.
+
+	* src/parse-gram.y: Use %empty for every empty rule.
+
+2013-02-18  Akim Demaille  <akim@lrde.epita.fr>
+
+	grammar: introduce %empty
+	Provide a means to explicitly denote empty right-hand sides of rules:
+	instead of
+
+	  exp:  { ... }
+
+	allow
+
+	  exp: %empty { ... }
+
+	Make sure that %empty is properly used.
+
+	With help from Joel E. Denny and Gabriel Rassoul.
+	http://lists.gnu.org/archive/html/bison-patches/2013-01/msg00142.html
+
+	* src/reader.h, src/reader.c (grammar_current_rule_empty_set): New.
+	* src/parse-gram.y (%empty): New token.
+	Use it.
+	* src/scan-gram.l (%empty): Scan it.
+	* src/reader.c (grammar_rule_check): Check that %empty is properly used.
+	* tests/actions.at (Invalid uses of %empty, Valid uses of %empty): New.
+
+2013-02-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	getargs: minor simplification
+	* src/getargs.c (flag_argmatch): Simplify the handling of "none".
+
+2013-02-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: move argument handling of -W into the diagnostics module
+	This allows to reduce the number of public interfaces.
+
+	* src/getargs.c (--yacc): Use warning_argmatch instead of tweaking
+	directly warnings_flag (which will be private).
+	(warning_argmatch, warnings_argmatch): Move to...
+	* src/complain.h, src/complain.c: here.
+
+	* src/getargs.h, src/getargs.c (warnings_args, warnings_types): Move to...
+	* src/complain.c: here, now private.
+
+	* src/complain.h (severity, warnings_flag): Move to...
+	* src/complain.c: here, now private.
+
+2013-02-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: revamp the handling of -Werror
+	Recent discussions with Joel E. Denny
+	(http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00026.html)
+	show that it is desirable to tell the difference between an option
+	that was explicitly disabled with -Wno-foo, as opposed to be left
+	unset.  The current framework does not allow this.
+
+	Instead of having a first int to store which options are enabled, and
+	another to store which are turned into errors, use an array that for
+	each warning category tells its status: disabled, unset, warning,
+	error.
+
+	* src/complain.h, src/complain.c (warning_bit): New enum.
+	(warnings): Use it.
+	(severity): New enum.
+	(warnings_flag): Now an array of severity.
+	(errors_flag): Remove, now done by warnings_flag.
+	(complain_init): New function, to initialie warnings_flag.
+	(warnings_are_errors): New Boolean, for -Werror.
+	* src/complain.c (warning_severity): New.
+	(warnings_print_categories, complains): Use it.
+	* src/getargs.c (warning_argmatch): Adjust to use warnings_flag.
+	(warnings_argmatch): Ditto.
+	Handle -Werror and -Wno-error here.
+	(getargs): Adjust.
+	* src/main.c (main): Call complain_init.
+	* tests/input.at (Invalid options): Add more corner cases.
+
+2013-02-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	options: simplify the handling of -W
+	* src/getargs.c (warnings_argmatch, warning_argmatch): Simplify by
+	replacing function arguments with their actual values.
+	(WARNING_ARGMATCH): Remove, useless.
+	Adjust callers.
+
+2013-02-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	options: don't accept "error=" for -f and -r
+	* src/getargs.c (warning_argmatch, warnings_argmatch, WARNINGS_ARGMATCH):
+	New.
+	Use them for -W/--warning.
+	They are copied from...
+	(flag_argmatch, flags_argmatch, FLAGS_ARGMATCH): these.
+	Simplify by removing the support for "error".
+	* tests/input.at (Invalid options): New.
+	* TODO (Laxism in Bison invocation arguments): Remove.
+
+2013-02-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: factor the list of warning names
+	* src/getargs.h, src/getargs.c (warnings_args, warnings_types): Make
+	them public.
+	* src/complain.h, src/complain.c (warnings_print_categories): Its
+	only use outside complain.c was removed in a recent commit, so
+	make it static.
+	Simplify its implementation.
+	Use warnings_args and warnings_types.
+	* src/muscle-tab.c (muscle_percent_define_check_values): Make it
+	silent.
+
+2013-02-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: no longer pretty-print rules in error messages, carets suffice
+	* src/gram.c (grammar_rules_useless_report): Let -fcaret handle the
+	pretty-printing of the guilty rules.
+	(rule_print): Inline in its only use.
+	* tests/conflicts.at, tests/existing.at, tests/reduce.at,
+	* tests/regression.at: Adjust.
+	* NEWS: Document.
+
+2013-02-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	options: no longer document warnings when diagnosing an invalid -W
+	The argmatch functions accept prefixes of the alternatives (like
+	getopt does for long options).  Bison uses this to document the
+	warning categories.  This is troublesome: it duplicates the --help
+	documentation, it is not gettextized, it is displayed with ugly quotes
+	(because argmatch uses it to display the list of possible answers),
+	and it prevents straighforward uses of the tables of valid warning
+	categories (for instance so that warning diagnostics end with the name
+	of the warning).
+
+	The "hidden" option --trace uses the same trick, but it does not need
+	to be translated, nor to be described in --help.
+
+	* src/getargs.c (warnings_args): Remove pseudo documentation.
+	Comment changes.
+
+2013-02-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: enlarge the allowed duration for calc tests
+	Hydra "often" fails on this test:
+
+	252. calc.at:658: 252. Calculator %glr-parser api.pure
+	parse.error=verbose %debug %locations %defines api.prefix="calc"
+	%verbose %yacc %parse-param {semantic_value *result}
+	%parse-param {int *count} (calc.at:658): FAILED
+
+	* tests/calc.at: Give 200s instead of 100s.
+	Use AT_DEBUG_IF.
+
+2013-02-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	debug: improve the display of symbol lists
+	* src/symtab.c (symbol_print): Remove useless quotes (the symbol already
+	has quotes).
+	Prefer fputs.
+	* src/symlist.c (symbol_list_syms_print): Likewise.
+	Fix separators.
+
+2013-02-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: minor changes
+	* src/complain.c: Space changes.
+	* src/reader.c: Comment changes.
+	Avoid && in assertions.
+	* src/location.c: Move comments to...
+	* src/location.h: here.
+	* src/symlist.h, src/symlist.c: Create a pseudo section for members
+	that apply to the rule.
+
+2013-02-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: restructure, document variants for C++
+	* NEWS: here.
+
+2013-02-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: api.token.constructor requires api.value.type=variant
+	Eventually it should also support "union".
+
+	* data/glr.cc: Move this check to...
+	* data/c++.m4: here, as lalr1.cc is affected too.
+
+2013-02-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: restore C90 compatibility
+	* src/parse-gram.y, src/parse-gram.c: Don't use // comments.
+
+2013-02-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: use @group to improve page breaking
+	* doc/bison.texi: here.
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: rename internal "stype" as "union_members" for clarity
+	"stype" is quite unclear, and it also collides with the former %define
+	variable that had the same name (replaced by api.value.type).
+
+	* src/parse-gram.y (stype): Rename as...
+	(union_members): this.
+	* data/bison.m4: Adjust.
+	(b4_user_stype): Rename as...
+	(b4_user_union_members): this.
+	* data/c++.m4, data/c.m4: Adjust.
+	* src/parse-gram.c: regen.
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve the language independance layer
+	* tests/local.at (_AT_LANG_DISPATCH): New, shamelessly stolen from
+	Autoconf's _AT_LANG_DISPATCH.
+	(AT_LANG_DISPATCH): New.
+	(AT_YYERROR_FORMALS, AT_YYERROR_PROTOTYPE, AT_YYERROR_DECLARE_EXTERN)
+	(AT_YYERROR_DECLARE, AT_YYERROR_DEFINE, AT_MAIN_DEFINE, AT_COMPILE)
+	(AT_FULL_COMPILE):
+	Use AT_LANG_DISPATCH instead of an ad hoc m4_case.
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: space changes in the parser
+	* src/parse-gram.y: Fix spaces.
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: use api.pure full
+	* src/parse-gram.y: Use api.pure full instead of silly macro tricks.
+
+2013-02-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: use a for loop instead of a while loop, and scope reduction
+	* src/reader.c (packgram): Improve readability.
+	The parser calls grammar_current_rule_end at the end of every rhs,
+	which adds a NULL to separate the rules.  So there is no need to
+	check whether "p" is non-null before proceeding.
+
+2013-02-01  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	variants: stylistic change
+	* data/variant.hh (tname): Respect the GNU Coding Standards for this
+	pointer's declaration.
+
+2013-02-01  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	grammar: free the association tracking graph
+	The graph introduced by Valentin wasn't free'd after use.
+
+	* src/symtab.c (assoc_free): New, clear the array of linked lists with...
+	(linkedlist_free): This, new.
+	(print_precedence_warnings): Call assoc_free when done.
+	(print_assoc_warnings): Free used_assoc after use.
+
+2013-02-01  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: use AT_FULL_COMPILE where possible
+	* tests/c++.at (C++ Variant-based Symbol, Variants): Here.  Rename the
+	generated input files to use .y instead of .yy, as a requirement for using
+	AT_FULL_COMPILE instead of a combination of AT_BISON_CHECK and
+	AT_BISON_COMPILE_CXX.
+
+2013-02-01  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	variants: avoid type punning issue
+	This is based on what is recommended by both Scott Meyers, in 'Effective
+	C++', and Andrei Alexandrescu and Herb Sutter in 'C++ Coding Standards'.
+
+	Use a static_cast on void* rather than directly use a reinterpret_cast,
+	which can have nefarious effects on objects.  However, even though following
+	this guideline is good practice in general, I am not quite sure how relevant
+	it is when applied to conversions from POD to objects.  Actually, it might
+	very well be the opposite: isn't this exactly what reinterpret_cast is for?
+	What we really want *is* to transmit the memory map as a series of bytes,
+	which, if I am correct, falls into the kind of "low level" hack for which
+	this cast is meant.
+
+	In any case, this silences the warning, which will be greatly appreciated by
+	anyone using variants with a compiler supporting -fstrict-aliasing.
+
+	* data/variant.hh (as): Here.
+	* tests/c++.at (Exception safety, C++ Variant-based Symbols, Variants):
+	Don't use NO_STRICT_ALIAS_CXXFLAGS (revert commit ddb9db15), as type punning
+	is no longer an issue.
+	* tests/atlocal.in, configure.ac (NO_STRICT_ALIAS_CXXFLAGS): Remove
+	definition.
+	* examples/local.mk (NO_STRICT_ALIAS_CXXFLAGS): Remove from AM_CXXFLAGS.
+	* doc/bison.texi: Don't mention type punning issues.
+
+2013-02-01  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	todo: update
+	Reformulate and give more details on my thoughts concerning the graphical
+	visualization, and add an entry about a bug in the options processing for
+	warnings as errors.
+
+	* TODO: Here.
+
+2013-02-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-02-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	location: pass the location first
+	* src/location.h, src/location.c (location_print): For consistency
+	with other data structures and other location_* routines, pass the
+	location argument first.
+	* src/complain.c: Adjust.
+	(location_caret): Likewise.
+	* src/parse-gram.y: Adjust.
+
+2013-02-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	symlist: use the right stream
+	* src/symlist.c (symbol_list_syms_print): Use "f", not stderr.
+
+2013-01-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: put two related tests together
+	* tests/conflicts.at (Useless associativity warning): Move next
+	to "Useless precedence warning".
+
+2013-01-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: name contributors
+	* NEWS: here.
+
+2013-01-30  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	warnings: introduce -Wprecedence
+	The new warning category "precedence" flags useless precedence and
+	associativity.  -Wprecedence can now be used, it is disabled by default.
+	The warnings about precedence and associativity are grouped into one, and
+	the testsuite was corrected accordingly.
+
+	* src/complain.h (warnings): Introduce "precedence".
+	* src/complain.c (warnings_print_categories): Adjust.
+	* src/getargs.c (warnings_args, warning_types): Likewise.
+	* src/symtab.h, src/symtab.c (print_associativity_warnings): Remove.
+	* src/symtab.h (register_assoc): Correct arguments.
+	* src/symtab.c (print_precedence_warnings): Print both warnings together.
+	* doc/bison.texi (Bison options): Document the warnings and provide an
+	example.
+	* tests/conflicts.at, tests/existing.at, tests/local.at,
+	* tests/regression.at: Adapt the testsuite for the new category
+	(-Wprecedence instead of -Wother where appropriate).
+
+2013-01-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: avoid clang's colored diagnostics in the test suite
+	The syncline tests, which try to recognize compiler diagnostics,
+	are confused by escapes for colors.
+
+	* configure.ac (warn_tests): New, to factor the warnings for both
+	C and C++ tests.
+	Add -fno-color-diagnostics to it.
+	* tests/local.at (AT_TEST_TABLES_AND_PARSE): Do not remove glue
+	together compiler flags.
+
+2013-01-30  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: please Clang++ 3.2+ on Flex scanners
+	Clang++, with -Wall, rejects code generated by Flex (for C scanners):
+
+	  CXX      examples/calc++/examples_calc___calc__-calc++-scanner.o
+	  In file included from examples/calc++/calc++-scanner.cc:1:
+	  error: implicit conversion of NULL constant to 'bool' [-Werror,-Wnull-conversion]
+	  if ( ! ( (yy_buffer_stack) ? (yy_buffer_stack)[(yy_buffer_stack_top)] : __null) ) {
+	       ~                                                                  ^~~~~~
+	                                                                          false
+	* configure.ac (WARN_NO_NULL_CONVERSION_CXXFLAGS): Compute it.
+	* examples/calc++/local.mk (examples_calc___calc___CXXFLAGS): Use it.
+
+2013-01-30  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	grammar: record used associativity and print useless ones
+	Record which symbol associativity is used, and display useless ones.
+
+	* src/symtab.h, src/symtab.c (register_assoc, print_assoc_warnings): New
+	* src/symtab.c (init_assoc, is_assoc_used): New
+	* src/main.c: Use print_assoc_warnings
+	* src/conflicts.c: Use register_assoc
+	* tests/conflicts.at (Useless associativity warning): New.
+
+	Due to the new warning, many tests had to be updated.
+
+	* tests/conflicts.at tests/existing.at tests/regression.at:
+	Add the associativity warning in the expected results.
+	* tests/java.at: Fix the java calculator's grammar to remove a useless
+	associativity.
+	* doc/bison.texi (mfcalc example): Fix associativity to remove
+	warning.
+
+2013-01-29  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	grammar: warn about unused precedence for symbols
+	Symbols with precedence but no associativity, and whose precedence is
+	never used, can be declared with %token instead.  The used precedence
+	relationships are recorded and a warning about useless ones is issued.
+
+	* src/conflicts.c (resolve_sr_conflict): Record precedence relation.
+	* src/symtab.c, src/symtab.h (prec_nodes, init_prec_nodes)
+	(symgraphlink_new, register_precedence_second_symbol)
+	(print_precedence_warnings): New.
+	Record relationships in a graph and warn about useless ones.
+	* src/main.c (main): Print precedence warnings.
+	* tests/conflicts.at: New.
+
+2013-01-29  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	variants: remove the 'built' assertions
+	When using %define parse.assert, the variants come with additional variables
+	that are useful for development purposes. One is a Boolean indicating if the
+	variant is built (to make sure we don't read a non-built variant), and the
+	other is a string describing the stored type. There is no need to have both of
+	these, the string is enough.
+
+	* data/variant.hh (built): Remove.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: indentation fixes
+	* src/parse-gram.y: here.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: be sure to neutralize out-of-tree paths from our parser
+	* tests/bison.in: Adjust to support fixed versions of ylwrap.
+
+2013-01-29  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	m4: generate a basic_symbol constructor for each symbol type
+	Recently, there was a slightly vicious bug hidden in the make_ functions:
+
+	  parser::symbol_type
+	  parser::make_TEXT (const ::std::string& v)
+	  {
+	    return symbol_type (token::TOK_TEXT, v);
+	  }
+
+	The constructor for symbol_type doesn't take an ::std::string& as
+	argument, but a constant variant.  However, because there is a variant
+	constructor which takes an ::std::string&, this caused the implicit
+	construction of a built variant.  Considering that the variant argument
+	for the symbol_type constructor was cv-qualified, this temporary variant
+	was never destroyed.
+
+	As a temporary solution, the symbol was built in two stages:
+
+	  symbol_type res (token::TOK_TEXT);
+	  res.value.build< ::std::string&> (v);
+	  return res;
+
+	However, the solution introduced in this patch contributes to letting
+	the symbols handle themselves, by supplying them with constructors that
+	take a non-variant value and build the symbol's own variant with that
+	value.
+
+	* data/variant.hh (b4_symbol_constructor_define_): Use the new
+	constructors rather than building in a temporary symbol.
+	(b4_basic_symbol_constructor_declare,
+	b4_basic_symbol_constructor_define): New macros generating the
+	constructors.
+	* data/c++.m4 (basic_symbol): Invoke the macros here.
+
+2013-01-29  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: minor stylistic changes
+	* data/c++m4: Remove useless comment lines.
+	* data/variant.hh (self_type): Use this typedef instead of variant<S>.
+	(b4_symbol_constructor_define_): Remove commented-out line, and stylistic
+	change (avoid blank line).
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: please G++ 4.8 with -O3: type puning issue
+	* tests/c++.at (Exception safety): Now that this test covers
+	variants, pass -fno-strict-aliasing to g++.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: please G++ 4.8 with -O3: array bounds
+	* data/c++.m4, data/lalr1.cc (by_state, by_type): Do not use -1 to
+	denote the absence of value, as GCC then fears that this -1 might
+	be used to dereference arrays (such as yytname).
+	Use 0, which corresponds to $accept, which is valueless (the needed
+	property: the symbol destructor must not try to reclaim the memory
+	associated with the symbol).
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: use more explicit types than int
+	* data/c++.m4 (b4_public_types_declare): Declare token_number_type soon.
+	Introduce symbol_number_type (wider than token_number_type).
+	Clarify the requirement that kind_type from by_state and by_type
+	denote the _input_ type (required by the constructor), not the stored type.
+	Use symbol_number_type and token_number_type where appropriate, instead
+	of int.
+	* data/lalr1.cc: Adjust to these changes.
+	Propagate "symbol_number_type".
+	Invoke "type_get ()" instead of read "type" directly.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: value_type -> kind_type
+	* data/c++.m4, data/lalr1.cc (by_type, by_state): Rename 'value_type'
+	as 'kind_type', as it is clearer.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: improve the signature of yysyntax_error_
+	* data/lalr1.cc: This function is const.
+	It takes a symbol_number_type.
+
+2013-01-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: style changes
+	* data/lalr1.cc: Formatting changes.
+	And name changes.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	doxygen: upgrade Doxyfile, and complete it
+	* doc/Doxyfile.in: Let doxygen upgrade it.
+	(INCLUDE_PATH): Point to lib too.
+	(PROJECT_BRIEF): New.
+	(EXCLUDE): Update to reflect the current file hierarchy.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix syntax-check issues
+	* cfg.mk: Ignore strcmp in local.at.
+	* tests/conflicts.at: Use AT_PARSER_CHECK.
+	* tests/regression.at: Preserve the exit status of the generated parsers.
+
+	* tests/local.mk ($(TESTSUITE)): Map @tb@ to a tabulation.
+	* tests/c++.at, tests/input.at, tests/regression.at: Use @tb@.
+	* cfg.mk: (space-tab): There are no longer exceptions.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: please C90 compilers
+	* tests/actions.at, tests/conflicts.at: Use /* ... */ comments.
+	Let "main" return a value.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update todo
+	* TODO: Remove fixed items.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: minor improvements
+	* NEWS: Name some more contributors.
+	Restructure slightly.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: please clang and use ".cc", not ".c", for C++ input
+	When fed with foo.c, clang++ 3.2 answers:
+
+	  clang: error: treating 'c' input as 'c++' when in C++ mode,
+	                this behavior is deprecated
+
+	* tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use *.cc and *.hh
+	for C++.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: formatting changes
+	* tests/local.at: Restore proper indentation.
+
+2013-01-28  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: better inline expansion
+	Many 'inline' keywords were in the declarations.  They rather belong in
+	definitions, so move them.
+
+	* data/c++.m4 (basic_symbol, by_type): Many inlines here.
+	* data/lalr1.cc (yytranslate_, yy_destroy_, by_state, yypush_, yypop_): Inline
+	these as well.
+	(move): Move the definition outside the struct, where it belongs.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: check that using variants is exception safe
+	* tests/local.at: (Slightly) improve the regexp by escaping '.'
+	when it denotes a point.
+	(AT_VARIANT_IF): New.
+	* tests/c++.at (Exception Safety): Run it for variants too.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: remove useless %defines
+	Many tests were using %defines because C++ skeletons used to require
+	it.
+
+	* tests/actions.at, tests/c++.at, tests/input.at, tests/regression.at:
+	Remove useless %defines.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: remove now-useless operators
+	Now that symbols behaves properly, we can eliminate special routines
+	that are no longer needed.
+
+	* data/c++.m4, data/glr.cc, data/lalr1.cc, data/variant.hh:
+	Remove useless assignment operators and copy constructors.
+	As a consequence, remove useless includes for "abort".
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: enable support for --debug
+	* tests/c++.at (Variants): Here.
+	And remove useless clutter when api.token.constructor is enabled.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: revamp the support for variants
+	The current approach was too adhoc: the symbols were not sufficiently
+	self-contained, in particular wrt memory management.  The "new"
+	guideline is the one that should have been followed from the start:
+	let the symbols handle themslves, instead of leaving their users to
+	it.  It was justified by the will to avoid gratuitious moves and
+	copies, but the current approach does not seem to be slower, yet it
+	will probably be simpler to adjust to support move semantics from
+	C++11.
+
+	The documentation says that the %parse-param are available from the
+	%destructor.  In retrospect, that was a silly design decision, which
+	we can break for variants, as its a new feature.  It should be phased
+	out for non-variants too.
+
+	* data/variant.hh: A variant never knows if it stores something or
+	not, it is up to its users to store this information.
+	Yet, in parse.assert mode, make sure the empty/filled variants
+	are properly used.
+	(b4_symbol_constructor_define_): Don't call directly the symbol
+	constructor, to save a useless temporary.
+	* data/stack.hh (push): Steal the pushed value instead of duplicating
+	it.
+	This will simplify the callers of push, who handled this "move"
+	approach themselves.
+	* data/c++.m4 (basic_symbol): Let -1, as kind, denote the fact that
+	a symbol is empty.
+	This is needed for instance when shifting the lookahead: yyla
+	is given as argument to "push", and its value is then moved on
+	the stack.  But then yyla must be declared "empty" so that its
+	destructor won't be called.
+	(basic_symbol::move): New.
+	Move the responsibility of calling the destructor from yy_destroy
+	to ~basic_symbol in the case of variants.
+	* data/lalr1.cc (stack_symbol_type): Now a derived class from its
+	previous value, so that we can add a constructor from a symbol_type.
+	(by_state): State -1 means empty.
+	(yypush_): Factor, by calling one overload from the other one, and
+	using the new semantics of stack::push.
+	No longer reclaim by hand the memory from rhs symbols, since now
+	that we store objects with proper destructors, they will be reclaimed
+	automatically.
+	Conversely, be sure to delete yylhs.
+	* tests/c++.at (C++ Variant-based Symbols): New "unit" test for
+	symbols.
+
+2013-01-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: formatting and comment changes
+	* data/c++.m4, data/lalr1.cc, data/stack.hh, data/variant.hh:
+	Fix indentation.
+	Fix some comments.
+
+2013-01-27  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	tests: add token declaration order test
+	* tests/conflicts.at: New test.
+
+2013-01-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-01-27  Valentin Tolmer  <nitnelave1@gmail.com>
+
+	grammar: preserve token declaration order
+	In a declaration %token A B, the token A is declared before B, but in %left
+	A B (or with %precedence or %nonassoc or %right), the token B was declared
+	before A (tokens were declared in reverse order).
+
+	* src/symlist.h, src/symlist.c (symbol_list_append): New.
+	* src/parse-gram.y: Use it instead of symbol_list_prepend.
+	* tests/input.at: Adjust expectations.
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve test group titles
+	* tests/local.at (AT_SETUP_STRIP): AT_SETUP does not behave properly
+	with new-lines in its argument.
+	Remove them.
+	Fix the handling of %define with quotes.
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	c: no longer require stdio.h when locations are enabled
+	Recent changes (in 2.7) introduced a dependency on both FILE and
+	fprintf, which are "available" only in %debug mode.  This was to
+	define yy_location_print_, which is used only in %debug mode by the
+	parser, but massively used by the test suite to output the locations
+	in yyerror.
+
+	Break this dependency: the test suite should define its own routines
+	to display the locations.  Eventually Bison will provide the user with
+	a means to display locations, but not yet.
+
+	* data/c.m4 (b4_yy_location_print_define): Use YYFPRINTF instead of
+	fprintf directly.
+	* data/yacc.c (b4_yy_location_print_define): Invoke it only in %debug
+	mode, so that stdio.h is included (needed for FILE*), and YYFPRINTF
+	is defined.
+
+	* tests/local.at (AT_YYERROR_DECLARE, AT_YYERROR_DEFINE): Declare
+	and define location_print and LOCATION_PRINT.
+
+	* tests/actions.at, tests/existing.at, tests/glr-regression.at,
+	* tests/input.at, tests/named-refs.at, tests/regression.at: Adjust
+	to use them.
+	Fix the expected line numbers (as the prologue's length has changed).
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	c: minor simplification in the debug code
+	* data/c.m4 (yy_symbol_print): Minor factoring.
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: display locations as C does
+	See commit 3804aa260b956dd012adde3894767254422a5fcf.
+
+	* data/location.cc (operator<<): Display location exactly as is
+	done in C skeletons.
+	* tests/local.at (AT_LOC_PUSHDEF, AT_LOC_POPDEF): Also define
+	AT_FIRST_LINE, AT_LAST_LINE, AT_FIRST_COLUMN, AT_LAST_COLUMN.
+	* tests/actions.at (Location Print): Also check C++ skeletons.
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: highlight empty right-hand sides
+	* tests/actions.at, tests/c++.at, tests/headers.at,
+	* tests/input.at: here.
+
+2013-01-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: prepare for 2.8
+	* NEWS: Restructure.
+	Name contributors.
+
+2013-01-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: generalize default main for api.namespace
+	* tests/local.at (AT_NAME_PREFIX): Also match api.namespace.
+	(AT_MAIN_DEFINE): Take it into account.
+	* tests/c++.at, tests/headers.at: Use AT_NAME_PREFIX.
+	(AT_CHECK_NAMESPACE): Rename as...
+	(AT_TEST): this.
+
+2013-01-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve factoring of the main function
+	* tests/local.at (AT_MAIN_DEFINE): If %debug is used, check if
+	-d/--debug is passed to the generated parser, and enable the traces.
+	Return exactly the result of yyparse, so that we can check exit code
+	2 too.
+	* tests/actions.at, tests/glr-regression.at, tests/regression.at:
+	Use AT_MAIN_DEFINE, helping AT_BISON_OPTION_PUSHDEFS where needed,
+	preferably to option -t.
+
+2013-01-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: factor the definition of main
+	With Théophile Ranquet.
+
+	* tests/local.at (AT_MAIN_DEFINE): New.
+	(AT_YYERROR_DEFINE): Improve formatting.
+	* tests/actions.at, tests/c++.at, tests/conflicts.at,
+	* tests/glr-regression.at, tests/input.at, tests/regression.at,
+	* tests/skeletons.at, tests/torture.at: Adjust.
+	* tests/c++.at: Add missing %skeleton for a PUSHDEFS, and a missing
+	PUSH/POPDEFS for another test.
+
+2013-01-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: minor refactoring
+	* tests/named-refs.at: Use AT_FULL_COMPILE where applicable.
+
+2013-01-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: avoid useless caret stuttering
+	* src/scan-code.l: When reporting a missing ending ';', don't display
+	the guilty action twice.
+
+2013-01-21  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	examples: please clang
+	* doc/bison.texi (calc++-scanner.ll): Don't output useless yyinput function.
+
+2013-01-21  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: better silencing of unused argument warnings
+	input.yy:35:44: error: unused parameter 'msg' [-Werror,-Wunused-parameter]
+	void yy::parser::error (std::string const& msg)
+	                                           ^
+
+	* tests/c++.at (C++ GLR parser identifier shadowing): Don't name unused
+	argument, use YYUSE instead of a direct cast to void.
+
+2013-01-21  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	bench: compatibility for Bison <= 2.7
+	There used to be a bug in some skeletons, which caused the expansion of
+	'yylval' and 'yylloc', generating these errors:
+
+	input.cc:547:16: error: expected ',' or '...' before '(' token
+	 #define yylval (yystackp->yyval)
+	                ^
+	input.yy:29:39: note: in expansion of macro 'yylval'
+	 int yylex (yy::parser::semantic_type *yylval)
+	                                       ^
+
+	This bug is fixed by 'skel: better aliasing of identifiers', but a workaround
+	is useful when benchmarking against older versions of Bison, which are still
+	affected by the bug.
+
+	* etc/bench.pl.in: Rename yylval to yylvalp and yylloc to yyllocp in base
+	grammar 'list'.
+
+2013-01-15  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: remove useless inlines
+	* data/c++.m4 (basic_symbol): Keep 'inline' in the prototypes, but don't
+	duplicate it in the implementation.
+	* data/variant.hh (variant): 'inline' is not needed when the implementation is
+	provided in the class definition.
+
+2013-01-15  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: m4 stylistic change
+	* data/c++.m4 (syntax_error): Fix the indentation of 'inline'.
+
+2013-01-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: silence warnings
+	* data/c++.m4 (basic_symbol<Base>::operator=): Unused parameter.
+	* tests/c++.at (C++ GLR parser identifier shadowing): Here too.
+	-
+
+2013-01-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	news: typos
+	* NEWS: Fix a typo, use YYSTYPE rather than semantic_type.
+
+2013-01-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-01-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: update copyright years
+	Suggested by Stefano Lattarini.
+	Run "make update-copyright".
+
+2013-01-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix VPATH issue
+	* Makefile.am (update-b4-copyright, update-package-copyright-year): Fix
+	path to build-aux.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	carets: document default activation
+	* NEWS: Announce it.
+	* doc/bison.texi: Adjust.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	carets: show them in more tests
+	* tests/input.at, tests/named-refs.at: Here.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	carets: activate by default
+	* src/getargs.c (feature_flag): Here.
+	* tests/local.at (AT_BISON_CHECK_, AT_BISON_CHECK_NO_XML): Deactivate carets
+	for the testsuite, by default.
+	* tests/input.at: Adjust the locations for command line definitions.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	variants: document move and swap
+	* data/variant.hh (swap): Doc.
+	(build): Rename as...
+	(move): This, more coherent naming with clearer meaning.
+	* data/c++.m4 (move): Adjust.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	c++: privatize variant blind copies
+	* data/variant.hh (variant, operator=): Make private.
+	* data/c++.m4 (operator=): New, to avoid needing a definition of that operator
+	for each class member (such as a possible variant).
+	* data/glr.cc, data/lalr.cc: Add the necessary include for the abort.
+
+2013-01-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: fix an unused argument issue
+	* data/glr.c (yyuserAction): "Use" yyrhslen, as in variant mode, we might
+	not use it.
+
+2013-01-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: style changes
+	* data/glr.c (yyuserAction): Use a size_t for sizes.
+
+2013-01-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	c.m4: style fix
+	* data/c.m4 (b4_parse_param_use): Add missing space before paren.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	skel: better aliasing of identifiers
+	* data/glr.c, data/yacc.c: Avoid emitting useless defines.
+	* data/glr.cc: Restore prefixes for epilogue.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	glr.cc: fatal if using api.token.ctor without variants
+	* data/glr.cc: Here.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	skel: correctly indent switch cases
+	* data/bison.m4 (b4_type_action_): Here.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	variants: assert changes
+	* data/variant.hh (swap): More asserts can't hurt. Don't perform useless swaps.
+	(build): Deactivate problematic asserts, pending further investigation.
+	(variant): Prohibit copy construction.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	lalr1.cc: use a vector for the symbol stack
+	* data/lalr1.cc: Adjust includes.
+	* data/stack.hh (push, pop): Use push_back and pop_back.
+	(operator []): Access vector from the end.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	lalr1.cc: change symbols implementation
+	A "symbol" groups together the symbol type (INT, PLUS, etc.), its
+	possible semantic value, and its optional location.  The type is
+	needed to access the value, as it is stored as a variant/union.
+
+	There are two kinds of symbols. "symbol_type" are "external symbols":
+	they have type, value and location, and are returned by yylex.
+	"stack_symbol_type" are "internal symbols", they group state number,
+	value and location, and are stored in the parser stack.  The type of
+	the symbol is computed from the state number.
+
+	The class template symbol_base_type<Exact> factors the code common to
+	stack_symbol_type and symbol_type.  It uses the Curiously Recurring
+	Template pattern so that we can always (static_) downcast to the exact
+	type.  symbol_base_type features value and location, and delegates the
+	handling of the type to its parameter.
+
+	When trying to generalize the support for variant, a significant issue
+	was revealed: because stack_symbol_type and symbol_type _derive_ from
+	symbol_base_type, the type/state member is defined _after_ the value
+	and location.  In C++ the order of the definition of the members
+	defines the order in which they are initialized, things go backward:
+	the value is initialized _before_ the type.  This is wrong, since the
+	type is needed to access the value.
+
+	Therefore, we need another means to factor the common code, one that
+	ensures the order of the members.
+
+	The idea is simple: define two (base) classes that code the symbol
+	type ("by_type" codes it by its type, and "by_state" by the state
+	number).  Define basic_symbol<Base> as the class template that
+	provides value and location support.  Make it _derive_ from its
+	parameter, by_type or by_state.  Then define stack_symbol_type and
+	symbol_type as basic_symbol<by_state>, basic_symbol<by_type>.  The
+	name basic_symbol was chosen by similarity with basic_string and
+	basic_ostream.
+
+	* data/c++.m4 (symbol_base_type<Exact>): Remove, replace by...
+	(basic_symbol<Base>): which derives from its parameter, one of...
+	(by_state, by_type): which provide means to retrieve the actual type of
+	symbol.
+	(symbol_type): Is now basic_symbol<by_type>.
+	(stack_symbol_type): Is now basic_symbol<by_state>.
+	* data/lalr1.cc: Many adjustments.
+
+2013-01-11  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	bench: add %b directive to use a specific Bison
+	For example,
+	  $ bench.pl -v '%s lalr1.cc & %d variant & ( %b ~/old-bison/bin/bison
+	    | %b ~/new-bison/bin/bison )' -g list -i 10000
+
+	* etc/bench.pl.in: Here.
+
+2013-01-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2013-01-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: use deffn to declare the list of %define variables
+	* doc/bison.texi (%define Summary): Use @deffn instead of @table, it
+	spares a lot of width, especially in PDF, and looks nicer in the other
+	formats too.
+	It is also more consistent with the rest of the document.
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: minor completion and fixes
+	* doc/bison.texi (%define Summary): Provide more history to some
+	variables.
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	java: stype is obsoleted by api.value.type
+	This is consistent with the other %define variable names.
+
+	* data/java.m4: Use api.value.type instead of stype.
+	* doc/bison.texi, NEWS: Document that change.
+	* src/muscle-tab.c (muscle_percent_variable_update): Provide backward
+	compatibility.
+	* tests/java.at: Adjust.
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix html build
+	* doc/local.mk (bison.html): Fix dependencies.
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	todo: remove erroneous task
+	* tests/input.at: Check that there are no warnings about stray $ and @
+	in the epilogue.
+	* TODO: Remove the correponding task.
+
+2012-12-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	syncline: one line is enough
+	So far we were issuing two lines for each syncline change:
+
+	  /* Line 356 of yacc.c  */
+	  #line 1 "src/parse-gram.y"
+
+	This is a lot of clutter, especially when reading diffs, as these
+	lines change often.  Fuse them into a single, shorter, line:
+
+	  #line 1 "src/parse-gram.y" /* yacc.c:356  */
+
+	* data/bison.m4 (b4_syncline): Issue a single line.
+	Comment improvements.
+	(b4_sync_start, b4_sync_end): Issue a shorter comment.
+	* data/c++.m4 (b4_semantic_type_declare): b4_user_code must be
+	on its own line as it might start with a "#line" directive.
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: restore ANSI 89 compliance
+	* data/bison.m4, src/conflicts.c, src/files.c, src/output.c,
+	* src/symtab.c: Use /* ... */ comments only.
+	Declare variables before statements.
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	graph: minor simplification
+	* src/gram.c (print_lhs): Use %*s to indent.
+	* src/print_graph.c (print_lhs): Use obstack_printf.
+	Became simple enough to be inlined in...
+	(print_core): here.
+	Use a "rule*" instead of an index in "rules[]".
+
+2012-12-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	closure, gram: add missing const
+	* src/closure.h, src/closure.c, src/gram.h, src/gram.c: Add some missing
+	const where appropriate.
+
+2012-12-27  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	carets: properly display when no line feed is present
+	* src/location.c (location_caret): finish the line with one whether or not it
+	is present in input. Rewrite code without getline.
+	(cleanup_caret): Reset the caret_info global.
+	* bootstrap.conf: No longer require getline.
+
+2012-12-27  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	scanner: reintroduce unput for missing end tokens
+	Unput was no longer used since a POSIX-compatiblity issue with Flex 2.5.31,
+	which has been adressed in newer versions of Flex.  See this discussion:
+	<http://lists.gnu.org/archive/html/bug-bison/2003-04/msg00029.html>
+
+	This partially reverts commit aa4180418fff518198e1b0f2c43fec6432210dc7.
+
+	* src/scan-gram.l (unexpected_end): Here.
+	* tests/input.at: Adjust for new order of error reports.
+
+2012-12-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: scope reduction
+	* src/tables.c (default_goto): Make it easier to understand.
+
+2012-12-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-12-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: fix comments
+	The commit 38de4e570fdc7c8db9633c3b2054e565d8c1c6b9 underquoted the
+	content of the comments, which resulted in losing square brackets in
+	the comments.  Besides, some other invocations were underquoting the
+	effective arguments.
+
+	* data/c.m4 (b4_comment_): Properly quote the comment.
+	(b4_comment_, b4_comment): Move to...
+	* data/c-like.m4: here, so that...
+	* data/java.m4: can use it instead of its own copy.
+	* data/bison.m4 (b4_integral_parser_tables_map): Fix some comments.
+
+	* data/lalr1.cc, data/lalr1.java, data/yacc.c: Comment fixes.
+
+	* data/lalr1.cc: Reorder a bit to factor some CPP directives.
+
+2012-12-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: which -> whose
+	Apparently, I was confusing both.
+
+	* data/bison.m4, data/c.m4, data/glr.c, data/lalr1.cc, data/yacc.c:
+	Use "whose" where appropriate.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: scope reduction
+	* src/tables.c (matching_state): here.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: scope reduction
+	* src/tables.c (token_actions): here.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: scope reduction
+	* src/tables.c (save_row): here.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: scope reduction
+	* src/tables.c (save_column, pack_vector): Reduce the scope to
+	emphasize the structure of the code.
+	Rename the returned value "res" to make understanding easier.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: use size_t where appropriate
+	These changes aim at making the code easier to understand.
+
+	* src/tables.c (tally): This is a size, always >= 0, so make it
+	a size_t.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tables: style changes
+	* src/tables.c: Prefer < to >.
+	Fix/complete some comments.
+	Remove useless parens.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: no longer call yylex via a CPP macro
+	The YYLEX existed only to support YYLEX_PARAM, which is now removed.
+	This macro was a nuisance, since incorrect yylex calls where pointed
+	the macro _use_, instead of its definition.
+
+	* data/c.m4 (b4_lex_formals, b4_lex): New.
+	* data/glr.c, data/yacc.c: Use it.
+	* data/lalr1.cc (b4_lex): New.
+	Use it.
+
+	squash! skeletons: no longer call yylex via a CPP macro
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	YYLEX_PARAM: drop support
+	* data/yacc.c, doc/bison.texi: Remove YYLEX_PARAM support.
+	* NEWS: Document it.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	examples: minor improvements
+	* examples/variant.yy: Don't use debug_stream(), obsoleted.
+	Use <*>.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: factor comments about symbols
+	* data/variant.hh (b4_char_sizeof_): Rename as...
+	* data/bison.m4 (b4_symbol_tag_comment): this.
+	Provide more documentation about b4_symbol_*.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	c: improve the definition of public types
+	* data/c.m4 (b4_token_enum): Improve comments.
+	(b4_value_type_define, b4_location_type_define): New, extracted
+	from...
+	(b4_declare_yylstype): here.
+	Separate the typedefs from the union/struct definitions.
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: update variant usage
+	* doc/bison.texi, examples/variant.yy: Use "%define api.value.type variant",
+	instead of "%define variant".
+
+2012-12-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: check the "%define variant" is deprecated.
+	* tests/input.at: Rename some AT_SETUP to avoid that
+	AT_SETUP_STRIP thinks they contain %define directives.
+	("%define" backward compatibility): Merge tests together
+	to speed up the test suite, and to make maintenance easier
+	(multiple AT_CHECK means multiple runs of the test suite to
+	be sure to have updated all the error messages).
+	Check the "%define variant" is properly obsoleted.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	%define variables: support value changes in deprecation
+	* src/muscle-tab.c (define_directive): Be robust to "assignment"
+	containing '='.
+	(muscle_percent_variable_update): Upgrade "variant" to "api.value.type".
+	Support such upgrade patterns.
+	Adjust callers.
+
+	* data/bison.m4: Use api.value.type for variants.
+	* tests/c++.at: Adjust tests.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: treat obsolete %define variable names as obsolete directives
+	Instead of
+
+	  warning: deprecated %define variable name: 'namespace', use 'api.namespace' [-Wdeprecated]
+
+	display (in -fno-caret mode):
+
+	  warning: deprecated directive: '%define namespace foo', use '%define api.namespace foo' [-Wdeprecated]
+
+	and (in -fcaret mode):
+
+	  warning: deprecated directive, use '%define api.namespace toto' [-Wdeprecated]
+	   %define namespace toto
+	           ^^^^^^^^^
+
+	This is in preparation of cases where not only the variable is
+	renamed, but the values are too:
+
+	  warning: deprecated directive: '%define variant', use '%define api.value.type variant' [-Wdeprecated]
+
+	* src/muscle-tab.c (define_directive): New.
+	(muscle_percent_variable_update): Take the value as argument, and use it
+	in the diagnostics.
+	Loop with a pointer instead of an index.
+	* tests/input.at (%define backward compatibility): Adjust.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: factor the deprecated directive message
+	* src/complain.h, src/complain.c (deprecated_directive): New.
+	* src/muscle-tab.c: Use it.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	variant: produce stable results
+	Improve the output by ensuring a well defined order for type switches.
+
+	* src/uniqstr.h: Style changes for macro arguments.
+	(UNIQSTR_CMP): Replace by...
+	(uniqstr_cmp): this.
+	* src/uniqstr.c (uniqstr_cmp): New.
+	Produce well defined results.
+	* src/output.c: Use it.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	uniqstr: formatting changes
+	* src/uniqstr.h: Sort functions by object type.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: fix an error message
+	* data/bison.m4 (b4_flag_if): Display the invalid value.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: improve titles
+	* tests/local.at (AT_SETUP_STRIP): New.
+	(AT_SETUP): Use it to shorten the test titles: remove %defines, %language
+	and %skeleton whose arguments suffice.
+	* tests/synclines.at: Use more precise AT_SETUP.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: comment changes
+	* data/c++.m4, data/glr.cc, data/lalr1.cc: Convert some /* ... */
+	comments to //.
+
+2012-12-23  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: use // comments in the output
+	This is mostly used for the license header, the synclines, and the
+	generated tables:
+
+	-  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
+	-     symbol of state STATE-NUM.    */
+	+  // STOS_[STATE-NUM] -- The (internal number of the) accessing
+	+  // symbol of state STATE-NUM.
+	   static const unsigned char yystos_[];
+
+	* data/c.m4: Comment changes.
+	(b4_comment_): Expand the text argument.
+	Before this change, we were actually formatting M4 code as a
+	C comment, and then expand it.
+	(b4_comment): Fix the closing of comments: there is no reason to
+	add the (line) prefix before the closing "*/".
+	* data/c++.m4 (b4_comment): New.
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: disable sc_prohibit_test_backticks
+	* cfg.mk: here.
+	And fix typos.
+	Reported by Stefano Lattarini.
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: more syntax-checks
+	* cfg.mk (sc_prohibit_tab_based_indentation, sc_prohibit_test_backticks)
+	(sc_preprocessor_indentation, sc_space_before_open_paren): New,
+	stolen from Coreutils (2e9f5ca4ebbbdb6a9fa2dd3d5add3f7720a172d7).
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	debug: no longer generate tabs
+	* src/closure.c, src/derives.c, src/nullable.c, tests/sets.at: Use
+	spaces.
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	style changes: run cppi
+	Run it in src/ for a start.
+
+	* src/AnnotationList.h, src/InadequacyList.h, src/Sbitset.h,
+	* src/closure.c, src/complain.h, src/flex-scanner.h, src/getargs.h,
+	* src/gram.h, src/graphviz.h, src/ielr.h, src/location.h,
+	* src/muscle-tab.h, src/named-ref.h, src/relation.h, src/scan-code.h,
+	* src/state.h, src/symtab.h, src/system.h, src/uniqstr.h:
+	Reindent preprocessor directives.
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	style changes: untabify
+	* data/xslt/xml2dot.xsl, data/xslt/xml2text.xsl, m4/flex.m4,
+	* tests/glr-regression.at, tests/torture.at: here.
+
+2012-12-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: be robust to set -e.
+	* examples/test (run): here.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	variants: prohibit simple copies
+	The "variant" structure provides a means to store, in a typeless way,
+	C++ objects.  Manipulating it without provide the type of the stored
+	content is doomed to failure.  So provide a means to copy in a type
+	safe way, and prohibit typeless assignments.
+
+	* data/c++.m4 (symbol_type::move): New.
+	* data/lalr1.cc: Use it.
+	* data/variant.hh (b4_variant_define): Provide variant::copy.
+	Let variant::operator= abort.
+	We cannot undefine it, yet, as it is still uses by the implicit
+	assigment in symbols, which must also be disabled.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	variant: more assertions
+	Equip variants with more checking code.  Provide a means to request
+	includes.
+
+	* data/variant.hh (b4_variant_includes): New.
+	* data/lalr1.cc: Use it.
+	* data/variant.hh (variant::built): Define at the end, as a private member.
+	(variant::tname): New.
+	Somewhat makes "built" useless, but let's keep both for a start, in
+	case using "typeinfo" is considered unacceptable in some environments.
+	Fix some formatting issues.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: fix output directives
+	* data/lalr1.cc, data/location.cc, data/glr.cc: Use b4_output_begin.
+	Broken during a merge.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	yacc.c: style changes
+	* data/yacc.c (b4_lex_param): Provide arguments with a name.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: simplifying the handling of parse/lex params
+	The fact that glr.cc uses glr.c makes the handling of parse params
+	more complex, as the parser object of glr.cc must be passed to the
+	parse function of glr.c.  Yet not all the functions need access to
+	the parser object.
+
+	* data/glr.cc (b4_parse_param_wrap): New.
+	Use them.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr: rename lex params
+	* data/glr.c (b4_lex_param): Rename as...
+	(b4_lex_formals): this, for consistency.
+	Provide arguments a name.
+	(LEX): Adjust.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: move function declaration earlier
+	* data/glr.c (yypstack, yypdumpstack): Declare earlier, to make
+	it easier to call them from other functions.
+
+2012-12-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	%define variables: backward compatibility
+	* src/muscle-tab.c (muscle_percent_variable_update): Accept lex_symbol.
+	Reported by Roland Levillain.
+
+2012-12-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	diagnostics: improve -fcaret for list of accepted values
+	Instead of
+
+	  input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+	   %define api.push_pull "neither"
+	           ^^^^^^^^^^^^^
+	  input.y:1.9-21:     accepted value: 'pull'
+	   %define api.push_pull "neither"
+	           ^^^^^^^^^^^^^
+	  input.y:1.9-21:     accepted value: 'push'
+	   %define api.push_pull "neither"
+	           ^^^^^^^^^^^^^
+	  input.y:1.9-21:     accepted value: 'both'
+	   %define api.push_pull "neither"
+	           ^^^^^^^^^^^^^
+
+	report
+
+	  input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither'
+	   %define api.push_pull "neither"
+	           ^^^^^^^^^^^^^
+	  input.y:1.9-21:     accepted value: 'pull'
+	  input.y:1.9-21:     accepted value: 'push'
+	  input.y:1.9-21:     accepted value: 'both'
+
+	* src/complain.h (no_caret): New.
+	* src/complain.c (error_message): Use it.
+	* src/muscle-tab.c (muscle_percent_define_check_values): Use it.
+	* src/scan-skel.l (flag): Ditto.
+	* tests/input.at: Adjust and check.
+
+2012-12-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: simplify the handling of default api.location.type
+	* data/bison.m4 (b4_bison_locations_if): New.
+	* data/glr.cc, data/lalr1.cc: Use it.
+
+2012-12-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: address syntax-check failures
+	* cfg.mk: Ignore failures in timevar (uses GCC style configuration,
+	not gnulib's).
+	* doc/local.mk: Space changes.
+	* lib/main.c, tests/calc.at: Remove useless HAVE_ tests.
+
+2012-12-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	remove duplicate definitions
+	* src/system.h: here, inherited from a merge.
+
+2012-12-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: style changes
+	* tests/glr-regression.at: Issue yyerror before yylex.
+
+2012-12-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix dependencies
+	* doc/local.mk: here.
+
+2012-12-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: style fixes
+	* doc/bison.texi: Add a couple of missing @var and @code.
+
+2012-12-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	doc: fix build dependencies
+	Suggested by Nick Bowler
+	<http://lists.gnu.org/archive/html/bug-automake/2012-12/msg00001.html>
+
+	* doc/local.mk: Avoid overwriting Automake's rules.
+
+2012-12-14  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'origin/maint'
+	* origin/maint:
+	  maint: credit Wojciech Polak
+	  maint: post-release administrivia
+	  version 2.7
+	  yacc.c: scope reduction
+	  tests: C90 compliance
+	  fix C90 compliance
+	  glr.c: scope reduction
+	  gnulib: update
+
+2012-12-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	symtab: add missing initializations
+	* src/symtab.c (semantic_type_new): Here.
+
+2012-12-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	symtab: fix some leaks
+	* src/symlist.c (symbol_list_free): Deep free it.
+	* src/symtab.c (symbols_free, semantic_types_sorted): Free it too.
+	(symbols_do, sorted): Call by address.
+
+2012-12-14  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: remove use of PARSE_PARAM
+	* tests/header.at: Here.
+
+2012-12-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: credit Wojciech Polak
+	* NEWS, THANKS: He is the author of XML support (including XSLTs).
+
+2012-12-12  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-12-12  Akim Demaille  <akim@lrde.epita.fr>
 
 	version 2.7
@@ -32,6 +15666,29 @@
 
 	gnulib: update
 
+2012-12-10  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  news: prepare for forthcoming release
+	  doc: explain how mid-rule actions are translated
+	  error: use better locations for unused midrule values
+	  doc: various minor improvements and fixes
+	  tests: ignore more useless compiler warnings
+	  tests: be robust to C being compiled with a C++11 compiler
+	  build: beware of Clang++ not supporting POSIXLY_CORRECT
+	  maint: post-release administrivia
+	  version 2.6.90
+	  build: fix syntax-check error.
+	  cpp: simplify the Flex version checking macro
+	  news: improve the carets example and fix a typo
+	  cpp: improve the Flex version checking macro
+	  carets: improve the code
+	  maint: update news
+	  build: keep -Wmissing-declarations and -Wmissing-prototypes for modern GCCs
+	  build: drop -Wcast-qual
+	  gnulib: update
+
 2012-12-09  Akim Demaille  <akim@lrde.epita.fr>
 
 	news: prepare for forthcoming release
@@ -200,6 +15857,19 @@
 
 2012-12-06  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  misc: pacify the Tiny C Compiler
+	  cpp: make the check of Flex version portable
+	  misc: require getline
+	  c++: support wide strings for file names
+	  doc: document carets
+	  tests: enhance existing tests with carets
+	  errors: show carets
+	  getargs: add support for --flags/-f
+
+2012-12-06  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
 	misc: pacify the Tiny C Compiler
 	* src/graphviz.c (conclude_red): Remove a useless return.
 
@@ -262,12 +15932,26 @@
 	* src/getargs.c (feature_flag): New global.
 	* src/getargs.h (feature): New enum.
 
+2012-12-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  getargs: don't label --language/-l as experimental
+	  getargs: fix the locations of command-line input
+	  errors: indent missing action code semicolon warning
+
 2012-12-04  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	getargs: don't label --language/-l as experimental
 	* NEWS: Announce it.
 	* doc/bison.texi, src/getargs.c (usage): Here.
 
+2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: minor improvements
+	* tests/calc.at (AT_CHECK_SPACES): To speed up, accept several files
+	at once, and factor some calls.
+
 2012-12-03  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	getargs: fix the locations of command-line input
@@ -284,6 +15968,18 @@
 
 2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  parser: accept #line NUM
+	  m4: use a safer pattern to enable/disable output
+	  tests: beware of gnulib's need for config.h
+	  gnulib: update
+	  yacc.c, glr.c: check and fix the display of locations
+	  formatting changes
+	  glr.c: remove stray macro
+
+2012-12-03  Akim Demaille  <akim@lrde.epita.fr>
+
 	parser: accept #line NUM
 	* src/scan-gram.l (scanner): Accept '#line NUM'.
 	(handle_syncline): Adjust to the possible missing file name.
@@ -346,6 +16042,16 @@
 
 2012-11-29  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  doc: minor fixes
+	  doc: improve the index
+	  doc: introduce api.pure full, rearrange some examples
+	  yacc.c: support "%define api.pure full"
+	  local.at: improvements
+
+2012-11-29  Akim Demaille  <akim@lrde.epita.fr>
+
 	doc: minor fixes
 	* doc/bison.texi: Use stderr for error messages.
 	Meta-variables are usually spelled in lower case.
@@ -380,6 +16086,12 @@
 	* test/calc.at (Simple LALR Calculator): Modernize.
 	* tests/local.at (AT_YYERROR_ARG_LOC_IF): Adjust.
 
+2012-11-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: check variants without locations
+	* tests/c++.at (Variants): Support non-use of locations, and
+	check its support.
+
 2012-11-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	local.at: improvements
@@ -389,6 +16101,39 @@
 
 2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
 
+	tests: use -fno-strict-aliasing with variants
+	Reported by Théophile Ranquet.
+
+	* configure.ac (NO_STRICT_ALIAS_CXXFLAGS): New.
+	* tests/c++.at, tests/atlocal.in, examples/local.mk: Use it.
+
+2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: remove leftover
+	* tests/atlocal.in: Remove duplicate handling of --compile-c-with-cxx.
+
+2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: use %precedence instead of nonassoc when associativity is not wanted
+	* doc/bison.texi: here.
+	Formatting changes in some grammars.
+	Fix a %prec into %precedence.
+
+2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  yacc.c: always initialize yylloc
+	  scanner: issue a single error for groups of invalid characters
+	  tests: formatting changes
+	  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
+	  scanner: use explicit "ignore" statements
+
+2012-11-26  Akim Demaille  <akim@lrde.epita.fr>
+
 	Merge remote-tracking branch 'origin/branch-2.6' into maint
 	* origin/branch-2.6:
 	  yacc.c: always initialize yylloc
@@ -458,6 +16203,17 @@
 	scanner: use explicit "ignore" statements
 	* src/scan-gram.l: here.
 
+2012-11-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: close files in glr-regression
+	  xml: match DOT output and xml2dot.xsl processing
+	  xml: factor xslt space template
+	  graph: fix a memory leak
+	  xml: documentation
+	  output: capitalize State
+
 2012-11-12  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	tests: close files in glr-regression
@@ -507,6 +16263,24 @@
 
 2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
 
+	tests: fix syntax-check errors
+	Reported by Théophile Ranquet.
+
+	* tests/c++.at: Use AT_PARSER_CHECK.
+	Avoid using "strcmp", which triggers an error from syntax-check.
+
+2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: address syntax-check errors.
+	  tests: use valgrind where appropriate
+	  tests: use valgrind where appropriate
+	  tests: don't expect $EGREP to support -w
+	  tests: more possible error compiler messages for "#error"
+
+2012-11-12  Akim Demaille  <akim@lrde.epita.fr>
+
 	maint: address syntax-check errors.
 	* cfg.mk: Ignore the "error" call in tests/c++.at, it is not to be
 	translated.
@@ -560,6 +16334,22 @@
 
 2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge branch 'maint'
+	* origin/maint:
+	  regen
+	  maint: post-release administrivia
+	  version 2.6.5
+	  regen
+	  tests: syntax-check
+	  tests: beware of compilers that do not support POSIXLY_CORRECT
+	  gnulib: update
+
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-11-08  Akim Demaille  <akim@lrde.epita.fr>
+
 	Merge branch 'branch-2.6' into maint
 	* origin/branch-2.6:
 	  maint: post-release administrivia
@@ -613,6 +16403,32 @@
 
 2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint: (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
+	  ...
+
+2012-11-06  Akim Demaille  <akim@lrde.epita.fr>
+
 	Merge branch 'branch-2.6' into maint
 	* origin/branch-2.6: (24 commits)
 	  tests: calc: modernize the use of locations
@@ -760,6 +16576,37 @@
 
 2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
 
+	lalr1.cc: rename lex_symbol as api.token.constructor
+	* data/bison.m4 (b4_lex_symbol_if): Rename as...
+	(b4_token_ctor_if): this.
+	Depend upon api.token.constructor.
+	* data/c++.m4, data/lalr1.cc: Adjust.
+	* doc/bison.texi: Fix all the occurrences of lex_symbol.
+	* etc/bench.pl.in: Adjust.
+	* examples/variant.yy: Likewise.
+
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS):
+	Handle AT_TOKEN_CTOR_IF.
+	* tests/c++.at: Adjust to using api.token.constructor and AT_TOKEN_CTOR_IF.
+	Simplify the test of both build call styles.
+	(AT_CHECK_VARIANTS): Rename as...
+	(AT_TEST): this.
+	And undef when done.
+
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	examples: simplify/improve
+	* examples/variant.yy: Put yylex in yy::, and simplify accordingly.
+	Minor formatting changes.
+
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	bison.m4: support b4_*_if macros whose name differ from their variable
+	* data/bison.m4 (b4_percent_define_if_define_, b4_percent_define_if_define):
+	Accept a second argument.
+
+2012-11-01  Akim Demaille  <akim@lrde.epita.fr>
+
 	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
@@ -819,6 +16666,90 @@
 	Therefore, remove the initialization of yylloc's field.
 	* data/glr.c: Likewise.
 
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	graphs: fix spacing refactoring
+	* src/print_graph.c (print_lhs, print_core): Here.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: make deprecation tests more specific
+	* tests/input.at (Deprecated directives): Here, don't generate unrelated errors
+	or warnings.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: fix AT_BISON_CHECK_WARNINGS_ stderr rewriting
+	* tests/input.at (Deprecated directives): Avoid spurious error.
+	* tests/locat.at (AT_BISON_CHECK_WARNINGS): Adjust for recent changes.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	scan-skel.l: consider m4 notes as related to "complaint" errors
+	* src/scan-skel.l (flag): Here.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	warnings: distinguish context information based on warning type
+	* src/scan-code.l (show_sub_message, show_sub_messages): Take a new warnings
+	argument.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	warnings: fix early exit of warnings treated as errors
+	Treating warnings as errors caused Bison to exit earlier than needed, making it
+	hide warnings that would have been printed had -Werror not been set.
+
+	Also, fix a bug that caused some context information of errors to not be
+	shown.
+
+	* src/complain.c (complaint_issued): Rename as...
+	(complaint_status): This, and change its type from boolean to
+	* src/complain.h (err_status): This, new enumeration.
+	* src/main.c (main): Adjust (only finish early if an actual complaint was
+	risen, not a mere warning treated an error).
+	* src/reader.c: Adjust.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	tests: reindent for legibility
+	* tests/local.at (AT_BISON_CHECK_WARNINGS_): Here.
+
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: fix Texinfo compilation
+	* doc/local.mk: fix dependencies.
+
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint: (46 commits)
+	  doc: minor style change
+	  maint: use gendocs's new -I option
+	  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
+	  maint: post-release administrivia
+	  version 2.6.4
+	  regen
+	  2.6.4: botched 2.6.3
+	  maint: post-release administrivia
+	  version 2.6.3
+	  gnulib: update
+	  tests: check %no-lines
+	  NEWS: warnings with clang
+	  ...
+
 2012-10-26  Akim Demaille  <akim@lrde.epita.fr>
 
 	Merge branch 'branch-2.6' into maint
@@ -889,6 +16820,17 @@
 	Adjust dependencies.
 	* src/reader.h: Don't use "named_ref" as a formal argument name.
 
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	misc: document TESTSUITEFLAGS in README-hacking
+	* README-hacking: Document -j and -k flags.
+
+2012-10-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	deprecation: add tests
+	* tests/input.at (Deprecated directives warn, Non-deprecated
+	directives don't, Unput doesn't mess up locations): New tests.
+
 2012-10-25  Akim Demaille  <akim@lrde.epita.fr>
 
 	tests: address a warning from GCC 4.4
@@ -937,6 +16879,17 @@
 	fix comment
 	* data/c.m4 (b4_YYDEBUG_define): here.
 
+2012-10-24  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	regen
+
+2012-10-24  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	deprecation: issue warnings in scanner
+	* src/parse-gram.y: Move the handling of (three) deprecated constructs ...
+	* src/scan-gram.l: ...Here, and issue warnings.
+	(DEPRECATED): New.
+
 2012-10-23  Akim Demaille  <akim@lrde.epita.fr>
 
 	Merge branch 'branch-2.6' into maint
@@ -1259,9 +17212,57 @@
 
 2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
 
+	news: spell check
+	* NEWS: here.
+
+2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'maint'
+	* origin/maint:
+	  java: use api.location.type and api.position.type
+
+2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	variables: use singular in %define variable names
+	See http://lists.gnu.org/archive/html/bison-patches/2012-02/msg00045.html
+
+	* doc/bison.texi, src/lalr.c, src/main.c, src/muscle-tab.c,
+	* src/print.c, src/reader.c, src/tables.c, tests/conflicts.at,
+	* tests/input.at, tests/reduce.at:
+	s/lr.default-reductions/lr.default-reduction/
+	s/lr.keep-unreachable-states/lr.keep-unreachable-state/.
+	* NEWS: Document.
+
+2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
 	java: fixes
 	* data/java.m4: Remove stray M4 characters.
 
+2012-10-16  Akim Demaille  <akim@lrde.epita.fr>
+
+	api.tokens.prefix -> api.token.prefix
+	See
+	http://lists.gnu.org/archive/html/bison-patches/2012-02/msg00045.html
+	Note that api.tokens.prefix has not been released, yet.
+
+	* NEWS, data/bison.m4, doc/bison.texi, tests/c++.at,
+	* tests/calc.at, tests/java.at, tests/local.at: Do it.
+	* src/muscle-tab.c (muscle_percent_variable_update): Ensure
+	backward compatibility.
+
+2012-10-15  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	scan-skel.l: shift complain_args arguments
+	Because argv[0] is never used, shift it out from the argument list.
+
+	* src/complain.c (complain_args): Here.
+	* src/scan-skel.l (at_complain): Adjust argv and argc.
+
+2012-10-15  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	scan-skel.l: formatting changes
+	* src/scan-skel.l (fail_for_at_directive_too_few_args): Here.
+
 2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
 
 	java: use api.location.type and api.position.type
@@ -1270,6 +17271,23 @@
 
 2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge branch 'maint'
+	* origin/maint:
+	  tests: check %no-lines
+	  tests: minor simplification
+	  graphs: stylistic changes.
+	  graphs: minor style changes
+	  graphs: show reductions
+	  graphs: style: prefix state number with "state"
+	  graphs: style: use left justification for states
+	  graphs: style: prefix rules and change shapes
+	  obstack: import obstack_finish0 from master
+	  c++: api.location.type
+	  muscles: a function for backward compatibility
+	  maint: more macros
+
+2012-10-12  Akim Demaille  <akim@lrde.epita.fr>
+
 	tests: check %no-lines
 	* tests/synclines.at: here.
 
@@ -1332,6 +17350,29 @@
 	obstack: import obstack_finish0 from master
 	* src/system.h (obstack_finish0): New.
 
+2012-10-11  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'maint'
+	* origin/maint:
+	  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
+	  lalr1.cc: document exception safety
+	  lalr1.cc: check exception safety of error handling
+	  lalr1.cc: check (and fix) %printer exception safety
+	  lalr1.cc: check (and fix) %initial-action exception safety
+	  lalr1.cc: fix exception safety
+	  lalr1.cc: check exception safety.
+	  lalr1.cc: indentation fixes.
+	  lalr1.cc: don't leave macros define to nothing
+	  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
+
 2012-10-09  Akim Demaille  <akim@lrde.epita.fr>
 
 	c++: api.location.type
@@ -1547,6 +17588,69 @@
 
 2012-10-04  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge branch 'maint'
+	* origin/maint:
+	  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
+
+2012-10-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	scan-skel: use the scanner to reject all invalid directives
+	* src/scan-skel.l: Use a simpler and more consistent pattern escaping
+	scheme.
+	Catch all the invalid directives here by just removing the previous
+	catch-all-but-alphabetical rule.
+
+2012-10-04  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	scan-skel: recognize the @directives directly in scanner
+	* src/scan-skel.l (at_directive, at_init): New.
+	(at_ptr): New, function pointer used to call the right at_directive
+	function (at_basename, etc.).
+	(outname): Rename as...
+	(out_name): this, for consistency with out_lineno.
+
+2012-10-04  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	scan-skel: split @directive functions
+	* src/scan-skel.l (at_directive_perform): Split as...
+	(at_basename, at_complain, at_output): these.
+
+2012-10-04  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	errors: support indented context info in m4 macros
+	* TODO: Address the issue, so remove it.
+	* data/bison.m4: Use b4_error with [[note]] rather than a complain_at
+	for context information.
+	* src/complain.c (complain_args): Take an additional argument, an
+	indentation pointer, to allow the dispatching of context information.
+	* src/complain.h (complain_args): Adjust prototype.
+	* src/scan-skel.l (at_directive_perform): Recognize the new @note mark.
+	* tests/input.at: Adjust.
+
+2012-10-04  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	errors: factor b4_error @directives
+	Instead of @complain, @warn, and @fatal, use a unique @complain
+	directive. This directive's first argument is "complain", "warn", etc.
+
+	* data/bison.m4 (m4_error): Here.
+	* src/scan-skel.l (at_directive_perform): Adjust.
+	(flag): Replace the switch by safer and more explicit if branches.
+
+2012-10-04  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	errors: pointerize complain_at_indent
+	* src/complain.c (complain_at_indent): Rename as...
+	(complaint_indent): This, and take the location as a pointer.
+	* src/complain.h, src/muscle-tab.c, src/reader.c, src/scan-code.l,
+	src/symtab.c: Adjust.
+
+2012-10-04  Akim Demaille  <akim@lrde.epita.fr>
+
 	maint: word changes
 	* README-hacking (Typical errors): Improve wording.
 
@@ -1586,6 +17690,97 @@
 
 2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
 
+	build: use gnulib's non-recursive-gnulib-prefix-hack
+	Suggested by Jim Meyering.
+
+	* etc/prefix-gnulib-mk: Remove, as it is now provided by...
+	* bootstrap.conf (modules): the non-recursive-gnulib-prefix-hack module.
+	* build-aux/.gitignore, configure.ac, m4/.gitignore: Adjust.
+
+2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	warnings: simplify the m4 interface
+	* data/bison.m4 (error_at): Replace...
+	(error): this.
+	(b4_warn, b4_complain, b4_fatal): Bounce to their _at equivalent,
+	with empty location.
+	* src/scan-skel.l (at_directive_perform): Simplify accordingly.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	warnings: separate flags_argmatch
+	This function is now a mere iterator that calls flag_argmatch,
+	a new function, that matches a single option parameter.
+
+	* src/getargs.c (flag_argmatch): New, taken from...
+	(flags_argmatch): Here.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	warnings: refactoring
+	The code here was too confusing, this seems more natural.
+
+	* src/complain.c (error_message): Move the indentation check and the category
+	output to complains. Also, no longer take a 'warnings' argument.
+	(complains): Factor calls to error_message.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	formatting changes
+	* src/complain.c: Here.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	warnings: organize variadic complaints call
+	Move the dispatch of variadic complains to complain.c, rather than do
+	it in a scanner.
+
+	* src/complain.h, src/complain.c (complain_args): New.
+	* src/scan-skel.l (at_directive_perform): Use it.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	warnings: fusion of complain and complain_at
+	These functions are very similar, and keeping them seperate makes
+	future improvements difficult, so merge them.
+
+	This impacts 89 calls.
+
+	* src/bootstrap.conf: Adjust.
+	* src/complain.c (complain, complain_at): Merge into...
+	(complain): this.
+	(complain_args): Adjust.
+	* src/complain.h, src/conflicts.c, src/files.c, src/getargs.c,
+	* src/gram.c, src/location.c, src/muscle-tab.c, src/parse-gram.y,
+	* src/reader.c, src/reduce.c, src/scan-code.l, src/scan-gram.l,
+	* src/scan-skel.l, src/symlist.c, src/symtab.c:
+	Adjust.
+
+2012-10-01  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	warnings: remove spurious suffixes on context
+	Rectify a bug that introduced suffixes out of place.
+
+	* src/complainc.c (complains): Handle all three special warning bits.
+	* src/scan-code.l (show_sub_message): Remove useless argument.
+	* tests/named-refs.at: Adjust.
+
+2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  headers: move CPP guards into YY_*_INCLUDED to avoid collisions
+	  minor changes.
+
+2012-10-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  gnulib: update
+	  errors: indent "user token number redeclaration" context
+
+2012-10-01  Akim Demaille  <akim@lrde.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>.
 
@@ -1615,6 +17810,81 @@
 	complain_at_indent to output with increased indentation level.
 	* tests/input:at: Apply this change.
 
+2012-09-27  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	errors: don't display "warnings treated as errors"
+	This line doesn't add any meaningful information anymore, the appended
+	[-Werror=CATEGORY] is enough.  It is actually more insightful, as it
+	allows to distinguish warnings treated as errors from those that
+	aren't.  This line is also removed by gcc 4.8.
+
+	* src/complain.c (set_warnings_issued): The only action left was
+	checking if the error bit corresponding to the warning issued was set,
+	and that function was only called once. Therefore, remove it, and do
+	its job directly in the caller...
+	(complains): here.
+	* src/complains.h: Adjust.
+	* tests/input.at: Adjust.
+	* NEWS: Document this change.
+
+2012-09-27  Akim Demaille  <akim@lrde.epita.fr>
+
+	errors: change output, and improve -y coherence
+	The prefix of warnings treated as errors is now "error: ". Also, their
+	suffix now reflects the changes in the Werror option format.
+
+	An output for -Werror=other used to be:
+	  bison: warnings being treated as errors
+	  input.y:1.1: warning: stray ',' treated as white space [-Wother]
+
+	It is now:
+	  bison: warnings being treated as errors
+	  input.y:1.1: error: stray ',' treated as white space [-Werror=other]
+
+	The line "warnings being treated as errors" no longer adds any info,
+	it will be removed in a forthcoming change.
+
+	* NEWS: Add entry "Enhancement of the -Werror"
+	* doc/bison.texi: Move the warnings-as-error to a new bullet.
+	* src/complain.c (complains): Refactor, change the prefix of warnings
+	that are treated as errors.
+	(warnings_print_categories): Support for [-Werror=CATEGORY] display
+	* src/getargc.c (getargs): -y implies -Werror=yacc
+	* tests/input.at: Update expected --yacc output for coherence.
+
+2012-09-27  Theophile Ranquet  <theophile.ranquet@gmail.com>
+
+	errors: introduce the -Werror=CATEGORY option
+	This new option is a lot more flexible than the previous one. Its
+	details will be discussed in the NEWS and info file, in a forthcoming
+	change.
+
+	If no category is specified (ie: used as simply "-Werror"), the
+	functionality is the same as before.
+
+	* src/complain.c (errors_flag): New variable.
+	(set_warning_issued): Accept warning categories as an argument.
+	* src/complain.h (Wall): Better definition.
+	* src/getargs.c (flags_argmatch): Support for the new format.
+	(usage): Update -Werror to -Werror[=CATEGORY] format.
+
+	* src/complain.c (errors_flag): New variable.
+	(set_warning_issued): Accept warning categories as an argument.
+	* src/complain.h (Wall): Better definition.
+	* src/getargs.c (flags_argmatch): Support for the new format.
+	(usage): Update -Werror to -Werror=[CATEGORY] format.
+
+2012-09-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'maint'
+	* maint:
+	  warnings: introduce -Wdeprecated in the usage info
+	  errors: prefix the output with "error: "
+	  errors: indent "invalid value for %define" context
+	  errors: indent "%define var" redefinition context
+	  errors: indent "symbol redeclaration" context
+	  errors: indent "result type clash" error context
+
 2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	warnings: introduce -Wdeprecated in the usage info
@@ -1623,6 +17893,18 @@
 
 	* src/getargs.c (usage): Insert here.
 
+2012-09-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-09-26  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  regen
+	  yacc: fix handling of CPP guards when no header is generated
+	  gnulib: update
+
 2012-09-26  Theophile Ranquet  <ranquet@lrde.epita.fr>
 
 	errors: prefix the output with "error: "
@@ -1719,6 +18001,38 @@
 
 2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
 
+	warnings: use the regular interface for s/r and r/r conflicts
+	The current routines used to display s/r and r/r conflicts are both
+	inconvenient from the programmer point of view (they do not use the
+	warning infrastructure) and for the user (the messages are rather
+	terse, not necessarily pleasant to read, and because they don't use
+	the same routines, they look different).
+
+	It was due to the belief (dating back to the initial checked-in
+	version of Bison) that, at some point, POSIX Yacc mandated the format
+	for these messages.  Today, the Open Group's manual page for Yacc,
+	<http://pubs.opengroup.org/onlinepubs/009695399/utilities/yacc.html>,
+	explicitly states that the format of these messages is unspecified.
+	See commit be7280480c175bed203883f524c7dcd6cf37c13d and
+	<http://lists.gnu.org/archive/html/bison-patches/2002-12/msg00027.html>.
+
+	For a discussion on the chosen warning format, see
+	http://lists.gnu.org/archive/html/bison-patches/2012-09/msg00039.html
+
+	In an effort to factor the handling of errors and warnings, use the
+	Bison warning routines to report these messages.
+
+	* src/conflicts.c (conflicts_print): Rewrite with clearer sections
+	about S/R and then R/R conflicts.
+	(conflict_report): Remove, inlined in its sole
+	caller...
+	(conflicts_output): here.
+	* tests/conflicts.at, tests/existing.at, tests/glr-regression.at,
+	* tests/reduce.at, tests/regression.at: Adjust the expected results.
+	* NEWS: Update.
+
+2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
+
 	regen
 
 2012-09-25  Akim Demaille  <akim@lrde.epita.fr>
@@ -1743,6 +18057,86 @@
 
 	gnulib: update
 
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	conflicts: refactor the counting routines
+	* src/conflicts.c (count_sr_conflicts, count_rr_conflicts): Rename as...
+	(count_sr_conflicts, count_rr_conflicts): these.
+	Use size_t for counts.
+	(count_sr_conflicts, count_rr_conflicts): New.
+	Use them.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	%expect-rr is for GLR only
+	* src/conflicts.c (conflicts_print): Complain about %expect-rr if not
+	in GLR mode, regardless of the number of reduce/reduce conflicts.
+	* tests/conflicts.at (%expect-rr non GLR): New test.
+	* NEWS: Update.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	TODO: lalr1.cc master vs maint
+	* TODO: here.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	c++: coding style fixes
+	* data/lalr1.cc, tests/c++.at: Formatting changes.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	Revert "introduced a GCC-like -Werror=type"
+	This reverts commit 981c53e257f1974854edc4f6ad0e88c7f18e2bea.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	Revert "made previous commit less hairy"
+	This reverts commit fd01e1d05ea3e627033d148b5400b99a18ac7ba3.
+
+2012-09-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	Revert "new Werror report format fixed in a test"
+	This reverts commit 41511178a71ebaf81bde7ffc682c575537af45cb.
+
+2012-09-21  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	new Werror report format fixed in a test
+	* tests/input.at : replaced [-Wyacc] with [-Werror=yacc]
+
+	todo: fix the other failed test of the suite, tests/conflicts.at:1554
+
+2012-09-21  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	made previous commit less hairy
+	* src/getargs.c : here
+
+2012-09-20  Theophile Ranquet  <ranquet@lrde.epita.fr>
+
+	introduced a GCC-like -Werror=type
+	* src/complain.h : errors_flag variable
+	* src/complain.c : actual stuff happens here
+	* src/conflits.c : differentiated SR and RR conflicts
+	* src/getargs.c : flags_argmatch recognizes the new -Werror format
+
+2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: remove useless file
+	  update files to ignore
+	  remove useless include
+	  use locale-indep. c_is* functions for parsing, not isspace, isprint etc
+	  gnulib: update
+	  --help: include a place to report translation issues
+	  tests: style changes
+	  tests: fix push-pull test
+	  yacc.c: style changes
+
 2012-09-04  Akim Demaille  <akim@lrde.epita.fr>
 
 	maint: remove useless file
@@ -1790,6 +18184,79 @@
 	refer to.
 	Mostly copied/pasted from coreutils' emit_ancillary_info function.
 
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: style changes
+	* NEWS: Minor improvements.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	use -Wdeprecated for obsolete %define variable names
+	* src/muscle-tab.c (muscle_percent_variable_update): Here.
+	* tests/input.at (%define backward compatibility): Update expectations.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	introduce -Wdeprecated
+	GCC seems to be using "deprecated" consistently over "obsoleted", so
+	use -Wdeprecated rather than -Wobsolete.
+
+	* src/complain.h (warnings): Add Wdeprecated.
+	* src/complain.c (warnings_print_categories): Adjust.
+	* src/getargs.c: Likewise.
+	* doc/bison.texi: Document it.
+
+	* src/scan-code.l: Use this category for the trailing ';' support.
+	* tests/actions.at: Adjust expected output.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	undefined but unused is a warning
+	* src/symtab.c (symbol_check_defined): Undeclared symbols are only
+	a warning.
+	* tests/input.at (Undeclared symbols used for a printer or destructor):
+	Rename as...
+	(Undefined symbols): this, and check this case.
+	* NEWS: Doc it.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: %defines is no longer mandatory
+	* data/glr.cc: No longer require %defines.
+	When it is not given, define the position and location classes instead
+	of including their headers.
+	(b4_shared_declarations): Use the original parse-params.
+	* data/glr.c (b4_shared_declarations): Define only if undefined.
+	* tests/actions.at, tests/calc.at: No longer force the use of %defines
+	for glr.cc.
+	* NEWS: Doc it.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	todo: check push parsers
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	style: remove useless C++ provisio
+	* src/complain.h: here.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: style changes
+	* src/parse-gram.y: Avoid deprecated directives.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: address a fixme
+	* doc/bison.texi (Calc++ Parser): Add a cross-reference.
+
+2012-09-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	style changes
+	* data/glr.cc, tests/actions.at: Fix comments.
+	* src/symtab.h, src/symtab.c: Fix indentation/comments.
+	* src/symlist.c: Fix indentation.
+
 2012-08-31  Akim Demaille  <akim@lrde.epita.fr>
 
 	tests: style changes
@@ -1809,6 +18276,92 @@
 	yacc.c: style changes
 	* data/yacc.c: (yytoken): Define with initial value.
 
+2012-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	refactoring: define variables with a value
+	* src/muscle-tab.c: Where possible, fuse definition and initial assignment.
+
+2012-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	minor refactoring: shorten variable names
+	* src/scan-skel.l (at_directive_argc, at_directive_argv)
+	(AT_DIRECTIVE_ARGC_MAX): Rename as...
+	(argc, argv, ARGC_MAX): these, as there is no possible confusion.
+	(flags): New.
+	(QPUTS): Remove, inline its only use.
+
+2012-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	obstacks: simplifications
+	* src/system.h (obstack_finish0): New.
+	Use it to simplify several uses.
+	* src/muscle-tab.h (MUSCLE_INSERTF): New.
+	* src/muscle-tab.c: Use obstack_printf where simpler.
+
+2012-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	minor refactoring in user code scanning
+	* src/scan-code.l (show_sub_message, show_sub_messages): Instead of a
+	Boolean, take a "warnings" argument.
+	Avoid storing printf-like format strings in a variable, so that GCC
+	can check them.
+
+2012-08-12  Akim Demaille  <akim@lrde.epita.fr>
+
+	minor refactoring in user code scanning
+	* src/scan-code.l (show_sub_message): New, extracted from...
+	(show_sub_messages): here.
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: strengthen the trailing spaces check
+	* tests/calc.at: here.
+	* data/glr.c: Fix accordingly.
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'maint'
+	* origin/maint:
+	  maint: post-release administrivia
+	  version 2.6.2
+	  NEWS: update.
+	  yacc: remove trailing end of line at end of file
+	  thanks: fix a contributor name
+	  gnulib: update
+	  tests: synch line -> syncline, for consistency
+	  tests: synclines: style changes
+	  tests: synclines: fix perl invocation
+	  regen
+	  c++: trailing end-of-lines in %parse-param
+	  tests: simplify
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	remove support for lint
+	Basically revert commit 12ce2df60d16961eaa03a5aa009eeaa645e4e1cb.
+	http://lists.gnu.org/archive/html/bison-patches/2012-08/msg00004.html
+
+	* data/c.m4, data/glr.c, data/yacc.c (YYID): Remove.
+	No longer use ARGSUSED.
+	* src/getargs.c: Restore simpler inclusion of getopt.h (anyway, since
+	then we now use gnulib which certainly protects us from such issues).
+
+2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: renamings after knr removal
+	* data/c.m4 (b4_yydestruct_generate, b4_yy_symbol_print_generate):
+	Rename as...
+	(b4_yydestruct_define, b4_yy_symbol_print_define): these, for consistency.
+	* data/glr.c, data/glr.cc, data/yacc.c: Adjust.
+
 2012-08-03  Akim Demaille  <akim@lrde.epita.fr>
 
 	maint: post-release administrivia
@@ -1823,6 +18376,58 @@
 
 2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
 
+	c++: fix a comment
+	* data/c++.m4: Be sure to attach a ';' to its declaration, otherwise
+	it appears in the preceding comment.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: simplify after knr removal
+	* data/c.m4 (b4_yydestruct_generate, b4_yy_symbol_print_generate):
+	They no longer need an argument, it has a single possible value.
+	* data/glr.c, data/yacc.c: Adjust.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: renamings after knr removal
+	* data/c.m4 (b4_c_comment_, b4_c_args, b4_c_function_def)
+	(b4_c_function_decl, b4_c_formals, b4_c_call, b4_c_arg): Rename as...
+	(b4_comment, b4_args, b4_function_define, b4_function_declare,
+	b4_formals, b4_function_call, b4_arg): these.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c: Adjust.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: b4_args -> b4_join to prepare forthcoming changes
+	* data/bison.m4 (b4_args, _b4_args): Rename as...
+	(b4_join, _b4_join): these.
+	* data/c++.m4, data/lalr1.cc, data/variant.hh: Adjust.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	YYPARSE_PARAM: drop support
+	* data/yacc.c: No longer support it.
+	* doc/bison.texi, tests/headers.at: Adjust.
+	* NEWS: Document.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: remove K&R C support
+	* data/c.m4 (b4_c_modern, b4_c_knr_formal_names, b4_c_knr_formal_decls)
+	(b4_c_knr_formal_decl, b4_c_formal_names, b4_c_formal_decls)
+	(b4_c_formal_decl): Remove.
+	(b4_c_ansi_formal_names, b4_c_ansi_formal_decls, b4_c_ansi_formal_decl):
+	Rename as...
+	(b4_c_formal_names, b4_c_formal_decls, b4_c_formal_decl):
+	these.
+	* data/glr.c, data/glr.cc, data/yacc.c: Adjust.
+
+2012-08-02  Akim Demaille  <akim@lrde.epita.fr>
+
 	NEWS: update.
 	* NEWS: Catch up with the other changes from 2.6.1.
 
@@ -1891,6 +18496,86 @@
 
 2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
 
+	todo: more items
+	* TODO: $ in the epilogue, and obstack_copy.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge branch 'maint'
+	* maint:
+	  use obstack_printf
+	  scanner: restore a missing start condition
+	  gnulib: update
+	  maint: post-release administrivia
+	  version 2.6.1
+	  gnulib: update
+	  maint: fix some syntax-check issues
+	  tests: do not depend on __cplusplus to decide for C++ or C output
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: comment changes
+	* tests/actions.at, tests/input.at: here.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: really check the set of generated files
+	* tests/output.at (AT_CHECK_OUTPUT): It used to check that the
+	expected files are indeed generated, but it did not check that
+	there are no additional ones.
+	Do that, and adjust expectations (in particular alphabetical order).
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: do not create stack.hh without %defines
+	* data/stack.hh (b4_stack_define): New.
+	* data/lalr1.cc: Use it when %defines is not passed.
+	* tests/output.at: Adjust expected output.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: location.hh and position.hh are not generated without %defines
+	* data/location.cc (b4_position_define, b4_location_define): New.
+	(location.hh, position.hh): Generate only if %defines.
+	* data/lalr1.cc: therefore, define these classes when locations are
+	needed, but headers are not generated.
+	* tests/output.at: Check that these files are not generated.
+	* NEWS: Document.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: no longer require %defines.
+	* data/lalr1.cc: Generate the parser header only when %defines is
+	passed.
+	* tests/calc.at: Check it.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	skeletons: style changes
+	* data/glr.c, data/lalr1.cc: Use more consistent comments,
+	and YY_NULL declaration.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc, lalr1.cc: define b4_shared_declarations
+	* data/glr.cc, data/lalr1.cc: here.
+	The name is no longer right, but at least it is consistent with
+	the other skeletons.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.cc: no longer require location support
+	* data/glr.cc: Use b4_locations_if where appropriate.
+	* data/lalr1.cc: M4 quotation changes to highlight code duplication
+	with glr.cc.
+	* tests/calc.at: Check glr.cc with and without %location.
+	While at it, fuse multiple %parse-params into one.
+	* tests/actions.at: Simplify.
+	* NEWS: Doc this.
+	Some other wording changes.
+
+2012-07-31  Akim Demaille  <akim@lrde.epita.fr>
+
 	use obstack_printf
 	This is not just nicer, it is also much safer, since we were
 	using sprintf...
@@ -1948,6 +18633,10 @@
 
 2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
+	regen
+
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
+
 	tests: do not depend on __cplusplus to decide for C++ or C output
 	Since we do support compiling C code with a C++ compiler.
 
@@ -1955,6 +18644,40 @@
 
 2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint: (29 commits)
+	  regen
+	  synclines: remove spurious empty line
+	  also support $<foo>$ in the %initial-action
+	  skeletons: b4_dollar_pushdef and popdef to simpify complex definitions
+	  regen
+	  printer/destructor: translate only once
+	  factor the handling of m4 escaping
+	  news: schedule the removal of the ";" hack
+	  style changes in the scanners
+	  regen
+	  support $<tag>$ in printers and destructors
+	  scan-code: factor the handling of the type in $<TYPE>$
+	  muscles: fix another occurrence of unescaped type name
+	  glr.cc: fix the handling of yydebug
+	  gnulib: update
+	  formatting changes
+	  tests: fix an assertion
+	  tests: adjust to GCC 4.8, which displays caret errors
+	  be sure to properly escape type names
+	  obstack_quote: escape and quote for M4
+	  muscles: shuffle responsabilities
+	  muscles: make private functions static
+	  muscles: rename private functions/macros
+	  obstack_escape: escape M4 characters
+	  remove dead macro
+	  maint: style changes
+	  doc: avoid problems with case insensitive file systems
+	  configure: fix botched quoting
+	  news: fix typo.
+
+2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
+
 	regen
 
 2012-07-27  Akim Demaille  <akim@lrde.epita.fr>
@@ -2184,6 +18907,160 @@
 	    checking for Java compiler... gcj -C -fsource=1.3 -ftarget=1.4
 	    ...
 
+2012-07-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-07-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	yystype, yyltype: remove.
+	* data/c.m4: here.
+	* NEWS: Doc it.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	YYFAIL: remove.
+	* data/lalr1.java, data/yacc.c, src/scan-code.l: Remove YYFAIL support.
+	* NEWS, TODO: Update.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	todo: update.
+	* TODO: obsolete items.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	space changes.
+	* data/bison.m4 (b4_symbol_action): Remove spurious eol in the output.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: fix %printer usage.
+	* src/parse-gram.y: Instead of stderr, using yyo.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: factor the handling of code_props
+	* src/parse-gram.y: Now that %printer and %destructor are treated
+	equally, let...
+	(code_props_type): handle them.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	parser: factor handling of type tags
+	* src/parse-gram.y: Now that <*> and <> are processed like regular
+	tags, let...
+	(tag): handle them.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	simplify the handling of <> and <*>'s code_props.
+	Currently they are treated in separated variables, contrary to other
+	<TYPE> code_props.  This duplicates code (and messages for translators)
+	uselessly, as demonstrated by the fact that thanks to this patch, now
+	useless <*> and <> code_props are reported like the others.
+
+	* src/parse-gram.y (generic_symlist_item): Treat "<*>" and "<>" as regular
+	type tags.
+	* src/symlist.h, src/symlist.c (symbol_list_default_tagged_new)
+	(symbol_list_default_tagless_new,SYMLIST_DEFAULT_TAGGED)
+	(SYMLIST_DEFAULT_TAGLESS): Remove.
+	* src/symtab.h, src/symtab.c (default_tagged_code_props)
+	(default_tagless_code_props, default_tagged_code_props_set)
+	(default_tagless_code_props_set): Remove.
+	(symbol_code_props_get): Default to <*> or <>'s code_props.
+
+	* tests/actions.at: Complete expected errors: there are new warnings.
+	* tests/input.at: Likewise.
+	(Useless printers or destructors): Extend.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	allow modification on retrieved code_props.
+	The logic to compute the %printer or %destructor to used (i.e., a
+	code_props) is implemented twice: one, of course, in
+	symbol_code_props_get, and another time in symbol_check_defined to
+	record the fact that a code_props is used (so that we can reported
+	unused ones).  Let the former use the latter.
+
+	I would probably use "mutable" in C++ and keep these guys const,
+	but this is C.  And casting away constness triggers warnings.
+
+	* src/scan-code.h, src/scan-code.l (code_props_none): Is not const.
+	* src/symtab.h, src/symtab.c (symbol_code_props_get): The symbol
+	is not const.
+	(symbol_check_defined): Use it.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: regen.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix bison's own header guards.
+	Because I'm using a VPATH build with an absolute srcdir, I have
+	GRAM__USERS_AKIM_SRC_GNU_BISON_SRC_PARSE_GRAM_H.  Before, I was using
+	a relative srcdir, and had GRAM_______SRC_PARSE_GRAM_H (coming from
+	../../).  Let it be GRAM_SRC_PARSE_GRAM_H.
+
+	* tests/bison.in: Do not depend on the value of $top_srcdir for
+	Bison itself.
+	If we were to use relative paths from .c to .y, we would not have
+	this problem.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: add missing const.
+	* src/symtab.h, src/symtab.c (symbol_print): here.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	style changes.
+	* src/parse-gram.y, src/symtab.c: Space changes.
+	* src/symtab.h: Comment changes.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	autoconf: update.
+	* submodules/autoconf: here.
+	No significant changes for our use of m4sugar.m4.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	output: no longer use b4_tokens.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, data/yacc.c:
+	Since the previous commit, b4_tokens_define and the like no longer need
+	b4_tokens.
+	* src/output.c (token_definitions_output): Remove.
+
+2012-07-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	output: use the token list to define the yytokentype
+	There are currently two systems used to pass information about tokens to
+	m4: the original one, and another, which is used for instance for
+	printers and destructors, variants etc.  Move to using only the latter.
+
+	* data/bison.m4 (b4_symbol_map, b4_token_visible_if)
+	(b4_token_has_definition, b4_any_token_visible_if, b4_token_format): New.
+	* data/c++.m4, data/c.m4, data/glr.c, data/java.m4: Adjust to use them.
+
+2012-07-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix VPATH issue
+	* examples/test: With an absolute VPATH build, "../" is incorrect.
+
 2012-07-20  Akim Demaille  <akim@lrde.epita.fr>
 
 	news: fix typo.
@@ -2192,6 +19069,31 @@
 
 2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: update gnu-web-doc-update.
+	  maint: post-release administrivia
+	  version 2.6
+	  maint: prepare for release 2.6
+	  maint: post-release administrivia
+	  version 2.5.91
+	  maint: prepare NEWS.
+	  maint: fix spaces.
+	  tests: adjust to case where the C compiler is actually a C++ compiler
+	  tests: fix dependencies
+	  doc: fix Texinfo command
+	  maint: Valgrind on OS X.
+	  tests: be sure that backups are safe.
+	  maint: dead comment.
+	  tests: refactor for legibility.
+	  tests: refactor the bison invocations.
+	  maint: fix syntax-check ignore patterns.
+	  gnulib: update
+	  gnulib: update.
+	  gnulib: update
+
+2012-07-19  Akim Demaille  <akim@lrde.epita.fr>
+
 	maint: update gnu-web-doc-update.
 	* gnulib: here.
 
@@ -2303,6 +19205,41 @@
 
 2012-07-06  Akim Demaille  <akim@lrde.epita.fr>
 
+	maint: minor fixes
+	* NEWS: restore missing entry.
+	* cfg.mk: Adjust to *.texinfo -> *.texi.
+	* src/symtab.c: Spaces fixes.
+
+2012-07-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: address g++-4.8 warnings.
+	list.yy: In function 'yy::parser::symbol_type yylex()':
+	list.yy:107:29: error: typedef 'token' locally defined but not used
+	  [-Werror=unused-local-typedefs]
+	   typedef yy::parser::token token;
+	                             ^
+
+	* tests/c++.at (AT_CHECK_VARIANTS): here.
+
+2012-07-06  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: update release instructions
+	  maint: post-release administrivia
+	  version 2.5.90
+	  build: fix gen-ChangeLog call.
+	  gnulib: update.
+	  tests: fix SKIP_IF for Java.
+	  api.prefix: incompatible with %name-prefix.
+	  api.prefix: strengthen the tests and fix push-parsers.
+	  skeletons: style changes.
+	  NEWS: minor changes.
+	  api.prefix: improve the documentation for YYDEBUG.
+	  gnulib: update.
+
+2012-07-06  Akim Demaille  <akim@lrde.epita.fr>
+
 	maint: update release instructions
 	* README-hacking: here.
 
@@ -2373,6 +19310,20 @@
 
 2012-07-04  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: headers.at: strengthen.
+	  glr.cc: do not override C++ definitions by C macros.
+	  YYLLOC_DEFAULT: factor, and don't export it in headers.
+	  api.prefix: do not use #define to handle YYSTYPE_IS_TRIVIAL etc.
+	  tests: portability fixes.
+	  c++: fewer #includes in the headers.
+	  glr.cc: formatting changes.
+	  tests: more logs.
+	  api.prefix: also rename YYDEBUG.
+
+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.
@@ -2473,6 +19424,24 @@
 
 2012-07-02  Akim Demaille  <akim@lrde.epita.fr>
 
+	formatting changes.
+	* data/lalr1.cc: here.
+
+2012-07-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	NEWS: spell fixes.
+	* NEWS: here.
+	Reported by Stefano Lattarini.
+
+2012-07-02  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  NEWS: spell check.
+	  api.prefix.
+
+2012-07-02  Akim Demaille  <akim@lrde.epita.fr>
+
 	NEWS: spell check.
 	* NEWS: here.
 
@@ -2495,6 +19464,90 @@
 	(Bison Options): -p/--name-prefix are obsoleted.
 	* NEWS: Announce api.prefix.
 
+2012-06-29  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: display warnings categories
+	* src/complain.c (error_message): Call 'warnings_print_categories'.
+	* src/gram.c (grammar_rules_useless_report): Display itself warning
+	category.
+	* tests/actions.at, tests/conflicts.at, tests/existing.at,
+	tests/input.at, tests/named-refs.at, tests/output.at, tests/reduce.at,
+	tests/regression.at, tests/skeletons.at: Adjust.
+	* NEWS: Document this.
+
+2012-06-29  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: be ready to print warnings categories
+	A function to print warnings categories, like -Wyacc, -Wother, etc.
+
+	* src/complain.h, src/complain.c (print_warning_categories): New function.
+	* src/output.c (ARRAY_CARDINALITY): Move it to file 'src/system.h'.
+	* src/complain.h (enum warnings): New value, 'silent', "complain"
+	must not display the warning type.
+
+2012-06-29  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: prepare forthcoming changes
+	* src/gram.c (rule_rhs_print): Do not print new line anymore.
+	(rule_print): Make it static.
+	* src/closure.c, src/derives.c, src/gram.c: Adjust.
+
+2012-06-29  Victor Santet  <victor.santet@epita.fr>
+
+	style changes
+	* src/complain.c, src/reader.c, src/reduce.c, src/main.c:
+	Fix indentation.
+	Simplify a bit.
+
+2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen.
+
+2012-06-28  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: factoring: complaints
+	* src/complain.c (error_message): Accept warning categories (an integer) as
+	argument.
+	Location is a 'const location *' instead of 'location *'.
+	(ERROR_MESSAGE): Delete it.
+	* src/complain.c, src/complain.h (complains): New function.
+	(complain, complain_at, complain_at_indent): Generic functions for
+	complaints. Call 'complains'.
+	(warn_at, warn_at_indent, warn, yacc_at, midrule_value_at)
+	(fatal_at, fatal): Delete them. Adjust dependencies.
+	* src/complain.h (enum warnings): New fields 'complaint' and 'fatal'.
+	* bootstrap.conf (XGETTEXT_OPTIONS): Adjust.
+
+2012-06-28  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: move them to complain.c.
+	* src/getargs.h, src/getargs.c (warnings, warnings_flags): Move to...
+	* src/complain.h, src/complain.c: Here.
+
+2012-06-28  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: rename the categories
+	Forthcoming changes will use the warning categories much more often,
+	so shortening them will improve readability.
+
+	* src/complain.c, src/complain.h, src/conflicts.c,
+	* src/getargs.c, src/getargs.h, src/gram.c (enum warnings):
+	s/warnings_/W/g.
+
+2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	fix merge.
+	* data/bison.m4: Use b4_error_verbose_if after it was defined.
+
+2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: use the generalized default yylex.
+	  tests: AT_YYERROR_DEFINE: prepare for list of ints.
+	  skeletons: no longer define YYLSP_NEEDED.
+	  c++: do not export YYTOKEN_TABLE and YYERROR_VERBOSE.
+
 2012-06-28  Akim Demaille  <akim@lrde.epita.fr>
 
 	tests: use the generalized default yylex.
@@ -2529,6 +19582,12 @@
 
 2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: use *.texi.
+
+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.
@@ -2539,6 +19598,36 @@
 
 2012-06-26  Akim Demaille  <akim@lrde.epita.fr>
 
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: do not output m4 set up.
+	  tests: use the generic yyerror function.
+	  tests: use assert instead of plain abort.
+	  tests: improve the generic yylex implementation.
+	  tests: generalize the compilation macros.
+	  tests: fix confusion between api.prefix and name-prefix.
+	  maint: gitignores.
+	  yacc: work around the ylwrap limitation.
+
+2012-06-26  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: raise warning for useless printers or destructors
+	* src/scan-code.h (code_props): Add field 'is_used'.
+	(CODE_PROPS_NONE_INIT): Adjust.
+	* src/scan-code.l (code_props_plain_init, code_props_symbol_action_init)
+	(code_props_rule_action_init): Instead of implementing several
+	times the initialization of the code_props structures,
+	use code_props_none_init.
+	* src/symtab.c (symbol_check_defined): If a symbol does not have a
+	destructor (resp. printer) but has a type which has a destructor (resp.
+	printer), then set field 'is_used' to true.
+	(semantic_type_check_defined): If a type has a destructor (resp. printer)
+	but all symbols of this type have already a destructor (resp. printer),
+	then raise a warning.
+	* tests/input.at (Useless printers or destructors): New.
+
+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.
@@ -2590,6 +19679,29 @@
 
 	maint: gitignores.
 
+2012-06-25  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: useless semantic types
+	* src/symtab.h (symbol_list): Represent semantic types as structure
+	'semantic_type'.
+	* src/symlist.c (symbol_list_type_new): Allocate this structure.
+	(symbol_list_code_props_set): Set this semantic type's status to used if it
+	was not declared.
+	* src/symtab.c (semantic_types_sorted): New.
+	(semantic_type_new): Set the new semantic type's location appropriately.
+	(symbol_check_defined): If a symbol has a type, then set this type's status
+	to "declared".
+	(semantic_type_check_defined, semantic_type_check_defined_processor): Same
+	as symbol_check_defined and symbol_check_defined_processor, but for semantic
+	types.
+	(symbol_check_defined): Check semantic types usefulness.
+	* src/symtab.h (semantic_type): New fields 'location' and 'status'.
+	* src/symtab.h, src/symtab.c (semantic_type_new)
+	(semantic_type_from_uniqstr, semantic_type_get): Accept a location as a
+	supplementary argument.
+	* tests/input.at (Unassociated types used for printer of destructor): New.
+	* tests/c++.at (AT_CHECK_VARIANTS): Fix an error caught by this commit.
+
 2012-06-25  Akim Demaille  <akim@lrde.epita.fr>
 
 	yacc: work around the ylwrap limitation.
@@ -2598,6 +19710,66 @@
 	* NEWS (Future Changes): Extend, and announce the forthcoming change
 	about the use of the parser header.
 
+2012-06-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	fix for printers and destructors.
+	The previous "code_props: factor more" patch sends has_%printer
+	etc. to m4, instead of has_printer.
+
+	* src/output.c (prepare_symbol_definitions): Fix value of pname.
+
+2012-06-25  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  tests: more uniformity.
+	  tests: handle locations in a more generic way.
+	  tests: handle locations in the generic yyerror functions.
+	  tests: fix AT_CHECK_CALC.
+	  tests: improve infrastructure
+	  tests: factor.
+	  skeletons: minor style changes
+	  tests: AT_LANG.
+	  c skeletons: factor the declaration of yylloc and yylval.
+	  news: condemn YYPARSE_PARAM and YYLEX_PARAM.
+	  maint: regen.
+
+2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
+
+	code_props: factor more.
+	* src/symtab.h, src/symtab.c (code_props_type_string): No longer static.
+	* src/output.c (CODE_PROPS): Remove, we can now iterate on both the
+	destructor and the printer.
+	(SET_KEY2): New.
+
+2012-06-22  Victor Santet  <victor.santet@epita.fr>
+
+	maint: factor the handling of %printer and %destructor
+	There is too much code duplication between %printer and %destructor.
+	We used to have two functions for each action: the first one for
+	destructors, the second one for printers. Factor using a
+	'code_props_type', and an array of code_props instead of two
+	members.
+
+	* src/symlist.h, src/symlist.c (symbol_list_destructor_set)
+	(symbol_list_printer_set): Fuse into...
+	(symbol_list_code_props_set): this.
+	* src/symtab.h, src/symtab.c (default_tagged_destructor)
+	(default_tagged_printer): Fuse into...
+	(default_tagged_code_props): this.
+	(default_tagless_destructor, default_tagless_printer)
+	(default_tagless_code_props): Likewise.
+	(code_props_type_string): new.
+	(symbol_destructor_set, symbol_destructor_get, semantic_type_destructor_set)
+	(default_tagged_destructor_set, default_tagless_destructor_set)
+	(symbol_printer_set, symbol_printer_get, semantic_type_printer_set)
+	(default_tagged_printer_set, default_tagless_printer_set): Replace by...
+	(symbol_code_props_set, symbol_code_props_get, semantic_type_code_props_set)
+	(default_tagged_code_props_set, default_tagless_code_props_set): these.
+	* src/parse-gram.y (grammar_declaration): Adjust.
+	* src/output.c (CODE_PROP, grammar_declaration): Ditto.
+	* src/reader.c (symbol_should_be_used): Ditto.
+
 2012-06-22  Akim Demaille  <akim@lrde.epita.fr>
 
 	tests: more uniformity.
@@ -2667,6 +19839,21 @@
 	(AT_LANG_COMPILE): New.
 	(AT_FULL_COMPILE): Use AT_LANG.
 
+2012-06-21  Victor Santet  <victor.santet@epita.fr>
+
+	symtab: refactoring
+	Prepares forthcoming changes.
+
+	* src/symtab.c (symbols_do): Accept the hash table and the sorted
+	list as arguments. Adjust dependencies.
+
+2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: address syntax-check issues.
+	* examples/calc++/local.mk: Space changes.
+	* src/files.c: Avoid unmarked_diagnostics.
+	* src/output.c: Remove useless include.
+
 2012-06-21  Akim Demaille  <akim@lrde.epita.fr>
 
 	c skeletons: factor the declaration of yylloc and yylval.
@@ -2684,9 +19871,110 @@
 
 2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
 
+	fix warnings for useless %printer/%destructor
+	The previous commit, which turns into a warning what used to be an
+	error:
+
+	    %printer {} foo;
+	    %%
+	    exp: '0';
+
+	has two shortcomings: the warning is way too long (foo is reported
+	to be useless later), and besides, it also turns into a warning much
+	more serious errors:
+
+	   %printer {} foo;
+	   %%
+	   exp: foo;
+
+	Reduce the amount to warnings in the first case, restore the error in
+	the second.
+
+	* src/symtab.h (status): Add a new inital state: undeclared.
+	* src/symtab.c (symbol_new): Initialize to undeclared.
+	(symbol_class_set): Simplify the logic of the code that neutralize
+	the "redeclared" warning after the "redefined" one.
+	(symbol_check_defined): "undeclared" is also an error.
+	* src/reader.c (grammar_current_rule_symbol_append): Symbols appearing
+	in a rule are "needed".
+	* src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
+	An unknown symbol appearing in a %printer/%destructor is "used".
+	* src/reduce.c (nonterminals_reduce): Do not report as "useless" symbols
+	that are not used (e.g., those that for instance appeared only in a
+	%printer).
+	* tests/input.at (Undeclared symbols used for a printer or destructor):
+	Improve the cover the cases described above.
+
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	gitignore: test-driver.
+
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: style changes.
+	* src/reduce.c (reduce_grammar_tables): Define variables with their
+	initial value.
+
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	news: fixes.
+	* NEWS: Fix spelling.
+
+2012-06-20  Victor Santet  <victor.santet@epita.fr>
+
+	warnings: used but undeclared symbols are warnings
+	We used to raise an error if a symbol appears only in a %printer or
+	%destructor.  Make it a warning.
+
+	* src/symtab.h (status): New enum.
+	(symbol): Replace the binary "declared" with the three-state "status".
+	Adjust dependencies.
+	* src/symtab.c (symbol_check_defined): Needed symbols are an error,
+	whereas "used" are simply warnings.
+	* src/symlist.c (symbol_list_destructor_set, symbol_list_printer): Set
+	symbol status to 'used' when associated to destructors or printers.
+	* input.at (Undeclared symbols used for a printer or destructor): New.
+
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
 	maint: regen.
 	* Makefile.am (regen): New target.
 
+2012-06-20  Akim Demaille  <akim@lrde.epita.fr>
+
+	regen.
+
+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>
+
+	tests: enhance AT_YYERROR_DEFINE.
+	* tests/local.at: Handle the fact that locations are no longer
+	needed with lalr1.cc.
+
+2012-06-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  maint: formatting changes.
+	  tests: support api.prefix.
+	  tests: pacify font-lock-mode.
+	  tests: remove test covered elsewhere.
+	  tests: factor the declaration/definition of yyerror and yylex.
+	  regen.
+	  tests: portability issues.
+	  tests: call the parser from another compilation unit.
+	  glr.c, yacc.c: declare yydebug in the header.
+	  skeletons: use header guards.
+	  tests: improve AT_FULL_COMPILE.
+	  tests: reorder.
+	  tests: strengthen the test on generated headers inclusion
+	  yacc.c: instead of duplicating y.tab.h inside y.tac.c, include it.
+	  yacc.c: factor.
+
 2012-06-19  Akim Demaille  <akim@lrde.epita.fr>
 
 	maint: formatting changes.
@@ -2789,6 +20077,18 @@
 
 	* data/yacc.c: here.
 
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: xfdopen, and scope reduction.
+	* src/files.h, src/files.c (xfdopen): New.
+	* src/output.c (output_skeleton): Use it.
+	Reduce the scope of argv.
+
+2012-06-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: space changes
+	* configure.ac, src/complain.c: space changes.
+
 2012-06-13  Akim Demaille  <akim@lrde.epita.fr>
 
 	yacc.c: factor.
@@ -2802,6 +20102,30 @@
 	* data/yacc.c (b4_shared_declarations): New.
 	Use it to factor duplicated declarations.
 
+2012-06-13  Stefano Lattarini  <stefano.lattarini@gmail.com>  (tiny change)
+
+	cosmetics: prettify names for compiled object for bison
+	* src/local.mk (src_bison_SHORTNAME): Define to "bison".
+
+2012-06-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	lalr1.cc: spello.
+	* data/lalr1.cc: Reported by Gilles Espinasse.
+
+2012-06-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  skeletons: factor yacc.c and glr.c.
+	  glr.c: minor refactoring.
+	  tests: remove all the -On flags.
+	  maint: fix spello.
+	  maint: improve release procedure instructions.
+	  gnulib: update readme-release.
+	  maint: cfg.mk: manual title.
+	  maint: cfg.mk: simplify
+	  maint: post-release administrivia
+
 2012-06-12  Akim Demaille  <akim@lrde.epita.fr>
 
 	skeletons: factor yacc.c and glr.c.
@@ -2865,6 +20189,57 @@
 
 2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
 
+	maint: an envvar equal to "00" is 0.
+	* src/output.c (prepare): here.
+	Reported by Paul Eggert.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: don't use mbsr?chr.
+	Basically, revert ba60c39547a445dee3e07920931b4d7a81843868's move to
+	mbs* functions, which was prompted by -DGNULIB_POSIXCHECK.  See
+	<http://lists.gnu.org/archive/html/bison-patches/2012-05/msg00052.html>
+	and following.
+
+	* bootstrap.conf: No longer ask for them.
+	* src/files.c, src/getargs.c, src/location.c,
+	* src/parse-gram.c, src/parse-gram.y, src/scan-gram.l,
+	* src/symtab.c: s/mbs(r?chr)/str$1/g.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: use xconcat-filename.
+	* bootstrap.conf (gnulib_modules): Request it.
+	* src/output.h, src/output.c (compute_pkgdatadir): Rename as...
+	(pkgdatadir): this.
+	Adjust dependencies.
+	* src/output.c (output_skeleton): Reduce the scope of "in".
+	Use xconcatenated_filename to simplify the construction of the
+	qualified paths to m4sugar.m4, bison.m4, and the selected skeleton.
+	There are a few minor differences: the new code uses strchr instead of
+	mbschr (but this was not really justified), and the new code does not
+	garantee a single slash even if $BISON_PKGDATADIR ends with several
+	(which was considered more accurate).  See the discussion at
+	<http://lists.gnu.org/archive/html/bison-patches/2012-05/msg00052.html>.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: minor simplification
+	* src/output.c (prepare): Assign use_push_for_pull_flag's value at its
+	declaration.
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  version 2.5.1
+	  NEWS: prepare for 2.5.1.
+	  maint: update release procedure
+	  maint: fix comment typos
+	  maint: post-release administrivia
+
+2012-06-05  Akim Demaille  <akim@lrde.epita.fr>
+
 	version 2.5.1
 	* NEWS: Record release date.
 
@@ -2894,6 +20269,51 @@
 	  -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-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: regen.
+
+2012-05-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge tag 'v2.5.1_rc2'
+	Bison 2.5.1_rc2.
+
+	* tag 'v2.5.1_rc2': (34 commits)
+	  Bison 2.5.1_rc2.
+	  doc: fixes.
+	  build: fix ChangeLog generation.
+	  c++: compute the header guards.
+	  skeletons: remove support for unused directive.
+	  lalr1.cc: improve Doxygen documentation.
+	  lalr1.cc: extract stack.hh.
+	  news: convert to double quotes.
+	  space changes.
+	  build: do not prototype flex-generated functions.
+	  build: fix ChangeLog generation.
+	  Bison 2.5.1_rc1.
+	  tests: save/restore Autotest special files when checking XML support.
+	  tests: AT_SAVE_SPECIAL_FILES / AT_RESTORE_SPECIAL_FILES.
+	  tests: honor TESTSUITEFLAGS in all the check targets.
+	  build: do not enable c++ warnings on 0 when nullptr is not supported.
+	  maint: update gnulib.
+	  build: config.in.h.
+	  build: move silent rules.
+	  glr.c: reduce variable scopes.
+	  maint: maintainer-release-check.
+	  maint: shush a syntax-check.
+	  maint: prefer "commit message" to "log entry".
+	  command line: fix minor leaks.
+	  maint: we no longer maintain the ChangeLog.
+	  maint: fix the generation of the synclines for bison's parser.
+	  maint: regen.
+	  maint: import the xmemdup0 gnulib module.
+	  maint: remove left-over gnulib modules.
+	  maint: ignore files imported by autopoint.
+	  build: AC_PROG_LEX: use more readable variable names.
+	  maint: regen src/parse-gram.[ch]
+	  maint: simplify parse-gram.y
+	  maint: s/strncpy/memcpy/, when equivalent
+
 2012-05-23  Akim Demaille  <akim@lrde.epita.fr>
 
 	maint: post-release administrivia
@@ -3141,6 +20561,22 @@
 
 2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
 
+	glr.c: formatting changes.
+	* data/glr.c: Fix indentation.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/master'
+	* origin/master:
+	  glr.c: untabify.
+	  glr.cc: untabify.
+	  glr.cc: formatting changes.
+	  glr.cc: remove unused signature.
+	  glr.cc: properly declare locations are const where appropriate.
+	  doc: fix @xref.
+
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
 	glr.c: untabify.
 	* data/glr.c: here.
 
@@ -3170,6 +20606,33 @@
 	doc: fix @xref.
 	* doc/bison.texinfo: here.
 
+2012-05-04  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint: (22 commits)
+	  tests: ignore code coverage/profiling failure messages
+	  doc: fix some invalid @ref.
+	  build: fix previous commit.
+	  install-pdf: fix.
+	  NEWS: Update.
+	  %printer: support both yyo and yyoutput.
+	  doc: mfcalc: demonstrate %printer.
+	  tests: style changes.
+	  build: require Flex.
+	  build: flex.m4: check for Flex.
+	  build: flex.m4: quote properly.
+	  build: flex.m4.
+	  build: autoconf: update.
+	  glr: eliminate last bits of unwanted locations.
+	  NEWS: 2.6 will drop K&R.
+	  TODO: remove dead items.
+	  TODO: import from master.
+	  gnulib: update.
+	  maint: update NEWS.
+	  doc: fix index.
+	  doc: fix documentation of YYERROR.
+	  c++: more YY_NULL
+
 2012-05-02  Akim Demaille  <akim@lrde.epita.fr>
 
 	tests: ignore code coverage/profiling failure messages
@@ -3237,6 +20700,37 @@
 	It is unused, so we don't care, yet it is less surprising.
 	* tests/actions.at: Comment changes.
 
+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.
@@ -3292,6 +20786,46 @@
 	TODO: import from master.
 	* TODO: Copy the current version.
 
+2012-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix bison wrapper.
+	* tests/bison.in (PERL): Fix.
+
+2012-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: fix some invalid @ref.
+	* doc/bison.texinfo: Fix incorrect @ref uses.
+
+2012-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: extexi: support out-of-order blocks.
+	* examples/extexi (%file_output): Remove.
+	(&process): Accept "FILE: BLOCK-NUM" requests.
+
+2012-04-08  Akim Demaille  <akim@lrde.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.ac (PERL): New.
+	* doc/Doxyfile.in, doc/local.mk, examples/local.mk,
+	* tests/bison.in: Use it.
+
+2012-04-08  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: rewrite extexi in Perl.
+	* examples/extexi: Rewrite in Perl.
+	* examples/local.mk (extract): Adjust.
+
+2012-04-07  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: simplify clean.
+	* doc/local.mk (CLEANFILES): Since the previous commit,
+	there a no longer such files.
+	* Makefile.in (CLEANFILES): Initialize here.
+
 2012-04-07  Akim Demaille  <akim@lrde.epita.fr>
 
 	gnulib: update.
@@ -3326,6 +20860,51 @@
 
 2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
 
+	build: fix distcheck issues.
+	For some reason it seems that texi2dvi -o no longer forces --clean
+	mode, so we have stray TeX compilation files staying in top_builddir
+	since TeX is run from there.
+
+	While at it, upgrade the generation of the (completely obsolete)
+	reference card.  Target PDF.
+
+	* doc/local.mk (TEXI2DVI): Pass --build-dir.
+	(CLEANDIRS): More accurate.
+	(doc/refcard.dvi): Replace with...
+	(doc/refcard.pdf): this.
+	Adjust dependencies.
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	build: don't rely on $< in non-pattern rules.
+	* doc/local.mk, tests/local.mk: here.
+	Reported by Stefano Lattarini.
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: upgrade Doxyfile.
+	* doc/Doxyfile.in: Run doxygen -u.
+	Prompted by Tim Landscheidt.
+
+2012-04-01  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: help Doxygen find our files.
+	* doc/Doxyfile.in (INCLUDE_PATH): here.
+
+2012-04-01  Tim Landscheidt  <tim@tim-landscheidt.de>
+
+	Fix Doxygen generation and clean-up.
+	* doc/Doxyfile.in: Amend OUTPUT_DIRECTORY.
+	* doc/local.mk (html-local): Amend working directory.
+	(CLEANDIRS): Fix "html", remove "latex".
+
+2012-04-01  Tim Landscheidt  <tim@tim-landscheidt.de>
+
+	Fix Doxygen comment.
+	* src/InadequacyList.h: s#</t>#</tt>#.
+
+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,
@@ -3335,6 +20914,34 @@
 
 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>
+
+	Merge remote-tracking branch 'origin/maint'
+	* origin/maint:
+	  bump to 2012 in skeletons.
+	  build: remove ancient Autoconf tests.
+	  doc: c++: complete the location documentation.
+	  c++: locations: provide convenience constructors.
+	  c++: locations: remove useless "inline".
+	  glr: do not use locations when they are not requested
+	  c++: use nullptr for C++11.
+	  build: simplify and improve the compiler warnings for tests.
+	  gnulib: update.
+	  maint: formatting changes.
+	  NEWS: update.
+	  Java: Fix syntax error handling without error token.
+	  tests: beware of -pedantic on large #line numbers.
+	  tests: when using the C++ compiler, use its flags too.
+
+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.
@@ -3469,6 +21076,78 @@
 	* tests/atlocal.in: Implement it.
 	* tests/local.mk: Use it.
 
+2012-03-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: style changes in the Makefile.
+	* tests/local.mk: Prefer passing variable assignment by
+	the command line, instead of the environment, so that it
+	is reported in the logs.
+	Prefer single quotes for shell literal strings.
+
+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-24  Akim Demaille  <akim@lrde.epita.fr>
+
+	tests: fix dependencies.
+	* tests/local.mk (check_SCRIPTS): Add atlocal and atconfig so
+	that they are properly updated before running tests.
+	(RUN_TESTSUITE_deps): New.
+	Use it to factor the dependencies of "*-check" targets,
+	especially those that don't bounce to the regular
+	"check-local" target, since then they don't benefit from the
+	proper dependencies (such as atlocal).
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	Merge remote-tracking branch 'fsf/maint'
+	* fsf/maint: (404 commits)
+	  doc: update the --verbose report format.
+	  doc: spell check.
+	  doc: stmt, not stmnt.
+	  doc: save width.
+	  doc: reformat grammar snippets.
+	  doc: use only @example, not @smallexample.
+	  doc: style changes.
+	  doc: minor fixes to "Understanding" section
+	  tests: minor fixes/simplifications
+	  tests: be robust to quote style.
+	  maint: update gnulib.
+	  tests: be robust to POSIXLY_CORRECT being defined.
+	  doc: fix environment issues.
+	  regen.
+	  tests: fix regressions.
+	  glr: fix ambiguity reports.
+	  doc: stylistic improvements.
+	  maint: address sc_prohibit_doubled_word.
+	  maint: address sc_prohibit_always-defined_macros.
+	  maint: address sc_bindtextdomain, sc_program_name and sc_prohibit_HAVE_MBRTOWC.
+	  ...
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	doc: spell fix.
+	* doc/bison.texinfo: here.
+	Reported by Tim Landscheidt.
+
 2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
 
 	doc: update the --verbose report format.
@@ -3526,6 +21205,90 @@
 	improvements.  Fixes problems reported in
 	<https://savannah.gnu.org/patch/?4306>.
 
+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  Akim Demaille  <akim@lrde.epita.fr>
+
+	c.m4: better newline control with b4_parse_param_use.
+	* data/c.m4: Use m4_ifvaln instead of m4_ifval where
+	applicable.
+	(b4_parse_param_use): Switch order between two nested
+	"if"s to avoid useless empty lines.
+	Adjust callers to avoid useless lines.
+
+2012-03-19  Akim Demaille  <akim@lrde.epita.fr>
+
+	glr.c: remove (broken) support for YYPRINT.
+	YYPRINT uses yytoknum which glr does not define.  Since YYPRINT
+	is considered obsolete, and did not work, don't fix its support,
+	remove it from glr.c.
+
+	* data/c.m4 (yy_symbol_value_print): Use YYPRINT only for yacc.c.
+	* TODO: Done.
+
+2012-03-17  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-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	TODO: update.
+
+2012-03-15  Akim Demaille  <akim@lrde.epita.fr>
+
+	gnulib: update.
+
 2012-03-13  Akim Demaille  <demaille@gostai.com>
 
 	tests: minor fixes/simplifications
@@ -3535,6 +21298,31 @@
 	Reported by Lie Yan.
 	http://lists.gnu.org/archive/html/bug-bison/2012-03/msg00000.html
 
+2012-03-13  Akim Demaille  <akim@lrde.epita.fr>
+
+	maint: fix distcheck.
+	* examples/local.mk (MAINTAINERCLEANFILES): Complete, and rename as...
+	(CLEANFILES): this,
+	* examples/calc++/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk (CLEANFILES): Add the generated files.
+
+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 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-03-09  Akim Demaille  <demaille@gostai.com>
 
 	tests: be robust to quote style.
@@ -3549,6 +21337,36 @@
 	* gnulib: update.
 	* src/scan-gram.l: Don't use the (former version of) STREQ.
 
+2012-03-09  Akim Demaille  <demaille@gostai.com>
+
+	tests: remove quote magic from the bison test wrapper.
+	Basically, revert 4c4d35394d1bdb4dc3392482ab002bc111a3378f.
+
+	* tests/bison.in: Leave bison's stderr as is.
+
+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>
+
+	avoid direct strncmp calls.
+	Before this change, bison would accept either .tab and _tab equivalently,
+	whatever the current platform.  Besides, it was not obeying everywhere
+	to the possible definition of TAB_EXT to something else than .tab.
+
+	For consistency, handle only TAB_EXT (".tab" on non DJGPP platforms).
+	Support for "_tab" is neither documented, nor tested.
+
+	* src/system.h (STRNCMP_LIT): New.
+	From Jim Meyering.
+	(STRPREFIX_LIT): New.
+	* src/files.c, src/getargs.c: Use it.
+
 2012-03-06  Akim Demaille  <demaille@gostai.com>
 
 	tests: be robust to POSIXLY_CORRECT being defined.
@@ -3557,6 +21375,85 @@
 	Reported by Lie Yan.
 	http://lists.gnu.org/archive/html/bug-bison/2012-03/msg00000.html
 
+2012-02-24  Akim Demaille  <demaille@gostai.com>
+
+	build: comment changes.
+	* Makefile.am, examples/calc++/local.mk, examples/local.mk,
+	* examples/mfcalc/local.mk, examples/rpcalc/local.mk,
+	* lib/local.mk, src/local.mk, tests/local.mk:
+	Make the copyright licenses more uniform.
+
+2012-02-24  Akim Demaille  <demaille@gostai.com>
+
+	build: fix more example extraction issues.
+	* Makefile.am (dist_TESTS): New.
+	(TESTS, EXTRA_DIST): Run and ship them.
+	* examples/calc++/local.mk: examples/calc++/calc++.stamp no longer
+	        exists, don't try to ship it.
+	(.yy.stamp): New recipe.
+	Use it.
+	* examples/calc++/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk:
+	Don't ship the sources.
+	Adjust the CPPFLAGS: there is nothing left in srcdir.
+	(MAINTAINERCLEANFILES): Remove, now we are in builddir.
+	(TESTS): Rename as...
+	(dist_TESTS): this.
+
+2012-02-24  Akim Demaille  <demaille@gostai.com>
+
+	maint: fix example extraction issues.
+	calc++: don't rely on Automake to compile a C++ parser.
+
+	Basically, revert commit 609b3d8096fb0cc1fa4d908b6e1a860ced260bda,
+	Automake 1.11.3 is not safe enough for C++ parser.
+
+	* examples/calc++/calc++-parser.hh: Remove.
+	* examples/calc++/local.mk (examples/calc++/calc++-parser.stamp):
+	New.
+
+	examples: factor the extractions into a single step
+
+	extexi had to be run in the extraction directory.  Now, it can be
+	given the files with expected output directory.  This allows to
+	use $(*_extracted) variables (before we had to list again their
+	members, but limited to their base names).  In turn, this also
+	allows fusing the extraction recipes into a single one.
+
+	Also, it is currently too hard (or requires too much duplication,
+	since Make wants all the occurrences of the files to be prefixed with
+	$(srcdir)/, which is something Automake cannot support for *_SOURCES)
+	to work in the source tree.  So extract, and compile scanners and parsers
+	in the build tree.
+
+	* examples/extexi (basename): New.
+	(BEGIN): Now "file_wanted" maps base name to extracted file name.
+	* examples/calc++/local.mk, examples/mfcalc/local.mk,
+	* examples/rpcalc/local.mk: Fuse extraction rules into...
+	* examples/local.mk: Here.
+	(extract, extracted): New.
+
+2012-02-23  Akim Demaille  <demaille@gostai.com>
+
+	maint: use STREQ/STRNEQ.
+	* doc/bison.texinfo: Space change.
+	* src/system.h (STREQ, STRNEQ): New.
+	* src/files.c, src/ielr.c, src/lalr.c, src/muscle-tab.c,
+	* src/output.c, src/print.c, src/print_graph.c,
+	* src/reader.c, src/scan-skel.l, src/tables.c,
+	* src/uniqstr.c:
+	Use them.
+	* src/scan-gram.l: Do not use streq.h, use system.h's STREQ.
+	* cfg.mk: The documentation is an exception.
+
+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>
 
 	doc: fix environment issues.
@@ -3581,11 +21478,47 @@
 	Missing includes.
 	* tests/calc.at, tests/named-refs.at: Include assert.h.
 
+2012-02-22  Akim Demaille  <demaille@gostai.com>
+
+	maint: gitignore.
+	* examples/mfcalc/.gitignore, examples/rpcalc/.gitignore: Fix.
+
+2012-02-21  Akim Demaille  <demaille@gostai.com>
+
+	regen.
+	* src/parse-gram.c, src/parse-gram.h: regen.
+
+2012-02-21  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>
+
+	tests: post-process stderr to normalize quotes.
+	* tests/bison.in: Save bison's stderr, and convert gettextized
+	quotes to plain ASCII.
+
 2012-02-21  Akim Demaille  <demaille@gostai.com>
 
 	glr: fix ambiguity reports.
 	* tests/glr-regression.at (Ambiguity reports): New.
 
+2012-02-21  Akim Demaille  <demaille@gostai.com>
+
+	glr: fix ambiguity reports.
+	Fix a regression introduced in commit
+	783aa653f4ca70a75919c8516b950494c612cbfe.
+
+	* tests/glr-regression.at (Ambiguity reports): New.
+	* data/glr.c (yyreportTree): Fix an offset error.
+
 2012-02-19  Akim Demaille  <demaille@gostai.com>
 
 	doc: stylistic improvements.
@@ -3623,6 +21556,66 @@
 
 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>
+
+	doc: check the rpcalc.
+	* doc/bison.texinfo: Tag rpcalc.y snippets.
+	Add missing includes.
+	(Rpcalc Rules): Don't issue leading tabs.
+	Complete an Info menu.
+	Use @result.
+	* examples/rpcalc/local.mk: New.
+	* examples/rpcalc/rpcalc.test: New.
+	* examples/local.mk: Use them.
+	* examples/mfcalc/mfcalc.test: Remove dup test.
+	* examples/test: Disable debug traces.
+
+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>
+
+	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>
+
+	bitset: fix an incorrect error message.
+	* lib/bitset_stats.c: here.
+	Reported by Stefano Lattarini.
+
+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.
@@ -3693,6 +21686,148 @@
 
 	maint: gnulib: upgrade.
 
+2012-02-18  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-18  Akim Demaille  <demaille@gostai.com>
+
+	maint: regen.
+	* src/parse-gram.c, src/parse-gram.h: regen.
+
+2012-02-18  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-18  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-18  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-18  Akim Demaille  <demaille@gostai.com>
+
+	maint: gnulib: upgrade.
+
+2012-02-17  Akim Demaille  <demaille@gostai.com>
+
+	doc: mfcalc: fix includes.
+	* doc/bison.texinfo: math.h is needed early.
+
+2012-02-17  Akim Demaille  <demaille@gostai.com>
+
+	examples: factor the test suite.
+	* examples/mfcalc/test, examples/calc++/test: Extract the
+	common bits into...
+	* examples/test: here.
+	(cwd): New.
+	Use it to avoid a race on the temporary directory.
+	Reported by Jim Meyering.
+	* examples/mfcalc/test, examples/calc++/test: Rename into...
+	* examples/mfcalc/mfcalc.test, examples/calc++/calc++.test: these.
+	* examples/calc++/local.mk, examples/mfcalc/local.mk,
+	* examples/local.mk: Adjust.
+
+2012-02-17  Akim Demaille  <demaille@gostai.com>
+
+	examples: fix the test suites.
+	* examples/calc++/test, examples/mfcalc/test (me): Be more
+	meaningfull: include the example name.
+	(prog): Factor.
+	(run): Avoid printf, use echo.
+	Add missing parens.
+	(cleanup): New.
+	Call it on trap.
+	Remove the previous "rm" that did the cleanup.
+	Move into a private directory to avoid concurrency issues.
+	Reported by Jim Meyering.
+
+2012-02-17  Jim Meyering  <meyering@redhat.com>
+
+	examples: link mfcalc with -lm for uses of pow, cos, atan, etc.
+	* examples/mfcalc/local.mk (examples_mfcalc_mfcalc_LDADD): Define.
+
+2012-02-16  Akim Demaille  <demaille@gostai.com>
+
+	mfcalc: extract and exercise.
+	* examples/mfcalc/local.mk, examples/mfcalc/test: New,
+	based on calc++'s ones.
+	* examples/local.mk: Include mfcalc/local.mk.
+
+2012-02-16  Akim Demaille  <demaille@gostai.com>
+
+	calc++: factor for other extracted tests.
+	* Makefile.am (TESTS, check_PROGRAMS): Initialize here.
+	* examples/local.mk (doc, extexi): Define here.
+	* examples/calc++/local.mk: Adjust accordingly.
+	* configure.ac: Ask for parallel-tests (for the way the logs
+	are handled).
+	* examples/calc++/test: As a consequence, always be verbose.
+	($prog): New.
+	(run): Use it.
+	Sort the tests in a more natural order (simplest first).
+
+2012-02-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: mfcalc: send errors to stderr.
+	* doc/bison.texinfo (Mfcalc Lexer): New.
+	(Mfcalc Main): Move the definition of main and yyerror here, for
+	clarity.
+	Let yyerror report on stderr.
+
+2012-02-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: fix mfcalc code.
+	* doc/bison.texinfo (Multi-function Calc): Add missing includes.
+	Fix the rendering of the result: use @result and remove the
+	initial tabulation in the actual code.
+	Fix stylistic issues: avoid the , operator.
+	Add extexi mark-up.
+	* examples/extexi: Also support @smallexample.
+
+2012-02-16  Akim Demaille  <demaille@gostai.com>
+
+	tests: c++: stylistic changes.
+	* tests/c++.at: Don't use void for incoming arguments.
+	Prefer cstdlib to stdlib.h.
+
+2012-02-16  Jim Meyering  <meyering@redhat.com>
+
+	tests: avoid c++ failure due to lack of getenv decl
+	* tests/c++.at (Syntax error as exception): Avoid spurious failure
+	at least when compiling with g++-4.7.x due to lack of declaration
+	of getenv.  Include <stdlib.h>.
+
 2012-02-15  Akim Demaille  <demaille@gostai.com>
 
 	maint: rely on Automake for parsers.
@@ -3707,6 +21842,95 @@
 	Based on commit 737406a32c201471699bfa0843d1f432f3ec29ab and
 	commit 3d6ca339083c278d907c9f030f4ba6bc5ecb07f2.
 
+2012-02-15  Akim Demaille  <demaille@gostai.com>
+
+	maint: trust Automake for parser headers.
+	* examples/calc++/local.mk, src/local.mk: Now that automake
+	can see `-d' in AM_YFLAGS, we can rely on it to compile
+	and ship the parser header files.
+
+2012-02-15  Akim Demaille  <demaille@gostai.com>
+
+	maint: help Automake reading Yacc flags.
+	* Makefile.am (AM_YFLAGS): Automake looks for "-d" alone.
+
+2012-02-15  Akim Demaille  <demaille@gostai.com>
+
+	calc++: rely on Automake.
+	Rely on $(YACC) being the bison being built, and let Automake do the
+	rest.  It turned out to be much more difficult than anticipated, for
+	various reasons, including some bad behavior from Automake 1.11.2
+	which (i) generates calc++-parser.h instead of calc++-parser.hh, and
+	(ii) leaves an #include "y.tab.h" in the generated parser instead
+	of #include "calc++-parser.h".
+
+	The authors of Automake appear to be aware of the problem,
+	http://lists.gnu.org/archive/html/automake/2011-05/msg00008.html
+	so a simple work around will suffice for the time being.
+
+	* examples/calc++/y.tab.h, examples/calc++/calc++-parser.hh: New.
+	To work around Automake 1.11.2 issues.
+	* examples/calc++/local.mk: Remove all the rules for compilation
+	with bison, leave them to Automake.
+	So provide it with "calc++-parse.yy" as a source file.
+	(calc_sources_generated, calc_sources_extracted): Rename as.
+	(calc_generated, calc_extracted): these.
+	(calc_sources): New.
+	Fix them.
+
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	maint: tidy the Makefile a bit.
+	* src/local.mk: Put yacc related variables together.
+	(AUTOMAKE_OPTIONS): Move to...
+	* Makefile.am: here.
+	Remove an old Emacs mode request which disables Automake support.
+	* src/local.mk (YACC, AM_YFLAGS): Move to...
+	* Makefile.am: here, as they will be used by other local.mks.
+
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	maint: de-recurse the handling of examples
+	The directory was still using a local Makefile.am because it provides
+	"scoped" Make variables: these examples are not meant to use the same
+	CPPFLAGS etc.  If we were to use the same -I set, we'd pick up
+	gnulib's stdio.h for instance, which we do not want for these simple
+	examples.
+
+	Yet, as a result, the dependencies are less accurate, there is code
+	duplication, etc.  This is especially perceptible when trying to
+	extract more examples from the documentation, as will be done in
+	forthcoming changes.
+
+	In order to make the tuning of CPPFLAGS easier, discard the predefined
+	-I from Automake.
+
+	* examples/calc++/Makefile.am: Rename as...
+	* examples/calc++/local.mk: this.
+	Adjust the paths which are now rooted in top_srcdir/top_builddir.
+	Handle BISON_CXX_WORKS here, instead of the too crude previous
+	approach that completely discarded the whole directory.
+	($(BISON)): Remove now useless bouncing recipe.
+	(calc___CPPFLAGS): New.
+	Stay away from -Ilib.
+	* Makefile.am, configure.ac, examples/local.mk,
+	* examples/calc++/test: Adjust.
+
+	* configure.ac: Pass nostdinc to Automake.
+	* src/local.mk, lib/local.mk (AM_CPPFLAGS): Move to...
+	* Makefile.am: here.
+
+	* src/local.mk, examples/calc++/Makefile.am (BISON, BISON_IN): Factor
+	to...
+	* Makefile.am: here.
+	* tests/local.mk: Use it.
+
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	variant: fix the example.
+	* examples/variant.yy: Adjust to "assert" being now
+	"parse.assert".
+
 2012-02-14  Akim Demaille  <demaille@gostai.com>
 
 	maint: more authors.
@@ -3726,6 +21950,75 @@
 	* etc/make-ChangeLogs: Remove (used for rcs to cvs migration!).
 	Reported by Tys Lefering.
 
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	maint: more authors.
+	* AUTHORS: here.
+	Suggested by Tys Lefering.
+
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	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.
+
+2012-02-14  Akim Demaille  <demaille@gostai.com>
+
+	maint: remove obsolete file.
+	* etc/make-ChangeLogs: Remove (used for rcs to cvs migration!).
+	Reported by Tys Lefering.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: also handle syntax_error when calling yylex.
+	* data/lalr1.cc (parse): Catch syntax_error around yylex and
+	forward them to errlab1.
+	* tests/c++.at (Syntax error as exception): Check support for
+	syntax exceptions raised by the scanner.
+	* NEWS, doc/bison.texinfo: Document it.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	tests: lalr1.cc: check syntax_error.
+	* tests/c++.at (Syntax error as exception): New.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	tests: don't require locations uselessly.
+	* tests/c++.at (Syntax error discarding no lookahead): Contrary to
+	2.5, C++ parsers can work without locations.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	maint: more silent rules.
+	* tests/local.mk (TESTSUITE_AT): Include plackage.m4.
+	Adjust dependencies.
+	Make testsuite.at its first argument.
+	(package.m4): Be silent.
+	(testsuite): Be silent.
+	Use $<.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	skeletons: simplify the protections against "unused" warnings.
+	* data/c.m4 (b4_parse_param_use): Also accept optional arguments
+	to "use".
+	Simplify callers.
+	* data/glr.c (yyuserAction): Simplify use of b4_parse_param_use.
+	(yy_reduce_print): Don't use b4_parse_param_use, as all the arguments
+	_are_ used.
+	* data/lalr1.cc (YY_SYMBOL_PRINT): Even when disabled, "use" the
+	symbol argument.
+	This neutralizes a warning in yypush_ when there are no symbols
+	with a semantic values.
+	(yy_destroy_): Remove useless "use" of yymsg.
+
+2012-02-10  Akim Demaille  <demaille@gostai.com>
+
+	glr: formatting changes.
+	* data/glr.c: Split long strings.
+
 2012-02-08  Akim Demaille  <demaille@gostai.com>
 
 	use a more consistent quoting style.
@@ -3743,6 +22036,35 @@
 	* tests/skeletons.at, tests/input.at, tests/regression.at: Adjust
 	expected messages.
 
+2012-02-08  Akim Demaille  <demaille@gostai.com>
+
+	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/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.
+
+	* tests/skeletons.at, tests/input.at, tests/regression.at: Adjust
+	expected messages.
+
+2012-01-31  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-01-31  Jim Meyering  <meyering@redhat.com>
+
+	maint: force "make syntax-check" to pass by skipping failing tests
+	* cfg.mk (local-checks-to-skip): Skip all currently-failing tests.
+	Remove changelog-check; it's long gone.
+
 2012-01-31  Akim Demaille  <demaille@gostai.com>
 
 	maint: remove stray debug code.
@@ -3780,6 +22102,32 @@
 	Use atexit to ensure we close stdout.
 	* .gitignore: Ignore new files pulled in via gnulib-tool.
 
+2012-01-31  Akim Demaille  <demaille@gostai.com>
+
+	maint: more silent-rules.
+	* doc/local.mk, src/local.mk, examples/calc++/Makefile.am: Use
+	$(AM_V_GEN) and $(AM_V_at) where appropriate.
+
+2012-01-29  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
 2012-01-26  Akim Demaille  <demaille@gostai.com>
 
 	tests: fix expected output.
@@ -3787,6 +22135,18 @@
 
 2012-01-26  Akim Demaille  <demaille@gostai.com>
 
+	tests: fix expected output.
+	* tests/actions.at (YYBACKUP): here.
+
+2012-01-26  Akim Demaille  <demaille@gostai.com>
+
+	maint: fix configure.ac
+	Fix commit 1890a2a816dab86c23cc1d0af8fac3986335deb7.
+
+	* configure.ac: Fix variable assignment.
+
+2012-01-26  Akim Demaille  <demaille@gostai.com>
+
 	yacc: fix YYBACKUP.
 	Reported by David Kastrup:
 	https://lists.gnu.org/archive/html/bug-bison/2011-10/msg00002.html.
@@ -3824,6 +22184,40 @@
 	maint: remove trailing blanks.
 	* src/scan-code.l: Here.
 
+2012-01-26  Akim Demaille  <demaille@gostai.com>
+
+	yacc: fix YYBACKUP.
+	Reported by David Kastrup:
+	https://lists.gnu.org/archive/html/bug-bison/2011-10/msg00002.html.
+
+	* 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.
+
+2012-01-25  Akim Demaille  <demaille@gostai.com>
+
+	maint: update TODO.
+	* TODO (Labeling the symbols): Remove, it's done ("Name references").
+
+2012-01-25  Akim Demaille  <demaille@gostai.com>
+
+	maint: update THANKS.
+	* THANKS: Update Tys's address, on his request.
+
+2012-01-25  Akim Demaille  <demaille@gostai.com>
+
+	maint: fix --gcc-warnings support.
+	* configure.ac: Use enable_gcc_warnings instead of enableval,
+	which is valid only with AC_ARG_ENABLE.
+
+2012-01-25  Akim Demaille  <demaille@gostai.com>
+
+	maint: silent-rules.
+	* configure.ac: Ask for silent-rules support.
+	Enable it by default.
+
 2012-01-25  Paul Eggert  <eggert@cs.ucla.edu>
 
 	tests: port to Solaris 10 'diff -u'
@@ -3844,6 +22238,14 @@
 	* cfg.mk: Exempt lib/yyerror.c from the sc_require_config_h_first test.
 	* THANKS: Update.
 
+2012-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+	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>.
+
 2012-01-24  Jim Meyering  <meyering@redhat.com>
 
 	maint: generate ChangeLog from git log
@@ -3896,6 +22298,18 @@
 
 2012-01-23  Jim Meyering  <meyering@redhat.com>
 
+	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.
+
+2012-01-23  Jim Meyering  <meyering@redhat.com>
+
 	build: update gnulib and autoconf submodules to latest (cherry picked from commit 728415f885e5cb8e518c8576fa6e1f541e384130)
 
 2012-01-23  Jim Meyering  <meyering@redhat.com>
@@ -3942,6 +22356,16 @@
 	* doc/bison.texinfo (Bug Reports): s/can not/cannot/
 	And remove trailing blanks.
 
+2012-01-23  Jim Meyering  <meyering@redhat.com>
+
+	build: generalize etc/prefix-gnulib-mk
+	This script hard-coded "libbison" and lib/gnulib.mk.
+	Adjust the script to require a --lib-name=$gnulib_name option
+	and a FILE argument like lib/$gnulib_mk.
+	Also add support for --help and --version.
+	* etc/prefix-gnulib-mk: Generalize.
+	* bootstrap.conf (bootstrap_post_import_hook): Update its invocation.
+
 2012-01-22  Jim Meyering  <meyering@redhat.com>
 
 	maint: get gpl-3.0 from gnulib
@@ -3949,3 +22373,124 @@
 	* doc/gpl-3.0.texi: Remove from version control, now that
 	we get it via gnulib.
 	* doc/.gitignore: Ignore it.
+
+2012-01-20  Akim Demaille  <demaille@gostai.com>
+
+	maint: be more robust to gnulib's FOO_H variables.
+	* configure.ac: Instead of listing gnulib's variables, look for
+	them among AC_SUBST variables.
+
+2012-01-20  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+	* tests/glr-regression.at: Adjust to match.
+	* tests/input.at: Likewise.
+	* tests/push.at: Likewise.
+	* tests/skeletons.at: Likewise.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	build: update gnulib and autoconf submodules to latest
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+	* 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.
+	(bootstrap_post_import_hook): Instead, run the same command,
+	etc/prefix-gnulib-mk lib/$gnulib_mk, via slightly different API.
+	Temporarily disable "bootstrap_sync=true".
+	* etc/prefix-gnulib-mk: Don't prepend "lib/" to tokens like -I$(...
+	or "\".
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	build: include <config.h> from lib/yyerror.c
+	* lib/yyerror.c: Include <config.h>.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	maint: list djgpp/subpipe.c in po/POTFILES.in
+	* po/POTFILES.in: Add djgpp/subpipe.c.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	maint: remove final trailing space
+	* src/scan-gram.l (%): Remove single space at end of line.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	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.
+
+2012-01-19  Jim Meyering  <meyering@redhat.com>
+
+	doc: correct typo: s/can not/cannot/
+	* doc/bison.texinfo (Bug Reports): s/can not/cannot/
+	And remove trailing blanks.
diff --git a/ChangeLog-2012 b/ChangeLog-2012
index 789e760..c53408d 100644
--- a/ChangeLog-2012
+++ b/ChangeLog-2012
@@ -1,30 +1,32 @@
-2012-01-15  Jim Meyering  <meyering@redhat.com>
+2012-01-15  Akim Demaille  <demaille@gostai.com>
+
+	java: fix reduction traces.
+	* data/lalr1.java (yy_reduce_print): Fix state index.
+	Reported by Tim Landscheidt.
+
+2012-01-12  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  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.
@@ -56,6 +58,12 @@
 
 2011-08-21  Joel E. Denny  <joeldenny@joeldenny.org>
 
+	lalr1.cc: remove trailing comma from enumerator list.
+	* data/lalr1.cc (yy::parser): Here.  This suppresses a -pedantic
+	warning.
+
+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
@@ -75,6 +83,22 @@
 	* tests/existing.at (GNU Cim Grammar)
 	(GNU pic (Groff 1.18.1) Grammar.): Remove empty %union.
 
+2011-07-24  Joel E. Denny  <joeldenny@joeldenny.org>
+
+	global: remove unnecessary horizontal tabs.
+	This change was made by applying emacs' untabify function to
+	nearly all files in Bison's repository.  Required tabs in make
+	files, ChangeLog, regexps, and test code were manually skipped.
+	Other notable exceptions and changes are listed below.
+	* bootstrap: Skip because we sync this with gnulib.
+	* data/m4sugar/foreach.m4
+	* data/m4sugar/m4sugar.m4: Skip because we sync these with
+	Autoconf.
+	* djgpp: Skip because I don't know how to test djgpp properly, and
+	this code appears to be unmaintained anyway.
+	* README-hacking (Hacking): Specify that tabs should be avoided
+	where not required.
+
 2011-07-10  Joel E. Denny  <joeldenny@joeldenny.org>
 
 	build: avoid YACC typo inherited from Autoconf.
@@ -186,25 +210,13 @@
 
 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/output.c (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
@@ -356,12 +368,6 @@
 
 	* 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.
@@ -476,16 +482,17 @@
 	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,
+	deterministic parsers in C.  In parse.error entry, mention LAC,
 	and add cross-reference to the LAC section.
+	(Error Reporting): When mentioning parse.error, 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.
+	(Calc++ Parser): When mentioning parse.error, mention LAC, and add
+	cross-reference to the LAC section.
+	(Table of Symbols): In %error-verbose entry, add cross-reference
+	to Error Reporting.
 	(Glossary): Capitalize entry titles consistently.  Add definitions
 	for "defaulted state" and "unreachable state".  Expand IELR
 	acronym in IELR's entry.
@@ -518,13 +525,14 @@
 	reversed access to location stack.
 	* THANKS (Bernd Kiefer): Add.
 
-2010-05-11  Akim Demaille  <demaille@gostai.com>
+2011-02-13  Joel E. Denny  <joeldenny@joeldenny.org>
 
-	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.
+	doc: fix some minor inconsistencies.
+	* doc/bison.texinfo (%define Summary): Fix mislabeled entry for
+	lex_symbol.
+	(%code Summary): For consistency with the variable list in the
+	%define Summary, enclose the list of %code qualifiers in a table
+	instead of an itemize.
 
 2011-02-06  Joel E. Denny  <joeldenny@joeldenny.org>
 
@@ -809,7 +817,7 @@
 	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.
+	(parse.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.
@@ -827,18 +835,6 @@
 
 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
@@ -854,14 +850,14 @@
 	* 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_.
+	pass yyempty_ not yyla.type to 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
+	* tests/conflicts.at (parse.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
@@ -879,7 +875,7 @@
 	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):
+	* tests/conflicts.at (parse.error=verbose and consistent errors):
 	Reorganize.
 
 2010-11-07  Joel E. Denny  <joeldenny@joeldenny.org>
@@ -894,6 +890,11 @@
 
 2010-10-31  Joel E. Denny  <joeldenny@joeldenny.org>
 
+	Fix memory leak.
+	* src/output.c (prepare_rules): Free temporary array.
+
+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
@@ -947,9 +948,32 @@
 	out of storage?  If not, we can omit malloc-gnu; but for now I left
 	it in to be safe.
 	(vc_ignore): Remove.
+	(gnulib_mk_hook): New function.
 	* README-hacking: Renamed from HACKING, since gnulib bootstrap now
 	uses that convention.
 
+2010-09-09  Paul Hilfinger  <hilfinger@cs.berkeley.edu>
+
+	* data/glr.c (yySymbol): Define as int to avoid compiler warnings about
+	possible change of value.
+
+2010-09-08  Paul Hilfinger  <hilfinger@cs.berkeley.edu>
+
+	* data/glr.c (yy_reduce_print): Change yyrhsVals to yyvsp to remove
+	compiler errors when using %debug.
+	Add declaration of yylow when locations in use to avoid compilation
+	error.
+	(yyglrReduce): Conditionalize message "Parse ... rejected by rule..."
+	on whether we are in split mode, for consistency with behavior of
+	non-GLR parsing.
+
+2010-09-01  Akim Demaille  <demaille@gostai.com>
+
+	Address GCC warnings about shadowed local variables (yyflag).
+	* data/glr.c (YYCHK): Rename yyflag as yychk_flag.
+	(yyprocessOneStack): Reduce the scope of yyaction, yyconflicts,
+	yyrule, and yyflag.
+
 2010-08-05  Joel E. Denny  <joeldenny@joeldenny.org>
 
 	Version 2.4.3.
@@ -1006,6 +1030,14 @@
 
 2010-07-25  Joel E. Denny  <joeldenny@joeldenny.org>
 
+	build: fix our adjustments for gnulib files in lib.
+	* configure.ac: For prepending lib/ to the values of config
+	variables, fix detection of empty values.  Also, due to recent
+	gnulib changes, add LIBUNISTRING_UNITYPES_H and
+	LIBUNISTRING_UNIWIDTH_H to the list of those variables.
+
+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.
@@ -1020,6 +1052,61 @@
 	(Output files: -dv >&-): Skip test group if running
 	maintainer-check-valgrind.
 
+2010-07-23  Paul Hilfinger  <hilfingr@EECS.Berkeley.EDU>
+
+	* NEWS: Describe new semantic-predicate feature.
+	* data/c.m4 (b4_predicate_case): New definition.
+	* data/java.m4 (b4_predicate_case): New definition.
+	* data/glr.c (yyimmediate): Add definition.
+	(yydoAction): Remove comment, now obsolete.
+	Do YY_REDUCE_PRINT here.
+	(yyglrReduce): Alter comment to indicate that semantic values
+	need not be deferred.
+	Remove YY_REDUCE_PRINT from here; done in yydoAction.
+	(yyprocessOneStack): Pass immediate flag.
+	Delete stacks rejected by predicates in newly split-off parsers.
+	Change handling of yyerr so that only current stack gets deleted
+	when semantic predicate fails.
+	(yyfillin): Don't crash if a semantic value is unresolved (as may
+	happen in predicate rules).
+	Copy lr state as well in debugging mode.
+	Update comment on setting of yysval to include yyloc as well.
+	(yy_reduce_print): Add yynormal argument.  Perform fillin properly.
+	Report unresolved RHS values.
+	(yyimmediate): New table.
+	* src/gram.h (struct rule): Add is_predicate field.
+	* src/output.c (user_actions_output): Use b4_predicate_case for
+	predicates.
+	(prepare_symbols): Output yyimmediate.
+	* src/scan-gram.l: Add %? token, SC_PREDICATE state.
+	* src/scan-code.l (code_props_rule_action_init): Add is_predicate
+	argument.
+	* src/scan-code.h (struct code_props): Add is_predicate field.
+	(code_props_rule_action_init): New interface.
+	* src/parse-gram.y (%?{...}): New token.
+	(rhs): Add %?{...} rule.
+	* src/parse-gram.c: Regenerate.
+	* src/parse-gram.h: Regenerate.
+	* src/reader.c (grammar_current_rule_action_append): Add
+	immediate argument.
+	(grammar_midrule_action): Use new interface for
+	code_props_rule_action_init.
+	(grammar_current_rule_action_append): Ditto.
+	(packgram): Transfer is_predicate value.
+	* src/reader.h (grammar_current_rule_action_append): New interface.
+	* doc/bison.texinfo: Document semantic predicates (%?).
+
+	* data/glr.c (yylhsNonterm, yyisDefaultedState,yyDefaultAction)
+	(yygetLRActions,yynewGLRStackItem,yyaddDeferredAction,yyinitStateSet)
+	(yyinitGLRStack,yyexpandGLRStack,yyupdateSplit,yymarkStackDeleted)
+	(yyundeleteLastStack,yyglrShift,yyglrShiftDefer,yydoAction,yyglrReduce)
+	(yyidenticalOptions,yymergeOptionSets,yyresolveStates,yyresolveAction)
+	(yyresolveLocations,yyresolveValue,yyreducePrint): Update parameter
+	names in comments and mention all parameters.
+	(struct yyGLRState): Fix description of yyposn field.
+	(yyresolveLocations): Correct comment so as not to imply action when
+	yyn1==0.
+
 2010-06-17  Paul Eggert  <eggert@cs.ucla.edu>
 
 	Update from GFDL GFDL 1.2 to 1.3.
@@ -1027,8 +1114,6 @@
 	* 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
 
@@ -1038,23 +1123,23 @@
 	* 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/lalr1.java, data/local.mk, data/location.cc:
+	* data/stack.hh, data/variant.hh, 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:
+	* djgpp/local.mk, djgpp/subpipe.c, djgpp/subpipe.h:
+	* djgpp/testsuite.sed, doc/bison.texinfo, doc/local.mk:
+	* doc/refcard.tex, etc/README, etc/bench.pl.in, etc/local.mk:
 	* examples/calc++/Makefile.am, examples/extexi:
-	* lib/abitset.c, lib/abitset.h:
+	* examples/local.mk, 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/libiberty.h, lib/local.mk, 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:
@@ -1066,7 +1151,7 @@
 	* 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/ielr.h, src/lalr.c, src/lalr.h, src/local.mk:
 	* 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:
@@ -1083,13 +1168,10 @@
 	* 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/local.at, tests/local.mk, 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>
@@ -1100,16 +1182,13 @@
 	sections.
 	* NEWS (2.5): Document this.
 
-2010-05-07  Akim Demaille  <demaille@gostai.com>
+2010-05-11  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.
+	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.
 
 2010-05-10  Akim Demaille  <demaille@gostai.com>
 
@@ -1120,19 +1199,56 @@
 	Document yy::parser::token.
 	Reported by Jerry Quinn.
 
+2010-05-10  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-07  Akim Demaille  <demaille@gostai.com>
+
+	doc: fix typo.
+	* tests/synclines.at: here.
+
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+	tests: enhance AT_SYNCLINES_COMPILE.
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): More distcc patterns.
+	(AT_TEST_SYNCLINE): Remove GCC 4.5 protection which is already
+	taken care of in AT_SYNCLINES_COMPILE.
+
 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/bison.m4 (b4_percent_define_get): 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: minor refactoring.
+	* data/lalr1.cc: Don't issue empty namespaces.
+
+2010-05-04  Akim Demaille  <demaille@gostai.com>
+
+	tests: fix %printer.
+	Currently, there is no check that %printer ... <foo> (nor
+	%destructor) is about an existing <foo> type.  This C++ test had
+	it wrong (<::std::string> vs. <std::string>).
+
+	* tests/c++.at (AT_CHECK_VARIANTS): In list.yy, redefine the
+	pretty-printing of lists into something better for parser traces.
+	Update the expected output.
+	Fix correspondance between %type/%token and %printer.
 
 2010-05-04  Akim Demaille  <demaille@gostai.com>
 
@@ -1143,14 +1259,6 @@
 	* 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.
@@ -1314,7 +1422,7 @@
 	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
+	* tests/local.mk ($(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>
@@ -1324,6 +1432,8 @@
 	<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00014.html>.
 	* NEWS (2.4.3): New.
 	* THANKS (Johan van Selst): Add.
+	* etc/prefix-gnulib-mk (prefix): Adjust regex for makefile
+	targets so that gnulib's new c++defs.h is matched.
 	* gnulib: Update to latest.
 
 2010-03-20  Joel E. Denny  <jdenny@ces.clemson.edu>
@@ -1376,7 +1486,7 @@
 	* 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
+	* lib/local.mk (lib_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
@@ -1412,6 +1522,15 @@
 	* tests/atlocal.in (abs_top_srcdir): Remove shell variable,
 	which is already defined in atconfig.
 
+2010-01-22  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: fix missing include caught by g++ 4.4.1.
+	Reported by Tys Lefering.
+	* HACKING (Release checks): Add note about trying a recent GCC.
+	* tests/regression.at (_AT_DATA_DANCER_Y): For C++, include
+	cstdlib for abort.
+	(_AT_DATA_EXPECT2_Y): Likewise.
+
 2010-01-21  Joel E. Denny  <jdenny@clemson.edu>
 
 	* cfg.mk (gnulib_dir): Assume gnulib is a subdirectory.
@@ -1497,45 +1616,6 @@
 
 	* 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.
@@ -1581,7 +1661,7 @@
 	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
+	* tests/conflicts.at (parse.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
@@ -1609,6 +1689,19 @@
 	documentation.
 	(LocalWords): Remove YYFAIL.
 
+2009-12-20  Joel E. Denny  <jdenny@clemson.edu>
+
+	tests: cleanup.
+	* tests/c++.at (Syntax error discarding no lookahead): Don't
+	ignore stderr.  Instead, eliminate remaining warnings.
+
+2009-12-18  Joel E. Denny  <jdenny@clemson.edu>
+
+	lalr1.cc: don't discard non-existent lookahead on syntax error.
+	* data/lalr1.cc (yy::parser::parse): Check yyempty first.
+	* tests/c++.at (Syntax error discarding no lookahead): New test
+	group.
+
 2009-12-17  Joel E. Denny  <jdenny@clemson.edu>
 
 	Code cleanup.
@@ -1673,6 +1766,14 @@
 	* tests/atlocal.in (LIBS): As for LDADD in src/local.mk, add
 	lib/libbison.a so gnulib libraries can be linked.
 
+2009-12-15  Joel E. Denny  <jdenny@clemson.edu>
+
+	gnulib: update for fix of fprintf-posix, which we'll use soon.
+	* etc/prefix-gnulib-mk (prefix): Adjust regex for make file
+	targets so that gnulib's new arg-nonnull.h and link-warning.h
+	are matched.
+	* gnulib: Update.
+
 2009-12-14  Joel E. Denny  <jdenny@clemson.edu>
 
 	Enable assertion output and --disable-assert for configure.
@@ -1726,27 +1827,20 @@
 
 	* 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
+	* 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-06  Joel E. Denny  <jdenny@clemson.edu>
+
+	* TODO (Complaint submessage indentation): New.
+
 2009-10-04  Joel E. Denny  <jdenny@clemson.edu>
 
 	Minor code cleanup.
@@ -1781,30 +1875,25 @@
 	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.
+	* tests/regression.at (parse.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
+	* tests/regression.at (parse.error=verbose and
+	YYSTACK_USE_ALLOCA): New test group.
+	(parse.error=verbose overflow): New test group that reveals an
 	obscure bug.  Expected fail for now.
 
-2008-12-11  Akim Demaille  <demaille@gostai.com>
+2009-10-04  Joel E. Denny  <jdenny@clemson.edu>
 
-	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.
+	benchmarks: use %debug consistently among grammars.
+	* etc/bench.pl.in (generate_grammar_triangular): Do not activate
+	%debug by default.  It can affect the timings even if yydebug=0.
+	(generate_grammar_calc): For consistency with other grammars,
+	use YYDEBUG environment variable to set yydebug.
 
 2009-10-03  Joel E. Denny  <jdenny@clemson.edu>
 
@@ -1838,16 +1927,6 @@
 	* 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.
@@ -1864,6 +1943,62 @@
 	* tests/named-ref.at: Adjust test-cases.
 	* NEWS (2.5): Add an announcement about named references.
 
+2009-09-17  Akim Demaille  <demaille@gostai.com>
+
+	doc: fixes.
+	* doc/bison.texinfo: here.
+	Reported by Alex Rozenman.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: lalr1.cc and variants.
+	* doc/bison.texinfo (Decl Summary): Document the "lex_symbol" and
+	"variant" %define variables.
+	(C++ Semantic Values): Split into...
+	(C++ Unions, C++ Variants): these.
+	The latter is new.
+	(C++ Parser Interface): Fix type names.
+	Document parser::syntax_error.
+	Document the fact that locations are not mandatory.
+	(C++ Scanner Interface): Split into...
+	(Split Symbols, Complete Symbols): these.
+	The later is new.
+	(Calc++ Parsing Driver): Use variants.
+	Add more comments.
+	Adjust style.
+	(Calc++ Parser): Declare all the tokens, no
+	longer accept raw characters.
+	Remove %union.
+	Adjust types and printers.
+	Remove destructors.
+	(Calc++ Scanner): Use make_<SYMBOL> functions.
+	Use strerror in error message.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: spell checking.
+	* doc/bison.texinfo: here.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	doc: comment changes.
+	* doc/bison.texinfo: Comment changes.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: factor the yytranslate_ invocation in make_SYMBOLS.
+	* data/c++.m4, data/lalr1.cc (parser::symbol_type): Change the
+	constructor to take a token_type instead of the (internal) symbol
+	number.
+	Call yytranslate_.
+	* data/variant.hh (b4_symbol_constructor_define_): Therefore,
+	don't call yytranslate_ here.
+
+2009-09-16  Akim Demaille  <demaille@gostai.com>
+
+	TODO: statistics.
+	* TODO (Figures): New.
+
 2009-09-13  Joel E. Denny  <jdenny@clemson.edu>
 
 	tests: clean up push.at test group titles.
@@ -1887,19 +2022,79 @@
 	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>
+2009-09-10  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.
+	Fix --enable-gcc-warnings.
+	* src/parse-gram.y (%printer <param>): Handle param_none.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: syntax_error as exceptions.
+	It is common to use sort of factories in the user actions.  These
+	factories may check some "syntactic" constraints that are not
+	enforced by the grammar itself.  This is possible using YYERROR
+	within the action itself.  Provide the user with a means to throw
+	a syntax_error exception.
+
+	* data/c++.m4 (b4_public_types_declare, b4_public_types_define):
+	Declare and define yy::parser::syntax_error.
+	* data/lalr1.cc: Include stdexcept.
+	(yy::parser::parse): Wrap the user action within a try/catch.
+	* data/glr.cc: Include stdexcept.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: add missing "inline".
+	* data/c++.m4 (b4_public_types_define): Add missing inline to
+	implementations provided in headers.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	%param: documentation.
+	* NEWS (2.6): Document %param, %lex-param, and %parse-param
+	changes.
+	* doc/bison.texinfo: Document that %lex-param and %parse-param
+	are n-ary.
+	Changes some examples to demonstrate it.
+	(Calc++ Parser): Use %param.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	style changes.
+	* src/parse-gram.y (add_param): Scope changes.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	%parse: support several arguments.
+	* src/parse-gram.y (current_param): New.
+	(param_type): Add param_none.
+	(params): New nonterminal.
+	Use it.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+
+2009-09-09  Akim Demaille  <demaille@gostai.com>
+
+	%param.
+	Provide a means to factor lex-param and parse-param common
+	declarations.
+
+	* src/parse-gram.y (param_type): New.
+	Define a %printer for it.
+	(add_param): Use it.
+	(%parse-param, %lex-param): Merge into...
+	(%parse): this new token.
+	Adjust the grammar to use it.
+	* src/scan-gram.l (RETURN_VALUE): New.
+	(RETURN_PERCENT_FLAG): Use it.
+	(RETURN_PERCENT_PARAM): New.
+	Use it to support %parse-param, %lex-param and %param.
 
 2009-09-03  Joel E. Denny  <jdenny@clemson.edu>
 
@@ -1918,6 +2113,34 @@
 	rename variable "exact_mode" to "explicit_bracketing".
 	* tests/named-ref.at: Adjust existing tests and add a new one.
 
+2009-09-04  Akim Demaille  <demaille@gostai.com>
+
+	Adjust synclines in src/parse-gram.[ch].
+	* tests/bison.in: Do some magic (including working around issues
+	with ylwrap) when this wrapper is used to compile
+	src/parse-gram.y.
+
+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>
+
+	Don't suppress warnings about unused parse.error.
+	* data/bison.m4 (b4_error_verbose_flag): Don't examine value of
+	%define variable parse.error unless b4_error_verbose_flag is
+	actually expanded in a skeleton.
+
 2009-09-03  Akim Demaille  <demaille@gostai.com>
 
 	* NEWS (2.4.2): Add "Internationalization" item.
@@ -1948,7 +2171,8 @@
 	(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/actions.at: Remove quotes in most tests.
+	* tests/calc.at: Likewise.
 	* tests/existing.at: Likewise.
 	* tests/input.at: Likewise.
 	* tests/local.at: Likewise.
@@ -2002,8 +2226,8 @@
 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/bison.m4 (b4_integral_parser_tables_map): 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.
@@ -2016,11 +2240,10 @@
 2009-08-25  Joel E. Denny  <jdenny@clemson.edu>
 
 	More fixes related to last two patches.
+	* data/bison.m4 (b4_integral_parser_tables_map): Fix YYTABLE
+	comments: zero indicates syntax error not default action.
 	* 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.
@@ -2134,12 +2357,67 @@
 
 2009-08-19  Akim Demaille  <demaille@gostai.com>
 
+	tests: distcc compliance.
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Discard distcc's
+	error messages from the output.
+
+2009-08-19  Akim Demaille  <demaille@gostai.com>
+
+	variables: simplify the upgrade of namespace into api.namespace.
+
+	This patch simplifies "variables: rename namespace as
+	api.namespace", commit 67501061076ba46355cfd9f9361c7eed861b389c.
+	Suggested by Joel E. Denny in
+	http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00006.html
+
+	* src/muscle-tab.c (muscle_percent_variable_update): New.
+	(muscle_percent_define_insert): Use it in replacement of the
+	previous tr invocation.
+	Remove variable_tr, no longer needed.
+	* data/bison.m4 (b4_percent_define_copy_, b4_percent_define_copy):
+	Remove.
+	* data/c++.m4: No longer handle namespace -> api.namespace.
+	* tests/input.at (%define backward compatibility): Check that
+	namespace is treated as api.namespace.
+
+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-19  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: use state_type.
+	* data/lalr1.cc (yysyntax_error_): Use state_type.
+	Move argument names into yy*.
+
+2009-08-19  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: get rid of yyparse's yystate.
+	yystate and yystack_[0].state are equal, keep only the latter.
+	The former was also used as a temporary variable to compute the
+	post-reduction state.  Move this computation into an auxiliary
+	function.
+
+	* data/glr.c (yyLRgotoState): Fuse variable definition and first
+	assignment.
+	* data/lalr1.cc (yy_lr_goto_state_): New.
+	(yyparse): Use it.
+	Replace remaining uses of yystate by yystate_[0].state.
+	Remove the former.
+
+2009-08-19  Akim Demaille  <demaille@gostai.com>
+
+	lalr1.cc: destroy $$ when YYERROR is called.
+	* data/lalr1.cc (yyreduce): Compute the resulting state before
+	running the user action so that yylhs is a valid symbol.
+	(yyerrorlab): Since yylhs is complete (it knows its type), we can
+	simply call yy_destroy_ to destroy $$ on YYERROR invocations.
+	* tests/c++.at (AT_CHECK_VARIANTS): Test YYERROR with variants.
+
 2009-08-18  Joel E. Denny  <jdenny@clemson.edu>
 
 	maint: update for gnulib's recent update-copyright changes
@@ -2202,13 +2480,78 @@
 
 2009-08-12  Akim Demaille  <demaille@gostai.com>
 
+	tests: GCC 4.5 compliance.
+	* tests/synclines.at (AT_SYNCLINES_COMPILE): Adjust to GCC 4.5's
+	messages about #error.
+
+2009-08-12  Akim Demaille  <demaille@gostai.com>
+
+	build: fix the generation of the documentation.
+	Some of our targets use "bison --help", but they can't depend on
+	"bison" itself (to avoid additional requirements on the user), so
+	they used to call "make src/bison" in the commands.  Then
+	concurrent builds may fail: one make might be aiming one of its
+	jobs at compiling src/bison, and another job at generating the man
+	page.  If the latter is faster than the former, then we have two
+	makes that concurrently try to compile src/bison.
+
+	This might also be a more convincing explanation for the failure
+	described in the patch "build: fix paths".
+
+	* Makefile.am (SUFFIXES): Initialize.
+	* build-aux/move-if-change: New, symlink to gnulib's.
+	* build-aux/local.mk: Ship it.
+	* doc/common.x: Remove, merged into...
+	* doc/bison.x: here.
+	* doc/local.mk (doc/bison.help): New.
+	($(CROSS_OPTIONS_TEXI)): Depend on it.
+	Use src/bison.
+	(.x.1): Replace with...
+	(doc/bison.1): this explicit, simpler, target.
+	(common_dep): Remove, inlined where appropriate.
+	(SUFFIXES, PREPATH): Remove, unused.
+
+2009-08-12  Akim Demaille  <demaille@gostai.com>
+
+	gnulib: improve prefixing.
+	* configure.ac (gl_PREFIXED_LIBOBJS): Don't rename it, rather,
+	change the value of...
+	(gl_LIBOBJS): this.
+	Adjust more variables.
+	* etc/prefix-gnulib-mk (prefix_assignment): Don't rename
+	gl_LIBOBJS.
+	(prefix): Also transform rules whose targets have slashes.
+	Use $prefix liberally.
+	Map @MKDIR_P@ to $(MKDIR_P).
+	Prefix directories that are mkdir'd.
+
+2009-08-12  Akim Demaille  <demaille@gostai.com>
+
+	build: fix paths.
+	When using $(top_builddir) inconsistently, Make (including GNU
+	Make) is sometimes confused.  As a result it may want to build
+	lib/libbison.la and $(top_builddir)/lib/libbison.la (the same
+	file, different names) concurrently, which, amusingly enough,
+	might end with:
+
+	  ranlib lib/libbison.a
+	  ranlib lib/libbison.a
+	  make[2]: *** [lib/libbison.a] Segmentation fault
+
+	on OS X.
+
+	* doc/local.mk, src/local.mk: Do not use $(top_builddir) when not
+	needed.
+
+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.
+	* tests/local.mk (TESTSUITE_AT): Add named-refs.at.
 
 2009-08-10  Joel E. Denny  <jdenny@clemson.edu>
 
@@ -2273,7 +2616,7 @@
 
 	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/local.mk (EXTRA_DIST): Add update-b4-copyright.
 	* build-aux/update-b4-copyright: New.
 	* data/yacc.c: Remove stray characters around b4_copyright
 	invocations.
@@ -2330,14 +2673,6 @@
 	* 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.
@@ -2347,6 +2682,14 @@
 	(SC_ESCAPED_CHARACTER): Warn if length is wrong.
 	* tests/input.at (Bad character literals): New test group.
 
+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>
 
 	* src/lalr.c (state_lookahead_tokens_count): Correct comment.
@@ -2371,10 +2714,6 @@
 	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.
@@ -2384,8 +2723,8 @@
 
 2009-07-04  Alex Rozenman  <rozenman@gmail.com>
 
-	Alphabetical order in src/Makefile.am.
-	* src/Makefile.am: Adjust.
+	Alphabetical order in src/local.mk.
+	* src/local.mk: Adjust.
 
 2009-07-04  Alex Rozenman  <rozenman@gmail.com>
 
@@ -2415,6 +2754,35 @@
 	Not only this is inefficient, this also builds incorrect sources
 	with several extractions mixed together.
 
+2009-06-29  Akim Demaille  <demaille@gostai.com>
+
+	parse.error: fix.
+	* data/bison.m4: Move code related to specific variables after the
+	definition of the variable-maintaining macros so that we don't
+	"invoke" b4_percent_define_check_values before it is defined.
+
+2009-06-29  Akim Demaille  <demaille@gostai.com>
+
+	variables: parse.error
+
+	Implement, document, and test the replacement of %error-verbose
+	by %define parse.error "verbose".
+	* data/bison.m4 (b4_error_verbose_if): Reimplement to track the
+	values of the parse.error variable.
+	Make "simple" its default value.
+	Check the valid values.
+	* src/parse-gram.y: Use %define parse.error.
+	(PERCENT_ERROR_VERBOSE): New token.
+	Support it.
+	* src/scan-gram.l: Support %error-verbose.
+
+	* doc/bison.texinfo (Decl Summary): Replace the documentation of
+	%define error-verbose by that of %define parse.error.
+	* NEWS: Document it.
+
+	* tests/actions.at, tests/calc.at: Use parse.error instead of
+	%error-verbose.
+
 2009-06-27  Alex Rozenman  <rozenman@gmail.com>
 
 	Implement support for named symbol references.
@@ -2441,6 +2809,27 @@
 	hash: check insertion for memory exhaustion.
 	* src/uniqstr.c (uniqstr_new): New.
 
+2009-06-24  Akim Demaille  <demaille@gostai.com>
+
+	variables: rename namespace as api.namespace.
+	Discussed in
+	http://lists.gnu.org/archive/html/bison-patches/2009-04/msg00033.html
+
+	* data/bison.m4 (b4_percent_define_copy_, b4_percent_define_copy):
+	New.
+	(b4_percent_define_use): New.
+	Use it where applicable.
+	* data/c++.m4: Replace uses of the variable "namespace" by
+	"api.namespace".
+	Default the latter to the former.
+	* doc/bison.texinfo (Decl Summary): Document "namespace" as
+	obsolete.
+	Document api.namespace.
+	Use @samp to document %define uses, keep @code for identifiers.
+	* NEWS: Likewise.
+	* tests/c++.at, tests/input.at: Test api.namespace instead of
+	namespace. (The tests passed with namespace.)
+
 2009-06-11  Akim Demaille  <demaille@gostai.com>
 
 	style changes.
@@ -2462,6 +2851,13 @@
 	* src/state.c (state_hash_insert): Check the return value of
 	hash_insert.
 
+2009-06-11  Akim Demaille  <demaille@gostai.com>
+
+	tests: honor TESTSUITEFLAGS in every check target.
+	* tests/local.mk (RUN_TESTSUITE): New.
+	(check-local, installcheck-local, maintainer-check-g++)
+	(maintainer-check-posix, maintainer-check-valgrind): Use it.
+
 2009-06-10  Akim Demaille  <demaille@gostai.com>
 
 	deterministic test suite.
@@ -2480,6 +2876,17 @@
 
 2009-06-10  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-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
@@ -2492,14 +2899,9 @@
 
 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.
+	build: avoid ignored errors.
+	* doc/local.mk ($(CROSS_OPTIONS_TEXI)): Don't generate ignored
+	errors, they pollute the output.
 
 2009-05-22  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -2507,8 +2909,8 @@
 	* 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
+	* 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.
@@ -2526,11 +2928,13 @@
 	* 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.
+	and update muscle_percent_define_insert invocations.
+	* 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
+	* src/muscle-tab.c (muscle_percent_define_insert): Implement
 	-F/--force-define behavior and priorities.
+	(muscle_percent_define_ensure): Update
+	muscle_percent_define_insert invocation.
 	* src/parse-gram.y (prologue_declaration): Update
 	muscle_percent_define_insert invocations.
 	* tests/input.at (`%define, --define'): Rename to...
@@ -2541,13 +2945,9 @@
 	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.
+	* 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.
@@ -2566,21 +2966,34 @@
 	* src/getargs.c (skeleton_arg): Remove now useless variable.
 	Should help the compiler see that this printf-like call is sane.
 
+2009-05-15  Akim Demaille  <demaille@gostai.com>
+
+	Rename token.prefix as api.tokens.prefix.
+	Discussed here.
+	http://lists.gnu.org/archive/html/bison-patches/2009-05/msg00024.html.
+
+	* NEWS, data/bison.m4, data/c.m4, data/java.m4, doc/bison.texinfo,
+	* tests/c++.at, tests/calc.at, tests/java.at, tests/local.at
+	(token.prefix): Rename as...
+	(api.tokens.prefix): this.
+
 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>
+2009-05-11  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.
+	doc: token.prefix
+	* doc/bison.simple (Decl Summary): Document token.prefix.
+	(Calc++ Parser): Various fixes.
+	Formatting changes.
+	Use token.prefix.
+	Introduce a macro TOKEN to shorten the code and make it more
+	readable.
+	(Calc++ Scanner): Adjust.
+	* NEWS (Variable token.prefix): New.
 
 2009-05-04  Akim Demaille  <demaille@gostai.com>
 
@@ -2590,11 +3003,6 @@
 
 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).
 
@@ -2622,7 +3030,7 @@
 	* data/c.m4 (b4_identification): Update comment.
 	* data/yacc.c: Update access.
 	* doc/bison.texinfo: Update.
-	* etc/bench.pl.in (bench_grammar): Update use.
+	* etc/bench.pl.in (bench_push_parser): 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
@@ -2664,38 +3072,11 @@
 	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.
@@ -2709,7 +3090,7 @@
 	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.
+	* 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.
@@ -2721,8 +3102,9 @@
 	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.
+	* data/bison.m4 (b4_integral_parser_tables_map): Adjust YYDEFACT
+	documentation.
+	* data/glr.c, data/lalr1.java: Sync copyright dates.
 	* doc/bison.texinfo (Decl Summary): Adjust lr.default_reductions
 	and lr.type documentation.  Make some other wording
 	improvements.
@@ -2744,6 +3126,11 @@
 	* tests/reduce.at (AT_TEST_LR_DEFAULT_RULES): Rename to...
 	(AT_TEST_LR_DEFAULT_REDUCTIONS): ... this, and update.
 
+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-21  Joel E. Denny  <jdenny@ces.clemson.edu>
 
 	Document %define lr.type and lr.default_rules.
@@ -2875,6 +3262,45 @@
 
 2009-04-20  Akim Demaille  <demaille@gostai.com>
 
+	Formatting change.
+
+2009-04-20  Akim Demaille  <demaille@gostai.com>
+
+	bison: factoring.
+	* src/output.c (token_definitions_output): Use symbol_id_get
+	instead of duplicating its logic.
+	* TODO (YYERRCODE): Extend.
+
+2009-04-20  Akim Demaille  <demaille@gostai.com>
+
+	variables: prefer error-verbose to error_verbose.
+	* data/bison.m4 (b4_error_verbose_if): Based on error-verbose
+	instead of error_verbose.
+	* src/scan-gram.l (%error-verbose): Map to the error-verbose
+	variable.
+	* doc/bison.texinfo: Promote %define error-verbose instead of
+	%error-verbose.
+	* tests/actions.at: Prefer %define error-verbose to %error-verbose.
+
+2009-04-15  Akim Demaille  <demaille@gostai.com>
+
+	variables: accept dashes.
+	* data/bison.m4 (b4_percent_define_if_define_): Also map dashes to
+	underscores.
+	* 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-20  Akim Demaille  <demaille@gostai.com>
+
 	Consistently refer to Yacc, not YACC.
 	* src/getargs.c (usage, warnings_args): s/YACC/Yacc/.
 
@@ -2889,30 +3315,31 @@
 	Document semicolon warnings.
 	* NEWS (2.5): Here.
 
-2008-12-08  Akim Demaille  <demaille@gostai.com>
+2009-04-14  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.
+	variables: use `parse.assert' instead of `assert'.
+	* TODO (assert): Remove.
+	* data/bison.m4 (b4_assert_if): Replace with...
+	(b4_parse_assert_if): this.
+	* data/lalr1.cc, data/variant.hh, tests/c++.at: Adjust.
+	* doc/bison.texinfo (Decl Summary): Document parse.assert.
 
-2008-12-07  Di-an Jan  <dianj@freeshell.org>
+2009-04-14  Akim Demaille  <demaille@gostai.com>
 
-	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.
+	variables: use `parse.trace' instead of `debug'.
+	* src/getargs.c (getargs): Map -t to %define trace.parse.
+	* src/scan-gram.l (%debug): Map to %define trace.parse.
+	* data/bison.m4 (b4_percent_define_if_define): Map `.' in variable
+	names to `_' in macro names.
+	(b4_debug_if): Replace with...
+	(b4_parse_trace_if): this.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java,
+	* data/yacc.c: Adjust.
+	* doc/bison.texinfo (Decl Summary): Document %debug as obsoleted.
+	Use @code to label the variable list.
+	Document the variable parse.trace.
+	(Tracing): Promote the parse.trace variable.
+	* TODO: %printer is not documented.
 
 2009-04-14  Akim Demaille  <demaille@gostai.com>
 
@@ -2933,114 +3360,59 @@
 
 2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
 
-	* NEWS (2.5): Describe new -D/--define feature.
+	* NEWS (2.5): New section.  Describe new -D/--define feature.
 
-2008-11-10  Akim Demaille  <demaille@gostai.com>
+2009-04-06  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.
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
 
-2008-11-10  Akim Demaille  <demaille@gostai.com>
+2009-04-06  Akim Demaille  <demaille@gostai.com>
 
-	muscles_output.
-	* src/output.c (muscles_output): New, extracted from...
-	(output_skeleton): here.
-	Adjust.
+	rename muscle_tab.* as muscle-tab.* for consistency.
+	* src/muscle_tab.h, src/muscle_tab.c: Rename as...
+	* src/muscle-tab.h, src/muscle-tab.c: these.
+	* src/getargs.c, src/local.mk, src/main.c, src/output.c,
+	* src/parse-gram.y, src/reader.c, src/scan-code.l: Adjust.
 
-2008-11-21  Akim Demaille  <demaille@gostai.com>
+2009-04-06  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.
+	Makefile: introduce $(BISON).
+	* src/local.mk (BISON): New.
+	(YACC): Use it.
 
-2008-11-20  Di-an Jan  <dianj@freeshell.org>
+2009-04-06  Akim Demaille  <demaille@gostai.com>
 
-	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.
+	parser: handle %locations as %define locations.
+	* src/getargs.h, src/getargs.c (locations_flag): Remove.
+	* src/getargs.c, src/scan-code.l: Use muscle_percent_define_ensure
+	to set "locations" to true.
+	* src/output.c (prepare): Don't output "locations".
+	* src/scan-gram.l (%locations): Handle it as a %<flag>.
+	* src/parse-gram.y: It's no longer a token.
+	Don't handle it.
+	* data/bison.m4 (b4_locations_if): Define it with
+	b4_percent_define_if_define.
+	* data/c.m4, data/glr.cc: Adjust.
 
-2009-02-25  Akim Demaille  <demaille@gostai.com>
+2009-04-06  Akim Demaille  <demaille@gostai.com>
 
-	Copyright years.
-	* data/glr.c: Add 2007 and 2008 here, consistenly with the comments.
+	Regen.
+	* src/parse-gram.c: Regen.
 
-2008-12-08  Akim Demaille  <demaille@gostai.com>
+2009-04-06  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.
+	muscle: factor the handling of obsolete of obsolete directives.
+	Suggested by Joel E. Denny.
 
-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.
+	* src/muscle_tab.h, src/muscle_tab.c (muscle_percent_define_ensure):
+	New, extracted from...
+	* src/parse-gram.y (prologue_declaration: pure-parser): here.
+	Remove it.
+	(prologue_declaration: "%<flag>"): Use
+	muscle_percent_define_ensure.
+	(%error-verbose, %pure-parser): No longer tokens.
+	* src/scan-gram.l (pure-parser): Return as a %<flag>.
 
 2009-04-06  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -3049,35 +3421,12 @@
 	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.
+	* m4/m4.m4: Make it a symbolic link to submodules/autoconf/m4/m4.m4.
 	* configure.ac: Update to use AC_PROG_GNU_M4.
 	Reported by Eric Blake.
 
@@ -3087,6 +3436,54 @@
 	* HACKING: Incorporate instructions from gnulib/doc/README.
 	* bootstrap.conf (gnulib_modules): Add gendocs.
 
+2009-04-03  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
+
+2009-04-03  Akim Demaille  <demaille@gostai.com>
+
+	Factor %FLAG at scan level.
+	* src/parse-gram.y (PERCENT_DEBUG, PERCENT_ERROR_VERBOSE): Token
+	definitions and associated rules, replaced by....
+	(PERCENT_FLAG): this new token type, and rule.
+	* src/scan-gram.l (RETURN_PERCENT_FLAG): New.
+	Use it for %debug and %error-verbose.
+
+2009-04-03  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
+
+2009-04-03  Akim Demaille  <demaille@gostai.com>
+
+	Treat %debug as %define debug.
+	* data/bison.m4 (b4_debug_if): New.
+	* data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c,
+	* data/lalr1.java: Use it instead of b4_debug_flag.
+	* src/getargs.h, src/getargs.c (debug_flag): Remove.
+	* src/output.c (prepare): Don't output it.
+	* src/parse-gram.y: Treat %debug as %define debug.
+
+2009-04-03  Akim Demaille  <demaille@gostai.com>
+
+	Treat %error-verbose as %define error_verbose.
+	This allows to pass -Derror_verbose on the command line.  Better
+	yet, it allows to pass -Derror_verbose=$(ERROR_VERBOSE), with
+	ERROR_VERBOSE being defined as false or true.
+	* data/bison.m4 (b4_percent_define_if_define): Instead of relying
+	on b4_percent_define_ifdef, for does not check the defined value,
+	but only whether the symbol is defined, rely on
+	b4_percent_define_flag_if, so that a value of "false" is processed
+	as a false.
+	If not defined, define the flag to "false".
+	(b4_error_verbose_if): New.
+	* data/glr.c, data/lalr1.cc, data/yacc.c: Use it instead of
+	b4_error_verbose_flag.
+	* src/getargs.h, src/getargs.c (error_verbose_flag): Remove.
+	* src/output.c (prepare): Don't output it.
+	* src/parse-gram.y (%error-verbose): Treat as %define error_verbose.
+
 2009-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
 
 	Fix strange %define locations for default values.
@@ -3106,16 +3503,12 @@
 	* tests/skeletons.at (%define Boolean variables: invalid skeleton
 	defaults): Update output.
 
-2008-11-07  Akim Demaille  <demaille@gostai.com>
+2009-04-03  Joel E. Denny  <jdenny@ces.clemson.edu>
 
-	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.
+	Pacify ./configure --enable-gcc-warnings.
+	* Makefile.am (AM_CFLAGS): Remove $(WERROR_CFLAGS) because many files
+	in lib won't compile with it.
+	* src/local.mk (src_bison_CFLAGS): Use $(WERROR_CFLAGS) here only.
 
 2009-03-31  Akim Demaille  <demaille@gostai.com>
 
@@ -3158,8 +3551,201 @@
 
 	gnulib: update.
 	* gnulib: Update to latest.
-	* lib/Makefile.am (AM_CPPFLAGS): It is now defined by gnulib, so
-	use +=.
+	* src/local.mk (AM_CFLAGS): Move to...
+	* Makefile.am: here.
+	* etc/prefix-gnulib-mk (prefix_assignment): Also transform
+	AM_CFLAGS.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Share b4_yytranslate_define.
+	* data/lalr1.cc (b4_yytranslate_define): Move to...
+	* data/c++.m4: here.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Use locations in the variant example.
+	Yes, this obfuscates the point of this example, variants only.
+	But glr.cc cannot work (yet?) without locations.  This change
+	makes it easier to use this example with glr.cc.
+
+	* examples/variant.yy (assert): %define it.
+	(locations): Request them.
+	(yylex): Bind the location to the stage.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Dub make_TOKEN as a public type interface.
+	* data/c++.m4 (b4_symbol_constructor_declare)
+	(b4_symbol_constructor_define): New empty stubs.
+	(b4_public_types_declare, b4_public_types_define): Use them.
+	* data/lalr1.cc (b4_symbol_constructor_declare)
+	(b4_symbol_constructor_declare_)
+	(b4_symbol_constructor_define_, b4_symbol_constructor_define):
+	Move to...
+	* data/variant.hh: here.
+	Remove the "b4_variant_if" parts, as variant.hh is loaded only if
+	needed.
+	* data/lalr1.cc: No longer invoke b4_symbol_constructor_define and
+	b4_symbol_constructor_declare, as it is now done by
+	b4_public_types_define and b4_public_types_declare.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Coding style changes.
+	* data/lalr1.cc (b4_symbol_constructor_declaration_)
+	(b4_symbol_constructor_declarations)
+	(b4_symbol_constructor_definition_)
+	(b4_symbol_constructor_definitions)
+	(b4_yytranslate_definition): Rename as...
+	(b4_symbol_constructor_declare_)
+	(b4_symbol_constructor_declare)
+	(b4_symbol_constructor_define_)
+	(b4_symbol_constructor_define)
+	(b4_yytranslate_define): these.
+	* data/variant.hh (b4_variant_definition): Rename as...
+	(b4_variant_define): this.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Factor b4_assert_if, b4_lex_symbol_if, and b4_variant_if.
+	* data/bison.m4 (b4_percent_define_if_define): New.
+	* data/c++.m4 (b4_variant_if): Move to...
+	* data/bison.m4: Here, using b4_percent_define_if_define.
+	* data/lalr1.cc (b4_assert_if, b4_lex_symbol_if): Move to...
+	* data/bison.m4: Here, using b4_percent_define_if_define.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	Dub symbol_type_base as a public type.
+	* data/c++.m4 (b4_public_types_declare): Now define
+	symbol_type_base and symbol_type.
+	(b4_public_types_define): New.
+	In both cases, the definitions are taken verbatim from lalr1.cc.
+	* data/lalr1.cc: Adjust.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	b4_public_types_declare.
+	* data/c++.m4 (b4_public_types_declare): New.
+	* data/glr.cc, data/lalr1.cc: Use it.
+
+2009-03-02  Akim Demaille  <demaille@gostai.com>
+
+	b4_semantic_type_declare.
+	* data/c++.m4 (b4_semantic_type_declare): New.
+	Factors and generalizes what was in glr.cc and lalr1.cc.
+	* data/variant.hh (b4_semantic_type_declare): Redefine it for
+	variants.
+	* data/lalr1.cc, data/glr.cc: Use it.
+
+2009-02-26  Akim Demaille  <demaille@gostai.com>
+
+	Upgrade gnulib.
+	* gnulib: Upgrade from master.
+	* lib/.cvsignore, lib/.gitignore, m4/.cvsignore, m4/.gitignore:
+	Regen.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Remove useless arguments.
+	* data/glr.c (yy_reduce_print): $$ and @$ are not used and not
+	relevant.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+	* data/lalr1.cc: here.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Fix glr.cc's debug level handling.
+	* data/glr.cc (yydebug_): Remove, as it is actually yydebug from
+	glr.c which is used.
+	(debug_level, set_debug_level): Adjust.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Copyright years.
+	* data/glr.c: Add 2007 and 2008 here, consistently with the comments.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Style changes.
+	* etc/bench.pl.in (generate_grammar_list): Consistently use
+	location_type, not yy::location.
+
+2009-02-25  Akim Demaille  <demaille@gostai.com>
+
+	Comment change.
+	* data/lalr1.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Make yyparser::error public.
+	* data/lalr1.cc: here.
+	There is no good reason to keep it private (and it is convenient
+	to use it from the scanner for instance).  It is already public in
+	glr.cc.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+	* data/glr.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Remove trailing blanks.
+	The epilogue has its own ending \n, no need to add another.
+
+	* data/glr.c, data/lalr1.java, data/yacc.c: dnl when outputting the
+	epilogue.
+	* data/glr.cc: dnl when extending the epilogue.
+	Remove stray "private:".
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_c_modern.
+	* data/c.m4 (b4_c_function_decl): Here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+	* data/lalr1.cc: here.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Extract variant.hh
+	* data/variant.hh: New, extracted from...
+	* data/lalr1.cc: here.
+	Adjust.
+	* data/local.mk: Adjust.
+
+2009-02-19  Akim Demaille  <demaille@gostai.com>
+
+	Extract stack.hh from lalr1.cc.
+	* data/stack.hh: New.
+	* data/lalr1.cc: Extract from here.
+	* data/local.mk: Adjust.
+
+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-01-28  Akim Demaille  <demaille@gostai.com>
+
+	* NEWS: Update information about 2.4.1 and 2.4.2.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Reformat NEWS.
+	* NEWS: Use more outline-mode markup.
+	Suggested by Jim Meyering.
 
 2009-01-08  Akim Demaille  <demaille@gostai.com>
 
@@ -3175,30 +3761,110 @@
 	* 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>
+2008-12-11  Akim Demaille  <demaille@gostai.com>
 
-	Version 2.4.1.
-	* NEWS: Set version and date.
-	* lib/Makefile.am: Update copyright year.
-	* tests/atlocal.in: Update copyright year.
+	Pass the token type to yysyntax_error.
+	* data/yacc.c (yysyntax_error): Take the translated token instead
+	of the raw number.
+	Adjust callers.
+	* TODO: Update.
 
-2008-12-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+2008-12-11  Akim Demaille  <demaille@gostai.com>
 
-	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.
+	Formatting changes.
+	* data/glr.c: Formatting changes.
 
-2008-12-11  Joel E. Denny  <jdenny@ces.clemson.edu>
+2008-12-11  Akim Demaille  <demaille@gostai.com>
 
-	* gnulib: Update submodule to HEAD.
+	Propagate i18n changes into glr.c.
+	* TODO: Update.
+	* data/glr.c (yyreportSyntaxError): Use "switch" instead of
+	building the error message format dynamically.
+	* data/lalr1.java: Formatting changes.
 
-2008-12-09  Akim Demaille  <demaille@gostai.com>
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Use testsuite -C.
+	* tests/local.mk: Replace "cd && testsuite" by "testsuite -C".
+	Solves problems when top_srcdir is an absolute path.
+	Suggested by Eric Blake.
+	* configure.ac: Require Autoconf 2.62.
+
+2008-12-11  Akim Demaille  <demaille@gostai.com>
+
+	Simplify the i18n of the error messages.
+	* data/lalr1.cc: Comment changes.
+	* data/yacc.c (yysyntax_error): Rewrite, using a switch as in
+	lalr1.cc instead of building dynamically the format string.
+
+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-08  Akim Demaille  <demaille@gostai.com>
 
 	Update data/README.
 	* data/README: Document glr.cc, lalr1.java, m4sugar and xslt.
 
+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-12-08  Akim Demaille  <demaille@gostai.com>
+
+	Test token.prefix in all the skeletons.
+	* data/java.m4 (b4_token_enum): Use the token.prefix.
+	* tests/local.at (AT_BISON_OPTION_PUSHDEFS): Define AT_TOKEN_PREFIX.
+	* tests/calc.at (_AT_DATA_CALC_Y): Use it.
+	Add checks for yacc.c, glr.c, lalr1.cc and glr.cc.
+	* tests/java.at: Comment changes.
+	(AT_CHECK_JAVA_MINIMAL): Define the END token.
+	(Java parser class and package names): Add token.prefix check.
+
+2008-12-08  Akim Demaille  <demaille@gostai.com>
+
+	Fix regeneration of atconfig.
+	* tests/local.mk (tests/atconfig): The rule was incorrect, but
+	remove it: now that there is no tests/Makefile.am, the top-level
+	Makefile properly updates atconfig when needed.
+
+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.
+
+2008-12-07  Akim Demaille  <demaille@gostai.com>
+
+	Update gnulib.
+	* gnulib: Update from master.
+
 2008-12-05  Eric Blake  <ebb9@byu.net>
 
+	Avoid compiler warning.
+	* src/output.c (muscle_insert_item_number_table): Delete unused
+	function.
+
+2008-12-02  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.
@@ -3208,13 +3874,300 @@
 	(_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>
+2008-12-01  Akim Demaille  <demaille@gostai.com>
 
-	* NEWS: Clarify a little.
+	Use b4_symbol for printers and destructors everywhere.
+	* data/bison.m4 (b4_symbol_action_location): New.
+	* data/c.m4 (b4_symbol_actions): Remove.
+	Adjust all callers to use by b4_symbol_foreach and the corresponding
+	b4_symbol_printer/destructor macro.
+	* data/glr.cc: Adjust.
+	* data/lalr1.java: Adjust the %destructor sanity check.
+	* src/output.c (symbol_code_props_output): Remove, we no longer
+	need the b4_symbol_printers/destructors tables.
 
-2008-11-19  Joel E. Denny  <jdenny@ces.clemson.edu>
+2008-12-01  Akim Demaille  <demaille@gostai.com>
 
-	* NEWS: Update for recent changes.
+	Use b4_symbol_case_.
+	* data/lalr1.cc, data/bison.m4 (b4_symbol_action): Use
+	b4_symbol_case_.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+	Move b4_symbol based macro to bison.m4.
+	* data/lalr1.cc (b4_symbol_, b4_symbol, b4_symbol_if)
+	(b4_symbol_action, b4_symbol_destructor, b4_symbol_printer)
+	(b4_symbol_case_, b4_symbol_foreach, b4_type_action_)
+	(b4_type_foreach): Move to...
+	* data/bison.m4: Here.
+	* data/lalr1.cc (b4_symbol_action): Specialize for C++: use
+	b4_symbol_value_template instead of b4_symbol_value.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+	b4_symbol/type_foreach.
+	* data/lalr1.cc (b4_symbol_foreach, b4_type_foreach): New.
+	Use them.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+	Use the symbol properties to output the printer/destructor for lalr1.cc.
+	Instead of defining complex list of tuples to define various
+	properties of the symbols, we now prefer to define symbols as
+	"structs" in m4: using the symbol key (its number), and the
+	property name, b4_symbol gives it value.  Use this to handle
+	destructors and printers.
+
+	* src/output.c (CODE_PROP): New.
+	(prepare_symbol_definitions): Use it to define the printer and
+	destructor related attributes of the symbols.
+	* data/lalr1.cc (b4_symbol_actions): Rename as...
+	(b4_symbol_action): this.
+	Use b4_symbol instead of 6 arguments.
+	(b4_symbol_printer, b4_symbol_destructor): New.
+	Use them instead of b4_symbol_actions.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+	Avoid capturing variables too easily.
+	* src/muscle_tab.h (MUSCLE_INSERT_BOOL, MUSCLE_OBSTACK_SGROW): Use
+	v__ and p__ instead of v and p.
+
+2008-12-01  Akim Demaille  <demaille@gostai.com>
+
+	Remove spurious empty line before syncline.
+	* data/bison.m4 (b4_syncline): Don't output an empty line before
+	the output.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Convert lib/Makefile.am into lib/local.mk.
+	The real problem is rather gnulib.mk, which itself is extracted
+	from a Makefile.am that gnulib expects to the "recursive".  The
+	tool prefix-gnulib-mk converts such a gnulib.mk to be
+	non-recursive.  Also, some AC_SUBST variables need to be adjusted.
+
+	* etc/prefix-gnulib-mk: New.
+	* bootstrap (slurp): Use it to convert further gnulib.mk.
+	No longer try to avoid re-creation of lib/gnulib.mk as the changes
+	are deeper.
+	* lib/Makefile.am: Rename as...
+	* lib/local.mk: this.
+	Adjust to be prefixed.
+	* Makefile.am, configure.ac: Adjust.
+	* src/local.mk (AM_CPPFLAGS): Extend it, don't define it.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	s/_FLAGS/FLAGS/.
+	* tests/local.mk (TESTSUITE_FLAGS, AUTOTEST_FLAGS): Rename as...
+	(TESTSUITEFLAGS, AUTOTESTFLAGS): these to compy with the GCS.
+	Reported by Eric Blake.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_parser_tables_define in glr.cc.
+	* data/glr.c: Use b4_parser_tables_define instead of defining the
+	(deterministic integral) tables by hand.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_parser_tables_define in Java.
+	* data/java.m4 (b4_typed_parser_table): Rename as...
+	(b4_typed_parser_table_define): this, for consistency.
+	Accept a comment as $4.
+	Move $2 into yy*_.
+	(b4_integral_parser_table): Rename as...
+	(b4_integral_parser_table_define): this.
+	* data/lalr1.java: Adjust all uses.
+	Use b4_parser_tables_define instead of generation by hand.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Prepare the convergence bw C style and Java table generation.
+	* data/bison.m4 (b4_tables_map, b4_tables_declare)
+	(b4_tables_define): Rename as...
+	(b4_integral_parser_tables_map, b4_parser_tables_declare)
+	(b4_parser_tables_define): these.
+	* data/c.m4 (b4_table_define): Rename as...
+	(b4_integral_parser_table_define): this.
+	* data/lalr1.cc: Adjust.
+	(b4_table_define, b4_table_declare): Rename as...
+	(b4_integral_parser_table_define)
+	(b4_integral_parser_table_declare): these.
+	(yyrline_): Move the comment where it is actually used.
+	* data/yacc.c: Adjust.
+	(yyrline): Use b4_integral_parser_table_define.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Factor the generation of the (integral) tables bw yacc.c and lalr1.cc.
+	* data/lalr1.cc (b4_tables_map): Move to...
+	* data/bison.m4: here.
+	Update the comment for yytable during the flight.
+	(b4_tables_declare, b4_tables_define): New.
+	* data/lalr1.cc: Use them.
+	* data/c.m4 (b4_table_define): New.
+	* data/yacc.c: Use b4_tables_define instead of output the tables
+	by hand.
+	* tests/regression.at (Web2c Actions): Adjust the expected output,
+	the order of the tables changed.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Get rid of (yy)rhs and (yy)prhs.
+	These tables are no longer needed in the parsers, and they don't seem to
+	be useful.  They are not documented either.
+
+	* src/output.c (prepare_rules): Get rid of rhs and prhs.
+	Adjust the computation of (yy)r2.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Rule length is unsigned.
+	* src/gram.h, src/gram.c (rule_rhs_length): Return a size_t.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Get rid of lalr1-split.cc.
+	It was no longer maintainer.
+
+	* data/lalr1-split.cc: Remove.
+	* etc/bench.pl.in (bench_fusion_parser): Remove.
+	Adjust.
+
+2008-11-26  Akim Demaille  <demaille@gostai.com>
+
+	Use yy* consistently.
+	* data/glr.c: Now that yyrhs no longer exists as a global
+	variable, rename local "rhs" variables into "yyrhs" for
+	consistency.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Get rid of yyrhs and yyprhs in glr.c.
+	* data/glr.c (yyrhs, yyprhs): Remove.
+	Instead, use the state stack and yystos.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Flag glr tests.
+	* tests/local.at (_AT_BISON_OPTION_PUSHDEFS): If glr, declare it
+	as an Autotest keyword.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Prefer TESTSUITE_FLAGS.
+	TESTSUITEFLAGS is barely readable.
+
+	* tests/local.mk (TESTSUITE_FLAGS): Default to $(TESTSUITEFLAGS)
+	for backward compatibility.
+	Use the former instead of the latter.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Get rid of yyrhs and yyprhs in larl1.java.
+	* data/lalr1.java (yyrhs_, yyprhs_): Remove.
+	(yy_reduce_print): Rather, use yystos_ and the state stack.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Get rid of yyrhs and yyprhs in yacc.c.
+	They were used to get the symbol types, given a rule number, when
+	displaying the top of the stack before a reduction.  But the
+	symbol type is available from the state stack.  This has two be
+	benefits: two tables less in the parser (making it smaller), and a
+	more consistent use of the three stacks which will help to fuse
+	them.
+
+	* data/yacc.c (yyprhs, yyrhs): Remove.
+	(YY_REDUCE_PRINT): Pass yyssp to yy_reduce_print.
+	(yy_reduce_print): Take yyssp as argument.
+	Use it, together with yystos, to get the symbol type.
+	* tests/regression.at (Web2c Report): Remove these tables from the
+	expected output.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	b4_tables_map.
+	The point is to factor the generation of the tables across skeletons.
+	This is language dependant.
+
+	* data/c.m4 (b4_comment_): New.
+	Should be usable to define how to generate tables independently of
+	the language.
+	(b4_c_comment): New.
+	(b4_comment): Bounce to b4_c_comment.
+	Now support $2 = [PREFIX] for indentation.
+	* data/lalr1.cc (b4_table_declare): Don't output a comment if
+	there is no comment.
+	Indent it properly when there is one.
+	Output the ending semicolon.
+	(b4_table_define): Space changes.
+	Output the ending semicolon.
+	(b4_tables_map): New.
+	Use it twice instead of declaring and defining the (integral)
+	tables by hand.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	b4_table_declare.
+	* data/lalr1.cc (b4_table_declare): New.
+	Use it to declare the tables defined with b4_table_define.
+	(b4_table_define): Declare a third arg to match b4_table_declare
+	signature.
+	Move all the comments around invocations of b4_table_define into
+	the invocations itselves.
+	Move things around to have the order for declarations and
+	definitions.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+	* data/lalr1.java: here.
+
+2008-11-25  Akim Demaille  <demaille@gostai.com>
+
+	b4_args is more general than only C++.
+	* data/lalr1.cc (b4_args, _b4_args): Move to...
+	* data/bison.m4: here.
+
+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.
+
+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/local.mk ($(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/local.mk (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.
 
 2008-11-18  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -3225,7 +4178,7 @@
 	* 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
+	(AT_CHECK_CALC): From AT_FULL_COMPILE, 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.
@@ -3233,8 +4186,41 @@
 	(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.
+	(AT_FULL_COMPILE): Extend to support an additional source file.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+	More TODO.
+	* TODO: More short term issues.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_subtract where possible.
+	* data/lalr1.cc (b4_subtract): Move to...
+	* data/bison.m4: here.
+	* data/glr.c (b4_rhs_data): Use it.
+	* data/yacc.c (b4_rhs_value, b4_rhs_location): Use it.
+
+2008-11-18  Akim Demaille  <demaille@gostai.com>
+
+	Remove incorrect mode specification.
+	* data/glr.cc: Don't pretend it's C code.
+
+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  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -3251,6 +4237,599 @@
 	(Copying): Make description a sentence.
 	(Java Action Features): Remove period to match the rest of menu.
 
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+	Handles several --enable-gcc-warnings.
+	* src/getargs.c (command_line_location): Set parameters to void.
+	* src/output.c (symbol_type_name_cmp): Make static.
+	(symbols_by_type_name): Set parameters to void.
+	(symbol_definitions_output): Remove unused parameter.  Rename as...
+	(prepare_symbol_definitions): this.
+	(muscles_output): Move symbol_definitions_output to...
+	(output): here as prepare_symbol_definitions.
+	* tests/c++.at (AT_CHECK_VARIANTS): Remove unused parameters of main.
+	(AT_CHECK_NAMESPACE): Make unused parameter lloc unnamed.
+
+2008-11-17  Di-an Jan  <dianj@freeshell.org>
+
+	* tests/c++.at (AT_CHECK_VARIANTS): Fixes tests 198-202.
+	Use AT_DATA_GRAMMAR instead of AT_DATA for compiled tests.
+
+2008-11-16  Akim Demaille  <demaille@gostai.com>
+
+	Add missing $(EXEEXT).
+	* doc/local.mk ($(CROSS_OPTIONS_TEXI)): The target is
+	"src/bison$(EXEEXT)".
+	Reported by Di-an Jan.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	* TODO: Update.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+	* tests/input.at: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove duplicate header inclusion.
+	* src/LR0.c: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	* src/parse-gram.h, src/parse-gram.c: Regen.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Support parametric types.
+
+	There are two issues to handle: first scanning nested angle
+	bracket pairs to support types such as std::pair< std::string,
+	std::list<std::string> > >.
+
+	Another issue is to address idiosyncracies of C++: do not glue two
+	closing angle brackets together (otherwise it's operator>>), and
+	avoid sticking blindly a TYPE to the opening <, as it can result
+	in '<:' which is a digraph for '['.
+
+	* src/scan-gram.l (brace_level): Rename as...
+	(nesting): this.
+	(SC_TAG): New.
+	Implement support for complex tags.
+	(tag): Accept
+	, but not <.
+	* data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
+	(b4_symbol_variant): Leave space around types as parameters.
+	* examples/variant.yy: Use nested template types and leading ::.
+	* src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
+	Rename as...
+	(TAG, TAG_ANY, TAG_NONE, tag.opt): these.
+	* tests/c++.at: Test parametric types.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+	Test token.prefix.
+	This is not sufficient, but we test at least that the make_SYMBOL
+	interface is not affected by token.prefix.  A more general test
+	will be implemented when the support of token.prefix is generalized
+	to more skeletons.
+
+	* tests/c++.at: One more variant test, using token.prefix.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+	Test the make_TOKEN interface.
+	* tests/c++.at (AT_CHECK_VARIANTS): Require and use locations.
+	Factor the common code in yylex.
+	Use it to test "%define lex_symbol".
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+	Formatting change.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+	Simplify code for variants bench marks.
+	* etc/bench.pl.in (&generate_grammar_list): Define and use
+	location_type.
+	Factor the common code in yylex.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Better error message.
+	* bootstrap (find_tool): Fix the error message.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Update variant.yy to newest interface.
+	* examples/variant.yy: Define lex_symbol.
+	Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Don't use locations in variant.yy.
+	* examples/variant.yy: Adjust to not using locations.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+	* data/local.mk, etc/local.mk, examples/local.mk: Use Automake
+	comments for the license.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove tests/Makefile.am.
+	* tests/Makefile.am: Rename as...
+	* tests/local.mk: this.
+	* Makefile.am, configure.ac: Adjust.
+	* Makefile.am (DISTCLEANFILES): Define.
+	(maintainer-check, maintainer-xml-check, maintainer-push-check):
+	Remove, we no longer need to bounce to the real targets.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	djgpp/local.mk.
+	* Makefile.am (EXTRA_DIST): Move djgpp related part to...
+	* djgpp/local.mk: this new file.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove doc/Makefile.am.
+	* doc/Makefile.am: Rename as...
+	* doc/local.mk: this.
+	Adjust paths
+	* Makefile.am, configure.ac: Adjust.
+	* Makefile.am (MOSTLYCLEANFILES): New.
+	* src/local.mk: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Move sc_tight_scope into maint.mk.
+	It does not work, and I don't know how it was supposed to work: it
+	seems to be looking for sources in the build tree.  I just moved
+	it at a better place, fixing it is still required.
+
+	* src/local.mk (echo): Remove.
+	(sc_tight_scope): Move to...
+	* maint.mk: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.h: Regen.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove src/Makefile.am.
+	* src/Makefile.am: Rename as...
+	* src/local.mk: this.
+	Prefix all the paths with src/.
+	(AUTOMAKE_OPTIONS): Build object files in the sub dirs.
+	(AM_CPPFLAGS): Find find in builddir/src.
+	(YACC): Move the flags into...
+	(AM_YFLAGS): here.
+	* maint.mk (sc_tight_scope): Disable.
+	It used to bounce to the version in src/Makefile.am which is now
+	part of this very Makefile.
+	* Makefile.am, configure.ac: Adjust.
+	* src/scan-code-c.c, src/scan-code.l: We can no longer rely on
+	include "..." to find files "here": we are no longer in src/, so
+	qualify the includes with src/.
+	* doc/Makefile.am (PREPATH): No longer include the top_builddir
+	prefix.
+	(.x.1): Adjust to be able to create src/foo from the top level
+	Makefile, instead of going bounce to src/Makefile the creation of
+	foo.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove useless variable.
+	* doc/Makefile.am (srcsrcdir): Remove.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove data/Makefile.am.
+	* data/Makefile.am: Rename as...
+	* data/local.mk: this.
+	Adjust paths.
+	* Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove etc/Makefile.am.
+	* etc/Makefile.am: Rename as...
+	* etc/local.mk: this.
+	Adjust.
+	* Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove examples/local.mk.
+	examples/calc++/Makefile.am might be interesting to keep as is, since
+	it is an example in itself.
+
+	* examples/Makefile.am: Rename as...
+	* examples/local.mk: this.
+	Adjust.
+	* Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Remove build-aux/Makefile.am.
+	Recursive Makefiles are really way too slow, let's get rid of some of
+	them.
+
+	* build-aux/Makefile.am: Rename as...
+	* build-aux/local.mk: this.
+	Adjust paths.
+	* Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Provide convenience constructors for locations and positions.
+	* 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.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+	Instead of using make_symbol<TOK_FOO>, generate make_FOO for each
+	token type.
+	Using template buys us nothing, and makes it uselessly complex to
+	construct a symbol.  Besides, it could not be generalized to other
+	languages, while make_FOO would work in C/Java etc.
+
+	* data/lalr1.cc (b4_symbol_): New.
+	(b4_symbol): Use it.
+	(b4_symbol_constructor_declaration_)
+	(b4_symbol_constructor_definition_): Instead of generating
+	specializations of an overloaded template function, just generate
+	several functions whose names are forged from the token names
+	without the token.prefix.
+	(b4_symbol_constructor_declarations): Generate them for all the
+	symbols, not just by class of symbol type, now that instead of
+	specializing a function template by the token, we generate a
+	function named after the token.
+	(b4_symbol_constructor_specialization_)
+	(b4_symbol_constructor_specializations): Remove.
+	* etc/bench.pl.in: Adjust to this new API.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	%define token.prefix.
+	Provide a means to add a prefix to the name of the tokens as
+	output in the generated files.  Because of name clashes, it is
+	good to have such a prefix such as TOK_ that protects from names
+	such as EOF, FILE etc.  But it clutters the grammar itself.
+
+	* data/bison.m4 (token.prefix): Empty by default.
+	* data/c.m4 (b4_token_enum, b4_token_define): Use it.
+	* data/lalr1.cc (b4_symbol): Ditto.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Compute at M4 time some of the subtractions.
+	* data/lalr1.cc (b4_subtract): New.
+	(b4_rhs_data): Use it.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	symbol::token.
+	This allows the user to get the type of a token returned by yylex.
+
+	* data/lalr1.cc (symbol::token): New.
+	(yytoknum_): Define when %define lex_symbol, independently of
+	%debug.
+	(yytoken_number_): Move into...
+	(symbol::token): here, since that's the only use.
+	The other one is YYPRINT which was not officially supported
+	by lalr1.cc, and anyway it did not work since YYPRINT uses this
+	array under a different name (yytoknum).
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	YYERRCODE.
+	* TODO (YYERRCODE): Mention the case of $undef.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	TODO: YYPRINT.
+	* TODO (YYPRINT): New.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+	* data/lalr1.cc, data/yacc.c: Fix the description of the
+	yytranslate and yytoknum tables.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Define make_symbol in the header.
+	To reach good performances these functions should be inlined (yet
+	this is to measure precisely).  To this end they must be available
+	to the caller.
+
+	* data/lalr1.cc (b4_symbol_constructor_definition_): Qualify
+	location_type with the class name.
+	Since will now be output in the header, declare "inline".
+	No longer use b4_symbol_constructor_specializations, but
+	b4_symbol_constructor_definitions in the header.
+	Don't call it in the *.cc file.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Define yytranslate in the header for lex_symbol.
+	* data/lalr1.cc: Move the invocation of b4_yytranslate_definition
+	into the header file when using %define lex_symbol.
+	(yytranslate_): Declare inline.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Define the constructors of symbol_type in
+	b4_symbol_constructor_definitions.
+	The constructors are called by the make_symbol functions, which a
+	forthcoming patch will move elsewhere.  Hence the interest of
+	putting them together.
+
+	The stack_symbol_type does not need to be moved, it is used only
+	by the parser.
+
+	* data/lalr1.cc: Move symbol_type and symbol_base_type
+	constructors into...
+	(b4_symbol_constructor_definitions): here.
+	Adjust.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Make it easier to move the definition of yytranslate_.
+	Forthcoming changes will make it possible to use yytranslate_
+	from outside the parser implementation file.
+
+	* data/lalr1.cc (b4_yytranslate_definition): New.
+	Use it.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Remove useless class specification.
+	* data/lalr1.cc (b4_symbol_constructor_specialization_): No need
+	to refer to the class name to use a type defined by the class for
+	arguments of member functions.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Finer input type for yytranslate.
+	This patch is debatable: the tradition expects yylex to return an int
+	which happens to correspond to token_number (which is an enum).  This
+	allows for instance to return characters (such as '*' etc.).  But this
+	goes against the stronger typing I am trying to have with the new
+	lex interface which return a symbol_type.  So in this case, feed
+	yytranslate_ with a token_type.
+
+	* data/lalr1.cc (yytranslate_): When in %define lex-symbol,
+	expect a token_type.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Honor lex-params in %define lex_symbol mode.
+	* data/lalr1.cc: Use b4_lex_param.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Simplify names.
+	* src/output.c (symbol_definitions_output): Rename symbol
+	attributes type_name and has_type_name as type and has_type.
+	* data/lalr1.cc: Adjust uses.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_type_names for the union type.
+	The union used to compute the size of the variant used to iterate
+	over the type of all the symbols, with a lot of redundancy.  Now
+	iterate over the lists of symbols having the same type-name.
+
+	* data/lalr1.cc (b4_char_sizeof_): New.
+	(b4_char_sizeof): Use it.
+	Adjust to be called with a list of numbers instead of a single
+	number.
+	Adjust its caller for new-line issues.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+	Define the "identifier" of a symbol.
+	Symbols may have several string representations, for instance if
+	they have an alias.  What I call its "id" is a string that can be
+	used as an identifier.  May not exist.
+
+	Currently the symbols which have the "tag_is_id" flag set are
+	those that don't have an alias.  Look harder for the id.
+
+	* src/output.c (is_identifier): Move to...
+	* src/symtab.c (is_identifier): here.
+	* src/symtab.h, src/symtab.c (symbol_id_get): New.
+	* src/output.c (symbol_definitions_output): Use it to define "id"
+	and "has_id".
+	Remove the definition of "tag_is_id".
+	* data/lalr1.cc: Use the "id" and "has_id" whereever "tag" and
+	"tag_is_id" were used to produce code.
+	We still use "tag" for documentation.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Locations are no longer required by lalr1.cc.
+	* data/lalr1.cc (_b4_args, b4_args): New.
+	Adjust all uses of locations to make them optional.
+	* tests/c++.at (AT_CHECK_VARIANTS): No longer use the locations.
+	(AT_CHECK_NAMESPACE): Check the use of locations.
+	* tests/calc.at (_AT_DATA_CALC_Y): Adjust to be usable with or
+	without locations with lalr1.cc.
+	Test these cases.
+	* tests/output.at: Check lalr1.cc with and without location
+	support.
+	* tests/regression.at (_AT_DATA_EXPECT2_Y, _AT_DATA_DANCER_Y):
+	Don't use locations.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	AT_FULL_COMPILE.
+	* tests/local.at (AT_FULL_COMPILE): New.
+	* tests/actions.at, tests/calc.at, tests/regression.at: Use it.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Support parens in calc++.
+	* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens.
+	* examples/calc++/test (run): Check the expected output.
+	Adjust callers.
+	Check parens too.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Simplify lalr1.cc since %defines is mandatory.
+	* data/lalr1.cc: Remove useless calls to b4_defines_if.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	TODO: yyfmt.
+	* TODO (yysyntax_error): New item.
+
+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.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	More TODO.
+	* TODO (single stack, yysyntax_error): New.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Make it possible to return a symbol_type from yylex.
+	* data/lalr1.cc (b4_lex_symbol_if): New.
+	(parse): When lex_symbol is defined, expected yylex to return the
+	complete lookahead.
+	* etc/bench.pl.in (generate_grammar_list): Extend to support this
+	yylex interface.
+	(bench_variant_parser): Exercise it.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Remove useless bench case.
+	* etc/bench.pl.in (bench_variant_parser): VARIANT_DESTROY is
+	no longer used.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Improve display of directives.
+	* etc/bench.pl.in (parse_term): Don't add useless eol.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Use string_cast in the bench.
+	* etc/bench.pl.in (generate_grammar_list): Define and use
+	string_cast.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Replace yychar with a Boolean.
+	* data/lalr1.cc (parse::yychar): Replace by...
+	(parse::yyempty): this.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Factor the tables.
+	* TODO: New item.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Let yytranslate handle the eof case.
+	* data/lalr1.cc (yytranslate_): Handle the EOF case.
+	Adjust callers.
+	No longer expect yychar to be equal to yyeof_, rather, test the
+	lookahead's (translated) kind.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	yychar cannot be empty in yyerrlab.
+	* TODO (yychar == yyempty_): New.
+	* data/lalr1.cc: Remove the handling of this case.
+	This eases forthcoming changes related to yychar and yytranslate.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Bench: syntactic sugar for %define/#define.
+	* etc/bench.pl.in (parse_dirs): Support %d and #d with arguments.
+	(&bench_push_parser, bench_variant_parser): Use this feature.
+	(&eat): New.
+	Use it.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Less memory pressure on the "list" bench.
+	* etc/bench.pl.in (generate_grammar_list): Do not accumulate all
+	the values, to limit memory pressure.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Introduce make_symbol.
+	make_symbol provides a means to construct a full symbol (kind,
+	value, location) in a single shot.  It is meant to be a Symbol
+	constructor, parameterized by the symbol kind so that overloading
+	would prevent incorrect kind/value pairs.  Unfortunately
+	parameterized constructors do not work well in C++ (unless the
+	parameter also appears as an argument, which is not acceptable),
+	hence the use of a function instead of a constructor.
+
+	* data/lalr1.cc (b4_symbol_constructor_declaration_)
+	(b4_symbol_constructor_declarations)
+	(b4_symbol_constructor_specialization_)
+	(b4_symbol_constructor_specializations)
+	(b4_symbol_constructor_definition_)
+	(b4_symbol_constructor_definitions): New.
+	Use them where appropriate to generate declaration, declaration of
+	the specializations, and implementations of the templated
+	overloaded function "make_symbol".
+	(variant::variant): Always define a default ctor.
+	Also provide a copy ctor.
+	(symbol_base_type, symbol_type): New ctor overloads for value-less
+	symbols.
+	(symbol_type): Now public, so that functions such as yylex can use
+	it.
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Inform m4 whether a tag is a valid id.
+	* src/output.c (is_identifier): New.
+	(symbol_definitions_output): Use it to define tag_is_id.
+	But maybe this should be done at m4 level?
+
+2008-11-11  Akim Demaille  <demaille@gostai.com>
+
+	Test 214 was failing: it greps with a pattern containing [     ]*
+	which obviously meant to catch spaces and tabs, but contained only
+	spaces. Tabulations in sources are a nuisance, so to simplify the
+	matter, get rid of all the tabulations in the Java sources.  The
+	other skeletons will be treated equally later.
+
+	* data/java.m4, data/lalr1.java: Untabify.
+	* tests/java.at: Simplify AT_CHECK_JAVA_GREP invocations:
+	tabulations are no longer generated.
+
 2008-11-11  Paolo Bonzini  <bonzini@gnu.org>
 
 	* bootstrap.conf: Replace m4/warning.m4 with warnings module.
@@ -3259,6 +4838,407 @@
 	* src/Makefile.am: Replace $(WARNING_CFLAGS) with $(WARN_CFLAGS).
 	* tests/atlocal.in: Replace $(WARNING_*FLAGS) with $(WARN_*FLAGS).
 
+2008-11-10  Di-an Jan  <dianj@freeshell.org>
+
+	Workaround Java's ``code too large'' problem for parser tables
+	in most cases, by using one function per initialization.
+	* data/java.m4 (b4_typed_parser_table, b4_integral_parser_table): New.
+	* data/lalr1.java (yypact_, yydefact_, yypgoto_, yydefgoto_,
+	yytable_, yycheck_, yystos_, yytoken_number_, yyr1_, yyr2_, yyrhs_
+	yyprhs_, yyrline_, yytranslate_table_): Use b4_integral_parser_table.
+	(yytname_): Use b4_typed_parser_table.
+	* doc/bison.texinfo (Java Bison Interface): Add note on Java's
+	``code too large'' error.
+
+2008-11-10  Di-an Jan  <dianj@freeshell.org>
+
+	* NEWS: Document them.
+
+	General Java skeleton improvements.
+	* configure.ac (gt_JAVACOMP): Request target of 1.4, which allows
+	using gcj < 4.3 in the testsuite, according to comments in
+	gnulib/m4/javacomp.m4.
+	* data/java.m4 (stype, parser_class_name, lex_throws, throws,
+	location_type, position_type): Remove extraneous brackets from
+	b4_percent_define_default.
+	(b4_lex_param, b4_parse_param): Remove extraneous brackets from
+	m4_define and m4_define_default.
+	* data/lalr1.java (b4_pre_prologue): Change to b4_user_post_prologue,
+	which marks the end of user code with appropriate syncline, like all
+	the other skeletons.
+	(b4_user_post_prologue): Add.  Don't silently drop.
+	(yylex): Remove.
+	(parse): Inline yylex.
+	* doc/bison.texinfo (bisonVersion, bisonSkeleton): Document.
+	(%{...%}): Fix typo of %code imports.
+	* tests/java.at (AT_JAVA_COMPILE): Add "java" keyword.
+
+	Support annotations on parser class with %define annotations.
+	* data/lalr1.java (annotations): Add to parser class modifier.
+	* doc/bison.texinfo (Java Parser Interface): Document
+	%define annotations.
+	(Java Declarations Summary): Document %define annotations.
+	* tests/java.at (Java parser class modifiers): Test annotations.
+
+	Do not generate code for %error-verbose unless requested.
+	* data/lalr1.java (errorVerbose): Rename to yyErrorVerbose.
+	Make private.  Make conditional on %error-verbose.
+	(getErrorVerbose, setErrorVerbose): New.
+	(yytnamerr_): Make conditional on %error-verbose.
+	(yysyntax_error): Make some code conditional on %error-verbose.
+	* doc/bison.texinfo (Java Bison Interface): Remove the parts
+	about %error-verbose having no effect.
+	(getErrorVerbose, setErrorVerbose): Document.
+
+	Move constants for token names to Lexer interface.
+	* data/lalr1.java (Lexer): Move EOF, b4_token_enums(b4_tokens) here.
+	* data/java.m4 (b4_token_enum): Indent for move to Lexer interface.
+	(parse): Qualify EOF to Lexer.EOF.
+	* doc/bison.texinfo (Java Parser Interface): Move documentation of
+	EOF and token names to Java Lexer Interface.
+	* tests/java.at (_AT_DATA_JAVA_CALC_Y): Remove Calc qualifier.
+
+	Make yyerror public.
+	* data/lalr1.java (Lexer.yyerror): Use longer parameter name.
+	(yyerror): Change to public.  Add Javadoc comments.  Use longer
+	parameter names.  Make the body rather than the declarator
+	conditional on %locations.
+	* doc/bison.texinfo (yyerror): Document.  Don't mark as protected.
+
+	Allow user to add code to the constructor with %code init.
+	* data/java.m4 (b4_init_throws): New, for %define init_throws.
+	* data/lalr1.java (YYParser.YYParser): Add b4_init_throws.
+	Add %code init to the front of the constructor body.
+	* doc/bison.texinfo (YYParser.YYParser): Document %code init
+	and %define init_throws.
+	(Java Declarations Summary): Document %code init and
+	%define init_throws.
+	* tests/java.at (Java %parse-param and %lex-param): Adjust grep.
+	(Java constructor init and init_throws): Add tests.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Update TODO.
+	* TODO (-D): is implemented.
+	(associativity): Same precedence must have the same associativity.
+	For instance, how can a * b / c be parsed if * is %left and / is
+	%right?
+	(YYERRORCODE, YYFAIL, YYBACKUP): New.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	More information about the symbols.
+	* src/output.c (type_names_output): Document all the symbols,
+	including those that don't have a type-name.
+	(symbol_definitions_output): Define "is_token" and
+	"has_type_name".
+	* data/lalr1.cc (b4_type_action_): Skip symbols that have an empty
+	type-name, now that they are defined too in b4_type_names.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Make parser::yytranslate static.
+	Small speedup (1%) on the list grammar.  And makes yytranslate_
+	available in non member functions.
+
+	* data/lalr1.cc (yytranslate_): Does not need to be a instance
+	function.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Avoid trailing spaces.
+	* data/c.m4: b4_comment(TEXT): Don't indent empty lines.
+	* data/lalr1.cc: Don't indent before rule and symbol actions, as
+	they can be empty, and anyway this incorrectly indents the first
+	action.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Comment changes.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Use "enum" for integral constants.
+	This is just nicer to read, I observed no speedup.
+
+	* data/lalr1.cc (yyeof_, yylast_, yynnts_, yyempty_, yyfinal_)
+	(yterror_, yyerrcode_, yyntokens_): Define as members of an enum.
+	(yyuser_token_number_max_, yyundef_token_): Move into...
+	(yytranslate_): here.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Shortcuts in bench directives.
+	* etc/bench.pl.in (parse_dirs): New.
+	Use it.
+	(bench_variant_parser, bench_fusion_parser): Use %s and %d.
+	Create the benches in "benches/".
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+	* data/lalr1.cc: here.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Adjust verbose message to using emacs.
+	* etc/bench.pl.in: Inform compilation-mode when we change the
+	directory.
+	(generate_grammar_list): Recognize %define "variant" in addition
+	to %define variant.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Classify symbols by type-name.
+	* src/uniqstr.h (UNIQSTR_CMP): New.
+	* src/output.c (symbol_type_name_cmp, symbols_by_type_name)
+	(type_names_output): New.
+	(muscles_output): Use it.
+	* data/lalr1.cc (b4_symbol_action_): Remove.
+	(b4_symbol_case_, b4_type_action_): New.
+	Adjust uses of b4_symbol_action_ to use b4_type_action_.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Change the handling of the symbols in the skeletons.
+	Before we were using tables which lines were the symbols and which
+	columns were things like number, tag, type-name etc.  It is was
+	difficult to extend: each time a column was added, all the numbers had
+	to be updated (you asked for colon $2, not for "tag").  Also, it was
+	hard to filter these tables when only a subset of the symbols (say the
+	tokens, or the nterms, or the tokens that have and external number
+	*and* a type-name) was of interest.
+
+	Now instead of monolithic tables, we define one macro per cell.  For
+	instance "b4_symbol(0, tag)" is a macro name which contents is
+	self-descriptive.  The macro "b4_symbol" provides easier access to
+	these cells.
+
+	* src/output.c (type_names_output): Remove.
+	(symbol_numbers_output, symbol_definitions_output): New.
+	(muscles_output): Call them.
+	(prepare_symbols): Define b4_symbols_number.
+
+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-10  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Update the variant example.
+	* examples/variant.yy: Formatting changes.
+	One stage build.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Support constructor with an argument.
+	This improves the "list" bench by 2%.
+
+	* data/lalr1.cc (variant::build): Add an overloaded version with
+	an argument.
+	* tests/c++.at (AT_CHECK_VARIANT): Check it.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Test variants.
+	* tests/c++.at (AT_CHECK_VARIANTS): New.
+	Use it with and without %define assert.
+
+2008-11-10  Akim Demaille  <demaille@gostai.com>
+
+	Add %precedence support.
+	Unfortunately it is not possible to reuse the %prec directive.  This
+	is because to please POSIX, we do not require to end the rules with a
+	semicolon.  As a result,
+
+	foo: bar %prec baz
+
+	is ambiguous: either a rule which precedence is that of baz, or a rule,
+	and then a declaration of the precedence of the token baz.
+
+	* doc/bison.texinfo: Document %precedence.
+	(Precedence Only): New.
+	* src/assoc.h, src/assoc.c (precedence_assoc): New.
+	* src/conflicts.c (resolve_sr_conflict): Support it.
+	* src/scan-gram.l, src/parse-gram.y (%precedence): New token.
+	Parse it.
+	* tests/calc.at: Use %precedence for NEG.
+	* tests/conflicts.at (%precedence does not suffice)
+	(%precedence suffices): New tests.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Make benches in a sub dirs.
+	* etc/bench.pl.in ($dir): New.
+	Use it.
+	Check the use of constructors with an argument.
+	(bench_variant_parser): Fix.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	fix eof condition
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Fix --help.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Require the generation of parse-gram.output.
+	* src/Makefile.am (YACC): Pass --report=all.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Update TODO.
+	* TODO: Remove obsolete items.
+	Update others.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Enhance bench.pl.
+	* etc/bench.pl.in (parse, parse_expr, parse_term, parse_fact)
+	(@token, $grammar, $bench): New.
+	(generate_grammar_variant): Rename as...
+	(generate_grammar_list): this.
+	(generate_grammar): Adjust.
+	(bench_grammar): Rename as...
+	(bench): this.
+	Use it in the various bench-marking routines.
+	(-b, -g): New options.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Use a static hierarchy for symbols in the C++ parser.
+	* data/lalr1.cc (symbol_base_type, symbol_type)
+	(stack_symbol_type): Make it a static hierarchy.
+	Adjust dependencies.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	bench.pl -d, --directive.
+	* etc/bench.pl.in (@directive): New.
+	(&bench_grammar): Use it.
+	(&bench_list_grammar): New, to provide access to the "variant"
+	grammar.
+	Use it.
+	(getopts): Support -d, --directive.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Use inline for small operations.
+	* data/lalr1.cc (symbol_base_type, symbol_type)
+	(stack_symbol_type): Declare constructor and other operations as
+	inline.
+	(yy_destroy_): Inline.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Introduce a hierarchy for symbols.
+	* data/lalr1.cc (symbol_base_type, symbol_type): New.
+	(data_type): Rename as...
+	(stack_symbol_type): this.
+	Derive from symbol_base_type.
+	(yy_symbol_value_print_): Merge into...
+	(yy_symbol_print_): this.
+	Rename as...
+	(yy_print_): this.
+	(yydestruct_): Rename as...
+	(yy_destroy_): this.
+	(b4_symbols_actions, YY_SYMBOL_PRINT): Adjust.
+	(parser::parse): yyla is now of symbol_type.
+	Use its type member instead of yytoken.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Rename data_type and stack_symbol_type.
+	* data/lalr1.cc (data_type): Rename as...
+	(stack_symbol_type): this.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Handle semantic value and location together.
+	* data/lalr1.cc (b4_symbol_actions): Bounce $$ and @$ to
+	yydata.value and yydata.location.
+	(yy_symbol_value_print_, yy_symbol_print_, yydestruct_)
+	(YY_SYMBOL_PRINT): Now take semantic value and location as a
+	single arg.
+	Adjust all callers.
+	(yydestruct_): New overload for a stack symbol.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Push a complete symbol, not connected parts.
+	* data/lalr1.cc (yypush_): Take a data_type&, not disconnected
+	state, value and location.
+	Adjust callers.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Aggregate yylval and yylloc.
+	* data/lalr1.cc (parser::yylval, parser::yylloc): Replace by...
+	(parser::yyla): this.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Rely on the state stack to display reduction traces.
+	To display rhs symbols before a reduction, we used information
+	about the rule reduced, which required the tables yyrhs and
+	yyprhs.  Now use rely only on the state stack to get the same
+	information.
+
+	* data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
+	Use them.
+	(parser::yyrhs_, parser::yyprhs_): Remove.
+	(parser::yy_reduce_print_): Use the state stack.
+
+2008-11-09  Akim Demaille  <demaille@gostai.com>
+
+	Fuse yyval and yyloc into yylhs.
+	* data/lalr1.cc (b4_lhs_value, b4_lhs_location): Adjust to using
+	yylhs.
+	(parse): Replace yyval and yyloc with yylhs.value and
+	yylhs.location.
+	After a user action, compute yylhs.state earlier.
+	(yyerrlab1): Do not play tricks with yylhs.location, rather, use a
+	fresh error_token.
+
+2008-11-09  Di-an Jan  <dianj@freeshell.org>
+
+	Remove unused variable.
+	* src/output.c (type_names_output): Remove unused variable sep.
+
+2008-11-09  Paolo Bonzini  <bonzini@gnu.org>
+
+	Change tests/output.at quoting.
+	* tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when
+	expanding arguments.
+
 2008-11-07  Joel E. Denny  <jdenny@ces.clemson.edu>
 
 	Don't add a semicolon to actions for %skeleton or %language.
@@ -3278,15 +5258,119 @@
 	(language_prio): Extern it.
 	* src/parse-gram.y: Use grammar_prio rather than 1.
 
-2008-11-04  Akim Demaille  <demaille@gostai.com>
+2008-11-07  Akim Demaille  <demaille@gostai.com>
 
-	* NEWS: Mention the trailing semicolon in action.
+	Moving push traces into yypush_.
+	* data/lalr1.cc (yypush_): Now takes a optional trace message.
+	Adjust all uses.
 
-2008-11-04  Akim Demaille  <demaille@gostai.com>
+2008-11-07  Akim Demaille  <demaille@gostai.com>
 
-	Reformat NEWS.
-	* NEWS: Use more outline-mode markup.
-	Suggested by Jim Meyering.
+	The single-stack C++ parser is now the standard one.
+	* data/lalr1.cc: Rename as...
+	* data/lalr1-split.cc: this.
+	* data/lalr1-fusion.cc: Rename as...
+	* data/lalr1.cc: this.
+	* etc/bench.pl.in: Adjust.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Avoid empty-if warnings.
+	Reported by Quentin Hocquet.
+
+	* data/lalr1-fusion.cc (YY_SYMBOL_PRINT, YY_REDUCE_PRINT)
+	(YY_STACK_PRINT): Provide some contents even when !YYDEBUG.
+
+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-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.
+
+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.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Destroy the variants that remain on the stack in case of error.
+	* data/lalr1-fusion.cc (yydestruct_): Invoke the variant's
+	destructor.
+	Display the value only if yymsg is nonnull.
+	(yyreduce): Invoke yydestruct_ when popping lhs symbols.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Add "%define assert" to variants.
+	This is used to help the user catch cases where some value gets
+	ovewritten by a new one.  This should not happen, as this will
+	probably leak.
+
+	Unfortunately this uncovered a bug in the C++ parser itself: the
+	lookahead value was not destroyed between two calls to yylex.  For
+	instance if the previous lookahead was a std::string, and then an int,
+	then the value of the std::string was correctly taken (i.e., the
+	lookahead was now an empty string), but std::string structure itself
+	was not reclaimed.
+
+	This is now done in variant::build(other&) (which is used to take the
+	value of the lookahead): other is not only stolen from its value, it
+	is also destroyed.  This incurs a new performance penalty of a few
+	percent, and union becomes faster again.
+
+	* data/lalr1-fusion.cc (variant::build(other&)): Destroy other.
+	(b4_variant_if): New.
+	(variant::built): New.
+	Use it whereever the status of the variant changes.
+	* etc/bench.pl.in: Check the penalty of %define assert.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Use "%define variant" in bench.pl.
+	* etc/bench.pl.in: No longer use the pseudo directive %variants,
+	just use %define variants.
+
+2008-11-07  Akim Demaille  <demaille@gostai.com>
+
+	Regen.
+	* src/parse-gram.h, src/parse-gram.c: Regen.
 
 2008-11-04  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -3298,6 +5382,369 @@
 	* tests/regression.at (Fix user actions without a trailing semicolon):
 	New test case.
 
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Use b4_copyright_years.
+	* data/yacc.c (b4_copyright_years): New.
+	Fix its value according to the comments in the file.
+	Use it and undefine it.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+	* data/lalr1-fusion.cc, src/parse-gram.y: here.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Formatting changes.
+	* data/lalr1-fusion.cc: here.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Use strict on bench.pl.
+	* etc/bench.pl.in (&run, &generate_grammar): New.
+	Rename the grammar generating functions for consistency.
+	Change the interface so that the list of benches to run is passed
+	as (optionless) arguments.
+	(&compile): Use &run.
+
+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 @.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Improve the display of sizes.
+	* etc/bench.p.in: Higher precision.
+	Sort by decreasing size.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Don't memcpy C++ structures.
+	* data/lalr1-fusion.cc (b4_symbol_variant): Adjust additional
+	arguments.
+	(variant::build): New overload for
+	copy-construction-that-destroys.
+	(variant::swap): New.
+	(parser::yypush_): Use it in variant mode.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Better defaults for bench.pl.
+	* etc/bench.pl.in ($verbose, $cflags, $iterations): Change the
+	default values.
+	Adjust &verbose uses.
+	(-q, --quiet): New.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Make variant.yy more complex.
+	std::list cannot be copied via memcpy, they are more demanding than
+	std::string.  Use one std::list to strengthen the test.
+
+	* examples/variant.yy: Use lalr1-fusion.cc, not lalr1.cc.
+	Adjust.
+	Create a list of strings, instead of a single large string.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	bench.pl --bench.
+	* etc/bench.pl.in (--bench, $bench): New.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Sort methods.
+	* data/lalr1-fusion.cc (destroy): Use as() in its definition.
+	Define it after as().
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Useless parens.
+	* data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Issue missing synclines after user actions.
+	* data/c.m4 (b4_case): Issue synclines on the output file.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Remove trailing empty line.
+	* data/lalr1-fusion.cc: Don't add an empty line after the user's
+	epilogue.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Fix output of copyright years.
+	* data/bison.m4 (b4_copyright): Fix the indentation of the
+	copyright year paragraph.
+	Use b4_copyright_years when no years are given.
+	* data/lalr1.cc, data/lalr1-fusion.cc, data/location.cc
+	(b4_copyright_years): New.
+	Use it.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Avoid the spurious initial empty line.
+	* data/lalr1-fusion.cc, data/location.cc: Put a trailing "@" at
+	the end of @output request to suppress the empty line that
+	results.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Remove parser::rhs_number_type.
+	* data/lalr1-fusion.cc (rhs_number_type): No longer define it.
+	(yyrhs_): Use b4_table_define.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Fix iteration type.
+	* data/lalr1-fusion.cc: Use an int to iterate up to an int.
+
+2008-11-04  Akim Demaille  <demaille@gostai.com>
+
+	Factor the declaration of the integer tables.
+	* data/lalr1-fusion.cc (b4_table_define): New.
+	Use it.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Fix indentation of tables in lalr1.cc
+	* data/lalr1-fusion.cc: Fix the indentation.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Destroy the lhs symbols after reduction.
+	* data/lalr1-fusion.cc (parse): After the user action, when in
+	variant mode, destroy the lhs symbols.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Simplify yysyntax_error_ use.
+	* data/lalr1-fusion.cc (yysyntax_error_): Always pass it the token
+	type, but make it unnamed in the declaration when it is not used.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Let yy::variant::build return an lvalue.
+	* data/lalr1-fusion.cc (variant::build): Return a reference to the
+	object.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Define yy::variant only when needed.
+	* data/lalr1-fusion.cc (yy::variant): Define only if variants are
+	used.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Bench the three-stack lalr1.cc.
+	* etc/bench.pl.in: Bench the three-stack lalr1.cc vs. the
+	one-stack one.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Fail on parse error in calc++.
+	* doc/bison.texinfo (calc++.cc): Propagate failures to the exit
+	status.
+	* examples/calc++/test ($me, $number, $exit, run): New.
+	Use them to propagate errors to the exit status.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Don't specify the skeleton twice in the example.
+	* examples/calc++/Makefile.am: Don't pass -S to Bison, the grammar
+	file does what is needed.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench: Improve output.
+	* etc/bench.pl.in (bench_grammar): Tune the printf format.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench: check impact of %debug on variants.
+	* etc/bench.pl.in (variant_grammar): Fix the computation of
+	$variant.
+	Generate a grammar file that can work with or without %debug.
+	Do use the @directive.
+	(bench_variant_parser): Check impact of %debug.
+	(@directives): Rename all the occurrences to...
+	(@directive): this, for consistency.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench: report the size too.
+	* etc/bench.pl.in ($iterations): Defaults to -3.
+	(&bench_grammar): Require hireswallclock.
+	Compute and display the size of the result.
+	More comments.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench: More use of the verbosity level.
+	* etc/bench.pl.in ($verbose, &verbose): New.
+	Use them.
+	More POD documentation.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench.pl: a command line interface
+	* etc/bench.pl.in: More doc.
+	Some fixes in the documentation.
+	($cflags, $iterations, &help, &getopt): New.
+	Use them.
+	(&variant_grammar): Let the number of stages be 10 times what is
+	specified.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Bench the use of Boost.Variants.
+	* etc/bench.pl.in ($cxx, &variant_grammar, &bench_variant_parser):
+	New.
+	(&compile): Be ready to compile C++ parsers.
+	(&bench_push_parser): Move debug information to the outermost
+	level.
+	* THANKS: Add Michiel De Wilde.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	bench.pl: Pass directives as a list instead of as a string.
+	* etc/bench.pl.in (&directives): New.
+	(&triangular_grammar, &calc_grammar): Use it to format the Bison
+	directives.
+	(&triangular_grammar): Do use the directives (were ignored).
+	(&bench_grammar, &bench_push_parser): Adjust to pass lists of
+	directives.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Improve genericity of bench.pl.
+	* etc/bench.pl.in (&bench_grammar): Take the set of benches as
+	argument.
+	(&bench_push_parser): New.
+	Call it.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Add documentation to bench.pl.
+	* etc/bench.pl.in: Comment changes.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Fuse the three stacks into a single one.
+
+	In order to make it easy to perform benchmarks to ensure that
+	there are no performance loss, lalr1.cc is forked into
+	lalr1-fusion.cc.  Eventually, lalr1-fusion.cc will replace
+	lalr1.cc.
+
+	Meanwhile, to make sure that lalr1-fusion.cc is correctly
+	exercized by the test suite, the user must install a symbolic link
+	from lalr1.cc to it.
+
+	Instead of having three stacks (state, value, location), use a
+	stack of triples.  This considerably simplifies the code (and it
+	will be easier not to require locations as currently does the C++
+	parser), and also gives a 10% speedup according to
+	etc/bench (probably mainly since memory allocation is done once
+	instead of three times).
+
+	Another motivation is to make it easier to destruct properly
+	semantic values: now that they are bound to their state (hence
+	symbol type) it will be easier to call the appropriate destructor.
+
+	These changes should probably benefit the C parser too.
+
+	* data/lalr1.cc: Copy as...
+	* data/lalr1-fusion.cc: this new file.
+	(b4_rhs_value, b4_rhs_location): New definitions overriding those
+	from c++.m4.
+	(state_stack_type, semantic_stack_type, location_stack_type)
+	(yystate_stack_, yysemantic_stack_, yylocation_stack_): Remove.
+	(data_type, stack_type, yystack_): New.
+	(YYLLOC_DEFAULT, yypush_): Adjust.
+	(yyerror_range): Now based on data_type, not location_type.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Push the state, value, and location at the same time.
+	This is needed to prepare a forthcoming patch that fuses the three
+	stacks into one.
+
+	* data/lalr1.cc (parser::yypush_): New.
+	(parser::yynewstate): Change the semantics: instead of arriving to
+	this label when value and location have been pushed, but yystate
+	is to be pushed on the state stack, now the three of them must
+	have been pushed before.  yystate still must be the new state.
+	This allows to use yypush_ everywhere instead of individual
+	handling of the stacks.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Prefer references to pointers.
+	* data/lalr1.cc (b4_symbol_actions): New, overrides the default C
+	definition to use references instead of pointers.
+	(yy_symbol_value_print_, yy_symbol_print_, yydestruct_):
+	Take the value and location as references.
+	Adjust callers.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	stack::size instead of stack::height.
+	* data/lalr1.cc (stack::height): Rename as...
+	(stack::size): this.
+	Fix the output type.
+	Comment changes.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Use variants to support objects as semantic values.
+	This patch was inspired by work by Michiel De Wilde.  But he used
+	Boost variants which (i) requires Boost on the user side, (ii) is
+	slow, and (iii) has useless overhead (the parser knows the type of
+	the semantic value there is no reason to duplicate this
+	information as Boost.Variants do).
+
+	This implementation reserves a buffer large enough to store the
+	largest objects.  yy::variant implements this buffer.  It was
+	implemented with Quentin Hocquet.
+
+	* src/output.c (type_names_output): New.
+	(output_skeleton): Invoke it.
+	* data/c++.m4 (b4_variant_if): New.
+	(b4_symbol_value): If needed, provide a definition for variants.
+	* data/lalr1.cc (b4_symbol_value, b4_symbol_action_)
+	(b4_symbol_variant, _b4_char_sizeof_counter, _b4_char_sizeof_dummy)
+	(b4_char_sizeof, yy::variant): New.
+	(parser::parse): If variants are requested, define
+	parser::union_type, parser::variant, change the definition of
+	semantic_type, construct $$ before running the user action instead
+	of performing a default $$ = $1.
+	* examples/variant.yy: New.
+	Based on an example by Michiel De Wilde.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Parameterize the extraction of semantic values.
+	To make future changes easier, no longer rely on ".TYPE" being the
+	way to get a semantic value.
+
+	* data/c.m4 (b4_symbol_value): New.
+	Use it.
+	* data/c++.m4, data/yacc.c: Use it.
+	* data/glr.c: Use b4_symbol_value.
+	(b4_rhs_data): New.
+	Use it.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+	Prepare easier M4 changes.
+	* data/lalr1.cc: Use escaped [] instead of literals to prepare
+	future changes.
+
 2008-11-02  Joel E. Denny  <jdenny@ces.clemson.edu>
 
 	Initiate further development.
@@ -3368,7 +5815,7 @@
 	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.
+	Interface.  Describe %code lexer and yylex accurately.
 	Remove documentation that does not match the code.
 	(Java Action Features): New.
 	(Java Differences): Add reference.  Add item on semantic values.
@@ -3985,7 +6432,7 @@
 	* 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
+	* djgpp/fnchange.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
@@ -5141,7 +7588,7 @@
 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 |<>":?*\
+	file name generation 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.
@@ -6349,7 +8796,7 @@
 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.
+	of potential ambiguities in GLR grammars.
 
 2006-12-12  Joel E. Denny  <jdenny@ces.clemson.edu>
 
@@ -6612,7 +9059,7 @@
 	* 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_OPTS='--leak-check=full --show-reachable=yes' before invoking
 	Valgrind.
 	* tests/calc.at (_AT_DATA_CALC_Y): fclose the FILE* so Valgrind doesn't
 	complain.
@@ -9902,7 +12349,7 @@
 	* 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.
+	Forward declaration 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.
@@ -9992,8 +12439,8 @@
 	(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.
+	* HACKING (release): Forewarn the Translation Project about
+	stable releases.
 
 2005-09-20  Akim Demaille  <akim@epita.fr>
 
@@ -10718,7 +13165,7 @@
 	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.
+	so that we also get calc++-parser.yy.  Generate it.
 	Use $(AWK), not gawk, since any conforming Awk will do.
 	Put comment before action, since older 'make' can't handle comment
 	in action.
@@ -11546,7 +13993,7 @@
 	* 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.
+	(allocate_storage): 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.
@@ -11734,7 +14181,7 @@
 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
+	whether the reduction 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
@@ -14077,7 +16524,7 @@
 	(struct state): Renamed from struct state_s.
 	(state): Renamed from state_t.
 	(transitions): Renamed from transitions_t.  Unused (and
-	misspelled) transtion_s tag removed.
+	misspelled) transition_s tag removed.
 	(errs): Renamed from errs_t.  Unused errs_s tag removed.
 	(reductions): Renamed from reductions_t.  Unused tag
 	reductions_s removed.
@@ -14165,9 +16612,9 @@
 
 
 	Fix misspelling in names.
-	* src/vcg.h (enum_alignment_e): Renamed from enum_alignement_e.
+	* src/vcg.h (enum_alignment_e): Renamed from enum_alignment_e.
 	* src/vcg_defaults.h (G_NODE_ALIGNMENT): Renamed from
-	G_NODE_ALIGNEMENT.
+	G_NODE_ALIGNMENT.
 
 
 	* lib/timevar.c (timevar_report): Renamed from time_report,
@@ -14419,7 +16866,7 @@
 	* 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_node_alignment_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.
@@ -14918,7 +17365,7 @@
 	(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.
+	not the (never otherwise-used) CHARACTER.
 
 2002-11-07  Akim Demaille  <akim@epita.fr>
 
@@ -15605,7 +18052,7 @@
 	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
+	Hence the stack is badly corrupted.  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.
 
@@ -16515,7 +18962,7 @@
 
 2002-07-16  Akim Demaille  <akim@epita.fr>
 
-	* src/assoc.c, src/asssoc.h (assoc_t, assoc_to_string): New.
+	* src/assoc.c, src/assoc.h (assoc_t, assoc_to_string): New.
 	Adjust all former `associativity' dependencies.
 	* src/symtab.c (symbol_new): Default associativity is `undef', not
 	`right'.
@@ -17658,7 +20105,7 @@
 
 	* 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.
+	and Paul Eggert  <eggert@twinsun.com>: `error' handling.
 	2002-05-26  Akim Demaille  <akim@epita.fr>: stos_, token_number_,
 	and popping traces.
 
@@ -18008,7 +20455,7 @@
 	single characters while replacing `[' and `]' with quadrigraphs, to
 	avoid troubles with M4 quotes.
 	(copy_comment): Output characters with copy_character.
-	(read_additionnal_code): Likewise.
+	(read_additional_code): Likewise.
 	(copy_string2): Likewise.
 	(copy_definition): Likewise.
 
@@ -18191,7 +20638,7 @@
 	* 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.
+	* tests/regression.at (Web2c Actions): Adjust.
 
 	Trying with bigger grammars shows various phenomena: at 3000 (28Mb
 	of grammar file) bison is killed by my system, at 2000 (12Mb) bison
@@ -18502,7 +20949,7 @@
 
 2002-03-05  Robert Anisko  <robert@lrde.epita.fr>
 
-	* src/reader.c (read_additionnal_code): `c' should be an integer, not
+	* src/reader.c (read_additional_code): `c' should be an integer, not
 	a character.
 	Reported by Nicolas Tisserand and Nicolas Burrus.
 
@@ -18623,7 +21070,7 @@
 
 	* 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
+	* src/conflicts.c, src/lalr.c, src/lalr.h, src/output.c (LA): Now a
 	bitset*.
 	Adjust all dependencies.
 
@@ -19890,7 +22337,7 @@
 
 	* src/bison.simple: Remove #line just before %%epilogue. It
 	is now handled in ...
-	* src/reader.c (read_additionnal_code): Add the output of a
+	* src/reader.c (read_additional_code): Add the output of a
 	#line for the epilogue.
 
 2001-12-10  Marc Autret  <autret_m@epita.fr>
@@ -20350,7 +22797,7 @@
 	on user names when possible.
 
 	(YYSTACK_USE_ALLOCA): Do not define; just use any existing defn.
-	Simplify test for whather <alloca.h> exists.
+	Simplify test for whether <alloca.h> exists.
 
 	(<stdlib.h>): Include if we will use malloc, and if standard C or C++.
 
@@ -21116,7 +23563,7 @@
 
 2001-10-04  Akim Demaille  <akim@epita.fr>
 
-	* src/reader.c (parse_union_decl): Push the caracters in
+	* src/reader.c (parse_union_decl): Push the characters in
 	union_obstack, not attrs_obstack.
 
 2001-10-04  Akim Demaille  <akim@epita.fr>
@@ -21397,7 +23844,7 @@
 
 	* src/vcg.h (graph_s): color, textcolor, bordercolor are now
 	enum color_e.
-	* src/print_graph.c (print_graph): Initalize graph.layoutalgorithm
+	* src/print_graph.c (print_graph): Initialize graph.layoutalgorithm
 	to `normal'.
 	* src/reader.c (parse_token_decl): Initialize token with tok_eof.
 	* src/lex.h: Adjust prototype.
@@ -21552,7 +23999,7 @@
 
 	* 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.
+	Remove return invocations in default cases.
 	(get_decision_str): Modify default behaviour. Remove second argument.
 	Echo modifications on calls.
 	(output_graph): Fix.
@@ -21583,7 +24030,7 @@
 	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.
+	Add typedef %%stype YYSTYPE.
 
 2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
 
@@ -21668,7 +24115,7 @@
 	(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
+	(read_declarations, copy_action, read_additional_code, : Updated
 	with correct variables and functions names.
 	(packsymbols, reader): Likewise.
 
@@ -21749,7 +24196,7 @@
 
 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
+	* src/reader.c (read_additional_code): Rename %%user_code to
 	%%epilogue.
 	* src/output.c (output): Rename %%declarations to %%prologue.
 	* src/bison.simple: Echo modifications.
@@ -21793,7 +24240,7 @@
 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.
+	* src/reader.c (read_additional_code): New.
 	(reader): Use it.
 	* src/output.c (output_program): Remove.
 	(output): Update.
@@ -21856,7 +24303,7 @@
 	(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.
+	(packsymbols): Output token definitions to a macro.
 	(copy_definition): Disable C output.
 
 	* src/reader.c (parse_macro_decl): New function used to parse macro
@@ -22194,7 +24641,7 @@
 
 2001-07-08  Pascal Bart  <pascal.bart@epita.fr>
 
-	* src/bison.simple (yyparse): Suppress warning `comparaison
+	* src/bison.simple (yyparse): Suppress warning `comparison
 	between signed and unsigned'.
 
 2001-07-05  Pascal Bart  <pascal.bart@epita.fr>
@@ -22681,7 +25128,7 @@
 	* tests/calc.m4: Test it.
 
 	For regularity of the names, replace each
-	(nolineflag, toknumflag, rawtokenumflag, noparserflag): with...
+	(nolineflag, toknumflag, rawtoknumflag, noparserflag): with...
 	(no_lineflag, token_tableflag, rawflag, no_parserflag): this.
 	In addition replace each `flag' with `_flag'.
 
@@ -23284,7 +25731,7 @@
 
 	* src/getargs.c, src/Makefile.am, src/reader.c, src/version.c:
 	Have configure build version string instead of relying on ANSI string
-	concatentation.
+	concatenation.
 
 1999-06-14  Jesse Thilo  <jthilo@gnu.org>
 
@@ -23294,7 +25741,7 @@
 
 	* acconfig.h, configure.in:
 	Have configure build version string instead of relying on ANSI string
-	concatentation.
+	concatenation.
 
 1999-06-08  Jesse Thilo  <jthilo@gnu.org>
 
@@ -24286,8 +26733,8 @@
 
 	-----
 
-	Copyright (C) 1987-1988, 1991-2012 Free Software Foundation,
-	Inc.
+	Copyright (C) 1987-1988, 1991-2015, 2018-2019 Free Software
+	Foundation, Inc.
 
 	Copying and distribution of this file, with or without
 	modification, are permitted provided the copyright notice and this
diff --git a/CleanSpec.mk b/CleanSpec.mk
deleted file mode 100644
index b84e1b6..0000000
--- a/CleanSpec.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (C) 2007 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# If you don't need to do a full clean build but would like to touch
-# a file or delete some intermediate files, add a clean step to the end
-# of the list.  These steps will only be run once, if they haven't been
-# run before.
-#
-# E.g.:
-#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
-#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
-#
-# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
-# files that are missing or have been moved.
-#
-# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
-# Use $(OUT_DIR) to refer to the "out" directory.
-#
-# If you need to re-do something that's already mentioned, just copy
-# the command and add it to the bottom of the list.  E.g., if a change
-# that you made last week required touching a file and a change you
-# made today requires touching the same file, just copy the old
-# touch step and add it to the end of the list.
-#
-# ************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
-# ************************************************
-
-# For example:
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
-#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
-#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
-
-# ************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
-# ************************************************
diff --git a/GNUmakefile b/GNUmakefile
index 58f2ead..da25113 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -5,7 +5,7 @@
 # It is necessary if you want to build targets usually of interest
 # only to the maintainer.
 
-# Copyright (C) 2001, 2003, 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2006-2019 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
@@ -18,7 +18,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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # If the user runs GNU make but has not yet run ./configure,
 # give them a diagnostic.
diff --git a/INSTALL b/INSTALL
index 6e90e07..8865734 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
-Inc.
+   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
+Foundation, Inc.
 
    Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -12,97 +12,96 @@
 Basic Installation
 ==================
 
-   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
+   Briefly, the shell command './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
+'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
+   The 'configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions.  Finally, it creates a shell script 'config.status' that
 you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
 
-   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
-disabled by default to prevent problems with accidental use of stale
-cache files.
+   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 disabled by
+default to prevent problems with accidental use of stale 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
-diffs or instructions to the address given in the `README' so they can
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
 be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
+some point 'config.cache' contains results you don't want to keep, you
 may remove or edit it.
 
-   The file `configure.ac' (or `configure.in') is used to create
-`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 file 'configure.ac' (or 'configure.in') is used to create
+'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:
 
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
+  1. 'cd' to the directory containing the package's source code and type
+     './configure' to configure the package for your system.
 
-     Running `configure' might take a while.  While running, it prints
+     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.
+  2. Type 'make' to compile the package.
 
-  3. Optionally, type `make check' to run any self-tests that come with
+  3. Optionally, type 'make check' to run any self-tests that come with
      the package, generally using the just-built uninstalled binaries.
 
-  4. Type `make install' to install the programs and any data files and
+  4. Type 'make install' to install the programs and any data files and
      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
+     user, and only the 'make install' phase executed with root
      privileges.
 
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
+  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
+     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
-     also a `make maintainer-clean' target, but that is intended mainly
+     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
+     also a 'make maintainer-clean' target, but that is intended mainly
      for the package's developers.  If you use it, you may have to get
      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
+  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
+  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.
+     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'
+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:
+   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=c99 CFLAGS=-g LIBS=-lposix
 
@@ -113,21 +112,21 @@
 
    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 can use 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 `..'.  This
-is known as a "VPATH" build.
+the 'configure' script.  'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'.  This is known
+as a "VPATH" build.
 
-   With a non-GNU `make', it is safer to compile the package for one
+   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
+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
+"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" \
@@ -136,105 +135,104 @@
 
    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.
+using the 'lipo' tool if you have problems.
 
 Installation Names
 ==================
 
-   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', where PREFIX must be an
+   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', where PREFIX must be an
 absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
 PREFIX as the prefix for installing programs and libraries.
 Documentation and other data files still use the regular prefix.
 
    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.  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
+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.  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
+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
+'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
+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.
+'${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
+   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.
+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'.
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
 
-   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
-`README' should mention any `--enable-' and `--with-' options that the
+   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
+'README' should mention any '--enable-' and '--with-' options that the
 package recognizes.
 
-   For packages that use the X Window System, `configure' can usually
+   For packages that use the X Window System, 'configure' can usually
 find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
+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
+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
+overridden with 'make V=1'; while running './configure
 --disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
+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
+   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.
+   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
+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"
 
@@ -242,26 +240,26 @@
 
      ./configure CC="cc -nodtk"
 
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+   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'.
+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:
+   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
+   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
+_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:
+'--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:
 
      CPU-COMPANY-SYSTEM
 
@@ -270,101 +268,101 @@
      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
+   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
 need to know the machine type.
 
    If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
+use the option '--target=TYPE' to select the type of system they will
 produce code for.
 
    If you want to _use_ a cross compiler, that generates code for a
 platform different from the build platform, you should specify the
 "host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
+eventually be run) with '--host=TYPE'.
 
 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'.
-`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.
-A warning: not all `configure' scripts look for a site script.
+   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.
+A warning: not all 'configure' scripts look for a site script.
 
 Defining Variables
 ==================
 
    Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
+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
-them in the `configure' command line, using `VAR=value'.  For example:
+them in the 'configure' command line, using 'VAR=value'.  For example:
 
      ./configure CC=/usr/local2/bin/gcc
 
-causes the specified `gcc' to be used as the C compiler (unless it is
+causes the specified 'gcc' to be used as the C compiler (unless it is
 overridden in the site shell script).
 
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf limitation.  Until the limitation is lifted, you can use
-this workaround:
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
+Autoconf limitation.  Until the limitation is lifted, you can use this
+workaround:
 
      CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
-`configure' Invocation
+'configure' Invocation
 ======================
 
-   `configure' recognizes the following options to control how it
+   'configure' recognizes the following options to control how it
 operates.
 
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
+'--help'
+'-h'
+     Print a summary of all of the options to 'configure', and exit.
 
-`--help=short'
-`--help=recursive'
+'--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.
+     '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'
-     Print the version of Autoconf used to generate the `configure'
+'--version'
+'-V'
+     Print the version of Autoconf used to generate the 'configure'
      script, and exit.
 
-`--cache-file=FILE'
+'--cache-file=FILE'
      Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
      disable caching.
 
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
+'--config-cache'
+'-C'
+     Alias for '--cache-file=config.cache'.
 
-`--quiet'
-`--silent'
-`-q'
+'--quiet'
+'--silent'
+'-q'
      Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
+     suppress all normal output, redirect it to '/dev/null' (any error
      messages will still be shown).
 
-`--srcdir=DIR'
+'--srcdir=DIR'
      Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
+     '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.
+'--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'
+'--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.
+'configure' also accepts some other, not widely useful, options.  Run
+'configure --help' for more details.
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..7f2840e
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,15 @@
+name: "bison"
+
+third_party {
+  url {
+    type: HOMEPAGE
+    value: "https://www.gnu.org/software/bison/"
+  }
+  url {
+    type: ARCHIVE
+    value: "http://ftp.gnu.org/gnu/bison/bison-3.5.tar.gz"
+  }
+  version: "3.5"
+  last_upgrade_date { year: 2019 month: 12 day: 26 }
+  license_type: RESTRICTED
+}
diff --git a/Makefile.am b/Makefile.am
index aed166e..eeb348e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
+## Process this file with automake to produce Makefile.in.
 
-## Copyright (C) 2001-2012 Free Software Foundation, Inc.
-
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -15,29 +15,66 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+AUTOMAKE_OPTIONS = subdir-objects
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = build-aux po runtime-po lib data src doc examples tests etc
+SUBDIRS = po runtime-po gnulib-po .
 
 # Files installed for use by Automake.
 aclocaldir = @aclocaldir@
 aclocal_DATA = m4/bison-i18n.m4
 
-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/testsuite.sed
+EXTRA_DIST = .prev-version .version cfg.mk PACKAGING \
+  ChangeLog-1998 ChangeLog-2012 ChangeLog
 
-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) $@
+dist_doc_DATA = AUTHORS COPYING NEWS README THANKS TODO
+
+# Let generated files (e.g., from examples/) depend on this variable,
+# to make sure they are regenerated when there are changes in Bison.
+#
+# Don't depend on $(BISON) otherwise we would rebuild these files
+# in srcdir, including during distcheck, which is forbidden.
+dependencies = $(BISON_IN) $(src_bison_SOURCES) $(dist_skeletons_DATA)
+
+## Running the bison from this tarball.  To generate our own parser,
+## but also to run the tests.  Of course, you ought to keep a sane
+## version of Bison nearby...
+BISON = $(top_builddir)/tests/bison
+BISON_IN = $(top_srcdir)/tests/bison.in
+YACC = $(BISON) -o y.tab.c
+AM_YFLAGS_WITH_LINES = --defines -Werror -Wall --report=all
+AM_YFLAGS = $(AM_YFLAGS_WITH_LINES) --no-lines
+
+# Initialization before completion by local.mk's.
+AM_CFLAGS = $(WARN_CFLAGS)
+# Find builddir/src/scan-code.c etc.  For some reason "-I./lib"
+# instead of "-Ilib" avoids infinite recursions on #include_next.
+AM_CPPFLAGS = -I. -I./lib -I$(top_srcdir) -I$(top_srcdir)/lib
+BUILT_SOURCES =
+CLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+EXTRA_DIST += $(dist_TESTS)
+MOSTLYCLEANDIRS =
+MOSTLYCLEANFILES =
+SUFFIXES =
+TESTS = $(dist_TESTS)
+check_PROGRAMS =
+check_SCRIPTS =
+dist_TESTS =
+noinst_LIBRARIES =
+
+include build-aux/local.mk
+include data/local.mk
+include doc/local.mk
+include etc/local.mk
+include examples/local.mk
+include lib/local.mk
+include src/local.mk
+include tests/local.mk
+
+clean-local:
+	rm -rf $(CLEANDIRS)
 
 # 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
@@ -48,20 +85,32 @@
 # 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
+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
+	echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook: gen-ChangeLog gen-synclines
+	echo $(VERSION) > $(distdir)/.tarball-version
+
+# When generating a release, include the #lines in Bison's parser.  Do it
+# only if needed.  In particular, distcheck runs dist with read-only
+# sources, so don't try to update src/parse-gram.c: we don't have the
+# permissions.
+.PHONY: gen-synclines
+gen-synclines:
+	cd $(distdir) &&						\
+	if ! grep '#line' src/parse-gram.c >/dev/null 2>&1; then	\
+	  $(abs_top_builddir)/tests/bison				\
+	    $(AM_YFLAGS_WITH_LINES) src/parse-gram.y			\
+	    -o src/parse-gram.c;					\
+	fi
 
 .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)/$@
+	$(AM_V_GEN)find $(srcdir)/data -type f          \
+	  | xargs $(srcdir)/build-aux/$@
 	@echo 'warning: src/parse-gram.[hc] may need to be regenerated.'
 update-package-copyright-year:
-	$(AM_V_GEN)$(build_aux)/$@ configure.ac
+	$(AM_V_GEN)$(srcdir)/build-aux/$@ $(srcdir)/configure.ac
 
 gen_start_date = 2012-01-16
 .PHONY: gen-ChangeLog
diff --git a/Makefile.in b/Makefile.in
index f3995ec..6803e81 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.5 from Makefile.am.
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,6 +14,8 @@
 
 @SET_MAKE@
 
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -27,24 +29,175 @@
 # 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-2019 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 <https://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 --local-dir=gl \
+#  --lib=libbison \
+#  --source-base=lib \
+#  --m4-base=m4 \
+#  --po-base=gnulib-po \
+#  --doc-base=doc \
+#  --tests-base=tests \
+#  --aux-dir=build-aux \
+#  --makefile-name=gnulib.mk \
+#  --conditional-dependencies \
+#  --no-libtool \
+#  --macro-prefix=gl \
+#  --po-domain=bison \
+#  argmatch \
+#  array-list \
+#  assert \
+#  assure \
+#  bitsetv \
+#  c-strcase \
+#  calloc-posix \
+#  close \
+#  closeout \
+#  config-h \
+#  configmake \
+#  dirname \
+#  error \
+#  extensions \
+#  fdl \
+#  fopen-safer \
+#  fprintf-posix \
+#  fstrcmp \
+#  getopt-gnu \
+#  gettext-h \
+#  git-version-gen \
+#  gitlog-to-changelog \
+#  gpl-3.0 \
+#  intprops \
+#  inttypes \
+#  isnan \
+#  javacomp-script \
+#  javaexec-script \
+#  ldexpl \
+#  libtextstyle-optional \
+#  malloc-gnu \
+#  mbfile \
+#  mbswidth \
+#  non-recursive-gnulib-prefix-hack \
+#  obstack \
+#  obstack-printf \
+#  perror \
+#  printf-posix \
+#  progname \
+#  quote \
+#  quotearg \
+#  readme-release \
+#  realloc-posix \
+#  relocatable-prog \
+#  relocatable-script \
+#  rename \
+#  snprintf-posix \
+#  spawn-pipe \
+#  sprintf-posix \
+#  stdbool \
+#  stpcpy \
+#  strdup-posix \
+#  strerror \
+#  strverscmp \
+#  timevar \
+#  unistd \
+#  unistd-safer \
+#  unlink \
+#  unlocked-io \
+#  unsetenv \
+#  update-copyright \
+#  verify \
+#  vsnprintf-posix \
+#  vsprintf-posix \
+#  warnings \
+#  winsz-ioctl \
+#  winsz-termios \
+#  xalloc \
+#  xalloc-die \
+#  xconcat-filename \
+#  xhash \
+#  xlist \
+#  xmemdup0 \
+#  xstrndup
+
+
+
+
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     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;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -62,32 +215,56 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+check_PROGRAMS = examples/c/calc/calc$(EXEEXT) $(am__EXEEXT_1) \
+	examples/c/mfcalc/mfcalc$(EXEEXT) $(am__EXEEXT_2) \
+	examples/c/rpcalc/rpcalc$(EXEEXT) $(am__EXEEXT_3) \
+	$(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6)
+@CROSS_COMPILING_FALSE@am__append_1 = $(top_srcdir)/doc/bison.help
+@FLEX_WORKS_TRUE@am__append_2 = examples/c/lexcalc/lexcalc
+@FLEX_WORKS_TRUE@am__append_3 = examples/c/lexcalc/lexcalc.test \
+@FLEX_WORKS_TRUE@	examples/c/reccalc/reccalc.test
+@FLEX_WORKS_TRUE@am__append_4 = examples/c/reccalc/reccalc
+@FLEX_WORKS_TRUE@am__append_5 = $(nodist_examples_c_reccalc_reccalc_SOURCES)
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@am__append_6 = examples/c++/calc++/calc++
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@am__append_7 = examples/c++/calc++/calc++.test
+@ENABLE_CXX14_TRUE@am__append_8 = examples/c++/simple
+@ENABLE_CXX14_TRUE@am__append_9 = examples/c++/simple.test
+@ENABLE_CXX_TRUE@am__append_10 = examples/c++/variant
+@ENABLE_CXX_TRUE@am__append_11 = examples/c++/variant.test
+@ENABLE_CXX11_TRUE@am__append_12 = examples/c++/variant-11
+@ENABLE_CXX11_TRUE@am__append_13 = examples/c++/variant-11.test
+@ENABLE_D_TRUE@am__append_14 = examples/d/calc
+@ENABLE_D_TRUE@am__append_15 = examples/d/calc.test
+@ENABLE_JAVA_TRUE@am__append_16 = examples/java/Calc.class
+@ENABLE_JAVA_TRUE@am__append_17 = examples/java/Calc.test
+@gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE@am__append_18 = lib/fd-hook.c
+@gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE@am__append_19 = lib/hard-locale.c
+@gl_GNULIB_ENABLED_malloca_TRUE@am__append_20 = lib/malloca.c
+@gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE@am__append_21 = lib/stat-time.c
+@gl_GNULIB_ENABLED_sys_stat_TRUE@am__append_22 = lib/sys/stat.h
+@gl_GNULIB_ENABLED_sys_stat_TRUE@am__append_23 = lib/sys/stat.h lib/sys/stat.h-t
+@gl_GNULIB_ENABLED_sys_stat_TRUE@am__append_24 = lib/sys
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_25 = lib/uniwidth/width.c
+bin_PROGRAMS = src/bison$(EXEEXT)
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(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/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/__inline.m4 \
+	$(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+	$(top_srcdir)/m4/asm-underscore.m4 $(top_srcdir)/m4/assert.m4 \
+	$(top_srcdir)/m4/bison-check-compiler-flag.m4 \
+	$(top_srcdir)/m4/bison-cxx-std.m4 \
+	$(top_srcdir)/m4/bison-i18n.m4 $(top_srcdir)/m4/c-working.m4 \
+	$(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+	$(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.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/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/eealloc.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 \
@@ -96,11 +273,14 @@
 	$(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/fsync.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+	$(top_srcdir)/m4/gethrxtime.m4 $(top_srcdir)/m4/getopt.m4 \
+	$(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrusage.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+	$(top_srcdir)/m4/gettimeofday.m4 \
 	$(top_srcdir)/m4/gnulib-common.m4 \
-	$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/gnulib-comp.m4 \
+	$(top_srcdir)/m4/host-cpu-c-abi.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 \
@@ -108,41 +288,56 @@
 	$(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/jm-winsz1.m4 $(top_srcdir)/m4/jm-winsz2.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/libtextstyle-optional.m4 \
+	$(top_srcdir)/m4/libtextstyle.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/limits-h.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/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \
+	$(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lstat.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/malloca.m4 $(top_srcdir)/m4/math_h.m4 \
+	$(top_srcdir)/m4/mbchar.m4 $(top_srcdir)/m4/mbfile.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/minmax.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/non-recursive-gnulib-prefix-hack.m4 \
+	$(top_srcdir)/m4/obstack-printf.m4 $(top_srcdir)/m4/obstack.m4 \
+	$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+	$(top_srcdir)/m4/open-slash.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/pthread_rwlock_rdlock.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/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
+	$(top_srcdir)/m4/relocatable-lib.m4 \
+	$(top_srcdir)/m4/relocatable.m4 $(top_srcdir)/m4/rename.m4 \
+	$(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/sched_h.m4 \
+	$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.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/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+	$(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/std-gnu11.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 \
@@ -150,13 +345,19 @@
 	$(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/strverscmp.m4 \
+	$(top_srcdir)/m4/sys_resource_h.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/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+	$(top_srcdir)/m4/sys_times_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/timespec.m4 $(top_srcdir)/m4/tls.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/unlink.m4 $(top_srcdir)/m4/unlocked-io.m4 \
+	$(top_srcdir)/m4/vasnprintf.m4 \
+	$(top_srcdir)/m4/vasprintf-posix.m4 \
+	$(top_srcdir)/m4/vasprintf.m4 \
 	$(top_srcdir)/m4/vfprintf-posix.m4 \
 	$(top_srcdir)/m4/vsnprintf-posix.m4 \
 	$(top_srcdir)/m4/vsnprintf.m4 \
@@ -170,38 +371,42 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(dist_noinst_SCRIPTS) \
+	$(srcdir)/doc/version.texi $(srcdir)/doc/stamp-vti \
+	$(dist_c_DATA) $(dist_calc_DATA) $(dist_calcxx_DATA) \
+	$(dist_cxx_DATA) $(dist_d_DATA) $(dist_doc_DATA) \
+	$(dist_examples_DATA) $(dist_java_DATA) $(dist_lexcalc_DATA) \
+	$(dist_m4sugar_DATA) $(dist_mfcalc_DATA) $(dist_pkgdata_DATA) \
+	$(dist_reccalc_DATA) $(dist_rpcalc_DATA) \
+	$(dist_skeletons_DATA) $(dist_xslt_DATA) $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  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_FILES = src/yacc javacomp.sh javaexec.sh etc/bench.pl \
+	tests/atlocal tests/bison doc/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 =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-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__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \
+	"$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
+	"$(DESTDIR)$(man1dir)" "$(DESTDIR)$(aclocaldir)" \
+	"$(DESTDIR)$(calcxxdir)" "$(DESTDIR)$(cxxdir)" \
+	"$(DESTDIR)$(cdir)" "$(DESTDIR)$(calcdir)" \
+	"$(DESTDIR)$(calcxxdir)" "$(DESTDIR)$(cxxdir)" \
+	"$(DESTDIR)$(ddir)" "$(DESTDIR)$(docdir)" \
+	"$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(javadir)" \
+	"$(DESTDIR)$(lexcalcdir)" "$(DESTDIR)$(m4sugardir)" \
+	"$(DESTDIR)$(mfcalcdir)" "$(DESTDIR)$(pkgdatadir)" \
+	"$(DESTDIR)$(reccalcdir)" "$(DESTDIR)$(rpcalcdir)" \
+	"$(DESTDIR)$(skeletonsdir)" "$(DESTDIR)$(xsltdir)" \
+	"$(DESTDIR)$(mfcalcdir)" "$(DESTDIR)$(rpcalcdir)"
+@FLEX_WORKS_TRUE@am__EXEEXT_1 = examples/c/lexcalc/lexcalc$(EXEEXT)
+@FLEX_WORKS_TRUE@am__EXEEXT_2 = examples/c/reccalc/reccalc$(EXEEXT)
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@am__EXEEXT_3 = examples/c++/calc++/calc++$(EXEEXT)
+@ENABLE_CXX14_TRUE@am__EXEEXT_4 = examples/c++/simple$(EXEEXT)
+@ENABLE_CXX_TRUE@am__EXEEXT_5 = examples/c++/variant$(EXEEXT)
+@ENABLE_CXX11_TRUE@am__EXEEXT_6 = examples/c++/variant-11$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -229,17 +434,807 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(aclocaldir)"
-DATA = $(aclocal_DATA)
+LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
+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 = 
+lib_libbison_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 =
+am__lib_libbison_a_SOURCES_DIST = lib/allocator.c lib/areadlink.c \
+	lib/argmatch.c lib/gl_array_list.h lib/gl_array_list.c \
+	lib/binary-io.h lib/binary-io.c lib/bitrotate.h \
+	lib/bitrotate.c lib/bitset.c lib/bitset/array.c \
+	lib/bitset/stats.c lib/bitset/table.c lib/bitset/list.c \
+	lib/bitset/vector.c lib/bitsetv.c lib/c-ctype.h lib/c-ctype.c \
+	lib/c-strcase.h lib/c-strcasecmp.c lib/c-strncasecmp.c \
+	lib/careadlinkat.c lib/cloexec.c lib/close-stream.c \
+	lib/closeout.c lib/concat-filename.c lib/diffseq.h \
+	lib/dirname.c lib/basename.c lib/dirname-lgpl.c \
+	lib/basename-lgpl.c lib/stripslash.c lib/exitfail.c \
+	lib/fatal-signal.h lib/fatal-signal.c lib/fd-hook.c \
+	lib/fd-safer-flag.c lib/dup-safer-flag.c lib/fopen-safer.c \
+	lib/fstrcmp.h lib/fstrcmp.c lib/gethrxtime.c lib/xtime.c \
+	lib/getprogname.h lib/getprogname.c lib/gettext.h \
+	lib/gettime.c lib/hard-locale.c lib/hash.c lib/gl_list.h \
+	lib/gl_list.c lib/localcharset.c lib/glthread/lock.h \
+	lib/glthread/lock.c lib/malloca.c lib/math.c lib/mbchar.c \
+	lib/mbfile.h lib/mbfile.c lib/mbswidth.h lib/mbswidth.c \
+	lib/minmax.h lib/pipe2.c lib/pipe2-safer.c lib/printf-frexp.c \
+	lib/printf-frexpl.c lib/progname.h lib/progname.c \
+	lib/quotearg.c lib/sig-handler.c lib/size_max.h \
+	lib/spawn-pipe.h lib/spawn-pipe.c lib/w32spawn.h \
+	lib/stat-time.c lib/glthread/threadlib.c lib/timespec.c \
+	lib/timevar.c lib/timevar.def lib/glthread/tls.h \
+	lib/glthread/tls.c lib/unistd.c lib/dup-safer.c lib/fd-safer.c \
+	lib/pipe-safer.c lib/uniwidth/width.c lib/wait-process.h \
+	lib/wait-process.c lib/wctype-h.c lib/xmalloc.c \
+	lib/xalloc-die.c lib/xconcat-filename.c lib/xhash.c \
+	lib/gl_xlist.h lib/gl_xlist.c lib/xreadlink.c lib/xsize.h \
+	lib/xsize.c lib/xstrndup.h lib/xstrndup.c lib/get-errno.h \
+	lib/get-errno.c lib/path-join.h lib/path-join.c
+am__dirstamp = $(am__leading_dot)dirstamp
+@gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE@am__objects_1 = lib/libbison_a-fd-hook.$(OBJEXT)
+@gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE@am__objects_2 = lib/libbison_a-hard-locale.$(OBJEXT)
+@gl_GNULIB_ENABLED_malloca_TRUE@am__objects_3 = lib/libbison_a-malloca.$(OBJEXT)
+@gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE@am__objects_4 = lib/libbison_a-stat-time.$(OBJEXT)
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_5 = lib/uniwidth/libbison_a-width.$(OBJEXT)
+am_lib_libbison_a_OBJECTS = lib/libbison_a-allocator.$(OBJEXT) \
+	lib/libbison_a-areadlink.$(OBJEXT) \
+	lib/libbison_a-argmatch.$(OBJEXT) \
+	lib/libbison_a-gl_array_list.$(OBJEXT) \
+	lib/libbison_a-binary-io.$(OBJEXT) \
+	lib/libbison_a-bitrotate.$(OBJEXT) \
+	lib/libbison_a-bitset.$(OBJEXT) \
+	lib/bitset/libbison_a-array.$(OBJEXT) \
+	lib/bitset/libbison_a-stats.$(OBJEXT) \
+	lib/bitset/libbison_a-table.$(OBJEXT) \
+	lib/bitset/libbison_a-list.$(OBJEXT) \
+	lib/bitset/libbison_a-vector.$(OBJEXT) \
+	lib/libbison_a-bitsetv.$(OBJEXT) \
+	lib/libbison_a-c-ctype.$(OBJEXT) \
+	lib/libbison_a-c-strcasecmp.$(OBJEXT) \
+	lib/libbison_a-c-strncasecmp.$(OBJEXT) \
+	lib/libbison_a-careadlinkat.$(OBJEXT) \
+	lib/libbison_a-cloexec.$(OBJEXT) \
+	lib/libbison_a-close-stream.$(OBJEXT) \
+	lib/libbison_a-closeout.$(OBJEXT) \
+	lib/libbison_a-concat-filename.$(OBJEXT) \
+	lib/libbison_a-dirname.$(OBJEXT) \
+	lib/libbison_a-basename.$(OBJEXT) \
+	lib/libbison_a-dirname-lgpl.$(OBJEXT) \
+	lib/libbison_a-basename-lgpl.$(OBJEXT) \
+	lib/libbison_a-stripslash.$(OBJEXT) \
+	lib/libbison_a-exitfail.$(OBJEXT) \
+	lib/libbison_a-fatal-signal.$(OBJEXT) $(am__objects_1) \
+	lib/libbison_a-fd-safer-flag.$(OBJEXT) \
+	lib/libbison_a-dup-safer-flag.$(OBJEXT) \
+	lib/libbison_a-fopen-safer.$(OBJEXT) \
+	lib/libbison_a-fstrcmp.$(OBJEXT) \
+	lib/libbison_a-gethrxtime.$(OBJEXT) \
+	lib/libbison_a-xtime.$(OBJEXT) \
+	lib/libbison_a-getprogname.$(OBJEXT) \
+	lib/libbison_a-gettime.$(OBJEXT) $(am__objects_2) \
+	lib/libbison_a-hash.$(OBJEXT) lib/libbison_a-gl_list.$(OBJEXT) \
+	lib/libbison_a-localcharset.$(OBJEXT) \
+	lib/glthread/libbison_a-lock.$(OBJEXT) $(am__objects_3) \
+	lib/libbison_a-math.$(OBJEXT) lib/libbison_a-mbchar.$(OBJEXT) \
+	lib/libbison_a-mbfile.$(OBJEXT) \
+	lib/libbison_a-mbswidth.$(OBJEXT) \
+	lib/libbison_a-pipe2.$(OBJEXT) \
+	lib/libbison_a-pipe2-safer.$(OBJEXT) \
+	lib/libbison_a-printf-frexp.$(OBJEXT) \
+	lib/libbison_a-printf-frexpl.$(OBJEXT) \
+	lib/libbison_a-progname.$(OBJEXT) \
+	lib/libbison_a-quotearg.$(OBJEXT) \
+	lib/libbison_a-sig-handler.$(OBJEXT) \
+	lib/libbison_a-spawn-pipe.$(OBJEXT) $(am__objects_4) \
+	lib/glthread/libbison_a-threadlib.$(OBJEXT) \
+	lib/libbison_a-timespec.$(OBJEXT) \
+	lib/libbison_a-timevar.$(OBJEXT) \
+	lib/glthread/libbison_a-tls.$(OBJEXT) \
+	lib/libbison_a-unistd.$(OBJEXT) \
+	lib/libbison_a-dup-safer.$(OBJEXT) \
+	lib/libbison_a-fd-safer.$(OBJEXT) \
+	lib/libbison_a-pipe-safer.$(OBJEXT) $(am__objects_5) \
+	lib/libbison_a-wait-process.$(OBJEXT) \
+	lib/libbison_a-wctype-h.$(OBJEXT) \
+	lib/libbison_a-xmalloc.$(OBJEXT) \
+	lib/libbison_a-xalloc-die.$(OBJEXT) \
+	lib/libbison_a-xconcat-filename.$(OBJEXT) \
+	lib/libbison_a-xhash.$(OBJEXT) \
+	lib/libbison_a-gl_xlist.$(OBJEXT) \
+	lib/libbison_a-xreadlink.$(OBJEXT) \
+	lib/libbison_a-xsize.$(OBJEXT) \
+	lib/libbison_a-xstrndup.$(OBJEXT) \
+	lib/libbison_a-get-errno.$(OBJEXT) \
+	lib/libbison_a-path-join.$(OBJEXT)
+lib_libbison_a_OBJECTS = $(am_lib_libbison_a_OBJECTS)
+lib_liby_a_AR = $(AR) $(ARFLAGS)
+lib_liby_a_LIBADD =
+am__lib_liby_a_SOURCES_DIST = lib/main.c lib/yyerror.c
+@ENABLE_YACC_TRUE@am_lib_liby_a_OBJECTS = lib/main.$(OBJEXT) \
+@ENABLE_YACC_TRUE@	lib/yyerror.$(OBJEXT)
+lib_liby_a_OBJECTS = $(am_lib_liby_a_OBJECTS)
+am__objects_6 = examples/c++/calc++/calc__-driver.$(OBJEXT) \
+	examples/c++/calc++/calc__-scanner.$(OBJEXT) \
+	examples/c++/calc++/calc__-calc++.$(OBJEXT)
+am__objects_7 = examples/c++/calc++/calc__-parser.$(OBJEXT)
+am__objects_8 = $(am__objects_6) $(am__objects_7)
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@nodist_examples_c___calc___calc___OBJECTS =  \
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@	$(am__objects_8)
+examples_c___calc___calc___OBJECTS =  \
+	$(nodist_examples_c___calc___calc___OBJECTS)
+examples_c___calc___calc___LDADD = $(LDADD)
+examples_c___calc___calc___LINK = $(CXXLD) \
+	$(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__objects_9 = examples/c++/simple-simple.$(OBJEXT)
+am__objects_10 = $(am__objects_9)
+@ENABLE_CXX14_TRUE@nodist_examples_c___simple_OBJECTS =  \
+@ENABLE_CXX14_TRUE@	$(am__objects_10)
+examples_c___simple_OBJECTS = $(nodist_examples_c___simple_OBJECTS)
+examples_c___simple_LDADD = $(LDADD)
+examples_c___simple_LINK = $(CXXLD) $(examples_c___simple_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+@ENABLE_CXX_TRUE@nodist_examples_c___variant_OBJECTS =  \
+@ENABLE_CXX_TRUE@	examples/c++/variant-variant.$(OBJEXT)
+examples_c___variant_OBJECTS = $(nodist_examples_c___variant_OBJECTS)
+examples_c___variant_LDADD = $(LDADD)
+@ENABLE_CXX11_TRUE@nodist_examples_c___variant_11_OBJECTS = examples/c++/variant_11-variant-11.$(OBJEXT)
+examples_c___variant_11_OBJECTS =  \
+	$(nodist_examples_c___variant_11_OBJECTS)
+examples_c___variant_11_LDADD = $(LDADD)
+examples_c___variant_11_LINK = $(CXXLD) \
+	$(examples_c___variant_11_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+nodist_examples_c_calc_calc_OBJECTS =  \
+	examples/c/calc/calc-calc.$(OBJEXT)
+examples_c_calc_calc_OBJECTS = $(nodist_examples_c_calc_calc_OBJECTS)
+examples_c_calc_calc_LDADD = $(LDADD)
+@FLEX_WORKS_TRUE@nodist_examples_c_lexcalc_lexcalc_OBJECTS =  \
+@FLEX_WORKS_TRUE@	examples/c/lexcalc/lexcalc-parse.$(OBJEXT) \
+@FLEX_WORKS_TRUE@	examples/c/lexcalc/lexcalc-scan.$(OBJEXT)
+examples_c_lexcalc_lexcalc_OBJECTS =  \
+	$(nodist_examples_c_lexcalc_lexcalc_OBJECTS)
+examples_c_lexcalc_lexcalc_LDADD = $(LDADD)
+am__objects_11 = examples/c/mfcalc/mfcalc-mfcalc.$(OBJEXT)
+am__objects_12 = $(am__objects_11)
+nodist_examples_c_mfcalc_mfcalc_OBJECTS = $(am__objects_12)
+examples_c_mfcalc_mfcalc_OBJECTS =  \
+	$(nodist_examples_c_mfcalc_mfcalc_OBJECTS)
+examples_c_mfcalc_mfcalc_DEPENDENCIES =
+@FLEX_WORKS_TRUE@nodist_examples_c_reccalc_reccalc_OBJECTS =  \
+@FLEX_WORKS_TRUE@	examples/c/reccalc/reccalc-parse.$(OBJEXT) \
+@FLEX_WORKS_TRUE@	examples/c/reccalc/reccalc-scan.$(OBJEXT)
+examples_c_reccalc_reccalc_OBJECTS =  \
+	$(nodist_examples_c_reccalc_reccalc_OBJECTS)
+examples_c_reccalc_reccalc_LDADD = $(LDADD)
+am__objects_13 = examples/c/rpcalc/rpcalc-rpcalc.$(OBJEXT)
+am__objects_14 = $(am__objects_13)
+nodist_examples_c_rpcalc_rpcalc_OBJECTS = $(am__objects_14)
+examples_c_rpcalc_rpcalc_OBJECTS =  \
+	$(nodist_examples_c_rpcalc_rpcalc_OBJECTS)
+examples_c_rpcalc_rpcalc_DEPENDENCIES =
+am_src_bison_OBJECTS = src/bison-AnnotationList.$(OBJEXT) \
+	src/bison-InadequacyList.$(OBJEXT) src/bison-Sbitset.$(OBJEXT) \
+	src/bison-assoc.$(OBJEXT) src/bison-closure.$(OBJEXT) \
+	src/bison-complain.$(OBJEXT) src/bison-conflicts.$(OBJEXT) \
+	src/bison-derives.$(OBJEXT) src/bison-files.$(OBJEXT) \
+	src/bison-fixits.$(OBJEXT) src/bison-getargs.$(OBJEXT) \
+	src/bison-gram.$(OBJEXT) src/bison-graphviz.$(OBJEXT) \
+	src/bison-ielr.$(OBJEXT) src/bison-lalr.$(OBJEXT) \
+	src/bison-location.$(OBJEXT) src/bison-lr0.$(OBJEXT) \
+	src/bison-main.$(OBJEXT) src/bison-muscle-tab.$(OBJEXT) \
+	src/bison-named-ref.$(OBJEXT) src/bison-nullable.$(OBJEXT) \
+	src/bison-output.$(OBJEXT) src/bison-parse-gram.$(OBJEXT) \
+	src/bison-print-graph.$(OBJEXT) src/bison-print-xml.$(OBJEXT) \
+	src/bison-print.$(OBJEXT) src/bison-reader.$(OBJEXT) \
+	src/bison-reduce.$(OBJEXT) src/bison-relation.$(OBJEXT) \
+	src/bison-scan-code-c.$(OBJEXT) \
+	src/bison-scan-gram-c.$(OBJEXT) \
+	src/bison-scan-skel-c.$(OBJEXT) src/bison-state.$(OBJEXT) \
+	src/bison-symlist.$(OBJEXT) src/bison-symtab.$(OBJEXT) \
+	src/bison-tables.$(OBJEXT) src/bison-uniqstr.$(OBJEXT)
+src_bison_OBJECTS = $(am_src_bison_OBJECTS)
+src_bison_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) lib/libbison.a
+src_bison_LINK = $(CCLD) $(src_bison_CFLAGS) $(CFLAGS) \
+	$(src_bison_LDFLAGS) $(LDFLAGS) -o $@
+SCRIPTS = $(dist_noinst_SCRIPTS) $(nodist_bin_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 = 
+DEFAULT_INCLUDES = 
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = examples/c++/$(DEPDIR)/simple-simple.Po \
+	examples/c++/$(DEPDIR)/variant-variant.Po \
+	examples/c++/$(DEPDIR)/variant_11-variant-11.Po \
+	examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po \
+	examples/c++/calc++/$(DEPDIR)/calc__-driver.Po \
+	examples/c++/calc++/$(DEPDIR)/calc__-parser.Po \
+	examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po \
+	examples/c/calc/$(DEPDIR)/calc-calc.Po \
+	examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po \
+	examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po \
+	examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po \
+	examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po \
+	examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po \
+	examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po \
+	lib/$(DEPDIR)/libbison_a-allocator.Po \
+	lib/$(DEPDIR)/libbison_a-areadlink.Po \
+	lib/$(DEPDIR)/libbison_a-argmatch.Po \
+	lib/$(DEPDIR)/libbison_a-asnprintf.Po \
+	lib/$(DEPDIR)/libbison_a-asprintf.Po \
+	lib/$(DEPDIR)/libbison_a-basename-lgpl.Po \
+	lib/$(DEPDIR)/libbison_a-basename.Po \
+	lib/$(DEPDIR)/libbison_a-binary-io.Po \
+	lib/$(DEPDIR)/libbison_a-bitrotate.Po \
+	lib/$(DEPDIR)/libbison_a-bitset.Po \
+	lib/$(DEPDIR)/libbison_a-bitsetv.Po \
+	lib/$(DEPDIR)/libbison_a-c-ctype.Po \
+	lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po \
+	lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po \
+	lib/$(DEPDIR)/libbison_a-calloc.Po \
+	lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po \
+	lib/$(DEPDIR)/libbison_a-careadlinkat.Po \
+	lib/$(DEPDIR)/libbison_a-cloexec.Po \
+	lib/$(DEPDIR)/libbison_a-close-stream.Po \
+	lib/$(DEPDIR)/libbison_a-close.Po \
+	lib/$(DEPDIR)/libbison_a-closeout.Po \
+	lib/$(DEPDIR)/libbison_a-concat-filename.Po \
+	lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po \
+	lib/$(DEPDIR)/libbison_a-dirname.Po \
+	lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po \
+	lib/$(DEPDIR)/libbison_a-dup-safer.Po \
+	lib/$(DEPDIR)/libbison_a-dup2.Po \
+	lib/$(DEPDIR)/libbison_a-error.Po \
+	lib/$(DEPDIR)/libbison_a-exitfail.Po \
+	lib/$(DEPDIR)/libbison_a-fatal-signal.Po \
+	lib/$(DEPDIR)/libbison_a-fcntl.Po \
+	lib/$(DEPDIR)/libbison_a-fd-hook.Po \
+	lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po \
+	lib/$(DEPDIR)/libbison_a-fd-safer.Po \
+	lib/$(DEPDIR)/libbison_a-float.Po \
+	lib/$(DEPDIR)/libbison_a-fopen-safer.Po \
+	lib/$(DEPDIR)/libbison_a-fopen.Po \
+	lib/$(DEPDIR)/libbison_a-fpending.Po \
+	lib/$(DEPDIR)/libbison_a-fprintf.Po \
+	lib/$(DEPDIR)/libbison_a-frexp.Po \
+	lib/$(DEPDIR)/libbison_a-frexpl.Po \
+	lib/$(DEPDIR)/libbison_a-fseterr.Po \
+	lib/$(DEPDIR)/libbison_a-fstat.Po \
+	lib/$(DEPDIR)/libbison_a-fstrcmp.Po \
+	lib/$(DEPDIR)/libbison_a-fsync.Po \
+	lib/$(DEPDIR)/libbison_a-get-errno.Po \
+	lib/$(DEPDIR)/libbison_a-getdtablesize.Po \
+	lib/$(DEPDIR)/libbison_a-gethrxtime.Po \
+	lib/$(DEPDIR)/libbison_a-getopt.Po \
+	lib/$(DEPDIR)/libbison_a-getopt1.Po \
+	lib/$(DEPDIR)/libbison_a-getprogname.Po \
+	lib/$(DEPDIR)/libbison_a-getrusage.Po \
+	lib/$(DEPDIR)/libbison_a-gettime.Po \
+	lib/$(DEPDIR)/libbison_a-gettimeofday.Po \
+	lib/$(DEPDIR)/libbison_a-gl_array_list.Po \
+	lib/$(DEPDIR)/libbison_a-gl_list.Po \
+	lib/$(DEPDIR)/libbison_a-gl_xlist.Po \
+	lib/$(DEPDIR)/libbison_a-hard-locale.Po \
+	lib/$(DEPDIR)/libbison_a-hash.Po \
+	lib/$(DEPDIR)/libbison_a-isnan.Po \
+	lib/$(DEPDIR)/libbison_a-isnand.Po \
+	lib/$(DEPDIR)/libbison_a-isnanf.Po \
+	lib/$(DEPDIR)/libbison_a-isnanl.Po \
+	lib/$(DEPDIR)/libbison_a-iswblank.Po \
+	lib/$(DEPDIR)/libbison_a-itold.Po \
+	lib/$(DEPDIR)/libbison_a-ldexpl.Po \
+	lib/$(DEPDIR)/libbison_a-localcharset.Po \
+	lib/$(DEPDIR)/libbison_a-localtime-buffer.Po \
+	lib/$(DEPDIR)/libbison_a-lstat.Po \
+	lib/$(DEPDIR)/libbison_a-malloc.Po \
+	lib/$(DEPDIR)/libbison_a-malloca.Po \
+	lib/$(DEPDIR)/libbison_a-math.Po \
+	lib/$(DEPDIR)/libbison_a-mbchar.Po \
+	lib/$(DEPDIR)/libbison_a-mbfile.Po \
+	lib/$(DEPDIR)/libbison_a-mbrtowc.Po \
+	lib/$(DEPDIR)/libbison_a-mbsinit.Po \
+	lib/$(DEPDIR)/libbison_a-mbswidth.Po \
+	lib/$(DEPDIR)/libbison_a-memchr.Po \
+	lib/$(DEPDIR)/libbison_a-msvc-inval.Po \
+	lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po \
+	lib/$(DEPDIR)/libbison_a-obstack.Po \
+	lib/$(DEPDIR)/libbison_a-obstack_printf.Po \
+	lib/$(DEPDIR)/libbison_a-open.Po \
+	lib/$(DEPDIR)/libbison_a-path-join.Po \
+	lib/$(DEPDIR)/libbison_a-perror.Po \
+	lib/$(DEPDIR)/libbison_a-pipe-safer.Po \
+	lib/$(DEPDIR)/libbison_a-pipe2-safer.Po \
+	lib/$(DEPDIR)/libbison_a-pipe2.Po \
+	lib/$(DEPDIR)/libbison_a-printf-args.Po \
+	lib/$(DEPDIR)/libbison_a-printf-frexp.Po \
+	lib/$(DEPDIR)/libbison_a-printf-frexpl.Po \
+	lib/$(DEPDIR)/libbison_a-printf-parse.Po \
+	lib/$(DEPDIR)/libbison_a-printf.Po \
+	lib/$(DEPDIR)/libbison_a-progname.Po \
+	lib/$(DEPDIR)/libbison_a-progreloc.Po \
+	lib/$(DEPDIR)/libbison_a-quotearg.Po \
+	lib/$(DEPDIR)/libbison_a-raise.Po \
+	lib/$(DEPDIR)/libbison_a-rawmemchr.Po \
+	lib/$(DEPDIR)/libbison_a-readlink.Po \
+	lib/$(DEPDIR)/libbison_a-realloc.Po \
+	lib/$(DEPDIR)/libbison_a-relocatable.Po \
+	lib/$(DEPDIR)/libbison_a-rename.Po \
+	lib/$(DEPDIR)/libbison_a-rmdir.Po \
+	lib/$(DEPDIR)/libbison_a-sig-handler.Po \
+	lib/$(DEPDIR)/libbison_a-sigaction.Po \
+	lib/$(DEPDIR)/libbison_a-signbitd.Po \
+	lib/$(DEPDIR)/libbison_a-signbitf.Po \
+	lib/$(DEPDIR)/libbison_a-signbitl.Po \
+	lib/$(DEPDIR)/libbison_a-sigprocmask.Po \
+	lib/$(DEPDIR)/libbison_a-snprintf.Po \
+	lib/$(DEPDIR)/libbison_a-spawn-pipe.Po \
+	lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po \
+	lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po \
+	lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po \
+	lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po \
+	lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po \
+	lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po \
+	lib/$(DEPDIR)/libbison_a-spawnattr_init.Po \
+	lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po \
+	lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po \
+	lib/$(DEPDIR)/libbison_a-spawni.Po \
+	lib/$(DEPDIR)/libbison_a-spawnp.Po \
+	lib/$(DEPDIR)/libbison_a-sprintf.Po \
+	lib/$(DEPDIR)/libbison_a-stat-time.Po \
+	lib/$(DEPDIR)/libbison_a-stat-w32.Po \
+	lib/$(DEPDIR)/libbison_a-stat.Po \
+	lib/$(DEPDIR)/libbison_a-stpcpy.Po \
+	lib/$(DEPDIR)/libbison_a-strchrnul.Po \
+	lib/$(DEPDIR)/libbison_a-strdup.Po \
+	lib/$(DEPDIR)/libbison_a-strerror-override.Po \
+	lib/$(DEPDIR)/libbison_a-strerror.Po \
+	lib/$(DEPDIR)/libbison_a-strerror_r.Po \
+	lib/$(DEPDIR)/libbison_a-stripslash.Po \
+	lib/$(DEPDIR)/libbison_a-strndup.Po \
+	lib/$(DEPDIR)/libbison_a-strnlen.Po \
+	lib/$(DEPDIR)/libbison_a-strverscmp.Po \
+	lib/$(DEPDIR)/libbison_a-timespec.Po \
+	lib/$(DEPDIR)/libbison_a-timevar.Po \
+	lib/$(DEPDIR)/libbison_a-unistd.Po \
+	lib/$(DEPDIR)/libbison_a-unlink.Po \
+	lib/$(DEPDIR)/libbison_a-unsetenv.Po \
+	lib/$(DEPDIR)/libbison_a-vasnprintf.Po \
+	lib/$(DEPDIR)/libbison_a-vasprintf.Po \
+	lib/$(DEPDIR)/libbison_a-vfprintf.Po \
+	lib/$(DEPDIR)/libbison_a-vsnprintf.Po \
+	lib/$(DEPDIR)/libbison_a-vsprintf.Po \
+	lib/$(DEPDIR)/libbison_a-wait-process.Po \
+	lib/$(DEPDIR)/libbison_a-waitpid.Po \
+	lib/$(DEPDIR)/libbison_a-wctype-h.Po \
+	lib/$(DEPDIR)/libbison_a-wcwidth.Po \
+	lib/$(DEPDIR)/libbison_a-windows-mutex.Po \
+	lib/$(DEPDIR)/libbison_a-windows-once.Po \
+	lib/$(DEPDIR)/libbison_a-windows-recmutex.Po \
+	lib/$(DEPDIR)/libbison_a-windows-rwlock.Po \
+	lib/$(DEPDIR)/libbison_a-windows-tls.Po \
+	lib/$(DEPDIR)/libbison_a-xalloc-die.Po \
+	lib/$(DEPDIR)/libbison_a-xconcat-filename.Po \
+	lib/$(DEPDIR)/libbison_a-xhash.Po \
+	lib/$(DEPDIR)/libbison_a-xmalloc.Po \
+	lib/$(DEPDIR)/libbison_a-xmemdup0.Po \
+	lib/$(DEPDIR)/libbison_a-xreadlink.Po \
+	lib/$(DEPDIR)/libbison_a-xsize.Po \
+	lib/$(DEPDIR)/libbison_a-xstrndup.Po \
+	lib/$(DEPDIR)/libbison_a-xtime.Po lib/$(DEPDIR)/main.Po \
+	lib/$(DEPDIR)/yyerror.Po \
+	lib/bitset/$(DEPDIR)/libbison_a-array.Po \
+	lib/bitset/$(DEPDIR)/libbison_a-list.Po \
+	lib/bitset/$(DEPDIR)/libbison_a-stats.Po \
+	lib/bitset/$(DEPDIR)/libbison_a-table.Po \
+	lib/bitset/$(DEPDIR)/libbison_a-vector.Po \
+	lib/glthread/$(DEPDIR)/libbison_a-lock.Po \
+	lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po \
+	lib/glthread/$(DEPDIR)/libbison_a-tls.Po \
+	lib/uniwidth/$(DEPDIR)/libbison_a-width.Po \
+	src/$(DEPDIR)/bison-AnnotationList.Po \
+	src/$(DEPDIR)/bison-InadequacyList.Po \
+	src/$(DEPDIR)/bison-Sbitset.Po src/$(DEPDIR)/bison-assoc.Po \
+	src/$(DEPDIR)/bison-closure.Po src/$(DEPDIR)/bison-complain.Po \
+	src/$(DEPDIR)/bison-conflicts.Po \
+	src/$(DEPDIR)/bison-derives.Po src/$(DEPDIR)/bison-files.Po \
+	src/$(DEPDIR)/bison-fixits.Po src/$(DEPDIR)/bison-getargs.Po \
+	src/$(DEPDIR)/bison-gram.Po src/$(DEPDIR)/bison-graphviz.Po \
+	src/$(DEPDIR)/bison-ielr.Po src/$(DEPDIR)/bison-lalr.Po \
+	src/$(DEPDIR)/bison-location.Po src/$(DEPDIR)/bison-lr0.Po \
+	src/$(DEPDIR)/bison-main.Po src/$(DEPDIR)/bison-muscle-tab.Po \
+	src/$(DEPDIR)/bison-named-ref.Po \
+	src/$(DEPDIR)/bison-nullable.Po src/$(DEPDIR)/bison-output.Po \
+	src/$(DEPDIR)/bison-parse-gram.Po \
+	src/$(DEPDIR)/bison-print-graph.Po \
+	src/$(DEPDIR)/bison-print-xml.Po src/$(DEPDIR)/bison-print.Po \
+	src/$(DEPDIR)/bison-reader.Po src/$(DEPDIR)/bison-reduce.Po \
+	src/$(DEPDIR)/bison-relation.Po \
+	src/$(DEPDIR)/bison-scan-code-c.Po \
+	src/$(DEPDIR)/bison-scan-code.Po \
+	src/$(DEPDIR)/bison-scan-gram-c.Po \
+	src/$(DEPDIR)/bison-scan-gram.Po \
+	src/$(DEPDIR)/bison-scan-skel-c.Po \
+	src/$(DEPDIR)/bison-scan-skel.Po src/$(DEPDIR)/bison-state.Po \
+	src/$(DEPDIR)/bison-symlist.Po src/$(DEPDIR)/bison-symtab.Po \
+	src/$(DEPDIR)/bison-tables.Po src/$(DEPDIR)/bison-uniqstr.Po
+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 $@
+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 = 
+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
+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 = $(lib_libbison_a_SOURCES) $(EXTRA_lib_libbison_a_SOURCES) \
+	$(lib_liby_a_SOURCES) \
+	$(nodist_examples_c___calc___calc___SOURCES) \
+	$(nodist_examples_c___simple_SOURCES) \
+	$(nodist_examples_c___variant_SOURCES) \
+	$(nodist_examples_c___variant_11_SOURCES) \
+	$(nodist_examples_c_calc_calc_SOURCES) \
+	$(nodist_examples_c_lexcalc_lexcalc_SOURCES) \
+	$(nodist_examples_c_mfcalc_mfcalc_SOURCES) \
+	$(nodist_examples_c_reccalc_reccalc_SOURCES) \
+	$(nodist_examples_c_rpcalc_rpcalc_SOURCES) \
+	$(src_bison_SOURCES) $(EXTRA_src_bison_SOURCES)
+DIST_SOURCES = $(am__lib_libbison_a_SOURCES_DIST) \
+	$(EXTRA_lib_libbison_a_SOURCES) $(am__lib_liby_a_SOURCES_DIST) \
+	$(src_bison_SOURCES) $(EXTRA_src_bison_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)/doc/bison.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = doc/bison.dvi
+PDFS = doc/bison.pdf
+PSS = doc/bison.ps
+HTMLS = doc/bison.html
+TEXINFOS = doc/bison.texi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-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 \
+	tags-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
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS) $(nodist_man_MANS)
+DATA = $(aclocal_DATA) $(calcxx_DATA) $(cxx_DATA) $(dist_c_DATA) \
+	$(dist_calc_DATA) $(dist_calcxx_DATA) $(dist_cxx_DATA) \
+	$(dist_d_DATA) $(dist_doc_DATA) $(dist_examples_DATA) \
+	$(dist_java_DATA) $(dist_lexcalc_DATA) $(dist_m4sugar_DATA) \
+	$(dist_mfcalc_DATA) $(dist_pkgdata_DATA) $(dist_reccalc_DATA) \
+	$(dist_rpcalc_DATA) $(dist_skeletons_DATA) $(dist_xslt_DATA) \
+	$(mfcalc_DATA) $(rpcalc_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
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope check recheck distdir distdir-am dist dist-all \
+	distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(dist_man_MANS) $(doc_bison_TEXINFOS) \
+	$(srcdir)/Makefile.in $(srcdir)/build-aux/local.mk \
+	$(srcdir)/data/local.mk $(srcdir)/doc/local.mk \
+	$(srcdir)/etc/local.mk $(srcdir)/examples/c++/calc++/local.mk \
+	$(srcdir)/examples/c++/local.mk \
+	$(srcdir)/examples/c/calc/local.mk \
+	$(srcdir)/examples/c/lexcalc/local.mk \
+	$(srcdir)/examples/c/local.mk \
+	$(srcdir)/examples/c/mfcalc/local.mk \
+	$(srcdir)/examples/c/reccalc/local.mk \
+	$(srcdir)/examples/c/rpcalc/local.mk \
+	$(srcdir)/examples/d/local.mk $(srcdir)/examples/java/local.mk \
+	$(srcdir)/examples/local.mk $(srcdir)/lib/gnulib.mk \
+	$(srcdir)/lib/local.mk $(srcdir)/src/local.mk \
+	$(srcdir)/tests/local.mk $(top_srcdir)/build-aux/config.guess \
+	$(top_srcdir)/build-aux/config.rpath \
+	$(top_srcdir)/build-aux/config.sub \
+	$(top_srcdir)/build-aux/depcomp \
+	$(top_srcdir)/build-aux/install-sh \
+	$(top_srcdir)/build-aux/javacomp.sh.in \
+	$(top_srcdir)/build-aux/javaexec.sh.in \
+	$(top_srcdir)/build-aux/mdate-sh \
+	$(top_srcdir)/build-aux/missing \
+	$(top_srcdir)/build-aux/test-driver \
+	$(top_srcdir)/build-aux/texinfo.tex \
+	$(top_srcdir)/build-aux/ylwrap $(top_srcdir)/doc/yacc.1.in \
+	$(top_srcdir)/etc/bench.pl.in $(top_srcdir)/lib/config.in.h \
+	$(top_srcdir)/src/yacc.in $(top_srcdir)/tests/atlocal.in \
+	$(top_srcdir)/tests/bison.in ABOUT-NLS AUTHORS COPYING \
+	ChangeLog INSTALL NEWS README THANKS TODO build-aux/compile \
+	build-aux/config.guess build-aux/config.rpath \
+	build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+	build-aux/mdate-sh build-aux/missing build-aux/texinfo.tex \
+	build-aux/ylwrap src/parse-gram.c src/scan-code.c \
+	src/scan-gram.c src/scan-skel.c
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -316,12 +1311,20 @@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
+CXX03_CXXFLAGS = @CXX03_CXXFLAGS@
+CXX11_CXXFLAGS = @CXX11_CXXFLAGS@
+CXX14_CXXFLAGS = @CXX14_CXXFLAGS@
+CXX17_CXXFLAGS = @CXX17_CXXFLAGS@
+CXX2A_CXXFLAGS = @CXX2A_CXXFLAGS@
+CXX98_CXXFLAGS = @CXX98_CXXFLAGS@
 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@
+DC = @DC@
+DCFLAGS = @DCFLAGS@
+DEFS = @DEFS@ -DEXEEXT=\"@EXEEXT@\"
 DEPDIR = @DEPDIR@
 DOT = @DOT@
 ECHO_C = @ECHO_C@
@@ -336,13 +1339,15 @@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
+FLEX_SCANNER_CXXFLAGS = @FLEX_SCANNER_CXXFLAGS@
 FLOAT_H = @FLOAT_H@
 GCC = @GCC@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
 GETOPT_H = @GETOPT_H@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GLIBC21 = @GLIBC21@
 GMSGFMT = @GMSGFMT@
 GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ACCESS = @GNULIB_ACCESS@
 GNULIB_ACOSF = @GNULIB_ACOSF@
 GNULIB_ACOSL = @GNULIB_ACOSL@
 GNULIB_ASINF = @GNULIB_ASINF@
@@ -366,9 +1371,12 @@
 GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
 GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
 GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
 GNULIB_COSF = @GNULIB_COSF@
 GNULIB_COSHF = @GNULIB_COSHF@
 GNULIB_COSL = @GNULIB_COSL@
+GNULIB_CREAT = @GNULIB_CREAT@
+GNULIB_CTIME = @GNULIB_CTIME@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP = @GNULIB_DUP@
 GNULIB_DUP2 = @GNULIB_DUP2@
@@ -380,6 +1388,7 @@
 GNULIB_EXP2L = @GNULIB_EXP2L@
 GNULIB_EXPF = @GNULIB_EXPF@
 GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
 GNULIB_EXPM1 = @GNULIB_EXPM1@
 GNULIB_EXPM1F = @GNULIB_EXPM1F@
 GNULIB_EXPM1L = @GNULIB_EXPM1L@
@@ -442,7 +1451,10 @@
 GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETPASS = @GNULIB_GETPASS@
+GNULIB_GETRUSAGE = @GNULIB_GETRUSAGE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
 GNULIB_GRANTPT = @GNULIB_GRANTPT@
@@ -470,6 +1482,7 @@
 GNULIB_LDEXPL = @GNULIB_LDEXPL@
 GNULIB_LINK = @GNULIB_LINK@
 GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOCALTIME = @GNULIB_LOCALTIME@
 GNULIB_LOG = @GNULIB_LOG@
 GNULIB_LOG10 = @GNULIB_LOG10@
 GNULIB_LOG10F = @GNULIB_LOG10F@
@@ -532,6 +1545,8 @@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
 GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@
+GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
 GNULIB_PCLOSE = @GNULIB_PCLOSE@
 GNULIB_PERROR = @GNULIB_PERROR@
 GNULIB_PIPE = @GNULIB_PIPE@
@@ -554,8 +1569,10 @@
 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_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
 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_ADDFCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
 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@
@@ -571,6 +1588,7 @@
 GNULIB_PUTENV = @GNULIB_PUTENV@
 GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
 GNULIB_RAISE = @GNULIB_RAISE@
 GNULIB_RANDOM = @GNULIB_RANDOM@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
@@ -578,6 +1596,7 @@
 GNULIB_READ = @GNULIB_READ@
 GNULIB_READLINK = @GNULIB_READLINK@
 GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
 GNULIB_REALPATH = @GNULIB_REALPATH@
 GNULIB_REMAINDER = @GNULIB_REMAINDER@
@@ -595,6 +1614,8 @@
 GNULIB_ROUNDL = @GNULIB_ROUNDL@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SCHED_YIELD = @GNULIB_SCHED_YIELD@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
 GNULIB_SIGACTION = @GNULIB_SIGACTION@
@@ -619,6 +1640,7 @@
 GNULIB_STRDUP = @GNULIB_STRDUP@
 GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRFTIME = @GNULIB_STRFTIME@
 GNULIB_STRNCAT = @GNULIB_STRNCAT@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
@@ -630,6 +1652,7 @@
 GNULIB_STRTOD = @GNULIB_STRTOD@
 GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
 GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLD = @GNULIB_STRTOLD@
 GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
@@ -641,13 +1664,17 @@
 GNULIB_TANHF = @GNULIB_TANHF@
 GNULIB_TANL = @GNULIB_TANL@
 GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIMES = @GNULIB_TIMES@
 GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
 GNULIB_TMPFILE = @GNULIB_TMPFILE@
 GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
 GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCATE = @GNULIB_TRUNCATE@
 GNULIB_TRUNCF = @GNULIB_TRUNCF@
 GNULIB_TRUNCL = @GNULIB_TRUNCL@
 GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_TZSET = @GNULIB_TZSET@
 GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
 GNULIB_UNLINK = @GNULIB_UNLINK@
@@ -678,6 +1705,7 @@
 GNULIB_WCSCPY = @GNULIB_WCSCPY@
 GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
 GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
 GNULIB_WCSLEN = @GNULIB_WCSLEN@
 GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
 GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
@@ -708,6 +1736,7 @@
 GREP = @GREP@
 HAVE_ACOSF = @HAVE_ACOSF@
 HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
 HAVE_ASINF = @HAVE_ASINF@
 HAVE_ASINL = @HAVE_ASINL@
 HAVE_ATAN2F = @HAVE_ATAN2F@
@@ -715,6 +1744,7 @@
 HAVE_ATANL = @HAVE_ATANL@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
 HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
 HAVE_CBRT = @HAVE_CBRT@
 HAVE_CBRTF = @HAVE_CBRTF@
@@ -722,9 +1752,11 @@
 HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_COPYSIGN = @HAVE_COPYSIGN@
 HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
 HAVE_COSF = @HAVE_COSF@
 HAVE_COSHF = @HAVE_COSHF@
 HAVE_COSL = @HAVE_COSL@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
 HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
 HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
 HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
@@ -752,11 +1784,13 @@
 HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
 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_INITSTATE = @HAVE_DECL_INITSTATE@
 HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
 HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
 HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
@@ -776,6 +1810,7 @@
 HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
 HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
 HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
 HAVE_DECL_SINL = @HAVE_DECL_SINL@
 HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
 HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
@@ -789,6 +1824,7 @@
 HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
 HAVE_DECL_TANL = @HAVE_DECL_TANL@
 HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
 HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
 HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
 HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
@@ -802,6 +1838,7 @@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
 HAVE_EXPF = @HAVE_EXPF@
 HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
 HAVE_EXPM1 = @HAVE_EXPM1@
 HAVE_EXPM1F = @HAVE_EXPM1F@
 HAVE_FABSF = @HAVE_FABSF@
@@ -835,7 +1872,10 @@
 HAVE_GETLOGIN = @HAVE_GETLOGIN@
 HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETRUSAGE = @HAVE_GETRUSAGE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GIJ = @HAVE_GIJ@
 HAVE_GIJ_IN_PATH = @HAVE_GIJ_IN_PATH@
 HAVE_GRANTPT = @HAVE_GRANTPT@
@@ -845,6 +1885,8 @@
 HAVE_ILOGB = @HAVE_ILOGB@
 HAVE_ILOGBF = @HAVE_ILOGBF@
 HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISNAND = @HAVE_ISNAND@
 HAVE_ISNANF = @HAVE_ISNANF@
@@ -866,6 +1908,7 @@
 HAVE_LCHMOD = @HAVE_LCHMOD@
 HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LIBTEXTSTYLE = @HAVE_LIBTEXTSTYLE@
 HAVE_LINK = @HAVE_LINK@
 HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LOG10F = @HAVE_LOG10F@
@@ -879,12 +1922,14 @@
 HAVE_LOGL = @HAVE_LOGL@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
 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_MBTOWC = @HAVE_MBTOWC@
 HAVE_MEMCHR = @HAVE_MEMCHR@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
 HAVE_MKDIRAT = @HAVE_MKDIRAT@
@@ -911,6 +1956,8 @@
 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_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
 HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
 HAVE_POWF = @HAVE_POWF@
 HAVE_PREAD = @HAVE_PREAD@
@@ -918,6 +1965,7 @@
 HAVE_PTSNAME = @HAVE_PTSNAME@
 HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
 HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
 HAVE_RAISE = @HAVE_RAISE@
 HAVE_RANDOM = @HAVE_RANDOM@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
@@ -925,6 +1973,7 @@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
 HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
 HAVE_REALPATH = @HAVE_REALPATH@
 HAVE_REMAINDER = @HAVE_REMAINDER@
 HAVE_REMAINDERF = @HAVE_REMAINDERF@
@@ -934,8 +1983,11 @@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
 HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
 HAVE_SETENV = @HAVE_SETENV@
 HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
 HAVE_SIGACTION = @HAVE_SIGACTION@
 HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
 HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
@@ -959,24 +2011,34 @@
 HAVE_STRPTIME = @HAVE_STRPTIME@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLD = @HAVE_STRTOLD@
 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_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRUCT_TMS = @HAVE_STRUCT_TMS@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
 HAVE_SYMLINK = @HAVE_SYMLINK@
 HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_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_RESOURCE_H = @HAVE_SYS_RESOURCE_H@
+HAVE_SYS_TIMES_H = @HAVE_SYS_TIMES_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_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_TIMES = @HAVE_TIMES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
 HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_TZSET = @HAVE_TZSET@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
 HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
@@ -998,6 +2060,7 @@
 HAVE_WCSCPY = @HAVE_WCSCPY@
 HAVE_WCSCSPN = @HAVE_WCSCSPN@
 HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
 HAVE_WCSLEN = @HAVE_WCSLEN@
 HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
 HAVE_WCSNCAT = @HAVE_WCSNCAT@
@@ -1031,6 +2094,7 @@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM_ENV = @INSTALL_PROGRAM_ENV@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
@@ -1054,12 +2118,18 @@
 LIBINTL = @LIBINTL@
 LIBMULTITHREAD = @LIBMULTITHREAD@
 LIBOBJS = @LIBOBJS@
-LIBPTH = @LIBPTH@
-LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
 LIBS = @LIBS@
+LIBTEXTSTYLE = @LIBTEXTSTYLE@
+LIBTEXTSTYLE_PREFIX = @LIBTEXTSTYLE_PREFIX@
 LIBTHREAD = @LIBTHREAD@
 LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
 LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETHRXTIME = @LIB_GETHRXTIME@
+LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@
+LIMITS_H = @LIMITS_H@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
 LOCALE_JA = @LOCALE_JA@
@@ -1068,7 +2138,7 @@
 LTLIBINTL = @LTLIBINTL@
 LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
 LTLIBOBJS = @LTLIBOBJS@
-LTLIBPTH = @LTLIBPTH@
+LTLIBTEXTSTYLE = @LTLIBTEXTSTYLE@
 LTLIBTHREAD = @LTLIBTHREAD@
 M4 = @M4@
 M4_DEBUGFILE = @M4_DEBUGFILE@
@@ -1083,6 +2153,7 @@
 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_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_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@
@@ -1092,7 +2163,10 @@
 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_RESOURCE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RESOURCE_H@
 NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIMES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIMES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_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@
@@ -1104,6 +2178,7 @@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
 NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
 NEXT_MATH_H = @NEXT_MATH_H@
 NEXT_SCHED_H = @NEXT_SCHED_H@
 NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
@@ -1113,13 +2188,17 @@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
 NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_RESOURCE_H = @NEXT_SYS_RESOURCE_H@
 NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIMES_H = @NEXT_SYS_TIMES_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_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@
+NO_EXCEPTIONS_CXXFLAGS = @NO_EXCEPTIONS_CXXFLAGS@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -1139,6 +2218,18 @@
 PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
 PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 RANLIB = @RANLIB@
+RELOCATABLE = @RELOCATABLE@
+RELOCATABLE_BUILD_DIR = @RELOCATABLE_BUILD_DIR@
+RELOCATABLE_CONFIG_H_DIR = @RELOCATABLE_CONFIG_H_DIR@
+RELOCATABLE_LDFLAGS = @RELOCATABLE_LDFLAGS@
+RELOCATABLE_LIBRARY_PATH = @RELOCATABLE_LIBRARY_PATH@
+RELOCATABLE_SRC_DIR = @RELOCATABLE_SRC_DIR@
+RELOCATABLE_STRIP = @RELOCATABLE_STRIP@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ACOSF = @REPLACE_ACOSF@
+REPLACE_ASINF = @REPLACE_ASINF@
+REPLACE_ATAN2F = @REPLACE_ATAN2F@
+REPLACE_ATANF = @REPLACE_ATANF@
 REPLACE_BTOWC = @REPLACE_BTOWC@
 REPLACE_CALLOC = @REPLACE_CALLOC@
 REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
@@ -1149,14 +2240,22 @@
 REPLACE_CEILL = @REPLACE_CEILL@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COSF = @REPLACE_COSF@
+REPLACE_COSHF = @REPLACE_COSHF@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
 REPLACE_DUP = @REPLACE_DUP@
 REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_EXP2 = @REPLACE_EXP2@
 REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPF = @REPLACE_EXPF@
+REPLACE_EXPL = @REPLACE_EXPL@
 REPLACE_EXPM1 = @REPLACE_EXPM1@
 REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_EXPM1L = @REPLACE_EXPM1L@
 REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
 REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
 REPLACE_FCNTL = @REPLACE_FCNTL@
@@ -1189,16 +2288,22 @@
 REPLACE_GETCWD = @REPLACE_GETCWD@
 REPLACE_GETDELIM = @REPLACE_GETDELIM@
 REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
 REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
 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_ILOGBL = @REPLACE_ILOGBL@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
 REPLACE_ISATTY = @REPLACE_ISATTY@
 REPLACE_ISFINITE = @REPLACE_ISFINITE@
 REPLACE_ISINF = @REPLACE_ISINF@
@@ -1210,6 +2315,7 @@
 REPLACE_LDEXPL = @REPLACE_LDEXPL@
 REPLACE_LINK = @REPLACE_LINK@
 REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LOG = @REPLACE_LOG@
 REPLACE_LOG10 = @REPLACE_LOG10@
@@ -1255,8 +2361,10 @@
 REPLACE_PERROR = @REPLACE_PERROR@
 REPLACE_POPEN = @REPLACE_POPEN@
 REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
 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_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
 REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
 REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
@@ -1265,10 +2373,13 @@
 REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
 REPLACE_PUTENV = @REPLACE_PUTENV@
 REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
 REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
 REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_REMAINDER = @REPLACE_REMAINDER@
@@ -1277,16 +2388,22 @@
 REPLACE_REMOVE = @REPLACE_REMOVE@
 REPLACE_RENAME = @REPLACE_RENAME@
 REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RINTL = @REPLACE_RINTL@
 REPLACE_RMDIR = @REPLACE_RMDIR@
 REPLACE_ROUND = @REPLACE_ROUND@
 REPLACE_ROUNDF = @REPLACE_ROUNDF@
 REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
 REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
 REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
 REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SINF = @REPLACE_SINF@
+REPLACE_SINHF = @REPLACE_SINHF@
 REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTF = @REPLACE_SQRTF@
 REPLACE_SQRTL = @REPLACE_SQRTL@
 REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
@@ -1297,6 +2414,7 @@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
 REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
 REPLACE_STRNCAT = @REPLACE_STRNCAT@
 REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRNLEN = @REPLACE_STRNLEN@
@@ -1305,14 +2423,22 @@
 REPLACE_STRTOD = @REPLACE_STRTOD@
 REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
 REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
 REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TANF = @REPLACE_TANF@
+REPLACE_TANHF = @REPLACE_TANHF@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
 REPLACE_TMPFILE = @REPLACE_TMPFILE@
 REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
 REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
 REPLACE_TRUNCF = @REPLACE_TRUNCF@
 REPLACE_TRUNCL = @REPLACE_TRUNCL@
 REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
 REPLACE_UNLINK = @REPLACE_UNLINK@
 REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
 REPLACE_UNSETENV = @REPLACE_UNSETENV@
@@ -1325,14 +2451,16 @@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
 REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
 REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCTOMB = @REPLACE_WCTOMB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
 REPLACE_WRITE = @REPLACE_WRITE@
-SCHED_H = @SCHED_H@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
@@ -1342,15 +2470,17 @@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TEXTSTYLE_H = @TEXTSTYLE_H@
 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_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
 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@
+VALGRIND_OPTS_SUPPRESSION = @VALGRIND_OPTS_SUPPRESSION@
 VERSION = @VERSION@
 WARN_CFLAGS = @WARN_CFLAGS@
 WARN_CFLAGS_TEST = @WARN_CFLAGS_TEST@
@@ -1361,14 +2491,15 @@
 WERROR_CXXFLAGS = @WERROR_CXXFLAGS@
 WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
 WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
+WNO_DEPRECATED_CXXFLAGS = @WNO_DEPRECATED_CXXFLAGS@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
 XSLTPROC = @XSLTPROC@
-YACC = @YACC@
-YACC_LIBRARY = @YACC_LIBRARY@
-YACC_SCRIPT = @YACC_SCRIPT@
+YACC = $(BISON) -o y.tab.c
 YFLAGS = @YFLAGS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -1422,6 +2553,7 @@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1430,22 +2562,166 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = subdir-objects
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = build-aux po runtime-po lib data src doc examples tests etc
+SUBDIRS = po runtime-po gnulib-po .
 aclocal_DATA = m4/bison-i18n.m4
-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/testsuite.sed
 
-MAINTAINER_CHECKS = \
-  maintainer-check				\
-  maintainer-push-check				\
-  maintainer-xml-check				\
-  maintainer-release-check
+# Some of our targets (cross-options.texi, bison.1) use "bison --help".
+# Since we want to ship the generated file to avoid additional
+# requirements over the user environment, we used to not depend on
+# src/bison itself, but on src/getargs.c and other files.  Yet, we
+# need "bison --help" to work to make help2man happy, so we used to
+# include "make src/bison" in the commands.  Then we may have a
+# problem with concurrent builds, since one make might be aiming one
+# of its jobs at compiling src/bison, and another job at generating
+# the man page.  If the latter is faster than the former, then we have
+# two makes that concurrently try to compile src/bison.  Doomed to
+# failure.
+#
+# As a simple scheme to get our way out, make a stamp file,
+# bison.help, which contains --version then --help.  This file can
+# depend on bison, which ensures its correctness.  But update it
+# *only* if needed (content changes).  This way, we avoid useless
+# compilations of cross-options.texi and bison.1.  At the cost of
+# repeated builds of bison.help.
 
+# Ship the stamp file, otherwise it will be recreated, which is what
+# we want to avoid.
+EXTRA_DIST = .prev-version .version cfg.mk PACKAGING ChangeLog-1998 \
+	ChangeLog-2012 ChangeLog $(dist_TESTS) \
+	build-aux/Darwin.valgrind build-aux/Linux.valgrind \
+	build-aux/cross-options.pl build-aux/move-if-change \
+	build-aux/prev-version.txt build-aux/update-b4-copyright \
+	$(srcdir)/$(doc_bison).info.bak doc/refcard.tex \
+	$(top_srcdir)/doc/bison.help $(dist_man_MANS:.1=.x) $(FIGS_GV) \
+	$(FIGS_GV:.gv=.txt) $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) \
+	$(FIGS_GV:.gv=.svg) doc/Doxyfile.in $(extracted) \
+	examples/extracted.stamp examples/c/calc/calc.test \
+	examples/c/lexcalc/lexcalc.test \
+	examples/c/reccalc/reccalc.test examples/c/reccalc/scan.l \
+	examples/c++/calc++/calc++.test examples/c++/simple.test \
+	examples/c++/variant.test examples/c++/variant-11.test \
+	examples/d/calc.test examples/java/Calc.test lib/alignof.h \
+	lib/alloca.in.h lib/allocator.h \
+	$(top_srcdir)/build-aux/announce-gen lib/areadlink.h \
+	lib/argmatch.h lib/assure.h lib/bitset.h lib/bitset/array.h \
+	lib/bitset/base.h lib/bitset/list.h lib/bitset/stats.h \
+	lib/bitset/table.h lib/bitset/vector.h lib/bitsetv.h \
+	lib/c-strcaseeq.h lib/calloc.c lib/canonicalize-lgpl.c \
+	lib/careadlinkat.h lib/cloexec.h lib/close.c \
+	lib/close-stream.h lib/closeout.h lib/concat-filename.h \
+	lib/stripslash.c lib/dirname.h \
+	$(top_srcdir)/build-aux/do-release-commit-and-tag \
+	lib/dosname.h lib/dup2.c lib/errno.in.h lib/error.c \
+	lib/error.h lib/exitfail.h lib/fcntl.c lib/fcntl.in.h \
+	lib/fd-hook.h lib/filename.h lib/float.c lib/float.in.h \
+	lib/itold.c lib/fopen.c lib/stdio--.h lib/stdio-safer.h \
+	lib/fpending.c lib/fpending.h lib/stdio-impl.h lib/fprintf.c \
+	lib/fpucw.h lib/frexp.c lib/frexp.c lib/frexpl.c lib/fseterr.c \
+	lib/fseterr.h lib/stdio-impl.h lib/fstat.c lib/stat-w32.c \
+	lib/stat-w32.h lib/fsync.c $(top_srcdir)/build-aux/gendocs.sh \
+	lib/getdtablesize.c lib/gethrxtime.h lib/xtime.h \
+	lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h \
+	lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c \
+	lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getrusage.c \
+	lib/gettimeofday.c $(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 \
+	lib/hard-locale.h lib/hash.h \
+	$(top_srcdir)/build-aux/config.rpath lib/intprops.h \
+	lib/inttypes.in.h lib/float+.h lib/isnan.c lib/isnand.c \
+	lib/float+.h lib/isnan.c lib/isnand-nolibm.h lib/isnand.c \
+	lib/float+.h lib/isnan.c lib/isnanf.c lib/float+.h lib/isnan.c \
+	lib/isnanf-nolibm.h lib/isnanf.c lib/float+.h lib/isnan.c \
+	lib/isnanl.c lib/float+.h lib/isnan.c lib/isnanl-nolibm.h \
+	lib/isnanl.c lib/iswblank.c \
+	$(top_srcdir)/build-aux/javacomp.sh.in \
+	$(top_srcdir)/build-aux/javaexec.sh.in lib/ldexpl.c \
+	lib/cdefs.h lib/libc-config.h lib/textstyle.in.h \
+	lib/limits.in.h lib/localcharset.h lib/localtime-buffer.c \
+	lib/localtime-buffer.h lib/lstat.c $(top_srcdir)/maint.mk \
+	lib/malloc.c lib/malloc.c lib/malloca.h lib/math.in.h \
+	lib/mbchar.h lib/mbrtowc.c lib/mbsinit.c lib/memchr.c \
+	lib/memchr.valgrind lib/msvc-inval.c lib/msvc-inval.h \
+	lib/msvc-nothrow.c lib/msvc-nothrow.h \
+	$(top_srcdir)/build-aux/prefix-gnulib-mk lib/obstack.c \
+	lib/obstack.h lib/obstack_printf.c lib/open.c lib/pathmax.h \
+	lib/perror.c lib/spawn_int.h lib/spawni.c \
+	lib/spawn_faction_addclose.c lib/spawn_int.h \
+	lib/spawn_faction_adddup2.c lib/spawn_int.h \
+	lib/spawn_faction_addopen.c lib/spawn_int.h \
+	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/spawnp.c lib/printf-frexp.h lib/printf-frexp.c \
+	lib/printf-frexpl.h lib/printf.c lib/quote.h lib/quote.h \
+	lib/quotearg.h lib/raise.c lib/rawmemchr.c \
+	lib/rawmemchr.valgrind lib/readlink.c lib/realloc.c \
+	lib/progreloc.c lib/relocatable.c lib/relocatable.h \
+	$(top_srcdir)/build-aux/config.libpath \
+	$(top_srcdir)/build-aux/reloc-ldflags \
+	$(top_srcdir)/build-aux/libtool-reloc lib/allocator.c \
+	lib/allocator.h lib/areadlink.c lib/areadlink.h lib/c-ctype.c \
+	lib/c-ctype.h lib/canonicalize-lgpl.c lib/careadlinkat.c \
+	lib/careadlinkat.h lib/lstat.c lib/malloca.c lib/malloca.h \
+	lib/progname.c lib/progname.h lib/progreloc.c lib/readlink.c \
+	lib/relocatable.c lib/relocatable.h lib/relocwrapper.c \
+	lib/setenv.c lib/stat.c $(top_srcdir)/build-aux/install-reloc \
+	$(top_srcdir)/build-aux/relocatable.sh.in lib/rename.c \
+	lib/rmdir.c lib/same-inode.h lib/sched.in.h lib/sig-handler.h \
+	lib/sigaction.c lib/signal.in.h lib/float+.h lib/signbitd.c \
+	lib/signbitf.c lib/signbitl.c lib/sigprocmask.c \
+	lib/_Noreturn.h lib/arg-nonnull.h lib/c++defs.h \
+	lib/warn-on-use.h lib/snprintf.c lib/spawn.in.h lib/sprintf.c \
+	lib/stat-w32.c lib/stat-w32.h lib/stat.c lib/stat-time.h \
+	lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h \
+	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.c \
+	lib/strerror-override.c lib/strerror-override.h \
+	lib/strerror_r.c lib/string.in.h lib/strndup.c lib/strnlen.c \
+	lib/strverscmp.c lib/sys_resource.in.h lib/sys_stat.in.h \
+	lib/sys_time.in.h lib/sys_times.in.h lib/sys_types.in.h \
+	lib/sys_wait.in.h lib/time.in.h lib/timespec.h lib/timevar.h \
+	lib/unistd.in.h lib/unistd--.h lib/unistd-safer.h \
+	lib/unitypes.in.h lib/localcharset.h lib/uniwidth.in.h \
+	lib/uniwidth/cjk.h lib/unlink.c lib/unlocked-io.h \
+	lib/unsetenv.c $(top_srcdir)/build-aux/update-copyright \
+	$(top_srcdir)/build-aux/useless-if-before-free lib/asnprintf.c \
+	lib/float+.h lib/printf-args.c lib/printf-args.h \
+	lib/printf-parse.c lib/printf-parse.h lib/vasnprintf.c \
+	lib/vasnprintf.h lib/asprintf.c lib/vasprintf.c \
+	$(top_srcdir)/build-aux/vc-list-files lib/verify.h \
+	lib/vfprintf.c lib/vsnprintf.c lib/vsprintf.c lib/waitpid.c \
+	lib/wchar.in.h lib/wctype.in.h lib/wcwidth.c \
+	lib/windows-initguard.h lib/windows-mutex.c \
+	lib/windows-mutex.h lib/windows-once.c lib/windows-once.h \
+	lib/windows-initguard.h lib/windows-recmutex.c \
+	lib/windows-recmutex.h lib/windows-initguard.h \
+	lib/windows-rwlock.c lib/windows-rwlock.h lib/windows-tls.c \
+	lib/windows-tls.h lib/xalloc.h lib/xalloc-oversized.h \
+	lib/concat-filename.h lib/xmemdup0.c lib/xmemdup0.h \
+	lib/xreadlink.h tests/linear $(TESTSUITE_AT) tests/testsuite \
+	tests/testsuite.h
+dist_doc_DATA = AUTHORS COPYING NEWS README THANKS TODO
+
+# Let generated files (e.g., from examples/) depend on this variable,
+# to make sure they are regenerated when there are changes in Bison.
+#
+# Don't depend on $(BISON) otherwise we would rebuild these files
+# in srcdir, including during distcheck, which is forbidden.
+dependencies = $(BISON_IN) $(src_bison_SOURCES) $(dist_skeletons_DATA)
+BISON = $(top_builddir)/tests/bison
+BISON_IN = $(top_srcdir)/tests/bison.in
+AM_YFLAGS_WITH_LINES = --defines -Werror -Wall --report=all
+AM_YFLAGS = $(AM_YFLAGS_WITH_LINES) --no-lines
+
+# Initialization before completion by local.mk's.
+AM_CFLAGS = $(WARN_CFLAGS)
+# Find builddir/src/scan-code.c etc.  For some reason "-I./lib"
+# instead of "-Ilib" avoids infinite recursions on #include_next.
+AM_CPPFLAGS = -I. -I./lib -I$(top_srcdir) -I$(top_srcdir)/lib
 
 # 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
@@ -1456,15 +2732,494 @@
 # 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
+BUILT_SOURCES = $(mfcalc_sources) $(am__append_5) $(rpcalc_sources) \
+	$(simple_sources) $(ALLOCA_H) lib/configmake.h $(ERRNO_H) \
+	lib/fcntl.h $(FLOAT_H) $(GETOPT_H) $(GETOPT_CDEFS_H) \
+	lib/inttypes.h $(TEXTSTYLE_H) $(LIMITS_H) lib/math.h \
+	lib/sched.h lib/signal.h lib/spawn.h $(STDBOOL_H) $(STDDEF_H) \
+	$(STDINT_H) lib/stdio.h lib/stdlib.h lib/string.h \
+	lib/sys/resource.h $(am__append_22) lib/sys/time.h \
+	lib/sys/times.h lib/sys/types.h lib/sys/wait.h lib/time.h \
+	lib/unistd.h $(LIBUNISTRING_UNITYPES_H) \
+	$(LIBUNISTRING_UNIWIDTH_H) lib/wchar.h lib/wctype.h \
+	src/parse-gram.c src/parse-gram.h src/scan-code.c \
+	src/scan-gram.c src/scan-skel.c $(top_srcdir)/.version
+CLEANDIRS = doc/bison.t2d doc/html examples/*.dSYM \
+	examples/c/calc/*.dSYM examples/c/lexcalc/*.dSYM \
+	examples/c/mfcalc/*.dSYM examples/c/reccalc/*.dSYM \
+	examples/c/rpcalc/*.dSYM examples/c++/calc++/*.dSYM \
+	examples/c++/*.dSYM src/*.dSYM
+CLEANFILES = doc/refcard.pdf $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) \
+	$(FIGS_GV:.gv=.svg) doc/Doxyfile examples/c/calc/calc.[ch] \
+	examples/c/calc/calc.output examples/c/calc/scan.c \
+	examples/c/lexcalc/parse.[ch] examples/c/lexcalc/scan.c \
+	examples/c/lexcalc/parse.output examples/c/mfcalc/mfcalc.[ch] \
+	examples/c/mfcalc/mfcalc.output examples/c/reccalc/parse.[ch] \
+	examples/c/reccalc/parse.output examples/c/reccalc/scan.[ch] \
+	examples/c/reccalc/*.stamp examples/c/rpcalc/rpcalc.[ch] \
+	examples/c/rpcalc/rpcalc.output $(calcxx_sources_generated) \
+	examples/c++/calc++/parser.dot \
+	examples/c++/calc++/parser.output \
+	examples/c++/calc++/parser.stamp \
+	examples/c++/calc++/scanner.cc examples/c++/simple.[ch] \
+	examples/c++/simple.output examples/c++/simple.output \
+	examples/c++/variant.output examples/c++/variant-11.output \
+	examples/c++/simple.hh examples/c++/variant.hh \
+	examples/c++/variant-11.hh examples/d/calc \
+	examples/d/calc.[do] examples/java/*.class \
+	examples/java/Calc.java lib/configmake.h lib/configmake.h-t
+DISTCLEANFILES = tests/atconfig $(check_SCRIPTS)
+MOSTLYCLEANDIRS = lib/sys $(am__append_24) lib/sys lib/sys
+MOSTLYCLEANFILES = $(top_srcdir)/doc/*.tmp lib/core lib/*.stackdump \
+	lib/alloca.h lib/alloca.h-t lib/errno.h lib/errno.h-t \
+	lib/fcntl.h lib/fcntl.h-t lib/float.h lib/float.h-t \
+	lib/getopt.h lib/getopt.h-t lib/getopt-cdefs.h \
+	lib/getopt-cdefs.h-t lib/inttypes.h lib/inttypes.h-t \
+	lib/textstyle.h lib/textstyle.h-t lib/limits.h lib/limits.h-t \
+	lib/math.h lib/math.h-t lib/sched.h lib/sched.h-t lib/signal.h \
+	lib/signal.h-t lib/spawn.h lib/spawn.h-t lib/stdbool.h \
+	lib/stdbool.h-t lib/stddef.h lib/stddef.h-t lib/stdint.h \
+	lib/stdint.h-t lib/stdio.h lib/stdio.h-t lib/stdlib.h \
+	lib/stdlib.h-t lib/string.h lib/string.h-t lib/sys/resource.h \
+	lib/sys/resource.h-t $(am__append_23) lib/sys/time.h \
+	lib/sys/time.h-t lib/sys/times.h lib/sys/times.h-t \
+	lib/sys/types.h lib/sys/types.h-t lib/sys/wait.h \
+	lib/sys/wait.h-t lib/time.h lib/time.h-t lib/unistd.h \
+	lib/unistd.h-t lib/unitypes.h lib/unitypes.h-t lib/uniwidth.h \
+	lib/uniwidth.h-t lib/wchar.h lib/wchar.h-t lib/wctype.h \
+	lib/wctype.h-t src/yacc
+SUFFIXES = .gv .eps .pdf .svg .yy .stamp
+TESTS = $(dist_TESTS) examples/c/calc/calc.test $(am__append_3) \
+	$(am__append_7) $(am__append_9) $(am__append_11) \
+	$(am__append_13) $(am__append_15) $(am__append_17)
+check_SCRIPTS = $(am__append_14) $(am__append_16) $(BISON) \
+	tests/atconfig tests/atlocal
+dist_TESTS = examples/c/mfcalc/mfcalc.test \
+	examples/c/rpcalc/rpcalc.test
+# No GNU Make output.
+noinst_LIBRARIES = lib/libbison.a
+dist_pkgdata_DATA = \
+  data/README.md                                \
+  data/bison-default.css
+
+skeletonsdir = $(pkgdatadir)/skeletons
+
+# Experimental support for the D language.
+dist_skeletons_DATA = data/skeletons/bison.m4 \
+	data/skeletons/c++-skel.m4 data/skeletons/c++.m4 \
+	data/skeletons/c-like.m4 data/skeletons/c-skel.m4 \
+	data/skeletons/c.m4 data/skeletons/glr.c data/skeletons/glr.cc \
+	data/skeletons/java-skel.m4 data/skeletons/java.m4 \
+	data/skeletons/lalr1.cc data/skeletons/lalr1.java \
+	data/skeletons/location.cc data/skeletons/stack.hh \
+	data/skeletons/variant.hh data/skeletons/yacc.c \
+	data/skeletons/README-D.txt data/skeletons/d-skel.m4 \
+	data/skeletons/d.m4 data/skeletons/lalr1.d
+m4sugardir = $(pkgdatadir)/m4sugar
+dist_m4sugar_DATA = \
+  data/m4sugar/foreach.m4                       \
+  data/m4sugar/m4sugar.m4
+
+xsltdir = $(pkgdatadir)/xslt
+dist_xslt_DATA = \
+  data/xslt/bison.xsl                           \
+  data/xslt/xml2dot.xsl                         \
+  data/xslt/xml2text.xsl                        \
+  data/xslt/xml2xhtml.xsl
+
+AM_MAKEINFOFLAGS = \
+  --no-split                                                    \
+  --set-customization-variable=SECTION_NAME_IN_TITLE=true       \
+  --set-customization-variable=AVOID_MENU_REDUNDANCY=true       \
+  --set-customization-variable=ICONS=true
+
+info_TEXINFOS = doc/bison.texi
+doc_bison_TEXINFOS = \
+  $(CROSS_OPTIONS_TEXI)                         \
+  doc/fdl.texi                                  \
+  doc/gpl-3.0.texi                              \
+  doc/relocatable.texi
+
+
+# Cannot express dependencies directly on file names because of Automake.
+# Obfuscate with a variable.
+doc_bison = doc/bison
+TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc
+CROSS_OPTIONS_PL = $(top_srcdir)/build-aux/cross-options.pl
+CROSS_OPTIONS_TEXI = $(top_srcdir)/doc/cross-options.texi
+MAINTAINERCLEANFILES = $(CROSS_OPTIONS_TEXI) \
+	$(srcdir)/$(doc_bison).info.bak $(am__append_1) \
+	$(dist_man_MANS) $(extracted) examples/extracted.stamp \
+	$(TESTSUITE)
+dist_man_MANS = $(top_srcdir)/doc/bison.1
+
+# Differences to ignore when comparing the man page (the date).
+remove_time_stamp = \
+  sed 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+
+
+# Depend on configure to get version number changes.
+@CROSS_COMPILING_FALSE@MAN_DEPS = doc/bison.help doc/bison.x $(top_srcdir)/configure
+@ENABLE_YACC_TRUE@nodist_man_MANS = doc/yacc.1
+FIGS_GV = \
+  doc/figs/example.gv                                   \
+  doc/figs/example-reduce.gv doc/figs/example-shift.gv
+
+DOXYGEN = doxygen
+edit = sed -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
+	   -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
+	   -e 's,@PERL\@,$(PERL),g' \
+	   -e 's,@top_builddir\@,$(top_builddir),g' \
+	   -e 's,@top_srcdir\@,$(top_srcdir),g'
+
+nodist_noinst_SCRIPTS = etc/bench.pl
+dist_noinst_SCRIPTS = examples/extexi examples/test
+TEST_LOG_COMPILER = $(SHELL) $(top_srcdir)/examples/test
+AM_CXXFLAGS = \
+  $(WARN_CXXFLAGS) $(WARN_CXXFLAGS_TEST) $(WERROR_CXXFLAGS)
+
+doc = $(top_srcdir)/doc/bison.texi
+extexi = $(top_srcdir)/examples/extexi
+@ENABLE_GCC_WARNINGS_TRUE@EXTEXIFLAGS = --synclines
+extract = VERSION="$(VERSION)" $(PERL) $(extexi) $(EXTEXIFLAGS) $(doc) --
+extracted = $(mfcalc_extracted) $(rpcalc_extracted) \
+	$(calcxx_extracted) $(simple_extracted)
+examplesdir = $(docdir)/examples
+dist_examples_DATA = examples/README.md
+cdir = $(docdir)/examples/c
+dist_c_DATA = examples/c/README.md
+calcdir = $(docdir)/examples/c/calc
+nodist_examples_c_calc_calc_SOURCES = examples/c/calc/calc.y
+
+# Don't use gnulib's system headers.
+examples_c_calc_calc_CPPFLAGS = -I$(top_srcdir)/examples/c/calc -I$(top_builddir)/examples/c/calc
+dist_calc_DATA = examples/c/calc/calc.y examples/c/calc/Makefile examples/c/calc/README.md
+lexcalcdir = $(docdir)/examples/c/lexcalc
+@FLEX_WORKS_TRUE@nodist_examples_c_lexcalc_lexcalc_SOURCES = examples/c/lexcalc/parse.y examples/c/lexcalc/parse.h examples/c/lexcalc/scan.l
+@FLEX_WORKS_TRUE@examples_c_lexcalc_lexcalc_CPPFLAGS = -I$(top_srcdir)/examples/c/lexcalc -I$(top_builddir)/examples/c/lexcalc
+dist_lexcalc_DATA = examples/c/lexcalc/parse.y examples/c/lexcalc/scan.l examples/c/lexcalc/Makefile examples/c/lexcalc/README.md
+mfcalc_extracted = examples/c/mfcalc/calc.h examples/c/mfcalc/mfcalc.y
+mfcalc_sources = $(mfcalc_extracted)
+nodist_examples_c_mfcalc_mfcalc_SOURCES = $(mfcalc_sources)
+# Don't use gnulib's system headers.
+examples_c_mfcalc_mfcalc_CPPFLAGS = -I$(top_srcdir)/examples/c/mfcalc -I$(top_builddir)/examples/c/mfcalc
+examples_c_mfcalc_mfcalc_LDADD = -lm
+mfcalcdir = $(docdir)/examples/c/mfcalc
+mfcalc_DATA = $(mfcalc_extracted)
+dist_mfcalc_DATA = examples/c/mfcalc/Makefile
+reccalcdir = $(docdir)/examples/c/reccalc
+@FLEX_WORKS_TRUE@nodist_examples_c_reccalc_reccalc_SOURCES = examples/c/reccalc/parse.y examples/c/reccalc/scan.h examples/c/reccalc/scan.c
+@FLEX_WORKS_TRUE@examples_c_reccalc_reccalc_CPPFLAGS = -I$(top_srcdir)/examples/c/reccalc -I$(top_builddir)/examples/c/reccalc
+
+# Tell Make that parse.o depends on scan.h, so that scan.h is built
+# before parse.o.  Obfuscate the name of the target, otherwise
+# Automake removes its recipe for parse.o and leaves only our
+# additional dependency.
+DASH = -
+dist_reccalc_DATA = examples/c/reccalc/parse.y examples/c/reccalc/scan.l examples/c/reccalc/Makefile examples/c/reccalc/README.md
+rpcalc_extracted = examples/c/rpcalc/rpcalc.y
+rpcalc_sources = $(rpcalc_extracted)
+nodist_examples_c_rpcalc_rpcalc_SOURCES = $(rpcalc_sources)
+# Don't use gnulib's system headers.
+examples_c_rpcalc_rpcalc_CPPFLAGS = -I$(top_builddir)/examples/c/rpcalc
+examples_c_rpcalc_rpcalc_LDADD = -lm
+rpcalcdir = $(docdir)/examples/c/rpcalc
+rpcalc_DATA = $(rpcalc_extracted)
+dist_rpcalc_DATA = examples/c/rpcalc/Makefile
+cxxdir = $(docdir)/examples/c++
+calcxx_sources_extracted = \
+  examples/c++/calc++/driver.cc					\
+  examples/c++/calc++/driver.hh					\
+  examples/c++/calc++/scanner.ll				\
+  examples/c++/calc++/calc++.cc
+
+calcxx_extracted = \
+  $(calcxx_sources_extracted)                   \
+  examples/c++/calc++/parser.yy
+
+calcxx_sources_generated = \
+  examples/c++/calc++/parser.cc                                 \
+  examples/c++/calc++/parser.hh                                 \
+  examples/c++/calc++/location.hh
+
+calcxx_sources = \
+  $(calcxx_sources_extracted)                   \
+  $(calcxx_sources_generated)
+
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@nodist_examples_c___calc___calc___SOURCES = $(calcxx_sources)
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@examples_c___calc___calc___CPPFLAGS = -I$(top_srcdir)/examples/c++/calc++ -I$(top_builddir)/examples/c++/calc++
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@examples_c___calc___calc___CXXFLAGS = $(AM_CXXFLAGS) $(FLEX_SCANNER_CXXFLAGS)
+calcxxdir = $(docdir)/examples/c++/calc++
+calcxx_DATA = $(calcxx_extracted)
+dist_calcxx_DATA = examples/c++/calc++/README.md examples/c++/calc++/Makefile
+cxx_DATA = $(simple_extracted)
+simple_extracted = examples/c++/simple.yy
+simple_sources = $(simple_extracted)
+@ENABLE_CXX14_TRUE@nodist_examples_c___simple_SOURCES = $(simple_sources)
+@ENABLE_CXX14_TRUE@examples_c___simple_CXXFLAGS = $(CXX11_CXXFLAGS) $(WARN_CXXFLAGS_TEST)
+@ENABLE_CXX14_TRUE@examples_c___simple_CPPFLAGS = -I$(top_builddir)
+@ENABLE_CXX_TRUE@nodist_examples_c___variant_SOURCES = examples/c++/variant.yy
+@ENABLE_CXX_TRUE@examples_c___variant_CPPFLAGS = -I$(top_builddir)
+@ENABLE_CXX11_TRUE@nodist_examples_c___variant_11_SOURCES = examples/c++/variant-11.yy
+@ENABLE_CXX11_TRUE@examples_c___variant_11_CXXFLAGS = $(CXX11_CXXFLAGS) $(WARN_CXXFLAGS_TEST)
+@ENABLE_CXX11_TRUE@examples_c___variant_11_CPPFLAGS = -I$(top_builddir)
+dist_cxx_DATA = examples/c++/README.md examples/c++/Makefile examples/c++/variant.yy examples/c++/variant-11.yy
+ddir = $(docdir)/examples/d
+dist_d_DATA = examples/d/calc.y examples/d/Makefile examples/d/README.md
+javadir = $(docdir)/examples/java
+dist_java_DATA = examples/java/Calc.y examples/java/Makefile examples/java/README.md
+
+# Non-gnulib sources in Bison's internal library.
+lib_libbison_a_SOURCES = lib/allocator.c lib/areadlink.c \
+	lib/argmatch.c lib/gl_array_list.h lib/gl_array_list.c \
+	lib/binary-io.h lib/binary-io.c lib/bitrotate.h \
+	lib/bitrotate.c lib/bitset.c lib/bitset/array.c \
+	lib/bitset/stats.c lib/bitset/table.c lib/bitset/list.c \
+	lib/bitset/vector.c lib/bitsetv.c lib/c-ctype.h lib/c-ctype.c \
+	lib/c-strcase.h lib/c-strcasecmp.c lib/c-strncasecmp.c \
+	lib/careadlinkat.c lib/cloexec.c lib/close-stream.c \
+	lib/closeout.c lib/concat-filename.c lib/diffseq.h \
+	lib/dirname.c lib/basename.c lib/dirname-lgpl.c \
+	lib/basename-lgpl.c lib/stripslash.c lib/exitfail.c \
+	lib/fatal-signal.h lib/fatal-signal.c $(am__append_18) \
+	lib/fd-safer-flag.c lib/dup-safer-flag.c lib/fopen-safer.c \
+	lib/fstrcmp.h lib/fstrcmp.c lib/gethrxtime.c lib/xtime.c \
+	lib/getprogname.h lib/getprogname.c lib/gettext.h \
+	lib/gettime.c $(am__append_19) lib/hash.c lib/gl_list.h \
+	lib/gl_list.c lib/localcharset.c lib/glthread/lock.h \
+	lib/glthread/lock.c $(am__append_20) lib/math.c lib/mbchar.c \
+	lib/mbfile.h lib/mbfile.c lib/mbswidth.h lib/mbswidth.c \
+	lib/minmax.h lib/pipe2.c lib/pipe2-safer.c lib/printf-frexp.c \
+	lib/printf-frexpl.c lib/progname.h lib/progname.c \
+	lib/quotearg.c lib/sig-handler.c lib/size_max.h \
+	lib/spawn-pipe.h lib/spawn-pipe.c lib/w32spawn.h \
+	$(am__append_21) lib/glthread/threadlib.c lib/timespec.c \
+	lib/timevar.c lib/timevar.def lib/glthread/tls.h \
+	lib/glthread/tls.c lib/unistd.c lib/dup-safer.c lib/fd-safer.c \
+	lib/pipe-safer.c $(am__append_25) lib/wait-process.h \
+	lib/wait-process.c lib/wctype-h.c lib/xmalloc.c \
+	lib/xalloc-die.c lib/xconcat-filename.c lib/xhash.c \
+	lib/gl_xlist.h lib/gl_xlist.c lib/xreadlink.c lib/xsize.h \
+	lib/xsize.c lib/xstrndup.h lib/xstrndup.c lib/get-errno.h \
+	lib/get-errno.c lib/path-join.h lib/path-join.c
+lib_libbison_a_LIBADD = $(gl_LIBOBJS)
+lib_libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_lib_libbison_a_SOURCES = lib/calloc.c lib/canonicalize-lgpl.c \
+	lib/close.c lib/stripslash.c lib/dup2.c lib/error.c \
+	lib/fcntl.c lib/float.c lib/itold.c lib/fopen.c lib/fpending.c \
+	lib/fprintf.c lib/frexp.c lib/frexp.c lib/frexpl.c \
+	lib/fseterr.c lib/fstat.c lib/stat-w32.c lib/fsync.c \
+	lib/getdtablesize.c lib/getopt.c lib/getopt1.c lib/getrusage.c \
+	lib/gettimeofday.c lib/isnan.c lib/isnand.c lib/isnan.c \
+	lib/isnand.c lib/isnan.c lib/isnanf.c lib/isnan.c lib/isnanf.c \
+	lib/isnan.c lib/isnanl.c lib/isnan.c lib/isnanl.c \
+	lib/iswblank.c lib/ldexpl.c lib/localtime-buffer.c lib/lstat.c \
+	lib/malloc.c lib/malloc.c lib/mbrtowc.c lib/mbsinit.c \
+	lib/memchr.c lib/msvc-inval.c lib/msvc-nothrow.c lib/obstack.c \
+	lib/obstack_printf.c lib/open.c lib/perror.c lib/spawni.c \
+	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/spawnattr_destroy.c \
+	lib/spawnattr_init.c lib/spawnattr_setflags.c \
+	lib/spawnattr_setsigmask.c lib/spawnp.c lib/printf-frexp.c \
+	lib/printf.c lib/raise.c lib/rawmemchr.c lib/readlink.c \
+	lib/realloc.c lib/progreloc.c lib/relocatable.c lib/rename.c \
+	lib/rmdir.c lib/sigaction.c lib/signbitd.c lib/signbitf.c \
+	lib/signbitl.c lib/sigprocmask.c lib/snprintf.c lib/sprintf.c \
+	lib/stat-w32.c lib/stat.c lib/stpcpy.c lib/strchrnul.c \
+	lib/strdup.c lib/strerror.c lib/strerror-override.c \
+	lib/strerror_r.c lib/strndup.c lib/strnlen.c lib/strverscmp.c \
+	lib/unlink.c lib/unsetenv.c lib/asnprintf.c lib/printf-args.c \
+	lib/printf-parse.c lib/vasnprintf.c lib/asprintf.c \
+	lib/vasprintf.c lib/vfprintf.c lib/vsnprintf.c lib/vsprintf.c \
+	lib/waitpid.c lib/wcwidth.c lib/windows-mutex.c \
+	lib/windows-once.c lib/windows-recmutex.c lib/windows-rwlock.c \
+	lib/windows-tls.c lib/xmemdup0.c
+lib_libbison_a_CPPFLAGS = $(AM_CPPFLAGS) -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\"
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER)
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+_NORETURN_H = $(top_srcdir)/lib/_Noreturn.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+ARG_NONNULL_H = $(top_srcdir)/lib/arg-nonnull.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+CXXDEFS_H = $(top_srcdir)/lib/c++defs.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+WARN_ON_USE_H = $(top_srcdir)/lib/warn-on-use.h
+
+# The Yacc compatibility library.
+@ENABLE_YACC_TRUE@lib_LIBRARIES = lib/liby.a
+@ENABLE_YACC_TRUE@EXTRA_LIBRARIES = lib/liby.a
+@ENABLE_YACC_TRUE@lib_liby_a_SOURCES = lib/main.c lib/yyerror.c
+# Prettify Automake-computed names of compiled objects.
+src_bison_SHORTNAME = bison
+src_bison_CPPFLAGS = $(AM_CPPFLAGS) -DINSTALLDIR=\"$(bindir)\"
+@RELOCATABLE_VIA_LD_TRUE@src_bison_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)`
+src_bison_CFLAGS = $(AM_CFLAGS) $(WERROR_CFLAGS)
+src_bison_SOURCES = \
+  src/AnnotationList.c                          \
+  src/AnnotationList.h                          \
+  src/InadequacyList.c                          \
+  src/InadequacyList.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/fixits.c                                  \
+  src/fixits.h                                  \
+  src/flex-scanner.h                            \
+  src/getargs.c                                 \
+  src/getargs.h                                 \
+  src/gram.c                                    \
+  src/gram.h                                    \
+  src/graphviz.c                                \
+  src/graphviz.h                                \
+  src/ielr.c                                    \
+  src/ielr.h                                    \
+  src/lalr.c                                    \
+  src/lalr.h                                    \
+  src/location.c                                \
+  src/location.h                                \
+  src/lr0.c                                     \
+  src/lr0.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-graph.c                             \
+  src/print-graph.h                             \
+  src/print-xml.c                               \
+  src/print-xml.h                               \
+  src/print.c                                   \
+  src/print.h                                   \
+  src/reader.c                                  \
+  src/reader.h                                  \
+  src/reduce.c                                  \
+  src/reduce.h                                  \
+  src/relation.c                                \
+  src/relation.h                                \
+  src/scan-code-c.c                             \
+  src/scan-code.h                               \
+  src/scan-gram-c.c                             \
+  src/scan-gram.h                               \
+  src/scan-skel-c.c                             \
+  src/scan-skel.h                               \
+  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
+
+EXTRA_src_bison_SOURCES = \
+  src/scan-code.l                               \
+  src/scan-gram.l                               \
+  src/scan-skel.l
+
+
+# Although conceptually most of these guys would make more sense in the
+# definition of libbison, beware that they might expand as flags such as
+# `-lm`.  Keep them here.  Or use a Libtool convenience library.
+src_bison_LDADD = \
+  $(ISNAND_LIBM)                                \
+  $(ISNANF_LIBM)                                \
+  $(ISNANL_LIBM)                                \
+  $(LDEXPL_LIBM)                                \
+  $(LDEXP_LIBM)                                 \
+  $(LIBINTL)                                    \
+  $(LIBTHREAD)                                  \
+  $(LIB_CLOCK_GETTIME)                          \
+  $(LIB_GETHRXTIME)                             \
+  $(LIBTEXTSTYLE)                               \
+  lib/libbison.a
+
+@ENABLE_YACC_TRUE@nodist_bin_SCRIPTS = src/yacc
+EXTRA_SCRIPTS = src/yacc
+TESTSUITE_AT = \
+  tests/testsuite.at                            \
+                                              \
+  tests/actions.at                              \
+  tests/c++.at                                  \
+  tests/calc.at                                 \
+  tests/conflicts.at                            \
+  tests/cxx-type.at                             \
+  tests/diagnostics.at                          \
+  tests/existing.at                             \
+  tests/glr-regression.at                       \
+  tests/headers.at                              \
+  tests/input.at                                \
+  tests/java.at                                 \
+  tests/javapush.at                             \
+  tests/local.at                                \
+  tests/named-refs.at                           \
+  tests/output.at                               \
+  tests/package.m4                              \
+  tests/push.at                                 \
+  tests/reduce.at                               \
+  tests/regression.at                           \
+  tests/report.at                               \
+  tests/scanner.at                              \
+  tests/sets.at                                 \
+  tests/skeletons.at                            \
+  tests/synclines.at                            \
+  tests/torture.at                              \
+  tests/types.at
+
+TESTSUITE = $(top_srcdir)/tests/testsuite
+AUTOTEST = $(AUTOM4TE) --language=autotest
+AUTOTESTFLAGS = -I $(top_srcdir)/tests
+
+# Move into tests/ so that testsuite.dir etc. be created there.
+RUN_TESTSUITE = $(SHELL) $(TESTSUITE) -C tests $(TESTSUITEFLAGS)
+RUN_TESTSUITE_deps = all $(TESTSUITE) $(check_SCRIPTS)
+VALGRIND_OPTS = --leak-check=full --show-reachable=yes --gen-suppressions=all \
+  $(VALGRIND_OPTS_SUPPRESSION)
+
 gen_start_date = 2012-01-16
 all: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
+.SUFFIXES: .gv .eps .pdf .svg .yy .stamp .c .cc .dvi .l .ll .log .o .obj .ps .test .test$(EXEEXT) .trs .y
 am--refresh: Makefile
 	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/build-aux/local.mk $(srcdir)/data/local.mk $(srcdir)/doc/local.mk $(srcdir)/etc/local.mk $(srcdir)/examples/local.mk $(srcdir)/examples/c/local.mk $(srcdir)/examples/c/calc/local.mk $(srcdir)/examples/c/lexcalc/local.mk $(srcdir)/examples/c/mfcalc/local.mk $(srcdir)/examples/c/reccalc/local.mk $(srcdir)/examples/c/rpcalc/local.mk $(srcdir)/examples/c++/local.mk $(srcdir)/examples/c++/calc++/local.mk $(srcdir)/examples/d/local.mk $(srcdir)/examples/java/local.mk $(srcdir)/lib/local.mk $(srcdir)/lib/gnulib.mk $(srcdir)/src/local.mk $(srcdir)/tests/local.mk $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -1477,16 +3232,16 @@
 	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 \
 	  *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);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
 	esac;
+$(srcdir)/build-aux/local.mk $(srcdir)/data/local.mk $(srcdir)/doc/local.mk $(srcdir)/etc/local.mk $(srcdir)/examples/local.mk $(srcdir)/examples/c/local.mk $(srcdir)/examples/c/calc/local.mk $(srcdir)/examples/c/lexcalc/local.mk $(srcdir)/examples/c/mfcalc/local.mk $(srcdir)/examples/c/reccalc/local.mk $(srcdir)/examples/c/rpcalc/local.mk $(srcdir)/examples/c++/local.mk $(srcdir)/examples/c++/calc++/local.mk $(srcdir)/examples/d/local.mk $(srcdir)/examples/java/local.mk $(srcdir)/lib/local.mk $(srcdir)/lib/gnulib.mk $(srcdir)/src/local.mk $(srcdir)/tests/local.mk $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -1496,10 +3251,4471 @@
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 $(am__aclocal_m4_deps):
+
+lib/config.h: lib/stamp-h1
+	@test -f $@ || rm -f lib/stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) lib/stamp-h1
+
+lib/stamp-h1: $(top_srcdir)/lib/config.in.h $(top_builddir)/config.status
+	@rm -f lib/stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status lib/config.h
+$(top_srcdir)/lib/config.in.h:  $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f lib/stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f lib/config.h lib/stamp-h1
+src/yacc: $(top_builddir)/config.status $(top_srcdir)/src/yacc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
 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 $@
+etc/bench.pl: $(top_builddir)/config.status $(top_srcdir)/etc/bench.pl.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+tests/atlocal: $(top_builddir)/config.status $(top_srcdir)/tests/atlocal.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+tests/bison: $(top_builddir)/config.status $(top_srcdir)/tests/bison.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+doc/yacc.1: $(top_builddir)/config.status $(top_srcdir)/doc/yacc.1.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@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)'; 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)
+
+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
+
+clean-checkPROGRAMS:
+	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+install-libLIBRARIES: $(lib_LIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	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)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  if test -f $$p; then \
+	    $(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)'; 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)
+lib/$(am__dirstamp):
+	@$(MKDIR_P) lib
+	@: > lib/$(am__dirstamp)
+lib/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) lib/$(DEPDIR)
+	@: > lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-allocator.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-areadlink.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-argmatch.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gl_array_list.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-binary-io.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-bitrotate.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-bitset.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/$(am__dirstamp):
+	@$(MKDIR_P) lib/bitset
+	@: > lib/bitset/$(am__dirstamp)
+lib/bitset/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) lib/bitset/$(DEPDIR)
+	@: > lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/libbison_a-array.$(OBJEXT): lib/bitset/$(am__dirstamp) \
+	lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/libbison_a-stats.$(OBJEXT): lib/bitset/$(am__dirstamp) \
+	lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/libbison_a-table.$(OBJEXT): lib/bitset/$(am__dirstamp) \
+	lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/libbison_a-list.$(OBJEXT): lib/bitset/$(am__dirstamp) \
+	lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/bitset/libbison_a-vector.$(OBJEXT): lib/bitset/$(am__dirstamp) \
+	lib/bitset/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-bitsetv.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-c-ctype.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-c-strcasecmp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-c-strncasecmp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-careadlinkat.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-cloexec.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-close-stream.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-closeout.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-concat-filename.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-dirname.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-basename.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-dirname-lgpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-basename-lgpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-stripslash.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-exitfail.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fatal-signal.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fd-hook.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fd-safer-flag.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-dup-safer-flag.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fopen-safer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fstrcmp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gethrxtime.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xtime.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-getprogname.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gettime.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-hard-locale.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-hash.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gl_list.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-localcharset.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/glthread/$(am__dirstamp):
+	@$(MKDIR_P) lib/glthread
+	@: > lib/glthread/$(am__dirstamp)
+lib/glthread/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) lib/glthread/$(DEPDIR)
+	@: > lib/glthread/$(DEPDIR)/$(am__dirstamp)
+lib/glthread/libbison_a-lock.$(OBJEXT): lib/glthread/$(am__dirstamp) \
+	lib/glthread/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-malloca.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-math.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-mbchar.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-mbfile.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-mbswidth.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-pipe2.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-pipe2-safer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-printf-frexp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-printf-frexpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-progname.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-quotearg.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-sig-handler.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn-pipe.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-stat-time.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/glthread/libbison_a-threadlib.$(OBJEXT):  \
+	lib/glthread/$(am__dirstamp) \
+	lib/glthread/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-timespec.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-timevar.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/glthread/libbison_a-tls.$(OBJEXT): lib/glthread/$(am__dirstamp) \
+	lib/glthread/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-unistd.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-dup-safer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fd-safer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-pipe-safer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/uniwidth/$(am__dirstamp):
+	@$(MKDIR_P) lib/uniwidth
+	@: > lib/uniwidth/$(am__dirstamp)
+lib/uniwidth/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) lib/uniwidth/$(DEPDIR)
+	@: > lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+lib/uniwidth/libbison_a-width.$(OBJEXT): lib/uniwidth/$(am__dirstamp) \
+	lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-wait-process.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-wctype-h.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xmalloc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xalloc-die.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xconcat-filename.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xhash.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gl_xlist.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xreadlink.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xsize.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xstrndup.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-get-errno.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-path-join.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-calloc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-canonicalize-lgpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-close.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-dup2.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-error.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fcntl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-float.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-itold.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fopen.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fpending.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-frexp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-frexpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fseterr.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fstat.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-stat-w32.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-fsync.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-getdtablesize.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-getopt.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-getopt1.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-getrusage.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-gettimeofday.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-isnan.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-isnand.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-isnanf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-isnanl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-iswblank.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-ldexpl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-localtime-buffer.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-lstat.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-malloc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-mbrtowc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-mbsinit.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-memchr.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-msvc-inval.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-msvc-nothrow.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-obstack.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-obstack_printf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-open.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-perror.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawni.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn_faction_addclose.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn_faction_adddup2.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn_faction_addopen.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn_faction_destroy.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawn_faction_init.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawnattr_destroy.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawnattr_init.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawnattr_setflags.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawnattr_setsigmask.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-spawnp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-printf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-raise.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-rawmemchr.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-readlink.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-realloc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-progreloc.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-relocatable.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-rename.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-rmdir.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-sigaction.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-signbitd.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-signbitf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-signbitl.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-sigprocmask.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-snprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-sprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-stat.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-stpcpy.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strchrnul.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strdup.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strerror.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strerror-override.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strerror_r.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strndup.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strnlen.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-strverscmp.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-unlink.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-unsetenv.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-asnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-printf-args.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-printf-parse.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-vasnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-asprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-vasprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-vfprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-vsnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-vsprintf.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-waitpid.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-wcwidth.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-windows-mutex.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-windows-once.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-windows-recmutex.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-windows-rwlock.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-windows-tls.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+lib/libbison_a-xmemdup0.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+
+lib/libbison.a: $(lib_libbison_a_OBJECTS) $(lib_libbison_a_DEPENDENCIES) $(EXTRA_lib_libbison_a_DEPENDENCIES) lib/$(am__dirstamp)
+	$(AM_V_at)-rm -f lib/libbison.a
+	$(AM_V_AR)$(lib_libbison_a_AR) lib/libbison.a $(lib_libbison_a_OBJECTS) $(lib_libbison_a_LIBADD)
+	$(AM_V_at)$(RANLIB) lib/libbison.a
+lib/main.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/yyerror.$(OBJEXT): lib/$(am__dirstamp) \
+	lib/$(DEPDIR)/$(am__dirstamp)
+
+lib/liby.a: $(lib_liby_a_OBJECTS) $(lib_liby_a_DEPENDENCIES) $(EXTRA_lib_liby_a_DEPENDENCIES) lib/$(am__dirstamp)
+	$(AM_V_at)-rm -f lib/liby.a
+	$(AM_V_AR)$(lib_liby_a_AR) lib/liby.a $(lib_liby_a_OBJECTS) $(lib_liby_a_LIBADD)
+	$(AM_V_at)$(RANLIB) lib/liby.a
+examples/c++/calc++/$(am__dirstamp):
+	@$(MKDIR_P) examples/c++/calc++
+	@: > examples/c++/calc++/$(am__dirstamp)
+examples/c++/calc++/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c++/calc++/$(DEPDIR)
+	@: > examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+examples/c++/calc++/calc__-driver.$(OBJEXT):  \
+	examples/c++/calc++/$(am__dirstamp) \
+	examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+examples/c++/calc++/calc__-scanner.$(OBJEXT):  \
+	examples/c++/calc++/$(am__dirstamp) \
+	examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+examples/c++/calc++/calc__-calc++.$(OBJEXT):  \
+	examples/c++/calc++/$(am__dirstamp) \
+	examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+examples/c++/calc++/calc__-parser.$(OBJEXT):  \
+	examples/c++/calc++/$(am__dirstamp) \
+	examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+
+examples/c++/calc++/calc++$(EXEEXT): $(examples_c___calc___calc___OBJECTS) $(examples_c___calc___calc___DEPENDENCIES) $(EXTRA_examples_c___calc___calc___DEPENDENCIES) examples/c++/calc++/$(am__dirstamp)
+	@rm -f examples/c++/calc++/calc++$(EXEEXT)
+	$(AM_V_CXXLD)$(examples_c___calc___calc___LINK) $(examples_c___calc___calc___OBJECTS) $(examples_c___calc___calc___LDADD) $(LIBS)
+examples/c++/$(am__dirstamp):
+	@$(MKDIR_P) examples/c++
+	@: > examples/c++/$(am__dirstamp)
+examples/c++/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c++/$(DEPDIR)
+	@: > examples/c++/$(DEPDIR)/$(am__dirstamp)
+examples/c++/simple-simple.$(OBJEXT): examples/c++/$(am__dirstamp) \
+	examples/c++/$(DEPDIR)/$(am__dirstamp)
+
+examples/c++/simple$(EXEEXT): $(examples_c___simple_OBJECTS) $(examples_c___simple_DEPENDENCIES) $(EXTRA_examples_c___simple_DEPENDENCIES) examples/c++/$(am__dirstamp)
+	@rm -f examples/c++/simple$(EXEEXT)
+	$(AM_V_CXXLD)$(examples_c___simple_LINK) $(examples_c___simple_OBJECTS) $(examples_c___simple_LDADD) $(LIBS)
+examples/c++/variant-variant.$(OBJEXT): examples/c++/$(am__dirstamp) \
+	examples/c++/$(DEPDIR)/$(am__dirstamp)
+
+examples/c++/variant$(EXEEXT): $(examples_c___variant_OBJECTS) $(examples_c___variant_DEPENDENCIES) $(EXTRA_examples_c___variant_DEPENDENCIES) examples/c++/$(am__dirstamp)
+	@rm -f examples/c++/variant$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(examples_c___variant_OBJECTS) $(examples_c___variant_LDADD) $(LIBS)
+examples/c++/variant_11-variant-11.$(OBJEXT):  \
+	examples/c++/$(am__dirstamp) \
+	examples/c++/$(DEPDIR)/$(am__dirstamp)
+
+examples/c++/variant-11$(EXEEXT): $(examples_c___variant_11_OBJECTS) $(examples_c___variant_11_DEPENDENCIES) $(EXTRA_examples_c___variant_11_DEPENDENCIES) examples/c++/$(am__dirstamp)
+	@rm -f examples/c++/variant-11$(EXEEXT)
+	$(AM_V_CXXLD)$(examples_c___variant_11_LINK) $(examples_c___variant_11_OBJECTS) $(examples_c___variant_11_LDADD) $(LIBS)
+examples/c/calc/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/calc
+	@: > examples/c/calc/$(am__dirstamp)
+examples/c/calc/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/calc/$(DEPDIR)
+	@: > examples/c/calc/$(DEPDIR)/$(am__dirstamp)
+examples/c/calc/calc-calc.$(OBJEXT): examples/c/calc/$(am__dirstamp) \
+	examples/c/calc/$(DEPDIR)/$(am__dirstamp)
+
+examples/c/calc/calc$(EXEEXT): $(examples_c_calc_calc_OBJECTS) $(examples_c_calc_calc_DEPENDENCIES) $(EXTRA_examples_c_calc_calc_DEPENDENCIES) examples/c/calc/$(am__dirstamp)
+	@rm -f examples/c/calc/calc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(examples_c_calc_calc_OBJECTS) $(examples_c_calc_calc_LDADD) $(LIBS)
+examples/c/lexcalc/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/lexcalc
+	@: > examples/c/lexcalc/$(am__dirstamp)
+examples/c/lexcalc/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/lexcalc/$(DEPDIR)
+	@: > examples/c/lexcalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/lexcalc/lexcalc-parse.$(OBJEXT):  \
+	examples/c/lexcalc/$(am__dirstamp) \
+	examples/c/lexcalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/lexcalc/lexcalc-scan.$(OBJEXT):  \
+	examples/c/lexcalc/$(am__dirstamp) \
+	examples/c/lexcalc/$(DEPDIR)/$(am__dirstamp)
+
+examples/c/lexcalc/lexcalc$(EXEEXT): $(examples_c_lexcalc_lexcalc_OBJECTS) $(examples_c_lexcalc_lexcalc_DEPENDENCIES) $(EXTRA_examples_c_lexcalc_lexcalc_DEPENDENCIES) examples/c/lexcalc/$(am__dirstamp)
+	@rm -f examples/c/lexcalc/lexcalc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(examples_c_lexcalc_lexcalc_OBJECTS) $(examples_c_lexcalc_lexcalc_LDADD) $(LIBS)
+examples/c/mfcalc/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/mfcalc
+	@: > examples/c/mfcalc/$(am__dirstamp)
+examples/c/mfcalc/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/mfcalc/$(DEPDIR)
+	@: > examples/c/mfcalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/mfcalc/mfcalc-mfcalc.$(OBJEXT):  \
+	examples/c/mfcalc/$(am__dirstamp) \
+	examples/c/mfcalc/$(DEPDIR)/$(am__dirstamp)
+
+examples/c/mfcalc/mfcalc$(EXEEXT): $(examples_c_mfcalc_mfcalc_OBJECTS) $(examples_c_mfcalc_mfcalc_DEPENDENCIES) $(EXTRA_examples_c_mfcalc_mfcalc_DEPENDENCIES) examples/c/mfcalc/$(am__dirstamp)
+	@rm -f examples/c/mfcalc/mfcalc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(examples_c_mfcalc_mfcalc_OBJECTS) $(examples_c_mfcalc_mfcalc_LDADD) $(LIBS)
+examples/c/reccalc/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/reccalc
+	@: > examples/c/reccalc/$(am__dirstamp)
+examples/c/reccalc/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/reccalc/$(DEPDIR)
+	@: > examples/c/reccalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/reccalc/reccalc-parse.$(OBJEXT):  \
+	examples/c/reccalc/$(am__dirstamp) \
+	examples/c/reccalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/reccalc/reccalc-scan.$(OBJEXT):  \
+	examples/c/reccalc/$(am__dirstamp) \
+	examples/c/reccalc/$(DEPDIR)/$(am__dirstamp)
+
+examples/c/reccalc/reccalc$(EXEEXT): $(examples_c_reccalc_reccalc_OBJECTS) $(examples_c_reccalc_reccalc_DEPENDENCIES) $(EXTRA_examples_c_reccalc_reccalc_DEPENDENCIES) examples/c/reccalc/$(am__dirstamp)
+	@rm -f examples/c/reccalc/reccalc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(examples_c_reccalc_reccalc_OBJECTS) $(examples_c_reccalc_reccalc_LDADD) $(LIBS)
+examples/c/rpcalc/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/rpcalc
+	@: > examples/c/rpcalc/$(am__dirstamp)
+examples/c/rpcalc/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) examples/c/rpcalc/$(DEPDIR)
+	@: > examples/c/rpcalc/$(DEPDIR)/$(am__dirstamp)
+examples/c/rpcalc/rpcalc-rpcalc.$(OBJEXT):  \
+	examples/c/rpcalc/$(am__dirstamp) \
+	examples/c/rpcalc/$(DEPDIR)/$(am__dirstamp)
+
+examples/c/rpcalc/rpcalc$(EXEEXT): $(examples_c_rpcalc_rpcalc_OBJECTS) $(examples_c_rpcalc_rpcalc_DEPENDENCIES) $(EXTRA_examples_c_rpcalc_rpcalc_DEPENDENCIES) examples/c/rpcalc/$(am__dirstamp)
+	@rm -f examples/c/rpcalc/rpcalc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(examples_c_rpcalc_rpcalc_OBJECTS) $(examples_c_rpcalc_rpcalc_LDADD) $(LIBS)
+src/$(am__dirstamp):
+	@$(MKDIR_P) src
+	@: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/$(DEPDIR)
+	@: > src/$(DEPDIR)/$(am__dirstamp)
+src/bison-AnnotationList.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-InadequacyList.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-Sbitset.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-assoc.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-closure.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-complain.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-conflicts.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-derives.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-files.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-fixits.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-getargs.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-gram.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-graphviz.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-ielr.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-lalr.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-location.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-lr0.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-main.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-muscle-tab.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-named-ref.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-nullable.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-output.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-parse-gram.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-print-graph.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-print-xml.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-print.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-reader.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-reduce.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-relation.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-code-c.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-gram-c.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-skel-c.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-state.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-symlist.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-symtab.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-tables.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-uniqstr.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-code.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-gram.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+src/bison-scan-skel.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
+
+src/bison$(EXEEXT): $(src_bison_OBJECTS) $(src_bison_DEPENDENCIES) $(EXTRA_src_bison_DEPENDENCIES) src/$(am__dirstamp)
+	@rm -f src/bison$(EXEEXT)
+	$(AM_V_CCLD)$(src_bison_LINK) $(src_bison_OBJECTS) $(src_bison_LDADD) $(LIBS)
+install-nodist_binSCRIPTS: $(nodist_bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_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 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-nodist_binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_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-nodist_binSCRIPTS: $(nodist_bin_SCRIPTS)
+	bad=0; pid=$$$$; list="$(nodist_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)
+	-rm -f examples/c++/*.$(OBJEXT)
+	-rm -f examples/c++/calc++/*.$(OBJEXT)
+	-rm -f examples/c/calc/*.$(OBJEXT)
+	-rm -f examples/c/lexcalc/*.$(OBJEXT)
+	-rm -f examples/c/mfcalc/*.$(OBJEXT)
+	-rm -f examples/c/reccalc/*.$(OBJEXT)
+	-rm -f examples/c/rpcalc/*.$(OBJEXT)
+	-rm -f lib/*.$(OBJEXT)
+	-rm -f lib/bitset/*.$(OBJEXT)
+	-rm -f lib/glthread/*.$(OBJEXT)
+	-rm -f lib/uniwidth/*.$(OBJEXT)
+	-rm -f src/*.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/$(DEPDIR)/simple-simple.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/$(DEPDIR)/variant-variant.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/$(DEPDIR)/variant_11-variant-11.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/calc++/$(DEPDIR)/calc__-driver.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/calc++/$(DEPDIR)/calc__-parser.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/calc/$(DEPDIR)/calc-calc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-allocator.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-areadlink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-argmatch.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-asnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-asprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-basename-lgpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-basename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-binary-io.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-bitrotate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-bitset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-bitsetv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-c-ctype.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-calloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-careadlinkat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-cloexec.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-close-stream.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-close.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-closeout.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-concat-filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-dirname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-dup-safer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-dup2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-error.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-exitfail.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fatal-signal.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fcntl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fd-hook.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fd-safer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-float.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fopen-safer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fopen.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fpending.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-frexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-frexpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fseterr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fstat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fstrcmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-fsync.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-get-errno.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-getdtablesize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gethrxtime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-getopt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-getopt1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-getprogname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-getrusage.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gettime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gettimeofday.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gl_array_list.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gl_list.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-gl_xlist.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-hard-locale.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-hash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-isnan.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-isnand.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-isnanf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-isnanl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-iswblank.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-itold.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-ldexpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-localcharset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-localtime-buffer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-lstat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-malloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-malloca.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-math.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-mbchar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-mbfile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-mbrtowc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-mbsinit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-mbswidth.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-memchr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-msvc-inval.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-obstack.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-obstack_printf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-open.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-path-join.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-perror.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-pipe-safer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-pipe2-safer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-pipe2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-printf-args.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-printf-frexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-printf-frexpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-printf-parse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-printf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-progname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-progreloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-quotearg.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-raise.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-rawmemchr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-readlink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-realloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-relocatable.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-rename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-rmdir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-sig-handler.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-sigaction.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-signbitd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-signbitf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-signbitl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-sigprocmask.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-snprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn-pipe.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawnattr_init.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawni.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-spawnp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-sprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-stat-time.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-stat-w32.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-stat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-stpcpy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strchrnul.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strdup.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strerror-override.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strerror.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strerror_r.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-stripslash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strndup.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strnlen.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-strverscmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-timespec.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-timevar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-unistd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-unlink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-unsetenv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-vasnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-vasprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-vfprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-vsnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-vsprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-wait-process.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-waitpid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-wctype-h.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-wcwidth.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-windows-mutex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-windows-once.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-windows-recmutex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-windows-rwlock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-windows-tls.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xalloc-die.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xconcat-filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xhash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xmalloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xmemdup0.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xreadlink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xsize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xstrndup.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libbison_a-xtime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/yyerror.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/bitset/$(DEPDIR)/libbison_a-array.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/bitset/$(DEPDIR)/libbison_a-list.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/bitset/$(DEPDIR)/libbison_a-stats.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/bitset/$(DEPDIR)/libbison_a-table.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/bitset/$(DEPDIR)/libbison_a-vector.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/glthread/$(DEPDIR)/libbison_a-lock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/glthread/$(DEPDIR)/libbison_a-tls.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/uniwidth/$(DEPDIR)/libbison_a-width.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-AnnotationList.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-InadequacyList.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-Sbitset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-assoc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-closure.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-complain.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-conflicts.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-derives.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-files.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-fixits.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-getargs.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-gram.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-graphviz.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-ielr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-lalr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-location.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-lr0.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-muscle-tab.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-named-ref.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-nullable.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-output.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-parse-gram.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-print-graph.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-print-xml.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-print.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-reader.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-reduce.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-relation.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-code-c.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-code.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-gram-c.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-gram.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-skel-c.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-scan-skel.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-state.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-symlist.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-symtab.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-tables.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/bison-uniqstr.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+	@$(MKDIR_P) $(@D)
+	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.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@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.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@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+lib/libbison_a-allocator.o: lib/allocator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-allocator.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-allocator.Tpo -c -o lib/libbison_a-allocator.o `test -f 'lib/allocator.c' || echo '$(srcdir)/'`lib/allocator.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-allocator.Tpo lib/$(DEPDIR)/libbison_a-allocator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/allocator.c' object='lib/libbison_a-allocator.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-allocator.o `test -f 'lib/allocator.c' || echo '$(srcdir)/'`lib/allocator.c
+
+lib/libbison_a-allocator.obj: lib/allocator.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-allocator.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-allocator.Tpo -c -o lib/libbison_a-allocator.obj `if test -f 'lib/allocator.c'; then $(CYGPATH_W) 'lib/allocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/allocator.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-allocator.Tpo lib/$(DEPDIR)/libbison_a-allocator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/allocator.c' object='lib/libbison_a-allocator.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-allocator.obj `if test -f 'lib/allocator.c'; then $(CYGPATH_W) 'lib/allocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/allocator.c'; fi`
+
+lib/libbison_a-areadlink.o: lib/areadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-areadlink.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-areadlink.Tpo -c -o lib/libbison_a-areadlink.o `test -f 'lib/areadlink.c' || echo '$(srcdir)/'`lib/areadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-areadlink.Tpo lib/$(DEPDIR)/libbison_a-areadlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/areadlink.c' object='lib/libbison_a-areadlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-areadlink.o `test -f 'lib/areadlink.c' || echo '$(srcdir)/'`lib/areadlink.c
+
+lib/libbison_a-areadlink.obj: lib/areadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-areadlink.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-areadlink.Tpo -c -o lib/libbison_a-areadlink.obj `if test -f 'lib/areadlink.c'; then $(CYGPATH_W) 'lib/areadlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/areadlink.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-areadlink.Tpo lib/$(DEPDIR)/libbison_a-areadlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/areadlink.c' object='lib/libbison_a-areadlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-areadlink.obj `if test -f 'lib/areadlink.c'; then $(CYGPATH_W) 'lib/areadlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/areadlink.c'; fi`
+
+lib/libbison_a-argmatch.o: lib/argmatch.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-argmatch.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-argmatch.Tpo -c -o lib/libbison_a-argmatch.o `test -f 'lib/argmatch.c' || echo '$(srcdir)/'`lib/argmatch.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-argmatch.Tpo lib/$(DEPDIR)/libbison_a-argmatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/argmatch.c' object='lib/libbison_a-argmatch.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-argmatch.o `test -f 'lib/argmatch.c' || echo '$(srcdir)/'`lib/argmatch.c
+
+lib/libbison_a-argmatch.obj: lib/argmatch.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-argmatch.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-argmatch.Tpo -c -o lib/libbison_a-argmatch.obj `if test -f 'lib/argmatch.c'; then $(CYGPATH_W) 'lib/argmatch.c'; else $(CYGPATH_W) '$(srcdir)/lib/argmatch.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-argmatch.Tpo lib/$(DEPDIR)/libbison_a-argmatch.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/argmatch.c' object='lib/libbison_a-argmatch.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-argmatch.obj `if test -f 'lib/argmatch.c'; then $(CYGPATH_W) 'lib/argmatch.c'; else $(CYGPATH_W) '$(srcdir)/lib/argmatch.c'; fi`
+
+lib/libbison_a-gl_array_list.o: lib/gl_array_list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_array_list.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_array_list.Tpo -c -o lib/libbison_a-gl_array_list.o `test -f 'lib/gl_array_list.c' || echo '$(srcdir)/'`lib/gl_array_list.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_array_list.Tpo lib/$(DEPDIR)/libbison_a-gl_array_list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_array_list.c' object='lib/libbison_a-gl_array_list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_array_list.o `test -f 'lib/gl_array_list.c' || echo '$(srcdir)/'`lib/gl_array_list.c
+
+lib/libbison_a-gl_array_list.obj: lib/gl_array_list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_array_list.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_array_list.Tpo -c -o lib/libbison_a-gl_array_list.obj `if test -f 'lib/gl_array_list.c'; then $(CYGPATH_W) 'lib/gl_array_list.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_array_list.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_array_list.Tpo lib/$(DEPDIR)/libbison_a-gl_array_list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_array_list.c' object='lib/libbison_a-gl_array_list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_array_list.obj `if test -f 'lib/gl_array_list.c'; then $(CYGPATH_W) 'lib/gl_array_list.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_array_list.c'; fi`
+
+lib/libbison_a-binary-io.o: lib/binary-io.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-binary-io.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-binary-io.Tpo -c -o lib/libbison_a-binary-io.o `test -f 'lib/binary-io.c' || echo '$(srcdir)/'`lib/binary-io.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-binary-io.Tpo lib/$(DEPDIR)/libbison_a-binary-io.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/binary-io.c' object='lib/libbison_a-binary-io.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-binary-io.o `test -f 'lib/binary-io.c' || echo '$(srcdir)/'`lib/binary-io.c
+
+lib/libbison_a-binary-io.obj: lib/binary-io.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-binary-io.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-binary-io.Tpo -c -o lib/libbison_a-binary-io.obj `if test -f 'lib/binary-io.c'; then $(CYGPATH_W) 'lib/binary-io.c'; else $(CYGPATH_W) '$(srcdir)/lib/binary-io.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-binary-io.Tpo lib/$(DEPDIR)/libbison_a-binary-io.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/binary-io.c' object='lib/libbison_a-binary-io.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-binary-io.obj `if test -f 'lib/binary-io.c'; then $(CYGPATH_W) 'lib/binary-io.c'; else $(CYGPATH_W) '$(srcdir)/lib/binary-io.c'; fi`
+
+lib/libbison_a-bitrotate.o: lib/bitrotate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitrotate.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitrotate.Tpo -c -o lib/libbison_a-bitrotate.o `test -f 'lib/bitrotate.c' || echo '$(srcdir)/'`lib/bitrotate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitrotate.Tpo lib/$(DEPDIR)/libbison_a-bitrotate.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitrotate.c' object='lib/libbison_a-bitrotate.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitrotate.o `test -f 'lib/bitrotate.c' || echo '$(srcdir)/'`lib/bitrotate.c
+
+lib/libbison_a-bitrotate.obj: lib/bitrotate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitrotate.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitrotate.Tpo -c -o lib/libbison_a-bitrotate.obj `if test -f 'lib/bitrotate.c'; then $(CYGPATH_W) 'lib/bitrotate.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitrotate.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitrotate.Tpo lib/$(DEPDIR)/libbison_a-bitrotate.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitrotate.c' object='lib/libbison_a-bitrotate.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitrotate.obj `if test -f 'lib/bitrotate.c'; then $(CYGPATH_W) 'lib/bitrotate.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitrotate.c'; fi`
+
+lib/libbison_a-bitset.o: lib/bitset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitset.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitset.Tpo -c -o lib/libbison_a-bitset.o `test -f 'lib/bitset.c' || echo '$(srcdir)/'`lib/bitset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitset.Tpo lib/$(DEPDIR)/libbison_a-bitset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset.c' object='lib/libbison_a-bitset.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitset.o `test -f 'lib/bitset.c' || echo '$(srcdir)/'`lib/bitset.c
+
+lib/libbison_a-bitset.obj: lib/bitset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitset.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitset.Tpo -c -o lib/libbison_a-bitset.obj `if test -f 'lib/bitset.c'; then $(CYGPATH_W) 'lib/bitset.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitset.Tpo lib/$(DEPDIR)/libbison_a-bitset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset.c' object='lib/libbison_a-bitset.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitset.obj `if test -f 'lib/bitset.c'; then $(CYGPATH_W) 'lib/bitset.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset.c'; fi`
+
+lib/bitset/libbison_a-array.o: lib/bitset/array.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-array.o -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-array.Tpo -c -o lib/bitset/libbison_a-array.o `test -f 'lib/bitset/array.c' || echo '$(srcdir)/'`lib/bitset/array.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-array.Tpo lib/bitset/$(DEPDIR)/libbison_a-array.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/array.c' object='lib/bitset/libbison_a-array.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-array.o `test -f 'lib/bitset/array.c' || echo '$(srcdir)/'`lib/bitset/array.c
+
+lib/bitset/libbison_a-array.obj: lib/bitset/array.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-array.obj -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-array.Tpo -c -o lib/bitset/libbison_a-array.obj `if test -f 'lib/bitset/array.c'; then $(CYGPATH_W) 'lib/bitset/array.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/array.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-array.Tpo lib/bitset/$(DEPDIR)/libbison_a-array.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/array.c' object='lib/bitset/libbison_a-array.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-array.obj `if test -f 'lib/bitset/array.c'; then $(CYGPATH_W) 'lib/bitset/array.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/array.c'; fi`
+
+lib/bitset/libbison_a-stats.o: lib/bitset/stats.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-stats.o -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-stats.Tpo -c -o lib/bitset/libbison_a-stats.o `test -f 'lib/bitset/stats.c' || echo '$(srcdir)/'`lib/bitset/stats.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-stats.Tpo lib/bitset/$(DEPDIR)/libbison_a-stats.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/stats.c' object='lib/bitset/libbison_a-stats.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-stats.o `test -f 'lib/bitset/stats.c' || echo '$(srcdir)/'`lib/bitset/stats.c
+
+lib/bitset/libbison_a-stats.obj: lib/bitset/stats.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-stats.obj -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-stats.Tpo -c -o lib/bitset/libbison_a-stats.obj `if test -f 'lib/bitset/stats.c'; then $(CYGPATH_W) 'lib/bitset/stats.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/stats.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-stats.Tpo lib/bitset/$(DEPDIR)/libbison_a-stats.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/stats.c' object='lib/bitset/libbison_a-stats.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-stats.obj `if test -f 'lib/bitset/stats.c'; then $(CYGPATH_W) 'lib/bitset/stats.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/stats.c'; fi`
+
+lib/bitset/libbison_a-table.o: lib/bitset/table.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-table.o -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-table.Tpo -c -o lib/bitset/libbison_a-table.o `test -f 'lib/bitset/table.c' || echo '$(srcdir)/'`lib/bitset/table.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-table.Tpo lib/bitset/$(DEPDIR)/libbison_a-table.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/table.c' object='lib/bitset/libbison_a-table.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-table.o `test -f 'lib/bitset/table.c' || echo '$(srcdir)/'`lib/bitset/table.c
+
+lib/bitset/libbison_a-table.obj: lib/bitset/table.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-table.obj -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-table.Tpo -c -o lib/bitset/libbison_a-table.obj `if test -f 'lib/bitset/table.c'; then $(CYGPATH_W) 'lib/bitset/table.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/table.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-table.Tpo lib/bitset/$(DEPDIR)/libbison_a-table.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/table.c' object='lib/bitset/libbison_a-table.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-table.obj `if test -f 'lib/bitset/table.c'; then $(CYGPATH_W) 'lib/bitset/table.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/table.c'; fi`
+
+lib/bitset/libbison_a-list.o: lib/bitset/list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-list.o -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-list.Tpo -c -o lib/bitset/libbison_a-list.o `test -f 'lib/bitset/list.c' || echo '$(srcdir)/'`lib/bitset/list.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-list.Tpo lib/bitset/$(DEPDIR)/libbison_a-list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/list.c' object='lib/bitset/libbison_a-list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-list.o `test -f 'lib/bitset/list.c' || echo '$(srcdir)/'`lib/bitset/list.c
+
+lib/bitset/libbison_a-list.obj: lib/bitset/list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-list.obj -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-list.Tpo -c -o lib/bitset/libbison_a-list.obj `if test -f 'lib/bitset/list.c'; then $(CYGPATH_W) 'lib/bitset/list.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/list.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-list.Tpo lib/bitset/$(DEPDIR)/libbison_a-list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/list.c' object='lib/bitset/libbison_a-list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-list.obj `if test -f 'lib/bitset/list.c'; then $(CYGPATH_W) 'lib/bitset/list.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/list.c'; fi`
+
+lib/bitset/libbison_a-vector.o: lib/bitset/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-vector.o -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-vector.Tpo -c -o lib/bitset/libbison_a-vector.o `test -f 'lib/bitset/vector.c' || echo '$(srcdir)/'`lib/bitset/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-vector.Tpo lib/bitset/$(DEPDIR)/libbison_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/vector.c' object='lib/bitset/libbison_a-vector.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-vector.o `test -f 'lib/bitset/vector.c' || echo '$(srcdir)/'`lib/bitset/vector.c
+
+lib/bitset/libbison_a-vector.obj: lib/bitset/vector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/bitset/libbison_a-vector.obj -MD -MP -MF lib/bitset/$(DEPDIR)/libbison_a-vector.Tpo -c -o lib/bitset/libbison_a-vector.obj `if test -f 'lib/bitset/vector.c'; then $(CYGPATH_W) 'lib/bitset/vector.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/vector.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/bitset/$(DEPDIR)/libbison_a-vector.Tpo lib/bitset/$(DEPDIR)/libbison_a-vector.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitset/vector.c' object='lib/bitset/libbison_a-vector.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/bitset/libbison_a-vector.obj `if test -f 'lib/bitset/vector.c'; then $(CYGPATH_W) 'lib/bitset/vector.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitset/vector.c'; fi`
+
+lib/libbison_a-bitsetv.o: lib/bitsetv.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitsetv.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitsetv.Tpo -c -o lib/libbison_a-bitsetv.o `test -f 'lib/bitsetv.c' || echo '$(srcdir)/'`lib/bitsetv.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitsetv.Tpo lib/$(DEPDIR)/libbison_a-bitsetv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitsetv.c' object='lib/libbison_a-bitsetv.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitsetv.o `test -f 'lib/bitsetv.c' || echo '$(srcdir)/'`lib/bitsetv.c
+
+lib/libbison_a-bitsetv.obj: lib/bitsetv.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-bitsetv.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-bitsetv.Tpo -c -o lib/libbison_a-bitsetv.obj `if test -f 'lib/bitsetv.c'; then $(CYGPATH_W) 'lib/bitsetv.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitsetv.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-bitsetv.Tpo lib/$(DEPDIR)/libbison_a-bitsetv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bitsetv.c' object='lib/libbison_a-bitsetv.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-bitsetv.obj `if test -f 'lib/bitsetv.c'; then $(CYGPATH_W) 'lib/bitsetv.c'; else $(CYGPATH_W) '$(srcdir)/lib/bitsetv.c'; fi`
+
+lib/libbison_a-c-ctype.o: lib/c-ctype.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-ctype.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-ctype.Tpo -c -o lib/libbison_a-c-ctype.o `test -f 'lib/c-ctype.c' || echo '$(srcdir)/'`lib/c-ctype.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-ctype.Tpo lib/$(DEPDIR)/libbison_a-c-ctype.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-ctype.c' object='lib/libbison_a-c-ctype.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-ctype.o `test -f 'lib/c-ctype.c' || echo '$(srcdir)/'`lib/c-ctype.c
+
+lib/libbison_a-c-ctype.obj: lib/c-ctype.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-ctype.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-ctype.Tpo -c -o lib/libbison_a-c-ctype.obj `if test -f 'lib/c-ctype.c'; then $(CYGPATH_W) 'lib/c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-ctype.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-ctype.Tpo lib/$(DEPDIR)/libbison_a-c-ctype.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-ctype.c' object='lib/libbison_a-c-ctype.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-ctype.obj `if test -f 'lib/c-ctype.c'; then $(CYGPATH_W) 'lib/c-ctype.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-ctype.c'; fi`
+
+lib/libbison_a-c-strcasecmp.o: lib/c-strcasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-strcasecmp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-strcasecmp.Tpo -c -o lib/libbison_a-c-strcasecmp.o `test -f 'lib/c-strcasecmp.c' || echo '$(srcdir)/'`lib/c-strcasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-strcasecmp.Tpo lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-strcasecmp.c' object='lib/libbison_a-c-strcasecmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-strcasecmp.o `test -f 'lib/c-strcasecmp.c' || echo '$(srcdir)/'`lib/c-strcasecmp.c
+
+lib/libbison_a-c-strcasecmp.obj: lib/c-strcasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-strcasecmp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-strcasecmp.Tpo -c -o lib/libbison_a-c-strcasecmp.obj `if test -f 'lib/c-strcasecmp.c'; then $(CYGPATH_W) 'lib/c-strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-strcasecmp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-strcasecmp.Tpo lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-strcasecmp.c' object='lib/libbison_a-c-strcasecmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-strcasecmp.obj `if test -f 'lib/c-strcasecmp.c'; then $(CYGPATH_W) 'lib/c-strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-strcasecmp.c'; fi`
+
+lib/libbison_a-c-strncasecmp.o: lib/c-strncasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-strncasecmp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-strncasecmp.Tpo -c -o lib/libbison_a-c-strncasecmp.o `test -f 'lib/c-strncasecmp.c' || echo '$(srcdir)/'`lib/c-strncasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-strncasecmp.Tpo lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-strncasecmp.c' object='lib/libbison_a-c-strncasecmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-strncasecmp.o `test -f 'lib/c-strncasecmp.c' || echo '$(srcdir)/'`lib/c-strncasecmp.c
+
+lib/libbison_a-c-strncasecmp.obj: lib/c-strncasecmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-c-strncasecmp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-c-strncasecmp.Tpo -c -o lib/libbison_a-c-strncasecmp.obj `if test -f 'lib/c-strncasecmp.c'; then $(CYGPATH_W) 'lib/c-strncasecmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-strncasecmp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-c-strncasecmp.Tpo lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/c-strncasecmp.c' object='lib/libbison_a-c-strncasecmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-c-strncasecmp.obj `if test -f 'lib/c-strncasecmp.c'; then $(CYGPATH_W) 'lib/c-strncasecmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/c-strncasecmp.c'; fi`
+
+lib/libbison_a-careadlinkat.o: lib/careadlinkat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-careadlinkat.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-careadlinkat.Tpo -c -o lib/libbison_a-careadlinkat.o `test -f 'lib/careadlinkat.c' || echo '$(srcdir)/'`lib/careadlinkat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-careadlinkat.Tpo lib/$(DEPDIR)/libbison_a-careadlinkat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/careadlinkat.c' object='lib/libbison_a-careadlinkat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-careadlinkat.o `test -f 'lib/careadlinkat.c' || echo '$(srcdir)/'`lib/careadlinkat.c
+
+lib/libbison_a-careadlinkat.obj: lib/careadlinkat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-careadlinkat.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-careadlinkat.Tpo -c -o lib/libbison_a-careadlinkat.obj `if test -f 'lib/careadlinkat.c'; then $(CYGPATH_W) 'lib/careadlinkat.c'; else $(CYGPATH_W) '$(srcdir)/lib/careadlinkat.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-careadlinkat.Tpo lib/$(DEPDIR)/libbison_a-careadlinkat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/careadlinkat.c' object='lib/libbison_a-careadlinkat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-careadlinkat.obj `if test -f 'lib/careadlinkat.c'; then $(CYGPATH_W) 'lib/careadlinkat.c'; else $(CYGPATH_W) '$(srcdir)/lib/careadlinkat.c'; fi`
+
+lib/libbison_a-cloexec.o: lib/cloexec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-cloexec.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-cloexec.Tpo -c -o lib/libbison_a-cloexec.o `test -f 'lib/cloexec.c' || echo '$(srcdir)/'`lib/cloexec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-cloexec.Tpo lib/$(DEPDIR)/libbison_a-cloexec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/cloexec.c' object='lib/libbison_a-cloexec.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-cloexec.o `test -f 'lib/cloexec.c' || echo '$(srcdir)/'`lib/cloexec.c
+
+lib/libbison_a-cloexec.obj: lib/cloexec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-cloexec.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-cloexec.Tpo -c -o lib/libbison_a-cloexec.obj `if test -f 'lib/cloexec.c'; then $(CYGPATH_W) 'lib/cloexec.c'; else $(CYGPATH_W) '$(srcdir)/lib/cloexec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-cloexec.Tpo lib/$(DEPDIR)/libbison_a-cloexec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/cloexec.c' object='lib/libbison_a-cloexec.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-cloexec.obj `if test -f 'lib/cloexec.c'; then $(CYGPATH_W) 'lib/cloexec.c'; else $(CYGPATH_W) '$(srcdir)/lib/cloexec.c'; fi`
+
+lib/libbison_a-close-stream.o: lib/close-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-close-stream.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-close-stream.Tpo -c -o lib/libbison_a-close-stream.o `test -f 'lib/close-stream.c' || echo '$(srcdir)/'`lib/close-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-close-stream.Tpo lib/$(DEPDIR)/libbison_a-close-stream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/close-stream.c' object='lib/libbison_a-close-stream.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-close-stream.o `test -f 'lib/close-stream.c' || echo '$(srcdir)/'`lib/close-stream.c
+
+lib/libbison_a-close-stream.obj: lib/close-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-close-stream.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-close-stream.Tpo -c -o lib/libbison_a-close-stream.obj `if test -f 'lib/close-stream.c'; then $(CYGPATH_W) 'lib/close-stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/close-stream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-close-stream.Tpo lib/$(DEPDIR)/libbison_a-close-stream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/close-stream.c' object='lib/libbison_a-close-stream.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-close-stream.obj `if test -f 'lib/close-stream.c'; then $(CYGPATH_W) 'lib/close-stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/close-stream.c'; fi`
+
+lib/libbison_a-closeout.o: lib/closeout.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-closeout.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-closeout.Tpo -c -o lib/libbison_a-closeout.o `test -f 'lib/closeout.c' || echo '$(srcdir)/'`lib/closeout.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-closeout.Tpo lib/$(DEPDIR)/libbison_a-closeout.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/closeout.c' object='lib/libbison_a-closeout.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-closeout.o `test -f 'lib/closeout.c' || echo '$(srcdir)/'`lib/closeout.c
+
+lib/libbison_a-closeout.obj: lib/closeout.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-closeout.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-closeout.Tpo -c -o lib/libbison_a-closeout.obj `if test -f 'lib/closeout.c'; then $(CYGPATH_W) 'lib/closeout.c'; else $(CYGPATH_W) '$(srcdir)/lib/closeout.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-closeout.Tpo lib/$(DEPDIR)/libbison_a-closeout.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/closeout.c' object='lib/libbison_a-closeout.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-closeout.obj `if test -f 'lib/closeout.c'; then $(CYGPATH_W) 'lib/closeout.c'; else $(CYGPATH_W) '$(srcdir)/lib/closeout.c'; fi`
+
+lib/libbison_a-concat-filename.o: lib/concat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-concat-filename.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-concat-filename.Tpo -c -o lib/libbison_a-concat-filename.o `test -f 'lib/concat-filename.c' || echo '$(srcdir)/'`lib/concat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-concat-filename.Tpo lib/$(DEPDIR)/libbison_a-concat-filename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/concat-filename.c' object='lib/libbison_a-concat-filename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-concat-filename.o `test -f 'lib/concat-filename.c' || echo '$(srcdir)/'`lib/concat-filename.c
+
+lib/libbison_a-concat-filename.obj: lib/concat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-concat-filename.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-concat-filename.Tpo -c -o lib/libbison_a-concat-filename.obj `if test -f 'lib/concat-filename.c'; then $(CYGPATH_W) 'lib/concat-filename.c'; else $(CYGPATH_W) '$(srcdir)/lib/concat-filename.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-concat-filename.Tpo lib/$(DEPDIR)/libbison_a-concat-filename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/concat-filename.c' object='lib/libbison_a-concat-filename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-concat-filename.obj `if test -f 'lib/concat-filename.c'; then $(CYGPATH_W) 'lib/concat-filename.c'; else $(CYGPATH_W) '$(srcdir)/lib/concat-filename.c'; fi`
+
+lib/libbison_a-dirname.o: lib/dirname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dirname.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-dirname.Tpo -c -o lib/libbison_a-dirname.o `test -f 'lib/dirname.c' || echo '$(srcdir)/'`lib/dirname.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dirname.Tpo lib/$(DEPDIR)/libbison_a-dirname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dirname.c' object='lib/libbison_a-dirname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dirname.o `test -f 'lib/dirname.c' || echo '$(srcdir)/'`lib/dirname.c
+
+lib/libbison_a-dirname.obj: lib/dirname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dirname.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-dirname.Tpo -c -o lib/libbison_a-dirname.obj `if test -f 'lib/dirname.c'; then $(CYGPATH_W) 'lib/dirname.c'; else $(CYGPATH_W) '$(srcdir)/lib/dirname.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dirname.Tpo lib/$(DEPDIR)/libbison_a-dirname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dirname.c' object='lib/libbison_a-dirname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dirname.obj `if test -f 'lib/dirname.c'; then $(CYGPATH_W) 'lib/dirname.c'; else $(CYGPATH_W) '$(srcdir)/lib/dirname.c'; fi`
+
+lib/libbison_a-basename.o: lib/basename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-basename.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-basename.Tpo -c -o lib/libbison_a-basename.o `test -f 'lib/basename.c' || echo '$(srcdir)/'`lib/basename.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-basename.Tpo lib/$(DEPDIR)/libbison_a-basename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/basename.c' object='lib/libbison_a-basename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-basename.o `test -f 'lib/basename.c' || echo '$(srcdir)/'`lib/basename.c
+
+lib/libbison_a-basename.obj: lib/basename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-basename.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-basename.Tpo -c -o lib/libbison_a-basename.obj `if test -f 'lib/basename.c'; then $(CYGPATH_W) 'lib/basename.c'; else $(CYGPATH_W) '$(srcdir)/lib/basename.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-basename.Tpo lib/$(DEPDIR)/libbison_a-basename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/basename.c' object='lib/libbison_a-basename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-basename.obj `if test -f 'lib/basename.c'; then $(CYGPATH_W) 'lib/basename.c'; else $(CYGPATH_W) '$(srcdir)/lib/basename.c'; fi`
+
+lib/libbison_a-dirname-lgpl.o: lib/dirname-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dirname-lgpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-dirname-lgpl.Tpo -c -o lib/libbison_a-dirname-lgpl.o `test -f 'lib/dirname-lgpl.c' || echo '$(srcdir)/'`lib/dirname-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dirname-lgpl.Tpo lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dirname-lgpl.c' object='lib/libbison_a-dirname-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dirname-lgpl.o `test -f 'lib/dirname-lgpl.c' || echo '$(srcdir)/'`lib/dirname-lgpl.c
+
+lib/libbison_a-dirname-lgpl.obj: lib/dirname-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dirname-lgpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-dirname-lgpl.Tpo -c -o lib/libbison_a-dirname-lgpl.obj `if test -f 'lib/dirname-lgpl.c'; then $(CYGPATH_W) 'lib/dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/dirname-lgpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dirname-lgpl.Tpo lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dirname-lgpl.c' object='lib/libbison_a-dirname-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dirname-lgpl.obj `if test -f 'lib/dirname-lgpl.c'; then $(CYGPATH_W) 'lib/dirname-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/dirname-lgpl.c'; fi`
+
+lib/libbison_a-basename-lgpl.o: lib/basename-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-basename-lgpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-basename-lgpl.Tpo -c -o lib/libbison_a-basename-lgpl.o `test -f 'lib/basename-lgpl.c' || echo '$(srcdir)/'`lib/basename-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-basename-lgpl.Tpo lib/$(DEPDIR)/libbison_a-basename-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/basename-lgpl.c' object='lib/libbison_a-basename-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-basename-lgpl.o `test -f 'lib/basename-lgpl.c' || echo '$(srcdir)/'`lib/basename-lgpl.c
+
+lib/libbison_a-basename-lgpl.obj: lib/basename-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-basename-lgpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-basename-lgpl.Tpo -c -o lib/libbison_a-basename-lgpl.obj `if test -f 'lib/basename-lgpl.c'; then $(CYGPATH_W) 'lib/basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/basename-lgpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-basename-lgpl.Tpo lib/$(DEPDIR)/libbison_a-basename-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/basename-lgpl.c' object='lib/libbison_a-basename-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-basename-lgpl.obj `if test -f 'lib/basename-lgpl.c'; then $(CYGPATH_W) 'lib/basename-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/basename-lgpl.c'; fi`
+
+lib/libbison_a-stripslash.o: lib/stripslash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stripslash.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-stripslash.Tpo -c -o lib/libbison_a-stripslash.o `test -f 'lib/stripslash.c' || echo '$(srcdir)/'`lib/stripslash.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stripslash.Tpo lib/$(DEPDIR)/libbison_a-stripslash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stripslash.c' object='lib/libbison_a-stripslash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stripslash.o `test -f 'lib/stripslash.c' || echo '$(srcdir)/'`lib/stripslash.c
+
+lib/libbison_a-stripslash.obj: lib/stripslash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stripslash.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-stripslash.Tpo -c -o lib/libbison_a-stripslash.obj `if test -f 'lib/stripslash.c'; then $(CYGPATH_W) 'lib/stripslash.c'; else $(CYGPATH_W) '$(srcdir)/lib/stripslash.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stripslash.Tpo lib/$(DEPDIR)/libbison_a-stripslash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stripslash.c' object='lib/libbison_a-stripslash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stripslash.obj `if test -f 'lib/stripslash.c'; then $(CYGPATH_W) 'lib/stripslash.c'; else $(CYGPATH_W) '$(srcdir)/lib/stripslash.c'; fi`
+
+lib/libbison_a-exitfail.o: lib/exitfail.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-exitfail.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-exitfail.Tpo -c -o lib/libbison_a-exitfail.o `test -f 'lib/exitfail.c' || echo '$(srcdir)/'`lib/exitfail.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-exitfail.Tpo lib/$(DEPDIR)/libbison_a-exitfail.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/exitfail.c' object='lib/libbison_a-exitfail.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-exitfail.o `test -f 'lib/exitfail.c' || echo '$(srcdir)/'`lib/exitfail.c
+
+lib/libbison_a-exitfail.obj: lib/exitfail.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-exitfail.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-exitfail.Tpo -c -o lib/libbison_a-exitfail.obj `if test -f 'lib/exitfail.c'; then $(CYGPATH_W) 'lib/exitfail.c'; else $(CYGPATH_W) '$(srcdir)/lib/exitfail.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-exitfail.Tpo lib/$(DEPDIR)/libbison_a-exitfail.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/exitfail.c' object='lib/libbison_a-exitfail.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-exitfail.obj `if test -f 'lib/exitfail.c'; then $(CYGPATH_W) 'lib/exitfail.c'; else $(CYGPATH_W) '$(srcdir)/lib/exitfail.c'; fi`
+
+lib/libbison_a-fatal-signal.o: lib/fatal-signal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fatal-signal.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fatal-signal.Tpo -c -o lib/libbison_a-fatal-signal.o `test -f 'lib/fatal-signal.c' || echo '$(srcdir)/'`lib/fatal-signal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fatal-signal.Tpo lib/$(DEPDIR)/libbison_a-fatal-signal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fatal-signal.c' object='lib/libbison_a-fatal-signal.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fatal-signal.o `test -f 'lib/fatal-signal.c' || echo '$(srcdir)/'`lib/fatal-signal.c
+
+lib/libbison_a-fatal-signal.obj: lib/fatal-signal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fatal-signal.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fatal-signal.Tpo -c -o lib/libbison_a-fatal-signal.obj `if test -f 'lib/fatal-signal.c'; then $(CYGPATH_W) 'lib/fatal-signal.c'; else $(CYGPATH_W) '$(srcdir)/lib/fatal-signal.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fatal-signal.Tpo lib/$(DEPDIR)/libbison_a-fatal-signal.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fatal-signal.c' object='lib/libbison_a-fatal-signal.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fatal-signal.obj `if test -f 'lib/fatal-signal.c'; then $(CYGPATH_W) 'lib/fatal-signal.c'; else $(CYGPATH_W) '$(srcdir)/lib/fatal-signal.c'; fi`
+
+lib/libbison_a-fd-hook.o: lib/fd-hook.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-hook.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-hook.Tpo -c -o lib/libbison_a-fd-hook.o `test -f 'lib/fd-hook.c' || echo '$(srcdir)/'`lib/fd-hook.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-hook.Tpo lib/$(DEPDIR)/libbison_a-fd-hook.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-hook.c' object='lib/libbison_a-fd-hook.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-hook.o `test -f 'lib/fd-hook.c' || echo '$(srcdir)/'`lib/fd-hook.c
+
+lib/libbison_a-fd-hook.obj: lib/fd-hook.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-hook.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-hook.Tpo -c -o lib/libbison_a-fd-hook.obj `if test -f 'lib/fd-hook.c'; then $(CYGPATH_W) 'lib/fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-hook.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-hook.Tpo lib/$(DEPDIR)/libbison_a-fd-hook.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-hook.c' object='lib/libbison_a-fd-hook.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-hook.obj `if test -f 'lib/fd-hook.c'; then $(CYGPATH_W) 'lib/fd-hook.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-hook.c'; fi`
+
+lib/libbison_a-fd-safer-flag.o: lib/fd-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-safer-flag.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-safer-flag.Tpo -c -o lib/libbison_a-fd-safer-flag.o `test -f 'lib/fd-safer-flag.c' || echo '$(srcdir)/'`lib/fd-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-safer-flag.Tpo lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-safer-flag.c' object='lib/libbison_a-fd-safer-flag.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-safer-flag.o `test -f 'lib/fd-safer-flag.c' || echo '$(srcdir)/'`lib/fd-safer-flag.c
+
+lib/libbison_a-fd-safer-flag.obj: lib/fd-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-safer-flag.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-safer-flag.Tpo -c -o lib/libbison_a-fd-safer-flag.obj `if test -f 'lib/fd-safer-flag.c'; then $(CYGPATH_W) 'lib/fd-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-safer-flag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-safer-flag.Tpo lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-safer-flag.c' object='lib/libbison_a-fd-safer-flag.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-safer-flag.obj `if test -f 'lib/fd-safer-flag.c'; then $(CYGPATH_W) 'lib/fd-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-safer-flag.c'; fi`
+
+lib/libbison_a-dup-safer-flag.o: lib/dup-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup-safer-flag.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup-safer-flag.Tpo -c -o lib/libbison_a-dup-safer-flag.o `test -f 'lib/dup-safer-flag.c' || echo '$(srcdir)/'`lib/dup-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup-safer-flag.Tpo lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup-safer-flag.c' object='lib/libbison_a-dup-safer-flag.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup-safer-flag.o `test -f 'lib/dup-safer-flag.c' || echo '$(srcdir)/'`lib/dup-safer-flag.c
+
+lib/libbison_a-dup-safer-flag.obj: lib/dup-safer-flag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup-safer-flag.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup-safer-flag.Tpo -c -o lib/libbison_a-dup-safer-flag.obj `if test -f 'lib/dup-safer-flag.c'; then $(CYGPATH_W) 'lib/dup-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup-safer-flag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup-safer-flag.Tpo lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup-safer-flag.c' object='lib/libbison_a-dup-safer-flag.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup-safer-flag.obj `if test -f 'lib/dup-safer-flag.c'; then $(CYGPATH_W) 'lib/dup-safer-flag.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup-safer-flag.c'; fi`
+
+lib/libbison_a-fopen-safer.o: lib/fopen-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fopen-safer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fopen-safer.Tpo -c -o lib/libbison_a-fopen-safer.o `test -f 'lib/fopen-safer.c' || echo '$(srcdir)/'`lib/fopen-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fopen-safer.Tpo lib/$(DEPDIR)/libbison_a-fopen-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fopen-safer.c' object='lib/libbison_a-fopen-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fopen-safer.o `test -f 'lib/fopen-safer.c' || echo '$(srcdir)/'`lib/fopen-safer.c
+
+lib/libbison_a-fopen-safer.obj: lib/fopen-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fopen-safer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fopen-safer.Tpo -c -o lib/libbison_a-fopen-safer.obj `if test -f 'lib/fopen-safer.c'; then $(CYGPATH_W) 'lib/fopen-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/fopen-safer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fopen-safer.Tpo lib/$(DEPDIR)/libbison_a-fopen-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fopen-safer.c' object='lib/libbison_a-fopen-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fopen-safer.obj `if test -f 'lib/fopen-safer.c'; then $(CYGPATH_W) 'lib/fopen-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/fopen-safer.c'; fi`
+
+lib/libbison_a-fstrcmp.o: lib/fstrcmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fstrcmp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fstrcmp.Tpo -c -o lib/libbison_a-fstrcmp.o `test -f 'lib/fstrcmp.c' || echo '$(srcdir)/'`lib/fstrcmp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fstrcmp.Tpo lib/$(DEPDIR)/libbison_a-fstrcmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fstrcmp.c' object='lib/libbison_a-fstrcmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fstrcmp.o `test -f 'lib/fstrcmp.c' || echo '$(srcdir)/'`lib/fstrcmp.c
+
+lib/libbison_a-fstrcmp.obj: lib/fstrcmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fstrcmp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fstrcmp.Tpo -c -o lib/libbison_a-fstrcmp.obj `if test -f 'lib/fstrcmp.c'; then $(CYGPATH_W) 'lib/fstrcmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/fstrcmp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fstrcmp.Tpo lib/$(DEPDIR)/libbison_a-fstrcmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fstrcmp.c' object='lib/libbison_a-fstrcmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fstrcmp.obj `if test -f 'lib/fstrcmp.c'; then $(CYGPATH_W) 'lib/fstrcmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/fstrcmp.c'; fi`
+
+lib/libbison_a-gethrxtime.o: lib/gethrxtime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gethrxtime.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gethrxtime.Tpo -c -o lib/libbison_a-gethrxtime.o `test -f 'lib/gethrxtime.c' || echo '$(srcdir)/'`lib/gethrxtime.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gethrxtime.Tpo lib/$(DEPDIR)/libbison_a-gethrxtime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gethrxtime.c' object='lib/libbison_a-gethrxtime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gethrxtime.o `test -f 'lib/gethrxtime.c' || echo '$(srcdir)/'`lib/gethrxtime.c
+
+lib/libbison_a-gethrxtime.obj: lib/gethrxtime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gethrxtime.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gethrxtime.Tpo -c -o lib/libbison_a-gethrxtime.obj `if test -f 'lib/gethrxtime.c'; then $(CYGPATH_W) 'lib/gethrxtime.c'; else $(CYGPATH_W) '$(srcdir)/lib/gethrxtime.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gethrxtime.Tpo lib/$(DEPDIR)/libbison_a-gethrxtime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gethrxtime.c' object='lib/libbison_a-gethrxtime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gethrxtime.obj `if test -f 'lib/gethrxtime.c'; then $(CYGPATH_W) 'lib/gethrxtime.c'; else $(CYGPATH_W) '$(srcdir)/lib/gethrxtime.c'; fi`
+
+lib/libbison_a-xtime.o: lib/xtime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xtime.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xtime.Tpo -c -o lib/libbison_a-xtime.o `test -f 'lib/xtime.c' || echo '$(srcdir)/'`lib/xtime.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xtime.Tpo lib/$(DEPDIR)/libbison_a-xtime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xtime.c' object='lib/libbison_a-xtime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xtime.o `test -f 'lib/xtime.c' || echo '$(srcdir)/'`lib/xtime.c
+
+lib/libbison_a-xtime.obj: lib/xtime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xtime.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xtime.Tpo -c -o lib/libbison_a-xtime.obj `if test -f 'lib/xtime.c'; then $(CYGPATH_W) 'lib/xtime.c'; else $(CYGPATH_W) '$(srcdir)/lib/xtime.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xtime.Tpo lib/$(DEPDIR)/libbison_a-xtime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xtime.c' object='lib/libbison_a-xtime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xtime.obj `if test -f 'lib/xtime.c'; then $(CYGPATH_W) 'lib/xtime.c'; else $(CYGPATH_W) '$(srcdir)/lib/xtime.c'; fi`
+
+lib/libbison_a-getprogname.o: lib/getprogname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getprogname.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-getprogname.Tpo -c -o lib/libbison_a-getprogname.o `test -f 'lib/getprogname.c' || echo '$(srcdir)/'`lib/getprogname.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getprogname.Tpo lib/$(DEPDIR)/libbison_a-getprogname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getprogname.c' object='lib/libbison_a-getprogname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getprogname.o `test -f 'lib/getprogname.c' || echo '$(srcdir)/'`lib/getprogname.c
+
+lib/libbison_a-getprogname.obj: lib/getprogname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getprogname.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-getprogname.Tpo -c -o lib/libbison_a-getprogname.obj `if test -f 'lib/getprogname.c'; then $(CYGPATH_W) 'lib/getprogname.c'; else $(CYGPATH_W) '$(srcdir)/lib/getprogname.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getprogname.Tpo lib/$(DEPDIR)/libbison_a-getprogname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getprogname.c' object='lib/libbison_a-getprogname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getprogname.obj `if test -f 'lib/getprogname.c'; then $(CYGPATH_W) 'lib/getprogname.c'; else $(CYGPATH_W) '$(srcdir)/lib/getprogname.c'; fi`
+
+lib/libbison_a-gettime.o: lib/gettime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gettime.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gettime.Tpo -c -o lib/libbison_a-gettime.o `test -f 'lib/gettime.c' || echo '$(srcdir)/'`lib/gettime.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gettime.Tpo lib/$(DEPDIR)/libbison_a-gettime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gettime.c' object='lib/libbison_a-gettime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gettime.o `test -f 'lib/gettime.c' || echo '$(srcdir)/'`lib/gettime.c
+
+lib/libbison_a-gettime.obj: lib/gettime.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gettime.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gettime.Tpo -c -o lib/libbison_a-gettime.obj `if test -f 'lib/gettime.c'; then $(CYGPATH_W) 'lib/gettime.c'; else $(CYGPATH_W) '$(srcdir)/lib/gettime.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gettime.Tpo lib/$(DEPDIR)/libbison_a-gettime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gettime.c' object='lib/libbison_a-gettime.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gettime.obj `if test -f 'lib/gettime.c'; then $(CYGPATH_W) 'lib/gettime.c'; else $(CYGPATH_W) '$(srcdir)/lib/gettime.c'; fi`
+
+lib/libbison_a-hard-locale.o: lib/hard-locale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-hard-locale.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-hard-locale.Tpo -c -o lib/libbison_a-hard-locale.o `test -f 'lib/hard-locale.c' || echo '$(srcdir)/'`lib/hard-locale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-hard-locale.Tpo lib/$(DEPDIR)/libbison_a-hard-locale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hard-locale.c' object='lib/libbison_a-hard-locale.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-hard-locale.o `test -f 'lib/hard-locale.c' || echo '$(srcdir)/'`lib/hard-locale.c
+
+lib/libbison_a-hard-locale.obj: lib/hard-locale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-hard-locale.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-hard-locale.Tpo -c -o lib/libbison_a-hard-locale.obj `if test -f 'lib/hard-locale.c'; then $(CYGPATH_W) 'lib/hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/lib/hard-locale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-hard-locale.Tpo lib/$(DEPDIR)/libbison_a-hard-locale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hard-locale.c' object='lib/libbison_a-hard-locale.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-hard-locale.obj `if test -f 'lib/hard-locale.c'; then $(CYGPATH_W) 'lib/hard-locale.c'; else $(CYGPATH_W) '$(srcdir)/lib/hard-locale.c'; fi`
+
+lib/libbison_a-hash.o: lib/hash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-hash.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-hash.Tpo -c -o lib/libbison_a-hash.o `test -f 'lib/hash.c' || echo '$(srcdir)/'`lib/hash.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-hash.Tpo lib/$(DEPDIR)/libbison_a-hash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hash.c' object='lib/libbison_a-hash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-hash.o `test -f 'lib/hash.c' || echo '$(srcdir)/'`lib/hash.c
+
+lib/libbison_a-hash.obj: lib/hash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-hash.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-hash.Tpo -c -o lib/libbison_a-hash.obj `if test -f 'lib/hash.c'; then $(CYGPATH_W) 'lib/hash.c'; else $(CYGPATH_W) '$(srcdir)/lib/hash.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-hash.Tpo lib/$(DEPDIR)/libbison_a-hash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hash.c' object='lib/libbison_a-hash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-hash.obj `if test -f 'lib/hash.c'; then $(CYGPATH_W) 'lib/hash.c'; else $(CYGPATH_W) '$(srcdir)/lib/hash.c'; fi`
+
+lib/libbison_a-gl_list.o: lib/gl_list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_list.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_list.Tpo -c -o lib/libbison_a-gl_list.o `test -f 'lib/gl_list.c' || echo '$(srcdir)/'`lib/gl_list.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_list.Tpo lib/$(DEPDIR)/libbison_a-gl_list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_list.c' object='lib/libbison_a-gl_list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_list.o `test -f 'lib/gl_list.c' || echo '$(srcdir)/'`lib/gl_list.c
+
+lib/libbison_a-gl_list.obj: lib/gl_list.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_list.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_list.Tpo -c -o lib/libbison_a-gl_list.obj `if test -f 'lib/gl_list.c'; then $(CYGPATH_W) 'lib/gl_list.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_list.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_list.Tpo lib/$(DEPDIR)/libbison_a-gl_list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_list.c' object='lib/libbison_a-gl_list.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_list.obj `if test -f 'lib/gl_list.c'; then $(CYGPATH_W) 'lib/gl_list.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_list.c'; fi`
+
+lib/libbison_a-localcharset.o: lib/localcharset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-localcharset.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-localcharset.Tpo -c -o lib/libbison_a-localcharset.o `test -f 'lib/localcharset.c' || echo '$(srcdir)/'`lib/localcharset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-localcharset.Tpo lib/$(DEPDIR)/libbison_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/localcharset.c' object='lib/libbison_a-localcharset.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-localcharset.o `test -f 'lib/localcharset.c' || echo '$(srcdir)/'`lib/localcharset.c
+
+lib/libbison_a-localcharset.obj: lib/localcharset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-localcharset.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-localcharset.Tpo -c -o lib/libbison_a-localcharset.obj `if test -f 'lib/localcharset.c'; then $(CYGPATH_W) 'lib/localcharset.c'; else $(CYGPATH_W) '$(srcdir)/lib/localcharset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-localcharset.Tpo lib/$(DEPDIR)/libbison_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/localcharset.c' object='lib/libbison_a-localcharset.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-localcharset.obj `if test -f 'lib/localcharset.c'; then $(CYGPATH_W) 'lib/localcharset.c'; else $(CYGPATH_W) '$(srcdir)/lib/localcharset.c'; fi`
+
+lib/glthread/libbison_a-lock.o: lib/glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-lock.o -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-lock.Tpo -c -o lib/glthread/libbison_a-lock.o `test -f 'lib/glthread/lock.c' || echo '$(srcdir)/'`lib/glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-lock.Tpo lib/glthread/$(DEPDIR)/libbison_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/lock.c' object='lib/glthread/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-lock.o `test -f 'lib/glthread/lock.c' || echo '$(srcdir)/'`lib/glthread/lock.c
+
+lib/glthread/libbison_a-lock.obj: lib/glthread/lock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-lock.obj -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-lock.Tpo -c -o lib/glthread/libbison_a-lock.obj `if test -f 'lib/glthread/lock.c'; then $(CYGPATH_W) 'lib/glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/lock.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-lock.Tpo lib/glthread/$(DEPDIR)/libbison_a-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/lock.c' object='lib/glthread/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-lock.obj `if test -f 'lib/glthread/lock.c'; then $(CYGPATH_W) 'lib/glthread/lock.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/lock.c'; fi`
+
+lib/libbison_a-malloca.o: lib/malloca.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-malloca.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-malloca.Tpo -c -o lib/libbison_a-malloca.o `test -f 'lib/malloca.c' || echo '$(srcdir)/'`lib/malloca.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-malloca.Tpo lib/$(DEPDIR)/libbison_a-malloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/malloca.c' object='lib/libbison_a-malloca.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-malloca.o `test -f 'lib/malloca.c' || echo '$(srcdir)/'`lib/malloca.c
+
+lib/libbison_a-malloca.obj: lib/malloca.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-malloca.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-malloca.Tpo -c -o lib/libbison_a-malloca.obj `if test -f 'lib/malloca.c'; then $(CYGPATH_W) 'lib/malloca.c'; else $(CYGPATH_W) '$(srcdir)/lib/malloca.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-malloca.Tpo lib/$(DEPDIR)/libbison_a-malloca.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/malloca.c' object='lib/libbison_a-malloca.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-malloca.obj `if test -f 'lib/malloca.c'; then $(CYGPATH_W) 'lib/malloca.c'; else $(CYGPATH_W) '$(srcdir)/lib/malloca.c'; fi`
+
+lib/libbison_a-math.o: lib/math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-math.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-math.Tpo -c -o lib/libbison_a-math.o `test -f 'lib/math.c' || echo '$(srcdir)/'`lib/math.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-math.Tpo lib/$(DEPDIR)/libbison_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/math.c' object='lib/libbison_a-math.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-math.o `test -f 'lib/math.c' || echo '$(srcdir)/'`lib/math.c
+
+lib/libbison_a-math.obj: lib/math.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-math.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-math.Tpo -c -o lib/libbison_a-math.obj `if test -f 'lib/math.c'; then $(CYGPATH_W) 'lib/math.c'; else $(CYGPATH_W) '$(srcdir)/lib/math.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-math.Tpo lib/$(DEPDIR)/libbison_a-math.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/math.c' object='lib/libbison_a-math.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-math.obj `if test -f 'lib/math.c'; then $(CYGPATH_W) 'lib/math.c'; else $(CYGPATH_W) '$(srcdir)/lib/math.c'; fi`
+
+lib/libbison_a-mbchar.o: lib/mbchar.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbchar.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbchar.Tpo -c -o lib/libbison_a-mbchar.o `test -f 'lib/mbchar.c' || echo '$(srcdir)/'`lib/mbchar.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbchar.Tpo lib/$(DEPDIR)/libbison_a-mbchar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbchar.c' object='lib/libbison_a-mbchar.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbchar.o `test -f 'lib/mbchar.c' || echo '$(srcdir)/'`lib/mbchar.c
+
+lib/libbison_a-mbchar.obj: lib/mbchar.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbchar.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbchar.Tpo -c -o lib/libbison_a-mbchar.obj `if test -f 'lib/mbchar.c'; then $(CYGPATH_W) 'lib/mbchar.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbchar.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbchar.Tpo lib/$(DEPDIR)/libbison_a-mbchar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbchar.c' object='lib/libbison_a-mbchar.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbchar.obj `if test -f 'lib/mbchar.c'; then $(CYGPATH_W) 'lib/mbchar.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbchar.c'; fi`
+
+lib/libbison_a-mbfile.o: lib/mbfile.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbfile.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbfile.Tpo -c -o lib/libbison_a-mbfile.o `test -f 'lib/mbfile.c' || echo '$(srcdir)/'`lib/mbfile.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbfile.Tpo lib/$(DEPDIR)/libbison_a-mbfile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbfile.c' object='lib/libbison_a-mbfile.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbfile.o `test -f 'lib/mbfile.c' || echo '$(srcdir)/'`lib/mbfile.c
+
+lib/libbison_a-mbfile.obj: lib/mbfile.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbfile.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbfile.Tpo -c -o lib/libbison_a-mbfile.obj `if test -f 'lib/mbfile.c'; then $(CYGPATH_W) 'lib/mbfile.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbfile.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbfile.Tpo lib/$(DEPDIR)/libbison_a-mbfile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbfile.c' object='lib/libbison_a-mbfile.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbfile.obj `if test -f 'lib/mbfile.c'; then $(CYGPATH_W) 'lib/mbfile.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbfile.c'; fi`
+
+lib/libbison_a-mbswidth.o: lib/mbswidth.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbswidth.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbswidth.Tpo -c -o lib/libbison_a-mbswidth.o `test -f 'lib/mbswidth.c' || echo '$(srcdir)/'`lib/mbswidth.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbswidth.Tpo lib/$(DEPDIR)/libbison_a-mbswidth.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbswidth.c' object='lib/libbison_a-mbswidth.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbswidth.o `test -f 'lib/mbswidth.c' || echo '$(srcdir)/'`lib/mbswidth.c
+
+lib/libbison_a-mbswidth.obj: lib/mbswidth.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbswidth.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbswidth.Tpo -c -o lib/libbison_a-mbswidth.obj `if test -f 'lib/mbswidth.c'; then $(CYGPATH_W) 'lib/mbswidth.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbswidth.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbswidth.Tpo lib/$(DEPDIR)/libbison_a-mbswidth.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbswidth.c' object='lib/libbison_a-mbswidth.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbswidth.obj `if test -f 'lib/mbswidth.c'; then $(CYGPATH_W) 'lib/mbswidth.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbswidth.c'; fi`
+
+lib/libbison_a-pipe2.o: lib/pipe2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe2.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe2.Tpo -c -o lib/libbison_a-pipe2.o `test -f 'lib/pipe2.c' || echo '$(srcdir)/'`lib/pipe2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe2.Tpo lib/$(DEPDIR)/libbison_a-pipe2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe2.c' object='lib/libbison_a-pipe2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe2.o `test -f 'lib/pipe2.c' || echo '$(srcdir)/'`lib/pipe2.c
+
+lib/libbison_a-pipe2.obj: lib/pipe2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe2.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe2.Tpo -c -o lib/libbison_a-pipe2.obj `if test -f 'lib/pipe2.c'; then $(CYGPATH_W) 'lib/pipe2.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe2.Tpo lib/$(DEPDIR)/libbison_a-pipe2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe2.c' object='lib/libbison_a-pipe2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe2.obj `if test -f 'lib/pipe2.c'; then $(CYGPATH_W) 'lib/pipe2.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe2.c'; fi`
+
+lib/libbison_a-pipe2-safer.o: lib/pipe2-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe2-safer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe2-safer.Tpo -c -o lib/libbison_a-pipe2-safer.o `test -f 'lib/pipe2-safer.c' || echo '$(srcdir)/'`lib/pipe2-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe2-safer.Tpo lib/$(DEPDIR)/libbison_a-pipe2-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe2-safer.c' object='lib/libbison_a-pipe2-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe2-safer.o `test -f 'lib/pipe2-safer.c' || echo '$(srcdir)/'`lib/pipe2-safer.c
+
+lib/libbison_a-pipe2-safer.obj: lib/pipe2-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe2-safer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe2-safer.Tpo -c -o lib/libbison_a-pipe2-safer.obj `if test -f 'lib/pipe2-safer.c'; then $(CYGPATH_W) 'lib/pipe2-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe2-safer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe2-safer.Tpo lib/$(DEPDIR)/libbison_a-pipe2-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe2-safer.c' object='lib/libbison_a-pipe2-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe2-safer.obj `if test -f 'lib/pipe2-safer.c'; then $(CYGPATH_W) 'lib/pipe2-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe2-safer.c'; fi`
+
+lib/libbison_a-printf-frexp.o: lib/printf-frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-frexp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-frexp.Tpo -c -o lib/libbison_a-printf-frexp.o `test -f 'lib/printf-frexp.c' || echo '$(srcdir)/'`lib/printf-frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-frexp.Tpo lib/$(DEPDIR)/libbison_a-printf-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-frexp.c' object='lib/libbison_a-printf-frexp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-frexp.o `test -f 'lib/printf-frexp.c' || echo '$(srcdir)/'`lib/printf-frexp.c
+
+lib/libbison_a-printf-frexp.obj: lib/printf-frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-frexp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-frexp.Tpo -c -o lib/libbison_a-printf-frexp.obj `if test -f 'lib/printf-frexp.c'; then $(CYGPATH_W) 'lib/printf-frexp.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-frexp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-frexp.Tpo lib/$(DEPDIR)/libbison_a-printf-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-frexp.c' object='lib/libbison_a-printf-frexp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-frexp.obj `if test -f 'lib/printf-frexp.c'; then $(CYGPATH_W) 'lib/printf-frexp.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-frexp.c'; fi`
+
+lib/libbison_a-printf-frexpl.o: lib/printf-frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-frexpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-frexpl.Tpo -c -o lib/libbison_a-printf-frexpl.o `test -f 'lib/printf-frexpl.c' || echo '$(srcdir)/'`lib/printf-frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-frexpl.Tpo lib/$(DEPDIR)/libbison_a-printf-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-frexpl.c' object='lib/libbison_a-printf-frexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-frexpl.o `test -f 'lib/printf-frexpl.c' || echo '$(srcdir)/'`lib/printf-frexpl.c
+
+lib/libbison_a-printf-frexpl.obj: lib/printf-frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-frexpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-frexpl.Tpo -c -o lib/libbison_a-printf-frexpl.obj `if test -f 'lib/printf-frexpl.c'; then $(CYGPATH_W) 'lib/printf-frexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-frexpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-frexpl.Tpo lib/$(DEPDIR)/libbison_a-printf-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-frexpl.c' object='lib/libbison_a-printf-frexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-frexpl.obj `if test -f 'lib/printf-frexpl.c'; then $(CYGPATH_W) 'lib/printf-frexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-frexpl.c'; fi`
+
+lib/libbison_a-progname.o: lib/progname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-progname.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-progname.Tpo -c -o lib/libbison_a-progname.o `test -f 'lib/progname.c' || echo '$(srcdir)/'`lib/progname.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-progname.Tpo lib/$(DEPDIR)/libbison_a-progname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/progname.c' object='lib/libbison_a-progname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-progname.o `test -f 'lib/progname.c' || echo '$(srcdir)/'`lib/progname.c
+
+lib/libbison_a-progname.obj: lib/progname.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-progname.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-progname.Tpo -c -o lib/libbison_a-progname.obj `if test -f 'lib/progname.c'; then $(CYGPATH_W) 'lib/progname.c'; else $(CYGPATH_W) '$(srcdir)/lib/progname.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-progname.Tpo lib/$(DEPDIR)/libbison_a-progname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/progname.c' object='lib/libbison_a-progname.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-progname.obj `if test -f 'lib/progname.c'; then $(CYGPATH_W) 'lib/progname.c'; else $(CYGPATH_W) '$(srcdir)/lib/progname.c'; fi`
+
+lib/libbison_a-quotearg.o: lib/quotearg.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-quotearg.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-quotearg.Tpo -c -o lib/libbison_a-quotearg.o `test -f 'lib/quotearg.c' || echo '$(srcdir)/'`lib/quotearg.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-quotearg.Tpo lib/$(DEPDIR)/libbison_a-quotearg.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/quotearg.c' object='lib/libbison_a-quotearg.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-quotearg.o `test -f 'lib/quotearg.c' || echo '$(srcdir)/'`lib/quotearg.c
+
+lib/libbison_a-quotearg.obj: lib/quotearg.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-quotearg.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-quotearg.Tpo -c -o lib/libbison_a-quotearg.obj `if test -f 'lib/quotearg.c'; then $(CYGPATH_W) 'lib/quotearg.c'; else $(CYGPATH_W) '$(srcdir)/lib/quotearg.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-quotearg.Tpo lib/$(DEPDIR)/libbison_a-quotearg.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/quotearg.c' object='lib/libbison_a-quotearg.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-quotearg.obj `if test -f 'lib/quotearg.c'; then $(CYGPATH_W) 'lib/quotearg.c'; else $(CYGPATH_W) '$(srcdir)/lib/quotearg.c'; fi`
+
+lib/libbison_a-sig-handler.o: lib/sig-handler.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sig-handler.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-sig-handler.Tpo -c -o lib/libbison_a-sig-handler.o `test -f 'lib/sig-handler.c' || echo '$(srcdir)/'`lib/sig-handler.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sig-handler.Tpo lib/$(DEPDIR)/libbison_a-sig-handler.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sig-handler.c' object='lib/libbison_a-sig-handler.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sig-handler.o `test -f 'lib/sig-handler.c' || echo '$(srcdir)/'`lib/sig-handler.c
+
+lib/libbison_a-sig-handler.obj: lib/sig-handler.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sig-handler.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-sig-handler.Tpo -c -o lib/libbison_a-sig-handler.obj `if test -f 'lib/sig-handler.c'; then $(CYGPATH_W) 'lib/sig-handler.c'; else $(CYGPATH_W) '$(srcdir)/lib/sig-handler.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sig-handler.Tpo lib/$(DEPDIR)/libbison_a-sig-handler.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sig-handler.c' object='lib/libbison_a-sig-handler.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sig-handler.obj `if test -f 'lib/sig-handler.c'; then $(CYGPATH_W) 'lib/sig-handler.c'; else $(CYGPATH_W) '$(srcdir)/lib/sig-handler.c'; fi`
+
+lib/libbison_a-spawn-pipe.o: lib/spawn-pipe.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn-pipe.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn-pipe.Tpo -c -o lib/libbison_a-spawn-pipe.o `test -f 'lib/spawn-pipe.c' || echo '$(srcdir)/'`lib/spawn-pipe.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn-pipe.Tpo lib/$(DEPDIR)/libbison_a-spawn-pipe.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn-pipe.c' object='lib/libbison_a-spawn-pipe.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn-pipe.o `test -f 'lib/spawn-pipe.c' || echo '$(srcdir)/'`lib/spawn-pipe.c
+
+lib/libbison_a-spawn-pipe.obj: lib/spawn-pipe.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn-pipe.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn-pipe.Tpo -c -o lib/libbison_a-spawn-pipe.obj `if test -f 'lib/spawn-pipe.c'; then $(CYGPATH_W) 'lib/spawn-pipe.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn-pipe.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn-pipe.Tpo lib/$(DEPDIR)/libbison_a-spawn-pipe.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn-pipe.c' object='lib/libbison_a-spawn-pipe.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn-pipe.obj `if test -f 'lib/spawn-pipe.c'; then $(CYGPATH_W) 'lib/spawn-pipe.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn-pipe.c'; fi`
+
+lib/libbison_a-stat-time.o: lib/stat-time.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat-time.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat-time.Tpo -c -o lib/libbison_a-stat-time.o `test -f 'lib/stat-time.c' || echo '$(srcdir)/'`lib/stat-time.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat-time.Tpo lib/$(DEPDIR)/libbison_a-stat-time.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat-time.c' object='lib/libbison_a-stat-time.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat-time.o `test -f 'lib/stat-time.c' || echo '$(srcdir)/'`lib/stat-time.c
+
+lib/libbison_a-stat-time.obj: lib/stat-time.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat-time.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat-time.Tpo -c -o lib/libbison_a-stat-time.obj `if test -f 'lib/stat-time.c'; then $(CYGPATH_W) 'lib/stat-time.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat-time.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat-time.Tpo lib/$(DEPDIR)/libbison_a-stat-time.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat-time.c' object='lib/libbison_a-stat-time.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat-time.obj `if test -f 'lib/stat-time.c'; then $(CYGPATH_W) 'lib/stat-time.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat-time.c'; fi`
+
+lib/glthread/libbison_a-threadlib.o: lib/glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-threadlib.o -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-threadlib.Tpo -c -o lib/glthread/libbison_a-threadlib.o `test -f 'lib/glthread/threadlib.c' || echo '$(srcdir)/'`lib/glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-threadlib.Tpo lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/threadlib.c' object='lib/glthread/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-threadlib.o `test -f 'lib/glthread/threadlib.c' || echo '$(srcdir)/'`lib/glthread/threadlib.c
+
+lib/glthread/libbison_a-threadlib.obj: lib/glthread/threadlib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-threadlib.obj -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-threadlib.Tpo -c -o lib/glthread/libbison_a-threadlib.obj `if test -f 'lib/glthread/threadlib.c'; then $(CYGPATH_W) 'lib/glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/threadlib.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-threadlib.Tpo lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/threadlib.c' object='lib/glthread/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-threadlib.obj `if test -f 'lib/glthread/threadlib.c'; then $(CYGPATH_W) 'lib/glthread/threadlib.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/threadlib.c'; fi`
+
+lib/libbison_a-timespec.o: lib/timespec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-timespec.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-timespec.Tpo -c -o lib/libbison_a-timespec.o `test -f 'lib/timespec.c' || echo '$(srcdir)/'`lib/timespec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-timespec.Tpo lib/$(DEPDIR)/libbison_a-timespec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/timespec.c' object='lib/libbison_a-timespec.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-timespec.o `test -f 'lib/timespec.c' || echo '$(srcdir)/'`lib/timespec.c
+
+lib/libbison_a-timespec.obj: lib/timespec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-timespec.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-timespec.Tpo -c -o lib/libbison_a-timespec.obj `if test -f 'lib/timespec.c'; then $(CYGPATH_W) 'lib/timespec.c'; else $(CYGPATH_W) '$(srcdir)/lib/timespec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-timespec.Tpo lib/$(DEPDIR)/libbison_a-timespec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/timespec.c' object='lib/libbison_a-timespec.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-timespec.obj `if test -f 'lib/timespec.c'; then $(CYGPATH_W) 'lib/timespec.c'; else $(CYGPATH_W) '$(srcdir)/lib/timespec.c'; fi`
+
+lib/libbison_a-timevar.o: lib/timevar.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-timevar.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-timevar.Tpo -c -o lib/libbison_a-timevar.o `test -f 'lib/timevar.c' || echo '$(srcdir)/'`lib/timevar.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-timevar.Tpo lib/$(DEPDIR)/libbison_a-timevar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/timevar.c' object='lib/libbison_a-timevar.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-timevar.o `test -f 'lib/timevar.c' || echo '$(srcdir)/'`lib/timevar.c
+
+lib/libbison_a-timevar.obj: lib/timevar.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-timevar.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-timevar.Tpo -c -o lib/libbison_a-timevar.obj `if test -f 'lib/timevar.c'; then $(CYGPATH_W) 'lib/timevar.c'; else $(CYGPATH_W) '$(srcdir)/lib/timevar.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-timevar.Tpo lib/$(DEPDIR)/libbison_a-timevar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/timevar.c' object='lib/libbison_a-timevar.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-timevar.obj `if test -f 'lib/timevar.c'; then $(CYGPATH_W) 'lib/timevar.c'; else $(CYGPATH_W) '$(srcdir)/lib/timevar.c'; fi`
+
+lib/glthread/libbison_a-tls.o: lib/glthread/tls.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-tls.o -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-tls.Tpo -c -o lib/glthread/libbison_a-tls.o `test -f 'lib/glthread/tls.c' || echo '$(srcdir)/'`lib/glthread/tls.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-tls.Tpo lib/glthread/$(DEPDIR)/libbison_a-tls.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/tls.c' object='lib/glthread/libbison_a-tls.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-tls.o `test -f 'lib/glthread/tls.c' || echo '$(srcdir)/'`lib/glthread/tls.c
+
+lib/glthread/libbison_a-tls.obj: lib/glthread/tls.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/glthread/libbison_a-tls.obj -MD -MP -MF lib/glthread/$(DEPDIR)/libbison_a-tls.Tpo -c -o lib/glthread/libbison_a-tls.obj `if test -f 'lib/glthread/tls.c'; then $(CYGPATH_W) 'lib/glthread/tls.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/tls.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/glthread/$(DEPDIR)/libbison_a-tls.Tpo lib/glthread/$(DEPDIR)/libbison_a-tls.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/glthread/tls.c' object='lib/glthread/libbison_a-tls.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/glthread/libbison_a-tls.obj `if test -f 'lib/glthread/tls.c'; then $(CYGPATH_W) 'lib/glthread/tls.c'; else $(CYGPATH_W) '$(srcdir)/lib/glthread/tls.c'; fi`
+
+lib/libbison_a-unistd.o: lib/unistd.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unistd.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-unistd.Tpo -c -o lib/libbison_a-unistd.o `test -f 'lib/unistd.c' || echo '$(srcdir)/'`lib/unistd.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unistd.Tpo lib/$(DEPDIR)/libbison_a-unistd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unistd.c' object='lib/libbison_a-unistd.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unistd.o `test -f 'lib/unistd.c' || echo '$(srcdir)/'`lib/unistd.c
+
+lib/libbison_a-unistd.obj: lib/unistd.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unistd.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-unistd.Tpo -c -o lib/libbison_a-unistd.obj `if test -f 'lib/unistd.c'; then $(CYGPATH_W) 'lib/unistd.c'; else $(CYGPATH_W) '$(srcdir)/lib/unistd.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unistd.Tpo lib/$(DEPDIR)/libbison_a-unistd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unistd.c' object='lib/libbison_a-unistd.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unistd.obj `if test -f 'lib/unistd.c'; then $(CYGPATH_W) 'lib/unistd.c'; else $(CYGPATH_W) '$(srcdir)/lib/unistd.c'; fi`
+
+lib/libbison_a-dup-safer.o: lib/dup-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup-safer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup-safer.Tpo -c -o lib/libbison_a-dup-safer.o `test -f 'lib/dup-safer.c' || echo '$(srcdir)/'`lib/dup-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup-safer.Tpo lib/$(DEPDIR)/libbison_a-dup-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup-safer.c' object='lib/libbison_a-dup-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup-safer.o `test -f 'lib/dup-safer.c' || echo '$(srcdir)/'`lib/dup-safer.c
+
+lib/libbison_a-dup-safer.obj: lib/dup-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup-safer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup-safer.Tpo -c -o lib/libbison_a-dup-safer.obj `if test -f 'lib/dup-safer.c'; then $(CYGPATH_W) 'lib/dup-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup-safer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup-safer.Tpo lib/$(DEPDIR)/libbison_a-dup-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup-safer.c' object='lib/libbison_a-dup-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup-safer.obj `if test -f 'lib/dup-safer.c'; then $(CYGPATH_W) 'lib/dup-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup-safer.c'; fi`
+
+lib/libbison_a-fd-safer.o: lib/fd-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-safer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-safer.Tpo -c -o lib/libbison_a-fd-safer.o `test -f 'lib/fd-safer.c' || echo '$(srcdir)/'`lib/fd-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-safer.Tpo lib/$(DEPDIR)/libbison_a-fd-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-safer.c' object='lib/libbison_a-fd-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-safer.o `test -f 'lib/fd-safer.c' || echo '$(srcdir)/'`lib/fd-safer.c
+
+lib/libbison_a-fd-safer.obj: lib/fd-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fd-safer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fd-safer.Tpo -c -o lib/libbison_a-fd-safer.obj `if test -f 'lib/fd-safer.c'; then $(CYGPATH_W) 'lib/fd-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-safer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fd-safer.Tpo lib/$(DEPDIR)/libbison_a-fd-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fd-safer.c' object='lib/libbison_a-fd-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fd-safer.obj `if test -f 'lib/fd-safer.c'; then $(CYGPATH_W) 'lib/fd-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/fd-safer.c'; fi`
+
+lib/libbison_a-pipe-safer.o: lib/pipe-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe-safer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe-safer.Tpo -c -o lib/libbison_a-pipe-safer.o `test -f 'lib/pipe-safer.c' || echo '$(srcdir)/'`lib/pipe-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe-safer.Tpo lib/$(DEPDIR)/libbison_a-pipe-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe-safer.c' object='lib/libbison_a-pipe-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe-safer.o `test -f 'lib/pipe-safer.c' || echo '$(srcdir)/'`lib/pipe-safer.c
+
+lib/libbison_a-pipe-safer.obj: lib/pipe-safer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-pipe-safer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-pipe-safer.Tpo -c -o lib/libbison_a-pipe-safer.obj `if test -f 'lib/pipe-safer.c'; then $(CYGPATH_W) 'lib/pipe-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe-safer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-pipe-safer.Tpo lib/$(DEPDIR)/libbison_a-pipe-safer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipe-safer.c' object='lib/libbison_a-pipe-safer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-pipe-safer.obj `if test -f 'lib/pipe-safer.c'; then $(CYGPATH_W) 'lib/pipe-safer.c'; else $(CYGPATH_W) '$(srcdir)/lib/pipe-safer.c'; fi`
+
+lib/uniwidth/libbison_a-width.o: lib/uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/uniwidth/libbison_a-width.o -MD -MP -MF lib/uniwidth/$(DEPDIR)/libbison_a-width.Tpo -c -o lib/uniwidth/libbison_a-width.o `test -f 'lib/uniwidth/width.c' || echo '$(srcdir)/'`lib/uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/uniwidth/$(DEPDIR)/libbison_a-width.Tpo lib/uniwidth/$(DEPDIR)/libbison_a-width.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/uniwidth/width.c' object='lib/uniwidth/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/uniwidth/libbison_a-width.o `test -f 'lib/uniwidth/width.c' || echo '$(srcdir)/'`lib/uniwidth/width.c
+
+lib/uniwidth/libbison_a-width.obj: lib/uniwidth/width.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/uniwidth/libbison_a-width.obj -MD -MP -MF lib/uniwidth/$(DEPDIR)/libbison_a-width.Tpo -c -o lib/uniwidth/libbison_a-width.obj `if test -f 'lib/uniwidth/width.c'; then $(CYGPATH_W) 'lib/uniwidth/width.c'; else $(CYGPATH_W) '$(srcdir)/lib/uniwidth/width.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/uniwidth/$(DEPDIR)/libbison_a-width.Tpo lib/uniwidth/$(DEPDIR)/libbison_a-width.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/uniwidth/width.c' object='lib/uniwidth/libbison_a-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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/uniwidth/libbison_a-width.obj `if test -f 'lib/uniwidth/width.c'; then $(CYGPATH_W) 'lib/uniwidth/width.c'; else $(CYGPATH_W) '$(srcdir)/lib/uniwidth/width.c'; fi`
+
+lib/libbison_a-wait-process.o: lib/wait-process.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wait-process.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-wait-process.Tpo -c -o lib/libbison_a-wait-process.o `test -f 'lib/wait-process.c' || echo '$(srcdir)/'`lib/wait-process.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wait-process.Tpo lib/$(DEPDIR)/libbison_a-wait-process.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wait-process.c' object='lib/libbison_a-wait-process.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wait-process.o `test -f 'lib/wait-process.c' || echo '$(srcdir)/'`lib/wait-process.c
+
+lib/libbison_a-wait-process.obj: lib/wait-process.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wait-process.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-wait-process.Tpo -c -o lib/libbison_a-wait-process.obj `if test -f 'lib/wait-process.c'; then $(CYGPATH_W) 'lib/wait-process.c'; else $(CYGPATH_W) '$(srcdir)/lib/wait-process.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wait-process.Tpo lib/$(DEPDIR)/libbison_a-wait-process.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wait-process.c' object='lib/libbison_a-wait-process.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wait-process.obj `if test -f 'lib/wait-process.c'; then $(CYGPATH_W) 'lib/wait-process.c'; else $(CYGPATH_W) '$(srcdir)/lib/wait-process.c'; fi`
+
+lib/libbison_a-wctype-h.o: lib/wctype-h.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wctype-h.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-wctype-h.Tpo -c -o lib/libbison_a-wctype-h.o `test -f 'lib/wctype-h.c' || echo '$(srcdir)/'`lib/wctype-h.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wctype-h.Tpo lib/$(DEPDIR)/libbison_a-wctype-h.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wctype-h.c' object='lib/libbison_a-wctype-h.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wctype-h.o `test -f 'lib/wctype-h.c' || echo '$(srcdir)/'`lib/wctype-h.c
+
+lib/libbison_a-wctype-h.obj: lib/wctype-h.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wctype-h.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-wctype-h.Tpo -c -o lib/libbison_a-wctype-h.obj `if test -f 'lib/wctype-h.c'; then $(CYGPATH_W) 'lib/wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/lib/wctype-h.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wctype-h.Tpo lib/$(DEPDIR)/libbison_a-wctype-h.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wctype-h.c' object='lib/libbison_a-wctype-h.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wctype-h.obj `if test -f 'lib/wctype-h.c'; then $(CYGPATH_W) 'lib/wctype-h.c'; else $(CYGPATH_W) '$(srcdir)/lib/wctype-h.c'; fi`
+
+lib/libbison_a-xmalloc.o: lib/xmalloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xmalloc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xmalloc.Tpo -c -o lib/libbison_a-xmalloc.o `test -f 'lib/xmalloc.c' || echo '$(srcdir)/'`lib/xmalloc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xmalloc.Tpo lib/$(DEPDIR)/libbison_a-xmalloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xmalloc.c' object='lib/libbison_a-xmalloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xmalloc.o `test -f 'lib/xmalloc.c' || echo '$(srcdir)/'`lib/xmalloc.c
+
+lib/libbison_a-xmalloc.obj: lib/xmalloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xmalloc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xmalloc.Tpo -c -o lib/libbison_a-xmalloc.obj `if test -f 'lib/xmalloc.c'; then $(CYGPATH_W) 'lib/xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/xmalloc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xmalloc.Tpo lib/$(DEPDIR)/libbison_a-xmalloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xmalloc.c' object='lib/libbison_a-xmalloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xmalloc.obj `if test -f 'lib/xmalloc.c'; then $(CYGPATH_W) 'lib/xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/xmalloc.c'; fi`
+
+lib/libbison_a-xalloc-die.o: lib/xalloc-die.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xalloc-die.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xalloc-die.Tpo -c -o lib/libbison_a-xalloc-die.o `test -f 'lib/xalloc-die.c' || echo '$(srcdir)/'`lib/xalloc-die.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xalloc-die.Tpo lib/$(DEPDIR)/libbison_a-xalloc-die.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xalloc-die.c' object='lib/libbison_a-xalloc-die.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xalloc-die.o `test -f 'lib/xalloc-die.c' || echo '$(srcdir)/'`lib/xalloc-die.c
+
+lib/libbison_a-xalloc-die.obj: lib/xalloc-die.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xalloc-die.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xalloc-die.Tpo -c -o lib/libbison_a-xalloc-die.obj `if test -f 'lib/xalloc-die.c'; then $(CYGPATH_W) 'lib/xalloc-die.c'; else $(CYGPATH_W) '$(srcdir)/lib/xalloc-die.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xalloc-die.Tpo lib/$(DEPDIR)/libbison_a-xalloc-die.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xalloc-die.c' object='lib/libbison_a-xalloc-die.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xalloc-die.obj `if test -f 'lib/xalloc-die.c'; then $(CYGPATH_W) 'lib/xalloc-die.c'; else $(CYGPATH_W) '$(srcdir)/lib/xalloc-die.c'; fi`
+
+lib/libbison_a-xconcat-filename.o: lib/xconcat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xconcat-filename.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xconcat-filename.Tpo -c -o lib/libbison_a-xconcat-filename.o `test -f 'lib/xconcat-filename.c' || echo '$(srcdir)/'`lib/xconcat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xconcat-filename.Tpo lib/$(DEPDIR)/libbison_a-xconcat-filename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xconcat-filename.c' object='lib/libbison_a-xconcat-filename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xconcat-filename.o `test -f 'lib/xconcat-filename.c' || echo '$(srcdir)/'`lib/xconcat-filename.c
+
+lib/libbison_a-xconcat-filename.obj: lib/xconcat-filename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xconcat-filename.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xconcat-filename.Tpo -c -o lib/libbison_a-xconcat-filename.obj `if test -f 'lib/xconcat-filename.c'; then $(CYGPATH_W) 'lib/xconcat-filename.c'; else $(CYGPATH_W) '$(srcdir)/lib/xconcat-filename.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xconcat-filename.Tpo lib/$(DEPDIR)/libbison_a-xconcat-filename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xconcat-filename.c' object='lib/libbison_a-xconcat-filename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xconcat-filename.obj `if test -f 'lib/xconcat-filename.c'; then $(CYGPATH_W) 'lib/xconcat-filename.c'; else $(CYGPATH_W) '$(srcdir)/lib/xconcat-filename.c'; fi`
+
+lib/libbison_a-xhash.o: lib/xhash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xhash.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xhash.Tpo -c -o lib/libbison_a-xhash.o `test -f 'lib/xhash.c' || echo '$(srcdir)/'`lib/xhash.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xhash.Tpo lib/$(DEPDIR)/libbison_a-xhash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xhash.c' object='lib/libbison_a-xhash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xhash.o `test -f 'lib/xhash.c' || echo '$(srcdir)/'`lib/xhash.c
+
+lib/libbison_a-xhash.obj: lib/xhash.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xhash.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xhash.Tpo -c -o lib/libbison_a-xhash.obj `if test -f 'lib/xhash.c'; then $(CYGPATH_W) 'lib/xhash.c'; else $(CYGPATH_W) '$(srcdir)/lib/xhash.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xhash.Tpo lib/$(DEPDIR)/libbison_a-xhash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xhash.c' object='lib/libbison_a-xhash.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xhash.obj `if test -f 'lib/xhash.c'; then $(CYGPATH_W) 'lib/xhash.c'; else $(CYGPATH_W) '$(srcdir)/lib/xhash.c'; fi`
+
+lib/libbison_a-gl_xlist.o: lib/gl_xlist.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_xlist.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_xlist.Tpo -c -o lib/libbison_a-gl_xlist.o `test -f 'lib/gl_xlist.c' || echo '$(srcdir)/'`lib/gl_xlist.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_xlist.Tpo lib/$(DEPDIR)/libbison_a-gl_xlist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_xlist.c' object='lib/libbison_a-gl_xlist.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_xlist.o `test -f 'lib/gl_xlist.c' || echo '$(srcdir)/'`lib/gl_xlist.c
+
+lib/libbison_a-gl_xlist.obj: lib/gl_xlist.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gl_xlist.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gl_xlist.Tpo -c -o lib/libbison_a-gl_xlist.obj `if test -f 'lib/gl_xlist.c'; then $(CYGPATH_W) 'lib/gl_xlist.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_xlist.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gl_xlist.Tpo lib/$(DEPDIR)/libbison_a-gl_xlist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gl_xlist.c' object='lib/libbison_a-gl_xlist.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gl_xlist.obj `if test -f 'lib/gl_xlist.c'; then $(CYGPATH_W) 'lib/gl_xlist.c'; else $(CYGPATH_W) '$(srcdir)/lib/gl_xlist.c'; fi`
+
+lib/libbison_a-xreadlink.o: lib/xreadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xreadlink.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xreadlink.Tpo -c -o lib/libbison_a-xreadlink.o `test -f 'lib/xreadlink.c' || echo '$(srcdir)/'`lib/xreadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xreadlink.Tpo lib/$(DEPDIR)/libbison_a-xreadlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xreadlink.c' object='lib/libbison_a-xreadlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xreadlink.o `test -f 'lib/xreadlink.c' || echo '$(srcdir)/'`lib/xreadlink.c
+
+lib/libbison_a-xreadlink.obj: lib/xreadlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xreadlink.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xreadlink.Tpo -c -o lib/libbison_a-xreadlink.obj `if test -f 'lib/xreadlink.c'; then $(CYGPATH_W) 'lib/xreadlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/xreadlink.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xreadlink.Tpo lib/$(DEPDIR)/libbison_a-xreadlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xreadlink.c' object='lib/libbison_a-xreadlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xreadlink.obj `if test -f 'lib/xreadlink.c'; then $(CYGPATH_W) 'lib/xreadlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/xreadlink.c'; fi`
+
+lib/libbison_a-xsize.o: lib/xsize.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xsize.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xsize.Tpo -c -o lib/libbison_a-xsize.o `test -f 'lib/xsize.c' || echo '$(srcdir)/'`lib/xsize.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xsize.Tpo lib/$(DEPDIR)/libbison_a-xsize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xsize.c' object='lib/libbison_a-xsize.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xsize.o `test -f 'lib/xsize.c' || echo '$(srcdir)/'`lib/xsize.c
+
+lib/libbison_a-xsize.obj: lib/xsize.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xsize.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xsize.Tpo -c -o lib/libbison_a-xsize.obj `if test -f 'lib/xsize.c'; then $(CYGPATH_W) 'lib/xsize.c'; else $(CYGPATH_W) '$(srcdir)/lib/xsize.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xsize.Tpo lib/$(DEPDIR)/libbison_a-xsize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xsize.c' object='lib/libbison_a-xsize.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xsize.obj `if test -f 'lib/xsize.c'; then $(CYGPATH_W) 'lib/xsize.c'; else $(CYGPATH_W) '$(srcdir)/lib/xsize.c'; fi`
+
+lib/libbison_a-xstrndup.o: lib/xstrndup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xstrndup.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xstrndup.Tpo -c -o lib/libbison_a-xstrndup.o `test -f 'lib/xstrndup.c' || echo '$(srcdir)/'`lib/xstrndup.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xstrndup.Tpo lib/$(DEPDIR)/libbison_a-xstrndup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xstrndup.c' object='lib/libbison_a-xstrndup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xstrndup.o `test -f 'lib/xstrndup.c' || echo '$(srcdir)/'`lib/xstrndup.c
+
+lib/libbison_a-xstrndup.obj: lib/xstrndup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xstrndup.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xstrndup.Tpo -c -o lib/libbison_a-xstrndup.obj `if test -f 'lib/xstrndup.c'; then $(CYGPATH_W) 'lib/xstrndup.c'; else $(CYGPATH_W) '$(srcdir)/lib/xstrndup.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xstrndup.Tpo lib/$(DEPDIR)/libbison_a-xstrndup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xstrndup.c' object='lib/libbison_a-xstrndup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xstrndup.obj `if test -f 'lib/xstrndup.c'; then $(CYGPATH_W) 'lib/xstrndup.c'; else $(CYGPATH_W) '$(srcdir)/lib/xstrndup.c'; fi`
+
+lib/libbison_a-get-errno.o: lib/get-errno.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-get-errno.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-get-errno.Tpo -c -o lib/libbison_a-get-errno.o `test -f 'lib/get-errno.c' || echo '$(srcdir)/'`lib/get-errno.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-get-errno.Tpo lib/$(DEPDIR)/libbison_a-get-errno.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/get-errno.c' object='lib/libbison_a-get-errno.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-get-errno.o `test -f 'lib/get-errno.c' || echo '$(srcdir)/'`lib/get-errno.c
+
+lib/libbison_a-get-errno.obj: lib/get-errno.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-get-errno.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-get-errno.Tpo -c -o lib/libbison_a-get-errno.obj `if test -f 'lib/get-errno.c'; then $(CYGPATH_W) 'lib/get-errno.c'; else $(CYGPATH_W) '$(srcdir)/lib/get-errno.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-get-errno.Tpo lib/$(DEPDIR)/libbison_a-get-errno.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/get-errno.c' object='lib/libbison_a-get-errno.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-get-errno.obj `if test -f 'lib/get-errno.c'; then $(CYGPATH_W) 'lib/get-errno.c'; else $(CYGPATH_W) '$(srcdir)/lib/get-errno.c'; fi`
+
+lib/libbison_a-path-join.o: lib/path-join.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-path-join.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-path-join.Tpo -c -o lib/libbison_a-path-join.o `test -f 'lib/path-join.c' || echo '$(srcdir)/'`lib/path-join.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-path-join.Tpo lib/$(DEPDIR)/libbison_a-path-join.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/path-join.c' object='lib/libbison_a-path-join.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-path-join.o `test -f 'lib/path-join.c' || echo '$(srcdir)/'`lib/path-join.c
+
+lib/libbison_a-path-join.obj: lib/path-join.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-path-join.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-path-join.Tpo -c -o lib/libbison_a-path-join.obj `if test -f 'lib/path-join.c'; then $(CYGPATH_W) 'lib/path-join.c'; else $(CYGPATH_W) '$(srcdir)/lib/path-join.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-path-join.Tpo lib/$(DEPDIR)/libbison_a-path-join.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/path-join.c' object='lib/libbison_a-path-join.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-path-join.obj `if test -f 'lib/path-join.c'; then $(CYGPATH_W) 'lib/path-join.c'; else $(CYGPATH_W) '$(srcdir)/lib/path-join.c'; fi`
+
+lib/libbison_a-calloc.o: lib/calloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-calloc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-calloc.Tpo -c -o lib/libbison_a-calloc.o `test -f 'lib/calloc.c' || echo '$(srcdir)/'`lib/calloc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-calloc.Tpo lib/$(DEPDIR)/libbison_a-calloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/calloc.c' object='lib/libbison_a-calloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-calloc.o `test -f 'lib/calloc.c' || echo '$(srcdir)/'`lib/calloc.c
+
+lib/libbison_a-calloc.obj: lib/calloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-calloc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-calloc.Tpo -c -o lib/libbison_a-calloc.obj `if test -f 'lib/calloc.c'; then $(CYGPATH_W) 'lib/calloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/calloc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-calloc.Tpo lib/$(DEPDIR)/libbison_a-calloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/calloc.c' object='lib/libbison_a-calloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-calloc.obj `if test -f 'lib/calloc.c'; then $(CYGPATH_W) 'lib/calloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/calloc.c'; fi`
+
+lib/libbison_a-canonicalize-lgpl.o: lib/canonicalize-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-canonicalize-lgpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Tpo -c -o lib/libbison_a-canonicalize-lgpl.o `test -f 'lib/canonicalize-lgpl.c' || echo '$(srcdir)/'`lib/canonicalize-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Tpo lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/canonicalize-lgpl.c' object='lib/libbison_a-canonicalize-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-canonicalize-lgpl.o `test -f 'lib/canonicalize-lgpl.c' || echo '$(srcdir)/'`lib/canonicalize-lgpl.c
+
+lib/libbison_a-canonicalize-lgpl.obj: lib/canonicalize-lgpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-canonicalize-lgpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Tpo -c -o lib/libbison_a-canonicalize-lgpl.obj `if test -f 'lib/canonicalize-lgpl.c'; then $(CYGPATH_W) 'lib/canonicalize-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/canonicalize-lgpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Tpo lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/canonicalize-lgpl.c' object='lib/libbison_a-canonicalize-lgpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-canonicalize-lgpl.obj `if test -f 'lib/canonicalize-lgpl.c'; then $(CYGPATH_W) 'lib/canonicalize-lgpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/canonicalize-lgpl.c'; fi`
+
+lib/libbison_a-close.o: lib/close.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-close.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-close.Tpo -c -o lib/libbison_a-close.o `test -f 'lib/close.c' || echo '$(srcdir)/'`lib/close.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-close.Tpo lib/$(DEPDIR)/libbison_a-close.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/close.c' object='lib/libbison_a-close.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-close.o `test -f 'lib/close.c' || echo '$(srcdir)/'`lib/close.c
+
+lib/libbison_a-close.obj: lib/close.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-close.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-close.Tpo -c -o lib/libbison_a-close.obj `if test -f 'lib/close.c'; then $(CYGPATH_W) 'lib/close.c'; else $(CYGPATH_W) '$(srcdir)/lib/close.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-close.Tpo lib/$(DEPDIR)/libbison_a-close.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/close.c' object='lib/libbison_a-close.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-close.obj `if test -f 'lib/close.c'; then $(CYGPATH_W) 'lib/close.c'; else $(CYGPATH_W) '$(srcdir)/lib/close.c'; fi`
+
+lib/libbison_a-dup2.o: lib/dup2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup2.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup2.Tpo -c -o lib/libbison_a-dup2.o `test -f 'lib/dup2.c' || echo '$(srcdir)/'`lib/dup2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup2.Tpo lib/$(DEPDIR)/libbison_a-dup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup2.c' object='lib/libbison_a-dup2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup2.o `test -f 'lib/dup2.c' || echo '$(srcdir)/'`lib/dup2.c
+
+lib/libbison_a-dup2.obj: lib/dup2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-dup2.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-dup2.Tpo -c -o lib/libbison_a-dup2.obj `if test -f 'lib/dup2.c'; then $(CYGPATH_W) 'lib/dup2.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-dup2.Tpo lib/$(DEPDIR)/libbison_a-dup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dup2.c' object='lib/libbison_a-dup2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-dup2.obj `if test -f 'lib/dup2.c'; then $(CYGPATH_W) 'lib/dup2.c'; else $(CYGPATH_W) '$(srcdir)/lib/dup2.c'; fi`
+
+lib/libbison_a-error.o: lib/error.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-error.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-error.Tpo -c -o lib/libbison_a-error.o `test -f 'lib/error.c' || echo '$(srcdir)/'`lib/error.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-error.Tpo lib/$(DEPDIR)/libbison_a-error.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/error.c' object='lib/libbison_a-error.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-error.o `test -f 'lib/error.c' || echo '$(srcdir)/'`lib/error.c
+
+lib/libbison_a-error.obj: lib/error.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-error.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-error.Tpo -c -o lib/libbison_a-error.obj `if test -f 'lib/error.c'; then $(CYGPATH_W) 'lib/error.c'; else $(CYGPATH_W) '$(srcdir)/lib/error.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-error.Tpo lib/$(DEPDIR)/libbison_a-error.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/error.c' object='lib/libbison_a-error.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-error.obj `if test -f 'lib/error.c'; then $(CYGPATH_W) 'lib/error.c'; else $(CYGPATH_W) '$(srcdir)/lib/error.c'; fi`
+
+lib/libbison_a-fcntl.o: lib/fcntl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fcntl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fcntl.Tpo -c -o lib/libbison_a-fcntl.o `test -f 'lib/fcntl.c' || echo '$(srcdir)/'`lib/fcntl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fcntl.Tpo lib/$(DEPDIR)/libbison_a-fcntl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fcntl.c' object='lib/libbison_a-fcntl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fcntl.o `test -f 'lib/fcntl.c' || echo '$(srcdir)/'`lib/fcntl.c
+
+lib/libbison_a-fcntl.obj: lib/fcntl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fcntl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fcntl.Tpo -c -o lib/libbison_a-fcntl.obj `if test -f 'lib/fcntl.c'; then $(CYGPATH_W) 'lib/fcntl.c'; else $(CYGPATH_W) '$(srcdir)/lib/fcntl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fcntl.Tpo lib/$(DEPDIR)/libbison_a-fcntl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fcntl.c' object='lib/libbison_a-fcntl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fcntl.obj `if test -f 'lib/fcntl.c'; then $(CYGPATH_W) 'lib/fcntl.c'; else $(CYGPATH_W) '$(srcdir)/lib/fcntl.c'; fi`
+
+lib/libbison_a-float.o: lib/float.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-float.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-float.Tpo -c -o lib/libbison_a-float.o `test -f 'lib/float.c' || echo '$(srcdir)/'`lib/float.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-float.Tpo lib/$(DEPDIR)/libbison_a-float.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/float.c' object='lib/libbison_a-float.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-float.o `test -f 'lib/float.c' || echo '$(srcdir)/'`lib/float.c
+
+lib/libbison_a-float.obj: lib/float.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-float.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-float.Tpo -c -o lib/libbison_a-float.obj `if test -f 'lib/float.c'; then $(CYGPATH_W) 'lib/float.c'; else $(CYGPATH_W) '$(srcdir)/lib/float.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-float.Tpo lib/$(DEPDIR)/libbison_a-float.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/float.c' object='lib/libbison_a-float.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-float.obj `if test -f 'lib/float.c'; then $(CYGPATH_W) 'lib/float.c'; else $(CYGPATH_W) '$(srcdir)/lib/float.c'; fi`
+
+lib/libbison_a-itold.o: lib/itold.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-itold.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-itold.Tpo -c -o lib/libbison_a-itold.o `test -f 'lib/itold.c' || echo '$(srcdir)/'`lib/itold.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-itold.Tpo lib/$(DEPDIR)/libbison_a-itold.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/itold.c' object='lib/libbison_a-itold.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-itold.o `test -f 'lib/itold.c' || echo '$(srcdir)/'`lib/itold.c
+
+lib/libbison_a-itold.obj: lib/itold.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-itold.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-itold.Tpo -c -o lib/libbison_a-itold.obj `if test -f 'lib/itold.c'; then $(CYGPATH_W) 'lib/itold.c'; else $(CYGPATH_W) '$(srcdir)/lib/itold.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-itold.Tpo lib/$(DEPDIR)/libbison_a-itold.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/itold.c' object='lib/libbison_a-itold.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-itold.obj `if test -f 'lib/itold.c'; then $(CYGPATH_W) 'lib/itold.c'; else $(CYGPATH_W) '$(srcdir)/lib/itold.c'; fi`
+
+lib/libbison_a-fopen.o: lib/fopen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fopen.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fopen.Tpo -c -o lib/libbison_a-fopen.o `test -f 'lib/fopen.c' || echo '$(srcdir)/'`lib/fopen.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fopen.Tpo lib/$(DEPDIR)/libbison_a-fopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fopen.c' object='lib/libbison_a-fopen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fopen.o `test -f 'lib/fopen.c' || echo '$(srcdir)/'`lib/fopen.c
+
+lib/libbison_a-fopen.obj: lib/fopen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fopen.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fopen.Tpo -c -o lib/libbison_a-fopen.obj `if test -f 'lib/fopen.c'; then $(CYGPATH_W) 'lib/fopen.c'; else $(CYGPATH_W) '$(srcdir)/lib/fopen.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fopen.Tpo lib/$(DEPDIR)/libbison_a-fopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fopen.c' object='lib/libbison_a-fopen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fopen.obj `if test -f 'lib/fopen.c'; then $(CYGPATH_W) 'lib/fopen.c'; else $(CYGPATH_W) '$(srcdir)/lib/fopen.c'; fi`
+
+lib/libbison_a-fpending.o: lib/fpending.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fpending.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fpending.Tpo -c -o lib/libbison_a-fpending.o `test -f 'lib/fpending.c' || echo '$(srcdir)/'`lib/fpending.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fpending.Tpo lib/$(DEPDIR)/libbison_a-fpending.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fpending.c' object='lib/libbison_a-fpending.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fpending.o `test -f 'lib/fpending.c' || echo '$(srcdir)/'`lib/fpending.c
+
+lib/libbison_a-fpending.obj: lib/fpending.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fpending.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fpending.Tpo -c -o lib/libbison_a-fpending.obj `if test -f 'lib/fpending.c'; then $(CYGPATH_W) 'lib/fpending.c'; else $(CYGPATH_W) '$(srcdir)/lib/fpending.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fpending.Tpo lib/$(DEPDIR)/libbison_a-fpending.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fpending.c' object='lib/libbison_a-fpending.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fpending.obj `if test -f 'lib/fpending.c'; then $(CYGPATH_W) 'lib/fpending.c'; else $(CYGPATH_W) '$(srcdir)/lib/fpending.c'; fi`
+
+lib/libbison_a-fprintf.o: lib/fprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fprintf.Tpo -c -o lib/libbison_a-fprintf.o `test -f 'lib/fprintf.c' || echo '$(srcdir)/'`lib/fprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fprintf.Tpo lib/$(DEPDIR)/libbison_a-fprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fprintf.c' object='lib/libbison_a-fprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fprintf.o `test -f 'lib/fprintf.c' || echo '$(srcdir)/'`lib/fprintf.c
+
+lib/libbison_a-fprintf.obj: lib/fprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fprintf.Tpo -c -o lib/libbison_a-fprintf.obj `if test -f 'lib/fprintf.c'; then $(CYGPATH_W) 'lib/fprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/fprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fprintf.Tpo lib/$(DEPDIR)/libbison_a-fprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fprintf.c' object='lib/libbison_a-fprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fprintf.obj `if test -f 'lib/fprintf.c'; then $(CYGPATH_W) 'lib/fprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/fprintf.c'; fi`
+
+lib/libbison_a-frexp.o: lib/frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-frexp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-frexp.Tpo -c -o lib/libbison_a-frexp.o `test -f 'lib/frexp.c' || echo '$(srcdir)/'`lib/frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-frexp.Tpo lib/$(DEPDIR)/libbison_a-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/frexp.c' object='lib/libbison_a-frexp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-frexp.o `test -f 'lib/frexp.c' || echo '$(srcdir)/'`lib/frexp.c
+
+lib/libbison_a-frexp.obj: lib/frexp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-frexp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-frexp.Tpo -c -o lib/libbison_a-frexp.obj `if test -f 'lib/frexp.c'; then $(CYGPATH_W) 'lib/frexp.c'; else $(CYGPATH_W) '$(srcdir)/lib/frexp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-frexp.Tpo lib/$(DEPDIR)/libbison_a-frexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/frexp.c' object='lib/libbison_a-frexp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-frexp.obj `if test -f 'lib/frexp.c'; then $(CYGPATH_W) 'lib/frexp.c'; else $(CYGPATH_W) '$(srcdir)/lib/frexp.c'; fi`
+
+lib/libbison_a-frexpl.o: lib/frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-frexpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-frexpl.Tpo -c -o lib/libbison_a-frexpl.o `test -f 'lib/frexpl.c' || echo '$(srcdir)/'`lib/frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-frexpl.Tpo lib/$(DEPDIR)/libbison_a-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/frexpl.c' object='lib/libbison_a-frexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-frexpl.o `test -f 'lib/frexpl.c' || echo '$(srcdir)/'`lib/frexpl.c
+
+lib/libbison_a-frexpl.obj: lib/frexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-frexpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-frexpl.Tpo -c -o lib/libbison_a-frexpl.obj `if test -f 'lib/frexpl.c'; then $(CYGPATH_W) 'lib/frexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/frexpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-frexpl.Tpo lib/$(DEPDIR)/libbison_a-frexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/frexpl.c' object='lib/libbison_a-frexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-frexpl.obj `if test -f 'lib/frexpl.c'; then $(CYGPATH_W) 'lib/frexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/frexpl.c'; fi`
+
+lib/libbison_a-fseterr.o: lib/fseterr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fseterr.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fseterr.Tpo -c -o lib/libbison_a-fseterr.o `test -f 'lib/fseterr.c' || echo '$(srcdir)/'`lib/fseterr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fseterr.Tpo lib/$(DEPDIR)/libbison_a-fseterr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fseterr.c' object='lib/libbison_a-fseterr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fseterr.o `test -f 'lib/fseterr.c' || echo '$(srcdir)/'`lib/fseterr.c
+
+lib/libbison_a-fseterr.obj: lib/fseterr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fseterr.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fseterr.Tpo -c -o lib/libbison_a-fseterr.obj `if test -f 'lib/fseterr.c'; then $(CYGPATH_W) 'lib/fseterr.c'; else $(CYGPATH_W) '$(srcdir)/lib/fseterr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fseterr.Tpo lib/$(DEPDIR)/libbison_a-fseterr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fseterr.c' object='lib/libbison_a-fseterr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fseterr.obj `if test -f 'lib/fseterr.c'; then $(CYGPATH_W) 'lib/fseterr.c'; else $(CYGPATH_W) '$(srcdir)/lib/fseterr.c'; fi`
+
+lib/libbison_a-fstat.o: lib/fstat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fstat.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fstat.Tpo -c -o lib/libbison_a-fstat.o `test -f 'lib/fstat.c' || echo '$(srcdir)/'`lib/fstat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fstat.Tpo lib/$(DEPDIR)/libbison_a-fstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fstat.c' object='lib/libbison_a-fstat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fstat.o `test -f 'lib/fstat.c' || echo '$(srcdir)/'`lib/fstat.c
+
+lib/libbison_a-fstat.obj: lib/fstat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fstat.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fstat.Tpo -c -o lib/libbison_a-fstat.obj `if test -f 'lib/fstat.c'; then $(CYGPATH_W) 'lib/fstat.c'; else $(CYGPATH_W) '$(srcdir)/lib/fstat.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fstat.Tpo lib/$(DEPDIR)/libbison_a-fstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fstat.c' object='lib/libbison_a-fstat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fstat.obj `if test -f 'lib/fstat.c'; then $(CYGPATH_W) 'lib/fstat.c'; else $(CYGPATH_W) '$(srcdir)/lib/fstat.c'; fi`
+
+lib/libbison_a-stat-w32.o: lib/stat-w32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat-w32.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat-w32.Tpo -c -o lib/libbison_a-stat-w32.o `test -f 'lib/stat-w32.c' || echo '$(srcdir)/'`lib/stat-w32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat-w32.Tpo lib/$(DEPDIR)/libbison_a-stat-w32.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat-w32.c' object='lib/libbison_a-stat-w32.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat-w32.o `test -f 'lib/stat-w32.c' || echo '$(srcdir)/'`lib/stat-w32.c
+
+lib/libbison_a-stat-w32.obj: lib/stat-w32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat-w32.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat-w32.Tpo -c -o lib/libbison_a-stat-w32.obj `if test -f 'lib/stat-w32.c'; then $(CYGPATH_W) 'lib/stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat-w32.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat-w32.Tpo lib/$(DEPDIR)/libbison_a-stat-w32.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat-w32.c' object='lib/libbison_a-stat-w32.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat-w32.obj `if test -f 'lib/stat-w32.c'; then $(CYGPATH_W) 'lib/stat-w32.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat-w32.c'; fi`
+
+lib/libbison_a-fsync.o: lib/fsync.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fsync.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-fsync.Tpo -c -o lib/libbison_a-fsync.o `test -f 'lib/fsync.c' || echo '$(srcdir)/'`lib/fsync.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fsync.Tpo lib/$(DEPDIR)/libbison_a-fsync.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fsync.c' object='lib/libbison_a-fsync.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fsync.o `test -f 'lib/fsync.c' || echo '$(srcdir)/'`lib/fsync.c
+
+lib/libbison_a-fsync.obj: lib/fsync.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-fsync.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-fsync.Tpo -c -o lib/libbison_a-fsync.obj `if test -f 'lib/fsync.c'; then $(CYGPATH_W) 'lib/fsync.c'; else $(CYGPATH_W) '$(srcdir)/lib/fsync.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-fsync.Tpo lib/$(DEPDIR)/libbison_a-fsync.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fsync.c' object='lib/libbison_a-fsync.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-fsync.obj `if test -f 'lib/fsync.c'; then $(CYGPATH_W) 'lib/fsync.c'; else $(CYGPATH_W) '$(srcdir)/lib/fsync.c'; fi`
+
+lib/libbison_a-getdtablesize.o: lib/getdtablesize.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getdtablesize.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-getdtablesize.Tpo -c -o lib/libbison_a-getdtablesize.o `test -f 'lib/getdtablesize.c' || echo '$(srcdir)/'`lib/getdtablesize.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getdtablesize.Tpo lib/$(DEPDIR)/libbison_a-getdtablesize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getdtablesize.c' object='lib/libbison_a-getdtablesize.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getdtablesize.o `test -f 'lib/getdtablesize.c' || echo '$(srcdir)/'`lib/getdtablesize.c
+
+lib/libbison_a-getdtablesize.obj: lib/getdtablesize.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getdtablesize.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-getdtablesize.Tpo -c -o lib/libbison_a-getdtablesize.obj `if test -f 'lib/getdtablesize.c'; then $(CYGPATH_W) 'lib/getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/lib/getdtablesize.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getdtablesize.Tpo lib/$(DEPDIR)/libbison_a-getdtablesize.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getdtablesize.c' object='lib/libbison_a-getdtablesize.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getdtablesize.obj `if test -f 'lib/getdtablesize.c'; then $(CYGPATH_W) 'lib/getdtablesize.c'; else $(CYGPATH_W) '$(srcdir)/lib/getdtablesize.c'; fi`
+
+lib/libbison_a-getopt.o: lib/getopt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getopt.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-getopt.Tpo -c -o lib/libbison_a-getopt.o `test -f 'lib/getopt.c' || echo '$(srcdir)/'`lib/getopt.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getopt.Tpo lib/$(DEPDIR)/libbison_a-getopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getopt.c' object='lib/libbison_a-getopt.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getopt.o `test -f 'lib/getopt.c' || echo '$(srcdir)/'`lib/getopt.c
+
+lib/libbison_a-getopt.obj: lib/getopt.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getopt.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-getopt.Tpo -c -o lib/libbison_a-getopt.obj `if test -f 'lib/getopt.c'; then $(CYGPATH_W) 'lib/getopt.c'; else $(CYGPATH_W) '$(srcdir)/lib/getopt.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getopt.Tpo lib/$(DEPDIR)/libbison_a-getopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getopt.c' object='lib/libbison_a-getopt.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getopt.obj `if test -f 'lib/getopt.c'; then $(CYGPATH_W) 'lib/getopt.c'; else $(CYGPATH_W) '$(srcdir)/lib/getopt.c'; fi`
+
+lib/libbison_a-getopt1.o: lib/getopt1.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getopt1.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-getopt1.Tpo -c -o lib/libbison_a-getopt1.o `test -f 'lib/getopt1.c' || echo '$(srcdir)/'`lib/getopt1.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getopt1.Tpo lib/$(DEPDIR)/libbison_a-getopt1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getopt1.c' object='lib/libbison_a-getopt1.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getopt1.o `test -f 'lib/getopt1.c' || echo '$(srcdir)/'`lib/getopt1.c
+
+lib/libbison_a-getopt1.obj: lib/getopt1.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getopt1.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-getopt1.Tpo -c -o lib/libbison_a-getopt1.obj `if test -f 'lib/getopt1.c'; then $(CYGPATH_W) 'lib/getopt1.c'; else $(CYGPATH_W) '$(srcdir)/lib/getopt1.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getopt1.Tpo lib/$(DEPDIR)/libbison_a-getopt1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getopt1.c' object='lib/libbison_a-getopt1.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getopt1.obj `if test -f 'lib/getopt1.c'; then $(CYGPATH_W) 'lib/getopt1.c'; else $(CYGPATH_W) '$(srcdir)/lib/getopt1.c'; fi`
+
+lib/libbison_a-getrusage.o: lib/getrusage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getrusage.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-getrusage.Tpo -c -o lib/libbison_a-getrusage.o `test -f 'lib/getrusage.c' || echo '$(srcdir)/'`lib/getrusage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getrusage.Tpo lib/$(DEPDIR)/libbison_a-getrusage.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getrusage.c' object='lib/libbison_a-getrusage.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getrusage.o `test -f 'lib/getrusage.c' || echo '$(srcdir)/'`lib/getrusage.c
+
+lib/libbison_a-getrusage.obj: lib/getrusage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-getrusage.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-getrusage.Tpo -c -o lib/libbison_a-getrusage.obj `if test -f 'lib/getrusage.c'; then $(CYGPATH_W) 'lib/getrusage.c'; else $(CYGPATH_W) '$(srcdir)/lib/getrusage.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-getrusage.Tpo lib/$(DEPDIR)/libbison_a-getrusage.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/getrusage.c' object='lib/libbison_a-getrusage.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-getrusage.obj `if test -f 'lib/getrusage.c'; then $(CYGPATH_W) 'lib/getrusage.c'; else $(CYGPATH_W) '$(srcdir)/lib/getrusage.c'; fi`
+
+lib/libbison_a-gettimeofday.o: lib/gettimeofday.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gettimeofday.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-gettimeofday.Tpo -c -o lib/libbison_a-gettimeofday.o `test -f 'lib/gettimeofday.c' || echo '$(srcdir)/'`lib/gettimeofday.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gettimeofday.Tpo lib/$(DEPDIR)/libbison_a-gettimeofday.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gettimeofday.c' object='lib/libbison_a-gettimeofday.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gettimeofday.o `test -f 'lib/gettimeofday.c' || echo '$(srcdir)/'`lib/gettimeofday.c
+
+lib/libbison_a-gettimeofday.obj: lib/gettimeofday.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-gettimeofday.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-gettimeofday.Tpo -c -o lib/libbison_a-gettimeofday.obj `if test -f 'lib/gettimeofday.c'; then $(CYGPATH_W) 'lib/gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/lib/gettimeofday.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-gettimeofday.Tpo lib/$(DEPDIR)/libbison_a-gettimeofday.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gettimeofday.c' object='lib/libbison_a-gettimeofday.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-gettimeofday.obj `if test -f 'lib/gettimeofday.c'; then $(CYGPATH_W) 'lib/gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/lib/gettimeofday.c'; fi`
+
+lib/libbison_a-isnan.o: lib/isnan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnan.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnan.Tpo -c -o lib/libbison_a-isnan.o `test -f 'lib/isnan.c' || echo '$(srcdir)/'`lib/isnan.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnan.Tpo lib/$(DEPDIR)/libbison_a-isnan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnan.c' object='lib/libbison_a-isnan.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnan.o `test -f 'lib/isnan.c' || echo '$(srcdir)/'`lib/isnan.c
+
+lib/libbison_a-isnan.obj: lib/isnan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnan.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnan.Tpo -c -o lib/libbison_a-isnan.obj `if test -f 'lib/isnan.c'; then $(CYGPATH_W) 'lib/isnan.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnan.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnan.Tpo lib/$(DEPDIR)/libbison_a-isnan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnan.c' object='lib/libbison_a-isnan.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnan.obj `if test -f 'lib/isnan.c'; then $(CYGPATH_W) 'lib/isnan.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnan.c'; fi`
+
+lib/libbison_a-isnand.o: lib/isnand.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnand.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnand.Tpo -c -o lib/libbison_a-isnand.o `test -f 'lib/isnand.c' || echo '$(srcdir)/'`lib/isnand.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnand.Tpo lib/$(DEPDIR)/libbison_a-isnand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnand.c' object='lib/libbison_a-isnand.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnand.o `test -f 'lib/isnand.c' || echo '$(srcdir)/'`lib/isnand.c
+
+lib/libbison_a-isnand.obj: lib/isnand.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnand.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnand.Tpo -c -o lib/libbison_a-isnand.obj `if test -f 'lib/isnand.c'; then $(CYGPATH_W) 'lib/isnand.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnand.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnand.Tpo lib/$(DEPDIR)/libbison_a-isnand.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnand.c' object='lib/libbison_a-isnand.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnand.obj `if test -f 'lib/isnand.c'; then $(CYGPATH_W) 'lib/isnand.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnand.c'; fi`
+
+lib/libbison_a-isnanf.o: lib/isnanf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnanf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnanf.Tpo -c -o lib/libbison_a-isnanf.o `test -f 'lib/isnanf.c' || echo '$(srcdir)/'`lib/isnanf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnanf.Tpo lib/$(DEPDIR)/libbison_a-isnanf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnanf.c' object='lib/libbison_a-isnanf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnanf.o `test -f 'lib/isnanf.c' || echo '$(srcdir)/'`lib/isnanf.c
+
+lib/libbison_a-isnanf.obj: lib/isnanf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnanf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnanf.Tpo -c -o lib/libbison_a-isnanf.obj `if test -f 'lib/isnanf.c'; then $(CYGPATH_W) 'lib/isnanf.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnanf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnanf.Tpo lib/$(DEPDIR)/libbison_a-isnanf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnanf.c' object='lib/libbison_a-isnanf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnanf.obj `if test -f 'lib/isnanf.c'; then $(CYGPATH_W) 'lib/isnanf.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnanf.c'; fi`
+
+lib/libbison_a-isnanl.o: lib/isnanl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnanl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnanl.Tpo -c -o lib/libbison_a-isnanl.o `test -f 'lib/isnanl.c' || echo '$(srcdir)/'`lib/isnanl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnanl.Tpo lib/$(DEPDIR)/libbison_a-isnanl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnanl.c' object='lib/libbison_a-isnanl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnanl.o `test -f 'lib/isnanl.c' || echo '$(srcdir)/'`lib/isnanl.c
+
+lib/libbison_a-isnanl.obj: lib/isnanl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-isnanl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-isnanl.Tpo -c -o lib/libbison_a-isnanl.obj `if test -f 'lib/isnanl.c'; then $(CYGPATH_W) 'lib/isnanl.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnanl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-isnanl.Tpo lib/$(DEPDIR)/libbison_a-isnanl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/isnanl.c' object='lib/libbison_a-isnanl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-isnanl.obj `if test -f 'lib/isnanl.c'; then $(CYGPATH_W) 'lib/isnanl.c'; else $(CYGPATH_W) '$(srcdir)/lib/isnanl.c'; fi`
+
+lib/libbison_a-iswblank.o: lib/iswblank.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-iswblank.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-iswblank.Tpo -c -o lib/libbison_a-iswblank.o `test -f 'lib/iswblank.c' || echo '$(srcdir)/'`lib/iswblank.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-iswblank.Tpo lib/$(DEPDIR)/libbison_a-iswblank.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/iswblank.c' object='lib/libbison_a-iswblank.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-iswblank.o `test -f 'lib/iswblank.c' || echo '$(srcdir)/'`lib/iswblank.c
+
+lib/libbison_a-iswblank.obj: lib/iswblank.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-iswblank.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-iswblank.Tpo -c -o lib/libbison_a-iswblank.obj `if test -f 'lib/iswblank.c'; then $(CYGPATH_W) 'lib/iswblank.c'; else $(CYGPATH_W) '$(srcdir)/lib/iswblank.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-iswblank.Tpo lib/$(DEPDIR)/libbison_a-iswblank.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/iswblank.c' object='lib/libbison_a-iswblank.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-iswblank.obj `if test -f 'lib/iswblank.c'; then $(CYGPATH_W) 'lib/iswblank.c'; else $(CYGPATH_W) '$(srcdir)/lib/iswblank.c'; fi`
+
+lib/libbison_a-ldexpl.o: lib/ldexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-ldexpl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-ldexpl.Tpo -c -o lib/libbison_a-ldexpl.o `test -f 'lib/ldexpl.c' || echo '$(srcdir)/'`lib/ldexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-ldexpl.Tpo lib/$(DEPDIR)/libbison_a-ldexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/ldexpl.c' object='lib/libbison_a-ldexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-ldexpl.o `test -f 'lib/ldexpl.c' || echo '$(srcdir)/'`lib/ldexpl.c
+
+lib/libbison_a-ldexpl.obj: lib/ldexpl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-ldexpl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-ldexpl.Tpo -c -o lib/libbison_a-ldexpl.obj `if test -f 'lib/ldexpl.c'; then $(CYGPATH_W) 'lib/ldexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldexpl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-ldexpl.Tpo lib/$(DEPDIR)/libbison_a-ldexpl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/ldexpl.c' object='lib/libbison_a-ldexpl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-ldexpl.obj `if test -f 'lib/ldexpl.c'; then $(CYGPATH_W) 'lib/ldexpl.c'; else $(CYGPATH_W) '$(srcdir)/lib/ldexpl.c'; fi`
+
+lib/libbison_a-localtime-buffer.o: lib/localtime-buffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-localtime-buffer.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-localtime-buffer.Tpo -c -o lib/libbison_a-localtime-buffer.o `test -f 'lib/localtime-buffer.c' || echo '$(srcdir)/'`lib/localtime-buffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-localtime-buffer.Tpo lib/$(DEPDIR)/libbison_a-localtime-buffer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/localtime-buffer.c' object='lib/libbison_a-localtime-buffer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-localtime-buffer.o `test -f 'lib/localtime-buffer.c' || echo '$(srcdir)/'`lib/localtime-buffer.c
+
+lib/libbison_a-localtime-buffer.obj: lib/localtime-buffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-localtime-buffer.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-localtime-buffer.Tpo -c -o lib/libbison_a-localtime-buffer.obj `if test -f 'lib/localtime-buffer.c'; then $(CYGPATH_W) 'lib/localtime-buffer.c'; else $(CYGPATH_W) '$(srcdir)/lib/localtime-buffer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-localtime-buffer.Tpo lib/$(DEPDIR)/libbison_a-localtime-buffer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/localtime-buffer.c' object='lib/libbison_a-localtime-buffer.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-localtime-buffer.obj `if test -f 'lib/localtime-buffer.c'; then $(CYGPATH_W) 'lib/localtime-buffer.c'; else $(CYGPATH_W) '$(srcdir)/lib/localtime-buffer.c'; fi`
+
+lib/libbison_a-lstat.o: lib/lstat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-lstat.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-lstat.Tpo -c -o lib/libbison_a-lstat.o `test -f 'lib/lstat.c' || echo '$(srcdir)/'`lib/lstat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-lstat.Tpo lib/$(DEPDIR)/libbison_a-lstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/lstat.c' object='lib/libbison_a-lstat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-lstat.o `test -f 'lib/lstat.c' || echo '$(srcdir)/'`lib/lstat.c
+
+lib/libbison_a-lstat.obj: lib/lstat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-lstat.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-lstat.Tpo -c -o lib/libbison_a-lstat.obj `if test -f 'lib/lstat.c'; then $(CYGPATH_W) 'lib/lstat.c'; else $(CYGPATH_W) '$(srcdir)/lib/lstat.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-lstat.Tpo lib/$(DEPDIR)/libbison_a-lstat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/lstat.c' object='lib/libbison_a-lstat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-lstat.obj `if test -f 'lib/lstat.c'; then $(CYGPATH_W) 'lib/lstat.c'; else $(CYGPATH_W) '$(srcdir)/lib/lstat.c'; fi`
+
+lib/libbison_a-malloc.o: lib/malloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-malloc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-malloc.Tpo -c -o lib/libbison_a-malloc.o `test -f 'lib/malloc.c' || echo '$(srcdir)/'`lib/malloc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-malloc.Tpo lib/$(DEPDIR)/libbison_a-malloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/malloc.c' object='lib/libbison_a-malloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-malloc.o `test -f 'lib/malloc.c' || echo '$(srcdir)/'`lib/malloc.c
+
+lib/libbison_a-malloc.obj: lib/malloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-malloc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-malloc.Tpo -c -o lib/libbison_a-malloc.obj `if test -f 'lib/malloc.c'; then $(CYGPATH_W) 'lib/malloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/malloc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-malloc.Tpo lib/$(DEPDIR)/libbison_a-malloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/malloc.c' object='lib/libbison_a-malloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-malloc.obj `if test -f 'lib/malloc.c'; then $(CYGPATH_W) 'lib/malloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/malloc.c'; fi`
+
+lib/libbison_a-mbrtowc.o: lib/mbrtowc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbrtowc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbrtowc.Tpo -c -o lib/libbison_a-mbrtowc.o `test -f 'lib/mbrtowc.c' || echo '$(srcdir)/'`lib/mbrtowc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbrtowc.Tpo lib/$(DEPDIR)/libbison_a-mbrtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbrtowc.c' object='lib/libbison_a-mbrtowc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbrtowc.o `test -f 'lib/mbrtowc.c' || echo '$(srcdir)/'`lib/mbrtowc.c
+
+lib/libbison_a-mbrtowc.obj: lib/mbrtowc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbrtowc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbrtowc.Tpo -c -o lib/libbison_a-mbrtowc.obj `if test -f 'lib/mbrtowc.c'; then $(CYGPATH_W) 'lib/mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbrtowc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbrtowc.Tpo lib/$(DEPDIR)/libbison_a-mbrtowc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbrtowc.c' object='lib/libbison_a-mbrtowc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbrtowc.obj `if test -f 'lib/mbrtowc.c'; then $(CYGPATH_W) 'lib/mbrtowc.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbrtowc.c'; fi`
+
+lib/libbison_a-mbsinit.o: lib/mbsinit.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbsinit.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbsinit.Tpo -c -o lib/libbison_a-mbsinit.o `test -f 'lib/mbsinit.c' || echo '$(srcdir)/'`lib/mbsinit.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbsinit.Tpo lib/$(DEPDIR)/libbison_a-mbsinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbsinit.c' object='lib/libbison_a-mbsinit.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbsinit.o `test -f 'lib/mbsinit.c' || echo '$(srcdir)/'`lib/mbsinit.c
+
+lib/libbison_a-mbsinit.obj: lib/mbsinit.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-mbsinit.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-mbsinit.Tpo -c -o lib/libbison_a-mbsinit.obj `if test -f 'lib/mbsinit.c'; then $(CYGPATH_W) 'lib/mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbsinit.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-mbsinit.Tpo lib/$(DEPDIR)/libbison_a-mbsinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mbsinit.c' object='lib/libbison_a-mbsinit.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-mbsinit.obj `if test -f 'lib/mbsinit.c'; then $(CYGPATH_W) 'lib/mbsinit.c'; else $(CYGPATH_W) '$(srcdir)/lib/mbsinit.c'; fi`
+
+lib/libbison_a-memchr.o: lib/memchr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-memchr.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-memchr.Tpo -c -o lib/libbison_a-memchr.o `test -f 'lib/memchr.c' || echo '$(srcdir)/'`lib/memchr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-memchr.Tpo lib/$(DEPDIR)/libbison_a-memchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/memchr.c' object='lib/libbison_a-memchr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-memchr.o `test -f 'lib/memchr.c' || echo '$(srcdir)/'`lib/memchr.c
+
+lib/libbison_a-memchr.obj: lib/memchr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-memchr.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-memchr.Tpo -c -o lib/libbison_a-memchr.obj `if test -f 'lib/memchr.c'; then $(CYGPATH_W) 'lib/memchr.c'; else $(CYGPATH_W) '$(srcdir)/lib/memchr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-memchr.Tpo lib/$(DEPDIR)/libbison_a-memchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/memchr.c' object='lib/libbison_a-memchr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-memchr.obj `if test -f 'lib/memchr.c'; then $(CYGPATH_W) 'lib/memchr.c'; else $(CYGPATH_W) '$(srcdir)/lib/memchr.c'; fi`
+
+lib/libbison_a-msvc-inval.o: lib/msvc-inval.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-msvc-inval.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-msvc-inval.Tpo -c -o lib/libbison_a-msvc-inval.o `test -f 'lib/msvc-inval.c' || echo '$(srcdir)/'`lib/msvc-inval.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-msvc-inval.Tpo lib/$(DEPDIR)/libbison_a-msvc-inval.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/msvc-inval.c' object='lib/libbison_a-msvc-inval.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-msvc-inval.o `test -f 'lib/msvc-inval.c' || echo '$(srcdir)/'`lib/msvc-inval.c
+
+lib/libbison_a-msvc-inval.obj: lib/msvc-inval.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-msvc-inval.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-msvc-inval.Tpo -c -o lib/libbison_a-msvc-inval.obj `if test -f 'lib/msvc-inval.c'; then $(CYGPATH_W) 'lib/msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/lib/msvc-inval.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-msvc-inval.Tpo lib/$(DEPDIR)/libbison_a-msvc-inval.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/msvc-inval.c' object='lib/libbison_a-msvc-inval.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-msvc-inval.obj `if test -f 'lib/msvc-inval.c'; then $(CYGPATH_W) 'lib/msvc-inval.c'; else $(CYGPATH_W) '$(srcdir)/lib/msvc-inval.c'; fi`
+
+lib/libbison_a-msvc-nothrow.o: lib/msvc-nothrow.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-msvc-nothrow.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-msvc-nothrow.Tpo -c -o lib/libbison_a-msvc-nothrow.o `test -f 'lib/msvc-nothrow.c' || echo '$(srcdir)/'`lib/msvc-nothrow.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-msvc-nothrow.Tpo lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/msvc-nothrow.c' object='lib/libbison_a-msvc-nothrow.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-msvc-nothrow.o `test -f 'lib/msvc-nothrow.c' || echo '$(srcdir)/'`lib/msvc-nothrow.c
+
+lib/libbison_a-msvc-nothrow.obj: lib/msvc-nothrow.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-msvc-nothrow.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-msvc-nothrow.Tpo -c -o lib/libbison_a-msvc-nothrow.obj `if test -f 'lib/msvc-nothrow.c'; then $(CYGPATH_W) 'lib/msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/lib/msvc-nothrow.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-msvc-nothrow.Tpo lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/msvc-nothrow.c' object='lib/libbison_a-msvc-nothrow.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-msvc-nothrow.obj `if test -f 'lib/msvc-nothrow.c'; then $(CYGPATH_W) 'lib/msvc-nothrow.c'; else $(CYGPATH_W) '$(srcdir)/lib/msvc-nothrow.c'; fi`
+
+lib/libbison_a-obstack.o: lib/obstack.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-obstack.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-obstack.Tpo -c -o lib/libbison_a-obstack.o `test -f 'lib/obstack.c' || echo '$(srcdir)/'`lib/obstack.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-obstack.Tpo lib/$(DEPDIR)/libbison_a-obstack.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/obstack.c' object='lib/libbison_a-obstack.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-obstack.o `test -f 'lib/obstack.c' || echo '$(srcdir)/'`lib/obstack.c
+
+lib/libbison_a-obstack.obj: lib/obstack.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-obstack.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-obstack.Tpo -c -o lib/libbison_a-obstack.obj `if test -f 'lib/obstack.c'; then $(CYGPATH_W) 'lib/obstack.c'; else $(CYGPATH_W) '$(srcdir)/lib/obstack.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-obstack.Tpo lib/$(DEPDIR)/libbison_a-obstack.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/obstack.c' object='lib/libbison_a-obstack.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-obstack.obj `if test -f 'lib/obstack.c'; then $(CYGPATH_W) 'lib/obstack.c'; else $(CYGPATH_W) '$(srcdir)/lib/obstack.c'; fi`
+
+lib/libbison_a-obstack_printf.o: lib/obstack_printf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-obstack_printf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-obstack_printf.Tpo -c -o lib/libbison_a-obstack_printf.o `test -f 'lib/obstack_printf.c' || echo '$(srcdir)/'`lib/obstack_printf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-obstack_printf.Tpo lib/$(DEPDIR)/libbison_a-obstack_printf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/obstack_printf.c' object='lib/libbison_a-obstack_printf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-obstack_printf.o `test -f 'lib/obstack_printf.c' || echo '$(srcdir)/'`lib/obstack_printf.c
+
+lib/libbison_a-obstack_printf.obj: lib/obstack_printf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-obstack_printf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-obstack_printf.Tpo -c -o lib/libbison_a-obstack_printf.obj `if test -f 'lib/obstack_printf.c'; then $(CYGPATH_W) 'lib/obstack_printf.c'; else $(CYGPATH_W) '$(srcdir)/lib/obstack_printf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-obstack_printf.Tpo lib/$(DEPDIR)/libbison_a-obstack_printf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/obstack_printf.c' object='lib/libbison_a-obstack_printf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-obstack_printf.obj `if test -f 'lib/obstack_printf.c'; then $(CYGPATH_W) 'lib/obstack_printf.c'; else $(CYGPATH_W) '$(srcdir)/lib/obstack_printf.c'; fi`
+
+lib/libbison_a-open.o: lib/open.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-open.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-open.Tpo -c -o lib/libbison_a-open.o `test -f 'lib/open.c' || echo '$(srcdir)/'`lib/open.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-open.Tpo lib/$(DEPDIR)/libbison_a-open.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/open.c' object='lib/libbison_a-open.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-open.o `test -f 'lib/open.c' || echo '$(srcdir)/'`lib/open.c
+
+lib/libbison_a-open.obj: lib/open.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-open.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-open.Tpo -c -o lib/libbison_a-open.obj `if test -f 'lib/open.c'; then $(CYGPATH_W) 'lib/open.c'; else $(CYGPATH_W) '$(srcdir)/lib/open.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-open.Tpo lib/$(DEPDIR)/libbison_a-open.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/open.c' object='lib/libbison_a-open.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-open.obj `if test -f 'lib/open.c'; then $(CYGPATH_W) 'lib/open.c'; else $(CYGPATH_W) '$(srcdir)/lib/open.c'; fi`
+
+lib/libbison_a-perror.o: lib/perror.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-perror.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-perror.Tpo -c -o lib/libbison_a-perror.o `test -f 'lib/perror.c' || echo '$(srcdir)/'`lib/perror.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-perror.Tpo lib/$(DEPDIR)/libbison_a-perror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/perror.c' object='lib/libbison_a-perror.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-perror.o `test -f 'lib/perror.c' || echo '$(srcdir)/'`lib/perror.c
+
+lib/libbison_a-perror.obj: lib/perror.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-perror.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-perror.Tpo -c -o lib/libbison_a-perror.obj `if test -f 'lib/perror.c'; then $(CYGPATH_W) 'lib/perror.c'; else $(CYGPATH_W) '$(srcdir)/lib/perror.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-perror.Tpo lib/$(DEPDIR)/libbison_a-perror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/perror.c' object='lib/libbison_a-perror.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-perror.obj `if test -f 'lib/perror.c'; then $(CYGPATH_W) 'lib/perror.c'; else $(CYGPATH_W) '$(srcdir)/lib/perror.c'; fi`
+
+lib/libbison_a-spawni.o: lib/spawni.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawni.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawni.Tpo -c -o lib/libbison_a-spawni.o `test -f 'lib/spawni.c' || echo '$(srcdir)/'`lib/spawni.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawni.Tpo lib/$(DEPDIR)/libbison_a-spawni.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawni.c' object='lib/libbison_a-spawni.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawni.o `test -f 'lib/spawni.c' || echo '$(srcdir)/'`lib/spawni.c
+
+lib/libbison_a-spawni.obj: lib/spawni.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawni.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawni.Tpo -c -o lib/libbison_a-spawni.obj `if test -f 'lib/spawni.c'; then $(CYGPATH_W) 'lib/spawni.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawni.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawni.Tpo lib/$(DEPDIR)/libbison_a-spawni.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawni.c' object='lib/libbison_a-spawni.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawni.obj `if test -f 'lib/spawni.c'; then $(CYGPATH_W) 'lib/spawni.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawni.c'; fi`
+
+lib/libbison_a-spawn_faction_addclose.o: lib/spawn_faction_addclose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_addclose.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Tpo -c -o lib/libbison_a-spawn_faction_addclose.o `test -f 'lib/spawn_faction_addclose.c' || echo '$(srcdir)/'`lib/spawn_faction_addclose.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_addclose.c' object='lib/libbison_a-spawn_faction_addclose.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_addclose.o `test -f 'lib/spawn_faction_addclose.c' || echo '$(srcdir)/'`lib/spawn_faction_addclose.c
+
+lib/libbison_a-spawn_faction_addclose.obj: lib/spawn_faction_addclose.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_addclose.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Tpo -c -o lib/libbison_a-spawn_faction_addclose.obj `if test -f 'lib/spawn_faction_addclose.c'; then $(CYGPATH_W) 'lib/spawn_faction_addclose.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_addclose.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_addclose.c' object='lib/libbison_a-spawn_faction_addclose.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_addclose.obj `if test -f 'lib/spawn_faction_addclose.c'; then $(CYGPATH_W) 'lib/spawn_faction_addclose.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_addclose.c'; fi`
+
+lib/libbison_a-spawn_faction_adddup2.o: lib/spawn_faction_adddup2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_adddup2.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Tpo -c -o lib/libbison_a-spawn_faction_adddup2.o `test -f 'lib/spawn_faction_adddup2.c' || echo '$(srcdir)/'`lib/spawn_faction_adddup2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_adddup2.c' object='lib/libbison_a-spawn_faction_adddup2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_adddup2.o `test -f 'lib/spawn_faction_adddup2.c' || echo '$(srcdir)/'`lib/spawn_faction_adddup2.c
+
+lib/libbison_a-spawn_faction_adddup2.obj: lib/spawn_faction_adddup2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_adddup2.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Tpo -c -o lib/libbison_a-spawn_faction_adddup2.obj `if test -f 'lib/spawn_faction_adddup2.c'; then $(CYGPATH_W) 'lib/spawn_faction_adddup2.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_adddup2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_adddup2.c' object='lib/libbison_a-spawn_faction_adddup2.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_adddup2.obj `if test -f 'lib/spawn_faction_adddup2.c'; then $(CYGPATH_W) 'lib/spawn_faction_adddup2.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_adddup2.c'; fi`
+
+lib/libbison_a-spawn_faction_addopen.o: lib/spawn_faction_addopen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_addopen.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Tpo -c -o lib/libbison_a-spawn_faction_addopen.o `test -f 'lib/spawn_faction_addopen.c' || echo '$(srcdir)/'`lib/spawn_faction_addopen.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_addopen.c' object='lib/libbison_a-spawn_faction_addopen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_addopen.o `test -f 'lib/spawn_faction_addopen.c' || echo '$(srcdir)/'`lib/spawn_faction_addopen.c
+
+lib/libbison_a-spawn_faction_addopen.obj: lib/spawn_faction_addopen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_addopen.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Tpo -c -o lib/libbison_a-spawn_faction_addopen.obj `if test -f 'lib/spawn_faction_addopen.c'; then $(CYGPATH_W) 'lib/spawn_faction_addopen.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_addopen.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_addopen.c' object='lib/libbison_a-spawn_faction_addopen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_addopen.obj `if test -f 'lib/spawn_faction_addopen.c'; then $(CYGPATH_W) 'lib/spawn_faction_addopen.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_addopen.c'; fi`
+
+lib/libbison_a-spawn_faction_destroy.o: lib/spawn_faction_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_destroy.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Tpo -c -o lib/libbison_a-spawn_faction_destroy.o `test -f 'lib/spawn_faction_destroy.c' || echo '$(srcdir)/'`lib/spawn_faction_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_destroy.c' object='lib/libbison_a-spawn_faction_destroy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_destroy.o `test -f 'lib/spawn_faction_destroy.c' || echo '$(srcdir)/'`lib/spawn_faction_destroy.c
+
+lib/libbison_a-spawn_faction_destroy.obj: lib/spawn_faction_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_destroy.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Tpo -c -o lib/libbison_a-spawn_faction_destroy.obj `if test -f 'lib/spawn_faction_destroy.c'; then $(CYGPATH_W) 'lib/spawn_faction_destroy.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_destroy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_destroy.c' object='lib/libbison_a-spawn_faction_destroy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_destroy.obj `if test -f 'lib/spawn_faction_destroy.c'; then $(CYGPATH_W) 'lib/spawn_faction_destroy.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_destroy.c'; fi`
+
+lib/libbison_a-spawn_faction_init.o: lib/spawn_faction_init.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_init.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_init.Tpo -c -o lib/libbison_a-spawn_faction_init.o `test -f 'lib/spawn_faction_init.c' || echo '$(srcdir)/'`lib/spawn_faction_init.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_init.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_init.c' object='lib/libbison_a-spawn_faction_init.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_init.o `test -f 'lib/spawn_faction_init.c' || echo '$(srcdir)/'`lib/spawn_faction_init.c
+
+lib/libbison_a-spawn_faction_init.obj: lib/spawn_faction_init.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawn_faction_init.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawn_faction_init.Tpo -c -o lib/libbison_a-spawn_faction_init.obj `if test -f 'lib/spawn_faction_init.c'; then $(CYGPATH_W) 'lib/spawn_faction_init.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_init.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawn_faction_init.Tpo lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawn_faction_init.c' object='lib/libbison_a-spawn_faction_init.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawn_faction_init.obj `if test -f 'lib/spawn_faction_init.c'; then $(CYGPATH_W) 'lib/spawn_faction_init.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawn_faction_init.c'; fi`
+
+lib/libbison_a-spawnattr_destroy.o: lib/spawnattr_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_destroy.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Tpo -c -o lib/libbison_a-spawnattr_destroy.o `test -f 'lib/spawnattr_destroy.c' || echo '$(srcdir)/'`lib/spawnattr_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_destroy.c' object='lib/libbison_a-spawnattr_destroy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_destroy.o `test -f 'lib/spawnattr_destroy.c' || echo '$(srcdir)/'`lib/spawnattr_destroy.c
+
+lib/libbison_a-spawnattr_destroy.obj: lib/spawnattr_destroy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_destroy.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Tpo -c -o lib/libbison_a-spawnattr_destroy.obj `if test -f 'lib/spawnattr_destroy.c'; then $(CYGPATH_W) 'lib/spawnattr_destroy.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_destroy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_destroy.c' object='lib/libbison_a-spawnattr_destroy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_destroy.obj `if test -f 'lib/spawnattr_destroy.c'; then $(CYGPATH_W) 'lib/spawnattr_destroy.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_destroy.c'; fi`
+
+lib/libbison_a-spawnattr_init.o: lib/spawnattr_init.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_init.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_init.Tpo -c -o lib/libbison_a-spawnattr_init.o `test -f 'lib/spawnattr_init.c' || echo '$(srcdir)/'`lib/spawnattr_init.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_init.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_init.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_init.c' object='lib/libbison_a-spawnattr_init.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_init.o `test -f 'lib/spawnattr_init.c' || echo '$(srcdir)/'`lib/spawnattr_init.c
+
+lib/libbison_a-spawnattr_init.obj: lib/spawnattr_init.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_init.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_init.Tpo -c -o lib/libbison_a-spawnattr_init.obj `if test -f 'lib/spawnattr_init.c'; then $(CYGPATH_W) 'lib/spawnattr_init.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_init.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_init.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_init.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_init.c' object='lib/libbison_a-spawnattr_init.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_init.obj `if test -f 'lib/spawnattr_init.c'; then $(CYGPATH_W) 'lib/spawnattr_init.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_init.c'; fi`
+
+lib/libbison_a-spawnattr_setflags.o: lib/spawnattr_setflags.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_setflags.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Tpo -c -o lib/libbison_a-spawnattr_setflags.o `test -f 'lib/spawnattr_setflags.c' || echo '$(srcdir)/'`lib/spawnattr_setflags.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_setflags.c' object='lib/libbison_a-spawnattr_setflags.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_setflags.o `test -f 'lib/spawnattr_setflags.c' || echo '$(srcdir)/'`lib/spawnattr_setflags.c
+
+lib/libbison_a-spawnattr_setflags.obj: lib/spawnattr_setflags.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_setflags.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Tpo -c -o lib/libbison_a-spawnattr_setflags.obj `if test -f 'lib/spawnattr_setflags.c'; then $(CYGPATH_W) 'lib/spawnattr_setflags.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_setflags.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_setflags.c' object='lib/libbison_a-spawnattr_setflags.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_setflags.obj `if test -f 'lib/spawnattr_setflags.c'; then $(CYGPATH_W) 'lib/spawnattr_setflags.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_setflags.c'; fi`
+
+lib/libbison_a-spawnattr_setsigmask.o: lib/spawnattr_setsigmask.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_setsigmask.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Tpo -c -o lib/libbison_a-spawnattr_setsigmask.o `test -f 'lib/spawnattr_setsigmask.c' || echo '$(srcdir)/'`lib/spawnattr_setsigmask.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_setsigmask.c' object='lib/libbison_a-spawnattr_setsigmask.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_setsigmask.o `test -f 'lib/spawnattr_setsigmask.c' || echo '$(srcdir)/'`lib/spawnattr_setsigmask.c
+
+lib/libbison_a-spawnattr_setsigmask.obj: lib/spawnattr_setsigmask.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnattr_setsigmask.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Tpo -c -o lib/libbison_a-spawnattr_setsigmask.obj `if test -f 'lib/spawnattr_setsigmask.c'; then $(CYGPATH_W) 'lib/spawnattr_setsigmask.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_setsigmask.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Tpo lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnattr_setsigmask.c' object='lib/libbison_a-spawnattr_setsigmask.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnattr_setsigmask.obj `if test -f 'lib/spawnattr_setsigmask.c'; then $(CYGPATH_W) 'lib/spawnattr_setsigmask.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnattr_setsigmask.c'; fi`
+
+lib/libbison_a-spawnp.o: lib/spawnp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnp.Tpo -c -o lib/libbison_a-spawnp.o `test -f 'lib/spawnp.c' || echo '$(srcdir)/'`lib/spawnp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnp.Tpo lib/$(DEPDIR)/libbison_a-spawnp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnp.c' object='lib/libbison_a-spawnp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnp.o `test -f 'lib/spawnp.c' || echo '$(srcdir)/'`lib/spawnp.c
+
+lib/libbison_a-spawnp.obj: lib/spawnp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-spawnp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-spawnp.Tpo -c -o lib/libbison_a-spawnp.obj `if test -f 'lib/spawnp.c'; then $(CYGPATH_W) 'lib/spawnp.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-spawnp.Tpo lib/$(DEPDIR)/libbison_a-spawnp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spawnp.c' object='lib/libbison_a-spawnp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-spawnp.obj `if test -f 'lib/spawnp.c'; then $(CYGPATH_W) 'lib/spawnp.c'; else $(CYGPATH_W) '$(srcdir)/lib/spawnp.c'; fi`
+
+lib/libbison_a-printf.o: lib/printf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf.Tpo -c -o lib/libbison_a-printf.o `test -f 'lib/printf.c' || echo '$(srcdir)/'`lib/printf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf.Tpo lib/$(DEPDIR)/libbison_a-printf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf.c' object='lib/libbison_a-printf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf.o `test -f 'lib/printf.c' || echo '$(srcdir)/'`lib/printf.c
+
+lib/libbison_a-printf.obj: lib/printf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf.Tpo -c -o lib/libbison_a-printf.obj `if test -f 'lib/printf.c'; then $(CYGPATH_W) 'lib/printf.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf.Tpo lib/$(DEPDIR)/libbison_a-printf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf.c' object='lib/libbison_a-printf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf.obj `if test -f 'lib/printf.c'; then $(CYGPATH_W) 'lib/printf.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf.c'; fi`
+
+lib/libbison_a-raise.o: lib/raise.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-raise.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-raise.Tpo -c -o lib/libbison_a-raise.o `test -f 'lib/raise.c' || echo '$(srcdir)/'`lib/raise.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-raise.Tpo lib/$(DEPDIR)/libbison_a-raise.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/raise.c' object='lib/libbison_a-raise.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-raise.o `test -f 'lib/raise.c' || echo '$(srcdir)/'`lib/raise.c
+
+lib/libbison_a-raise.obj: lib/raise.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-raise.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-raise.Tpo -c -o lib/libbison_a-raise.obj `if test -f 'lib/raise.c'; then $(CYGPATH_W) 'lib/raise.c'; else $(CYGPATH_W) '$(srcdir)/lib/raise.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-raise.Tpo lib/$(DEPDIR)/libbison_a-raise.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/raise.c' object='lib/libbison_a-raise.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-raise.obj `if test -f 'lib/raise.c'; then $(CYGPATH_W) 'lib/raise.c'; else $(CYGPATH_W) '$(srcdir)/lib/raise.c'; fi`
+
+lib/libbison_a-rawmemchr.o: lib/rawmemchr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rawmemchr.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-rawmemchr.Tpo -c -o lib/libbison_a-rawmemchr.o `test -f 'lib/rawmemchr.c' || echo '$(srcdir)/'`lib/rawmemchr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rawmemchr.Tpo lib/$(DEPDIR)/libbison_a-rawmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rawmemchr.c' object='lib/libbison_a-rawmemchr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rawmemchr.o `test -f 'lib/rawmemchr.c' || echo '$(srcdir)/'`lib/rawmemchr.c
+
+lib/libbison_a-rawmemchr.obj: lib/rawmemchr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rawmemchr.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-rawmemchr.Tpo -c -o lib/libbison_a-rawmemchr.obj `if test -f 'lib/rawmemchr.c'; then $(CYGPATH_W) 'lib/rawmemchr.c'; else $(CYGPATH_W) '$(srcdir)/lib/rawmemchr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rawmemchr.Tpo lib/$(DEPDIR)/libbison_a-rawmemchr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rawmemchr.c' object='lib/libbison_a-rawmemchr.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rawmemchr.obj `if test -f 'lib/rawmemchr.c'; then $(CYGPATH_W) 'lib/rawmemchr.c'; else $(CYGPATH_W) '$(srcdir)/lib/rawmemchr.c'; fi`
+
+lib/libbison_a-readlink.o: lib/readlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-readlink.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-readlink.Tpo -c -o lib/libbison_a-readlink.o `test -f 'lib/readlink.c' || echo '$(srcdir)/'`lib/readlink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-readlink.Tpo lib/$(DEPDIR)/libbison_a-readlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/readlink.c' object='lib/libbison_a-readlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-readlink.o `test -f 'lib/readlink.c' || echo '$(srcdir)/'`lib/readlink.c
+
+lib/libbison_a-readlink.obj: lib/readlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-readlink.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-readlink.Tpo -c -o lib/libbison_a-readlink.obj `if test -f 'lib/readlink.c'; then $(CYGPATH_W) 'lib/readlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/readlink.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-readlink.Tpo lib/$(DEPDIR)/libbison_a-readlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/readlink.c' object='lib/libbison_a-readlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-readlink.obj `if test -f 'lib/readlink.c'; then $(CYGPATH_W) 'lib/readlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/readlink.c'; fi`
+
+lib/libbison_a-realloc.o: lib/realloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-realloc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-realloc.Tpo -c -o lib/libbison_a-realloc.o `test -f 'lib/realloc.c' || echo '$(srcdir)/'`lib/realloc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-realloc.Tpo lib/$(DEPDIR)/libbison_a-realloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/realloc.c' object='lib/libbison_a-realloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-realloc.o `test -f 'lib/realloc.c' || echo '$(srcdir)/'`lib/realloc.c
+
+lib/libbison_a-realloc.obj: lib/realloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-realloc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-realloc.Tpo -c -o lib/libbison_a-realloc.obj `if test -f 'lib/realloc.c'; then $(CYGPATH_W) 'lib/realloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/realloc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-realloc.Tpo lib/$(DEPDIR)/libbison_a-realloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/realloc.c' object='lib/libbison_a-realloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-realloc.obj `if test -f 'lib/realloc.c'; then $(CYGPATH_W) 'lib/realloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/realloc.c'; fi`
+
+lib/libbison_a-progreloc.o: lib/progreloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-progreloc.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-progreloc.Tpo -c -o lib/libbison_a-progreloc.o `test -f 'lib/progreloc.c' || echo '$(srcdir)/'`lib/progreloc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-progreloc.Tpo lib/$(DEPDIR)/libbison_a-progreloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/progreloc.c' object='lib/libbison_a-progreloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-progreloc.o `test -f 'lib/progreloc.c' || echo '$(srcdir)/'`lib/progreloc.c
+
+lib/libbison_a-progreloc.obj: lib/progreloc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-progreloc.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-progreloc.Tpo -c -o lib/libbison_a-progreloc.obj `if test -f 'lib/progreloc.c'; then $(CYGPATH_W) 'lib/progreloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/progreloc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-progreloc.Tpo lib/$(DEPDIR)/libbison_a-progreloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/progreloc.c' object='lib/libbison_a-progreloc.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-progreloc.obj `if test -f 'lib/progreloc.c'; then $(CYGPATH_W) 'lib/progreloc.c'; else $(CYGPATH_W) '$(srcdir)/lib/progreloc.c'; fi`
+
+lib/libbison_a-relocatable.o: lib/relocatable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-relocatable.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-relocatable.Tpo -c -o lib/libbison_a-relocatable.o `test -f 'lib/relocatable.c' || echo '$(srcdir)/'`lib/relocatable.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-relocatable.Tpo lib/$(DEPDIR)/libbison_a-relocatable.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/relocatable.c' object='lib/libbison_a-relocatable.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-relocatable.o `test -f 'lib/relocatable.c' || echo '$(srcdir)/'`lib/relocatable.c
+
+lib/libbison_a-relocatable.obj: lib/relocatable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-relocatable.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-relocatable.Tpo -c -o lib/libbison_a-relocatable.obj `if test -f 'lib/relocatable.c'; then $(CYGPATH_W) 'lib/relocatable.c'; else $(CYGPATH_W) '$(srcdir)/lib/relocatable.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-relocatable.Tpo lib/$(DEPDIR)/libbison_a-relocatable.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/relocatable.c' object='lib/libbison_a-relocatable.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-relocatable.obj `if test -f 'lib/relocatable.c'; then $(CYGPATH_W) 'lib/relocatable.c'; else $(CYGPATH_W) '$(srcdir)/lib/relocatable.c'; fi`
+
+lib/libbison_a-rename.o: lib/rename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rename.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-rename.Tpo -c -o lib/libbison_a-rename.o `test -f 'lib/rename.c' || echo '$(srcdir)/'`lib/rename.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rename.Tpo lib/$(DEPDIR)/libbison_a-rename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rename.c' object='lib/libbison_a-rename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rename.o `test -f 'lib/rename.c' || echo '$(srcdir)/'`lib/rename.c
+
+lib/libbison_a-rename.obj: lib/rename.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rename.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-rename.Tpo -c -o lib/libbison_a-rename.obj `if test -f 'lib/rename.c'; then $(CYGPATH_W) 'lib/rename.c'; else $(CYGPATH_W) '$(srcdir)/lib/rename.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rename.Tpo lib/$(DEPDIR)/libbison_a-rename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rename.c' object='lib/libbison_a-rename.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rename.obj `if test -f 'lib/rename.c'; then $(CYGPATH_W) 'lib/rename.c'; else $(CYGPATH_W) '$(srcdir)/lib/rename.c'; fi`
+
+lib/libbison_a-rmdir.o: lib/rmdir.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rmdir.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-rmdir.Tpo -c -o lib/libbison_a-rmdir.o `test -f 'lib/rmdir.c' || echo '$(srcdir)/'`lib/rmdir.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rmdir.Tpo lib/$(DEPDIR)/libbison_a-rmdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rmdir.c' object='lib/libbison_a-rmdir.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rmdir.o `test -f 'lib/rmdir.c' || echo '$(srcdir)/'`lib/rmdir.c
+
+lib/libbison_a-rmdir.obj: lib/rmdir.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-rmdir.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-rmdir.Tpo -c -o lib/libbison_a-rmdir.obj `if test -f 'lib/rmdir.c'; then $(CYGPATH_W) 'lib/rmdir.c'; else $(CYGPATH_W) '$(srcdir)/lib/rmdir.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-rmdir.Tpo lib/$(DEPDIR)/libbison_a-rmdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rmdir.c' object='lib/libbison_a-rmdir.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-rmdir.obj `if test -f 'lib/rmdir.c'; then $(CYGPATH_W) 'lib/rmdir.c'; else $(CYGPATH_W) '$(srcdir)/lib/rmdir.c'; fi`
+
+lib/libbison_a-sigaction.o: lib/sigaction.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sigaction.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-sigaction.Tpo -c -o lib/libbison_a-sigaction.o `test -f 'lib/sigaction.c' || echo '$(srcdir)/'`lib/sigaction.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sigaction.Tpo lib/$(DEPDIR)/libbison_a-sigaction.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sigaction.c' object='lib/libbison_a-sigaction.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sigaction.o `test -f 'lib/sigaction.c' || echo '$(srcdir)/'`lib/sigaction.c
+
+lib/libbison_a-sigaction.obj: lib/sigaction.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sigaction.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-sigaction.Tpo -c -o lib/libbison_a-sigaction.obj `if test -f 'lib/sigaction.c'; then $(CYGPATH_W) 'lib/sigaction.c'; else $(CYGPATH_W) '$(srcdir)/lib/sigaction.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sigaction.Tpo lib/$(DEPDIR)/libbison_a-sigaction.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sigaction.c' object='lib/libbison_a-sigaction.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sigaction.obj `if test -f 'lib/sigaction.c'; then $(CYGPATH_W) 'lib/sigaction.c'; else $(CYGPATH_W) '$(srcdir)/lib/sigaction.c'; fi`
+
+lib/libbison_a-signbitd.o: lib/signbitd.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitd.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitd.Tpo -c -o lib/libbison_a-signbitd.o `test -f 'lib/signbitd.c' || echo '$(srcdir)/'`lib/signbitd.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitd.Tpo lib/$(DEPDIR)/libbison_a-signbitd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitd.c' object='lib/libbison_a-signbitd.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitd.o `test -f 'lib/signbitd.c' || echo '$(srcdir)/'`lib/signbitd.c
+
+lib/libbison_a-signbitd.obj: lib/signbitd.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitd.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitd.Tpo -c -o lib/libbison_a-signbitd.obj `if test -f 'lib/signbitd.c'; then $(CYGPATH_W) 'lib/signbitd.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitd.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitd.Tpo lib/$(DEPDIR)/libbison_a-signbitd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitd.c' object='lib/libbison_a-signbitd.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitd.obj `if test -f 'lib/signbitd.c'; then $(CYGPATH_W) 'lib/signbitd.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitd.c'; fi`
+
+lib/libbison_a-signbitf.o: lib/signbitf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitf.Tpo -c -o lib/libbison_a-signbitf.o `test -f 'lib/signbitf.c' || echo '$(srcdir)/'`lib/signbitf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitf.Tpo lib/$(DEPDIR)/libbison_a-signbitf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitf.c' object='lib/libbison_a-signbitf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitf.o `test -f 'lib/signbitf.c' || echo '$(srcdir)/'`lib/signbitf.c
+
+lib/libbison_a-signbitf.obj: lib/signbitf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitf.Tpo -c -o lib/libbison_a-signbitf.obj `if test -f 'lib/signbitf.c'; then $(CYGPATH_W) 'lib/signbitf.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitf.Tpo lib/$(DEPDIR)/libbison_a-signbitf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitf.c' object='lib/libbison_a-signbitf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitf.obj `if test -f 'lib/signbitf.c'; then $(CYGPATH_W) 'lib/signbitf.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitf.c'; fi`
+
+lib/libbison_a-signbitl.o: lib/signbitl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitl.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitl.Tpo -c -o lib/libbison_a-signbitl.o `test -f 'lib/signbitl.c' || echo '$(srcdir)/'`lib/signbitl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitl.Tpo lib/$(DEPDIR)/libbison_a-signbitl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitl.c' object='lib/libbison_a-signbitl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitl.o `test -f 'lib/signbitl.c' || echo '$(srcdir)/'`lib/signbitl.c
+
+lib/libbison_a-signbitl.obj: lib/signbitl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-signbitl.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-signbitl.Tpo -c -o lib/libbison_a-signbitl.obj `if test -f 'lib/signbitl.c'; then $(CYGPATH_W) 'lib/signbitl.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitl.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-signbitl.Tpo lib/$(DEPDIR)/libbison_a-signbitl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/signbitl.c' object='lib/libbison_a-signbitl.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-signbitl.obj `if test -f 'lib/signbitl.c'; then $(CYGPATH_W) 'lib/signbitl.c'; else $(CYGPATH_W) '$(srcdir)/lib/signbitl.c'; fi`
+
+lib/libbison_a-sigprocmask.o: lib/sigprocmask.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sigprocmask.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-sigprocmask.Tpo -c -o lib/libbison_a-sigprocmask.o `test -f 'lib/sigprocmask.c' || echo '$(srcdir)/'`lib/sigprocmask.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sigprocmask.Tpo lib/$(DEPDIR)/libbison_a-sigprocmask.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sigprocmask.c' object='lib/libbison_a-sigprocmask.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sigprocmask.o `test -f 'lib/sigprocmask.c' || echo '$(srcdir)/'`lib/sigprocmask.c
+
+lib/libbison_a-sigprocmask.obj: lib/sigprocmask.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sigprocmask.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-sigprocmask.Tpo -c -o lib/libbison_a-sigprocmask.obj `if test -f 'lib/sigprocmask.c'; then $(CYGPATH_W) 'lib/sigprocmask.c'; else $(CYGPATH_W) '$(srcdir)/lib/sigprocmask.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sigprocmask.Tpo lib/$(DEPDIR)/libbison_a-sigprocmask.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sigprocmask.c' object='lib/libbison_a-sigprocmask.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sigprocmask.obj `if test -f 'lib/sigprocmask.c'; then $(CYGPATH_W) 'lib/sigprocmask.c'; else $(CYGPATH_W) '$(srcdir)/lib/sigprocmask.c'; fi`
+
+lib/libbison_a-snprintf.o: lib/snprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-snprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-snprintf.Tpo -c -o lib/libbison_a-snprintf.o `test -f 'lib/snprintf.c' || echo '$(srcdir)/'`lib/snprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-snprintf.Tpo lib/$(DEPDIR)/libbison_a-snprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/snprintf.c' object='lib/libbison_a-snprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-snprintf.o `test -f 'lib/snprintf.c' || echo '$(srcdir)/'`lib/snprintf.c
+
+lib/libbison_a-snprintf.obj: lib/snprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-snprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-snprintf.Tpo -c -o lib/libbison_a-snprintf.obj `if test -f 'lib/snprintf.c'; then $(CYGPATH_W) 'lib/snprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/snprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-snprintf.Tpo lib/$(DEPDIR)/libbison_a-snprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/snprintf.c' object='lib/libbison_a-snprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-snprintf.obj `if test -f 'lib/snprintf.c'; then $(CYGPATH_W) 'lib/snprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/snprintf.c'; fi`
+
+lib/libbison_a-sprintf.o: lib/sprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-sprintf.Tpo -c -o lib/libbison_a-sprintf.o `test -f 'lib/sprintf.c' || echo '$(srcdir)/'`lib/sprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sprintf.Tpo lib/$(DEPDIR)/libbison_a-sprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sprintf.c' object='lib/libbison_a-sprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sprintf.o `test -f 'lib/sprintf.c' || echo '$(srcdir)/'`lib/sprintf.c
+
+lib/libbison_a-sprintf.obj: lib/sprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-sprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-sprintf.Tpo -c -o lib/libbison_a-sprintf.obj `if test -f 'lib/sprintf.c'; then $(CYGPATH_W) 'lib/sprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/sprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-sprintf.Tpo lib/$(DEPDIR)/libbison_a-sprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sprintf.c' object='lib/libbison_a-sprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-sprintf.obj `if test -f 'lib/sprintf.c'; then $(CYGPATH_W) 'lib/sprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/sprintf.c'; fi`
+
+lib/libbison_a-stat.o: lib/stat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat.Tpo -c -o lib/libbison_a-stat.o `test -f 'lib/stat.c' || echo '$(srcdir)/'`lib/stat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat.Tpo lib/$(DEPDIR)/libbison_a-stat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat.c' object='lib/libbison_a-stat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat.o `test -f 'lib/stat.c' || echo '$(srcdir)/'`lib/stat.c
+
+lib/libbison_a-stat.obj: lib/stat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stat.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-stat.Tpo -c -o lib/libbison_a-stat.obj `if test -f 'lib/stat.c'; then $(CYGPATH_W) 'lib/stat.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stat.Tpo lib/$(DEPDIR)/libbison_a-stat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stat.c' object='lib/libbison_a-stat.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stat.obj `if test -f 'lib/stat.c'; then $(CYGPATH_W) 'lib/stat.c'; else $(CYGPATH_W) '$(srcdir)/lib/stat.c'; fi`
+
+lib/libbison_a-stpcpy.o: lib/stpcpy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stpcpy.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-stpcpy.Tpo -c -o lib/libbison_a-stpcpy.o `test -f 'lib/stpcpy.c' || echo '$(srcdir)/'`lib/stpcpy.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stpcpy.Tpo lib/$(DEPDIR)/libbison_a-stpcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stpcpy.c' object='lib/libbison_a-stpcpy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stpcpy.o `test -f 'lib/stpcpy.c' || echo '$(srcdir)/'`lib/stpcpy.c
+
+lib/libbison_a-stpcpy.obj: lib/stpcpy.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-stpcpy.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-stpcpy.Tpo -c -o lib/libbison_a-stpcpy.obj `if test -f 'lib/stpcpy.c'; then $(CYGPATH_W) 'lib/stpcpy.c'; else $(CYGPATH_W) '$(srcdir)/lib/stpcpy.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-stpcpy.Tpo lib/$(DEPDIR)/libbison_a-stpcpy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/stpcpy.c' object='lib/libbison_a-stpcpy.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-stpcpy.obj `if test -f 'lib/stpcpy.c'; then $(CYGPATH_W) 'lib/stpcpy.c'; else $(CYGPATH_W) '$(srcdir)/lib/stpcpy.c'; fi`
+
+lib/libbison_a-strchrnul.o: lib/strchrnul.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strchrnul.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strchrnul.Tpo -c -o lib/libbison_a-strchrnul.o `test -f 'lib/strchrnul.c' || echo '$(srcdir)/'`lib/strchrnul.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strchrnul.Tpo lib/$(DEPDIR)/libbison_a-strchrnul.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strchrnul.c' object='lib/libbison_a-strchrnul.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strchrnul.o `test -f 'lib/strchrnul.c' || echo '$(srcdir)/'`lib/strchrnul.c
+
+lib/libbison_a-strchrnul.obj: lib/strchrnul.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strchrnul.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strchrnul.Tpo -c -o lib/libbison_a-strchrnul.obj `if test -f 'lib/strchrnul.c'; then $(CYGPATH_W) 'lib/strchrnul.c'; else $(CYGPATH_W) '$(srcdir)/lib/strchrnul.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strchrnul.Tpo lib/$(DEPDIR)/libbison_a-strchrnul.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strchrnul.c' object='lib/libbison_a-strchrnul.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strchrnul.obj `if test -f 'lib/strchrnul.c'; then $(CYGPATH_W) 'lib/strchrnul.c'; else $(CYGPATH_W) '$(srcdir)/lib/strchrnul.c'; fi`
+
+lib/libbison_a-strdup.o: lib/strdup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strdup.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strdup.Tpo -c -o lib/libbison_a-strdup.o `test -f 'lib/strdup.c' || echo '$(srcdir)/'`lib/strdup.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strdup.Tpo lib/$(DEPDIR)/libbison_a-strdup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strdup.c' object='lib/libbison_a-strdup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strdup.o `test -f 'lib/strdup.c' || echo '$(srcdir)/'`lib/strdup.c
+
+lib/libbison_a-strdup.obj: lib/strdup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strdup.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strdup.Tpo -c -o lib/libbison_a-strdup.obj `if test -f 'lib/strdup.c'; then $(CYGPATH_W) 'lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/lib/strdup.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strdup.Tpo lib/$(DEPDIR)/libbison_a-strdup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strdup.c' object='lib/libbison_a-strdup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strdup.obj `if test -f 'lib/strdup.c'; then $(CYGPATH_W) 'lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/lib/strdup.c'; fi`
+
+lib/libbison_a-strerror.o: lib/strerror.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror.Tpo -c -o lib/libbison_a-strerror.o `test -f 'lib/strerror.c' || echo '$(srcdir)/'`lib/strerror.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror.Tpo lib/$(DEPDIR)/libbison_a-strerror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror.c' object='lib/libbison_a-strerror.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror.o `test -f 'lib/strerror.c' || echo '$(srcdir)/'`lib/strerror.c
+
+lib/libbison_a-strerror.obj: lib/strerror.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror.Tpo -c -o lib/libbison_a-strerror.obj `if test -f 'lib/strerror.c'; then $(CYGPATH_W) 'lib/strerror.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror.Tpo lib/$(DEPDIR)/libbison_a-strerror.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror.c' object='lib/libbison_a-strerror.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror.obj `if test -f 'lib/strerror.c'; then $(CYGPATH_W) 'lib/strerror.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror.c'; fi`
+
+lib/libbison_a-strerror-override.o: lib/strerror-override.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror-override.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror-override.Tpo -c -o lib/libbison_a-strerror-override.o `test -f 'lib/strerror-override.c' || echo '$(srcdir)/'`lib/strerror-override.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror-override.Tpo lib/$(DEPDIR)/libbison_a-strerror-override.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror-override.c' object='lib/libbison_a-strerror-override.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror-override.o `test -f 'lib/strerror-override.c' || echo '$(srcdir)/'`lib/strerror-override.c
+
+lib/libbison_a-strerror-override.obj: lib/strerror-override.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror-override.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror-override.Tpo -c -o lib/libbison_a-strerror-override.obj `if test -f 'lib/strerror-override.c'; then $(CYGPATH_W) 'lib/strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror-override.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror-override.Tpo lib/$(DEPDIR)/libbison_a-strerror-override.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror-override.c' object='lib/libbison_a-strerror-override.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror-override.obj `if test -f 'lib/strerror-override.c'; then $(CYGPATH_W) 'lib/strerror-override.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror-override.c'; fi`
+
+lib/libbison_a-strerror_r.o: lib/strerror_r.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror_r.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror_r.Tpo -c -o lib/libbison_a-strerror_r.o `test -f 'lib/strerror_r.c' || echo '$(srcdir)/'`lib/strerror_r.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror_r.Tpo lib/$(DEPDIR)/libbison_a-strerror_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror_r.c' object='lib/libbison_a-strerror_r.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror_r.o `test -f 'lib/strerror_r.c' || echo '$(srcdir)/'`lib/strerror_r.c
+
+lib/libbison_a-strerror_r.obj: lib/strerror_r.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strerror_r.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strerror_r.Tpo -c -o lib/libbison_a-strerror_r.obj `if test -f 'lib/strerror_r.c'; then $(CYGPATH_W) 'lib/strerror_r.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror_r.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strerror_r.Tpo lib/$(DEPDIR)/libbison_a-strerror_r.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strerror_r.c' object='lib/libbison_a-strerror_r.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strerror_r.obj `if test -f 'lib/strerror_r.c'; then $(CYGPATH_W) 'lib/strerror_r.c'; else $(CYGPATH_W) '$(srcdir)/lib/strerror_r.c'; fi`
+
+lib/libbison_a-strndup.o: lib/strndup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strndup.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strndup.Tpo -c -o lib/libbison_a-strndup.o `test -f 'lib/strndup.c' || echo '$(srcdir)/'`lib/strndup.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strndup.Tpo lib/$(DEPDIR)/libbison_a-strndup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strndup.c' object='lib/libbison_a-strndup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strndup.o `test -f 'lib/strndup.c' || echo '$(srcdir)/'`lib/strndup.c
+
+lib/libbison_a-strndup.obj: lib/strndup.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strndup.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strndup.Tpo -c -o lib/libbison_a-strndup.obj `if test -f 'lib/strndup.c'; then $(CYGPATH_W) 'lib/strndup.c'; else $(CYGPATH_W) '$(srcdir)/lib/strndup.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strndup.Tpo lib/$(DEPDIR)/libbison_a-strndup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strndup.c' object='lib/libbison_a-strndup.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strndup.obj `if test -f 'lib/strndup.c'; then $(CYGPATH_W) 'lib/strndup.c'; else $(CYGPATH_W) '$(srcdir)/lib/strndup.c'; fi`
+
+lib/libbison_a-strnlen.o: lib/strnlen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strnlen.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strnlen.Tpo -c -o lib/libbison_a-strnlen.o `test -f 'lib/strnlen.c' || echo '$(srcdir)/'`lib/strnlen.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strnlen.Tpo lib/$(DEPDIR)/libbison_a-strnlen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strnlen.c' object='lib/libbison_a-strnlen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strnlen.o `test -f 'lib/strnlen.c' || echo '$(srcdir)/'`lib/strnlen.c
+
+lib/libbison_a-strnlen.obj: lib/strnlen.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strnlen.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strnlen.Tpo -c -o lib/libbison_a-strnlen.obj `if test -f 'lib/strnlen.c'; then $(CYGPATH_W) 'lib/strnlen.c'; else $(CYGPATH_W) '$(srcdir)/lib/strnlen.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strnlen.Tpo lib/$(DEPDIR)/libbison_a-strnlen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strnlen.c' object='lib/libbison_a-strnlen.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strnlen.obj `if test -f 'lib/strnlen.c'; then $(CYGPATH_W) 'lib/strnlen.c'; else $(CYGPATH_W) '$(srcdir)/lib/strnlen.c'; fi`
+
+lib/libbison_a-strverscmp.o: lib/strverscmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strverscmp.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-strverscmp.Tpo -c -o lib/libbison_a-strverscmp.o `test -f 'lib/strverscmp.c' || echo '$(srcdir)/'`lib/strverscmp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strverscmp.Tpo lib/$(DEPDIR)/libbison_a-strverscmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strverscmp.c' object='lib/libbison_a-strverscmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strverscmp.o `test -f 'lib/strverscmp.c' || echo '$(srcdir)/'`lib/strverscmp.c
+
+lib/libbison_a-strverscmp.obj: lib/strverscmp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-strverscmp.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-strverscmp.Tpo -c -o lib/libbison_a-strverscmp.obj `if test -f 'lib/strverscmp.c'; then $(CYGPATH_W) 'lib/strverscmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/strverscmp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-strverscmp.Tpo lib/$(DEPDIR)/libbison_a-strverscmp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/strverscmp.c' object='lib/libbison_a-strverscmp.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-strverscmp.obj `if test -f 'lib/strverscmp.c'; then $(CYGPATH_W) 'lib/strverscmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/strverscmp.c'; fi`
+
+lib/libbison_a-unlink.o: lib/unlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unlink.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-unlink.Tpo -c -o lib/libbison_a-unlink.o `test -f 'lib/unlink.c' || echo '$(srcdir)/'`lib/unlink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unlink.Tpo lib/$(DEPDIR)/libbison_a-unlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unlink.c' object='lib/libbison_a-unlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unlink.o `test -f 'lib/unlink.c' || echo '$(srcdir)/'`lib/unlink.c
+
+lib/libbison_a-unlink.obj: lib/unlink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unlink.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-unlink.Tpo -c -o lib/libbison_a-unlink.obj `if test -f 'lib/unlink.c'; then $(CYGPATH_W) 'lib/unlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/unlink.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unlink.Tpo lib/$(DEPDIR)/libbison_a-unlink.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unlink.c' object='lib/libbison_a-unlink.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unlink.obj `if test -f 'lib/unlink.c'; then $(CYGPATH_W) 'lib/unlink.c'; else $(CYGPATH_W) '$(srcdir)/lib/unlink.c'; fi`
+
+lib/libbison_a-unsetenv.o: lib/unsetenv.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unsetenv.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-unsetenv.Tpo -c -o lib/libbison_a-unsetenv.o `test -f 'lib/unsetenv.c' || echo '$(srcdir)/'`lib/unsetenv.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unsetenv.Tpo lib/$(DEPDIR)/libbison_a-unsetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unsetenv.c' object='lib/libbison_a-unsetenv.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unsetenv.o `test -f 'lib/unsetenv.c' || echo '$(srcdir)/'`lib/unsetenv.c
+
+lib/libbison_a-unsetenv.obj: lib/unsetenv.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-unsetenv.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-unsetenv.Tpo -c -o lib/libbison_a-unsetenv.obj `if test -f 'lib/unsetenv.c'; then $(CYGPATH_W) 'lib/unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/lib/unsetenv.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-unsetenv.Tpo lib/$(DEPDIR)/libbison_a-unsetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/unsetenv.c' object='lib/libbison_a-unsetenv.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-unsetenv.obj `if test -f 'lib/unsetenv.c'; then $(CYGPATH_W) 'lib/unsetenv.c'; else $(CYGPATH_W) '$(srcdir)/lib/unsetenv.c'; fi`
+
+lib/libbison_a-asnprintf.o: lib/asnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-asnprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-asnprintf.Tpo -c -o lib/libbison_a-asnprintf.o `test -f 'lib/asnprintf.c' || echo '$(srcdir)/'`lib/asnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-asnprintf.Tpo lib/$(DEPDIR)/libbison_a-asnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/asnprintf.c' object='lib/libbison_a-asnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-asnprintf.o `test -f 'lib/asnprintf.c' || echo '$(srcdir)/'`lib/asnprintf.c
+
+lib/libbison_a-asnprintf.obj: lib/asnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-asnprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-asnprintf.Tpo -c -o lib/libbison_a-asnprintf.obj `if test -f 'lib/asnprintf.c'; then $(CYGPATH_W) 'lib/asnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/asnprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-asnprintf.Tpo lib/$(DEPDIR)/libbison_a-asnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/asnprintf.c' object='lib/libbison_a-asnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-asnprintf.obj `if test -f 'lib/asnprintf.c'; then $(CYGPATH_W) 'lib/asnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/asnprintf.c'; fi`
+
+lib/libbison_a-printf-args.o: lib/printf-args.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-args.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-args.Tpo -c -o lib/libbison_a-printf-args.o `test -f 'lib/printf-args.c' || echo '$(srcdir)/'`lib/printf-args.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-args.Tpo lib/$(DEPDIR)/libbison_a-printf-args.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-args.c' object='lib/libbison_a-printf-args.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-args.o `test -f 'lib/printf-args.c' || echo '$(srcdir)/'`lib/printf-args.c
+
+lib/libbison_a-printf-args.obj: lib/printf-args.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-args.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-args.Tpo -c -o lib/libbison_a-printf-args.obj `if test -f 'lib/printf-args.c'; then $(CYGPATH_W) 'lib/printf-args.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-args.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-args.Tpo lib/$(DEPDIR)/libbison_a-printf-args.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-args.c' object='lib/libbison_a-printf-args.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-args.obj `if test -f 'lib/printf-args.c'; then $(CYGPATH_W) 'lib/printf-args.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-args.c'; fi`
+
+lib/libbison_a-printf-parse.o: lib/printf-parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-parse.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-parse.Tpo -c -o lib/libbison_a-printf-parse.o `test -f 'lib/printf-parse.c' || echo '$(srcdir)/'`lib/printf-parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-parse.Tpo lib/$(DEPDIR)/libbison_a-printf-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-parse.c' object='lib/libbison_a-printf-parse.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-parse.o `test -f 'lib/printf-parse.c' || echo '$(srcdir)/'`lib/printf-parse.c
+
+lib/libbison_a-printf-parse.obj: lib/printf-parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-printf-parse.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-printf-parse.Tpo -c -o lib/libbison_a-printf-parse.obj `if test -f 'lib/printf-parse.c'; then $(CYGPATH_W) 'lib/printf-parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-parse.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-printf-parse.Tpo lib/$(DEPDIR)/libbison_a-printf-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/printf-parse.c' object='lib/libbison_a-printf-parse.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-printf-parse.obj `if test -f 'lib/printf-parse.c'; then $(CYGPATH_W) 'lib/printf-parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/printf-parse.c'; fi`
+
+lib/libbison_a-vasnprintf.o: lib/vasnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vasnprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-vasnprintf.Tpo -c -o lib/libbison_a-vasnprintf.o `test -f 'lib/vasnprintf.c' || echo '$(srcdir)/'`lib/vasnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vasnprintf.Tpo lib/$(DEPDIR)/libbison_a-vasnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vasnprintf.c' object='lib/libbison_a-vasnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vasnprintf.o `test -f 'lib/vasnprintf.c' || echo '$(srcdir)/'`lib/vasnprintf.c
+
+lib/libbison_a-vasnprintf.obj: lib/vasnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vasnprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-vasnprintf.Tpo -c -o lib/libbison_a-vasnprintf.obj `if test -f 'lib/vasnprintf.c'; then $(CYGPATH_W) 'lib/vasnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vasnprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vasnprintf.Tpo lib/$(DEPDIR)/libbison_a-vasnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vasnprintf.c' object='lib/libbison_a-vasnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vasnprintf.obj `if test -f 'lib/vasnprintf.c'; then $(CYGPATH_W) 'lib/vasnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vasnprintf.c'; fi`
+
+lib/libbison_a-asprintf.o: lib/asprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-asprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-asprintf.Tpo -c -o lib/libbison_a-asprintf.o `test -f 'lib/asprintf.c' || echo '$(srcdir)/'`lib/asprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-asprintf.Tpo lib/$(DEPDIR)/libbison_a-asprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/asprintf.c' object='lib/libbison_a-asprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-asprintf.o `test -f 'lib/asprintf.c' || echo '$(srcdir)/'`lib/asprintf.c
+
+lib/libbison_a-asprintf.obj: lib/asprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-asprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-asprintf.Tpo -c -o lib/libbison_a-asprintf.obj `if test -f 'lib/asprintf.c'; then $(CYGPATH_W) 'lib/asprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/asprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-asprintf.Tpo lib/$(DEPDIR)/libbison_a-asprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/asprintf.c' object='lib/libbison_a-asprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-asprintf.obj `if test -f 'lib/asprintf.c'; then $(CYGPATH_W) 'lib/asprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/asprintf.c'; fi`
+
+lib/libbison_a-vasprintf.o: lib/vasprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vasprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-vasprintf.Tpo -c -o lib/libbison_a-vasprintf.o `test -f 'lib/vasprintf.c' || echo '$(srcdir)/'`lib/vasprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vasprintf.Tpo lib/$(DEPDIR)/libbison_a-vasprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vasprintf.c' object='lib/libbison_a-vasprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vasprintf.o `test -f 'lib/vasprintf.c' || echo '$(srcdir)/'`lib/vasprintf.c
+
+lib/libbison_a-vasprintf.obj: lib/vasprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vasprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-vasprintf.Tpo -c -o lib/libbison_a-vasprintf.obj `if test -f 'lib/vasprintf.c'; then $(CYGPATH_W) 'lib/vasprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vasprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vasprintf.Tpo lib/$(DEPDIR)/libbison_a-vasprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vasprintf.c' object='lib/libbison_a-vasprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vasprintf.obj `if test -f 'lib/vasprintf.c'; then $(CYGPATH_W) 'lib/vasprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vasprintf.c'; fi`
+
+lib/libbison_a-vfprintf.o: lib/vfprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vfprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-vfprintf.Tpo -c -o lib/libbison_a-vfprintf.o `test -f 'lib/vfprintf.c' || echo '$(srcdir)/'`lib/vfprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vfprintf.Tpo lib/$(DEPDIR)/libbison_a-vfprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vfprintf.c' object='lib/libbison_a-vfprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vfprintf.o `test -f 'lib/vfprintf.c' || echo '$(srcdir)/'`lib/vfprintf.c
+
+lib/libbison_a-vfprintf.obj: lib/vfprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vfprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-vfprintf.Tpo -c -o lib/libbison_a-vfprintf.obj `if test -f 'lib/vfprintf.c'; then $(CYGPATH_W) 'lib/vfprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vfprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vfprintf.Tpo lib/$(DEPDIR)/libbison_a-vfprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vfprintf.c' object='lib/libbison_a-vfprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vfprintf.obj `if test -f 'lib/vfprintf.c'; then $(CYGPATH_W) 'lib/vfprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vfprintf.c'; fi`
+
+lib/libbison_a-vsnprintf.o: lib/vsnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vsnprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-vsnprintf.Tpo -c -o lib/libbison_a-vsnprintf.o `test -f 'lib/vsnprintf.c' || echo '$(srcdir)/'`lib/vsnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vsnprintf.Tpo lib/$(DEPDIR)/libbison_a-vsnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vsnprintf.c' object='lib/libbison_a-vsnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vsnprintf.o `test -f 'lib/vsnprintf.c' || echo '$(srcdir)/'`lib/vsnprintf.c
+
+lib/libbison_a-vsnprintf.obj: lib/vsnprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vsnprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-vsnprintf.Tpo -c -o lib/libbison_a-vsnprintf.obj `if test -f 'lib/vsnprintf.c'; then $(CYGPATH_W) 'lib/vsnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vsnprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vsnprintf.Tpo lib/$(DEPDIR)/libbison_a-vsnprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vsnprintf.c' object='lib/libbison_a-vsnprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vsnprintf.obj `if test -f 'lib/vsnprintf.c'; then $(CYGPATH_W) 'lib/vsnprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vsnprintf.c'; fi`
+
+lib/libbison_a-vsprintf.o: lib/vsprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vsprintf.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-vsprintf.Tpo -c -o lib/libbison_a-vsprintf.o `test -f 'lib/vsprintf.c' || echo '$(srcdir)/'`lib/vsprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vsprintf.Tpo lib/$(DEPDIR)/libbison_a-vsprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vsprintf.c' object='lib/libbison_a-vsprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vsprintf.o `test -f 'lib/vsprintf.c' || echo '$(srcdir)/'`lib/vsprintf.c
+
+lib/libbison_a-vsprintf.obj: lib/vsprintf.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-vsprintf.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-vsprintf.Tpo -c -o lib/libbison_a-vsprintf.obj `if test -f 'lib/vsprintf.c'; then $(CYGPATH_W) 'lib/vsprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vsprintf.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-vsprintf.Tpo lib/$(DEPDIR)/libbison_a-vsprintf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vsprintf.c' object='lib/libbison_a-vsprintf.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-vsprintf.obj `if test -f 'lib/vsprintf.c'; then $(CYGPATH_W) 'lib/vsprintf.c'; else $(CYGPATH_W) '$(srcdir)/lib/vsprintf.c'; fi`
+
+lib/libbison_a-waitpid.o: lib/waitpid.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-waitpid.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-waitpid.Tpo -c -o lib/libbison_a-waitpid.o `test -f 'lib/waitpid.c' || echo '$(srcdir)/'`lib/waitpid.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-waitpid.Tpo lib/$(DEPDIR)/libbison_a-waitpid.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/waitpid.c' object='lib/libbison_a-waitpid.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-waitpid.o `test -f 'lib/waitpid.c' || echo '$(srcdir)/'`lib/waitpid.c
+
+lib/libbison_a-waitpid.obj: lib/waitpid.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-waitpid.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-waitpid.Tpo -c -o lib/libbison_a-waitpid.obj `if test -f 'lib/waitpid.c'; then $(CYGPATH_W) 'lib/waitpid.c'; else $(CYGPATH_W) '$(srcdir)/lib/waitpid.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-waitpid.Tpo lib/$(DEPDIR)/libbison_a-waitpid.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/waitpid.c' object='lib/libbison_a-waitpid.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-waitpid.obj `if test -f 'lib/waitpid.c'; then $(CYGPATH_W) 'lib/waitpid.c'; else $(CYGPATH_W) '$(srcdir)/lib/waitpid.c'; fi`
+
+lib/libbison_a-wcwidth.o: lib/wcwidth.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wcwidth.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-wcwidth.Tpo -c -o lib/libbison_a-wcwidth.o `test -f 'lib/wcwidth.c' || echo '$(srcdir)/'`lib/wcwidth.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wcwidth.Tpo lib/$(DEPDIR)/libbison_a-wcwidth.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wcwidth.c' object='lib/libbison_a-wcwidth.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wcwidth.o `test -f 'lib/wcwidth.c' || echo '$(srcdir)/'`lib/wcwidth.c
+
+lib/libbison_a-wcwidth.obj: lib/wcwidth.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-wcwidth.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-wcwidth.Tpo -c -o lib/libbison_a-wcwidth.obj `if test -f 'lib/wcwidth.c'; then $(CYGPATH_W) 'lib/wcwidth.c'; else $(CYGPATH_W) '$(srcdir)/lib/wcwidth.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-wcwidth.Tpo lib/$(DEPDIR)/libbison_a-wcwidth.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wcwidth.c' object='lib/libbison_a-wcwidth.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-wcwidth.obj `if test -f 'lib/wcwidth.c'; then $(CYGPATH_W) 'lib/wcwidth.c'; else $(CYGPATH_W) '$(srcdir)/lib/wcwidth.c'; fi`
+
+lib/libbison_a-windows-mutex.o: lib/windows-mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-mutex.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-mutex.Tpo -c -o lib/libbison_a-windows-mutex.o `test -f 'lib/windows-mutex.c' || echo '$(srcdir)/'`lib/windows-mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-mutex.Tpo lib/$(DEPDIR)/libbison_a-windows-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-mutex.c' object='lib/libbison_a-windows-mutex.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-mutex.o `test -f 'lib/windows-mutex.c' || echo '$(srcdir)/'`lib/windows-mutex.c
+
+lib/libbison_a-windows-mutex.obj: lib/windows-mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-mutex.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-mutex.Tpo -c -o lib/libbison_a-windows-mutex.obj `if test -f 'lib/windows-mutex.c'; then $(CYGPATH_W) 'lib/windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-mutex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-mutex.Tpo lib/$(DEPDIR)/libbison_a-windows-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-mutex.c' object='lib/libbison_a-windows-mutex.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-mutex.obj `if test -f 'lib/windows-mutex.c'; then $(CYGPATH_W) 'lib/windows-mutex.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-mutex.c'; fi`
+
+lib/libbison_a-windows-once.o: lib/windows-once.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-once.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-once.Tpo -c -o lib/libbison_a-windows-once.o `test -f 'lib/windows-once.c' || echo '$(srcdir)/'`lib/windows-once.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-once.Tpo lib/$(DEPDIR)/libbison_a-windows-once.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-once.c' object='lib/libbison_a-windows-once.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-once.o `test -f 'lib/windows-once.c' || echo '$(srcdir)/'`lib/windows-once.c
+
+lib/libbison_a-windows-once.obj: lib/windows-once.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-once.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-once.Tpo -c -o lib/libbison_a-windows-once.obj `if test -f 'lib/windows-once.c'; then $(CYGPATH_W) 'lib/windows-once.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-once.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-once.Tpo lib/$(DEPDIR)/libbison_a-windows-once.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-once.c' object='lib/libbison_a-windows-once.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-once.obj `if test -f 'lib/windows-once.c'; then $(CYGPATH_W) 'lib/windows-once.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-once.c'; fi`
+
+lib/libbison_a-windows-recmutex.o: lib/windows-recmutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-recmutex.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-recmutex.Tpo -c -o lib/libbison_a-windows-recmutex.o `test -f 'lib/windows-recmutex.c' || echo '$(srcdir)/'`lib/windows-recmutex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-recmutex.Tpo lib/$(DEPDIR)/libbison_a-windows-recmutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-recmutex.c' object='lib/libbison_a-windows-recmutex.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-recmutex.o `test -f 'lib/windows-recmutex.c' || echo '$(srcdir)/'`lib/windows-recmutex.c
+
+lib/libbison_a-windows-recmutex.obj: lib/windows-recmutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-recmutex.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-recmutex.Tpo -c -o lib/libbison_a-windows-recmutex.obj `if test -f 'lib/windows-recmutex.c'; then $(CYGPATH_W) 'lib/windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-recmutex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-recmutex.Tpo lib/$(DEPDIR)/libbison_a-windows-recmutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-recmutex.c' object='lib/libbison_a-windows-recmutex.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-recmutex.obj `if test -f 'lib/windows-recmutex.c'; then $(CYGPATH_W) 'lib/windows-recmutex.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-recmutex.c'; fi`
+
+lib/libbison_a-windows-rwlock.o: lib/windows-rwlock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-rwlock.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-rwlock.Tpo -c -o lib/libbison_a-windows-rwlock.o `test -f 'lib/windows-rwlock.c' || echo '$(srcdir)/'`lib/windows-rwlock.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-rwlock.Tpo lib/$(DEPDIR)/libbison_a-windows-rwlock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-rwlock.c' object='lib/libbison_a-windows-rwlock.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-rwlock.o `test -f 'lib/windows-rwlock.c' || echo '$(srcdir)/'`lib/windows-rwlock.c
+
+lib/libbison_a-windows-rwlock.obj: lib/windows-rwlock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-rwlock.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-rwlock.Tpo -c -o lib/libbison_a-windows-rwlock.obj `if test -f 'lib/windows-rwlock.c'; then $(CYGPATH_W) 'lib/windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-rwlock.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-rwlock.Tpo lib/$(DEPDIR)/libbison_a-windows-rwlock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-rwlock.c' object='lib/libbison_a-windows-rwlock.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-rwlock.obj `if test -f 'lib/windows-rwlock.c'; then $(CYGPATH_W) 'lib/windows-rwlock.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-rwlock.c'; fi`
+
+lib/libbison_a-windows-tls.o: lib/windows-tls.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-tls.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-tls.Tpo -c -o lib/libbison_a-windows-tls.o `test -f 'lib/windows-tls.c' || echo '$(srcdir)/'`lib/windows-tls.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-tls.Tpo lib/$(DEPDIR)/libbison_a-windows-tls.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-tls.c' object='lib/libbison_a-windows-tls.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-tls.o `test -f 'lib/windows-tls.c' || echo '$(srcdir)/'`lib/windows-tls.c
+
+lib/libbison_a-windows-tls.obj: lib/windows-tls.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-windows-tls.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-windows-tls.Tpo -c -o lib/libbison_a-windows-tls.obj `if test -f 'lib/windows-tls.c'; then $(CYGPATH_W) 'lib/windows-tls.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-tls.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-windows-tls.Tpo lib/$(DEPDIR)/libbison_a-windows-tls.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/windows-tls.c' object='lib/libbison_a-windows-tls.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-windows-tls.obj `if test -f 'lib/windows-tls.c'; then $(CYGPATH_W) 'lib/windows-tls.c'; else $(CYGPATH_W) '$(srcdir)/lib/windows-tls.c'; fi`
+
+lib/libbison_a-xmemdup0.o: lib/xmemdup0.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xmemdup0.o -MD -MP -MF lib/$(DEPDIR)/libbison_a-xmemdup0.Tpo -c -o lib/libbison_a-xmemdup0.o `test -f 'lib/xmemdup0.c' || echo '$(srcdir)/'`lib/xmemdup0.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xmemdup0.Tpo lib/$(DEPDIR)/libbison_a-xmemdup0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xmemdup0.c' object='lib/libbison_a-xmemdup0.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xmemdup0.o `test -f 'lib/xmemdup0.c' || echo '$(srcdir)/'`lib/xmemdup0.c
+
+lib/libbison_a-xmemdup0.obj: lib/xmemdup0.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/libbison_a-xmemdup0.obj -MD -MP -MF lib/$(DEPDIR)/libbison_a-xmemdup0.Tpo -c -o lib/libbison_a-xmemdup0.obj `if test -f 'lib/xmemdup0.c'; then $(CYGPATH_W) 'lib/xmemdup0.c'; else $(CYGPATH_W) '$(srcdir)/lib/xmemdup0.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) lib/$(DEPDIR)/libbison_a-xmemdup0.Tpo lib/$(DEPDIR)/libbison_a-xmemdup0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xmemdup0.c' object='lib/libbison_a-xmemdup0.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) $(lib_libbison_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/libbison_a-xmemdup0.obj `if test -f 'lib/xmemdup0.c'; then $(CYGPATH_W) 'lib/xmemdup0.c'; else $(CYGPATH_W) '$(srcdir)/lib/xmemdup0.c'; fi`
+
+examples/c/calc/calc-calc.o: examples/c/calc/calc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_calc_calc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/calc/calc-calc.o -MD -MP -MF examples/c/calc/$(DEPDIR)/calc-calc.Tpo -c -o examples/c/calc/calc-calc.o `test -f 'examples/c/calc/calc.c' || echo '$(srcdir)/'`examples/c/calc/calc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/calc/$(DEPDIR)/calc-calc.Tpo examples/c/calc/$(DEPDIR)/calc-calc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/calc/calc.c' object='examples/c/calc/calc-calc.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) $(examples_c_calc_calc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/calc/calc-calc.o `test -f 'examples/c/calc/calc.c' || echo '$(srcdir)/'`examples/c/calc/calc.c
+
+examples/c/calc/calc-calc.obj: examples/c/calc/calc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_calc_calc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/calc/calc-calc.obj -MD -MP -MF examples/c/calc/$(DEPDIR)/calc-calc.Tpo -c -o examples/c/calc/calc-calc.obj `if test -f 'examples/c/calc/calc.c'; then $(CYGPATH_W) 'examples/c/calc/calc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/calc/calc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/calc/$(DEPDIR)/calc-calc.Tpo examples/c/calc/$(DEPDIR)/calc-calc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/calc/calc.c' object='examples/c/calc/calc-calc.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) $(examples_c_calc_calc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/calc/calc-calc.obj `if test -f 'examples/c/calc/calc.c'; then $(CYGPATH_W) 'examples/c/calc/calc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/calc/calc.c'; fi`
+
+examples/c/lexcalc/lexcalc-parse.o: examples/c/lexcalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/lexcalc/lexcalc-parse.o -MD -MP -MF examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Tpo -c -o examples/c/lexcalc/lexcalc-parse.o `test -f 'examples/c/lexcalc/parse.c' || echo '$(srcdir)/'`examples/c/lexcalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Tpo examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/lexcalc/parse.c' object='examples/c/lexcalc/lexcalc-parse.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) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/lexcalc/lexcalc-parse.o `test -f 'examples/c/lexcalc/parse.c' || echo '$(srcdir)/'`examples/c/lexcalc/parse.c
+
+examples/c/lexcalc/lexcalc-parse.obj: examples/c/lexcalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/lexcalc/lexcalc-parse.obj -MD -MP -MF examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Tpo -c -o examples/c/lexcalc/lexcalc-parse.obj `if test -f 'examples/c/lexcalc/parse.c'; then $(CYGPATH_W) 'examples/c/lexcalc/parse.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/lexcalc/parse.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Tpo examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/lexcalc/parse.c' object='examples/c/lexcalc/lexcalc-parse.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) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/lexcalc/lexcalc-parse.obj `if test -f 'examples/c/lexcalc/parse.c'; then $(CYGPATH_W) 'examples/c/lexcalc/parse.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/lexcalc/parse.c'; fi`
+
+examples/c/lexcalc/lexcalc-scan.o: examples/c/lexcalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/lexcalc/lexcalc-scan.o -MD -MP -MF examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Tpo -c -o examples/c/lexcalc/lexcalc-scan.o `test -f 'examples/c/lexcalc/scan.c' || echo '$(srcdir)/'`examples/c/lexcalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Tpo examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/lexcalc/scan.c' object='examples/c/lexcalc/lexcalc-scan.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) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/lexcalc/lexcalc-scan.o `test -f 'examples/c/lexcalc/scan.c' || echo '$(srcdir)/'`examples/c/lexcalc/scan.c
+
+examples/c/lexcalc/lexcalc-scan.obj: examples/c/lexcalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/lexcalc/lexcalc-scan.obj -MD -MP -MF examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Tpo -c -o examples/c/lexcalc/lexcalc-scan.obj `if test -f 'examples/c/lexcalc/scan.c'; then $(CYGPATH_W) 'examples/c/lexcalc/scan.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/lexcalc/scan.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Tpo examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/lexcalc/scan.c' object='examples/c/lexcalc/lexcalc-scan.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) $(examples_c_lexcalc_lexcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/lexcalc/lexcalc-scan.obj `if test -f 'examples/c/lexcalc/scan.c'; then $(CYGPATH_W) 'examples/c/lexcalc/scan.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/lexcalc/scan.c'; fi`
+
+examples/c/mfcalc/mfcalc-mfcalc.o: examples/c/mfcalc/mfcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_mfcalc_mfcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/mfcalc/mfcalc-mfcalc.o -MD -MP -MF examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Tpo -c -o examples/c/mfcalc/mfcalc-mfcalc.o `test -f 'examples/c/mfcalc/mfcalc.c' || echo '$(srcdir)/'`examples/c/mfcalc/mfcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Tpo examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/mfcalc/mfcalc.c' object='examples/c/mfcalc/mfcalc-mfcalc.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) $(examples_c_mfcalc_mfcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/mfcalc/mfcalc-mfcalc.o `test -f 'examples/c/mfcalc/mfcalc.c' || echo '$(srcdir)/'`examples/c/mfcalc/mfcalc.c
+
+examples/c/mfcalc/mfcalc-mfcalc.obj: examples/c/mfcalc/mfcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_mfcalc_mfcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/mfcalc/mfcalc-mfcalc.obj -MD -MP -MF examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Tpo -c -o examples/c/mfcalc/mfcalc-mfcalc.obj `if test -f 'examples/c/mfcalc/mfcalc.c'; then $(CYGPATH_W) 'examples/c/mfcalc/mfcalc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/mfcalc/mfcalc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Tpo examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/mfcalc/mfcalc.c' object='examples/c/mfcalc/mfcalc-mfcalc.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) $(examples_c_mfcalc_mfcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/mfcalc/mfcalc-mfcalc.obj `if test -f 'examples/c/mfcalc/mfcalc.c'; then $(CYGPATH_W) 'examples/c/mfcalc/mfcalc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/mfcalc/mfcalc.c'; fi`
+
+examples/c/reccalc/reccalc-parse.o: examples/c/reccalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/reccalc/reccalc-parse.o -MD -MP -MF examples/c/reccalc/$(DEPDIR)/reccalc-parse.Tpo -c -o examples/c/reccalc/reccalc-parse.o `test -f 'examples/c/reccalc/parse.c' || echo '$(srcdir)/'`examples/c/reccalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/reccalc/$(DEPDIR)/reccalc-parse.Tpo examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/reccalc/parse.c' object='examples/c/reccalc/reccalc-parse.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) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/reccalc/reccalc-parse.o `test -f 'examples/c/reccalc/parse.c' || echo '$(srcdir)/'`examples/c/reccalc/parse.c
+
+examples/c/reccalc/reccalc-parse.obj: examples/c/reccalc/parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/reccalc/reccalc-parse.obj -MD -MP -MF examples/c/reccalc/$(DEPDIR)/reccalc-parse.Tpo -c -o examples/c/reccalc/reccalc-parse.obj `if test -f 'examples/c/reccalc/parse.c'; then $(CYGPATH_W) 'examples/c/reccalc/parse.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/reccalc/parse.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/reccalc/$(DEPDIR)/reccalc-parse.Tpo examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/reccalc/parse.c' object='examples/c/reccalc/reccalc-parse.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) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/reccalc/reccalc-parse.obj `if test -f 'examples/c/reccalc/parse.c'; then $(CYGPATH_W) 'examples/c/reccalc/parse.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/reccalc/parse.c'; fi`
+
+examples/c/reccalc/reccalc-scan.o: examples/c/reccalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/reccalc/reccalc-scan.o -MD -MP -MF examples/c/reccalc/$(DEPDIR)/reccalc-scan.Tpo -c -o examples/c/reccalc/reccalc-scan.o `test -f 'examples/c/reccalc/scan.c' || echo '$(srcdir)/'`examples/c/reccalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/reccalc/$(DEPDIR)/reccalc-scan.Tpo examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/reccalc/scan.c' object='examples/c/reccalc/reccalc-scan.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) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/reccalc/reccalc-scan.o `test -f 'examples/c/reccalc/scan.c' || echo '$(srcdir)/'`examples/c/reccalc/scan.c
+
+examples/c/reccalc/reccalc-scan.obj: examples/c/reccalc/scan.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/reccalc/reccalc-scan.obj -MD -MP -MF examples/c/reccalc/$(DEPDIR)/reccalc-scan.Tpo -c -o examples/c/reccalc/reccalc-scan.obj `if test -f 'examples/c/reccalc/scan.c'; then $(CYGPATH_W) 'examples/c/reccalc/scan.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/reccalc/scan.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/reccalc/$(DEPDIR)/reccalc-scan.Tpo examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/reccalc/scan.c' object='examples/c/reccalc/reccalc-scan.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) $(examples_c_reccalc_reccalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/reccalc/reccalc-scan.obj `if test -f 'examples/c/reccalc/scan.c'; then $(CYGPATH_W) 'examples/c/reccalc/scan.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/reccalc/scan.c'; fi`
+
+examples/c/rpcalc/rpcalc-rpcalc.o: examples/c/rpcalc/rpcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_rpcalc_rpcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/rpcalc/rpcalc-rpcalc.o -MD -MP -MF examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Tpo -c -o examples/c/rpcalc/rpcalc-rpcalc.o `test -f 'examples/c/rpcalc/rpcalc.c' || echo '$(srcdir)/'`examples/c/rpcalc/rpcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Tpo examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/rpcalc/rpcalc.c' object='examples/c/rpcalc/rpcalc-rpcalc.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) $(examples_c_rpcalc_rpcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/rpcalc/rpcalc-rpcalc.o `test -f 'examples/c/rpcalc/rpcalc.c' || echo '$(srcdir)/'`examples/c/rpcalc/rpcalc.c
+
+examples/c/rpcalc/rpcalc-rpcalc.obj: examples/c/rpcalc/rpcalc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c_rpcalc_rpcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT examples/c/rpcalc/rpcalc-rpcalc.obj -MD -MP -MF examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Tpo -c -o examples/c/rpcalc/rpcalc-rpcalc.obj `if test -f 'examples/c/rpcalc/rpcalc.c'; then $(CYGPATH_W) 'examples/c/rpcalc/rpcalc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/rpcalc/rpcalc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Tpo examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='examples/c/rpcalc/rpcalc.c' object='examples/c/rpcalc/rpcalc-rpcalc.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) $(examples_c_rpcalc_rpcalc_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o examples/c/rpcalc/rpcalc-rpcalc.obj `if test -f 'examples/c/rpcalc/rpcalc.c'; then $(CYGPATH_W) 'examples/c/rpcalc/rpcalc.c'; else $(CYGPATH_W) '$(srcdir)/examples/c/rpcalc/rpcalc.c'; fi`
+
+src/bison-AnnotationList.o: src/AnnotationList.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-AnnotationList.o -MD -MP -MF src/$(DEPDIR)/bison-AnnotationList.Tpo -c -o src/bison-AnnotationList.o `test -f 'src/AnnotationList.c' || echo '$(srcdir)/'`src/AnnotationList.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-AnnotationList.Tpo src/$(DEPDIR)/bison-AnnotationList.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/AnnotationList.c' object='src/bison-AnnotationList.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-AnnotationList.o `test -f 'src/AnnotationList.c' || echo '$(srcdir)/'`src/AnnotationList.c
+
+src/bison-AnnotationList.obj: src/AnnotationList.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-AnnotationList.obj -MD -MP -MF src/$(DEPDIR)/bison-AnnotationList.Tpo -c -o src/bison-AnnotationList.obj `if test -f 'src/AnnotationList.c'; then $(CYGPATH_W) 'src/AnnotationList.c'; else $(CYGPATH_W) '$(srcdir)/src/AnnotationList.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-AnnotationList.Tpo src/$(DEPDIR)/bison-AnnotationList.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/AnnotationList.c' object='src/bison-AnnotationList.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-AnnotationList.obj `if test -f 'src/AnnotationList.c'; then $(CYGPATH_W) 'src/AnnotationList.c'; else $(CYGPATH_W) '$(srcdir)/src/AnnotationList.c'; fi`
+
+src/bison-InadequacyList.o: src/InadequacyList.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-InadequacyList.o -MD -MP -MF src/$(DEPDIR)/bison-InadequacyList.Tpo -c -o src/bison-InadequacyList.o `test -f 'src/InadequacyList.c' || echo '$(srcdir)/'`src/InadequacyList.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-InadequacyList.Tpo src/$(DEPDIR)/bison-InadequacyList.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/InadequacyList.c' object='src/bison-InadequacyList.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-InadequacyList.o `test -f 'src/InadequacyList.c' || echo '$(srcdir)/'`src/InadequacyList.c
+
+src/bison-InadequacyList.obj: src/InadequacyList.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-InadequacyList.obj -MD -MP -MF src/$(DEPDIR)/bison-InadequacyList.Tpo -c -o src/bison-InadequacyList.obj `if test -f 'src/InadequacyList.c'; then $(CYGPATH_W) 'src/InadequacyList.c'; else $(CYGPATH_W) '$(srcdir)/src/InadequacyList.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-InadequacyList.Tpo src/$(DEPDIR)/bison-InadequacyList.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/InadequacyList.c' object='src/bison-InadequacyList.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-InadequacyList.obj `if test -f 'src/InadequacyList.c'; then $(CYGPATH_W) 'src/InadequacyList.c'; else $(CYGPATH_W) '$(srcdir)/src/InadequacyList.c'; fi`
+
+src/bison-Sbitset.o: src/Sbitset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-Sbitset.o -MD -MP -MF src/$(DEPDIR)/bison-Sbitset.Tpo -c -o src/bison-Sbitset.o `test -f 'src/Sbitset.c' || echo '$(srcdir)/'`src/Sbitset.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-Sbitset.Tpo src/$(DEPDIR)/bison-Sbitset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/Sbitset.c' object='src/bison-Sbitset.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-Sbitset.o `test -f 'src/Sbitset.c' || echo '$(srcdir)/'`src/Sbitset.c
+
+src/bison-Sbitset.obj: src/Sbitset.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-Sbitset.obj -MD -MP -MF src/$(DEPDIR)/bison-Sbitset.Tpo -c -o src/bison-Sbitset.obj `if test -f 'src/Sbitset.c'; then $(CYGPATH_W) 'src/Sbitset.c'; else $(CYGPATH_W) '$(srcdir)/src/Sbitset.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-Sbitset.Tpo src/$(DEPDIR)/bison-Sbitset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/Sbitset.c' object='src/bison-Sbitset.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-Sbitset.obj `if test -f 'src/Sbitset.c'; then $(CYGPATH_W) 'src/Sbitset.c'; else $(CYGPATH_W) '$(srcdir)/src/Sbitset.c'; fi`
+
+src/bison-assoc.o: src/assoc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-assoc.o -MD -MP -MF src/$(DEPDIR)/bison-assoc.Tpo -c -o src/bison-assoc.o `test -f 'src/assoc.c' || echo '$(srcdir)/'`src/assoc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-assoc.Tpo src/$(DEPDIR)/bison-assoc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/assoc.c' object='src/bison-assoc.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-assoc.o `test -f 'src/assoc.c' || echo '$(srcdir)/'`src/assoc.c
+
+src/bison-assoc.obj: src/assoc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-assoc.obj -MD -MP -MF src/$(DEPDIR)/bison-assoc.Tpo -c -o src/bison-assoc.obj `if test -f 'src/assoc.c'; then $(CYGPATH_W) 'src/assoc.c'; else $(CYGPATH_W) '$(srcdir)/src/assoc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-assoc.Tpo src/$(DEPDIR)/bison-assoc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/assoc.c' object='src/bison-assoc.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-assoc.obj `if test -f 'src/assoc.c'; then $(CYGPATH_W) 'src/assoc.c'; else $(CYGPATH_W) '$(srcdir)/src/assoc.c'; fi`
+
+src/bison-closure.o: src/closure.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-closure.o -MD -MP -MF src/$(DEPDIR)/bison-closure.Tpo -c -o src/bison-closure.o `test -f 'src/closure.c' || echo '$(srcdir)/'`src/closure.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-closure.Tpo src/$(DEPDIR)/bison-closure.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/closure.c' object='src/bison-closure.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-closure.o `test -f 'src/closure.c' || echo '$(srcdir)/'`src/closure.c
+
+src/bison-closure.obj: src/closure.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-closure.obj -MD -MP -MF src/$(DEPDIR)/bison-closure.Tpo -c -o src/bison-closure.obj `if test -f 'src/closure.c'; then $(CYGPATH_W) 'src/closure.c'; else $(CYGPATH_W) '$(srcdir)/src/closure.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-closure.Tpo src/$(DEPDIR)/bison-closure.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/closure.c' object='src/bison-closure.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-closure.obj `if test -f 'src/closure.c'; then $(CYGPATH_W) 'src/closure.c'; else $(CYGPATH_W) '$(srcdir)/src/closure.c'; fi`
+
+src/bison-complain.o: src/complain.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-complain.o -MD -MP -MF src/$(DEPDIR)/bison-complain.Tpo -c -o src/bison-complain.o `test -f 'src/complain.c' || echo '$(srcdir)/'`src/complain.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-complain.Tpo src/$(DEPDIR)/bison-complain.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/complain.c' object='src/bison-complain.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-complain.o `test -f 'src/complain.c' || echo '$(srcdir)/'`src/complain.c
+
+src/bison-complain.obj: src/complain.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-complain.obj -MD -MP -MF src/$(DEPDIR)/bison-complain.Tpo -c -o src/bison-complain.obj `if test -f 'src/complain.c'; then $(CYGPATH_W) 'src/complain.c'; else $(CYGPATH_W) '$(srcdir)/src/complain.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-complain.Tpo src/$(DEPDIR)/bison-complain.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/complain.c' object='src/bison-complain.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-complain.obj `if test -f 'src/complain.c'; then $(CYGPATH_W) 'src/complain.c'; else $(CYGPATH_W) '$(srcdir)/src/complain.c'; fi`
+
+src/bison-conflicts.o: src/conflicts.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-conflicts.o -MD -MP -MF src/$(DEPDIR)/bison-conflicts.Tpo -c -o src/bison-conflicts.o `test -f 'src/conflicts.c' || echo '$(srcdir)/'`src/conflicts.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-conflicts.Tpo src/$(DEPDIR)/bison-conflicts.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/conflicts.c' object='src/bison-conflicts.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-conflicts.o `test -f 'src/conflicts.c' || echo '$(srcdir)/'`src/conflicts.c
+
+src/bison-conflicts.obj: src/conflicts.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-conflicts.obj -MD -MP -MF src/$(DEPDIR)/bison-conflicts.Tpo -c -o src/bison-conflicts.obj `if test -f 'src/conflicts.c'; then $(CYGPATH_W) 'src/conflicts.c'; else $(CYGPATH_W) '$(srcdir)/src/conflicts.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-conflicts.Tpo src/$(DEPDIR)/bison-conflicts.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/conflicts.c' object='src/bison-conflicts.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-conflicts.obj `if test -f 'src/conflicts.c'; then $(CYGPATH_W) 'src/conflicts.c'; else $(CYGPATH_W) '$(srcdir)/src/conflicts.c'; fi`
+
+src/bison-derives.o: src/derives.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-derives.o -MD -MP -MF src/$(DEPDIR)/bison-derives.Tpo -c -o src/bison-derives.o `test -f 'src/derives.c' || echo '$(srcdir)/'`src/derives.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-derives.Tpo src/$(DEPDIR)/bison-derives.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/derives.c' object='src/bison-derives.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-derives.o `test -f 'src/derives.c' || echo '$(srcdir)/'`src/derives.c
+
+src/bison-derives.obj: src/derives.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-derives.obj -MD -MP -MF src/$(DEPDIR)/bison-derives.Tpo -c -o src/bison-derives.obj `if test -f 'src/derives.c'; then $(CYGPATH_W) 'src/derives.c'; else $(CYGPATH_W) '$(srcdir)/src/derives.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-derives.Tpo src/$(DEPDIR)/bison-derives.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/derives.c' object='src/bison-derives.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-derives.obj `if test -f 'src/derives.c'; then $(CYGPATH_W) 'src/derives.c'; else $(CYGPATH_W) '$(srcdir)/src/derives.c'; fi`
+
+src/bison-files.o: src/files.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-files.o -MD -MP -MF src/$(DEPDIR)/bison-files.Tpo -c -o src/bison-files.o `test -f 'src/files.c' || echo '$(srcdir)/'`src/files.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-files.Tpo src/$(DEPDIR)/bison-files.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/files.c' object='src/bison-files.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-files.o `test -f 'src/files.c' || echo '$(srcdir)/'`src/files.c
+
+src/bison-files.obj: src/files.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-files.obj -MD -MP -MF src/$(DEPDIR)/bison-files.Tpo -c -o src/bison-files.obj `if test -f 'src/files.c'; then $(CYGPATH_W) 'src/files.c'; else $(CYGPATH_W) '$(srcdir)/src/files.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-files.Tpo src/$(DEPDIR)/bison-files.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/files.c' object='src/bison-files.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-files.obj `if test -f 'src/files.c'; then $(CYGPATH_W) 'src/files.c'; else $(CYGPATH_W) '$(srcdir)/src/files.c'; fi`
+
+src/bison-fixits.o: src/fixits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-fixits.o -MD -MP -MF src/$(DEPDIR)/bison-fixits.Tpo -c -o src/bison-fixits.o `test -f 'src/fixits.c' || echo '$(srcdir)/'`src/fixits.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-fixits.Tpo src/$(DEPDIR)/bison-fixits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/fixits.c' object='src/bison-fixits.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-fixits.o `test -f 'src/fixits.c' || echo '$(srcdir)/'`src/fixits.c
+
+src/bison-fixits.obj: src/fixits.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-fixits.obj -MD -MP -MF src/$(DEPDIR)/bison-fixits.Tpo -c -o src/bison-fixits.obj `if test -f 'src/fixits.c'; then $(CYGPATH_W) 'src/fixits.c'; else $(CYGPATH_W) '$(srcdir)/src/fixits.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-fixits.Tpo src/$(DEPDIR)/bison-fixits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/fixits.c' object='src/bison-fixits.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-fixits.obj `if test -f 'src/fixits.c'; then $(CYGPATH_W) 'src/fixits.c'; else $(CYGPATH_W) '$(srcdir)/src/fixits.c'; fi`
+
+src/bison-getargs.o: src/getargs.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-getargs.o -MD -MP -MF src/$(DEPDIR)/bison-getargs.Tpo -c -o src/bison-getargs.o `test -f 'src/getargs.c' || echo '$(srcdir)/'`src/getargs.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-getargs.Tpo src/$(DEPDIR)/bison-getargs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/getargs.c' object='src/bison-getargs.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-getargs.o `test -f 'src/getargs.c' || echo '$(srcdir)/'`src/getargs.c
+
+src/bison-getargs.obj: src/getargs.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-getargs.obj -MD -MP -MF src/$(DEPDIR)/bison-getargs.Tpo -c -o src/bison-getargs.obj `if test -f 'src/getargs.c'; then $(CYGPATH_W) 'src/getargs.c'; else $(CYGPATH_W) '$(srcdir)/src/getargs.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-getargs.Tpo src/$(DEPDIR)/bison-getargs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/getargs.c' object='src/bison-getargs.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-getargs.obj `if test -f 'src/getargs.c'; then $(CYGPATH_W) 'src/getargs.c'; else $(CYGPATH_W) '$(srcdir)/src/getargs.c'; fi`
+
+src/bison-gram.o: src/gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-gram.o -MD -MP -MF src/$(DEPDIR)/bison-gram.Tpo -c -o src/bison-gram.o `test -f 'src/gram.c' || echo '$(srcdir)/'`src/gram.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-gram.Tpo src/$(DEPDIR)/bison-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/gram.c' object='src/bison-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-gram.o `test -f 'src/gram.c' || echo '$(srcdir)/'`src/gram.c
+
+src/bison-gram.obj: src/gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-gram.obj -MD -MP -MF src/$(DEPDIR)/bison-gram.Tpo -c -o src/bison-gram.obj `if test -f 'src/gram.c'; then $(CYGPATH_W) 'src/gram.c'; else $(CYGPATH_W) '$(srcdir)/src/gram.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-gram.Tpo src/$(DEPDIR)/bison-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/gram.c' object='src/bison-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-gram.obj `if test -f 'src/gram.c'; then $(CYGPATH_W) 'src/gram.c'; else $(CYGPATH_W) '$(srcdir)/src/gram.c'; fi`
+
+src/bison-graphviz.o: src/graphviz.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-graphviz.o -MD -MP -MF src/$(DEPDIR)/bison-graphviz.Tpo -c -o src/bison-graphviz.o `test -f 'src/graphviz.c' || echo '$(srcdir)/'`src/graphviz.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-graphviz.Tpo src/$(DEPDIR)/bison-graphviz.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/graphviz.c' object='src/bison-graphviz.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-graphviz.o `test -f 'src/graphviz.c' || echo '$(srcdir)/'`src/graphviz.c
+
+src/bison-graphviz.obj: src/graphviz.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-graphviz.obj -MD -MP -MF src/$(DEPDIR)/bison-graphviz.Tpo -c -o src/bison-graphviz.obj `if test -f 'src/graphviz.c'; then $(CYGPATH_W) 'src/graphviz.c'; else $(CYGPATH_W) '$(srcdir)/src/graphviz.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-graphviz.Tpo src/$(DEPDIR)/bison-graphviz.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/graphviz.c' object='src/bison-graphviz.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-graphviz.obj `if test -f 'src/graphviz.c'; then $(CYGPATH_W) 'src/graphviz.c'; else $(CYGPATH_W) '$(srcdir)/src/graphviz.c'; fi`
+
+src/bison-ielr.o: src/ielr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-ielr.o -MD -MP -MF src/$(DEPDIR)/bison-ielr.Tpo -c -o src/bison-ielr.o `test -f 'src/ielr.c' || echo '$(srcdir)/'`src/ielr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-ielr.Tpo src/$(DEPDIR)/bison-ielr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ielr.c' object='src/bison-ielr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-ielr.o `test -f 'src/ielr.c' || echo '$(srcdir)/'`src/ielr.c
+
+src/bison-ielr.obj: src/ielr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-ielr.obj -MD -MP -MF src/$(DEPDIR)/bison-ielr.Tpo -c -o src/bison-ielr.obj `if test -f 'src/ielr.c'; then $(CYGPATH_W) 'src/ielr.c'; else $(CYGPATH_W) '$(srcdir)/src/ielr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-ielr.Tpo src/$(DEPDIR)/bison-ielr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ielr.c' object='src/bison-ielr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-ielr.obj `if test -f 'src/ielr.c'; then $(CYGPATH_W) 'src/ielr.c'; else $(CYGPATH_W) '$(srcdir)/src/ielr.c'; fi`
+
+src/bison-lalr.o: src/lalr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-lalr.o -MD -MP -MF src/$(DEPDIR)/bison-lalr.Tpo -c -o src/bison-lalr.o `test -f 'src/lalr.c' || echo '$(srcdir)/'`src/lalr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-lalr.Tpo src/$(DEPDIR)/bison-lalr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/lalr.c' object='src/bison-lalr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-lalr.o `test -f 'src/lalr.c' || echo '$(srcdir)/'`src/lalr.c
+
+src/bison-lalr.obj: src/lalr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-lalr.obj -MD -MP -MF src/$(DEPDIR)/bison-lalr.Tpo -c -o src/bison-lalr.obj `if test -f 'src/lalr.c'; then $(CYGPATH_W) 'src/lalr.c'; else $(CYGPATH_W) '$(srcdir)/src/lalr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-lalr.Tpo src/$(DEPDIR)/bison-lalr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/lalr.c' object='src/bison-lalr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-lalr.obj `if test -f 'src/lalr.c'; then $(CYGPATH_W) 'src/lalr.c'; else $(CYGPATH_W) '$(srcdir)/src/lalr.c'; fi`
+
+src/bison-location.o: src/location.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-location.o -MD -MP -MF src/$(DEPDIR)/bison-location.Tpo -c -o src/bison-location.o `test -f 'src/location.c' || echo '$(srcdir)/'`src/location.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-location.Tpo src/$(DEPDIR)/bison-location.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/location.c' object='src/bison-location.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-location.o `test -f 'src/location.c' || echo '$(srcdir)/'`src/location.c
+
+src/bison-location.obj: src/location.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-location.obj -MD -MP -MF src/$(DEPDIR)/bison-location.Tpo -c -o src/bison-location.obj `if test -f 'src/location.c'; then $(CYGPATH_W) 'src/location.c'; else $(CYGPATH_W) '$(srcdir)/src/location.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-location.Tpo src/$(DEPDIR)/bison-location.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/location.c' object='src/bison-location.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-location.obj `if test -f 'src/location.c'; then $(CYGPATH_W) 'src/location.c'; else $(CYGPATH_W) '$(srcdir)/src/location.c'; fi`
+
+src/bison-lr0.o: src/lr0.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-lr0.o -MD -MP -MF src/$(DEPDIR)/bison-lr0.Tpo -c -o src/bison-lr0.o `test -f 'src/lr0.c' || echo '$(srcdir)/'`src/lr0.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-lr0.Tpo src/$(DEPDIR)/bison-lr0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/lr0.c' object='src/bison-lr0.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-lr0.o `test -f 'src/lr0.c' || echo '$(srcdir)/'`src/lr0.c
+
+src/bison-lr0.obj: src/lr0.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-lr0.obj -MD -MP -MF src/$(DEPDIR)/bison-lr0.Tpo -c -o src/bison-lr0.obj `if test -f 'src/lr0.c'; then $(CYGPATH_W) 'src/lr0.c'; else $(CYGPATH_W) '$(srcdir)/src/lr0.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-lr0.Tpo src/$(DEPDIR)/bison-lr0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/lr0.c' object='src/bison-lr0.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-lr0.obj `if test -f 'src/lr0.c'; then $(CYGPATH_W) 'src/lr0.c'; else $(CYGPATH_W) '$(srcdir)/src/lr0.c'; fi`
+
+src/bison-main.o: src/main.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-main.o -MD -MP -MF src/$(DEPDIR)/bison-main.Tpo -c -o src/bison-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-main.Tpo src/$(DEPDIR)/bison-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/bison-main.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+
+src/bison-main.obj: src/main.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-main.obj -MD -MP -MF src/$(DEPDIR)/bison-main.Tpo -c -o src/bison-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-main.Tpo src/$(DEPDIR)/bison-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/bison-main.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+
+src/bison-muscle-tab.o: src/muscle-tab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-muscle-tab.o -MD -MP -MF src/$(DEPDIR)/bison-muscle-tab.Tpo -c -o src/bison-muscle-tab.o `test -f 'src/muscle-tab.c' || echo '$(srcdir)/'`src/muscle-tab.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-muscle-tab.Tpo src/$(DEPDIR)/bison-muscle-tab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/muscle-tab.c' object='src/bison-muscle-tab.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-muscle-tab.o `test -f 'src/muscle-tab.c' || echo '$(srcdir)/'`src/muscle-tab.c
+
+src/bison-muscle-tab.obj: src/muscle-tab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-muscle-tab.obj -MD -MP -MF src/$(DEPDIR)/bison-muscle-tab.Tpo -c -o src/bison-muscle-tab.obj `if test -f 'src/muscle-tab.c'; then $(CYGPATH_W) 'src/muscle-tab.c'; else $(CYGPATH_W) '$(srcdir)/src/muscle-tab.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-muscle-tab.Tpo src/$(DEPDIR)/bison-muscle-tab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/muscle-tab.c' object='src/bison-muscle-tab.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-muscle-tab.obj `if test -f 'src/muscle-tab.c'; then $(CYGPATH_W) 'src/muscle-tab.c'; else $(CYGPATH_W) '$(srcdir)/src/muscle-tab.c'; fi`
+
+src/bison-named-ref.o: src/named-ref.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-named-ref.o -MD -MP -MF src/$(DEPDIR)/bison-named-ref.Tpo -c -o src/bison-named-ref.o `test -f 'src/named-ref.c' || echo '$(srcdir)/'`src/named-ref.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-named-ref.Tpo src/$(DEPDIR)/bison-named-ref.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/named-ref.c' object='src/bison-named-ref.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-named-ref.o `test -f 'src/named-ref.c' || echo '$(srcdir)/'`src/named-ref.c
+
+src/bison-named-ref.obj: src/named-ref.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-named-ref.obj -MD -MP -MF src/$(DEPDIR)/bison-named-ref.Tpo -c -o src/bison-named-ref.obj `if test -f 'src/named-ref.c'; then $(CYGPATH_W) 'src/named-ref.c'; else $(CYGPATH_W) '$(srcdir)/src/named-ref.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-named-ref.Tpo src/$(DEPDIR)/bison-named-ref.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/named-ref.c' object='src/bison-named-ref.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-named-ref.obj `if test -f 'src/named-ref.c'; then $(CYGPATH_W) 'src/named-ref.c'; else $(CYGPATH_W) '$(srcdir)/src/named-ref.c'; fi`
+
+src/bison-nullable.o: src/nullable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-nullable.o -MD -MP -MF src/$(DEPDIR)/bison-nullable.Tpo -c -o src/bison-nullable.o `test -f 'src/nullable.c' || echo '$(srcdir)/'`src/nullable.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-nullable.Tpo src/$(DEPDIR)/bison-nullable.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/nullable.c' object='src/bison-nullable.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-nullable.o `test -f 'src/nullable.c' || echo '$(srcdir)/'`src/nullable.c
+
+src/bison-nullable.obj: src/nullable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-nullable.obj -MD -MP -MF src/$(DEPDIR)/bison-nullable.Tpo -c -o src/bison-nullable.obj `if test -f 'src/nullable.c'; then $(CYGPATH_W) 'src/nullable.c'; else $(CYGPATH_W) '$(srcdir)/src/nullable.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-nullable.Tpo src/$(DEPDIR)/bison-nullable.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/nullable.c' object='src/bison-nullable.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-nullable.obj `if test -f 'src/nullable.c'; then $(CYGPATH_W) 'src/nullable.c'; else $(CYGPATH_W) '$(srcdir)/src/nullable.c'; fi`
+
+src/bison-output.o: src/output.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-output.o -MD -MP -MF src/$(DEPDIR)/bison-output.Tpo -c -o src/bison-output.o `test -f 'src/output.c' || echo '$(srcdir)/'`src/output.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-output.Tpo src/$(DEPDIR)/bison-output.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/output.c' object='src/bison-output.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-output.o `test -f 'src/output.c' || echo '$(srcdir)/'`src/output.c
+
+src/bison-output.obj: src/output.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-output.obj -MD -MP -MF src/$(DEPDIR)/bison-output.Tpo -c -o src/bison-output.obj `if test -f 'src/output.c'; then $(CYGPATH_W) 'src/output.c'; else $(CYGPATH_W) '$(srcdir)/src/output.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-output.Tpo src/$(DEPDIR)/bison-output.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/output.c' object='src/bison-output.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-output.obj `if test -f 'src/output.c'; then $(CYGPATH_W) 'src/output.c'; else $(CYGPATH_W) '$(srcdir)/src/output.c'; fi`
+
+src/bison-parse-gram.o: src/parse-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-parse-gram.o -MD -MP -MF src/$(DEPDIR)/bison-parse-gram.Tpo -c -o src/bison-parse-gram.o `test -f 'src/parse-gram.c' || echo '$(srcdir)/'`src/parse-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-parse-gram.Tpo src/$(DEPDIR)/bison-parse-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/parse-gram.c' object='src/bison-parse-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-parse-gram.o `test -f 'src/parse-gram.c' || echo '$(srcdir)/'`src/parse-gram.c
+
+src/bison-parse-gram.obj: src/parse-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-parse-gram.obj -MD -MP -MF src/$(DEPDIR)/bison-parse-gram.Tpo -c -o src/bison-parse-gram.obj `if test -f 'src/parse-gram.c'; then $(CYGPATH_W) 'src/parse-gram.c'; else $(CYGPATH_W) '$(srcdir)/src/parse-gram.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-parse-gram.Tpo src/$(DEPDIR)/bison-parse-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/parse-gram.c' object='src/bison-parse-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-parse-gram.obj `if test -f 'src/parse-gram.c'; then $(CYGPATH_W) 'src/parse-gram.c'; else $(CYGPATH_W) '$(srcdir)/src/parse-gram.c'; fi`
+
+src/bison-print-graph.o: src/print-graph.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print-graph.o -MD -MP -MF src/$(DEPDIR)/bison-print-graph.Tpo -c -o src/bison-print-graph.o `test -f 'src/print-graph.c' || echo '$(srcdir)/'`src/print-graph.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print-graph.Tpo src/$(DEPDIR)/bison-print-graph.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print-graph.c' object='src/bison-print-graph.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print-graph.o `test -f 'src/print-graph.c' || echo '$(srcdir)/'`src/print-graph.c
+
+src/bison-print-graph.obj: src/print-graph.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print-graph.obj -MD -MP -MF src/$(DEPDIR)/bison-print-graph.Tpo -c -o src/bison-print-graph.obj `if test -f 'src/print-graph.c'; then $(CYGPATH_W) 'src/print-graph.c'; else $(CYGPATH_W) '$(srcdir)/src/print-graph.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print-graph.Tpo src/$(DEPDIR)/bison-print-graph.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print-graph.c' object='src/bison-print-graph.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print-graph.obj `if test -f 'src/print-graph.c'; then $(CYGPATH_W) 'src/print-graph.c'; else $(CYGPATH_W) '$(srcdir)/src/print-graph.c'; fi`
+
+src/bison-print-xml.o: src/print-xml.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print-xml.o -MD -MP -MF src/$(DEPDIR)/bison-print-xml.Tpo -c -o src/bison-print-xml.o `test -f 'src/print-xml.c' || echo '$(srcdir)/'`src/print-xml.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print-xml.Tpo src/$(DEPDIR)/bison-print-xml.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print-xml.c' object='src/bison-print-xml.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print-xml.o `test -f 'src/print-xml.c' || echo '$(srcdir)/'`src/print-xml.c
+
+src/bison-print-xml.obj: src/print-xml.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print-xml.obj -MD -MP -MF src/$(DEPDIR)/bison-print-xml.Tpo -c -o src/bison-print-xml.obj `if test -f 'src/print-xml.c'; then $(CYGPATH_W) 'src/print-xml.c'; else $(CYGPATH_W) '$(srcdir)/src/print-xml.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print-xml.Tpo src/$(DEPDIR)/bison-print-xml.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print-xml.c' object='src/bison-print-xml.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print-xml.obj `if test -f 'src/print-xml.c'; then $(CYGPATH_W) 'src/print-xml.c'; else $(CYGPATH_W) '$(srcdir)/src/print-xml.c'; fi`
+
+src/bison-print.o: src/print.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print.o -MD -MP -MF src/$(DEPDIR)/bison-print.Tpo -c -o src/bison-print.o `test -f 'src/print.c' || echo '$(srcdir)/'`src/print.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print.Tpo src/$(DEPDIR)/bison-print.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print.c' object='src/bison-print.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print.o `test -f 'src/print.c' || echo '$(srcdir)/'`src/print.c
+
+src/bison-print.obj: src/print.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-print.obj -MD -MP -MF src/$(DEPDIR)/bison-print.Tpo -c -o src/bison-print.obj `if test -f 'src/print.c'; then $(CYGPATH_W) 'src/print.c'; else $(CYGPATH_W) '$(srcdir)/src/print.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-print.Tpo src/$(DEPDIR)/bison-print.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/print.c' object='src/bison-print.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-print.obj `if test -f 'src/print.c'; then $(CYGPATH_W) 'src/print.c'; else $(CYGPATH_W) '$(srcdir)/src/print.c'; fi`
+
+src/bison-reader.o: src/reader.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-reader.o -MD -MP -MF src/$(DEPDIR)/bison-reader.Tpo -c -o src/bison-reader.o `test -f 'src/reader.c' || echo '$(srcdir)/'`src/reader.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-reader.Tpo src/$(DEPDIR)/bison-reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/reader.c' object='src/bison-reader.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-reader.o `test -f 'src/reader.c' || echo '$(srcdir)/'`src/reader.c
+
+src/bison-reader.obj: src/reader.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-reader.obj -MD -MP -MF src/$(DEPDIR)/bison-reader.Tpo -c -o src/bison-reader.obj `if test -f 'src/reader.c'; then $(CYGPATH_W) 'src/reader.c'; else $(CYGPATH_W) '$(srcdir)/src/reader.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-reader.Tpo src/$(DEPDIR)/bison-reader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/reader.c' object='src/bison-reader.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-reader.obj `if test -f 'src/reader.c'; then $(CYGPATH_W) 'src/reader.c'; else $(CYGPATH_W) '$(srcdir)/src/reader.c'; fi`
+
+src/bison-reduce.o: src/reduce.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-reduce.o -MD -MP -MF src/$(DEPDIR)/bison-reduce.Tpo -c -o src/bison-reduce.o `test -f 'src/reduce.c' || echo '$(srcdir)/'`src/reduce.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-reduce.Tpo src/$(DEPDIR)/bison-reduce.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/reduce.c' object='src/bison-reduce.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-reduce.o `test -f 'src/reduce.c' || echo '$(srcdir)/'`src/reduce.c
+
+src/bison-reduce.obj: src/reduce.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-reduce.obj -MD -MP -MF src/$(DEPDIR)/bison-reduce.Tpo -c -o src/bison-reduce.obj `if test -f 'src/reduce.c'; then $(CYGPATH_W) 'src/reduce.c'; else $(CYGPATH_W) '$(srcdir)/src/reduce.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-reduce.Tpo src/$(DEPDIR)/bison-reduce.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/reduce.c' object='src/bison-reduce.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-reduce.obj `if test -f 'src/reduce.c'; then $(CYGPATH_W) 'src/reduce.c'; else $(CYGPATH_W) '$(srcdir)/src/reduce.c'; fi`
+
+src/bison-relation.o: src/relation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-relation.o -MD -MP -MF src/$(DEPDIR)/bison-relation.Tpo -c -o src/bison-relation.o `test -f 'src/relation.c' || echo '$(srcdir)/'`src/relation.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-relation.Tpo src/$(DEPDIR)/bison-relation.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/relation.c' object='src/bison-relation.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-relation.o `test -f 'src/relation.c' || echo '$(srcdir)/'`src/relation.c
+
+src/bison-relation.obj: src/relation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-relation.obj -MD -MP -MF src/$(DEPDIR)/bison-relation.Tpo -c -o src/bison-relation.obj `if test -f 'src/relation.c'; then $(CYGPATH_W) 'src/relation.c'; else $(CYGPATH_W) '$(srcdir)/src/relation.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-relation.Tpo src/$(DEPDIR)/bison-relation.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/relation.c' object='src/bison-relation.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-relation.obj `if test -f 'src/relation.c'; then $(CYGPATH_W) 'src/relation.c'; else $(CYGPATH_W) '$(srcdir)/src/relation.c'; fi`
+
+src/bison-scan-code-c.o: src/scan-code-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-code-c.o -MD -MP -MF src/$(DEPDIR)/bison-scan-code-c.Tpo -c -o src/bison-scan-code-c.o `test -f 'src/scan-code-c.c' || echo '$(srcdir)/'`src/scan-code-c.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-code-c.Tpo src/$(DEPDIR)/bison-scan-code-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-code-c.c' object='src/bison-scan-code-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-code-c.o `test -f 'src/scan-code-c.c' || echo '$(srcdir)/'`src/scan-code-c.c
+
+src/bison-scan-code-c.obj: src/scan-code-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-code-c.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-code-c.Tpo -c -o src/bison-scan-code-c.obj `if test -f 'src/scan-code-c.c'; then $(CYGPATH_W) 'src/scan-code-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-code-c.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-code-c.Tpo src/$(DEPDIR)/bison-scan-code-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-code-c.c' object='src/bison-scan-code-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-code-c.obj `if test -f 'src/scan-code-c.c'; then $(CYGPATH_W) 'src/scan-code-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-code-c.c'; fi`
+
+src/bison-scan-gram-c.o: src/scan-gram-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-gram-c.o -MD -MP -MF src/$(DEPDIR)/bison-scan-gram-c.Tpo -c -o src/bison-scan-gram-c.o `test -f 'src/scan-gram-c.c' || echo '$(srcdir)/'`src/scan-gram-c.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-gram-c.Tpo src/$(DEPDIR)/bison-scan-gram-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-gram-c.c' object='src/bison-scan-gram-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-gram-c.o `test -f 'src/scan-gram-c.c' || echo '$(srcdir)/'`src/scan-gram-c.c
+
+src/bison-scan-gram-c.obj: src/scan-gram-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-gram-c.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-gram-c.Tpo -c -o src/bison-scan-gram-c.obj `if test -f 'src/scan-gram-c.c'; then $(CYGPATH_W) 'src/scan-gram-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-gram-c.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-gram-c.Tpo src/$(DEPDIR)/bison-scan-gram-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-gram-c.c' object='src/bison-scan-gram-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-gram-c.obj `if test -f 'src/scan-gram-c.c'; then $(CYGPATH_W) 'src/scan-gram-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-gram-c.c'; fi`
+
+src/bison-scan-skel-c.o: src/scan-skel-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-skel-c.o -MD -MP -MF src/$(DEPDIR)/bison-scan-skel-c.Tpo -c -o src/bison-scan-skel-c.o `test -f 'src/scan-skel-c.c' || echo '$(srcdir)/'`src/scan-skel-c.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-skel-c.Tpo src/$(DEPDIR)/bison-scan-skel-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-skel-c.c' object='src/bison-scan-skel-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-skel-c.o `test -f 'src/scan-skel-c.c' || echo '$(srcdir)/'`src/scan-skel-c.c
+
+src/bison-scan-skel-c.obj: src/scan-skel-c.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-skel-c.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-skel-c.Tpo -c -o src/bison-scan-skel-c.obj `if test -f 'src/scan-skel-c.c'; then $(CYGPATH_W) 'src/scan-skel-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-skel-c.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-skel-c.Tpo src/$(DEPDIR)/bison-scan-skel-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-skel-c.c' object='src/bison-scan-skel-c.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-skel-c.obj `if test -f 'src/scan-skel-c.c'; then $(CYGPATH_W) 'src/scan-skel-c.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-skel-c.c'; fi`
+
+src/bison-state.o: src/state.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-state.o -MD -MP -MF src/$(DEPDIR)/bison-state.Tpo -c -o src/bison-state.o `test -f 'src/state.c' || echo '$(srcdir)/'`src/state.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-state.Tpo src/$(DEPDIR)/bison-state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/state.c' object='src/bison-state.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-state.o `test -f 'src/state.c' || echo '$(srcdir)/'`src/state.c
+
+src/bison-state.obj: src/state.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-state.obj -MD -MP -MF src/$(DEPDIR)/bison-state.Tpo -c -o src/bison-state.obj `if test -f 'src/state.c'; then $(CYGPATH_W) 'src/state.c'; else $(CYGPATH_W) '$(srcdir)/src/state.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-state.Tpo src/$(DEPDIR)/bison-state.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/state.c' object='src/bison-state.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-state.obj `if test -f 'src/state.c'; then $(CYGPATH_W) 'src/state.c'; else $(CYGPATH_W) '$(srcdir)/src/state.c'; fi`
+
+src/bison-symlist.o: src/symlist.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-symlist.o -MD -MP -MF src/$(DEPDIR)/bison-symlist.Tpo -c -o src/bison-symlist.o `test -f 'src/symlist.c' || echo '$(srcdir)/'`src/symlist.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-symlist.Tpo src/$(DEPDIR)/bison-symlist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/symlist.c' object='src/bison-symlist.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-symlist.o `test -f 'src/symlist.c' || echo '$(srcdir)/'`src/symlist.c
+
+src/bison-symlist.obj: src/symlist.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-symlist.obj -MD -MP -MF src/$(DEPDIR)/bison-symlist.Tpo -c -o src/bison-symlist.obj `if test -f 'src/symlist.c'; then $(CYGPATH_W) 'src/symlist.c'; else $(CYGPATH_W) '$(srcdir)/src/symlist.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-symlist.Tpo src/$(DEPDIR)/bison-symlist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/symlist.c' object='src/bison-symlist.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-symlist.obj `if test -f 'src/symlist.c'; then $(CYGPATH_W) 'src/symlist.c'; else $(CYGPATH_W) '$(srcdir)/src/symlist.c'; fi`
+
+src/bison-symtab.o: src/symtab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-symtab.o -MD -MP -MF src/$(DEPDIR)/bison-symtab.Tpo -c -o src/bison-symtab.o `test -f 'src/symtab.c' || echo '$(srcdir)/'`src/symtab.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-symtab.Tpo src/$(DEPDIR)/bison-symtab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/symtab.c' object='src/bison-symtab.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-symtab.o `test -f 'src/symtab.c' || echo '$(srcdir)/'`src/symtab.c
+
+src/bison-symtab.obj: src/symtab.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-symtab.obj -MD -MP -MF src/$(DEPDIR)/bison-symtab.Tpo -c -o src/bison-symtab.obj `if test -f 'src/symtab.c'; then $(CYGPATH_W) 'src/symtab.c'; else $(CYGPATH_W) '$(srcdir)/src/symtab.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-symtab.Tpo src/$(DEPDIR)/bison-symtab.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/symtab.c' object='src/bison-symtab.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-symtab.obj `if test -f 'src/symtab.c'; then $(CYGPATH_W) 'src/symtab.c'; else $(CYGPATH_W) '$(srcdir)/src/symtab.c'; fi`
+
+src/bison-tables.o: src/tables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-tables.o -MD -MP -MF src/$(DEPDIR)/bison-tables.Tpo -c -o src/bison-tables.o `test -f 'src/tables.c' || echo '$(srcdir)/'`src/tables.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-tables.Tpo src/$(DEPDIR)/bison-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tables.c' object='src/bison-tables.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-tables.o `test -f 'src/tables.c' || echo '$(srcdir)/'`src/tables.c
+
+src/bison-tables.obj: src/tables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-tables.obj -MD -MP -MF src/$(DEPDIR)/bison-tables.Tpo -c -o src/bison-tables.obj `if test -f 'src/tables.c'; then $(CYGPATH_W) 'src/tables.c'; else $(CYGPATH_W) '$(srcdir)/src/tables.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-tables.Tpo src/$(DEPDIR)/bison-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tables.c' object='src/bison-tables.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-tables.obj `if test -f 'src/tables.c'; then $(CYGPATH_W) 'src/tables.c'; else $(CYGPATH_W) '$(srcdir)/src/tables.c'; fi`
+
+src/bison-uniqstr.o: src/uniqstr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-uniqstr.o -MD -MP -MF src/$(DEPDIR)/bison-uniqstr.Tpo -c -o src/bison-uniqstr.o `test -f 'src/uniqstr.c' || echo '$(srcdir)/'`src/uniqstr.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-uniqstr.Tpo src/$(DEPDIR)/bison-uniqstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/uniqstr.c' object='src/bison-uniqstr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-uniqstr.o `test -f 'src/uniqstr.c' || echo '$(srcdir)/'`src/uniqstr.c
+
+src/bison-uniqstr.obj: src/uniqstr.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-uniqstr.obj -MD -MP -MF src/$(DEPDIR)/bison-uniqstr.Tpo -c -o src/bison-uniqstr.obj `if test -f 'src/uniqstr.c'; then $(CYGPATH_W) 'src/uniqstr.c'; else $(CYGPATH_W) '$(srcdir)/src/uniqstr.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-uniqstr.Tpo src/$(DEPDIR)/bison-uniqstr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/uniqstr.c' object='src/bison-uniqstr.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-uniqstr.obj `if test -f 'src/uniqstr.c'; then $(CYGPATH_W) 'src/uniqstr.c'; else $(CYGPATH_W) '$(srcdir)/src/uniqstr.c'; fi`
+
+src/bison-scan-code.o: src/scan-code.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-code.o -MD -MP -MF src/$(DEPDIR)/bison-scan-code.Tpo -c -o src/bison-scan-code.o `test -f 'src/scan-code.c' || echo '$(srcdir)/'`src/scan-code.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-code.Tpo src/$(DEPDIR)/bison-scan-code.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-code.c' object='src/bison-scan-code.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-code.o `test -f 'src/scan-code.c' || echo '$(srcdir)/'`src/scan-code.c
+
+src/bison-scan-code.obj: src/scan-code.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-code.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-code.Tpo -c -o src/bison-scan-code.obj `if test -f 'src/scan-code.c'; then $(CYGPATH_W) 'src/scan-code.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-code.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-code.Tpo src/$(DEPDIR)/bison-scan-code.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-code.c' object='src/bison-scan-code.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-code.obj `if test -f 'src/scan-code.c'; then $(CYGPATH_W) 'src/scan-code.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-code.c'; fi`
+
+src/bison-scan-gram.o: src/scan-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-gram.o -MD -MP -MF src/$(DEPDIR)/bison-scan-gram.Tpo -c -o src/bison-scan-gram.o `test -f 'src/scan-gram.c' || echo '$(srcdir)/'`src/scan-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-gram.Tpo src/$(DEPDIR)/bison-scan-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-gram.c' object='src/bison-scan-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-gram.o `test -f 'src/scan-gram.c' || echo '$(srcdir)/'`src/scan-gram.c
+
+src/bison-scan-gram.obj: src/scan-gram.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-gram.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-gram.Tpo -c -o src/bison-scan-gram.obj `if test -f 'src/scan-gram.c'; then $(CYGPATH_W) 'src/scan-gram.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-gram.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-gram.Tpo src/$(DEPDIR)/bison-scan-gram.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-gram.c' object='src/bison-scan-gram.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-gram.obj `if test -f 'src/scan-gram.c'; then $(CYGPATH_W) 'src/scan-gram.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-gram.c'; fi`
+
+src/bison-scan-skel.o: src/scan-skel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-skel.o -MD -MP -MF src/$(DEPDIR)/bison-scan-skel.Tpo -c -o src/bison-scan-skel.o `test -f 'src/scan-skel.c' || echo '$(srcdir)/'`src/scan-skel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-skel.Tpo src/$(DEPDIR)/bison-scan-skel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-skel.c' object='src/bison-scan-skel.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-skel.o `test -f 'src/scan-skel.c' || echo '$(srcdir)/'`src/scan-skel.c
+
+src/bison-scan-skel.obj: src/scan-skel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -MT src/bison-scan-skel.obj -MD -MP -MF src/$(DEPDIR)/bison-scan-skel.Tpo -c -o src/bison-scan-skel.obj `if test -f 'src/scan-skel.c'; then $(CYGPATH_W) 'src/scan-skel.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-skel.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/bison-scan-skel.Tpo src/$(DEPDIR)/bison-scan-skel.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/scan-skel.c' object='src/bison-scan-skel.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) $(src_bison_CPPFLAGS) $(CPPFLAGS) $(src_bison_CFLAGS) $(CFLAGS) -c -o src/bison-scan-skel.obj `if test -f 'src/scan-skel.c'; then $(CYGPATH_W) 'src/scan-skel.c'; else $(CYGPATH_W) '$(srcdir)/src/scan-skel.c'; fi`
+
+.cc.o:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.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) '$<'`
+
+examples/c++/calc++/calc__-driver.o: examples/c++/calc++/driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-driver.o -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-driver.Tpo -c -o examples/c++/calc++/calc__-driver.o `test -f 'examples/c++/calc++/driver.cc' || echo '$(srcdir)/'`examples/c++/calc++/driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-driver.Tpo examples/c++/calc++/$(DEPDIR)/calc__-driver.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/driver.cc' object='examples/c++/calc++/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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-driver.o `test -f 'examples/c++/calc++/driver.cc' || echo '$(srcdir)/'`examples/c++/calc++/driver.cc
+
+examples/c++/calc++/calc__-driver.obj: examples/c++/calc++/driver.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-driver.obj -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-driver.Tpo -c -o examples/c++/calc++/calc__-driver.obj `if test -f 'examples/c++/calc++/driver.cc'; then $(CYGPATH_W) 'examples/c++/calc++/driver.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/driver.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-driver.Tpo examples/c++/calc++/$(DEPDIR)/calc__-driver.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/driver.cc' object='examples/c++/calc++/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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-driver.obj `if test -f 'examples/c++/calc++/driver.cc'; then $(CYGPATH_W) 'examples/c++/calc++/driver.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/driver.cc'; fi`
+
+examples/c++/calc++/calc__-scanner.o: examples/c++/calc++/scanner.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-scanner.o -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-scanner.Tpo -c -o examples/c++/calc++/calc__-scanner.o `test -f 'examples/c++/calc++/scanner.cc' || echo '$(srcdir)/'`examples/c++/calc++/scanner.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-scanner.Tpo examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/scanner.cc' object='examples/c++/calc++/calc__-scanner.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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-scanner.o `test -f 'examples/c++/calc++/scanner.cc' || echo '$(srcdir)/'`examples/c++/calc++/scanner.cc
+
+examples/c++/calc++/calc__-scanner.obj: examples/c++/calc++/scanner.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-scanner.obj -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-scanner.Tpo -c -o examples/c++/calc++/calc__-scanner.obj `if test -f 'examples/c++/calc++/scanner.cc'; then $(CYGPATH_W) 'examples/c++/calc++/scanner.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/scanner.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-scanner.Tpo examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/scanner.cc' object='examples/c++/calc++/calc__-scanner.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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-scanner.obj `if test -f 'examples/c++/calc++/scanner.cc'; then $(CYGPATH_W) 'examples/c++/calc++/scanner.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/scanner.cc'; fi`
+
+examples/c++/calc++/calc__-calc++.o: examples/c++/calc++/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-calc++.o -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-calc++.Tpo -c -o examples/c++/calc++/calc__-calc++.o `test -f 'examples/c++/calc++/calc++.cc' || echo '$(srcdir)/'`examples/c++/calc++/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-calc++.Tpo examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/calc++.cc' object='examples/c++/calc++/calc__-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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-calc++.o `test -f 'examples/c++/calc++/calc++.cc' || echo '$(srcdir)/'`examples/c++/calc++/calc++.cc
+
+examples/c++/calc++/calc__-calc++.obj: examples/c++/calc++/calc++.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-calc++.obj -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-calc++.Tpo -c -o examples/c++/calc++/calc__-calc++.obj `if test -f 'examples/c++/calc++/calc++.cc'; then $(CYGPATH_W) 'examples/c++/calc++/calc++.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/calc++.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-calc++.Tpo examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/calc++.cc' object='examples/c++/calc++/calc__-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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-calc++.obj `if test -f 'examples/c++/calc++/calc++.cc'; then $(CYGPATH_W) 'examples/c++/calc++/calc++.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/calc++.cc'; fi`
+
+examples/c++/calc++/calc__-parser.o: examples/c++/calc++/parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-parser.o -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-parser.Tpo -c -o examples/c++/calc++/calc__-parser.o `test -f 'examples/c++/calc++/parser.cc' || echo '$(srcdir)/'`examples/c++/calc++/parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-parser.Tpo examples/c++/calc++/$(DEPDIR)/calc__-parser.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/parser.cc' object='examples/c++/calc++/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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-parser.o `test -f 'examples/c++/calc++/parser.cc' || echo '$(srcdir)/'`examples/c++/calc++/parser.cc
+
+examples/c++/calc++/calc__-parser.obj: examples/c++/calc++/parser.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -MT examples/c++/calc++/calc__-parser.obj -MD -MP -MF examples/c++/calc++/$(DEPDIR)/calc__-parser.Tpo -c -o examples/c++/calc++/calc__-parser.obj `if test -f 'examples/c++/calc++/parser.cc'; then $(CYGPATH_W) 'examples/c++/calc++/parser.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/parser.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/calc++/$(DEPDIR)/calc__-parser.Tpo examples/c++/calc++/$(DEPDIR)/calc__-parser.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/calc++/parser.cc' object='examples/c++/calc++/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) $(examples_c___calc___calc___CPPFLAGS) $(CPPFLAGS) $(examples_c___calc___calc___CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/calc++/calc__-parser.obj `if test -f 'examples/c++/calc++/parser.cc'; then $(CYGPATH_W) 'examples/c++/calc++/parser.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/calc++/parser.cc'; fi`
+
+examples/c++/simple-simple.o: examples/c++/simple.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___simple_CPPFLAGS) $(CPPFLAGS) $(examples_c___simple_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/simple-simple.o -MD -MP -MF examples/c++/$(DEPDIR)/simple-simple.Tpo -c -o examples/c++/simple-simple.o `test -f 'examples/c++/simple.cc' || echo '$(srcdir)/'`examples/c++/simple.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/simple-simple.Tpo examples/c++/$(DEPDIR)/simple-simple.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/simple.cc' object='examples/c++/simple-simple.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) $(examples_c___simple_CPPFLAGS) $(CPPFLAGS) $(examples_c___simple_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/simple-simple.o `test -f 'examples/c++/simple.cc' || echo '$(srcdir)/'`examples/c++/simple.cc
+
+examples/c++/simple-simple.obj: examples/c++/simple.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___simple_CPPFLAGS) $(CPPFLAGS) $(examples_c___simple_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/simple-simple.obj -MD -MP -MF examples/c++/$(DEPDIR)/simple-simple.Tpo -c -o examples/c++/simple-simple.obj `if test -f 'examples/c++/simple.cc'; then $(CYGPATH_W) 'examples/c++/simple.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/simple.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/simple-simple.Tpo examples/c++/$(DEPDIR)/simple-simple.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/simple.cc' object='examples/c++/simple-simple.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) $(examples_c___simple_CPPFLAGS) $(CPPFLAGS) $(examples_c___simple_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/simple-simple.obj `if test -f 'examples/c++/simple.cc'; then $(CYGPATH_W) 'examples/c++/simple.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/simple.cc'; fi`
+
+examples/c++/variant-variant.o: examples/c++/variant.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___variant_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/variant-variant.o -MD -MP -MF examples/c++/$(DEPDIR)/variant-variant.Tpo -c -o examples/c++/variant-variant.o `test -f 'examples/c++/variant.cc' || echo '$(srcdir)/'`examples/c++/variant.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/variant-variant.Tpo examples/c++/$(DEPDIR)/variant-variant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/variant.cc' object='examples/c++/variant-variant.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) $(examples_c___variant_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/variant-variant.o `test -f 'examples/c++/variant.cc' || echo '$(srcdir)/'`examples/c++/variant.cc
+
+examples/c++/variant-variant.obj: examples/c++/variant.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___variant_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/variant-variant.obj -MD -MP -MF examples/c++/$(DEPDIR)/variant-variant.Tpo -c -o examples/c++/variant-variant.obj `if test -f 'examples/c++/variant.cc'; then $(CYGPATH_W) 'examples/c++/variant.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/variant.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/variant-variant.Tpo examples/c++/$(DEPDIR)/variant-variant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/variant.cc' object='examples/c++/variant-variant.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) $(examples_c___variant_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/variant-variant.obj `if test -f 'examples/c++/variant.cc'; then $(CYGPATH_W) 'examples/c++/variant.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/variant.cc'; fi`
+
+examples/c++/variant_11-variant-11.o: examples/c++/variant-11.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___variant_11_CPPFLAGS) $(CPPFLAGS) $(examples_c___variant_11_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/variant_11-variant-11.o -MD -MP -MF examples/c++/$(DEPDIR)/variant_11-variant-11.Tpo -c -o examples/c++/variant_11-variant-11.o `test -f 'examples/c++/variant-11.cc' || echo '$(srcdir)/'`examples/c++/variant-11.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/variant_11-variant-11.Tpo examples/c++/$(DEPDIR)/variant_11-variant-11.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/variant-11.cc' object='examples/c++/variant_11-variant-11.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) $(examples_c___variant_11_CPPFLAGS) $(CPPFLAGS) $(examples_c___variant_11_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/variant_11-variant-11.o `test -f 'examples/c++/variant-11.cc' || echo '$(srcdir)/'`examples/c++/variant-11.cc
+
+examples/c++/variant_11-variant-11.obj: examples/c++/variant-11.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(examples_c___variant_11_CPPFLAGS) $(CPPFLAGS) $(examples_c___variant_11_CXXFLAGS) $(CXXFLAGS) -MT examples/c++/variant_11-variant-11.obj -MD -MP -MF examples/c++/$(DEPDIR)/variant_11-variant-11.Tpo -c -o examples/c++/variant_11-variant-11.obj `if test -f 'examples/c++/variant-11.cc'; then $(CYGPATH_W) 'examples/c++/variant-11.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/variant-11.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) examples/c++/$(DEPDIR)/variant_11-variant-11.Tpo examples/c++/$(DEPDIR)/variant_11-variant-11.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='examples/c++/variant-11.cc' object='examples/c++/variant_11-variant-11.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) $(examples_c___variant_11_CPPFLAGS) $(CPPFLAGS) $(examples_c___variant_11_CXXFLAGS) $(CXXFLAGS) -c -o examples/c++/variant_11-variant-11.obj `if test -f 'examples/c++/variant-11.cc'; then $(CYGPATH_W) 'examples/c++/variant-11.cc'; else $(CYGPATH_W) '$(srcdir)/examples/c++/variant-11.cc'; fi`
+
+.l.c:
+	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+examples/c/lexcalc/scan.c: examples/c/lexcalc/scan.l
+	$(AM_V_LEX) \
+	$(SHELL) $(YLWRAP) `test -f 'examples/c/lexcalc/scan.l' || echo '$(srcdir)/'`examples/c/lexcalc/scan.l $(LEX_OUTPUT_ROOT).c examples/c/lexcalc/scan.c -- $(LEX) $(AM_LFLAGS) $(LFLAGS)
+
+.ll.cc:
+	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+examples/c++/calc++/scanner.cc: examples/c++/calc++/scanner.ll
+	$(AM_V_LEX) \
+	$(SHELL) $(YLWRAP) `test -f 'examples/c++/calc++/scanner.ll' || echo '$(srcdir)/'`examples/c++/calc++/scanner.ll $(LEX_OUTPUT_ROOT).c examples/c++/calc++/scanner.cc -- $(LEX) $(AM_LFLAGS) $(LFLAGS)
+
+.y.c:
+	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
+
+.yy.cc:
+	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
+
+examples/c++/simple.cc: examples/c++/simple.yy
+	$(AM_V_YACC) \
+	$(SHELL) $(YLWRAP) `test -f 'examples/c++/simple.yy' || echo '$(srcdir)/'`examples/c++/simple.yy y.tab.c examples/c++/simple.cc y.tab.h `echo examples/c++/simple.cc | $(am__yacc_c2h)` y.output examples/c++/simple.output -- $(YACC) $(AM_YFLAGS) $(YFLAGS)
+
+examples/c++/variant.cc: examples/c++/variant.yy
+	$(AM_V_YACC) \
+	$(SHELL) $(YLWRAP) `test -f 'examples/c++/variant.yy' || echo '$(srcdir)/'`examples/c++/variant.yy y.tab.c examples/c++/variant.cc y.tab.h `echo examples/c++/variant.cc | $(am__yacc_c2h)` y.output examples/c++/variant.output -- $(YACC) $(AM_YFLAGS) $(YFLAGS)
+
+examples/c++/variant-11.cc: examples/c++/variant-11.yy
+	$(AM_V_YACC) \
+	$(SHELL) $(YLWRAP) `test -f 'examples/c++/variant-11.yy' || echo '$(srcdir)/'`examples/c++/variant-11.yy y.tab.c examples/c++/variant-11.cc y.tab.h `echo examples/c++/variant-11.cc | $(am__yacc_c2h)` y.output examples/c++/variant-11.output -- $(YACC) $(AM_YFLAGS) $(YFLAGS)
+doc/$(am__dirstamp):
+	@$(MKDIR_P) doc
+	@: > doc/$(am__dirstamp)
+
+$(srcdir)/doc/bison.info: doc/bison.texi $(srcdir)/doc/version.texi $(doc_bison_TEXINFOS)
+	$(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 \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	cd "$$am__cwd"; \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+	 -o $@ $(srcdir)/doc/bison.texi; \
+	then \
+	  rc=0; \
+	  $(am__cd) $(srcdir); \
+	else \
+	  rc=$$?; \
+	  $(am__cd) $(srcdir) && \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+doc/bison.dvi: doc/bison.texi $(srcdir)/doc/version.texi $(doc_bison_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+	$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+	`test -f 'doc/bison.texi' || echo '$(srcdir)/'`doc/bison.texi
+
+doc/bison.pdf: doc/bison.texi $(srcdir)/doc/version.texi $(doc_bison_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \
+	$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+	`test -f 'doc/bison.texi' || echo '$(srcdir)/'`doc/bison.texi
+
+doc/bison.html: doc/bison.texi $(srcdir)/doc/version.texi $(doc_bison_TEXINFOS) doc/$(am__dirstamp)
+	$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+	$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \
+	 -o $(@:.html=.htp) `test -f 'doc/bison.texi' || echo '$(srcdir)/'`doc/bison.texi; \
+	then \
+	  rm -rf $@ && mv $(@:.html=.htp) $@; \
+	else \
+	  rm -rf $(@:.html=.htp); exit 1; \
+	fi
+$(srcdir)/doc/version.texi:  $(srcdir)/doc/stamp-vti
+$(srcdir)/doc/stamp-vti: doc/bison.texi $(top_srcdir)/configure
+	@test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS) doc/$(am__dirstamp)
+	@(dir=.; test -f ./doc/bison.texi || dir=$(srcdir); \
+	set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/doc/bison.texi`; \
+	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)/doc/version.texi \
+	  || (echo "Updating $(srcdir)/doc/version.texi" && \
+	      cp vti.tmp$$$$ $(srcdir)/doc/version.texi.tmp$$$$ && \
+	      mv $(srcdir)/doc/version.texi.tmp$$$$ $(srcdir)/doc/version.texi)) && \
+	rm -f vti.tmp$$$$ $(srcdir)/doc/version.texi.$$$$
+	@cp $(srcdir)/doc/version.texi $@
+
+mostlyclean-vti:
+	-rm -f vti.tmp* $(srcdir)/doc/version.texi.tmp*
+
+maintainer-clean-vti:
+	-rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi
+.dvi.ps:
+	$(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 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'"; \
+	    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)
+	@list='$(INFO_DEPS)'; \
+	for file in $$list; do \
+	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
+	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+	  (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)'; \
+	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; \
+	  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 doc/bison.t2d doc/bison.t2p
+
+clean-aminfo:
+	-test -z "doc/bison.dvi doc/bison.pdf doc/bison.ps doc/bison.html" \
+	|| rm -rf doc/bison.dvi doc/bison.pdf doc/bison.ps doc/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: $(dist_man_MANS) $(nodist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@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 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=''; 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)
 install-aclocalDATA: $(aclocal_DATA)
 	@$(NORMAL_INSTALL)
 	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
@@ -1521,6 +7737,426 @@
 	@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)
+install-calcxxDATA: $(calcxx_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(calcxx_DATA)'; test -n "$(calcxxdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(calcxxdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(calcxxdir)" || 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)$(calcxxdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(calcxxdir)" || exit $$?; \
+	done
+
+uninstall-calcxxDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(calcxx_DATA)'; test -n "$(calcxxdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(calcxxdir)'; $(am__uninstall_files_from_dir)
+install-cxxDATA: $(cxx_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(cxx_DATA)'; test -n "$(cxxdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(cxxdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(cxxdir)" || 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)$(cxxdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cxxdir)" || exit $$?; \
+	done
+
+uninstall-cxxDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(cxx_DATA)'; test -n "$(cxxdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(cxxdir)'; $(am__uninstall_files_from_dir)
+install-dist_cDATA: $(dist_c_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_c_DATA)'; test -n "$(cdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(cdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(cdir)" || 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)$(cdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cdir)" || exit $$?; \
+	done
+
+uninstall-dist_cDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_c_DATA)'; test -n "$(cdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(cdir)'; $(am__uninstall_files_from_dir)
+install-dist_calcDATA: $(dist_calc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_calc_DATA)'; test -n "$(calcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(calcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(calcdir)" || 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)$(calcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(calcdir)" || exit $$?; \
+	done
+
+uninstall-dist_calcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_calc_DATA)'; test -n "$(calcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(calcdir)'; $(am__uninstall_files_from_dir)
+install-dist_calcxxDATA: $(dist_calcxx_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_calcxx_DATA)'; test -n "$(calcxxdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(calcxxdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(calcxxdir)" || 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)$(calcxxdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(calcxxdir)" || exit $$?; \
+	done
+
+uninstall-dist_calcxxDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_calcxx_DATA)'; test -n "$(calcxxdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(calcxxdir)'; $(am__uninstall_files_from_dir)
+install-dist_cxxDATA: $(dist_cxx_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_cxx_DATA)'; test -n "$(cxxdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(cxxdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(cxxdir)" || 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)$(cxxdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cxxdir)" || exit $$?; \
+	done
+
+uninstall-dist_cxxDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_cxx_DATA)'; test -n "$(cxxdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(cxxdir)'; $(am__uninstall_files_from_dir)
+install-dist_dDATA: $(dist_d_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_d_DATA)'; test -n "$(ddir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(ddir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(ddir)" || 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)$(ddir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(ddir)" || exit $$?; \
+	done
+
+uninstall-dist_dDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_d_DATA)'; test -n "$(ddir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(ddir)'; $(am__uninstall_files_from_dir)
+install-dist_docDATA: $(dist_doc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(docdir)" || 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)$(docdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+	done
+
+uninstall-dist_docDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+install-dist_examplesDATA: $(dist_examples_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_examples_DATA)'; test -n "$(examplesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(examplesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(examplesdir)" || 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)$(examplesdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(examplesdir)" || exit $$?; \
+	done
+
+uninstall-dist_examplesDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_examples_DATA)'; test -n "$(examplesdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(examplesdir)'; $(am__uninstall_files_from_dir)
+install-dist_javaDATA: $(dist_java_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_java_DATA)'; test -n "$(javadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(javadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(javadir)" || 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)$(javadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(javadir)" || exit $$?; \
+	done
+
+uninstall-dist_javaDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_java_DATA)'; test -n "$(javadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(javadir)'; $(am__uninstall_files_from_dir)
+install-dist_lexcalcDATA: $(dist_lexcalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_lexcalc_DATA)'; test -n "$(lexcalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(lexcalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(lexcalcdir)" || 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)$(lexcalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(lexcalcdir)" || exit $$?; \
+	done
+
+uninstall-dist_lexcalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_lexcalc_DATA)'; test -n "$(lexcalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(lexcalcdir)'; $(am__uninstall_files_from_dir)
+install-dist_m4sugarDATA: $(dist_m4sugar_DATA)
+	@$(NORMAL_INSTALL)
+	@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; \
+	  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)'; 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_mfcalcDATA: $(dist_mfcalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_mfcalc_DATA)'; test -n "$(mfcalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(mfcalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(mfcalcdir)" || 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)$(mfcalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(mfcalcdir)" || exit $$?; \
+	done
+
+uninstall-dist_mfcalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_mfcalc_DATA)'; test -n "$(mfcalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(mfcalcdir)'; $(am__uninstall_files_from_dir)
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+	@$(NORMAL_INSTALL)
+	@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; \
+	  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)'; 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_reccalcDATA: $(dist_reccalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_reccalc_DATA)'; test -n "$(reccalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(reccalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(reccalcdir)" || 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)$(reccalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(reccalcdir)" || exit $$?; \
+	done
+
+uninstall-dist_reccalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_reccalc_DATA)'; test -n "$(reccalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(reccalcdir)'; $(am__uninstall_files_from_dir)
+install-dist_rpcalcDATA: $(dist_rpcalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_rpcalc_DATA)'; test -n "$(rpcalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(rpcalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(rpcalcdir)" || 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)$(rpcalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(rpcalcdir)" || exit $$?; \
+	done
+
+uninstall-dist_rpcalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_rpcalc_DATA)'; test -n "$(rpcalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(rpcalcdir)'; $(am__uninstall_files_from_dir)
+install-dist_skeletonsDATA: $(dist_skeletons_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_skeletons_DATA)'; test -n "$(skeletonsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(skeletonsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(skeletonsdir)" || 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)$(skeletonsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(skeletonsdir)" || exit $$?; \
+	done
+
+uninstall-dist_skeletonsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_skeletons_DATA)'; test -n "$(skeletonsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(skeletonsdir)'; $(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)
+install-mfcalcDATA: $(mfcalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(mfcalc_DATA)'; test -n "$(mfcalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(mfcalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(mfcalcdir)" || 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)$(mfcalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(mfcalcdir)" || exit $$?; \
+	done
+
+uninstall-mfcalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(mfcalc_DATA)'; test -n "$(mfcalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(mfcalcdir)'; $(am__uninstall_files_from_dir)
+install-rpcalcDATA: $(rpcalc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(rpcalc_DATA)'; test -n "$(rpcalcdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(rpcalcdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(rpcalcdir)" || 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)$(rpcalcdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(rpcalcdir)" || exit $$?; \
+	done
+
+uninstall-rpcalcDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(rpcalc_DATA)'; test -n "$(rpcalcdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(rpcalcdir)'; $(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.
@@ -1528,14 +8164,13 @@
 # (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]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	case "$@" in \
@@ -1556,31 +8191,13 @@
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  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)
-	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
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -1596,12 +8213,7 @@
 	      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; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -1613,15 +8225,11 @@
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(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; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -1630,18 +8238,16 @@
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(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
+cscopelist: cscopelist-recursive
 
-cscope.files: clean-cscope cscopelist-recursive cscopelist
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -1658,7 +8264,155 @@
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
-distdir: $(DISTFILES)
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS: $(check_PROGRAMS) $(check_SCRIPTS)
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@	@p='$<'; \
+@am__EXEEXT_TRUE@	$(am__set_b); \
+@am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
 	@case `sed 15q $(srcdir)/NEWS` in \
 	*"$(VERSION)"*) : ;; \
 	*) \
@@ -1723,7 +8477,7 @@
 	done
 	$(MAKE) $(AM_MAKEFLAGS) \
 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
+	  dist-info dist-hook
 	-test -n "$(am__skip_mode_fix)" \
 	|| find "$(distdir)" -type d ! -perm -755 \
 		-exec chmod u+rwx,go+rx {} \; -o \
@@ -1732,7 +8486,7 @@
 	  ! -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
+	tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
 	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
@@ -1747,11 +8501,17 @@
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
 dist-zip: distdir
@@ -1769,7 +8529,7 @@
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lz*) \
@@ -1779,22 +8539,23 @@
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
 	chmod -R a-w $(distdir)
 	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(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-$$$$/" \
 	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1848,12 +8609,15 @@
 	       $(distcleancheck_listfiles) ; \
 	       exit 1; } >&2
 check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(DATA)
+all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(LIBRARIES) $(SCRIPTS) \
+		$(MANS) $(DATA)
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(aclocaldir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(aclocaldir)" "$(DESTDIR)$(calcxxdir)" "$(DESTDIR)$(cxxdir)" "$(DESTDIR)$(cdir)" "$(DESTDIR)$(calcdir)" "$(DESTDIR)$(calcxxdir)" "$(DESTDIR)$(cxxdir)" "$(DESTDIR)$(ddir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(javadir)" "$(DESTDIR)$(lexcalcdir)" "$(DESTDIR)$(m4sugardir)" "$(DESTDIR)$(mfcalcdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(reccalcdir)" "$(DESTDIR)$(rpcalcdir)" "$(DESTDIR)$(skeletonsdir)" "$(DESTDIR)$(xsltdir)" "$(DESTDIR)$(mfcalcdir)" "$(DESTDIR)$(rpcalcdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -1877,123 +8641,2569 @@
 	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
 	fi
 mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
+	-rm -f examples/c++/calc++/scanner.cc
+	-rm -f examples/c++/simple.cc
+	-rm -f examples/c++/variant-11.cc
+	-rm -f examples/c++/variant.cc
+	-rm -f examples/c/calc/calc.c
+	-rm -f examples/c/lexcalc/parse.c
+	-rm -f examples/c/lexcalc/scan.c
+	-rm -f examples/c/mfcalc/mfcalc.c
+	-rm -f examples/c/reccalc/parse.c
+	-rm -f examples/c/rpcalc/rpcalc.c
+	-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)
+	-rm -f doc/$(am__dirstamp)
+	-rm -f examples/c++/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c++/$(am__dirstamp)
+	-rm -f examples/c++/calc++/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c++/calc++/$(am__dirstamp)
+	-rm -f examples/c/calc/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c/calc/$(am__dirstamp)
+	-rm -f examples/c/lexcalc/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c/lexcalc/$(am__dirstamp)
+	-rm -f examples/c/mfcalc/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c/mfcalc/$(am__dirstamp)
+	-rm -f examples/c/reccalc/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c/reccalc/$(am__dirstamp)
+	-rm -f examples/c/rpcalc/$(DEPDIR)/$(am__dirstamp)
+	-rm -f examples/c/rpcalc/$(am__dirstamp)
+	-rm -f lib/$(DEPDIR)/$(am__dirstamp)
+	-rm -f lib/$(am__dirstamp)
+	-rm -f lib/bitset/$(DEPDIR)/$(am__dirstamp)
+	-rm -f lib/bitset/$(am__dirstamp)
+	-rm -f lib/glthread/$(DEPDIR)/$(am__dirstamp)
+	-rm -f lib/glthread/$(am__dirstamp)
+	-rm -f lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+	-rm -f lib/uniwidth/$(am__dirstamp)
+	-rm -f src/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/$(am__dirstamp)
+	-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."
+	-rm -f src/parse-gram.c
+	-rm -f src/scan-code.c
+	-rm -f src/scan-gram.c
+	-rm -f src/scan-skel.c
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+@RELOCATABLE_VIA_WRAPPER_FALSE@uninstall-hook:
 clean: clean-recursive
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-aminfo clean-binPROGRAMS clean-checkPROGRAMS \
+	clean-generic clean-libLIBRARIES clean-local \
+	clean-noinstLIBRARIES mostlyclean-am
 
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+		-rm -f examples/c++/$(DEPDIR)/simple-simple.Po
+	-rm -f examples/c++/$(DEPDIR)/variant-variant.Po
+	-rm -f examples/c++/$(DEPDIR)/variant_11-variant-11.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-driver.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-parser.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po
+	-rm -f examples/c/calc/$(DEPDIR)/calc-calc.Po
+	-rm -f examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po
+	-rm -f examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po
+	-rm -f examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po
+	-rm -f examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po
+	-rm -f examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po
+	-rm -f examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-allocator.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-areadlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-argmatch.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-asnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-asprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-basename-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-basename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-binary-io.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitrotate.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitset.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitsetv.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-ctype.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-calloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-careadlinkat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-cloexec.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-close-stream.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-close.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-closeout.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-concat-filename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dirname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-error.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-exitfail.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fatal-signal.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fcntl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-hook.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-float.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fopen-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fopen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fpending.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-frexp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-frexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fseterr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fstat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fstrcmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fsync.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-get-errno.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getdtablesize.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gethrxtime.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getopt.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getopt1.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getprogname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getrusage.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gettime.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gettimeofday.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_array_list.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_list.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_xlist.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-hard-locale.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-hash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnan.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnand.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnanf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnanl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-iswblank.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-itold.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-ldexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-localcharset.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-localtime-buffer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-lstat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-malloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-malloca.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-math.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbchar.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbfile.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbrtowc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbsinit.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbswidth.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-memchr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-msvc-inval.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-obstack.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-obstack_printf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-open.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-path-join.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-perror.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe2-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-args.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-frexp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-frexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-parse.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-progname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-progreloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-quotearg.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-raise.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rawmemchr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-readlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-realloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-relocatable.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rmdir.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sig-handler.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sigaction.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitd.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sigprocmask.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-snprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn-pipe.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_init.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawni.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat-time.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat-w32.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stpcpy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strchrnul.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strdup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror-override.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror_r.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stripslash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strndup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strnlen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strverscmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-timespec.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-timevar.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unistd.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unsetenv.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vasnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vasprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vfprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vsnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vsprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wait-process.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-waitpid.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wctype-h.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wcwidth.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-mutex.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-once.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-recmutex.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-rwlock.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-tls.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xalloc-die.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xconcat-filename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xhash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xmalloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xmemdup0.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xreadlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xsize.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xstrndup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xtime.Po
+	-rm -f lib/$(DEPDIR)/main.Po
+	-rm -f lib/$(DEPDIR)/yyerror.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-array.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-list.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-stats.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-table.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-vector.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-lock.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-tls.Po
+	-rm -f lib/uniwidth/$(DEPDIR)/libbison_a-width.Po
+	-rm -f src/$(DEPDIR)/bison-AnnotationList.Po
+	-rm -f src/$(DEPDIR)/bison-InadequacyList.Po
+	-rm -f src/$(DEPDIR)/bison-Sbitset.Po
+	-rm -f src/$(DEPDIR)/bison-assoc.Po
+	-rm -f src/$(DEPDIR)/bison-closure.Po
+	-rm -f src/$(DEPDIR)/bison-complain.Po
+	-rm -f src/$(DEPDIR)/bison-conflicts.Po
+	-rm -f src/$(DEPDIR)/bison-derives.Po
+	-rm -f src/$(DEPDIR)/bison-files.Po
+	-rm -f src/$(DEPDIR)/bison-fixits.Po
+	-rm -f src/$(DEPDIR)/bison-getargs.Po
+	-rm -f src/$(DEPDIR)/bison-gram.Po
+	-rm -f src/$(DEPDIR)/bison-graphviz.Po
+	-rm -f src/$(DEPDIR)/bison-ielr.Po
+	-rm -f src/$(DEPDIR)/bison-lalr.Po
+	-rm -f src/$(DEPDIR)/bison-location.Po
+	-rm -f src/$(DEPDIR)/bison-lr0.Po
+	-rm -f src/$(DEPDIR)/bison-main.Po
+	-rm -f src/$(DEPDIR)/bison-muscle-tab.Po
+	-rm -f src/$(DEPDIR)/bison-named-ref.Po
+	-rm -f src/$(DEPDIR)/bison-nullable.Po
+	-rm -f src/$(DEPDIR)/bison-output.Po
+	-rm -f src/$(DEPDIR)/bison-parse-gram.Po
+	-rm -f src/$(DEPDIR)/bison-print-graph.Po
+	-rm -f src/$(DEPDIR)/bison-print-xml.Po
+	-rm -f src/$(DEPDIR)/bison-print.Po
+	-rm -f src/$(DEPDIR)/bison-reader.Po
+	-rm -f src/$(DEPDIR)/bison-reduce.Po
+	-rm -f src/$(DEPDIR)/bison-relation.Po
+	-rm -f src/$(DEPDIR)/bison-scan-code-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-code.Po
+	-rm -f src/$(DEPDIR)/bison-scan-gram-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-gram.Po
+	-rm -f src/$(DEPDIR)/bison-scan-skel-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-skel.Po
+	-rm -f src/$(DEPDIR)/bison-state.Po
+	-rm -f src/$(DEPDIR)/bison-symlist.Po
+	-rm -f src/$(DEPDIR)/bison-symtab.Po
+	-rm -f src/$(DEPDIR)/bison-tables.Po
+	-rm -f src/$(DEPDIR)/bison-uniqstr.Po
 	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-hdr distclean-local distclean-tags
 
 dvi: dvi-recursive
 
-dvi-am:
+dvi-am: $(DVIS)
 
 html: html-recursive
 
-html-am:
+html-am: $(HTMLS) html-local
 
 info: info-recursive
 
-info-am:
+info-am: $(INFO_DEPS)
 
-install-data-am: install-aclocalDATA
+install-data-am: install-aclocalDATA install-calcxxDATA \
+	install-cxxDATA install-dist_cDATA install-dist_calcDATA \
+	install-dist_calcxxDATA install-dist_cxxDATA \
+	install-dist_dDATA install-dist_docDATA \
+	install-dist_examplesDATA install-dist_javaDATA \
+	install-dist_lexcalcDATA install-dist_m4sugarDATA \
+	install-dist_mfcalcDATA install-dist_pkgdataDATA \
+	install-dist_reccalcDATA install-dist_rpcalcDATA \
+	install-dist_skeletonsDATA install-dist_xsltDATA \
+	install-info-am install-man install-mfcalcDATA \
+	install-rpcalcDATA
 
 install-dvi: install-dvi-recursive
 
-install-dvi-am:
-
-install-exec-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-binPROGRAMS install-libLIBRARIES \
+	install-nodist_binSCRIPTS
 
 install-html: install-html-recursive
 
-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-recursive
 
-install-info-am:
-
-install-man:
+install-info-am: $(INFO_DEPS)
+	@$(NORMAL_INSTALL)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	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/||"`;; \
+	  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 \
+	      echo "$$ifile"; \
+	    else : ; fi; \
+	  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 $(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'";\
+	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+	  done; \
+	else : ; fi
+install-man: install-man1
 
 install-pdf: install-pdf-recursive
 
-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-recursive
 
-install-ps-am:
-
-installcheck-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: installcheck-binPROGRAMS installcheck-local \
+	installcheck-nodist_binSCRIPTS
 
 maintainer-clean: maintainer-clean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
+		-rm -f examples/c++/$(DEPDIR)/simple-simple.Po
+	-rm -f examples/c++/$(DEPDIR)/variant-variant.Po
+	-rm -f examples/c++/$(DEPDIR)/variant_11-variant-11.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-calc++.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-driver.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-parser.Po
+	-rm -f examples/c++/calc++/$(DEPDIR)/calc__-scanner.Po
+	-rm -f examples/c/calc/$(DEPDIR)/calc-calc.Po
+	-rm -f examples/c/lexcalc/$(DEPDIR)/lexcalc-parse.Po
+	-rm -f examples/c/lexcalc/$(DEPDIR)/lexcalc-scan.Po
+	-rm -f examples/c/mfcalc/$(DEPDIR)/mfcalc-mfcalc.Po
+	-rm -f examples/c/reccalc/$(DEPDIR)/reccalc-parse.Po
+	-rm -f examples/c/reccalc/$(DEPDIR)/reccalc-scan.Po
+	-rm -f examples/c/rpcalc/$(DEPDIR)/rpcalc-rpcalc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-allocator.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-areadlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-argmatch.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-asnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-asprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-basename-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-basename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-binary-io.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitrotate.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitset.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-bitsetv.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-ctype.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-strcasecmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-c-strncasecmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-calloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-canonicalize-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-careadlinkat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-cloexec.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-close-stream.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-close.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-closeout.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-concat-filename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dirname-lgpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dirname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup-safer-flag.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-dup2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-error.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-exitfail.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fatal-signal.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fcntl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-hook.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-safer-flag.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fd-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-float.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fopen-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fopen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fpending.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-frexp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-frexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fseterr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fstat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fstrcmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-fsync.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-get-errno.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getdtablesize.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gethrxtime.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getopt.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getopt1.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getprogname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-getrusage.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gettime.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gettimeofday.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_array_list.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_list.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-gl_xlist.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-hard-locale.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-hash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnan.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnand.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnanf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-isnanl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-iswblank.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-itold.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-ldexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-localcharset.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-localtime-buffer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-lstat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-malloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-malloca.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-math.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbchar.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbfile.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbrtowc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbsinit.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-mbswidth.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-memchr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-msvc-inval.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-msvc-nothrow.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-obstack.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-obstack_printf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-open.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-path-join.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-perror.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe2-safer.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-pipe2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-args.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-frexp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-frexpl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf-parse.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-printf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-progname.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-progreloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-quotearg.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-raise.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rawmemchr.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-readlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-realloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-relocatable.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-rmdir.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sig-handler.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sigaction.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitd.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-signbitl.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sigprocmask.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-snprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn-pipe.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_addclose.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_adddup2.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_addopen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_destroy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawn_faction_init.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_destroy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_init.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_setflags.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnattr_setsigmask.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawni.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-spawnp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-sprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat-time.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat-w32.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stat.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stpcpy.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strchrnul.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strdup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror-override.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strerror_r.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-stripslash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strndup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strnlen.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-strverscmp.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-timespec.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-timevar.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unistd.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-unsetenv.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vasnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vasprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vfprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vsnprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-vsprintf.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wait-process.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-waitpid.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wctype-h.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-wcwidth.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-mutex.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-once.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-recmutex.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-rwlock.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-windows-tls.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xalloc-die.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xconcat-filename.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xhash.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xmalloc.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xmemdup0.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xreadlink.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xsize.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xstrndup.Po
+	-rm -f lib/$(DEPDIR)/libbison_a-xtime.Po
+	-rm -f lib/$(DEPDIR)/main.Po
+	-rm -f lib/$(DEPDIR)/yyerror.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-array.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-list.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-stats.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-table.Po
+	-rm -f lib/bitset/$(DEPDIR)/libbison_a-vector.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-lock.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-threadlib.Po
+	-rm -f lib/glthread/$(DEPDIR)/libbison_a-tls.Po
+	-rm -f lib/uniwidth/$(DEPDIR)/libbison_a-width.Po
+	-rm -f src/$(DEPDIR)/bison-AnnotationList.Po
+	-rm -f src/$(DEPDIR)/bison-InadequacyList.Po
+	-rm -f src/$(DEPDIR)/bison-Sbitset.Po
+	-rm -f src/$(DEPDIR)/bison-assoc.Po
+	-rm -f src/$(DEPDIR)/bison-closure.Po
+	-rm -f src/$(DEPDIR)/bison-complain.Po
+	-rm -f src/$(DEPDIR)/bison-conflicts.Po
+	-rm -f src/$(DEPDIR)/bison-derives.Po
+	-rm -f src/$(DEPDIR)/bison-files.Po
+	-rm -f src/$(DEPDIR)/bison-fixits.Po
+	-rm -f src/$(DEPDIR)/bison-getargs.Po
+	-rm -f src/$(DEPDIR)/bison-gram.Po
+	-rm -f src/$(DEPDIR)/bison-graphviz.Po
+	-rm -f src/$(DEPDIR)/bison-ielr.Po
+	-rm -f src/$(DEPDIR)/bison-lalr.Po
+	-rm -f src/$(DEPDIR)/bison-location.Po
+	-rm -f src/$(DEPDIR)/bison-lr0.Po
+	-rm -f src/$(DEPDIR)/bison-main.Po
+	-rm -f src/$(DEPDIR)/bison-muscle-tab.Po
+	-rm -f src/$(DEPDIR)/bison-named-ref.Po
+	-rm -f src/$(DEPDIR)/bison-nullable.Po
+	-rm -f src/$(DEPDIR)/bison-output.Po
+	-rm -f src/$(DEPDIR)/bison-parse-gram.Po
+	-rm -f src/$(DEPDIR)/bison-print-graph.Po
+	-rm -f src/$(DEPDIR)/bison-print-xml.Po
+	-rm -f src/$(DEPDIR)/bison-print.Po
+	-rm -f src/$(DEPDIR)/bison-reader.Po
+	-rm -f src/$(DEPDIR)/bison-reduce.Po
+	-rm -f src/$(DEPDIR)/bison-relation.Po
+	-rm -f src/$(DEPDIR)/bison-scan-code-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-code.Po
+	-rm -f src/$(DEPDIR)/bison-scan-gram-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-gram.Po
+	-rm -f src/$(DEPDIR)/bison-scan-skel-c.Po
+	-rm -f src/$(DEPDIR)/bison-scan-skel.Po
+	-rm -f src/$(DEPDIR)/bison-state.Po
+	-rm -f src/$(DEPDIR)/bison-symlist.Po
+	-rm -f src/$(DEPDIR)/bison-symtab.Po
+	-rm -f src/$(DEPDIR)/bison-tables.Po
+	-rm -f src/$(DEPDIR)/bison-uniqstr.Po
 	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+	maintainer-clean-generic maintainer-clean-vti
 
 mostlyclean: mostlyclean-recursive
 
-mostlyclean-am: mostlyclean-generic
+mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+	mostlyclean-generic mostlyclean-local mostlyclean-vti
 
 pdf: pdf-recursive
 
-pdf-am:
+pdf-am: $(PDFS)
 
 ps: ps-recursive
 
-ps-am:
+ps-am: $(PSS)
 
-uninstall-am: uninstall-aclocalDATA
+uninstall-am: uninstall-aclocalDATA uninstall-binPROGRAMS \
+	uninstall-calcxxDATA uninstall-cxxDATA uninstall-dist_cDATA \
+	uninstall-dist_calcDATA uninstall-dist_calcxxDATA \
+	uninstall-dist_cxxDATA uninstall-dist_dDATA \
+	uninstall-dist_docDATA uninstall-dist_examplesDATA \
+	uninstall-dist_javaDATA uninstall-dist_lexcalcDATA \
+	uninstall-dist_m4sugarDATA uninstall-dist_mfcalcDATA \
+	uninstall-dist_pkgdataDATA uninstall-dist_reccalcDATA \
+	uninstall-dist_rpcalcDATA uninstall-dist_skeletonsDATA \
+	uninstall-dist_xsltDATA uninstall-dvi-am uninstall-html-am \
+	uninstall-info-am uninstall-libLIBRARIES uninstall-man \
+	uninstall-mfcalcDATA uninstall-nodist_binSCRIPTS \
+	uninstall-pdf-am uninstall-ps-am uninstall-rpcalcDATA
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+uninstall-man: uninstall-man1
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	cscopelist-recursive ctags-recursive install install-am \
-	install-strip tags-recursive
+.MAKE: $(am__recursive_targets) all check check-am install install-am \
+	install-strip uninstall-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: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--depfiles am--refresh check check-TESTS check-am \
+	check-local clean clean-aminfo clean-binPROGRAMS \
+	clean-checkPROGRAMS clean-cscope clean-generic \
+	clean-libLIBRARIES clean-local clean-noinstLIBRARIES cscope \
+	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+	dist-gzip dist-hook dist-info dist-lzip dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-compile \
+	distclean-generic distclean-hdr distclean-local distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am html-local info info-am install install-aclocalDATA \
+	install-am install-binPROGRAMS install-calcxxDATA \
+	install-cxxDATA install-data install-data-am \
+	install-dist_cDATA install-dist_calcDATA \
+	install-dist_calcxxDATA install-dist_cxxDATA \
+	install-dist_dDATA install-dist_docDATA \
+	install-dist_examplesDATA install-dist_javaDATA \
+	install-dist_lexcalcDATA install-dist_m4sugarDATA \
+	install-dist_mfcalcDATA install-dist_pkgdataDATA \
+	install-dist_reccalcDATA install-dist_rpcalcDATA \
+	install-dist_skeletonsDATA install-dist_xsltDATA install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLIBRARIES install-man install-man1 \
+	install-mfcalcDATA install-nodist_binSCRIPTS install-pdf \
+	install-pdf-am install-ps install-ps-am install-rpcalcDATA \
+	install-strip installcheck installcheck-am \
+	installcheck-binPROGRAMS installcheck-local \
+	installcheck-nodist_binSCRIPTS installdirs installdirs-am \
+	maintainer-clean maintainer-clean-aminfo \
+	maintainer-clean-generic maintainer-clean-vti mostlyclean \
+	mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \
+	mostlyclean-local mostlyclean-vti pdf pdf-am ps ps-am recheck \
+	tags tags-am uninstall uninstall-aclocalDATA uninstall-am \
+	uninstall-binPROGRAMS uninstall-calcxxDATA uninstall-cxxDATA \
+	uninstall-dist_cDATA uninstall-dist_calcDATA \
+	uninstall-dist_calcxxDATA uninstall-dist_cxxDATA \
+	uninstall-dist_dDATA uninstall-dist_docDATA \
+	uninstall-dist_examplesDATA uninstall-dist_javaDATA \
+	uninstall-dist_lexcalcDATA uninstall-dist_m4sugarDATA \
+	uninstall-dist_mfcalcDATA uninstall-dist_pkgdataDATA \
+	uninstall-dist_reccalcDATA uninstall-dist_rpcalcDATA \
+	uninstall-dist_skeletonsDATA uninstall-dist_xsltDATA \
+	uninstall-dvi-am uninstall-hook uninstall-html-am \
+	uninstall-info-am uninstall-libLIBRARIES uninstall-man \
+	uninstall-man1 uninstall-mfcalcDATA \
+	uninstall-nodist_binSCRIPTS uninstall-pdf-am uninstall-ps-am \
+	uninstall-rpcalcDATA
 
-.PHONY: $(MAINTAINER_CHECKS)
-$(MAINTAINER_CHECKS):
-	$(AM_V_GEN)cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
+.PRECIOUS: Makefile
+
+$(doc_bison).dvi: $(FIGS_GV:.gv=.eps)
+$(doc_bison).info: $(FIGS_GV:.gv=.txt)
+$(doc_bison).pdf: $(FIGS_GV:.gv=.pdf)
+$(doc_bison).html: $(FIGS_GV:.gv=.svg)
+$(CROSS_OPTIONS_TEXI): doc/bison.help $(CROSS_OPTIONS_PL)
+# Create $@~ which is the previous contents.  Don't use 'mv' here so
+# that even if we are interrupted, the file is still available for
+# diff in the next run.  Note that $@ might not exist yet.
+	$(AM_V_GEN){ test ! -f $@ || cat $@; } >$@~
+	$(AM_V_at)test ! -f $@.tmp || rm -f $@.tmp
+	$(AM_V_at)$(PERL) $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l \
+	  <$(top_srcdir)/doc/bison.help >$@.tmp
+	$(AM_V_at)diff -u $@~ $@.tmp || true
+	$(AM_V_at)mv $@.tmp $@
+
+# Fix Info's @code in @deftype
+# https://lists.gnu.org/archive/html/help-texinfo/2019-11/msg00004.html
+all: $(srcdir)/$(doc_bison).info.bak
+$(srcdir)/$(doc_bison).info.bak: $(srcdir)/$(doc_bison).info
+	$(AM_V_GEN) $(PERL) -pi.bak -0777	\
+	  -e 's{(^ --.*\n(?: {10}.*\n)*)}'	\
+	  -e '{'				\
+	  -e '  $$def = $$1;'			\
+	  -e '  $$def =~ s/‘|’//g;'		\
+	  -e '  $$def;'				\
+	  -e '}gem;' $(srcdir)/$(doc_bison).info
+	@ touch $@
+
+doc/refcard.pdf: doc/refcard.tex
+	$(AM_V_GEN) cd doc && pdftex $(abs_top_srcdir)/doc/refcard.tex
+@CROSS_COMPILING_FALSE@$(top_srcdir)/doc/bison.help: src/bison$(EXEEXT)
+@CROSS_COMPILING_FALSE@	$(AM_V_GEN)LC_ALL=C tests/bison --version >doc/bison.help.tmp
+@CROSS_COMPILING_FALSE@	$(AM_V_at) LC_ALL=C tests/bison --help | \
+@CROSS_COMPILING_FALSE@	  sed -e 's,^Usage: .*/bison \[OPTION\],Usage: bison [OPTION],g' \
+@CROSS_COMPILING_FALSE@	      -e '/translation bugs/d'  >>doc/bison.help.tmp
+@CROSS_COMPILING_FALSE@	$(AM_V_at)$(top_srcdir)/build-aux/move-if-change doc/bison.help.tmp $@
+
+$(top_srcdir)/doc/bison.1: $(MAN_DEPS)
+	$(AM_V_GEN)$(HELP2MAN)			\
+	    --include=$(top_srcdir)/doc/bison.x	\
+	    --output=$@.tmp tests/bison
+	$(AM_V_at)if $(remove_time_stamp) $@ >$@a.tmp 2>/dev/null &&		\
+	   $(remove_time_stamp) $@.tmp | cmp $@a.tmp - >/dev/null 2>&1; then	\
+	  touch $@;								\
+	else									\
+	  mv $@.tmp $@;								\
+	fi
+	$(AM_V_at)rm -f $@*.tmp
+
+.gv.eps:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Teps $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.gv.pdf:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.gv.svg:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tsvg $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.PHONY: doc html
+
+doc: html
+
+html-local: doc/Doxyfile
+	$(AM_V_GEN) $(DOXYGEN) doc/Doxyfile
+# Sed is used to generate Doxyfile from Doxyfile.in instead of
+# configure, because the former is way faster than the latter.
+doc/Doxyfile: $(top_srcdir)/doc/Doxyfile.in
+	$(AM_V_GEN) $(edit) $(top_srcdir)/doc/Doxyfile.in >doc/Doxyfile
+examples/extracted.stamp: $(doc) doc/version.texi $(extexi)
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at)$(MKDIR_P) examples
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(extract) $(extracted)
+	$(AM_V_at)mv $@.tmp $@
+
+$(extracted): examples/extracted.stamp
+	@test -f $@ || rm -f examples/extracted.stamp
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) examples/extracted.stamp
+
+# Suppress the #lines from the examples when rolling the tarball, so
+# that regular users have readable examples even before installing
+# Bison.
+dist-hook: examples-unline
+.PHONY: examples-unline
+examples-unline:
+	cd $(distdir) && \
+	  perl -pi -0777 -e 's/#line.*\n//g;s{^ /\*\*/\n}{}mg' $(extracted)
+examples/c/calc/calc.c: $(dependencies)
+@FLEX_WORKS_TRUE@  # Don't use gnulib's system headers.
+
+examples/c/lexcalc/parse.c: $(dependencies)
+examples/c/mfcalc/mfcalc.c: $(dependencies)
+@FLEX_WORKS_TRUE@  # Don't use gnulib's system headers.
+
+examples/c/reccalc/parse.c: $(dependencies)
+examples/c/reccalc/reccalc$(DASH)parse.o: examples/c/reccalc/scan.h
+# Tell Make scan.o depends on parse.h, except that Make sees only
+# parse.c, not parse.h.  We can't use BUILT_SOURCES to this end, since
+# we use the built bison.
+examples/c/reccalc/reccalc$(DASH)scan.o: examples/c/reccalc/parse.c
+
+# Likewise, but for Automake before 1.16.
+examples/c/reccalc/examples_c_reccalc_reccalc$(DASH)parse.o: examples/c/reccalc/scan.h
+examples/c/reccalc/examples_c_reccalc_reccalc$(DASH)scan.o: examples/c/reccalc/parse.c
+
+examples/c/reccalc/scan.c examples/c/reccalc/scan.h: examples/c/reccalc/scan.stamp
+	@if test -f $@; then :; else \
+	  trap 'rm -rf examples/c/reccalc/scan.lock examples/c/reccalc/scan.stamp' 1 2 13 15; \
+	  if mkdir examples/c/reccalc/scan.lock 2>/dev/null; then \
+	    rm -f examples/c/reccalc/scan.stamp; \
+	    $(MAKE) $(AM_MAKEFLAGS) examples/c/reccalc/scan.stamp; \
+	    result=$$?; rm -rf examples/c/reccalc/scan.lock; exit $$result; \
+	  else \
+	    while test -d examples/c/reccalc/scan.lock; do sleep 1; done; \
+	    test -f examples/c/reccalc/scan.stamp; \
+	  fi; \
+	fi
+
+examples/c/reccalc/scan.stamp: examples/c/reccalc/scan.l
+	$(AM_V_LEX)rm -f $@ $@.tmp
+	$(AM_V_at)$(MKDIR_P) examples/c/reccalc
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(LEX) $(AM_LFLAGS) $(LFLAGS) -oexamples/c/reccalc/scan.c --header-file=examples/c/reccalc/scan.h $(srcdir)/examples/c/reccalc/scan.l
+	$(AM_V_at)mv $@.tmp $@
+examples/c/rpcalc/rpcalc.c: $(dependencies)
+
+examples/c++/calc++/parser.stamp: $(dependencies)
+.yy.stamp:
+	$(AM_V_YACC)rm -f $@
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(YACCCOMPILE) -o $*.cc $<
+	$(AM_V_at)mv -f $@.tmp $@
+
+$(calcxx_sources_generated): examples/c++/calc++/parser.stamp
+	@test -f $@ || rm -f examples/c++/calc++/parser.stamp
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) examples/c++/calc++/parser.stamp
+
+# Avoid using BUILT_SOURCES which is too global.
+$(examples_c___calc___calc___OBJECTS): $(calcxx_sources_generated)
+@ENABLE_CXX_TRUE@@FLEX_CXX_WORKS_TRUE@  # Don't use gnulib's system headers.
+@ENABLE_CXX14_TRUE@  # Don't use gnulib's system headers.
+@ENABLE_CXX14_TRUE@  examples/c++/simple.cc: $(dependencies)
+@ENABLE_CXX_TRUE@  # Don't use gnulib's system headers.
+@ENABLE_CXX_TRUE@  examples/c++/variant.cc: $(dependencies)
+@ENABLE_CXX11_TRUE@  # Don't use gnulib's system headers.
+@ENABLE_CXX11_TRUE@  examples/c++/variant-11.cc: $(dependencies)
+
+examples/d/calc.d: examples/d/calc.y $(dependencies)
+	$(AM_V_GEN)$(MKDIR_P) examples/d
+	$(AM_V_at)$(BISON) $(srcdir)/examples/d/calc.y -o $@
+
+examples/d/calc: examples/d/calc.d
+	$(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ examples/d/calc.d
+
+examples/java/Calc.java: examples/java/Calc.y $(dependencies)
+	$(AM_V_GEN)$(MKDIR_P) examples/java
+	$(AM_V_at)$(BISON) $(srcdir)/examples/java/Calc.y -o $@
+
+examples/java/Calc.class: examples/java/Calc.java
+	$(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh examples/java/Calc.java
+
+# 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@lib/alloca.h: lib/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@	  sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(top_srcdir)/lib/alloca.in.h; \
+@GL_GENERATE_ALLOCA_H_TRUE@	} > $@-t && \
+@GL_GENERATE_ALLOCA_H_TRUE@	mv -f $@-t $@
+@GL_GENERATE_ALLOCA_H_FALSE@lib/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+ or 2.70.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+lib/configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#if HAVE_WINSOCK2_H'; \
+	  echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \
+	  echo '#endif'; \
+	  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 RUNSTATEDIR "$(runstatedir)"'; \
+	  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@lib/errno.h: lib/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@	      < $(top_srcdir)/lib/errno.in.h; \
+@GL_GENERATE_ERRNO_H_TRUE@	} > $@-t && \
+@GL_GENERATE_ERRNO_H_TRUE@	mv $@-t $@
+@GL_GENERATE_ERRNO_H_FALSE@lib/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.
+lib/fcntl.h: lib/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_CREAT''@/$(GNULIB_CREAT)/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_CREAT''@|$(REPLACE_CREAT)|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)' \
+	      < $(top_srcdir)/lib/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@lib/float.h: lib/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@	      < $(top_srcdir)/lib/float.in.h; \
+@GL_GENERATE_FLOAT_H_TRUE@	} > $@-t && \
+@GL_GENERATE_FLOAT_H_TRUE@	mv $@-t $@
+@GL_GENERATE_FLOAT_H_FALSE@lib/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.
+lib/getopt.h: lib/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)' \
+	      < $(top_srcdir)/lib/getopt.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+lib/getopt-cdefs.h: lib/getopt-cdefs.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+          sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+	      < $(top_srcdir)/lib/getopt-cdefs.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.
+lib/inttypes.h: lib/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/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \
+	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/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)' \
+	      < $(top_srcdir)/lib/inttypes.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create a dummy placeholder for
+# <textstyle.h> when the system doesn't have one.
+@GL_GENERATE_TEXTSTYLE_H_TRUE@lib/textstyle.h: lib/textstyle.in.h $(top_builddir)/config.status
+@GL_GENERATE_TEXTSTYLE_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_TEXTSTYLE_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_TEXTSTYLE_H_TRUE@	  cat $(top_srcdir)/lib/textstyle.in.h; \
+@GL_GENERATE_TEXTSTYLE_H_TRUE@	} > $@-t && \
+@GL_GENERATE_TEXTSTYLE_H_TRUE@	mv $@-t $@
+@GL_GENERATE_TEXTSTYLE_H_FALSE@lib/textstyle.h: $(top_builddir)/config.status
+@GL_GENERATE_TEXTSTYLE_H_FALSE@	rm -f $@
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+@GL_GENERATE_LIMITS_H_TRUE@lib/limits.h: lib/limits.in.h $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_LIMITS_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_LIMITS_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_LIMITS_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@	      -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@	      < $(top_srcdir)/lib/limits.in.h; \
+@GL_GENERATE_LIMITS_H_TRUE@	} > $@-t && \
+@GL_GENERATE_LIMITS_H_TRUE@	mv $@-t $@
+@GL_GENERATE_LIMITS_H_FALSE@lib/limits.h: $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_FALSE@	rm -f $@
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+lib/math.h: lib/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' \
+	      < $(top_srcdir)/lib/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_ACOSF''@|$(REPLACE_ACOSF)|g' \
+	      -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \
+	      -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \
+	      -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \
+	      -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_COSF''@|$(REPLACE_COSF)|g' \
+	      -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \
+	      -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \
+	      -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \
+	      -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+	      -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+	      -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|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_ILOGBL''@|$(REPLACE_ILOGBL)|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_RINTL''@|$(REPLACE_RINTL)|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_SINF''@|$(REPLACE_SINF)|g' \
+	      -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \
+	      -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \
+	      -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+	      -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \
+	      -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|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 $@
+@RELOCATABLE_VIA_WRAPPER_TRUE@uninstall-hook: uninstall-relocwrapper
+@RELOCATABLE_VIA_WRAPPER_TRUE@uninstall-relocwrapper:
+@RELOCATABLE_VIA_WRAPPER_TRUE@	if test $(RELOCATABLE) = yes; then \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	  case '$(EXEEXT)' in \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	    .bin*) ;; \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	    *) cd $(top_builddir) && \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	       $(MAKE) $(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT) \
+@RELOCATABLE_VIA_WRAPPER_TRUE@		       AM_MAKEFLAGS='$(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT)' \
+@RELOCATABLE_VIA_WRAPPER_TRUE@		       uninstall ;; \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	  esac; \
+@RELOCATABLE_VIA_WRAPPER_TRUE@	fi
+.PHONY: uninstall-relocwrapper
+
+# We need the following in order to create a replacement for <sched.h> when
+# the system doesn't have one.
+lib/sched.h: lib/sched.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_SCHED_H''@|$(HAVE_SCHED_H)|g' \
+	      -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_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' \
+	      -e 's/@''GNULIB_SCHED_YIELD''@/$(GNULIB_SCHED_YIELD)/g' \
+	      -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \
+	      -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(top_srcdir)/lib/sched.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <signal.h> when the system
+# doesn't have a complete one.
+lib/signal.h: lib/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)' \
+	      < $(top_srcdir)/lib/signal.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create a replacement for <spawn.h> when
+# the system doesn't have one.
+lib/spawn.h: lib/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_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/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_ADDFCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)/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|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|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_ADDFCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|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)' \
+	      < $(top_srcdir)/lib/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.
+@GL_GENERATE_STDBOOL_H_TRUE@lib/stdbool.h: lib/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' < $(top_srcdir)/lib/stdbool.in.h; \
+@GL_GENERATE_STDBOOL_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDBOOL_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDBOOL_H_FALSE@lib/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@lib/stddef.h: lib/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_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|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@	      < $(top_srcdir)/lib/stddef.in.h; \
+@GL_GENERATE_STDDEF_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDDEF_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDDEF_H_FALSE@lib/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@lib/stdint.h: lib/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_C99_STDINT_H''@/$(HAVE_C99_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@	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@	      < $(top_srcdir)/lib/stdint.in.h; \
+@GL_GENERATE_STDINT_H_TRUE@	} > $@-t && \
+@GL_GENERATE_STDINT_H_TRUE@	mv $@-t $@
+@GL_GENERATE_STDINT_H_FALSE@lib/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.
+lib/stdio.h: lib/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' \
+	      < $(top_srcdir)/lib/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.
+lib/stdlib.h: lib/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_QSORT_R''@/$(GNULIB_QSORT_R)/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_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \
+	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
+	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+	      -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \
+	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
+	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+	      -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/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' \
+	      < $(top_srcdir)/lib/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_INITSTATE''@|$(HAVE_INITSTATE)|g' \
+	      -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \
+	      -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|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_QSORT_R''@|$(HAVE_QSORT_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_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \
+	      -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+	      -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+	      -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \
+	      -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+	      -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
+	      -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
+	      -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+	      -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|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_INITSTATE''@|$(REPLACE_INITSTATE)|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_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
+	      -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|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_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
+	      -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+	      -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|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.
+lib/string.h: lib/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_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/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' \
+	      < $(top_srcdir)/lib/string.in.h | \
+	  sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+	      -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_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|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_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|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)'; \
+	      < $(top_srcdir)/lib/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <sys/resource.h> when the system
+# doesn't have one.
+lib/sys/resource.h: lib/sys_resource.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/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_RESOURCE_H''@|$(NEXT_SYS_RESOURCE_H)|g' \
+	      -e 's|@''HAVE_SYS_RESOURCE_H''@|$(HAVE_SYS_RESOURCE_H)|g' \
+	      -e 's/@''GNULIB_GETRUSAGE''@/$(GNULIB_GETRUSAGE)/g' \
+	      -e 's/@''HAVE_GETRUSAGE''@/$(HAVE_GETRUSAGE)/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)' \
+	      < $(top_srcdir)/lib/sys_resource.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+@gl_GNULIB_ENABLED_sys_stat_TRUE@lib/sys/stat.h: lib/sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	$(AM_V_at)$(MKDIR_P) lib/sys
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	      < $(top_srcdir)/lib/sys_stat.in.h; \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	} > $@-t && \
+@gl_GNULIB_ENABLED_sys_stat_TRUE@	mv $@-t $@
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/time.h: lib/sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_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_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+	      -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+	      -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
+	      -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
+	      -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+	      -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+	      -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/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)' \
+	      < $(top_srcdir)/lib/sys_time.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <sys/times.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/times.h: lib/sys_times.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIMES_H''@/$(HAVE_SYS_TIMES_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_SYS_TIMES_H''@|$(NEXT_SYS_TIMES_H)|g' \
+	      -e 's/@''GNULIB_TIMES''@/$(GNULIB_TIMES)/g' \
+	      -e 's|@''HAVE_STRUCT_TMS''@|$(HAVE_STRUCT_TMS)|g' \
+	      -e 's|@''HAVE_TIMES''@|$(HAVE_TIMES)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(top_srcdir)/lib/sys_times.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.
+lib/sys/types.h: lib/sys_types.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) lib/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' \
+	      -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+	      < $(top_srcdir)/lib/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.
+lib/sys/wait.h: lib/sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/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)' \
+	      < $(top_srcdir)/lib/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.
+lib/time.h: lib/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_CTIME''@/$(GNULIB_CTIME)/g' \
+	      -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \
+	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
+	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+	      -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/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/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
+	      -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/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|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
+	      -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \
+	      -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
+	      -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
+	      -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|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_STRFTIME''@|$(REPLACE_STRFTIME)|g' \
+	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+	      -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|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 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_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)' \
+	      < $(top_srcdir)/lib/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.
+lib/unistd.h: lib/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_ACCESS''@/$(GNULIB_ACCESS)/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_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/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_GETPASS''@/$(GNULIB_GETPASS)/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_TRUNCATE''@/$(GNULIB_TRUNCATE)/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' \
+	      < $(top_srcdir)/lib/unistd.in.h | \
+	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+	      -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|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_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|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''@|$(HAVE_DECL_GETLOGIN)|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_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|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_ACCESS''@|$(REPLACE_ACCESS)|g' \
+	      -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_FACCESSAT''@|$(REPLACE_FACCESSAT)|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_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|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_GETPASS''@|$(REPLACE_GETPASS)|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_READLINKAT''@|$(REPLACE_READLINKAT)|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_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
+	      -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|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 $@
+
+lib/unitypes.h: lib/unitypes.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(top_srcdir)/lib/unitypes.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+
+lib/uniwidth.h: lib/uniwidth.in.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(top_srcdir)/lib/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.
+lib/wchar.h: lib/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/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/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' \
+	      -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
+	      < $(top_srcdir)/lib/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_WCSFTIME''@|$(HAVE_WCSFTIME)|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 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+	      -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|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.
+lib/wctype.h: lib/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/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/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)' \
+	      < $(top_srcdir)/lib/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; \
+	:
+
+$(top_srcdir)/tests/package.m4: $(top_srcdir)/configure
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at){ \
+	  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)])'; \
+	} >$@.tmp
+	$(AM_V_at)mv $@.tmp $@
+$(TESTSUITE): $(TESTSUITE_AT)
+	$(AM_V_GEN) \
+	  $(AUTOTEST) $(AUTOTESTFLAGS) $(srcdir)/tests/testsuite.at -o $@.tmp
+	$(AM_V_at)"$(PERL)" -pi -e 's/\@tb\@/\t/g' $@.tmp
+	$(AM_V_at)mv $@.tmp $@
+
+clean-local: clean-local-tests
+clean-local-tests:
+	test ! -f $(TESTSUITE) || $(TESTSUITE) -C tests --clean
+
+.PHONY: recheck
+recheck: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE)							\
+	  $$(perl -n								\
+	     -e 'if (/Summary of the failures/../Detailed failed tests/)'	\
+	     -e '{ /^ *[0-9]+:/ && s/:.*//s && print }' tests/testsuite.log)
+
+check-local: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE)
+
+# Run the test suite on the *installed* tree.
+installcheck-local: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) AUTOTEST_PATH='$(bindir)'
+
+# Be real mean with it.
+.PHONY: maintainer-check-g++
+maintainer-check-g++: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) --compile-c-with-cxx
+
+.PHONY: maintainer-check-posix
+maintainer-check-posix: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
+
+.PHONY: maintainer-check-valgrind
+maintainer-check-valgrind: $(RUN_TESTSUITE_deps)
+	test 'x$(VALGRIND)' == x ||					\
+	  $(RUN_TESTSUITE)						\
+	    PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'	\
+	    VALGRIND_OPTS="$(VALGRIND_OPTS)"
+
+.PHONY: maintainer-check
+maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
+
+.PHONY: maintainer-check-push
+maintainer-check-push:
+	$(MAKE) $(AM_MAKEFLAGS) maintainer-check			\
+	  TESTSUITEFLAGS='BISON_USE_PUSH_FOR_PULL=1 $(TESTSUITEFLAGS)'
+
+.PHONY: maintainer-check-xml
+maintainer-check-xml:
+	$(MAKE) $(AM_MAKEFLAGS) maintainer-check		\
+	  TESTSUITEFLAGS='BISON_TEST_XML=1 $(TESTSUITEFLAGS)'
+
+.PHONY: maintainer-check-release
+maintainer-check-release: maintainer-check maintainer-check-push maintainer-check-xml
+
+clean-local:
+	rm -rf $(CLEANDIRS)
 $(top_srcdir)/.version: configure
-	$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
-dist-hook: gen-ChangeLog
-	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
+	echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook: gen-ChangeLog gen-synclines
+	echo $(VERSION) > $(distdir)/.tarball-version
+
+# When generating a release, include the #lines in Bison's parser.  Do it
+# only if needed.  In particular, distcheck runs dist with read-only
+# sources, so don't try to update src/parse-gram.c: we don't have the
+# permissions.
+.PHONY: gen-synclines
+gen-synclines:
+	cd $(distdir) &&						\
+	if ! grep '#line' src/parse-gram.c >/dev/null 2>&1; then	\
+	  $(abs_top_builddir)/tests/bison				\
+	    $(AM_YFLAGS_WITH_LINES) src/parse-gram.y			\
+	    -o src/parse-gram.c;					\
+	fi
 
 .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)/$@
+	$(AM_V_GEN)find $(srcdir)/data -type f          \
+	  | xargs $(srcdir)/build-aux/$@
 	@echo 'warning: src/parse-gram.[hc] may need to be regenerated.'
 update-package-copyright-year:
-	$(AM_V_GEN)$(build_aux)/$@ configure.ac
+	$(AM_V_GEN)$(srcdir)/build-aux/$@ $(srcdir)/configure.ac
 .PHONY: gen-ChangeLog
 gen-ChangeLog:
 	$(AM_V_GEN)if test -d $(srcdir)/.git; then	\
diff --git a/NEWS b/NEWS
index f374402..6c90e0c 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,1797 @@
 GNU Bison NEWS
 
+* Noteworthy changes in release 3.5 (2019-12-11) [stable]
+
+** Backward incompatible changes
+
+  Lone carriage-return characters (aka \r or ^M) in the grammar files are no
+  longer treated as end-of-lines.  This changes the diagnostics, and in
+  particular their locations.
+
+  In C++, line numbers and columns are now represented as 'int' not
+  'unsigned', so that integer overflow on positions is easily checkable via
+  'gcc -fsanitize=undefined' and the like.  This affects the API for
+  positions.  The default position and location classes now expose
+  'counter_type' (int), used to define line and column numbers.
+
+** Deprecated features
+
+  The YYPRINT macro, which works only with yacc.c and only for tokens, was
+  obsoleted long ago by %printer, introduced in Bison 1.50 (November 2002).
+  It is deprecated and its support will be removed eventually.
+
+** New features
+
+*** Lookahead correction in C++
+
+  Contributed by Adrian Vogelsgesang.
+
+  The C++ deterministic skeleton (lalr1.cc) now supports LAC, via the
+  %define variable parse.lac.
+
+*** Variable api.token.raw: Optimized token numbers (all skeletons)
+
+  In the generated parsers, tokens have two numbers: the "external" token
+  number as returned by yylex (which starts at 257), and the "internal"
+  symbol number (which starts at 3).  Each time yylex is called, a table
+  lookup maps the external token number to the internal symbol number.
+
+  When the %define variable api.token.raw is set, tokens are assigned their
+  internal number, which saves one table lookup per token, and also saves
+  the generation of the mapping table.
+
+  The gain is typically moderate, but in extreme cases (very simple user
+  actions), a 10% improvement can be observed.
+
+*** Generated parsers use better types for states
+
+  Stacks now use the best integral type for state numbers, instead of always
+  using 15 bits.  As a result "small" parsers now have a smaller memory
+  footprint (they use 8 bits), and there is support for large automata (16
+  bits), and extra large (using int, i.e., typically 31 bits).
+
+*** Generated parsers prefer signed integer types
+
+  Bison skeletons now prefer signed to unsigned integer types when either
+  will do, as the signed types are less error-prone and allow for better
+  checking with 'gcc -fsanitize=undefined'.  Also, the types chosen are now
+  portable to unusual machines where char, short and int are all the same
+  width.  On non-GNU platforms this may entail including <limits.h> and (if
+  available) <stdint.h> to define integer types and constants.
+
+*** A skeleton for the D programming language
+
+  For the last few releases, Bison has shipped a stealth experimental
+  skeleton: lalr1.d.  It was first contributed by Oliver Mangold, based on
+  Paolo Bonzini's lalr1.java, and was cleaned and improved thanks to
+  H. S. Teoh.
+
+  However, because nobody has committed to improving, testing, and
+  documenting this skeleton, it is not clear that it will be supported in
+  the future.
+
+  The lalr1.d skeleton *is functional*, and works well, as demonstrated in
+  examples/d/calc.d.  Please try it, enjoy it, and... commit to support it.
+
+*** Debug traces in Java
+
+  The Java backend no longer emits code and data for parser tracing if the
+  %define variable parse.trace is not defined.
+
+** Diagnostics
+
+*** New diagnostic: -Wdangling-alias
+
+  String literals, which allow for better error messages, are (too)
+  liberally accepted by Bison, which might result in silent errors.  For
+  instance
+
+    %type <exVal> cond "condition"
+
+  does not define "condition" as a string alias to 'cond' (nonterminal
+  symbols do not have string aliases).  It is rather equivalent to
+
+    %nterm <exVal> cond
+    %token <exVal> "condition"
+
+  i.e., it gives the type 'exVal' to the "condition" token, which was
+  clearly not the intention.
+
+  Also, because string aliases need not be defined, typos such as "baz"
+  instead of "bar" will be not reported.
+
+  The option -Wdangling-alias catches these situations.  On
+
+    %token BAR "bar"
+    %type <ival> foo "foo"
+    %%
+    foo: "baz" {}
+
+  bison -Wdangling-alias reports
+
+    warning: string literal not attached to a symbol
+          | %type <ival> foo "foo"
+          |                  ^~~~~
+    warning: string literal not attached to a symbol
+          | foo: "baz" {}
+          |      ^~~~~
+
+   The -Wall option does not (yet?) include -Wdangling-alias.
+
+*** Better POSIX Yacc compatibility diagnostics
+
+  POSIX Yacc restricts %type to nonterminals.  This is now diagnosed by
+  -Wyacc.
+
+    %token TOKEN1
+    %type  <ival> TOKEN1 TOKEN2 't'
+    %token TOKEN2
+    %%
+    expr:
+
+  gives with -Wyacc
+
+    input.y:2.15-20: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+        2 | %type  <ival> TOKEN1 TOKEN2 't'
+          |               ^~~~~~
+    input.y:2.29-31: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+        2 | %type  <ival> TOKEN1 TOKEN2 't'
+          |                             ^~~
+    input.y:2.22-27: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+        2 | %type  <ival> TOKEN1 TOKEN2 't'
+          |                      ^~~~~~
+
+*** Diagnostics with insertion
+
+  The diagnostics now display the suggestion below the underlined source.
+  Replacement for undeclared symbols are now also suggested.
+
+    $ cat /tmp/foo.y
+    %%
+    list: lis '.' |
+
+    $ bison -Wall foo.y
+    foo.y:2.7-9: error: symbol 'lis' is used, but is not defined as a token and has no rules; did you mean 'list'?
+        2 | list: lis '.' |
+          |       ^~~
+          |       list
+    foo.y:2.16: warning: empty rule without %empty [-Wempty-rule]
+        2 | list: lis '.' |
+          |                ^
+          |                %empty
+    foo.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+
+*** Diagnostics about long lines
+
+  Quoted sources may now be truncated to fit the screen.  For instance, on a
+  30-column wide terminal:
+
+    $ cat foo.y
+    %token FOO                       FOO                         FOO
+    %%
+    exp: FOO
+    $ bison foo.y
+    foo.y:1.34-36: warning: symbol FOO redeclared [-Wother]
+        1 | …         FOO                  …
+          |           ^~~
+    foo.y:1.8-10:      previous declaration
+        1 | %token FOO                     …
+          |        ^~~
+    foo.y:1.62-64: warning: symbol FOO redeclared [-Wother]
+        1 | …         FOO
+          |           ^~~
+    foo.y:1.8-10:      previous declaration
+        1 | %token FOO                     …
+          |        ^~~
+
+** Changes
+
+*** Debugging glr.c and glr.cc
+
+  The glr.c skeleton always had asserts to check its own behavior (not the
+  user's).  These assertions are now under the control of the parse.assert
+  %define variable (disabled by default).
+
+*** Clean up
+
+  Several new compiler warnings in the generated output have been avoided.
+  Some unused features are no longer emitted.  Cleaner generated code in
+  general.
+
+** Bug Fixes
+
+  Portability issues in the test suite.
+
+  In theory, parsers using %nonassoc could crash when reporting verbose
+  error messages. This unlikely bug has been fixed.
+
+  In Java, %define api.prefix was ignored.  It now behaves as expected.
+
+* Noteworthy changes in release 3.4.2 (2019-09-12) [stable]
+
+** Bug fixes
+
+  In some cases, when warnings are disabled, bison could emit tons of white
+  spaces as diagnostics.
+
+  When running out of memory, bison could crash (found by fuzzing).
+
+  When defining twice the EOF token, bison would crash.
+
+  New warnings from recent compilers have been addressed in the generated
+  parsers (yacc.c, glr.c, glr.cc).
+
+  When lone carriage-return characters appeared in the input file,
+  diagnostics could hang forever.
+
+* Noteworthy changes in release 3.4.1 (2019-05-22) [stable]
+
+** Bug fixes
+
+  Portability fixes.
+
+* Noteworthy changes in release 3.4 (2019-05-19) [stable]
+
+** Deprecated features
+
+  The %pure-parser directive is deprecated in favor of '%define api.pure'
+  since Bison 2.3b (2008-05-27), but no warning was issued; there is one
+  now.  Note that since Bison 2.7 you are strongly encouraged to use
+  '%define api.pure full' instead of '%define api.pure'.
+
+** New features
+
+*** Colored diagnostics
+
+  As an experimental feature, diagnostics are now colored, controlled by the
+  new options --color and --style.
+
+  To use them, install the libtextstyle library before configuring Bison.
+  It is available from
+
+    https://alpha.gnu.org/gnu/gettext/
+
+  for instance
+
+    https://alpha.gnu.org/gnu/gettext/libtextstyle-0.8.tar.gz
+
+  The option --color supports the following arguments:
+    - always, yes: Enable colors.
+    - never, no: Disable colors.
+    - auto, tty (default): Enable colors if the output device is a tty.
+
+  To customize the styles, create a CSS file similar to
+
+    /* bison-bw.css */
+    .warning   { }
+    .error     { font-weight: 800; text-decoration: underline; }
+    .note      { }
+
+  then invoke bison with --style=bison-bw.css, or set the BISON_STYLE
+  environment variable to "bison-bw.css".
+
+*** Disabling output
+
+  When given -fsyntax-only, the diagnostics are reported, but no output is
+  generated.
+
+  The name of this option is somewhat misleading as bison does more than
+  just checking the syntax: every stage is run (including checking for
+  conflicts for instance), except the generation of the output files.
+
+*** Include the generated header (yacc.c)
+
+  Before, when --defines is used, bison generated a header, and pasted an
+  exact copy of it into the generated parser implementation file.  If the
+  header name is not "y.tab.h", it is now #included instead of being
+  duplicated.
+
+  To use an '#include' even if the header name is "y.tab.h" (which is what
+  happens with --yacc, or when using the Autotools' ylwrap), define
+  api.header.include to the exact argument to pass to #include.  For
+  instance:
+
+    %define api.header.include {"parse.h"}
+
+  or
+
+    %define api.header.include {<parser/parse.h>}
+
+*** api.location.type is now supported in C (yacc.c, glr.c)
+
+  The %define variable api.location.type defines the name of the type to use
+  for locations.  When defined, Bison no longer defines YYLTYPE.
+
+  This can be used in programs with several parsers to factor their
+  definition of locations: let one of them generate them, and the others
+  just use them.
+
+** Changes
+
+*** Graphviz output
+
+  In conformance with the recommendations of the Graphviz team, if %require
+  "3.4" (or better) is specified, the option --graph generates a *.gv file
+  by default, instead of *.dot.
+
+*** Diagnostics overhaul
+
+  Column numbers were wrong with multibyte characters, which would also
+  result in skewed diagnostics with carets.  Beside, because we were
+  indenting the quoted source with a single space, lines with tab characters
+  were incorrectly underlined.
+
+  To address these issues, and to be clearer, Bison now issues diagnostics
+  as GCC9 does.  For instance it used to display (there's a tab before the
+  opening brace):
+
+    foo.y:3.37-38: error: $2 of ‘expr’ has no declared type
+     expr: expr '+' "number"        { $$ = $1 + $2; }
+                                         ^~
+  It now reports
+
+    foo.y:3.37-38: error: $2 of ‘expr’ has no declared type
+        3 | expr: expr '+' "number" { $$ = $1 + $2; }
+          |                                     ^~
+
+  Other constructs now also have better locations, resulting in more precise
+  diagnostics.
+
+*** Fix-it hints for %empty
+
+  Running Bison with -Wempty-rules and --update will remove incorrect %empty
+  annotations, and add the missing ones.
+
+*** Generated reports
+
+  The format of the reports (parse.output) was improved for readability.
+
+*** Better support for --no-line.
+
+  When --no-line is used, the generated files are now cleaner: no lines are
+  generated instead of empty lines.  Together with using api.header.include,
+  that should help people saving the generated files into version control
+  systems get smaller diffs.
+
+** Documentation
+
+  A new example in C shows an simple infix calculator with a hand-written
+  scanner (examples/c/calc).
+
+  A new example in C shows a reentrant parser (capable of recursive calls)
+  built with Flex and Bison (examples/c/reccalc).
+
+  There is a new section about the history of Yaccs and Bison.
+
+** Bug fixes
+
+  A few obscure bugs were fixed, including the second oldest (known) bug in
+  Bison: it was there when Bison was entered in the RCS version control
+  system, in December 1987.  See the NEWS of Bison 3.3 for the previous
+  oldest bug.
+
+* Noteworthy changes in release 3.3.2 (2019-02-03) [stable]
+
+** Bug fixes
+
+  Bison 3.3 failed to generate parsers for grammars with unused nonterminal
+  symbols.
+
+* Noteworthy changes in release 3.3.1 (2019-01-27) [stable]
+
+** Changes
+
+  The option -y/--yacc used to imply -Werror=yacc, which turns uses of Bison
+  extensions into errors.  It now makes them simple warnings (-Wyacc).
+
+* Noteworthy changes in release 3.3 (2019-01-26) [stable]
+
+  A new mailing list was created, Bison Announce.  It is low traffic, and is
+  only about announcing new releases and important messages (e.g., polls
+  about major decisions to make).
+
+  https://lists.gnu.org/mailman/listinfo/bison-announce
+
+** Backward incompatible changes
+
+  Support for DJGPP, which has been unmaintained and untested for years, is
+  removed.
+
+** Deprecated features
+
+  A new feature, --update (see below) helps adjusting existing grammars to
+  deprecations.
+
+*** Deprecated directives
+
+  The %error-verbose directive is deprecated in favor of '%define
+  parse.error verbose' since Bison 3.0, but no warning was issued.
+
+  The '%name-prefix "xx"' directive is deprecated in favor of '%define
+  api.prefix {xx}' since Bison 3.0, but no warning was issued.  These
+  directives are slightly different, you might need to adjust your code.
+  %name-prefix renames only symbols with external linkage, while api.prefix
+  also renames types and macros, including YYDEBUG, YYTOKENTYPE,
+  yytokentype, YYSTYPE, YYLTYPE, etc.
+
+  Users of Flex that move from '%name-prefix "xx"' to '%define api.prefix
+  {xx}' will typically have to update YY_DECL from
+
+    #define YY_DECL int xxlex (YYSTYPE *yylval, YYLTYPE *yylloc)
+
+  to
+
+    #define YY_DECL int xxlex (XXSTYPE *yylval, XXLTYPE *yylloc)
+
+*** Deprecated %define variable names
+
+  The following variables, mostly related to parsers in Java, have been
+  renamed for consistency.  Backward compatibility is ensured, but upgrading
+  is recommended.
+
+    abstract           -> api.parser.abstract
+    annotations        -> api.parser.annotations
+    extends            -> api.parser.extends
+    final              -> api.parser.final
+    implements         -> api.parser.implements
+    parser_class_name  -> api.parser.class
+    public             -> api.parser.public
+    strictfp           -> api.parser.strictfp
+
+** New features
+
+*** Generation of fix-its for IDEs/Editors
+
+  When given the new option -ffixit (aka -fdiagnostics-parseable-fixits),
+  bison now generates machine readable editing instructions to fix some
+  issues.  Currently, this is mostly limited to updating deprecated
+  directives and removing duplicates.  For instance:
+
+    $ cat foo.y
+    %error-verbose
+    %define parser_class_name "Parser"
+    %define api.parser.class "Parser"
+    %%
+    exp:;
+
+  See the "fix-it:" lines below:
+
+    $ bison -ffixit foo.y
+    foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
+     %error-verbose
+     ^~~~~~~~~~~~~~
+    fix-it:"foo.y":{1:1-1:15}:"%define parse.error verbose"
+    foo.y:2.1-34: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
+     %define parser_class_name "Parser"
+     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    fix-it:"foo.y":{2:1-2:35}:"%define api.parser.class {Parser}"
+    foo.y:3.1-33: error: %define variable 'api.parser.class' redefined
+     %define api.parser.class "Parser"
+     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    foo.y:2.1-34:     previous definition
+     %define parser_class_name "Parser"
+     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    fix-it:"foo.y":{3:1-3:34}:""
+    foo.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+
+  This uses the same output format as GCC and Clang.
+
+*** Updating grammar files
+
+  Fixes can be applied on the fly.  The previous example ends with the
+  suggestion to re-run bison with the option -u/--update, which results in a
+  cleaner grammar file.
+
+    $ bison --update foo.y
+    [...]
+    bison: file 'foo.y' was updated (backup: 'foo.y~')
+
+    $ cat foo.y
+    %define parse.error verbose
+    %define api.parser.class {Parser}
+    %%
+    exp:;
+
+*** Bison is now relocatable
+
+  If you pass '--enable-relocatable' to 'configure', Bison is relocatable.
+
+  A relocatable program can be moved or copied to a different location on
+  the file system.  It can also be used through mount points for network
+  sharing.  It is possible to make symbolic links to the installed and moved
+  programs, and invoke them through the symbolic link.
+
+*** %expect and %expect-rr modifiers on individual rules
+
+  One can now document (and check) which rules participate in shift/reduce
+  and reduce/reduce conflicts.  This is particularly important GLR parsers,
+  where conflicts are a normal occurrence.  For example,
+
+      %glr-parser
+      %expect 1
+      %%
+
+      ...
+
+      argument_list:
+        arguments %expect 1
+      | arguments ','
+      | %empty
+      ;
+
+      arguments:
+        expression
+      | argument_list ',' expression
+      ;
+
+      ...
+
+  Looking at the output from -v, one can see that the shift-reduce conflict
+  here is due to the fact that the parser does not know whether to reduce
+  arguments to argument_list until it sees the token _after_ the following
+  ','.  By marking the rule with %expect 1 (because there is a conflict in
+  one state), we document the source of the 1 overall shift-reduce conflict.
+
+  In GLR parsers, we can use %expect-rr in a rule for reduce/reduce
+  conflicts.  In this case, we mark each of the conflicting rules.  For
+  example,
+
+      %glr-parser
+      %expect-rr 1
+
+      %%
+
+      stmt:
+        target_list '=' expr ';'
+      | expr_list ';'
+      ;
+
+      target_list:
+        target
+      | target ',' target_list
+      ;
+
+      target:
+        ID %expect-rr 1
+      ;
+
+      expr_list:
+        expr
+      | expr ',' expr_list
+      ;
+
+      expr:
+        ID %expect-rr 1
+      | ...
+      ;
+
+  In a statement such as
+
+      x, y = 3, 4;
+
+  the parser must reduce x to a target or an expr, but does not know which
+  until it sees the '='.  So we notate the two possible reductions to
+  indicate that each conflicts in one rule.
+
+  This feature needs user feedback, and might evolve in the future.
+
+*** C++: Actual token constructors
+
+  When variants and token constructors are enabled, in addition to the
+  type-safe named token constructors (make_ID, make_INT, etc.), we now
+  generate genuine constructors for symbol_type.
+
+  For instance with these declarations
+
+    %token           ':'
+       <std::string> ID
+       <int>         INT;
+
+  you may use these constructors:
+
+    symbol_type (int token, const std::string&);
+    symbol_type (int token, const int&);
+    symbol_type (int token);
+
+  Correct matching between token types and value types is checked via
+  'assert'; for instance, 'symbol_type (ID, 42)' would abort.  Named
+  constructors are preferable, as they offer better type safety (for
+  instance 'make_ID (42)' would not even compile), but symbol_type
+  constructors may help when token types are discovered at run-time, e.g.,
+
+     [a-z]+   {
+                if (auto i = lookup_keyword (yytext))
+                  return yy::parser::symbol_type (i);
+                else
+                  return yy::parser::make_ID (yytext);
+              }
+
+*** C++: Variadic emplace
+
+  If your application requires C++11 and you don't use symbol constructors,
+  you may now use a variadic emplace for semantic values:
+
+    %define api.value.type variant
+    %token <std::pair<int, int>> PAIR
+
+  in your scanner:
+
+    int yylex (parser::semantic_type *lvalp)
+    {
+      lvalp->emplace <std::pair<int, int>> (1, 2);
+      return parser::token::PAIR;
+    }
+
+*** C++: Syntax error exceptions in GLR
+
+  The glr.cc skeleton now supports syntax_error exceptions thrown from user
+  actions, or from the scanner.
+
+*** More POSIX Yacc compatibility warnings
+
+  More Bison specific directives are now reported with -y or -Wyacc.  This
+  change was ready since the release of Bison 3.0 in September 2015.  It was
+  delayed because Autoconf used to define YACC as `bison -y`, which resulted
+  in numerous warnings for Bison users that use the GNU Build System.
+
+  If you still experience that problem, either redefine YACC as `bison -o
+  y.tab.c`, or pass -Wno-yacc to Bison.
+
+*** The tables yyrhs and yyphrs are back
+
+  Because no Bison skeleton uses them, these tables were removed (no longer
+  passed to the skeletons, not even computed) in 2008.  However, some users
+  have expressed interest in being able to use them in their own skeletons.
+
+** Bug fixes
+
+*** Incorrect number of reduce-reduce conflicts
+
+  On a grammar such as
+
+     exp: "num" | "num" | "num"
+
+  bison used to report a single RR conflict, instead of two.  This is now
+  fixed.  This was the oldest (known) bug in Bison: it was there when Bison
+  was entered in the RCS version control system, in December 1987.
+
+  Some grammar files might have to adjust their %expect-rr.
+
+*** Parser directives that were not careful enough
+
+  Passing invalid arguments to %nterm, for instance character literals, used
+  to result in unclear error messages.
+
+** Documentation
+
+  The examples/ directory (installed in .../share/doc/bison/examples) has
+  been restructured per language for clarity.  The examples come with a
+  README and a Makefile.  Not only can they be used to toy with Bison, they
+  can also be starting points for your own grammars.
+
+  There is now a Java example, and a simple example in C based on Flex and
+  Bison (examples/c/lexcalc/).
+
+** Changes
+
+*** Parsers in C++
+
+  They now use noexcept and constexpr.  Please, report missing annotations.
+
+*** Symbol Declarations
+
+  The syntax of the variation directives to declare symbols was overhauled
+  for more consistency, and also better POSIX Yacc compliance (which, for
+  instance, allows "%type" without actually providing a type).  The %nterm
+  directive, supported by Bison since its inception, is now documented and
+  officially supported.
+
+  The syntax is now as follows:
+
+    %token TAG? ( ID NUMBER? STRING? )+ ( TAG ( ID NUMBER? STRING? )+ )*
+    %left  TAG? ( ID NUMBER? )+ ( TAG ( ID NUMBER? )+ )*
+    %type  TAG? ( ID | CHAR | STRING )+ ( TAG ( ID | CHAR | STRING )+ )*
+    %nterm TAG? ID+ ( TAG ID+ )*
+
+  where TAG denotes a type tag such as ‘<ival>’, ID denotes an identifier
+  such as ‘NUM’, NUMBER a decimal or hexadecimal integer such as ‘300’ or
+  ‘0x12d’, CHAR a character literal such as ‘'+'’, and STRING a string
+  literal such as ‘"number"’.  The post-fix quantifiers are ‘?’ (zero or
+  one), ‘*’ (zero or more) and ‘+’ (one or more).
+
+* Noteworthy changes in release 3.2.4 (2018-12-24) [stable]
+
+** Bug fixes
+
+  Fix the move constructor of symbol_type.
+
+  Always provide a copy constructor for symbol_type, even in modern C++.
+
+* Noteworthy changes in release 3.2.3 (2018-12-18) [stable]
+
+** Bug fixes
+
+  Properly support token constructors in C++ with types that include commas
+  (e.g., std::pair<int, int>).  A regression introduced in Bison 3.2.
+
+* Noteworthy changes in release 3.2.2 (2018-11-21) [stable]
+
+** Bug fixes
+
+  C++ portability issues.
+
+* Noteworthy changes in release 3.2.1 (2018-11-09) [stable]
+
+** Bug fixes
+
+  Several portability issues have been fixed in the build system, in the
+  test suite, and in the generated parsers in C++.
+
+* Noteworthy changes in release 3.2 (2018-10-29) [stable]
+
+** Backward incompatible changes
+
+  Support for DJGPP, which has been unmaintained and untested for years, is
+  obsolete.  Unless there is activity to revive it, it will be removed.
+
+** Changes
+
+  %printers should use yyo rather than yyoutput to denote the output stream.
+
+  Variant-based symbols in C++ should use emplace() rather than build().
+
+  In C++ parsers, parser::operator() is now a synonym for the parser::parse.
+
+** Documentation
+
+  A new section, "A Simple C++ Example", is a tutorial for parsers in C++.
+
+  A comment in the generated code now emphasizes that users should not
+  depend upon non-documented implementation details, such as macros starting
+  with YY_.
+
+** New features
+
+*** C++: Support for move semantics (lalr1.cc)
+
+  The lalr1.cc skeleton now fully supports C++ move semantics, while
+  maintaining compatibility with C++98.  You may now store move-only types
+  when using Bison's variants.  For instance:
+
+    %code {
+      #include <memory>
+      #include <vector>
+    }
+
+    %skeleton "lalr1.cc"
+    %define api.value.type variant
+
+    %%
+
+    %token <int> INT "int";
+    %type <std::unique_ptr<int>> int;
+    %type <std::vector<std::unique_ptr<int>>> list;
+
+    list:
+      %empty    {}
+    | list int  { $$ = std::move($1); $$.emplace_back(std::move($2)); }
+
+    int: "int"  { $$ = std::make_unique<int>($1); }
+
+*** C++: Implicit move of right-hand side values (lalr1.cc)
+
+  In modern C++ (C++11 and later), you should always use 'std::move' with
+  the values of the right-hand side symbols ($1, $2, etc.), as they will be
+  popped from the stack anyway.  Using 'std::move' is mandatory for
+  move-only types such as unique_ptr, and it provides a significant speedup
+  for large types such as std::string, or std::vector, etc.
+
+  If '%define api.value.automove' is set, every occurrence '$n' is replaced
+  by 'std::move ($n)'.  The second rule in the previous grammar can be
+  simplified to:
+
+    list: list int  { $$ = $1; $$.emplace_back($2); }
+
+  With automove enabled, the semantic values are no longer lvalues, so do
+  not use the swap idiom:
+
+    list: list int  { std::swap($$, $1); $$.emplace_back($2); }
+
+  This idiom is anyway obsolete: it is preferable to move than to swap.
+
+  A warning is issued when automove is enabled, and a value is used several
+  times.
+
+    input.yy:16.31-32: warning: multiple occurrences of $2 with api.value.automove enabled [-Wother]
+    exp: "twice" exp   { $$ = $2 + $2; }
+                                   ^^
+
+  Enabling api.value.automove does not require support for modern C++.  The
+  generated code is valid C++98/03, but will use copies instead of moves.
+
+  The new examples/c++/variant-11.yy shows these features in action.
+
+*** C++: The implicit default semantic action is always run
+
+  When variants are enabled, the default action was not run, so
+
+    exp: "number"
+
+  was equivalent to
+
+    exp: "number"  {}
+
+  It now behaves like in all the other cases, as
+
+    exp: "number"  { $$ = $1; }
+
+  possibly using std::move if automove is enabled.
+
+  We do not expect backward compatibility issues.  However, beware of
+  forward compatibility issues: if you rely on default actions with
+  variants, be sure to '%require "3.2"' to avoid older versions of Bison to
+  generate incorrect parsers.
+
+*** C++: Renaming location.hh
+
+  When both %defines and %locations are enabled, Bison generates a
+  location.hh file.  If you don't use locations outside of the parser, you
+  may avoid its creation with:
+
+    %define api.location.file none
+
+  However this file is useful if, for instance, your parser builds an AST
+  decorated with locations: you may use Bison's location independently of
+  Bison's parser.  You can now give it another name, for instance:
+
+    %define api.location.file "my-location.hh"
+
+  This name can have directory components, and even be absolute.  The name
+  under which the location file is included is controlled by
+  api.location.include.
+
+  This way it is possible to have several parsers share the same location
+  file.
+
+  For instance, in src/foo/parser.hh, generate the include/ast/loc.hh file:
+
+    %locations
+    %define api.namespace {foo}
+    %define api.location.file "include/ast/loc.hh"
+    %define api.location.include {<ast/loc.hh>}
+
+  and use it in src/bar/parser.hh:
+
+    %locations
+    %define api.namespace {bar}
+    %code requires {#include <ast/loc.hh>}
+    %define api.location.type {bar::location}
+
+  Absolute file names are supported, so in your Makefile, passing the flag
+  -Dapi.location.file='"$(top_srcdir)/include/ast/location.hh"' to bison is
+  safe.
+
+*** C++: stack.hh and position.hh are deprecated
+
+  When asked to generate a header file (%defines), the lalr1.cc skeleton
+  generates a stack.hh file.  This file had no interest for users; it is now
+  made useless: its content is included in the parser definition.  It is
+  still generated for backward compatibility.
+
+  When in addition to %defines, location support is requested (%locations),
+  the file position.hh is also generated.  It is now also useless: its
+  content is now included in location.hh.
+
+  These files are no longer generated when your grammar file requires at
+  least Bison 3.2 (%require "3.2").
+
+** Bug fixes
+
+  Portability issues on MinGW and VS2015.
+
+  Portability issues in the test suite.
+
+  Portability/warning issues with Flex.
+
+* Noteworthy changes in release 3.1 (2018-08-27) [stable]
+
+** Backward incompatible changes
+
+  Compiling Bison now requires a C99 compiler---as announced during the
+  release of Bison 3.0, five years ago.  Generated parsers do not require a
+  C99 compiler.
+
+  Support for DJGPP, which has been unmaintained and untested for years, is
+  obsolete. Unless there is activity to revive it, the next release of Bison
+  will have it removed.
+
+** New features
+
+*** Typed midrule actions
+
+  Because their type is unknown to Bison, the values of midrule actions are
+  not treated like the others: they don't have %printer and %destructor
+  support.  It also prevents C++ (Bison) variants to handle them properly.
+
+  Typed midrule actions address these issues.  Instead of:
+
+    exp: { $<ival>$ = 1; } { $<ival>$ = 2; }   { $$ = $<ival>1 + $<ival>2; }
+
+  write:
+
+    exp: <ival>{ $$ = 1; } <ival>{ $$ = 2; }   { $$ = $1 + $2; }
+
+*** Reports include the type of the symbols
+
+  The sections about terminal and nonterminal symbols of the '*.output' file
+  now specify their declared type.  For instance, for:
+
+    %token <ival> NUM
+
+  the report now shows '<ival>':
+
+    Terminals, with rules where they appear
+
+    NUM <ival> (258) 5
+
+*** Diagnostics about useless rules
+
+  In the following grammar, the 'exp' nonterminal is trivially useless.  So,
+  of course, its rules are useless too.
+
+    %%
+    input: '0' | exp
+    exp: exp '+' exp | exp '-' exp | '(' exp ')'
+
+  Previously all the useless rules were reported, including those whose
+  left-hand side is the 'exp' nonterminal:
+
+    warning: 1 nonterminal useless in grammar [-Wother]
+    warning: 4 rules useless in grammar [-Wother]
+    2.14-16: warning: nonterminal useless in grammar: exp [-Wother]
+     input: '0' | exp
+                  ^^^
+    2.14-16: warning: rule useless in grammar [-Wother]
+     input: '0' | exp
+                  ^^^
+    3.6-16: warning: rule useless in grammar [-Wother]
+     exp: exp '+' exp | exp '-' exp | '(' exp ')'
+          ^^^^^^^^^^^
+    3.20-30: warning: rule useless in grammar [-Wother]
+     exp: exp '+' exp | exp '-' exp | '(' exp ')'
+                        ^^^^^^^^^^^
+    3.34-44: warning: rule useless in grammar [-Wother]
+     exp: exp '+' exp | exp '-' exp | '(' exp ')'
+                                      ^^^^^^^^^^^
+
+  Now, rules whose left-hand side symbol is useless are no longer reported
+  as useless.  The locations of the errors have also been adjusted to point
+  to the first use of the nonterminal as a left-hand side of a rule:
+
+    warning: 1 nonterminal useless in grammar [-Wother]
+    warning: 4 rules useless in grammar [-Wother]
+    3.1-3: warning: nonterminal useless in grammar: exp [-Wother]
+     exp: exp '+' exp | exp '-' exp | '(' exp ')'
+     ^^^
+    2.14-16: warning: rule useless in grammar [-Wother]
+     input: '0' | exp
+                  ^^^
+
+*** C++: Generated parsers can be compiled with -fno-exceptions (lalr1.cc)
+
+  When compiled with exceptions disabled, the generated parsers no longer
+  uses try/catch clauses.
+
+  Currently only GCC and Clang are supported.
+
+** Documentation
+
+*** A demonstration of variants
+
+  A new example was added (installed in .../share/doc/bison/examples),
+  'variant.yy', which shows how to use (Bison) variants in C++.
+
+  The other examples were made nicer to read.
+
+*** Some features are no longer 'experimental'
+
+  The following features, mature enough, are no longer flagged as
+  experimental in the documentation: push parsers, default %printer and
+  %destructor (typed: <*> and untyped: <>), %define api.value.type union and
+  variant, Java parsers, XML output, LR family (lr, ielr, lalr), and
+  semantic predicates (%?).
+
+** Bug fixes
+
+*** GLR: Predicates support broken by #line directives
+
+  Predicates (%?) in GLR such as
+
+    widget:
+      %? {new_syntax} 'w' id new_args
+    | %?{!new_syntax} 'w' id old_args
+
+  were issued with #lines in the middle of C code.
+
+*** Printer and destructor with broken #line directives
+
+  The #line directives were not properly escaped when emitting the code for
+  %printer/%destructor, which resulted in compiler errors if there are
+  backslashes or double-quotes in the grammar file name.
+
+*** Portability on ICC
+
+  The Intel compiler claims compatibility with GCC, yet rejects its _Pragma.
+  Generated parsers now work around this.
+
+*** Various
+
+  There were several small fixes in the test suite and in the build system,
+  many warnings in bison and in the generated parsers were eliminated.  The
+  documentation also received its share of minor improvements.
+
+  Useless code was removed from C++ parsers, and some of the generated
+  constructors are more 'natural'.
+
+* Noteworthy changes in release 3.0.5 (2018-05-27) [stable]
+
+** Bug fixes
+
+*** C++: Fix support of 'syntax_error'
+
+  One incorrect 'inline' resulted in linking errors about the constructor of
+  the syntax_error exception.
+
+*** C++: Fix warnings
+
+  GCC 7.3 (with -O1 or -O2 but not -O0 or -O3) issued null-dereference
+  warnings about yyformat being possibly null.  It also warned about the
+  deprecated implicit definition of copy constructors when there's a
+  user-defined (copy) assignment operator.
+
+*** Location of errors
+
+  In C++ parsers, out-of-bounds errors can happen when a rule with an empty
+  ride-hand side raises a syntax error.  The behavior of the default parser
+  (yacc.c) in such a condition was undefined.
+
+  Now all the parsers match the behavior of glr.c: @$ is used as the
+  location of the error.  This handles gracefully rules with and without
+  rhs.
+
+*** Portability fixes in the test suite
+
+  On some platforms, some Java and/or C++ tests were failing.
+
+* Noteworthy changes in release 3.0.4 (2015-01-23) [stable]
+
+** Bug fixes
+
+*** C++ with Variants (lalr1.cc)
+
+  Fix a compiler warning when no %destructor use $$.
+
+*** Test suites
+
+  Several portability issues in tests were fixed.
+
+* Noteworthy changes in release 3.0.3 (2015-01-15) [stable]
+
+** Bug fixes
+
+*** C++ with Variants (lalr1.cc)
+
+  Problems with %destructor and '%define parse.assert' have been fixed.
+
+*** Named %union support (yacc.c, glr.c)
+
+  Bison 3.0 introduced a regression on named %union such as
+
+    %union foo { int ival; };
+
+  The possibility to use a name was introduced "for Yacc compatibility".
+  It is however not required by POSIX Yacc, and its usefulness is not clear.
+
+*** %define api.value.type union with %defines (yacc.c, glr.c)
+
+  The C parsers were broken when %defines was used together with "%define
+  api.value.type union".
+
+*** Redeclarations are reported in proper order
+
+  On
+
+    %token FOO "foo"
+    %printer {} "foo"
+    %printer {} FOO
+
+  bison used to report:
+
+    foo.yy:2.10-11: error: %printer redeclaration for FOO
+     %printer {} "foo"
+              ^^
+    foo.yy:3.10-11:     previous declaration
+     %printer {} FOO
+              ^^
+
+  Now, the "previous" declaration is always the first one.
+
+
+** Documentation
+
+  Bison now installs various files in its docdir (which defaults to
+  '/usr/local/share/doc/bison'), including the three fully blown examples
+  extracted from the documentation:
+
+   - rpcalc
+     Reverse Polish Calculator, a simple introductory example.
+   - mfcalc
+     Multi-function Calc, a calculator with memory and functions and located
+     error messages.
+   - calc++
+     a calculator in C++ using variant support and token constructors.
+
+* Noteworthy changes in release 3.0.2 (2013-12-05) [stable]
+
+** Bug fixes
+
+*** Generated source files when errors are reported
+
+  When warnings are issued and -Werror is set, bison would still generate
+  the source files (*.c, *.h...).  As a consequence, some runs of "make"
+  could fail the first time, but not the second (as the files were generated
+  anyway).
+
+  This is fixed: bison no longer generates this source files, but, of
+  course, still produces the various reports (*.output, *.xml, etc.).
+
+*** %empty is used in reports
+
+  Empty right-hand sides are denoted by '%empty' in all the reports (text,
+  dot, XML and formats derived from it).
+
+*** YYERROR and variants
+
+  When C++ variant support is enabled, an error triggered via YYERROR, but
+  not caught via error recovery, resulted in a double deletion.
+
+* Noteworthy changes in release 3.0.1 (2013-11-12) [stable]
+
+** Bug fixes
+
+*** Errors in caret diagnostics
+
+  On some platforms, some errors could result in endless diagnostics.
+
+*** Fixes of the -Werror option
+
+  Options such as "-Werror -Wno-error=foo" were still turning "foo"
+  diagnostics into errors instead of warnings.  This is fixed.
+
+  Actually, for consistency with GCC, "-Wno-error=foo -Werror" now also
+  leaves "foo" diagnostics as warnings.  Similarly, with "-Werror=foo
+  -Wno-error", "foo" diagnostics are now errors.
+
+*** GLR Predicates
+
+  As demonstrated in the documentation, one can now leave spaces between
+  "%?" and its "{".
+
+*** Installation
+
+  The yacc.1 man page is no longer installed if --disable-yacc was
+  specified.
+
+*** Fixes in the test suite
+
+  Bugs and portability issues.
+
+* Noteworthy changes in release 3.0 (2013-07-25) [stable]
+
+** WARNING: Future backward-incompatibilities!
+
+  Like other GNU packages, Bison will start using some of the C99 features
+  for its own code, especially the definition of variables after statements.
+  The generated C parsers still aim at C90.
+
+** Backward incompatible changes
+
+*** Obsolete features
+
+  Support for YYFAIL is removed (deprecated in Bison 2.4.2): use YYERROR.
+
+  Support for yystype and yyltype is removed (deprecated in Bison 1.875):
+  use YYSTYPE and YYLTYPE.
+
+  Support for YYLEX_PARAM and YYPARSE_PARAM is removed (deprecated in Bison
+  1.875): use %lex-param, %parse-param, or %param.
+
+  Missing semicolons at the end of actions are no longer added (as announced
+  in the release 2.5).
+
+*** Use of YACC='bison -y'
+
+  TL;DR: With Autoconf <= 2.69, pass -Wno-yacc to (AM_)YFLAGS if you use
+  Bison extensions.
+
+  Traditional Yacc generates 'y.tab.c' whatever the name of the input file.
+  Therefore Makefiles written for Yacc expect 'y.tab.c' (and possibly
+  'y.tab.h' and 'y.output') to be generated from 'foo.y'.
+
+  To this end, for ages, AC_PROG_YACC, Autoconf's macro to look for an
+  implementation of Yacc, was using Bison as 'bison -y'.  While it does
+  ensure compatible output file names, it also enables warnings for
+  incompatibilities with POSIX Yacc.  In other words, 'bison -y' triggers
+  warnings for Bison extensions.
+
+  Autoconf 2.70+ fixes this incompatibility by using YACC='bison -o y.tab.c'
+  (which also generates 'y.tab.h' and 'y.output' when needed).
+  Alternatively, disable Yacc warnings by passing '-Wno-yacc' to your Yacc
+  flags (YFLAGS, or AM_YFLAGS with Automake).
+
+** Bug fixes
+
+*** The epilogue is no longer affected by internal #defines (glr.c)
+
+  The glr.c skeleton uses defines such as #define yylval (yystackp->yyval) in
+  generated code.  These weren't properly undefined before the inclusion of
+  the user epilogue, so functions such as the following were butchered by the
+  preprocessor expansion:
+
+    int yylex (YYSTYPE *yylval);
+
+  This is fixed: yylval, yynerrs, yychar, and yylloc are now valid
+  identifiers for user-provided variables.
+
+*** stdio.h is no longer needed when locations are enabled (yacc.c)
+
+  Changes in Bison 2.7 introduced a dependency on FILE and fprintf when
+  locations are enabled.  This is fixed.
+
+*** Warnings about useless %pure-parser/%define api.pure are restored
+
+** Diagnostics reported by Bison
+
+  Most of these features were contributed by Théophile Ranquet and Victor
+  Santet.
+
+*** Carets
+
+  Version 2.7 introduced caret errors, for a prettier output.  These are now
+  activated by default.  The old format can still be used by invoking Bison
+  with -fno-caret (or -fnone).
+
+  Some error messages that reproduced excerpts of the grammar are now using
+  the caret information only.  For instance on:
+
+    %%
+    exp: 'a' | 'a';
+
+  Bison 2.7 reports:
+
+    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+    in.y:2.12-14: warning: rule useless in parser due to conflicts: exp: 'a' [-Wother]
+
+  Now bison reports:
+
+    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+    in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]
+     exp: 'a' | 'a';
+                ^^^
+
+  and "bison -fno-caret" reports:
+
+    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+    in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]
+
+*** Enhancements of the -Werror option
+
+  The -Werror=CATEGORY option is now recognized, and will treat specified
+  warnings as errors. The warnings need not have been explicitly activated
+  using the -W option, this is similar to what GCC 4.7 does.
+
+  For example, given the following command line, Bison will treat both
+  warnings related to POSIX Yacc incompatibilities and S/R conflicts as
+  errors (and only those):
+
+    $ bison -Werror=yacc,error=conflicts-sr input.y
+
+  If no categories are specified, -Werror will make all active warnings into
+  errors. For example, the following line does the same the previous example:
+
+    $ bison -Werror -Wnone -Wyacc -Wconflicts-sr input.y
+
+  (By default -Wconflicts-sr,conflicts-rr,deprecated,other is enabled.)
+
+  Note that the categories in this -Werror option may not be prefixed with
+  "no-". However, -Wno-error[=CATEGORY] is valid.
+
+  Note that -y enables -Werror=yacc. Therefore it is now possible to require
+  Yacc-like behavior (e.g., always generate y.tab.c), but to report
+  incompatibilities as warnings: "-y -Wno-error=yacc".
+
+*** The display of warnings is now richer
+
+  The option that controls a given warning is now displayed:
+
+    foo.y:4.6: warning: type clash on default action: <foo> != <bar> [-Wother]
+
+  In the case of warnings treated as errors, the prefix is changed from
+  "warning: " to "error: ", and the suffix is displayed, in a manner similar
+  to GCC, as [-Werror=CATEGORY].
+
+  For instance, where the previous version of Bison would report (and exit
+  with failure):
+
+    bison: warnings being treated as errors
+    input.y:1.1: warning: stray ',' treated as white space
+
+  it now reports:
+
+    input.y:1.1: error: stray ',' treated as white space [-Werror=other]
+
+*** Deprecated constructs
+
+  The new 'deprecated' warning category flags obsolete constructs whose
+  support will be discontinued.  It is enabled by default.  These warnings
+  used to be reported as 'other' warnings.
+
+*** Useless semantic types
+
+  Bison now warns about useless (uninhabited) semantic types.  Since
+  semantic types are not declared to Bison (they are defined in the opaque
+  %union structure), it is %printer/%destructor directives about useless
+  types that trigger the warning:
+
+    %token <type1> term
+    %type  <type2> nterm
+    %printer    {} <type1> <type3>
+    %destructor {} <type2> <type4>
+    %%
+    nterm: term { $$ = $1; };
+
+    3.28-34: warning: type <type3> is used, but is not associated to any symbol
+    4.28-34: warning: type <type4> is used, but is not associated to any symbol
+
+*** Undefined but unused symbols
+
+  Bison used to raise an error for undefined symbols that are not used in
+  the grammar.  This is now only a warning.
+
+    %printer    {} symbol1
+    %destructor {} symbol2
+    %type <type>   symbol3
+    %%
+    exp: "a";
+
+*** Useless destructors or printers
+
+  Bison now warns about useless destructors or printers.  In the following
+  example, the printer for <type1>, and the destructor for <type2> are
+  useless: all symbols of <type1> (token1) already have a printer, and all
+  symbols of type <type2> (token2) already have a destructor.
+
+    %token <type1> token1
+           <type2> token2
+           <type3> token3
+           <type4> token4
+    %printer    {} token1 <type1> <type3>
+    %destructor {} token2 <type2> <type4>
+
+*** Conflicts
+
+  The warnings and error messages about shift/reduce and reduce/reduce
+  conflicts have been normalized.  For instance on the following foo.y file:
+
+    %glr-parser
+    %%
+    exp: exp '+' exp | '0' | '0';
+
+  compare the previous version of bison:
+
+    $ bison foo.y
+    foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+    $ bison -Werror foo.y
+    bison: warnings being treated as errors
+    foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+
+  with the new behavior:
+
+    $ bison foo.y
+    foo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+    foo.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+    $ bison -Werror foo.y
+    foo.y: error: 1 shift/reduce conflict [-Werror=conflicts-sr]
+    foo.y: error: 2 reduce/reduce conflicts [-Werror=conflicts-rr]
+
+  When %expect or %expect-rr is used, such as with bar.y:
+
+    %expect 0
+    %glr-parser
+    %%
+    exp: exp '+' exp | '0' | '0';
+
+  Former behavior:
+
+    $ bison bar.y
+    bar.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+    bar.y: expected 0 shift/reduce conflicts
+    bar.y: expected 0 reduce/reduce conflicts
+
+  New one:
+
+    $ bison bar.y
+    bar.y: error: shift/reduce conflicts: 1 found, 0 expected
+    bar.y: error: reduce/reduce conflicts: 2 found, 0 expected
+
+** Incompatibilities with POSIX Yacc
+
+  The 'yacc' category is no longer part of '-Wall', enable it explicitly
+  with '-Wyacc'.
+
+** Additional yylex/yyparse arguments
+
+  The new directive %param declares additional arguments to both yylex and
+  yyparse.  The %lex-param, %parse-param, and %param directives support one
+  or more arguments.  Instead of
+
+    %lex-param   {arg1_type *arg1}
+    %lex-param   {arg2_type *arg2}
+    %parse-param {arg1_type *arg1}
+    %parse-param {arg2_type *arg2}
+
+  one may now declare
+
+    %param {arg1_type *arg1} {arg2_type *arg2}
+
+** Types of values for %define variables
+
+  Bison used to make no difference between '%define foo bar' and '%define
+  foo "bar"'.  The former is now called a 'keyword value', and the latter a
+  'string value'.  A third kind was added: 'code values', such as '%define
+  foo {bar}'.
+
+  Keyword variables are used for fixed value sets, e.g.,
+
+    %define lr.type lalr
+
+  Code variables are used for value in the target language, e.g.,
+
+    %define api.value.type {struct semantic_type}
+
+  String variables are used remaining cases, e.g. file names.
+
+** Variable api.token.prefix
+
+  The variable api.token.prefix changes the way tokens are identified in
+  the generated files.  This is especially useful to avoid collisions
+  with identifiers in the target language.  For instance
+
+    %token FILE for ERROR
+    %define api.token.prefix {TOK_}
+    %%
+    start: FILE for ERROR;
+
+  will generate the definition of the symbols TOK_FILE, TOK_for, and
+  TOK_ERROR in the generated sources.  In particular, the scanner must
+  use these prefixed token names, although the grammar itself still
+  uses the short names (as in the sample rule given above).
+
+** Variable api.value.type
+
+  This new %define variable supersedes the #define macro YYSTYPE.  The use
+  of YYSTYPE is discouraged.  In particular, #defining YYSTYPE *and* either
+  using %union or %defining api.value.type results in undefined behavior.
+
+  Either define api.value.type, or use "%union":
+
+    %union
+    {
+      int ival;
+      char *sval;
+    }
+    %token <ival> INT "integer"
+    %token <sval> STRING "string"
+    %printer { fprintf (yyo, "%d", $$); } <ival>
+    %destructor { free ($$); } <sval>
+
+    /* In yylex().  */
+    yylval.ival = 42; return INT;
+    yylval.sval = "42"; return STRING;
+
+  The %define variable api.value.type supports both keyword and code values.
+
+  The keyword value 'union' means that the user provides genuine types, not
+  union member names such as "ival" and "sval" above (WARNING: will fail if
+  -y/--yacc/%yacc is enabled).
+
+    %define api.value.type union
+    %token <int> INT "integer"
+    %token <char *> STRING "string"
+    %printer { fprintf (yyo, "%d", $$); } <int>
+    %destructor { free ($$); } <char *>
+
+    /* In yylex().  */
+    yylval.INT = 42; return INT;
+    yylval.STRING = "42"; return STRING;
+
+  The keyword value variant is somewhat equivalent, but for C++ special
+  provision is made to allow classes to be used (more about this below).
+
+    %define api.value.type variant
+    %token <int> INT "integer"
+    %token <std::string> STRING "string"
+
+  Code values (in braces) denote user defined types.  This is where YYSTYPE
+  used to be used.
+
+    %code requires
+    {
+      struct my_value
+      {
+        enum
+        {
+          is_int, is_string
+        } kind;
+        union
+        {
+          int ival;
+          char *sval;
+        } u;
+      };
+    }
+    %define api.value.type {struct my_value}
+    %token <u.ival> INT "integer"
+    %token <u.sval> STRING "string"
+    %printer { fprintf (yyo, "%d", $$); } <u.ival>
+    %destructor { free ($$); } <u.sval>
+
+    /* In yylex().  */
+    yylval.u.ival = 42; return INT;
+    yylval.u.sval = "42"; return STRING;
+
+** Variable parse.error
+
+  This variable controls the verbosity of error messages.  The use of the
+  %error-verbose directive is deprecated in favor of "%define parse.error
+  verbose".
+
+** Renamed %define variables
+
+  The following variables have been renamed for consistency.  Backward
+  compatibility is ensured, but upgrading is recommended.
+
+    lr.default-reductions      -> lr.default-reduction
+    lr.keep-unreachable-states -> lr.keep-unreachable-state
+    namespace                  -> api.namespace
+    stype                      -> api.value.type
+
+** Semantic predicates
+
+  Contributed by Paul Hilfinger.
+
+  The new, experimental, semantic-predicate feature allows actions of the
+  form "%?{ BOOLEAN-EXPRESSION }", which cause syntax errors (as for
+  YYERROR) if the expression evaluates to 0, and are evaluated immediately
+  in GLR parsers, rather than being deferred.  The result is that they allow
+  the programmer to prune possible parses based on the values of run-time
+  expressions.
+
+** The directive %expect-rr is now an error in non GLR mode
+
+  It used to be an error only if used in non GLR mode, _and_ if there are
+  reduce/reduce conflicts.
+
+** Tokens are numbered in their order of appearance
+
+  Contributed by Valentin Tolmer.
+
+  With '%token A B', A had a number less than the one of B.  However,
+  precedence declarations used to generate a reversed order.  This is now
+  fixed, and introducing tokens with any of %token, %left, %right,
+  %precedence, or %nonassoc yields the same result.
+
+  When mixing declarations of tokens with a literal character (e.g., 'a') or
+  with an identifier (e.g., B) in a precedence declaration, Bison numbered
+  the literal characters first.  For example
+
+    %right A B 'c' 'd'
+
+  would lead to the tokens declared in this order: 'c' 'd' A B.  Again, the
+  input order is now preserved.
+
+  These changes were made so that one can remove useless precedence and
+  associativity declarations (i.e., map %nonassoc, %left or %right to
+  %precedence, or to %token) and get exactly the same output.
+
+** Useless precedence and associativity
+
+  Contributed by Valentin Tolmer.
+
+  When developing and maintaining a grammar, useless associativity and
+  precedence directives are common.  They can be a nuisance: new ambiguities
+  arising are sometimes masked because their conflicts are resolved due to
+  the extra precedence or associativity information.  Furthermore, it can
+  hinder the comprehension of a new grammar: one will wonder about the role
+  of a precedence, where in fact it is useless.  The following changes aim
+  at detecting and reporting these extra directives.
+
+*** Precedence warning category
+
+  A new category of warning, -Wprecedence, was introduced. It flags the
+  useless precedence and associativity directives.
+
+*** Useless associativity
+
+  Bison now warns about symbols with a declared associativity that is never
+  used to resolve conflicts.  In that case, using %precedence is sufficient;
+  the parsing tables will remain unchanged.  Solving these warnings may raise
+  useless precedence warnings, as the symbols no longer have associativity.
+  For example:
+
+    %left '+'
+    %left '*'
+    %%
+    exp:
+      "number"
+    | exp '+' "number"
+    | exp '*' exp
+    ;
+
+  will produce a
+
+    warning: useless associativity for '+', use %precedence [-Wprecedence]
+     %left '+'
+           ^^^
+
+*** Useless precedence
+
+  Bison now warns about symbols with a declared precedence and no declared
+  associativity (i.e., declared with %precedence), and whose precedence is
+  never used.  In that case, the symbol can be safely declared with %token
+  instead, without modifying the parsing tables.  For example:
+
+    %precedence '='
+    %%
+    exp: "var" '=' "number";
+
+  will produce a
+
+    warning: useless precedence for '=' [-Wprecedence]
+     %precedence '='
+                 ^^^
+
+*** Useless precedence and associativity
+
+  In case of both useless precedence and associativity, the issue is flagged
+  as follows:
+
+    %nonassoc '='
+    %%
+    exp: "var" '=' "number";
+
+  The warning is:
+
+    warning: useless precedence and associativity for '=' [-Wprecedence]
+     %nonassoc '='
+               ^^^
+
+** Empty rules
+
+  With help from Joel E. Denny and Gabriel Rassoul.
+
+  Empty rules (i.e., with an empty right-hand side) can now be explicitly
+  marked by the new %empty directive.  Using %empty on a non-empty rule is
+  an error.  The new -Wempty-rule warning reports empty rules without
+  %empty.  On the following grammar:
+
+    %%
+    s: a b c;
+    a: ;
+    b: %empty;
+    c: 'a' %empty;
+
+  bison reports:
+
+    3.4-5: warning: empty rule without %empty [-Wempty-rule]
+     a: {}
+        ^^
+    5.8-13: error: %empty on non-empty rule
+     c: 'a' %empty {};
+            ^^^^^^
+
+** Java skeleton improvements
+
+  The constants for token names were moved to the Lexer interface.  Also, it
+  is possible to add code to the parser's constructors using "%code init"
+  and "%define init_throws".
+  Contributed by Paolo Bonzini.
+
+  The Java skeleton now supports push parsing.
+  Contributed by Dennis Heimbigner.
+
+** C++ skeletons improvements
+
+*** The parser header is no longer mandatory (lalr1.cc, glr.cc)
+
+  Using %defines is now optional.  Without it, the needed support classes
+  are defined in the generated parser, instead of additional files (such as
+  location.hh, position.hh and stack.hh).
+
+*** Locations are no longer mandatory (lalr1.cc, glr.cc)
+
+  Both lalr1.cc and glr.cc no longer require %location.
+
+*** syntax_error exception (lalr1.cc)
+
+  The C++ parser features a syntax_error exception, which can be
+  thrown from the scanner or from user rules to raise syntax errors.
+  This facilitates reporting errors caught in sub-functions (e.g.,
+  rejecting too large integral literals from a conversion function
+  used by the scanner, or rejecting invalid combinations from a
+  factory invoked by the user actions).
+
+*** %define api.value.type variant
+
+  This is based on a submission from Michiel De Wilde.  With help
+  from Théophile Ranquet.
+
+  In this mode, complex C++ objects can be used as semantic values.  For
+  instance:
+
+    %token <::std::string> TEXT;
+    %token <int> NUMBER;
+    %token SEMICOLON ";"
+    %type <::std::string> item;
+    %type <::std::list<std::string>> list;
+    %%
+    result:
+      list  { std::cout << $1 << std::endl; }
+    ;
+
+    list:
+      %empty        { /* Generates an empty string list. */ }
+    | list item ";" { std::swap ($$, $1); $$.push_back ($2); }
+    ;
+
+    item:
+      TEXT    { std::swap ($$, $1); }
+    | NUMBER  { $$ = string_cast ($1); }
+    ;
+
+*** %define api.token.constructor
+
+  When variants are enabled, Bison can generate functions to build the
+  tokens.  This guarantees that the token type (e.g., NUMBER) is consistent
+  with the semantic value (e.g., int):
+
+    parser::symbol_type yylex ()
+    {
+      parser::location_type loc = ...;
+      ...
+      return parser::make_TEXT ("Hello, world!", loc);
+      ...
+      return parser::make_NUMBER (42, loc);
+      ...
+      return parser::make_SEMICOLON (loc);
+      ...
+    }
+
+*** C++ locations
+
+  There are operator- and operator-= for 'location'.  Negative line/column
+  increments can no longer underflow the resulting value.
+
+* Noteworthy changes in release 2.7.1 (2013-04-15) [stable]
+
+** Bug fixes
+
+*** Fix compiler attribute portability (yacc.c)
+
+  With locations enabled, __attribute__ was used unprotected.
+
+*** Fix some compiler warnings (lalr1.cc)
+
 * Noteworthy changes in release 2.7 (2012-12-12) [stable]
 
 ** Bug fixes
@@ -10,6 +1802,8 @@
 
 ** Diagnostics are improved
 
+  Contributed by Théophile Ranquet.
+
 *** Changes in the format of error messages
 
   This used to be the format of many error reports:
@@ -48,8 +1842,8 @@
      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
+  The default behavior for now is still not to display these unless
+  explicitly 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).
 
@@ -95,6 +1889,8 @@
 
 ** Graph improvements in DOT and XSLT
 
+  Contributed by Théophile Ranquet.
+
   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.
@@ -118,7 +1914,7 @@
   Although introduced more than four years ago, XML and Graphviz reports
   were not properly documented.
 
-  The translation of mid-rule actions is now described.
+  The translation of midrule actions is now described.
 
 * Noteworthy changes in release 2.6.5 (2012-11-07) [stable]
 
@@ -134,7 +1930,7 @@
 
   Other issues in the test suite have been addressed.
 
-  Nul characters are correctly displayed in error messages.
+  Null 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.
@@ -205,7 +2001,7 @@
 
 * Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
 
-  Bison no longer executes user-specified M4 code when processing a grammar.
+ Bison no longer executes user-specified M4 code when processing a grammar.
 
 ** Future Changes
 
@@ -243,7 +2039,7 @@
 
 * Noteworthy changes in release 2.6 (2012-07-19) [stable]
 
-** Future Changes
+** Future changes
 
   The next major release of Bison will drop support for the following
   deprecated features.  Please report disagreements to bug-bison@gnu.org.
@@ -505,6 +2301,7 @@
 
   These features are experimental in this version.  More user feedback
   will help to stabilize them.
+  Contributed by Alex Rozenman.
 
 ** IELR(1) and canonical LR(1):
 
@@ -535,7 +2332,9 @@
   These features are experimental.  More user feedback will help to
   stabilize them.
 
-** LAC (Lookahead Correction) for syntax error handling:
+** LAC (Lookahead Correction) for syntax error handling
+
+  Contributed by Joel E. Denny.
 
   Canonical LR, IELR, and LALR can suffer from a couple of problems
   upon encountering a syntax error.  First, the parser might perform
@@ -1021,6 +2820,7 @@
 
   The current Java interface is experimental and may evolve.  More user
   feedback will help to stabilize it.
+  Contributed by Paolo Bonzini.
 
 ** %language
 
@@ -1034,6 +2834,7 @@
   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.
+  Contributed by Wojciech Polak.
 
 ** The grammar file may now specify the name of the parser header file using
   %defines.  For example:
@@ -1109,16 +2910,16 @@
   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
+** Revised warning: unset or unused midrule values
 
-  Since Bison 2.2, Bison has warned about mid-rule values that are set but not
+  Since Bison 2.2, Bison has warned about midrule 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:
+  Now, Bison also warns about midrule values that are used but not set.  For
+  example, Bison warns about unset $$ in the midrule action in:
 
     exp: '1' { $1 = 1; } '+' exp { $$ = $2 + $4; };
 
@@ -1144,7 +2945,7 @@
 
   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
+  longer applies any %destructor to a midrule value if that midrule 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
@@ -1322,7 +3123,7 @@
         | exp "+" exp         { $$ = $1; (void) $3; }
         ;
 
-  If there are mid-rule actions, the warning is issued if no action
+  If there are midrule actions, the warning is issued if no action
   uses it.  The following triggers no warning: $1 and $3 are used.
 
      exp: exp { push ($1); } '+' exp { push ($3); sum (); };
@@ -1597,13 +3398,13 @@
 
         typed: ... untyped;
 
-** Values of mid-rule actions
+** Values of midrule actions
   The following code:
 
         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.
+  was incorrectly rejected: $1 is defined in the second midrule
+  action, and is equal to the $$ of the first midrule action.
 
 * Changes in version 1.50, 2002-10-04:
 
@@ -1739,7 +3540,7 @@
 
 ** 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:
+  the default action if the rule has a midrule action, such as in:
 
     %type <foo> bar
     %%
@@ -2010,7 +3811,7 @@
 
 -----
 
-Copyright (C) 1995-2012 Free Software Foundation, Inc.
+Copyright (C) 1995-2015, 2018-2019 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Parser Generator.
 
@@ -2044,10 +3845,24 @@
  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
+ LocalWords:  lang yyoutput dvi html ps POSIX lvalp llocp Wother nterm arg init
+ LocalWords:  TOK calc yyo fval Wconflicts parsers yystackp yyval yynerrs
+ LocalWords:  Théophile Ranquet Santet fno fnone stype associativity Tolmer
+ LocalWords:  Wprecedence Rassoul Wempty Paolo Bonzini parser's Michiel loc
+ LocalWords:  redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi
+ LocalWords:  pragmas noreturn untyped Rozenman unexpanded Wojciech Polak
+ LocalWords:  Alexandre MERCHANTABILITY yytype emplace ptr automove lvalues
+ LocalWords:  nonterminal yy args Pragma dereference yyformat rhs docdir bw
+ LocalWords:  Redeclarations rpcalc Autoconf YFLAGS Makefiles PROG DECL num
+ LocalWords:  Heimbigner AST src ast Makefile srcdir MinGW xxlex XXSTYPE
+ LocalWords:  XXLTYPE strictfp IDEs ffixit fdiagnostics parseable fixits
+ LocalWords:  Wdeprecated yytext Variadic variadic yyrhs yyphrs RCS README
+ LocalWords:  noexcept constexpr ispell american deprecations backend Teoh
+ LocalWords:  YYPRINT Mangold Bonzini's Wdangling exVal baz checkable gcc
+ LocalWords:  fsanitize Vogelsgesang lis redeclared stdint automata
 
 Local Variables:
+ispell-dictionary: "american"
 mode: outline
 fill-column: 76
 End:
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 94a9ed0..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- 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
-
-  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.
-
-                       TERMS AND CONDITIONS
-
-  0. 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.
-
-  1. 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.
-
-  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.
-
-  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 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.
-
-  13. 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.
-
-  14. 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.
-
-  15. 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.
-
-  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
-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.
-
-    <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
-    it under the terms of the 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/>.
-
-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:
-
-    <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, 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
-<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
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/NOTICE b/NOTICE
new file mode 120000
index 0000000..d24842f
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1 @@
+COPYING
\ No newline at end of file
diff --git a/PACKAGING b/PACKAGING
index c890eed..05489ba 100644
--- a/PACKAGING
+++ b/PACKAGING
@@ -36,7 +36,8 @@
 
 -----
 
-Copyright (C) 2002, 2005, 2009-2012 Free Software Foundation, Inc.
+Copyright (C) 2002, 2005, 2009-2015, 2018-2019 Free Software Foundation,
+Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/README b/README
index 04bf510..df2e763 100644
--- a/README
+++ b/README
@@ -1,53 +1,89 @@
 This package contains the GNU Bison parser generator.
 
-* Installation
-** Build
-See the file INSTALL for generic compilation and installation
-instructions.
+# Installation
+## Build from git
+Here are basic installation instructions for a repository checkout:
 
-Bison requires GNU m4 1.4.6 or later.  See:
+    $ git submodule update --init
+    $ ./bootstrap
 
-      ftp://ftp.gnu.org/gnu/m4/m4-1.4.6.tar.gz
+then proceed with the usual `configure && make` steps.
 
-** 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.
+The file README-hacking.md is about building, modifying and checking Bison.
 
-* 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".
+## Build from tarball
+See the file INSTALL for generic compilation and installation instructions.
 
-If you have questions about using Bison and the documentation does
-not answer them, please send mail to <help-bison@gnu.org>.
+Bison requires GNU m4 1.4.6 or later.  See
+https://ftp.gnu.org/gnu/m4/m4-1.4.6.tar.gz.
 
-* 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.
+## Colored diagnostics
+As an experimental feature, diagnostics are now colored, controlled by the
+`--color` and `--style` options.
 
-* 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.
+To use them, install the libtextstyle library before configuring Bison.  It
+is available from https://alpha.gnu.org/gnu/gettext/, for instance
+https://alpha.gnu.org/gnu/gettext/libtextstyle-0.8.tar.gz.
 
+The option --color supports the following arguments:
+- always, yes: Enable colors.
+- never, no: Disable colors.
+- auto, tty (default): Enable colors if the output device is a tty.
 
-Local Variables:
-mode: outline
-End:
+To customize the styles, create a CSS file, say `bison-bw.css`, similar to
 
------
+    /* bison-bw.css */
+    .warning   { }
+    .error     { font-weight: 800; text-decoration: underline; }
+    .note      { }
 
-Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2012 Free Software
-Foundation, Inc.
+then invoke bison with `--style=bison-bw.css`, or set the `BISON_STYLE`
+environment variable to `bison-bw.css`.
 
-This file is part of Bison, the GNU Compiler Compiler.
+## Relocatability
+If you pass `--enable-relocatable` to `configure`, Bison is relocatable.
+
+A relocatable program can be moved or copied to a different location on the
+file system.  It can also be used through mount points for network sharing.
+It is possible to make symlinks to the installed and moved programs, and
+invoke them through the symlink.
+
+See "Enabling Relocatability" in the documentation.
+
+## Internationalization
+Bison supports two catalogs: 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.
+
+# 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>.  Be sure to 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.
+
+<!--
+
+Copyright (C) 1992, 1998-1999, 2003-2005, 2008-2015, 2018-2019 Free
+Software Foundation, Inc.
+
+This file is part of GNU 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
@@ -61,3 +97,14 @@
 
 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: markdown
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+LocalWords:  parsers ngettext Texinfo pdf html YYYY ZZZZ ispell american
+LocalWords:  MERCHANTABILITY
+
+-->
diff --git a/README-release b/README-release
deleted file mode 100644
index 4d9423a..0000000
--- a/README-release
+++ /dev/null
@@ -1,100 +0,0 @@
-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
deleted file mode 100644
index 01602e1..0000000
--- a/README.android
+++ /dev/null
@@ -1,14 +0,0 @@
-
-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/README.version b/README.version
deleted file mode 100644
index df18869..0000000
--- a/README.version
+++ /dev/null
@@ -1,3 +0,0 @@
-URL: http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
-Version: 2.7
-BugComponent: 99142
diff --git a/THANKS b/THANKS
index 9a64012..909192e 100644
--- a/THANKS
+++ b/THANKS
@@ -1,93 +1,142 @@
 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
+Aaro Koskinen             aaro.koskinen@iki.fi
+Аскар Сафин               safinaskar@mail.ru
+Adam Sampson              ats@offog.org
 Airy Andre                Airy.Andre@edf.fr
 Akim Demaille             akim@lrde.epita.fr
 Albert Chin-A-Young       china@thewrittenword.com
 Alexander Belopolsky      alexb@rentec.com
 Alexandre Duret-Lutz      adl@lrde.epita.fr
+Andre da Costa Barros     andre.cbarros@yahoo.com
+Andreas Damm              adamm@onica.com
 Andreas Schwab            schwab@suse.de
 Andrew Suffield           asuffield@users.sourceforge.net
 Angelo Borsotti           angelo.borsotti@gmail.com
 Anthony Heading           ajrh@ajrh.net
+Antonio Silva Correia     amsilvacorreia@hotmail.com
 Arnold Robbins            arnold@skeeve.com
 Art Haas                  ahaas@neosoft.com
+Askar Safin               safinaskar@mail.ru
+Balázs Scheidler          balazs.scheidler@oneidentity.com
 Baron Schwartz            baron@sequent.org
 Ben Pfaff                 blp@cs.stanford.edu
 Benoit Perrot             benoit.perrot@epita.fr
+Bernd Edlinger            bernd.edlinger@hotmail.de
 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
+Brooks Moses              bmoses@google.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
+Clément Démoulins         demoulins@lrde.epita.fr
+Colin Daley               colin.daley@outlook.com
 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 Frużyński          daniel@poradnik-webmastera.com
+Daniel Galloway           dg1751@att.com
 Daniel Hagerty            hag@gnu.org
+David Barto               david.barto@sparqlcity.com
 David J. MacKenzie        djm@gnu.org
 David Kastrup             dak@gnu.org
+David Michael             fedora.dm0@gmail.com
+Dengke Du                 dengke.du@windriver.com
+Denis Excoffier           gcc@Denis-Excoffier.org
 Dennis Clarke             dclarke@blastwave.org
+Derek Clegg               derek@me.com
 Derek M. Jones            derek@knosof.co.uk
 Di-an Jan                 dianj@freeshell.org
 Dick Streefland           dick.streefland@altium.nl
 Didier Godefroy           dg@ulysium.net
+Efi Fogel                 efifogel@gmail.com
 Enrico Scholz             enrico.scholz@informatik.tu-chemnitz.de
 Eric Blake                ebb9@byu.net
+Eric S. Raymond           esr@thyrsus.com
+Étienne Renault           renault@lrde.epita.fr
 Evgeny Stambulchik        fnevgeny@plasma-gate.weizmann.ac.il
 Fabrice Bauzac            noon@cote-dazur.com
+Ferdinand Thiessen        ferdinand@fthiessen.de
 Florian Krohm             florian@edamail.fishkill.ibm.com
 Frank Heckenbach          frank@g-n-u.de
 Frans Englich             frans.englich@telia.com
+Gabriel Rassoul           gabriel.rassoul@epita.fr
+Gary L Peskin             garyp@firstech.com
+Gavin Smith               gavinsmith0123@gmail.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
+Hans Åberg                haberg-1@telia.com
+Horst Von Brand           vonbrand@inf.utfsm.cl
 Jan Nieuwenhuizen         janneke@gnu.org
+Jannick                   thirdedition@gmx.net
 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             joeldenny@joeldenny.org
 Johan van Selst           johans@stack.nl
+John Horigan              john@glyphic.com
 Jonathan Fabrizio         jonathan.fabrizio@lrde.epita.fr
 Jonathan Nieder           jrnieder@gmail.com
+Josh Soref                jsoref@gmail.com
 Juan Manuel Guerrero      juan.guerrero@gmx.de
+Karl Berry                karl@freefriends.org
 Kees Zeelenberg           kzlg@users.sourceforge.net
 Keith Browne              kbrowne@legato.com
+Ken Moffat                zarniwhoop@ntlworld.com
+Kiyoshi Kanazawa          yoi_no_myoujou@yahoo.co.jp
+Lars Maier                lars.maier@tefax.net
+László Várady             laszlo.varady93@gmail.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
+Marc Schönefeld           marc.schoenefeld@gmx.org
 Mark Boyall               wolfeinstein@gmail.com
 Martin Jacobs             martin.jacobs@arcor.de
 Martin Mokrejs            mmokrejs@natur.cuni.cz
 Martin Nylin              martin.nylin@linuxmail.org
 Matt Kraai                kraai@alumni.cmu.edu
 Matt Rosing               rosing@peakfive.com
+Maxim Prohorenko          Maxim.Prohorenko@gmail.com
+Michael Catanzaro         mcatanzaro@gnome.org
+Michael Felt              mamfelt@gmail.com
 Michael Hayes             m.hayes@elec.canterbury.ac.nz
 Michael Raskin            7c6f434c@mail.ru
+Michel d'Hooge            michel.dhooge@gmail.com
+Michiel De Wilde          mdewilde.agilent@gmail.com
 Mickael Labau             labau_m@epita.fr
 Mike Castle               dalgoda@ix.netcom.com
+Mike Frysinger            vapier@gentoo.org
+Mike Sullivan             Mike.sullivan@Oracle.COM
+Nate Guerin               nathan.guerin@riseup.net
 Neil Booth                NeilB@earthling.net
 Nelson H. F. Beebe        beebe@math.utah.edu
+neok m4700                neok.m4700@gmail.com
+Nick Bowler               nbowler@elliptictech.com
+Nicolas Bedon             nicolas.bedon@univ-rouen.fr
 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
+Oliver Mangold            o.mangold@gmail.com
 Paolo Bonzini             bonzini@gnu.org
+Paolo Simone Gasparello   djgaspa@gmail.com
 Pascal Bart               pascal.bart@epita.fr
+Patrice Dumas             pertusus@free.fr
 Paul Eggert               eggert@cs.ucla.edu
 Paul Hilfinger            Hilfinger@CS.Berkeley.EDU
 Per Allansson             per@appgate.com
@@ -95,40 +144,70 @@
 Peter Fales               psfales@lucent.com
 Peter Hamorsky            hamo@upjs.sk
 Peter Simons              simons@cryp.to
+Petr Machata              pmachata@redhat.com
+Pho                       pho@cielonegro.org
 Piotr Gackiewicz          gacek@intertel.com.pl
+Piotr Marcińczyk          piomar123@gmail.com
+Quentin Hocquet           hocquet@gostai.com
 Quoc Peyrot               chojin@lrde.epita.fr
 R Blake                   blakers@mac.com
 Raja R Harinath           harinath@cs.umn.edu
 Ralf Wildenhues           Ralf.Wildenhues@gmx.de
+Rich Wilson               richaw@gmail.com
 Richard Stallman          rms@gnu.org
+Rici Lake                 ricilake@gmail.com
+Rob Conde                 rob.conde@ai-solutions.com
 Rob Vermaas               rob.vermaas@gmail.com
 Robert Anisko             anisko_r@epita.fr
+Robert Yang               liezhi.yang@windriver.com
+Roland Levillain          roland@lrde.epita.fr
 Satya Kiran Popuri        satyakiran@gmail.com
 Sebastian Setzer          sebastian.setzer.ext@siemens.com
 Sebastien Fricker         sebastien.fricker@gmail.com
+Sébastien Villemot        sebastien@debian.org
 Sergei Steshenko          sergstesh@yahoo.com
 Shura                     debil_urod@ngs.ru
+Simon Sobisch             simonsobisch@web.de
 Stefano Lattarini         stefano.lattarini@gmail.com
+Stephen Cameron           stephenmcameron@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
+Thomas Jahns              jahns@dkrz.de
+Thomas Petazzoni          thomas.petazzoni@bootlin.com
 Tim Josling               tej@melbpc.org.au
 Tim Landscheidt           tim@tim-landscheidt.de
 Tim Van Holder            tim.van.holder@pandora.be
+Tobias Frost              tobi@debian.org
+Todd Freed                todd.freed@gmail.com
+Tom Kramer                kramer@nist.gov
 Tom Lane                  tgl@sss.pgh.pa.us
 Tom Tromey                tromey@cygnus.com
+Tomasz Kłoczko            kloczko.tomasz@gmail.com
 Tommy Nordgren            tommy.nordgren@chello.se
 Troy A. Johnson           troyj@ecn.purdue.edu
 Tys Lefering              gccbison@gmail.com
+Uxio Prego                uxio@uma.es
+Valentin Tolmer           nitnelave1@gmail.com
+wcventure                 wcventure@126.com
+Victor Khomenko           victor.khomenko@newcastle.ac.uk
+Victor Zverovich          victor.zverovich@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
+Wojciech Polak            polak@gnu.org
 Wolfgang S. Kechel        wolfgang.kechel@prs.de
+Wolfgang Thaller          wolfgang.thaller@gmx.net
 Wolfram Wagner            ww@mpi-sb.mpg.de
 Wwp                       subscript@free.fr
+xolodho                   xolodho@gmail.com
+Yuichiro Kaneko           spiketeika@gmail.com
 Zack Weinberg             zack@codesourcery.com
+江 祖铭                    jjzuming@outlook.com
+長田偉伸                   cbh34680@iret.co.jp
+马俊                       majun123@whu.edu.cn
 
 Many people are not named here because we lost track of them.  We
 thank them!  Please, help us keeping this list up to date.
@@ -140,7 +219,7 @@
 
 -----
 
-Copyright (C) 2000-2012 Free Software Foundation, Inc.
+Copyright (C) 2000-2015, 2018-2019 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Parser Generator.
 
diff --git a/TODO b/TODO
index 978b5c6..a6e5d04 100644
--- a/TODO
+++ b/TODO
@@ -1,26 +1,287 @@
+* Bison 3.6
+** doc
+I feel its ugly to use the GNU style to declare functions in the doc.  It
+generates tons of white space in the page, and may contribute to bad page
+breaks.
+
+Also, we seem to teach YYPRINT very early on, although it should be
+considered deprecated: %printer is superior.
+
+** improve syntax errors (UTF-8, internationalization)
+Bison depends on the current locale.  For instance:
+
+%define parse.error verbose
+%code top {
+ #include <stdio.h>
+ #include <stdlib.h>
+ void yyerror(const char* msg) { fprintf(stderr, "%s\n", msg); }
+ int yylex() { return 0; }
+}
+%%
+exp: "↦" | "🎅🐃" | '\n'
+%%
+int main() { return yyparse(); }
+
+gives different results with/without LC_ALL=C.
+
+$ LC_ALL=C /opt/local/bin/bison /tmp/mangle.y -o ascii.c
+$ /opt/local/bin/bison /tmp/mangle.y -o utf8.c
+$ diff -u ascii.c utf8.c -I#line
+--- ascii.c     2019-01-12 08:15:35.878010093 +0100
++++ utf8.c      2019-01-12 08:15:38.856495929 +0100
+@@ -415,9 +415,8 @@
+    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+-  "$end", "error", "$undefined", "\"\\342\\206\\246\"",
+-  "\"\\360\\237\\216\\205\\360\\237\\220\\203\"", "'\\n'", "$accept",
+-  "exp", YY_NULLPTR
++  "$end", "error", "$undefined", "\"↦\"", "\"🎅🐃\"", "'\\n'",
++  "$accept", "exp", YY_NULLPTR
+ };
+ #endif
+
+$ gcc ascii.c -o ascii && ./ascii
+syntax error, unexpected $end, expecting "\342\206\246" or "\360\237\216\205\360\237\220\203" or '\n'
+$ gcc utf8.c -o utf8 && ./utf8
+syntax error, unexpected $end, expecting ↦ or 🎅🐃 or '\n'
+
+
+While at it, we should stop using "$end" by default, in favor of "end of
+file", or "end of input", whatever.  See how lalr1.java does that.
+
+** consistency
+token vs terminal, variable vs non terminal.
+
+** Stop indentation in diagnostics
+Before Bison 2.7, we printed "flatly" the dependencies in long diagnostics:
+
+    input.y:2.7-12: %type redeclaration for exp
+    input.y:1.7-12: previous declaration
+
+In Bison 2.7, we indented them
+
+    input.y:2.7-12: error: %type redeclaration for exp
+    input.y:1.7-12:     previous declaration
+
+Later we quoted the source in the diagnostics, and today we have:
+
+    /tmp/foo.y:1.12-14: warning: symbol FOO redeclared [-Wother]
+        1 | %token FOO FOO
+          |            ^~~
+    /tmp/foo.y:1.8-10:      previous declaration
+        1 | %token FOO FOO
+          |        ^~~
+
+The indentation is no longer helping.  We should probably get rid of it, or
+maybe keep it only when -fno-caret. GCC displays this as a "note":
+
+    $ g++-mp-9 -Wall /tmp/foo.c -c
+    /tmp/foo.c:1:10: error: redefinition of 'int foo'
+        1 | int foo, foo;
+          |          ^~~
+    /tmp/foo.c:1:5: note: 'int foo' previously declared here
+        1 | int foo, foo;
+          |     ^~~
+
+Likewise for Clang, contrary to what I believed (because "note:" is written
+in black, so it doesn't show in my terminal :-)
+
+    $ clang++-mp-8.0 -Wall /tmp/foo.c -c
+    clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
+    /tmp/foo.c:1:10: error: redefinition of 'foo'
+    int foo, foo;
+             ^
+    /tmp/foo.c:1:5: note: previous definition is here
+    int foo, foo;
+        ^
+    1 error generated.
+
+See also the item "Complaint submessage indentation" below.
+
+** api.token.raw
+Maybe we should exhibit the YYUNDEFTOK token.  It could also be assigned a
+semantic value so that yyerror could be used to report invalid lexemes.
+See also the item "$undefined" below.
+
+** C++
+Move to int everywhere instead of unsigned?  stack_size, etc.  The parser
+itself uses int (for yylen for instance), yet stack is based on size_t.
+
+Maybe locations should also move to ints.
+
+Paul Eggert already covered most of this.  But before publishing these
+changes, we need to ask our C++ users if they agree with that change, or if
+we need some migration path.  Could be a %define variable, or simply
+%require "3.5".
+
+* Bison 3.7
+** Unit rules / Injection rules (Akim Demaille)
+Maybe we could expand unit rules (or "injections", see
+https://homepages.cwi.nl/~daybuild/daily-books/syntax/2-sdf/sdf.html), i.e.,
+transform
+
+        exp: arith | bool;
+        arith: exp '+' exp;
+        bool: exp '&' exp;
+
+into
+
+        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 parsing: Theory and
+Practice' is impossible to find, but according to 'Parsing Techniques: a
+Practical Guide', it includes information about this issue.  Does anybody
+have it?
+
+** clean up (Akim Demaille)
+Do not work on these items now, as I (Akim) have branches with a lot of
+changes in this area (hitting several files), and no desire to have to fix
+conflicts.  Addressing these items will happen after my branches have been
+merged.
+
+*** lalr.c
+Introduce a goto struct, and use it in place of from_state/to_state.
+Rename states1 as path, length as pathlen.
+Introduce inline functions for things such as nullable[*rp - ntokens]
+where we need to map from symbol number to nterm number.
+
+There are probably a significant part of the relations management that
+should be migrated on top of a bitsetv.
+
+*** closure
+It should probably take a "state*" instead of two arguments.
+
+*** traces
+The "automaton" and "set" categories are not so useful.  We should probably
+introduce lr(0) and lalr, just the way we have ielr categories.  The
+"closure" function is too verbose, it should probably have its own category.
+
+"set" can still be used for summariring the important sets.  That would make
+tests easy to maintain.
+
+*** complain.*
+Rename these guys as "diagnostics.*" (or "diagnose.*"), since that's the
+name they have in gcc, clang, etc.  Likewise for the complain_* series of
+functions.
+
+*** ritem
+states/nstates, rules/nrules, ..., ritem/nritems
+Fix the latter.
+
+* Modernization
+Fix data/skeletons/yacc.c so that it defines YYPTRDIFF_T properly for modern
+and older C++ compilers.  Currently the code defaults to defining it to
+'long' for non-GCC compilers, but it should use the proper C++ magic to
+define it to the same type as the C ptrdiff_t type.
+
+* Completion
+Several features are not available in all the backends.
+
+- push parsers: glr.cc, lalr1.cc
+- ielr: C++ and Java
+- glr: Java
+- token constructors: Java and C
+
+* Bugs
+** Autotest has quotation issues
+tests/input.at:1730:AT_SETUP([%define errors])
+
+->
+
+$ ./tests/testsuite -l | grep errors | sed q
+  38: input.at:1730      errors
+
 * Short term
+** Get rid of YYPRINT and b4_toknum
+Besides yytoknum is wrong when api.token.raw is defined.
+
+** Better design for diagnostics
+The current implementation of diagnostics is adhoc, it grew organically.  It
+works as a series of calls to several functions, with dependency of the
+latter calls on the former.  For instance:
+
+      complain (&sym->location,
+                sym->content->status == needed ? complaint : Wother,
+                _("symbol %s is used, but is not defined as a token"
+                  " and has no rules; did you mean %s?"),
+                quote_n (0, sym->tag),
+                quote_n (1, best->tag));
+      if (feature_flag & feature_caret)
+        location_caret_suggestion (sym->location, best->tag, stderr);
+
+We should rewrite this in a more FP way:
+
+1. build a rich structure that denotes the (complete) diagnostic.
+   "Complete" in the sense that it also contains the suggestions, the list
+   of possible matches, etc.
+
+2. send this to the pretty-printing routine.  The diagnostic structure
+   should be sufficient so that we can generate all the 'format' of
+   diagnostics, including the fixits.
+
+If properly done, this diagnostic module can be detached from Bison and be
+put in gnulib.  It could be used, for instance, for errors caught by
+xgettext.
+
+There's certainly already something alike in GCC.  At least that's the
+impression I get from reading the "-fdiagnostics-format=FORMAT" part of this
+page:
+
+https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html
+
 ** 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.
+graphviz. 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.
 
-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
+An other consideration worth noting is that print_graph.c (correct me if I
+am wrong) should contain generic functions, whereas graphviz.c and other
+potential files should contain just the specific code for that output
+format. It will probably prove difficult to tell if the implementation is
+actually generic whilst only having support for a single format, but it
+would be nice to keep stuff a bit tidier: right now, the construction of the
+bitset used to show reductions is in the graphviz-specific code, and on the
+opposite side we have some use of \l, which is graphviz-specific, in what
+should be generic code.
 
-Also, the underscore in print_graph.[ch] isn't very fitting considering
-the dashes in the other filenames.
+Little effort seems to have been given to factoring these files and their
+rint{,-xml} counterpart. We would very much like to re-use the pretty format
+of states from .output for the graphs, etc.
 
-** Variable names.
-What should we name `variant' and `lex_symbol'?
+Since graphviz dies on medium-to-big grammars, maybe consider an other tool?
 
-** 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
+** push-parser
+Check it too when checking the different kinds of parsers.  And be
+sure to check that the initial-action is performed once per parsing.
 
-** Update the documentation on gnu.org
+** m4 names
+b4_shared_declarations is no longer what it is.  Make it
+b4_parser_declaration for instance.
+
+** yychar in lalr1.cc
+There is a large difference bw maint and master on the handling of
+yychar (which was removed in lalr1.cc).  See what needs to be
+back-ported.
+
+
+    /* 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.  */
+
+    /* Make sure we have latest lookahead translation.  See comments at
+       user semantic actions for why this is necessary.  */
+    yytoken = yytranslate_ (yychar);
+
 
 ** Get rid of fake #lines [Bison: ...]
 Possibly as simple as checking whether the column number is nonnegative.
@@ -45,16 +306,13 @@
 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?
+** Rewrite glr.cc in C++ (Valentin Tolmer)
+As a matter of fact, it would be very interesting to see how much we can
+share between lalr1.cc and glr.cc.  Most of the skeletons should be common.
+It would be a very nice source of inspiration for the other languages.
+
+Valentin Tolmer is working on this.
 
 ** YYERRCODE
 Defined to 256, but not used, not documented.  Probably the token
@@ -82,7 +340,7 @@
 numbered 257 for yylex, and 2 internal.  Both appear for instance in
 toknum:
 
-  const unsigned short int
+  const unsigned short
   parser::yytoken_number_[] =
   {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -101,9 +359,6 @@
   "\"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:
 
@@ -121,12 +376,6 @@
 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
@@ -134,10 +383,21 @@
 management is performed once instead of three times).  I suggest that
 we do the same in yacc.c.
 
+(Some time later): it's also very nice to have three stacks: it's more dense
+as we don't lose bits to padding.  For instance the typical stack for states
+will use 8 bits, while it is likely to consume 32 bits in a struct.
+
+We need trustworthy benchmarks for Bison, for all our backends.  Akim has a
+few things scattered around; we need to put them in the repo, and make them
+more useful.
+
 ** yysyntax_error
 The code bw glr.c and yacc.c is really alike, we can certainly factor
 some parts.
 
+This should be worked on when we also address the expected improvements for
+error generation (e.g., i18n).
+
 
 * Report
 
@@ -148,20 +408,20 @@
 information about the variables (I'm not sure for instance we even
 specify what LR variant was used).
 
-**  GLR
+** GLR
 How would Paul like to display the conflicted actions?  In particular,
 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.
 
 ** Disabled Reductions
-See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
+See 'tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
 what we want to do.
 
 ** Documentation
 Extend with error productions.  The hard part will probably be finding
 the right rule so that a single state does not exhibit too many yet
-undocumented ``features''.  Maybe an empty action ought to be
+undocumented ''features''.  Maybe an empty action ought to be
 presented too.  Shall we try to make a single grammar with all these
 features, or should we have several very small grammars?
 
@@ -170,11 +430,62 @@
 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.
-
+** Statically check for potential ambiguities in GLR grammars
+See <http://www.lsv.fr/~schmitz/pub/expamb.pdf> for an approach.
+An Experimental Ambiguity Detection Tool ∗ Sylvain Schmitz
+LORIA, INRIA Nancy - Grand Est, Nancy, France
 
 * Extensions
+** Multiple start symbols
+Would be very useful when parsing closely related languages.  The idea is to
+declare several start symbols, for instance
+
+    %start stmt expr
+    %%
+    stmt: ...
+    expr: ...
+
+and to generate parse(), parse_stmt() and parse_expr().  Technically, the
+above grammar would be transformed into
+
+   %start yy_start
+   %token YY_START_STMT YY_START_EXPR
+   %%
+   yy_start: YY_START_STMT stmt | YY_START_EXPR expr
+
+so that there are no new conflicts in the grammar (as would undoubtedly
+happen with yy_start: stmt | expr).  Then adjust the skeletons so that this
+initial token (YY_START_STMT, YY_START_EXPR) be shifted first in the
+corresponding parse function.
+
+** Better error messages
+The users are not provided with enough tools to forge their error messages.
+See for instance "Is there an option to change the message produced by
+YYERROR_VERBOSE?" by Simon Sobisch, on bison-help.
+
+See also
+https://www.cs.tufts.edu/~nr/cs257/archive/clinton-jefferey/lr-error-messages.pdf
+and https://research.swtch.com/yyerror.
+
+** %include
+This is a popular demand.  We already made many changes in the parser that
+should make this reasonably easy to implement.
+
+Bruce Mardle <marblypup@yahoo.co.uk>
+https://lists.gnu.org/archive/html/bison-patches/2015-09/msg00000.html
+
+However, there are many other things to do before having such a feature,
+because I don't want a % equivalent to #include (which we all learned to
+hate).  I want something that builds "modules" of grammars, and assembles
+them together, paying attention to keep separate bits separated, in pseudo
+name spaces.
+
+** Push parsers
+There is demand for push parsers in Java and C++.  And GLR I guess.
+
+** Generate code instead of tables
+This is certainly quite a lot of work.  See
+http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.4539.
 
 ** $-1
 We should find a means to provide an access to values deep in the
@@ -195,6 +506,10 @@
 part of %if.  Akim Demaille thinks it should be in the parser, so as
 to avoid falling into another CPP mistake.
 
+(Later): I'm sure there's actually good case for this.  People who need that
+feature can use m4/cpp on top of Bison.  I don't think it is worth the
+trouble in Bison itself.
+
 ** XML Output
 There are couple of available extensions of Bison targeting some XML
 output.  Some day we should consider including them.  One issue is
@@ -210,30 +525,12 @@
 XML output for GNU Bison
    http://yaxx.sourceforge.net/
 
-* Unit rules
-Maybe we could expand unit rules, i.e., transform
+** Counterexample generation
+https://lists.gnu.org/archive/html/bug-bison/2016-06/msg00000.html
+http://www.cs.cornell.edu/andru/papers/cupex/
 
-        exp: arith | bool;
-        arith: exp '+' exp;
-        bool: exp '&' exp;
-
-into
-
-        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
-parsing: Theory and Practice' is impossible to find, but according to
-`Parsing Techniques: a Practical Guide', it includes information about
-this issue.  Does anybody have it?
-
-
-
-* Documentation
-
-** History/Bibliography
-Some history of Bison and some bibliography would be most welcome.
-Are there any Texinfo standards for bibliography?
+Andrew Myers and Vincent Imbimbo are working on this item, see
+https://github.com/akimd/bison/issues/12
 
 * Coding system independence
 Paul notes:
@@ -252,10 +549,7 @@
         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 ?
+* Broken options?
 ** %token-table
 ** Skeleton strategy
 Must we keep %token-table?
@@ -267,10 +561,7 @@
 makes it impossible to have modular precedence information.  We should
 move to partial orders (sounds like series/parallel orders to me).
 
-** RR conflicts
-See if we can use precedence between rules to solve RR conflicts.  See
-what POSIX says.
-
+This is a prerequisite for modules.
 
 * $undefined
 From Hans:
@@ -281,20 +572,6 @@
 Suggest: Change the name $undefined to undefined; looks better in outputs.
 
 
-* Default Action
-From Hans:
-- For use with my C++ parser, I transported the "switch (yyn)" statement
-that Bison writes to the bison.simple skeleton file. This way, I can remove
-the current default rule $$ = $1 implementation, which causes a double
-assignment to $$ which may not be OK under C++, replacing it with a
-"default:" part within the switch statement.
-
-Note that the default rule $$ = $1, when typed, is perfectly OK under C,
-but in the C++ implementation I made, this rule is different from
-$<type_name>$ = $<type_name>1. I therefore think that one should implement
-a Bison option where every typed default rule is explicitly written out
-(same typed ruled can of course be grouped together).
-
 * Pre and post actions.
 From: Florian Krohm <florian@edamail.fishkill.ibm.com>
 Subject: YYACT_EPILOGUE
@@ -326,32 +603,17 @@
 * 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
+fill-column: 76
 End:
 
 -----
 
-Copyright (C) 2001-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+Copyright (C) 2001-2004, 2006, 2008-2015, 2018-2019 Free Software
+Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/aclocal.m4 b/aclocal.m4
index d183426..01802fc 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.12.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -11,6 +11,7 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
@@ -19,7 +20,7 @@
 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.
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -31,10 +32,10 @@
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.12'
+[am__api_version='1.16'
 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], [],
+m4_if([$1], [1.16.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -50,14 +51,14 @@
 # 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.12.5])dnl
+[AM_AUTOMAKE_VERSION([1.16.1])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-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -102,15 +103,14 @@
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -332,63 +332,54 @@
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 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_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf 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
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  AS_CASE([$CONFIG_FILES],
+          [*\'*], [eval set x "$CONFIG_FILES"],
+          [*], [set x $CONFIG_FILES])
   shift
-  for mf
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_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
+    am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: 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
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`AS_DIRNAME(["$am_mf"])`
+    am_filepart=`AS_BASENAME(["$am_mf"])`
+    AM_RUN_LOG([cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles]) || am_rc=$?
   done
+  if test $am_rc -ne 0; then
+    AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).])
+  fi
+  AS_UNSET([am_dirpart])
+  AS_UNSET([am_filepart])
+  AS_UNSET([am_mf])
+  AS_UNSET([am_rc])
+  rm -f conftest-deps.mk
 }
 ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
 
@@ -397,18 +388,17 @@
 # -----------------------------
 # 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
-# need in order to bootstrap the dependency handling code.
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
      [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
+     [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -417,6 +407,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.
 
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
@@ -429,7 +425,7 @@
 # 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.62])dnl
+[AC_PREREQ([2.65])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
@@ -459,8 +455,7 @@
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
 [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])
+             [$0: two- and three-arguments forms are deprecated.])
 m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
@@ -490,11 +485,11 @@
 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>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://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.
+# We need awk for the "check" target (and possibly the TAP driver).  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
@@ -514,21 +509,63 @@
 		  [_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],
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
 		  [_AM_DEPENDENCIES([OBJCXX])],
 		  [m4_define([AC_PROG_OBJCXX],
-			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
+			     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_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
@@ -537,7 +574,6 @@
 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
 # that is generated.  The stamp files are numbered to have different names.
@@ -559,7 +595,7 @@
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -570,7 +606,7 @@
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -580,7 +616,7 @@
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -601,7 +637,7 @@
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -609,81 +645,42 @@
 
 # AM_MAKE_INCLUDE()
 # -----------------
-# Check to see how make treats includes.
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
 AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
 am__doit:
-	@echo this is the am__doit target
+	@echo this is the am__doit target >confinc.out
 .PHONY: am__doit
 END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
 am__include="#"
 am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# 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
-   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])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# 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.
-
-# 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])])
-])
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+  AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+      ['0:this is the am__doit target'],
+      [AS_CASE([$s],
+          [BSD], [am__include='.include' am__quote='"'],
+          [am__include='include' am__quote=''])])
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -698,8 +695,8 @@
 
 # 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.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
@@ -712,48 +709,17 @@
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# 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.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for 'mkdir -p'.
-AC_DEFUN([AM_PROG_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-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -782,9 +748,73 @@
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
+# Copyright (C) 1999-2018 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_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != 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
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2018 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_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -865,7 +895,7 @@
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -925,7 +955,7 @@
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -953,7 +983,7 @@
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -972,7 +1002,7 @@
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -991,98 +1021,140 @@
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
+#
 AC_DEFUN([_AM_PROG_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='$${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])
-# Loop over all known methods to create a tar archive until one works.
+
+# We'll loop over all known methods to create a tar archive until one works.
 _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 '-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
 
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
 
-  # tar/untar a dummy directory, and stop if the command works
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
+
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
   rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
 
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([m4/00gnulib.m4])
+m4_include([m4/__inline.m4])
+m4_include([m4/absolute-header.m4])
 m4_include([m4/alloca.m4])
 m4_include([m4/asm-underscore.m4])
 m4_include([m4/assert.m4])
+m4_include([m4/bison-check-compiler-flag.m4])
+m4_include([m4/bison-cxx-std.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/canonicalize.m4])
+m4_include([m4/clock_time.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/double-slash-root.m4])
 m4_include([m4/dup2.m4])
+m4_include([m4/eealloc.m4])
 m4_include([m4/environ.m4])
 m4_include([m4/errno_h.m4])
 m4_include([m4/error.m4])
@@ -1105,14 +1177,18 @@
 m4_include([m4/frexpl.m4])
 m4_include([m4/fseterr.m4])
 m4_include([m4/fstat.m4])
-m4_include([m4/getdelim.m4])
+m4_include([m4/fsync.m4])
 m4_include([m4/getdtablesize.m4])
-m4_include([m4/getline.m4])
+m4_include([m4/gethrxtime.m4])
 m4_include([m4/getopt.m4])
+m4_include([m4/getprogname.m4])
+m4_include([m4/getrusage.m4])
 m4_include([m4/gettext.m4])
-m4_include([m4/glibc21.m4])
+m4_include([m4/gettime.m4])
+m4_include([m4/gettimeofday.m4])
 m4_include([m4/gnulib-common.m4])
 m4_include([m4/gnulib-comp.m4])
+m4_include([m4/host-cpu-c-abi.m4])
 m4_include([m4/iconv.m4])
 m4_include([m4/include_next.m4])
 m4_include([m4/intlmacosx.m4])
@@ -1127,29 +1203,38 @@
 m4_include([m4/iswblank.m4])
 m4_include([m4/javacomp.m4])
 m4_include([m4/javaexec.m4])
+m4_include([m4/jm-winsz1.m4])
+m4_include([m4/jm-winsz2.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.m4])
+m4_include([m4/libtextstyle-optional.m4])
+m4_include([m4/libtextstyle.m4])
 m4_include([m4/libunistring-base.m4])
+m4_include([m4/limits-h.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/localtime-buffer.m4])
 m4_include([m4/lock.m4])
 m4_include([m4/longlong.m4])
+m4_include([m4/lstat.m4])
 m4_include([m4/m4.m4])
 m4_include([m4/malloc.m4])
+m4_include([m4/malloca.m4])
 m4_include([m4/math_h.m4])
 m4_include([m4/mbchar.m4])
-m4_include([m4/mbiter.m4])
+m4_include([m4/mbfile.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/minmax.m4])
 m4_include([m4/mmap-anon.m4])
 m4_include([m4/mode_t.m4])
 m4_include([m4/msvc-inval.m4])
@@ -1157,8 +1242,12 @@
 m4_include([m4/multiarch.m4])
 m4_include([m4/nls.m4])
 m4_include([m4/nocrash.m4])
+m4_include([m4/non-recursive-gnulib-prefix-hack.m4])
 m4_include([m4/obstack-printf.m4])
+m4_include([m4/obstack.m4])
 m4_include([m4/off_t.m4])
+m4_include([m4/open-cloexec.m4])
+m4_include([m4/open-slash.m4])
 m4_include([m4/open.m4])
 m4_include([m4/pathmax.m4])
 m4_include([m4/perror.m4])
@@ -1170,13 +1259,20 @@
 m4_include([m4/printf-posix-rpl.m4])
 m4_include([m4/printf.m4])
 m4_include([m4/progtest.m4])
+m4_include([m4/pthread_rwlock_rdlock.m4])
 m4_include([m4/quote.m4])
 m4_include([m4/quotearg.m4])
 m4_include([m4/raise.m4])
 m4_include([m4/rawmemchr.m4])
+m4_include([m4/readlink.m4])
 m4_include([m4/realloc.m4])
+m4_include([m4/relocatable-lib.m4])
+m4_include([m4/relocatable.m4])
+m4_include([m4/rename.m4])
+m4_include([m4/rmdir.m4])
 m4_include([m4/sched_h.m4])
 m4_include([m4/setenv.m4])
+m4_include([m4/sh-filename.m4])
 m4_include([m4/sig_atomic_t.m4])
 m4_include([m4/sigaction.m4])
 m4_include([m4/signal_h.m4])
@@ -1189,7 +1285,9 @@
 m4_include([m4/spawn_h.m4])
 m4_include([m4/sprintf-posix.m4])
 m4_include([m4/ssize_t.m4])
+m4_include([m4/stat-time.m4])
 m4_include([m4/stat.m4])
+m4_include([m4/std-gnu11.m4])
 m4_include([m4/stdbool.m4])
 m4_include([m4/stddef_h.m4])
 m4_include([m4/stdint.m4])
@@ -1204,19 +1302,25 @@
 m4_include([m4/string_h.m4])
 m4_include([m4/strndup.m4])
 m4_include([m4/strnlen.m4])
-m4_include([m4/strtoul.m4])
 m4_include([m4/strverscmp.m4])
+m4_include([m4/sys_resource_h.m4])
 m4_include([m4/sys_socket_h.m4])
 m4_include([m4/sys_stat_h.m4])
+m4_include([m4/sys_time_h.m4])
+m4_include([m4/sys_times_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/timespec.m4])
+m4_include([m4/tls.m4])
 m4_include([m4/unistd-safer.m4])
 m4_include([m4/unistd_h.m4])
+m4_include([m4/unlink.m4])
 m4_include([m4/unlocked-io.m4])
 m4_include([m4/vasnprintf.m4])
+m4_include([m4/vasprintf-posix.m4])
+m4_include([m4/vasprintf.m4])
 m4_include([m4/vfprintf-posix.m4])
 m4_include([m4/vsnprintf-posix.m4])
 m4_include([m4/vsnprintf.m4])
diff --git a/build-aux/darwin11.4.0.valgrind b/build-aux/Darwin.valgrind
similarity index 94%
rename from build-aux/darwin11.4.0.valgrind
rename to build-aux/Darwin.valgrind
index ff355eb..c791147 100644
--- a/build-aux/darwin11.4.0.valgrind
+++ b/build-aux/Darwin.valgrind
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2012-2015, 2018-2019 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
diff --git a/build-aux/Linux.valgrind b/build-aux/Linux.valgrind
new file mode 100644
index 0000000..729dd5e
--- /dev/null
+++ b/build-aux/Linux.valgrind
@@ -0,0 +1,61 @@
+# Copyright (C) 2012-2015, 2018-2019 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.
+
+# Travis Trusty, 2018-09-07.
+{
+   libstdcxx_init
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   obj:/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
+   fun:call_init.part.0
+   fun:call_init
+   fun:_dl_init
+   obj:/lib/x86_64-linux-gnu/ld-2.19.so
+}
+
+# Linux prague 4.1.2-2-ARCH #1 SMP PREEMPT Wed Jul 15 08:30:32 UTC 2015
+# x86_64 GNU/Linux
+{
+   Probably exception handling from G++ 5.1.
+   Memcheck:Leak
+   match-leak-kinds: reachable
+   fun:malloc
+   fun:pool
+   fun:__static_initialization_and_destruction_0
+   fun:_GLOBAL__sub_I_eh_alloc.cc
+   fun:call_init.part.0
+   fun:_dl_init
+   obj:/usr/lib/ld-2.21.so
+}
+
+# Linux seattle 2.6.32-5-amd64 #1 SMP Thu Mar 22 17:26:33 UTC 2012
+# x86_64 GNU/Linux
+{
+   index
+   Memcheck:Cond
+   fun:index
+   fun:expand_dynamic_string_token
+   fun:_dl_map_object
+   fun:map_doit
+   fun:_dl_catch_error
+   fun:do_preload
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+   obj:/lib/ld-2.11.3.so
+}
diff --git a/build-aux/Makefile.am b/build-aux/Makefile.am
deleted file mode 100644
index 5b077b8..0000000
--- a/build-aux/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-## 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
deleted file mode 100644
index a222b15..0000000
--- a/build-aux/Makefile.in
+++ /dev/null
@@ -1,1528 +0,0 @@
-# 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 = build-aux
-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/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_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@
-EXTRA_DIST = \
-  cross-options.pl				\
-  darwin11.4.0.valgrind				\
-  prev-version.txt				\
-  update-b4-copyright
-
-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 build-aux/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnits 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
-$(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)'; \
-	  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
-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/build-aux/announce-gen b/build-aux/announce-gen
index ec7c22a..8fe0cc8 100755
--- a/build-aux/announce-gen
+++ b/build-aux/announce-gen
@@ -1,43 +1,60 @@
-eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
-  & eval 'exec perl -wS "$0" $argv:q'
-    if 0;
+#!/bin/sh
+#! -*-perl-*-
+
 # Generate a release announcement message.
 
-my $VERSION = '2012-06-08 06:53'; # UTC
+# Copyright (C) 2002-2019 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 <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line.  The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name.  The second line is essential for perl and is
+# also useful for editing this file in Emacs.  The next two lines below
+# are valid code in both sh and perl.  When executed by sh, they re-execute
+# the script through the perl program found in $PATH.  The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh.  When executed by  perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+     if 0;
+
+my $VERSION = '2018-03-07 03:46'; # 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 %digest_classes =
+  (
+   'md5' => (eval { require Digest::MD5; } and 'Digest::MD5'),
+   'sha1' => ((eval { require Digest::SHA; } and 'Digest::SHA')
+              or (eval { require Digest::SHA1; } and 'Digest::SHA1'))
+  );
 my $srcdir = '.';
 
 sub usage ($)
@@ -157,15 +174,13 @@
 
   foreach my $meth (qw (md5 sha1))
     {
+      my $class = $digest_classes{$meth} or next;
       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);
+          my $dig = $class->new->addfile(*IN)->hexdigest;
           close IN;
           print "$dig  $f\n";
         }
@@ -416,14 +431,15 @@
   @url_dir_list
     or (warn "URL directory name(s) not specified\n"), $fail = 1;
 
-  my @tool_list = split ',', $bootstrap_tools;
+  my @tool_list = split ',', $bootstrap_tools
+    if $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}
+  !$release_type || exists $valid_release_types{$release_type}
     or (warn "'$release_type': invalid release type\n"), $fail = 1;
 
   @ARGV
@@ -490,17 +506,17 @@
   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/!)
+      if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!)
         {
           (my $m = "$url_dir_list[0]/$tarballs[0]")
-            =~ s!http://ftp\.gnu\.org/gnu/!http://ftpmirror\.gnu\.org/!;
+            =~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!;
           print "  $m\n"
               . "  $m.sig\n\n";
 
         }
       else
         {
-          print "  http://www.gnu.org/order/ftp.html\n\n";
+          print "  https://www.gnu.org/order/ftp.html\n\n";
         }
     }
 
@@ -547,9 +563,10 @@
 ## perl-label-offset: -2
 ## perl-extra-newline-before-brace: t
 ## perl-merge-trailing-else: nil
-## eval: (add-hook 'write-file-hooks 'time-stamp)
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-line-limit: 50
 ## time-stamp-start: "my $VERSION = '"
 ## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
-## time-stamp-time-zone: "UTC"
+## time-stamp-time-zone: "UTC0"
 ## time-stamp-end: "'; # UTC"
 ## End:
diff --git a/build-aux/compile b/build-aux/compile
index bac481c..99e5052 100755
--- a/build-aux/compile
+++ b/build-aux/compile
@@ -1,10 +1,9 @@
 #! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
+# Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2010-11-15.09; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -18,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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
@@ -40,7 +39,7 @@
 
 # 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
+# Currently only supports Windows hosts. If the determined conversion
 # type is listed in (the comma separated) LAZY, no conversion will
 # take place.
 func_file_conv ()
@@ -79,6 +78,53 @@
   esac
 }
 
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  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
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
 # func_cl_wrapper cl arg...
 # Adjust compile command to suit cl
 func_cl_wrapper ()
@@ -94,7 +140,7 @@
     else
       case $1 in
 	-o)
-	  # configure might choose to run compile as `compile cc -o foo foo.c'.
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
 	  eat=1
 	  case $2 in
 	    *.o | *.[oO][bB][jJ])
@@ -109,43 +155,34 @@
 	      ;;
 	  esac
 	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
 	-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"
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
 	  shift
 	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
 	-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"
+	  func_cl_dashL "${1#-L}"
 	  ;;
 	-static)
 	  shared=false
@@ -196,19 +233,19 @@
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     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
+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'.
+right script to run: please start by reading the file 'INSTALL'.
 
 Report bugs to <bug-automake@gnu.org>.
 EOF
@@ -218,7 +255,8 @@
     echo "compile $scriptversion"
     exit $?
     ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
     func_cl_wrapper "$@"      # Doesn't return...
     ;;
 esac
@@ -233,8 +271,8 @@
   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.
+	# 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)
@@ -261,10 +299,10 @@
 done
 
 if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
+  # 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
+  # '.c' file was seen then we are probably linking.  That is also
   # ok.
   exec "$@"
 fi
@@ -273,7 +311,7 @@
 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
+# 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
@@ -302,9 +340,9 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 872b96a..7f9ebbe 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,14 +1,12 @@
 #! /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, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   Copyright 1992-2019 Free Software Foundation, Inc.
 
-timestamp='2012-09-25'
+timestamp='2019-09-10'
 
 # 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 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
@@ -17,24 +15,22 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://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.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# 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.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # 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
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -43,7 +39,7 @@
 
 Output the configuration name of the system \`$me' is run on.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -54,9 +50,7 @@
 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, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+Copyright 1992-2019 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."
@@ -90,8 +84,6 @@
   exit 1
 fi
 
-trap 'exit 1' 1 2 15
-
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
@@ -102,34 +94,38 @@
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
-set_cc_for_build='
-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 "$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 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+    : "${TMPDIR=/tmp}"
+    # shellcheck disable=SC2039
+    { 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" 2>/dev/null) ; } ||
+	{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+	{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+    dummy=$tmp/dummy
+    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+	,,)    echo "int x;" > "$dummy.c"
+	       for driver in cc gcc c89 c99 ; do
+		   if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+		       CC_FOR_BUILD="$driver"
+		       break
+		   fi
+	       done
+	       if test x"$CC_FOR_BUILD" = x ; then
+		   CC_FOR_BUILD=no_compiler_found
+	       fi
+	       ;;
+	,,*)   CC_FOR_BUILD=$CC ;;
+	,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+    esac
+}
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
 	PATH=$PATH:/.attbin ; export PATH
 fi
 
@@ -138,9 +134,37 @@
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "$UNAME_SYSTEM" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	set_cc_for_build
+	cat <<-EOF > "$dummy.c"
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+
+	# If ldd exists, use it to detect musl libc.
+	if command -v ldd >/dev/null && \
+		ldd --version 2>&1 | grep -q ^musl
+	then
+	    LIBC=musl
+	fi
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
 	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -153,21 +177,31 @@
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    "/sbin/$sysctl" 2>/dev/null || \
+	    "/usr/sbin/$sysctl" 2>/dev/null || \
+	    echo unknown)`
+	case "$UNAME_MACHINE_ARCH" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	    earmv*)
+		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine="${arch}${endian}"-unknown
+		;;
+	    *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
+	# to ELF recently (or will in the future) and ABI.
+	case "$UNAME_MACHINE_ARCH" in
+	    earm*)
+		os=netbsdelf
+		;;
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
+		set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
 		then
@@ -182,43 +216,72 @@
 		os=netbsd
 		;;
 	esac
+	# Determine ABI tags.
+	case "$UNAME_MACHINE_ARCH" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+		;;
+	esac
 	# The OS release
 	# Debian GNU/NetBSD machines have a different userland, and
 	# thus, need a distinct triplet. However, they do not need
 	# kernel version information, so it can be replaced with a
 	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
+	case "$UNAME_VERSION" in
 	    Debian*)
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
+	echo "$machine-${os}${release}${abi-}"
 	exit ;;
     *:Bitrig:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	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}
+	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
+	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
+	exit ;;
+    *:MidnightBSD:*:*)
+	echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
 	exit ;;
     *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
 	exit ;;
     *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
+	exit ;;
+    *:OS108:*:*)
+	echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
 	exit ;;
     macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
 	exit ;;
     *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
+	exit ;;
+    *:Sortix:*:*)
+	echo "$UNAME_MACHINE"-unknown-sortix
+	exit ;;
+    *:Twizzler:*:*)
+	echo "$UNAME_MACHINE"-unknown-twizzler
+	exit ;;
+    *:Redox:*:*)
+	echo "$UNAME_MACHINE"-unknown-redox
+	exit ;;
+    mips:OSF1:*.*)
+	echo mips-dec-osf1
 	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
@@ -236,63 +299,54 @@
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# 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'`
+	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
 	# 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
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
 	exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
+	echo "$UNAME_MACHINE"-unknown-amigaos
 	exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
+	echo "$UNAME_MACHINE"-unknown-morphos
 	exit ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
@@ -304,7 +358,7 @@
 	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
+	echo arm-acorn-riscix"$UNAME_RELEASE"
 	exit ;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
@@ -331,38 +385,38 @@
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
     s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	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/[^.]*//'`
+	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/[^.]*//'`
+	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
 	exit ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
+	echo i386-pc-auroraux"$UNAME_RELEASE"
 	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH="i386"
+	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 [ "$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) | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
-		SUN_ARCH="x86_64"
+		SUN_ARCH=x86_64
 	    fi
 	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	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
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
@@ -371,25 +425,25 @@
 		;;
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
 	exit ;;
     sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
+	echo m68k-sun-sunos"$UNAME_RELEASE"
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
+		echo m68k-sun-sunos"$UNAME_RELEASE"
 		;;
 	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
+		echo sparc-sun-sunos"$UNAME_RELEASE"
 		;;
 	esac
 	exit ;;
     aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
+	echo sparc-auspex-sunos"$UNAME_RELEASE"
 	exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
@@ -400,44 +454,44 @@
     # 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}
+	echo m68k-atari-mint"$UNAME_RELEASE"
 	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}
+	echo m68k-milan-mint"$UNAME_RELEASE"
 	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
+	echo m68k-hades-mint"$UNAME_RELEASE"
 	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint${UNAME_RELEASE}
+	echo m68k-unknown-mint"$UNAME_RELEASE"
 	exit ;;
     m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
+	echo m68k-apple-machten"$UNAME_RELEASE"
 	exit ;;
     powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
+	echo powerpc-apple-machten"$UNAME_RELEASE"
 	exit ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
 	exit ;;
     RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
+	echo mips-dec-ultrix"$UNAME_RELEASE"
 	exit ;;
     VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
+	echo vax-dec-ultrix"$UNAME_RELEASE"
 	exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
+	echo clipper-intergraph-clix"$UNAME_RELEASE"
 	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
+	set_cc_for_build
+	sed 's/^	//' << EOF > "$dummy.c"
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
 	int main (int argc, char *argv[]) {
@@ -446,23 +500,23 @@
 #endif
 	#if defined (host_mips) && defined (MIPSEB)
 	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
 	#endif
 	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
 	#endif
 	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
 	#endif
 	#endif
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
 	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
+	echo mips-mips-riscos"$UNAME_RELEASE"
 	exit ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
@@ -488,17 +542,17 @@
     AViiON:dgux:*:*)
 	# DG/UX returns AViiON for all architectures
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
 	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+	       [ "$TARGET_BINARY_INTERFACE"x = x ]
 	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
+		echo m88k-dg-dgux"$UNAME_RELEASE"
 	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+		echo m88k-dg-dguxbcs"$UNAME_RELEASE"
 	    fi
 	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
+	    echo i586-dg-dgux"$UNAME_RELEASE"
 	fi
 	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
@@ -515,7 +569,7 @@
 	echo m68k-tektronix-bsd
 	exit ;;
     *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
 	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
 	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
@@ -527,14 +581,14 @@
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
 	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
 	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
 	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
+		set_cc_for_build
+		sed 's/^		//' << EOF > "$dummy.c"
 		#include <sys/systemcfg.h>
 
 		main()
@@ -545,7 +599,7 @@
 			exit(0);
 			}
 EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
 		then
 			echo "$SYSTEM_NAME"
 		else
@@ -559,26 +613,27 @@
 	exit ;;
     *: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
+	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
 	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
 	exit ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
 	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
 	echo romp-ibm-bsd4.4
 	exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
 	exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
@@ -593,28 +648,28 @@
 	echo m68k-hp-bsd4.4
 	exit ;;
     9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
+	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+	case "$UNAME_MACHINE" in
+	    9000/31?)            HP_ARCH=m68000 ;;
+	    9000/[34]??)         HP_ARCH=m68k ;;
 	    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
+		    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
+			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
 		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
+		if [ "$HP_ARCH" = "" ]; then
+		    set_cc_for_build
+		    sed 's/^		//' << EOF > "$dummy.c"
 
 		#define _HPUX_SOURCE
 		#include <stdlib.h>
@@ -647,13 +702,13 @@
 		    exit (0);
 		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ "$HP_ARCH" = hppa2.0w ]
 	then
-	    eval $set_cc_for_build
+	    set_cc_for_build
 
 	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
 	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -664,23 +719,23 @@
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
 		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
 	exit ;;
     ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
+	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux"$HPUX_REV"
 	exit ;;
     3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
+	set_cc_for_build
+	sed 's/^	//' << EOF > "$dummy.c"
 	#include <unistd.h>
 	int
 	main ()
@@ -705,11 +760,11 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
 		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
 	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
 	echo hppa1.1-hp-bsd
 	exit ;;
     9000/8??:4.3bsd:*:*)
@@ -718,7 +773,7 @@
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
 	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
 	echo hppa1.1-hp-osf
 	exit ;;
     hp8??:OSF1:*:*)
@@ -726,9 +781,9 @@
 	exit ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	    echo "$UNAME_MACHINE"-unknown-osf1mk
 	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
+	    echo "$UNAME_MACHINE"-unknown-osf1
 	fi
 	exit ;;
     parisc*:Lites*:*:*)
@@ -753,127 +808,120 @@
 	echo c4-convex-bsd
 	exit ;;
     CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	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/ /_/'`
+	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 ;;
     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/ /_/'`
+	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}
+	echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
 	exit ;;
     sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	echo sparc-unknown-bsdi"$UNAME_RELEASE"
 	exit ;;
     *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+	exit ;;
+    arm:FreeBSD:*:*)
+	UNAME_PROCESSOR=`uname -p`
+	set_cc_for_build
+	if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_PCS_VFP
+	then
+	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+	else
+	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+	fi
 	exit ;;
     *:FreeBSD:*:*)
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
+	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/[-(].*//'` ;;
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
 	esac
+	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
 	exit ;;
     i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
+	echo "$UNAME_MACHINE"-pc-cygwin
 	exit ;;
     *:MINGW64*:*)
-	echo ${UNAME_MACHINE}-pc-mingw64
+	echo "$UNAME_MACHINE"-pc-mingw64
 	exit ;;
     *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
+	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
+    *:MSYS*:*)
+	echo "$UNAME_MACHINE"-pc-msys
 	exit ;;
     i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
+	echo "$UNAME_MACHINE"-pc-pw32
 	exit ;;
     *:Interix*:*)
-	case ${UNAME_MACHINE} in
+	case "$UNAME_MACHINE" in
 	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
+		echo i586-pc-interix"$UNAME_RELEASE"
 		exit ;;
 	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix${UNAME_RELEASE}
+		echo x86_64-unknown-interix"$UNAME_RELEASE"
 		exit ;;
 	    IA64)
-		echo ia64-unknown-interix${UNAME_RELEASE}
+		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
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
     i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
+	echo "$UNAME_MACHINE"-pc-uwin
 	exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
+	echo x86_64-pc-cygwin
 	exit ;;
     prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
 	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
+    *:Minix:*:*)
+	echo "$UNAME_MACHINE"-unknown-minix
 	exit ;;
     aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     aarch64_be:Linux:*:*)
 	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -886,125 +934,169 @@
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	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}
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     arm*:Linux:*:*)
-	eval $set_cc_for_build
+	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
+	    echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	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
+		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
 	    else
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
 	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
 	exit ;;
     crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+	exit ;;
+    e2k:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	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}"
+	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	exit ;;
+    k1om:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
+	set_cc_for_build
+	IS_GLIBC=0
+	test x"${LIBC}" = xgnu && IS_GLIBC=1
+	sed 's/^	//' << EOF > "$dummy.c"
 	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
+	#undef mips
+	#undef mipsel
+	#undef mips64
+	#undef mips64el
+	#if ${IS_GLIBC} && defined(_ABI64)
+	LIBCABI=gnuabi64
+	#else
+	#if ${IS_GLIBC} && defined(_ABIN32)
+	LIBCABI=gnuabin32
+	#else
+	LIBCABI=${LIBC}
+	#endif
+	#endif
+
+	#if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+	CPU=mipsisa64r6
+	#else
+	#if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+	CPU=mipsisa32r6
+	#else
+	#if defined(__mips64)
+	CPU=mips64
+	#else
+	CPU=mips
+	#endif
+	#endif
+	#endif
+
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
+	MIPS_ENDIAN=el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
+	MIPS_ENDIAN=
 	#else
-	CPU=
+	MIPS_ENDIAN=
 	#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; }
+	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
+	test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
 	;;
-    or32:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+    mips64el:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	exit ;;
+    openrisc*:Linux:*:*)
+	echo or1k-unknown-linux-"$LIBC"
+	exit ;;
+    or32:Linux:*:* | or1k*:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-gnu
+	echo sparc-unknown-linux-"$LIBC"
 	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+	echo hppa64-unknown-linux-"$LIBC"
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
+	  PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
+	  *)    echo hppa-unknown-linux-"$LIBC" ;;
 	esac
 	exit ;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
+	echo powerpc64-unknown-linux-"$LIBC"
 	exit ;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
+	echo powerpc-unknown-linux-"$LIBC"
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-"$LIBC"
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-"$LIBC"
+	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
 	exit ;;
     sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
 	exit ;;
     x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
 	exit ;;
     xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1018,34 +1110,34 @@
 	# 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.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
 	exit ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
+	echo "$UNAME_MACHINE"-pc-os2-emx
 	exit ;;
     i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
+	echo "$UNAME_MACHINE"-unknown-stop
 	exit ;;
     i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
+	echo "$UNAME_MACHINE"-unknown-atheos
 	exit ;;
     i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
+	echo "$UNAME_MACHINE"-pc-syllable
 	exit ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
+	echo i386-unknown-lynxos"$UNAME_RELEASE"
 	exit ;;
     i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	echo "$UNAME_MACHINE"-pc-msdosdjgpp
 	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+    i*86:*:4.*:*)
+	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+		echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
 	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+		echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
 	fi
 	exit ;;
     i*86:*:5:[678]*)
@@ -1055,12 +1147,12 @@
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+		echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
 		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1070,9 +1162,9 @@
 			&& UNAME_MACHINE=i686
 		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
 			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+		echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
 	else
-		echo ${UNAME_MACHINE}-pc-sysv32
+		echo "$UNAME_MACHINE"-pc-sysv32
 	fi
 	exit ;;
     pc:*:*:*)
@@ -1080,7 +1172,7 @@
 	# 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
+	# prints for the "djgpp" host, or else GDB configure will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
 	exit ;;
@@ -1092,9 +1184,9 @@
 	exit ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	  echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	  echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
 	fi
 	exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1114,9 +1206,9 @@
 	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; }
+	  && { 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; } ;;
+	  && { 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; } ;;
@@ -1125,28 +1217,28 @@
 	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; }
+	    && { 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; }
+	    && { 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; } ;;
+	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	echo m68k-unknown-lynxos"$UNAME_RELEASE"
 	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit ;;
     TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	echo sparc-unknown-lynxos"$UNAME_RELEASE"
 	exit ;;
     rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	echo rs6000-unknown-lynxos"$UNAME_RELEASE"
 	exit ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	echo powerpc-unknown-lynxos"$UNAME_RELEASE"
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
+	echo mips-dde-sysv"$UNAME_RELEASE"
 	exit ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
@@ -1157,7 +1249,7 @@
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
+		echo "$UNAME_MACHINE"-sni-sysv4
 	else
 		echo ns32k-sni-sysv
 	fi
@@ -1177,23 +1269,23 @@
 	exit ;;
     i*86:VOS:*:*)
 	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
+	echo "$UNAME_MACHINE"-stratus-vos
 	exit ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
 	exit ;;
     mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
+	echo m68k-apple-aux"$UNAME_RELEASE"
 	exit ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
 	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 ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
@@ -1212,65 +1304,94 @@
 	echo x86_64-unknown-haiku
 	exit ;;
     SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
+	echo sx4-nec-superux"$UNAME_RELEASE"
 	exit ;;
     SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
+	echo sx5-nec-superux"$UNAME_RELEASE"
 	exit ;;
     SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
+	echo sx6-nec-superux"$UNAME_RELEASE"
 	exit ;;
     SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
+	echo sx7-nec-superux"$UNAME_RELEASE"
 	exit ;;
     SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
+	echo sx8-nec-superux"$UNAME_RELEASE"
 	exit ;;
     SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
+	echo sx8r-nec-superux"$UNAME_RELEASE"
+	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux"$UNAME_RELEASE"
 	exit ;;
     Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	echo powerpc-apple-rhapsody"$UNAME_RELEASE"
 	exit ;;
     *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
 	exit ;;
     *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	UNAME_PROCESSOR=`uname -p`
 	case $UNAME_PROCESSOR in
-	    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}
+	if command -v xcode-select > /dev/null 2> /dev/null && \
+		! xcode-select --print-path > /dev/null 2> /dev/null ; then
+	    # Avoid executing cc if there is no toolchain installed as
+	    # cc will be a stub that puts up a graphical alert
+	    # prompting the user to install developer tools.
+	    CC_FOR_BUILD=no_compiler_found
+	else
+	    set_cc_for_build
+	fi
+	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
+		case $UNAME_PROCESSOR in
+		    i386) UNAME_PROCESSOR=x86_64 ;;
+		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		esac
+	    fi
+	    # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+	    if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		   grep IS_PPC >/dev/null
+	    then
+		UNAME_PROCESSOR=powerpc
+	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # uname -m returns i386 or x86_64
+	    UNAME_PROCESSOR=$UNAME_MACHINE
+	fi
+	echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
 	exit ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
+    NEO-*:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk"$UNAME_RELEASE"
 	exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
+	echo nse-tandem-nsk"$UNAME_RELEASE"
 	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
+    NSR-*:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk"$UNAME_RELEASE"
+	exit ;;
+    NSV-*:NONSTOP_KERNEL:*:*)
+	echo nsv-tandem-nsk"$UNAME_RELEASE"
+	exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk"$UNAME_RELEASE"
 	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
@@ -1279,18 +1400,19 @@
 	echo bs2000-siemens-sysv
 	exit ;;
     DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
 	exit ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	# shellcheck disable=SC2154
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
 	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
+	echo "$UNAME_MACHINE"-unknown-plan9
 	exit ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
@@ -1311,14 +1433,14 @@
 	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/[-(].*//'`
+	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
 	exit ;;
     *:*VMS:*:*)
 	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
+	case "$UNAME_MACHINE" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
 	    V*) echo vax-dec-vms ; exit ;;
@@ -1327,24 +1449,39 @@
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
 	exit ;;
     i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
+	echo "$UNAME_MACHINE"-pc-rdos
 	exit ;;
     i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
+	echo "$UNAME_MACHINE"-pc-aros
 	exit ;;
     x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-unknown-esx
+	echo "$UNAME_MACHINE"-unknown-esx
+	exit ;;
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
+	exit ;;
+    *:Unleashed:*:*)
+	echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
 	exit ;;
 esac
 
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
 #ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
 #endif
 main ()
 {
@@ -1357,22 +1494,14 @@
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-	"4"
+  "4"
 #else
-	""
+  ""
 #endif
-	); exit (0);
+  ); exit (0);
 #endif
 #endif
 
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
 #if defined (NeXT)
 #if !defined (__ARCHITECTURE__)
 #define __ARCHITECTURE__ "m68k"
@@ -1412,39 +1541,54 @@
 #endif
 
 #if defined (_SEQUENT_)
-    struct utsname un;
+  struct utsname un;
 
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
+  uname(&un);
+  if (strncmp(un.version, "V2", 2) == 0) {
+    printf ("i386-sequent-ptx2\n"); exit (0);
+  }
+  if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+    printf ("i386-sequent-ptx1\n"); exit (0);
+  }
+  printf ("i386-sequent-ptx\n"); exit (0);
 #endif
 
 #if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+  printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+  printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname un;
+  uname (&un);
+  printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname *un;
+  uname (&un);
+  printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
 #endif
 
 #if defined (alliant) && defined (i860)
@@ -1455,54 +1599,38 @@
 }
 EOF
 
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
 	{ echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
 
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+echo "$0: unable to guess system type" >&2
 
-# Convex versions that predate uname can use getsysinfo(1)
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+    mips:Linux | mips64:Linux)
+	# If we got here on MIPS GNU/Linux, output extra information.
+	cat >&2 <<EOF
 
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    c34*)
-	echo c34-convex-bsd
-	exit ;;
-    c38*)
-	echo c38-convex-bsd
-	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+	;;
+esac
 
 cat >&2 <<EOF
-$0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
@@ -1521,16 +1649,16 @@
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM  = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
 EOF
 
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
diff --git a/build-aux/config.libpath b/build-aux/config.libpath
new file mode 100755
index 0000000..d4fec2b
--- /dev/null
+++ b/build-aux/config.libpath
@@ -0,0 +1,152 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable at run time.
+#
+#   Copyright 1996-2019 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2003
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This program is free software: you can redistribute it and/or modify
+#   it under the terms of the 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 <https://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.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variable LD should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+shlibpath_var=
+case $host_os in
+  aix3*)
+    shlibpath_var=LIBPATH
+    ;;
+  aix[4-9]*)
+    if test "$host_cpu" = ia64; then
+      # AIX 5 supports IA64
+      shlibpath_var=LD_LIBRARY_PATH
+    else
+      shlibpath_var=LIBPATH
+    fi
+    ;;
+  beos*)
+    shlibpath_var=LIBRARY_PATH
+    ;;
+  bsdi[45]*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: first we should search . and the directory the executable is in
+    shlibpath_var=PATH
+    ;;
+  darwin* | rhapsody*)
+    shlibpath_var=DYLD_LIBRARY_PATH
+    ;;
+  dgux*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  freebsd* | dragonfly*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  gnu*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case "$host_cpu" in
+      ia64* | hppa*64*) shlibpath_var=LD_LIBRARY_PATH ;;
+      *) shlibpath_var=SHLIB_PATH ;;
+    esac
+    ;;
+  interix[3-9]*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case $host_os in
+      irix5* | nonstopux*)
+        shlibsuff=
+        ;;
+      *)
+        case $LD in # libtool.m4 will add one of these switches to LD
+          *-32|*"-32 ") shlibsuff= ;;
+          *-n32|*"-n32 ") shlibsuff=N32 ;;
+          *-64|*"-64 ") shlibsuff=64 ;;
+          *) shlibsuff= ;;
+        esac
+        ;;
+    esac
+    shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  netbsd*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  newsos6)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  nto-qnx*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  openbsd*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  os2*)
+    shlibpath_var=LIBPATH
+    ;;
+  osf3* | osf4* | osf5*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  sunos4*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  sysv4 | sysv4.3*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  sysv4*MP*)
+    if test -d /usr/nec ;then
+      shlibpath_var=LD_LIBRARY_PATH
+    fi
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+  uts4*)
+    shlibpath_var=LD_LIBRARY_PATH
+    ;;
+esac
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+EOF
diff --git a/build-aux/config.rpath b/build-aux/config.rpath
index 1a07018..be202c1 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-2012 Free Software Foundation, Inc.
+#   Copyright 1996-2019 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
@@ -367,11 +367,7 @@
     dgux*)
       hardcode_libdir_flag_spec='-L$libdir'
       ;;
-    freebsd2.2*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    freebsd2*)
+    freebsd2.[01]*)
       hardcode_direct=yes
       hardcode_minus_L=yes
       ;;
@@ -548,13 +544,11 @@
   dgux*)
     library_names_spec='$libname$shrext'
     ;;
+  freebsd[23].*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
   freebsd* | dragonfly*)
-    case "$host_os" in
-      freebsd[123]*)
-        library_names_spec='$libname$shrext$versuffix' ;;
-      *)
-        library_names_spec='$libname$shrext' ;;
-    esac
+    library_names_spec='$libname$shrext'
     ;;
   gnu*)
     library_names_spec='$libname$shrext'
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 8df5511..0f2234c 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,36 +1,31 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   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.
+#   Copyright 1992-2019 Free Software Foundation, Inc.
 
-timestamp='2012-12-06'
+timestamp='2019-06-30'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# 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 2 of the License, or
+# 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 program is distributed in the hope that it will be useful,
-# but WITHOUT 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, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://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.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -38,7 +33,7 @@
 # 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
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -58,12 +53,11 @@
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -73,9 +67,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-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.
+Copyright 1992-2019 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."
@@ -97,12 +89,12 @@
     - )	# Use stdin as input.
        break ;;
     -* )
-       echo "$me: invalid option $1$help"
+       echo "$me: invalid option $1$help" >&2
        exit 1 ;;
 
     *local*)
        # First pass through any local machine types.
-       echo $1
+       echo "$1"
        exit ;;
 
     * )
@@ -118,1207 +110,1164 @@
     exit 1;;
 esac
 
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# 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-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 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
 
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
+# Separate into logical components for further validation
+case $1 in
+	*-*-*-*-*)
+		echo Invalid configuration \`"$1"\': more than four components >&2
+		exit 1
 		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-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 | -microblaze*)
-		os=
-		basic_machine=$1
+	*-*-*-*)
+		basic_machine=$field1-$field2
+		os=$field3-$field4
 		;;
-	-bluegene*)
-		os=-cnk
+	*-*-*)
+		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+		# parts
+		maybe_os=$field2-$field3
+		case $maybe_os in
+			nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
+			| linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+			| storm-chaos* | os2-emx* | rtmk-nova*)
+				basic_machine=$field1
+				os=$maybe_os
+				;;
+			android-linux)
+				basic_machine=$field1-unknown
+				os=linux-android
+				;;
+			*)
+				basic_machine=$field1-$field2
+				os=$field3
+				;;
+		esac
 		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
+	*-*)
+		# A lone config we happen to match not fitting any pattern
+		case $field1-$field2 in
+			decstation-3100)
+				basic_machine=mips-dec
+				os=
+				;;
+			*-*)
+				# Second component is usually, but not always the OS
+				case $field2 in
+					# Prevent following clause from handling this valid os
+					sun*os*)
+						basic_machine=$field1
+						os=$field2
+						;;
+					# Manufacturers
+					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+					| unicom* | ibm* | next | hp | isi* | apollo | altos* \
+					| 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 \
+					| microblaze* | sim | cisco \
+					| oki | wec | wrs | winbond)
+						basic_machine=$field1-$field2
+						os=
+						;;
+					*)
+						basic_machine=$field1
+						os=$field2
+						;;
+				esac
+			;;
+		esac
 		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-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/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# 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/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
+	*)
+		# Convert single-component short-hands not valid as part of
+		# multi-component configurations.
+		case $field1 in
+			386bsd)
+				basic_machine=i386-pc
+				os=bsd
+				;;
+			a29khif)
+				basic_machine=a29k-amd
+				os=udi
+				;;
+			adobe68k)
+				basic_machine=m68010-adobe
+				os=scout
+				;;
+			alliant)
+				basic_machine=fx80-alliant
+				os=
+				;;
+			altos | altos3068)
+				basic_machine=m68k-altos
+				os=
+				;;
+			am29k)
+				basic_machine=a29k-none
+				os=bsd
+				;;
+			amdahl)
+				basic_machine=580-amdahl
+				os=sysv
+				;;
+			amiga)
+				basic_machine=m68k-unknown
+				os=
+				;;
+			amigaos | amigados)
+				basic_machine=m68k-unknown
+				os=amigaos
+				;;
+			amigaunix | amix)
+				basic_machine=m68k-unknown
+				os=sysv4
+				;;
+			apollo68)
+				basic_machine=m68k-apollo
+				os=sysv
+				;;
+			apollo68bsd)
+				basic_machine=m68k-apollo
+				os=bsd
+				;;
+			aros)
+				basic_machine=i386-pc
+				os=aros
+				;;
+			aux)
+				basic_machine=m68k-apple
+				os=aux
+				;;
+			balance)
+				basic_machine=ns32k-sequent
+				os=dynix
+				;;
+			blackfin)
+				basic_machine=bfin-unknown
+				os=linux
+				;;
+			cegcc)
+				basic_machine=arm-unknown
+				os=cegcc
+				;;
+			convex-c1)
+				basic_machine=c1-convex
+				os=bsd
+				;;
+			convex-c2)
+				basic_machine=c2-convex
+				os=bsd
+				;;
+			convex-c32)
+				basic_machine=c32-convex
+				os=bsd
+				;;
+			convex-c34)
+				basic_machine=c34-convex
+				os=bsd
+				;;
+			convex-c38)
+				basic_machine=c38-convex
+				os=bsd
+				;;
+			cray)
+				basic_machine=j90-cray
+				os=unicos
+				;;
+			crds | unos)
+				basic_machine=m68k-crds
+				os=
+				;;
+			da30)
+				basic_machine=m68k-da30
+				os=
+				;;
+			decstation | pmax | pmin | dec3100 | decstatn)
+				basic_machine=mips-dec
+				os=
+				;;
+			delta88)
+				basic_machine=m88k-motorola
+				os=sysv3
+				;;
+			dicos)
+				basic_machine=i686-pc
+				os=dicos
+				;;
+			djgpp)
+				basic_machine=i586-pc
+				os=msdosdjgpp
+				;;
+			ebmon29k)
+				basic_machine=a29k-amd
+				os=ebmon
+				;;
+			es1800 | OSE68k | ose68k | ose | OSE)
+				basic_machine=m68k-ericsson
+				os=ose
+				;;
+			gmicro)
+				basic_machine=tron-gmicro
+				os=sysv
+				;;
+			go32)
+				basic_machine=i386-pc
+				os=go32
+				;;
+			h8300hms)
+				basic_machine=h8300-hitachi
+				os=hms
+				;;
+			h8300xray)
+				basic_machine=h8300-hitachi
+				os=xray
+				;;
+			h8500hms)
+				basic_machine=h8500-hitachi
+				os=hms
+				;;
+			harris)
+				basic_machine=m88k-harris
+				os=sysv3
+				;;
+			hp300 | hp300hpux)
+				basic_machine=m68k-hp
+				os=hpux
+				;;
+			hp300bsd)
+				basic_machine=m68k-hp
+				os=bsd
+				;;
+			hppaosf)
+				basic_machine=hppa1.1-hp
+				os=osf
+				;;
+			hppro)
+				basic_machine=hppa1.1-hp
+				os=proelf
+				;;
+			i386mach)
+				basic_machine=i386-mach
+				os=mach
+				;;
+			isi68 | isi)
+				basic_machine=m68k-isi
+				os=sysv
+				;;
+			m68knommu)
+				basic_machine=m68k-unknown
+				os=linux
+				;;
+			magnum | m3230)
+				basic_machine=mips-mips
+				os=sysv
+				;;
+			merlin)
+				basic_machine=ns32k-utek
+				os=sysv
+				;;
+			mingw64)
+				basic_machine=x86_64-pc
+				os=mingw64
+				;;
+			mingw32)
+				basic_machine=i686-pc
+				os=mingw32
+				;;
+			mingw32ce)
+				basic_machine=arm-unknown
+				os=mingw32ce
+				;;
+			monitor)
+				basic_machine=m68k-rom68k
+				os=coff
+				;;
+			morphos)
+				basic_machine=powerpc-unknown
+				os=morphos
+				;;
+			moxiebox)
+				basic_machine=moxie-unknown
+				os=moxiebox
+				;;
+			msdos)
+				basic_machine=i386-pc
+				os=msdos
+				;;
+			msys)
+				basic_machine=i686-pc
+				os=msys
+				;;
+			mvs)
+				basic_machine=i370-ibm
+				os=mvs
+				;;
+			nacl)
+				basic_machine=le32-unknown
+				os=nacl
+				;;
+			ncr3000)
+				basic_machine=i486-ncr
+				os=sysv4
+				;;
+			netbsd386)
+				basic_machine=i386-pc
+				os=netbsd
+				;;
+			netwinder)
+				basic_machine=armv4l-rebel
+				os=linux
+				;;
+			news | news700 | news800 | news900)
+				basic_machine=m68k-sony
+				os=newsos
+				;;
+			news1000)
+				basic_machine=m68030-sony
+				os=newsos
+				;;
+			necv70)
+				basic_machine=v70-nec
+				os=sysv
+				;;
+			nh3000)
+				basic_machine=m68k-harris
+				os=cxux
+				;;
+			nh[45]000)
+				basic_machine=m88k-harris
+				os=cxux
+				;;
+			nindy960)
+				basic_machine=i960-intel
+				os=nindy
+				;;
+			mon960)
+				basic_machine=i960-intel
+				os=mon960
+				;;
+			nonstopux)
+				basic_machine=mips-compaq
+				os=nonstopux
+				;;
+			os400)
+				basic_machine=powerpc-ibm
+				os=os400
+				;;
+			OSE68000 | ose68000)
+				basic_machine=m68000-ericsson
+				os=ose
+				;;
+			os68k)
+				basic_machine=m68k-none
+				os=os68k
+				;;
+			paragon)
+				basic_machine=i860-intel
+				os=osf
+				;;
+			parisc)
+				basic_machine=hppa-unknown
+				os=linux
+				;;
+			pw32)
+				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
+				;;
+			sa29200)
+				basic_machine=a29k-amd
+				os=udi
+				;;
+			sei)
+				basic_machine=mips-sei
+				os=seiux
+				;;
+			sequent)
+				basic_machine=i386-sequent
+				os=
+				;;
+			sps7)
+				basic_machine=m68k-bull
+				os=sysv2
+				;;
+			st2000)
+				basic_machine=m68k-tandem
+				os=
+				;;
+			stratus)
+				basic_machine=i860-stratus
+				os=sysv4
+				;;
+			sun2)
+				basic_machine=m68000-sun
+				os=
+				;;
+			sun2os3)
+				basic_machine=m68000-sun
+				os=sunos3
+				;;
+			sun2os4)
+				basic_machine=m68000-sun
+				os=sunos4
+				;;
+			sun3)
+				basic_machine=m68k-sun
+				os=
+				;;
+			sun3os3)
+				basic_machine=m68k-sun
+				os=sunos3
+				;;
+			sun3os4)
+				basic_machine=m68k-sun
+				os=sunos4
+				;;
+			sun4)
+				basic_machine=sparc-sun
+				os=
+				;;
+			sun4os3)
+				basic_machine=sparc-sun
+				os=sunos3
+				;;
+			sun4os4)
+				basic_machine=sparc-sun
+				os=sunos4
+				;;
+			sun4sol2)
+				basic_machine=sparc-sun
+				os=solaris2
+				;;
+			sun386 | sun386i | roadrunner)
+				basic_machine=i386-sun
+				os=
+				;;
+			sv1)
+				basic_machine=sv1-cray
+				os=unicos
+				;;
+			symmetry)
+				basic_machine=i386-sequent
+				os=dynix
+				;;
+			t3e)
+				basic_machine=alphaev5-cray
+				os=unicos
+				;;
+			t90)
+				basic_machine=t90-cray
+				os=unicos
+				;;
+			toad1)
+				basic_machine=pdp10-xkl
+				os=tops20
+				;;
+			tpf)
+				basic_machine=s390x-ibm
+				os=tpf
+				;;
+			udi29k)
+				basic_machine=a29k-amd
+				os=udi
+				;;
+			ultra3)
+				basic_machine=a29k-nyu
+				os=sym1
+				;;
+			v810 | necv810)
+				basic_machine=v810-nec
+				os=none
+				;;
+			vaxv)
+				basic_machine=vax-dec
+				os=sysv
+				;;
+			vms)
+				basic_machine=vax-dec
+				os=vms
+				;;
+			vsta)
+				basic_machine=i386-pc
+				os=vsta
+				;;
+			vxworks960)
+				basic_machine=i960-wrs
+				os=vxworks
+				;;
+			vxworks68)
+				basic_machine=m68k-wrs
+				os=vxworks
+				;;
+			vxworks29k)
+				basic_machine=a29k-wrs
+				os=vxworks
+				;;
+			xbox)
+				basic_machine=i686-pc
+				os=mingw32
+				;;
+			ymp)
+				basic_machine=ymp-cray
+				os=unicos
+				;;
+			*)
+				basic_machine=$1
+				os=
+				;;
+		esac
 		;;
 esac
 
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
 case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# 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[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| be32 | be64 \
-	| bfin \
-	| c4x | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 \
-	| ns16k | ns32k \
-	| open8 \
-	| or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pyramid \
-	| 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 | 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 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
+	# Here we handle the default manufacturer of certain CPU types.  It is in
+	# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		cpu=hppa1.1
+		vendor=winbond
 		;;
-	c54x)
-		basic_machine=tic54x-unknown
+	op50n)
+		cpu=hppa1.1
+		vendor=oki
 		;;
-	c55x)
-		basic_machine=tic55x-unknown
+	op60c)
+		cpu=hppa1.1
+		vendor=oki
 		;;
-	c6x)
-		basic_machine=tic6x-unknown
+	ibm*)
+		cpu=i370
+		vendor=ibm
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
+	orion105)
+		cpu=clipper
+		vendor=highlevel
 		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+	mac | mpw | mac-mpw)
+		cpu=m68k
+		vendor=apple
 		;;
-	ms1)
-		basic_machine=mt-unknown
+	pmac | pmac-mpw)
+		cpu=powerpc
+		vendor=apple
 		;;
 
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		cpu=m68000
+		vendor=att
 		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
+	3b*)
+		cpu=we32k
+		vendor=att
 		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
+	bluegene*)
+		cpu=powerpc
+		vendor=ibm
+		os=cnk
+		;;
+	decsystem10* | dec10*)
+		cpu=pdp10
+		vendor=dec
+		os=tops10
+		;;
+	decsystem20* | dec20*)
+		cpu=pdp10
+		vendor=dec
+		os=tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		cpu=m68k
+		vendor=motorola
+		;;
+	dpx2*)
+		cpu=m68k
+		vendor=bull
+		os=sysv3
+		;;
+	encore | umax | mmax)
+		cpu=ns32k
+		vendor=encore
+		;;
+	elxsi)
+		cpu=elxsi
+		vendor=elxsi
+		os=${os:-bsd}
+		;;
+	fx2800)
+		cpu=i860
+		vendor=alliant
+		;;
+	genix)
+		cpu=ns32k
+		vendor=ns
+		;;
+	h3050r* | hiux*)
+		cpu=hppa1.1
+		vendor=hitachi
+		os=hiuxwe2
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		cpu=hppa1.0
+		vendor=hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		cpu=m68000
+		vendor=hp
+		;;
+	hp9k3[2-9][0-9])
+		cpu=m68k
+		vendor=hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		cpu=hppa1.0
+		vendor=hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		cpu=hppa1.1
+		vendor=hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		cpu=hppa1.1
+		vendor=hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		cpu=hppa1.1
+		vendor=hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		cpu=hppa1.1
+		vendor=hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		cpu=hppa1.0
+		vendor=hp
+		;;
+	i*86v32)
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
+		vendor=pc
+		os=sysv32
+		;;
+	i*86v4*)
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
+		vendor=pc
+		os=sysv4
+		;;
+	i*86v)
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
+		vendor=pc
+		os=sysv
+		;;
+	i*86sol2)
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
+		vendor=pc
+		os=solaris2
+		;;
+	j90 | j90-cray)
+		cpu=j90
+		vendor=cray
+		os=${os:-unicos}
+		;;
+	iris | iris4d)
+		cpu=mips
+		vendor=sgi
+		case $os in
+		    irix*)
+			;;
+		    *)
+			os=irix4
+			;;
+		esac
+		;;
+	miniframe)
+		cpu=m68000
+		vendor=convergent
+		;;
+	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		cpu=m68k
+		vendor=atari
+		os=mint
+		;;
+	news-3600 | risc-news)
+		cpu=mips
+		vendor=sony
+		os=newsos
+		;;
+	next | m*-next)
+		cpu=m68k
+		vendor=next
+		case $os in
+		    openstep*)
+		        ;;
+		    nextstep*)
+			;;
+		    ns2*)
+		      os=nextstep2
+			;;
+		    *)
+		      os=nextstep3
+			;;
+		esac
+		;;
+	np1)
+		cpu=np1
+		vendor=gould
+		;;
+	op50n-* | op60c-*)
+		cpu=hppa1.1
+		vendor=oki
+		os=proelf
+		;;
+	pa-hitachi)
+		cpu=hppa1.1
+		vendor=hitachi
+		os=hiuxwe2
+		;;
+	pbd)
+		cpu=sparc
+		vendor=tti
+		;;
+	pbb)
+		cpu=m68k
+		vendor=tti
+		;;
+	pc532)
+		cpu=ns32k
+		vendor=pc532
+		;;
+	pn)
+		cpu=pn
+		vendor=gould
+		;;
+	power)
+		cpu=power
+		vendor=ibm
+		;;
+	ps2)
+		cpu=i386
+		vendor=ibm
+		;;
+	rm[46]00)
+		cpu=mips
+		vendor=siemens
+		;;
+	rtpc | rtpc-*)
+		cpu=romp
+		vendor=ibm
+		;;
+	sde)
+		cpu=mipsisa32
+		vendor=sde
+		os=${os:-elf}
+		;;
+	simso-wrs)
+		cpu=sparclite
+		vendor=wrs
+		os=vxworks
+		;;
+	tower | tower-32)
+		cpu=m68k
+		vendor=ncr
+		;;
+	vpp*|vx|vx-*)
+		cpu=f301
+		vendor=fujitsu
+		;;
+	w65)
+		cpu=w65
+		vendor=wdc
+		;;
+	w89k-*)
+		cpu=hppa1.1
+		vendor=winbond
+		os=proelf
+		;;
+	none)
+		cpu=none
+		vendor=none
+		;;
+	leon|leon[3-9])
+		cpu=sparc
+		vendor=$basic_machine
+		;;
+	leon-*|leon[3-9]-*)
+		cpu=sparc
+		vendor=`echo "$basic_machine" | sed 's/-.*//'`
 		;;
 
-	xscaleel)
-		basic_machine=armel-unknown
+	*-*)
+		# shellcheck disable=SC2162
+		IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
 		;;
-
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
 	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
+		cpu=$basic_machine
+		vendor=pc
 		;;
-	# 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-* | avr32-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| 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-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pyramid-* \
-	| 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-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# 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.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		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
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		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
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		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
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	msdos)
-		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
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		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
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
+	# These rules are duplicated from below for sake of the special case above;
+	# i.e. things that normalized to x86 arches should also default to "pc"
 	pc98)
-		basic_machine=i386-pc
+		cpu=i386
+		vendor=pc
 		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+	x64 | amd64)
+		cpu=x86_64
+		vendor=pc
 		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
+	# Recognize the basic CPU types without company name.
+	*)
+		cpu=$basic_machine
+		vendor=unknown
 		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+	# Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+	# some cases the only manufacturer, in others, it is the most popular.
+	craynv-unknown)
+		vendor=cray
+		os=${os:-unicosmp}
 		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
+	c90-unknown | c90-cray)
+		vendor=cray
+		os=${os:-unicos}
 		;;
-	pentium4)
-		basic_machine=i786-pc
+	fx80-unknown)
+		vendor=alliant
 		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+	romp-unknown)
+		vendor=ibm
 		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+	mmix-unknown)
+		vendor=knuth
 		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+	microblaze-unknown | microblazeel-unknown)
+		vendor=xilinx
 		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+	rs6000-unknown)
+		vendor=ibm
 		;;
-	pn)
-		basic_machine=pn-gould
+	vax-unknown)
+		vendor=dec
 		;;
-	power)	basic_machine=power-ibm
+	pdp11-unknown)
+		vendor=dec
 		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
+	we32k-unknown)
+		vendor=att
 		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	cydra-unknown)
+		vendor=cydrome
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
+	i370-ibm*)
+		vendor=ibm
 		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+	orion-unknown)
+		vendor=highlevel
 		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		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
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	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
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
+	xps-unknown | xps100-unknown)
+		cpu=xps100
+		vendor=honeywell
 		;;
 
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
+	# Here we normalize CPU types with a missing or matching vendor
+	dpx20-unknown | dpx20-bull)
+		cpu=rs6000
+		vendor=bull
+		os=${os:-bosx}
 		;;
-	op50n)
-		basic_machine=hppa1.1-oki
+
+	# Here we normalize CPU types irrespective of the vendor
+	amd64-*)
+		cpu=x86_64
 		;;
-	op60c)
-		basic_machine=hppa1.1-oki
+	blackfin-*)
+		cpu=bfin
+		os=linux
 		;;
-	romp)
-		basic_machine=romp-ibm
+	c54x-*)
+		cpu=tic54x
 		;;
-	mmix)
-		basic_machine=mmix-knuth
+	c55x-*)
+		cpu=tic55x
 		;;
-	rs6000)
-		basic_machine=rs6000-ibm
+	c6x-*)
+		cpu=tic6x
 		;;
-	vax)
-		basic_machine=vax-dec
+	e500v[12]-*)
+		cpu=powerpc
+		os=$os"spe"
 		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
+	mips3*-*)
+		cpu=mips64
 		;;
-	pdp11)
-		basic_machine=pdp11-dec
+	ms1-*)
+		cpu=mt
 		;;
-	we32k)
-		basic_machine=we32k-att
+	m68knommu-*)
+		cpu=m68k
+		os=linux
 		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
+	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+		cpu=s12z
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
+	openrisc-*)
+		cpu=or32
 		;;
-	cydra)
-		basic_machine=cydra-cydrome
+	parisc-*)
+		cpu=hppa
+		os=linux
 		;;
-	orion)
-		basic_machine=orion-highlevel
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		cpu=i586
 		;;
-	orion105)
-		basic_machine=clipper-highlevel
+	pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+		cpu=i686
 		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		cpu=i686
 		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
+	pentium4-*)
+		cpu=i786
 		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
+	pc98-*)
+		cpu=i386
 		;;
+	ppc-* | ppcbe-*)
+		cpu=powerpc
+		;;
+	ppcle-* | powerpclittle-*)
+		cpu=powerpcle
+		;;
+	ppc64-*)
+		cpu=powerpc64
+		;;
+	ppc64le-* | powerpc64little-*)
+		cpu=powerpc64le
+		;;
+	sb1-*)
+		cpu=mipsisa64sb1
+		;;
+	sb1el-*)
+		cpu=mipsisa64sb1el
+		;;
+	sh5e[lb]-*)
+		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+		;;
+	spur-*)
+		cpu=spur
+		;;
+	strongarm-* | thumb-*)
+		cpu=arm
+		;;
+	tx39-*)
+		cpu=mipstx39
+		;;
+	tx39el-*)
+		cpu=mipstx39el
+		;;
+	x64-*)
+		cpu=x86_64
+		;;
+	xscale-* | xscalee[bl]-*)
+		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+		;;
+
+	# Recognize the canonical CPU Types that limit and/or modify the
+	# company names they are paired with.
+	cr16-*)
+		os=${os:-elf}
+		;;
+	crisv32-* | etraxfs*-*)
+		cpu=crisv32
+		vendor=axis
+		;;
+	cris-* | etrax*-*)
+		cpu=cris
+		vendor=axis
+		;;
+	crx-*)
+		os=${os:-elf}
+		;;
+	neo-tandem)
+		cpu=neo
+		vendor=tandem
+		;;
+	nse-tandem)
+		cpu=nse
+		vendor=tandem
+		;;
+	nsr-tandem)
+		cpu=nsr
+		vendor=tandem
+		;;
+	nsv-tandem)
+		cpu=nsv
+		vendor=tandem
+		;;
+	nsx-tandem)
+		cpu=nsx
+		vendor=tandem
+		;;
+	s390-*)
+		cpu=s390
+		vendor=ibm
+		;;
+	s390x-*)
+		cpu=s390x
+		vendor=ibm
+		;;
+	tile*-*)
+		os=${os:-linux-gnu}
+		;;
+
 	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
+		# Recognize the canonical CPU types that are allowed with any
+		# company name.
+		case $cpu in
+			1750a | 580 \
+			| a29k \
+			| aarch64 | aarch64_be \
+			| abacus \
+			| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+			| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+			| alphapca5[67] | alpha64pca5[67] \
+			| am33_2.0 \
+			| amdgcn \
+			| arc | arceb \
+			| arm  | arm[lb]e | arme[lb] | armv* \
+			| avr | avr32 \
+			| asmjs \
+			| ba \
+			| be32 | be64 \
+			| bfin | bpf | bs2000 \
+			| c[123]* | c30 | [cjt]90 | c4x \
+			| c8051 | clipper | craynv | csky | cydra \
+			| d10v | d30v | dlx | dsp16xx \
+			| e2k | elxsi | epiphany \
+			| f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+			| h8300 | h8500 \
+			| hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+			| hexagon \
+			| i370 | i*86 | i860 | i960 | ia16 | ia64 \
+			| ip2k | iq2000 \
+			| k1om \
+			| le32 | le64 \
+			| lm32 \
+			| m32c | m32r | m32rle \
+			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+			| m88110 | m88k | maxq | mb | mcore | mep | metag \
+			| microblaze | microblazeel \
+			| mips | mipsbe | mipseb | mipsel | mipsle \
+			| mips16 \
+			| mips64 | mips64eb | mips64el \
+			| mips64octeon | mips64octeonel \
+			| mips64orion | mips64orionel \
+			| mips64r5900 | mips64r5900el \
+			| mips64vr | mips64vrel \
+			| mips64vr4100 | mips64vr4100el \
+			| mips64vr4300 | mips64vr4300el \
+			| mips64vr5000 | mips64vr5000el \
+			| mips64vr5900 | mips64vr5900el \
+			| mipsisa32 | mipsisa32el \
+			| mipsisa32r2 | mipsisa32r2el \
+			| mipsisa32r6 | mipsisa32r6el \
+			| mipsisa64 | mipsisa64el \
+			| mipsisa64r2 | mipsisa64r2el \
+			| mipsisa64r6 | mipsisa64r6el \
+			| mipsisa64sb1 | mipsisa64sb1el \
+			| mipsisa64sr71k | mipsisa64sr71kel \
+			| mipsr5900 | mipsr5900el \
+			| mipstx39 | mipstx39el \
+			| mmix \
+			| mn10200 | mn10300 \
+			| moxie \
+			| mt \
+			| msp430 \
+			| nds32 | nds32le | nds32be \
+			| nfp \
+			| nios | nios2 | nios2eb | nios2el \
+			| none | np1 | ns16k | ns32k | nvptx \
+			| open8 \
+			| or1k* \
+			| or32 \
+			| orion \
+			| picochip \
+			| pdp10 | pdp11 | pj | pjl | pn | power \
+			| powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+			| pru \
+			| pyramid \
+			| riscv | riscv32 | riscv64 \
+			| rl78 | romp | rs6000 | rx \
+			| score \
+			| sh | shl \
+			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+			| sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+			| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+			| sparclite \
+			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+			| spu \
+			| tahoe \
+			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+			| tron \
+			| ubicom32 \
+			| v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+			| vax \
+			| visium \
+			| w65 \
+			| wasm32 | wasm64 \
+			| we32k \
+			| x86 | x86_64 | xc16x | xgate | xps100 \
+			| xstormy16 | xtensa* \
+			| ymp \
+			| z8k | z80)
+				;;
+
+			*)
+				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+				exit 1
+				;;
+		esac
 		;;
 esac
 
 # Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+case $vendor in
+	digital*)
+		vendor=dec
 		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+	commodore*)
+		vendor=cbm
 		;;
 	*)
 		;;
@@ -1326,200 +1275,244 @@
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if [ x"$os" != x"" ]
+if [ x$os != x ]
 then
 case $os in
-	# 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
+	# 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.*)
+	bluegene*)
+		os=cnk
+		;;
+	solaris1 | solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
-	-solaris)
-		os=-solaris2
+	solaris)
+		os=solaris2
 		;;
-	-svr4*)
-		os=-sysv4
+	unixware*)
+		os=sysv4.2uw
 		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
+	gnu/linux*)
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 		;;
-	# First accept the basic system types.
+	# es1800 is here to avoid being matched by es* (a different OS)
+	es1800*)
+		os=ose
+		;;
+	# Some version numbers need modification
+	chorusos*)
+		os=chorusos
+		;;
+	isc)
+		os=isc2.2
+		;;
+	sco6)
+		os=sco5v6
+		;;
+	sco5)
+		os=sco3.2v5
+		;;
+	sco4)
+		os=sco3.2v4
+		;;
+	sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		;;
+	sco3.2v[4-9]* | sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		;;
+	scout)
+		# Don't match below
+		;;
+	sco*)
+		os=sco3.2v2
+		;;
+	psos*)
+		os=psos
+		;;
+	# Now accept the basic system types.
 	# The portable systems comes first.
-	# 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* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -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* | -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* | -rdos* | -toppers* | -drops* | -es*)
+	# 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* | esix* | aix* | cnk* | sunos | sunos[34]*\
+	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+	     | sym* | kopensolaris* | plan9* \
+	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
+	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+	     | knetbsd* | mirbsd* | netbsd* \
+	     | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+	     | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
+	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+	     | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
+	     | chorusrdb* | cegcc* | glidix* \
+	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+	     | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
+	     | linux-newlib* | linux-musl* | linux-uclibc* \
+	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+	     | interix* | uwin* | mks* | rhapsody* | darwin* \
+	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
+	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
+	     | os2* | vos* | palmos* | uclinux* | nucleus* \
+	     | morphos* | superux* | rtmk* | windiss* \
+	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+	     | nsk* | powerunix)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
+	qnx*)
+		case $cpu in
+		    x86 | i*86)
 			;;
 		    *)
-			os=-nto$os
+			os=nto-$os
 			;;
 		esac
 		;;
-	-nto-qnx*)
+	hiux*)
+		os=hiuxwe2
 		;;
-	-nto*)
+	nto-qnx*)
+		;;
+	nto*)
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+	sim | xray | os68k* | v88r* \
+	    | windows* | osx | abug | netware* | os9* \
+	    | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
 		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
+	linux-dietlibc)
+		os=linux-dietlibc
 		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
+	linux*)
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+	lynx*178)
+		os=lynxos178
 		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+	lynx*5)
+		os=lynxos5
 		;;
-	-opened*)
-		os=-openedition
+	lynx*)
+		os=lynxos
 		;;
-	-os400*)
-		os=-os400
+	mac*)
+		os=`echo "$os" | sed -e 's|mac|macos|'`
 		;;
-	-wince*)
-		os=-wince
+	opened*)
+		os=openedition
 		;;
-	-osfrose*)
-		os=-osfrose
+	os400*)
+		os=os400
 		;;
-	-osf*)
-		os=-osf
+	sunos5*)
+		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
 		;;
-	-utek*)
-		os=-bsd
+	sunos6*)
+		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
 		;;
-	-dynix*)
-		os=-bsd
+	wince*)
+		os=wince
 		;;
-	-acis*)
-		os=-aos
+	utek*)
+		os=bsd
 		;;
-	-atheos*)
-		os=-atheos
+	dynix*)
+		os=bsd
 		;;
-	-syllable*)
-		os=-syllable
+	acis*)
+		os=aos
 		;;
-	-386bsd)
-		os=-bsd
+	atheos*)
+		os=atheos
 		;;
-	-ctix* | -uts*)
-		os=-sysv
+	syllable*)
+		os=syllable
 		;;
-	-nova*)
-		os=-rtmk-nova
+	386bsd)
+		os=bsd
 		;;
-	-ns2 )
-		os=-nextstep2
+	ctix* | uts*)
+		os=sysv
 		;;
-	-nsk*)
-		os=-nsk
+	nova*)
+		os=rtmk-nova
+		;;
+	ns2)
+		os=nextstep2
 		;;
 	# Preserve the version number of sinix5.
-	-sinix5.*)
+	sinix5.*)
 		os=`echo $os | sed -e 's|sinix|sysv|'`
 		;;
-	-sinix*)
-		os=-sysv4
+	sinix*)
+		os=sysv4
 		;;
-	-tpf*)
-		os=-tpf
+	tpf*)
+		os=tpf
 		;;
-	-triton*)
-		os=-sysv3
+	triton*)
+		os=sysv3
 		;;
-	-oss*)
-		os=-sysv3
+	oss*)
+		os=sysv3
 		;;
-	-svr4)
-		os=-sysv4
+	svr4*)
+		os=sysv4
 		;;
-	-svr3)
-		os=-sysv3
+	svr3)
+		os=sysv3
 		;;
-	-sysvr4)
-		os=-sysv4
+	sysvr4)
+		os=sysv4
 		;;
-	# This must come after -sysvr4.
-	-sysv*)
+	# This must come after sysvr4.
+	sysv*)
 		;;
-	-ose*)
-		os=-ose
+	ose*)
+		os=ose
 		;;
-	-es1800*)
-		os=-ose
+	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+		os=mint
 		;;
-	-xenix)
-		os=-xenix
+	zvmoe)
+		os=zvmoe
 		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
+	dicos*)
+		os=dicos
 		;;
-	-aros*)
-		os=-aros
+	pikeos*)
+		# Until real need of OS specific support for
+		# particular features comes up, bare metal
+		# configurations are quite functional.
+		case $cpu in
+		    arm*)
+			os=eabi
+			;;
+		    *)
+			os=elf
+			;;
+		esac
 		;;
-	-kaos*)
-		os=-kaos
+	nacl*)
 		;;
-	-zvmoe)
-		os=-zvmoe
+	ios)
 		;;
-	-dicos*)
-		os=-dicos
+	none)
 		;;
-	-nacl*)
-		;;
-	-none)
+	*-eabi)
 		;;
 	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
 		exit 1
 		;;
 esac
@@ -1535,258 +1528,265 @@
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
-case $basic_machine in
+case $cpu-$vendor in
 	score-*)
-		os=-elf
+		os=elf
 		;;
 	spu-*)
-		os=-elf
+		os=elf
 		;;
 	*-acorn)
-		os=-riscix1.2
+		os=riscix1.2
 		;;
 	arm*-rebel)
-		os=-linux
+		os=linux
 		;;
 	arm*-semi)
-		os=-aout
+		os=aout
 		;;
 	c4x-* | tic4x-*)
-		os=-coff
+		os=coff
+		;;
+	c8051-*)
+		os=elf
+		;;
+	clipper-intergraph)
+		os=clix
 		;;
 	hexagon-*)
-		os=-elf
+		os=elf
 		;;
 	tic54x-*)
-		os=-coff
+		os=coff
 		;;
 	tic55x-*)
-		os=-coff
+		os=coff
 		;;
 	tic6x-*)
-		os=-coff
+		os=coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
-		os=-tops20
+		os=tops20
 		;;
 	pdp11-*)
-		os=-none
+		os=none
 		;;
 	*-dec | vax-*)
-		os=-ultrix4.2
+		os=ultrix4.2
 		;;
 	m68*-apollo)
-		os=-domain
+		os=domain
 		;;
 	i386-sun)
-		os=-sunos4.0.2
+		os=sunos4.0.2
 		;;
 	m68000-sun)
-		os=-sunos3
+		os=sunos3
 		;;
 	m68*-cisco)
-		os=-aout
+		os=aout
 		;;
 	mep-*)
-		os=-elf
+		os=elf
 		;;
 	mips*-cisco)
-		os=-elf
+		os=elf
 		;;
 	mips*-*)
-		os=-elf
+		os=elf
 		;;
 	or32-*)
-		os=-coff
+		os=coff
 		;;
 	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
+		os=sysv3
 		;;
 	sparc-* | *-sun)
-		os=-sunos4.1.1
+		os=sunos4.1.1
+		;;
+	pru-*)
+		os=elf
 		;;
 	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
+		os=beos
 		;;
 	*-ibm)
-		os=-aix
+		os=aix
 		;;
 	*-knuth)
-		os=-mmixware
+		os=mmixware
 		;;
 	*-wec)
-		os=-proelf
+		os=proelf
 		;;
 	*-winbond)
-		os=-proelf
+		os=proelf
 		;;
 	*-oki)
-		os=-proelf
+		os=proelf
 		;;
 	*-hp)
-		os=-hpux
+		os=hpux
 		;;
 	*-hitachi)
-		os=-hiux
+		os=hiux
 		;;
 	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
+		os=sysv
 		;;
 	*-cbm)
-		os=-amigaos
+		os=amigaos
 		;;
 	*-dg)
-		os=-dgux
+		os=dgux
 		;;
 	*-dolphin)
-		os=-sysv3
+		os=sysv3
 		;;
 	m68k-ccur)
-		os=-rtu
+		os=rtu
 		;;
 	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
+		os=luna
 		;;
 	*-next)
-		os=-nextstep3
+		os=nextstep
+		;;
+	*-sequent)
+		os=ptx
+		;;
+	*-crds)
+		os=unos
+		;;
+	*-ns)
+		os=genix
+		;;
+	i370-*)
+		os=mvs
 		;;
 	*-gould)
-		os=-sysv
+		os=sysv
 		;;
 	*-highlevel)
-		os=-bsd
+		os=bsd
 		;;
 	*-encore)
-		os=-bsd
+		os=bsd
 		;;
 	*-sgi)
-		os=-irix
+		os=irix
 		;;
 	*-siemens)
-		os=-sysv4
+		os=sysv4
 		;;
 	*-masscomp)
-		os=-rtu
+		os=rtu
 		;;
 	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
+		os=uxpv
 		;;
 	*-rom68k)
-		os=-coff
+		os=coff
 		;;
 	*-*bug)
-		os=-coff
+		os=coff
 		;;
 	*-apple)
-		os=-macos
+		os=macos
 		;;
 	*-atari*)
-		os=-mint
+		os=mint
+		;;
+	*-wrs)
+		os=vxworks
 		;;
 	*)
-		os=-none
+		os=none
 		;;
 esac
 fi
 
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
+case $vendor in
+	unknown)
 		case $os in
-			-riscix*)
+			riscix*)
 				vendor=acorn
 				;;
-			-sunos*)
+			sunos*)
 				vendor=sun
 				;;
-			-cnk*|-aix*)
+			cnk*|-aix*)
 				vendor=ibm
 				;;
-			-beos*)
+			beos*)
 				vendor=be
 				;;
-			-hpux*)
+			hpux*)
 				vendor=hp
 				;;
-			-mpeix*)
+			mpeix*)
 				vendor=hp
 				;;
-			-hiux*)
+			hiux*)
 				vendor=hitachi
 				;;
-			-unos*)
+			unos*)
 				vendor=crds
 				;;
-			-dgux*)
+			dgux*)
 				vendor=dg
 				;;
-			-luna*)
+			luna*)
 				vendor=omron
 				;;
-			-genix*)
+			genix*)
 				vendor=ns
 				;;
-			-mvs* | -opened*)
+			clix*)
+				vendor=intergraph
+				;;
+			mvs* | opened*)
 				vendor=ibm
 				;;
-			-os400*)
+			os400*)
 				vendor=ibm
 				;;
-			-ptx*)
+			ptx*)
 				vendor=sequent
 				;;
-			-tpf*)
+			tpf*)
 				vendor=ibm
 				;;
-			-vxsim* | -vxworks* | -windiss*)
+			vxsim* | vxworks* | windiss*)
 				vendor=wrs
 				;;
-			-aux*)
+			aux*)
 				vendor=apple
 				;;
-			-hms*)
+			hms*)
 				vendor=hitachi
 				;;
-			-mpw* | -macos*)
+			mpw* | macos*)
 				vendor=apple
 				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+			*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
 				vendor=atari
 				;;
-			-vos*)
+			vos*)
 				vendor=stratus
 				;;
 		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
 		;;
 esac
 
-echo $basic_machine$os
+echo "$cpu-$vendor-$os"
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
diff --git a/build-aux/cross-options.pl b/build-aux/cross-options.pl
index 7762e27..9552c27 100755
--- a/build-aux/cross-options.pl
+++ b/build-aux/cross-options.pl
@@ -12,68 +12,74 @@
 {
     if (/^\s*             # Initial spaces.
         (?:(-\w),\s+)?    # $1: $short: Possible short option.
-        (--[-\w]+)        # $2: $long:  Long option.
+        (--[-\w]+)        # $2: $long:  Mandatory 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)
-	{
+        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]]),
+            my $dir_arg = $arg;
+            # If the argument is complete (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;
+            $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]')
+            {
+                # -D/-F do not add quotes to the argument.
+                $dir_arg =
+                    $dir eq "%define"
+                    ? '@var{name} [@var{value}]'
+                    : '@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";
+    # Couldn't find a means to escape @ in the format (for @item, @tab), so
+    # pass it as a literal to print.
+format STDOUT =
+@item @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @tab @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @tab @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+{
+  '@', '@option{' . $long . '}',
+  '@', $option{$long} ? ('@option{' . $option{$long} . '}') : '',
+  '@', $directive{$long} ? ('@code{' . $directive{$long} . '}') : ''
+}
+.
+    write;
 }
diff --git a/build-aux/depcomp b/build-aux/depcomp
index 3f02f5d..3f27387 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=2012-10-18.11; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2019 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,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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
@@ -552,6 +552,7 @@
   G
   p
 }' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
   rm -f "$tmpdepfile"
   ;;
 
@@ -782,9 +783,9 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/do-release-commit-and-tag b/build-aux/do-release-commit-and-tag
index fa89e76..339c5df 100755
--- a/build-aux/do-release-commit-and-tag
+++ b/build-aux/do-release-commit-and-tag
@@ -3,11 +3,11 @@
 # 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
+VERSION=2018-03-07.03 # UTC
 
 # Note: this is a bash script (could be zsh or dash)
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2019 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
@@ -20,7 +20,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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # Written by Jim Meyering
 
@@ -67,7 +67,7 @@
   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>
+License GPLv3+: GNU GPL version 3 or later <https://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
@@ -94,7 +94,7 @@
       opt=$(echo "$1" | sed -e 's/=.*//')
       val=$(echo "$1" | sed -e 's/[^=]*=//')
       shift
-      set dummy "$opt" "$val" ${1+"$@"}; shift
+      set dummy "$opt" "$val" "$@"; shift
       ;;
   esac
 
@@ -143,7 +143,7 @@
 
 # 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
+test "$curr_br" = "refs/heads/$branch" || die not on branch $branch
 
 # Extract package name from Makefile.
 Makefile=$builddir/Makefile
@@ -171,9 +171,9 @@
 
 # Local variables:
 # indent-tabs-mode: nil
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "VERSION="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: " # UTC"
 # End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
index 0c0bc4b..fd6a4b8 100755
--- a/build-aux/gendocs.sh
+++ b/build-aux/gendocs.sh
@@ -2,10 +2,9 @@
 # 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
+scriptversion=2019-01-01.00
 
-# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-# Free Software Foundation, Inc.
+# Copyright 2003-2019 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
@@ -18,20 +17,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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #
 # Original author: Mohit Agarwal.
-# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
+# Send bug reports and any other correspondence to bug-gnulib@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
+# available from the Gnulib repository:
 #
-# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
 
 # TODO:
-# - image importation was only implemented for HTML generated by
+# - image importing 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.
@@ -39,12 +37,12 @@
 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"
+scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
+templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
 
 : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
 : ${MAKEINFO="makeinfo"}
-: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${TEXI2DVI="texi2dvi"}
 : ${DOCBOOK2HTML="docbook2html"}
 : ${DOCBOOK2PDF="docbook2pdf"}
 : ${DOCBOOK2TXT="docbook2txt"}
@@ -54,9 +52,28 @@
 unset CDPATH
 unset use_texi2html
 
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org  # please override with --email
+commonarg= # passed to all makeinfo/texi2html invcations.
+dirargs=   # passed to all tools (-I dir).
+dirs=      # -I directories.
+htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
+default_htmlarg=true
+infoarg=--no-split
+generate_ascii=true
+generate_html=true
+generate_info=true
+generate_tex=true
+outdir=manual
+source_extra=
+split=node
+srcfile=
+texarg="-t @finalout"
+
 version="gendocs.sh $scriptversion
 
-Copyright 2012 Free Software Foundation, Inc.
+Copyright 2019 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."
@@ -66,19 +83,31 @@
 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
+  https://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.
+  --email ADR use ADR as contact in generated web pages; always give this.
+
+  -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.
+  --common ARG pass ARG in all invocations.
+  --html ARG   pass ARG to makeinfo or texi2html for HTML targets,
+                 instead of '$htmlarg'.
+  --info ARG   pass ARG to makeinfo for Info, instead of --no-split.
+  --no-ascii   skip generating the plain text output.
+  --no-html    skip generating the html output.
+  --no-info    skip generating the info output.
+  --no-tex     skip generating the dvi and pdf output.
+  --source ARG include ARG in tar archive of sources.
+  --split HOW  make split HTML by node, section, chapter; default node.
+  --tex ARG    pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
+
+  --texi2html  use texi2html to make HTML target, with all split versions.
+  --docbook    convert through DocBook too (xml, txt, html, pdf).
+
+  --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\"
 
@@ -92,8 +121,8 @@
 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.
+Please use the --email ADDRESS option so your own bug-reporting
+address will be used 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
@@ -117,38 +146,37 @@
 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.
+DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
 
 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.
+Email bug reports or enhancement requests to bug-gnulib@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;;
+    -s)          shift; srcfile=$1;;
+    -o)          shift; outdir=$1;;
+    -I)          shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
+    --common)    shift; commonarg=$1;;
+    --docbook)   docbook=yes;;
+    --email)     shift; EMAIL=$1;;
+    --html)      shift; default_htmlarg=false; htmlarg=$1;;
+    --info)      shift; infoarg=$1;;
+    --no-ascii)  generate_ascii=false;;
+    --no-html)   generate_ascii=false;;
+    --no-info)   generate_info=false;;
+    --no-tex)    generate_tex=false;;
+    --source)    shift; source_extra=$1;;
+    --split)     shift; split=$1;;
+    --tex)       shift; texarg=$1;;
     --texi2html) use_texi2html=1;;
+
+    --help)      echo "$usage"; exit 0;;
+    --version)   echo "$version"; exit 0;;
     -*)
       echo "$0: Unknown option \`$1'." >&2
       echo "$0: Try \`--help' for more information." >&2
@@ -166,9 +194,17 @@
   shift
 done
 
+# makeinfo uses the dirargs, but texi2dvi doesn't.
+commonarg=" $dirargs $commonarg"
+
 # For most of the following, the base name is just $PACKAGE
 base=$PACKAGE
 
+if $default_htmlarg && test -n "$use_texi2html"; then
+  # The legacy texi2html doesn't support TOP_NODE_UP_URL
+  htmlarg="--css-ref=/software/gnulib/manual.css"
+fi
+
 if test -n "$srcfile"; then
   # but here, we use the basename of $srcfile
   base=`basename "$srcfile"`
@@ -202,8 +238,9 @@
 
 # copy_images OUTDIR HTML-FILE...
 # -------------------------------
-# Copy all the images needed by the HTML-FILEs into OUTDIR.  Look
-# for them in the -I directories.
+# Copy all the images needed by the HTML-FILEs into OUTDIR.
+# Look for them in . and the -I directories; this is simpler than what
+# makeinfo supports with -I, but hopefully it will suffice.
 copy_images()
 {
   local odir
@@ -213,7 +250,7 @@
 BEGIN {
   \$me = '$prog';
   \$odir = '$odir';
-  @dirs = qw($dirs);
+  @dirs = qw(. $dirs);
 }
 " -e '
 /<img src="(.*?)"/g && ++$need{$1};
@@ -247,46 +284,64 @@
   *)  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"
+echo "Making output for $srcfile"
+echo " in `pwd`"
 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"
+# 
+if $generate_info; then
+  cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
+  echo "Generating info... ($cmd)"
+  rm -f $PACKAGE.info* # get rid of any strays
+  eval "$cmd"
+  tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
+  ls -l "$outdir/$PACKAGE.info.tar.gz"
+  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.
+fi  # end info
 
-# compress/finish dvi:
-gzip -f -9 $PACKAGE.dvi
-dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
-mv $PACKAGE.dvi.gz "$outdir/"
+# 
+if $generate_tex; then
+  cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
+  printf "\nGenerating dvi... ($cmd)\n"
+  eval "$cmd"
+  # compress/finish dvi:
+  gzip -f -9 $PACKAGE.dvi
+  dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+  mv $PACKAGE.dvi.gz "$outdir/"
+  ls -l "$outdir/$PACKAGE.dvi.gz"
 
-cmd="$SETLANG $TEXI2DVI --pdf $commonarg \"$srcfile\""
-echo "Generating pdf ... ($cmd)"
-eval "$cmd"
-pdf_size=`calcsize $PACKAGE.pdf`
-mv $PACKAGE.pdf "$outdir/"
+  cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
+  printf "\nGenerating pdf... ($cmd)\n"
+  eval "$cmd"
+  pdf_size=`calcsize $PACKAGE.pdf`
+  mv $PACKAGE.pdf "$outdir/"
+  ls -l "$outdir/$PACKAGE.pdf"
+fi # end tex (dvi + pdf)
 
-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/"
+# 
+if $generate_ascii; then
+  opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+  printf "\nGenerating ascii... ($cmd)\n"
+  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/"
+  ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
+fi
 
+# 
+
+if $generate_html; then
+# Split HTML at level $1.  Used for texi2html.
 html_split()
 {
-  opt="--split=$1 $commonarg $htmlarg --node-files"
+  opt="--split=$1 --node-files $commonarg $htmlarg"
   cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
-  echo "Generating html by $1... ($cmd)"
+  printf "\nGenerating html by $1... ($cmd)\n"
   eval "$cmd"
   split_html_dir=$PACKAGE.html
   (
@@ -304,7 +359,7 @@
 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)"
+  printf "\nGenerating monolithic html... ($cmd)\n"
   rm -rf $PACKAGE.html  # in case a directory is left over
   eval "$cmd"
   html_mono_size=`calcsize $PACKAGE.html`
@@ -312,24 +367,38 @@
   html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
   copy_images "$outdir/" $PACKAGE.html
   mv $PACKAGE.html "$outdir/"
+  ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
 
-  opt="--html -o $PACKAGE.html $commonarg $htmlarg"
+  # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
+  # it just always split by node.  So if we're splitting by node anyway,
+  # leave it out.
+  if test "x$split" = xnode; then
+    split_arg=
+  else
+    split_arg=--split=$split
+  fi
+  #
+  opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
   cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
-  echo "Generating html by node... ($cmd)"
+  printf "\nGenerating html by $split... ($cmd)\n"
   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" -- *
+    tar -czf "$abs_outdir/$PACKAGE.html_$split.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
+  eval \
+    html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
+  rm -rf "$outdir/html_$split/"
+  mv $split_html_dir "$outdir/html_$split/"
+  du -s "$outdir/html_$split/"
+  ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
+
+else # use texi2html:
   opt="--output $PACKAGE.html $commonarg $htmlarg"
   cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
-  echo "Generating monolithic html... ($cmd)"
+  printf "\nGenerating monolithic html with texi2html... ($cmd)\n"
   rm -rf $PACKAGE.html  # in case a directory is left over
   eval "$cmd"
   html_mono_size=`calcsize $PACKAGE.html`
@@ -341,20 +410,25 @@
   html_split chapter
   html_split section
 fi
+fi # end html
 
-echo Making .tar.gz for sources...
+# 
+printf "\nMaking .tar.gz for sources...\n"
 d=`dirname $srcfile`
 (
   cd "$d"
-  srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true
-  tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+  srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
+  tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+  ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
 )
 texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
 
+# 
+# Do everything again through docbook.
 if test -n "$docbook"; then
   opt="-o - --docbook $commonarg"
   cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
-  echo "Generating docbook XML... ($cmd)"
+  printf "\nGenerating docbook XML... ($cmd)\n"
   eval "$cmd"
   docbook_xml_size=`calcsize $PACKAGE-db.xml`
   gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
@@ -364,7 +438,7 @@
   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)"
+  printf "\nGenerating docbook HTML... ($cmd)\n"
   eval "$cmd"
   (
     cd ${split_html_db_dir} || exit 1
@@ -377,24 +451,26 @@
   rmdir ${split_html_db_dir}
 
   cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
-  echo "Generating docbook ASCII... ($cmd)"
+  printf "\nGenerating docbook ASCII... ($cmd)\n"
   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)"
+  printf "\nGenerating docbook PDF... ($cmd)\n"
   eval "$cmd"
   docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
   mv $PACKAGE-db.pdf "$outdir/"
 fi
 
-echo "Writing index file..."
+# 
+printf "\nMaking index.html for $PACKAGE...\n"
 if test -z "$use_texi2html"; then
-   CONDS="/%%IF  *HTML_SECTION%%/,/%%ENDIF  *HTML_SECTION%%/d;\
-          /%%IF  *HTML_CHAPTER%%/,/%%ENDIF  *HTML_CHAPTER%%/d"
+  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"
+  # should take account of --split here.
+  CONDS="/%%ENDIF.*%%/d;/%%IF  *HTML_SECTION%%/d;/%%IF  *HTML_CHAPTER%%/d"
 fi
 
 curdate=`$SETLANG date '+%B %d, %Y'`
@@ -427,7 +503,7 @@
 echo "Done, see $outdir/ subdirectory for new files."
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-end: "$"
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
index 0fa9063..d855645 100755
--- a/build-aux/git-version-gen
+++ b/build-aux/git-version-gen
@@ -1,8 +1,8 @@
 #!/bin/sh
 # Print a version string.
-scriptversion=2012-03-18.17; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007-2019 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
@@ -15,9 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
 # 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)
@@ -72,9 +72,10 @@
 
 me=$0
 
+year=`expr "$scriptversion" : '\([^-]*\)'`
 version="git-version-gen $scriptversion
 
-Copyright 2011 Free Software Foundation, Inc.
+Copyright $year 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."
@@ -85,7 +86,9 @@
 
 Options:
 
-   --prefix           prefix of git tags (default 'v')
+   --prefix PREFIX    prefix of git tags (default 'v')
+   --fallback VERSION
+                      fallback version to use if \"git --version\" fails
 
    --help             display this help and exit
    --version          output version information and exit
@@ -93,20 +96,22 @@
 Running without arguments will suffice in most cases."
 
 prefix=v
+fallback=
 
 while test $# -gt 0; do
   case $1 in
     --help) echo "$usage"; exit 0;;
     --version) echo "$version"; exit 0;;
-    --prefix) shift; prefix="$1";;
+    --prefix) shift; prefix=${1?};;
+    --fallback) shift; fallback=${1?};;
     -*)
       echo "$0: Unknown option '$1'." >&2
       echo "$0: Try '--help' for more information." >&2
       exit 1;;
     *)
-      if test -z "$tarball_version_file"; then
+      if test "x$tarball_version_file" = x; then
         tarball_version_file="$1"
-      elif test -z "$tag_sed_script"; then
+      elif test "x$tag_sed_script" = x; then
         tag_sed_script="$1"
       else
         echo "$0: extra non-option argument '$1'." >&2
@@ -116,7 +121,7 @@
   shift
 done
 
-if test -z "$tarball_version_file"; then
+if test "x$tarball_version_file" = x; then
     echo "$usage"
     exit 1
 fi
@@ -137,14 +142,12 @@
     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
+    test "x$v" = x \
+        && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2
 fi
 
-if test -n "$v"
+if test "x$v" != x
 then
     : # use $v
 # Otherwise, if there is at least one git commit involving the working
@@ -163,9 +166,10 @@
     # 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 ;;
-        *-*)
+    vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
+    case $vprefix in
+        *-*) : git describe is probably 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
@@ -180,12 +184,14 @@
             ;;
     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-/'`;
+    # Change the penultimate "-" to ".", for version-comparing tools.
+    # Remove the "g" to save a byte.
+    v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
     v_from_git=1
-else
+elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
     v=UNKNOWN
+else
+    v=$fallback
 fi
 
 v=`echo "$v" |sed "s/^$prefix//"`
@@ -193,8 +199,8 @@
 # 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.
+if test "x$v_from_git" != x; then
+  # Don't declare a version "dirty" merely because a timestamp has changed.
   git update-index --refresh > /dev/null 2>&1
 
   dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
@@ -209,12 +215,12 @@
 fi
 
 # Omit the trailing newline, so that m4_esyscmd can use the result directly.
-echo "$v" | tr -d "$nl"
+printf %s "$v"
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 5184edc..163c48c 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -1,31 +1,46 @@
-eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
-  & eval 'exec perl -wS "$0" $argv:q'
-    if 0;
+#!/bin/sh
+#! -*-perl-*-
+
 # 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.
-
+# Copyright (C) 2008-2019 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/>.
-
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+#
 # Written by Jim Meyering
 
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line.  The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name.  The second line is essential for perl and is
+# also useful for editing this file in Emacs.  The next two lines below
+# are valid code in both sh and perl.  When executed by sh, they re-execute
+# the script through the perl program found in $PATH.  The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh.  When executed by  perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+     if 0;
+
+my $VERSION = '2018-03-07 03:47'; # 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.
+
 use strict;
 use warnings;
 use Getopt::Long;
@@ -33,7 +48,7 @@
 
 (my $ME = $0) =~ s|.*/||;
 
-# use File::Coda; # http://meyering.net/code/Coda/
+# use File::Coda; # https://meyering.net/code/Coda/
 END {
   defined fileno STDOUT or return;
   close STDOUT and return;
@@ -72,6 +87,9 @@
                   directory can be derived.
    --since=DATE convert only the logs since DATE;
                   the default is to convert all log entries.
+   --until=DATE convert only the logs older than DATE.
+   --ignore-matching=PAT ignore commit messages whose first lines match PAT.
+   --ignore-line=PAT ignore lines of commit messages that match PAT.
    --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'
@@ -171,7 +189,7 @@
 
       if (!$in_code)
         {
-          $line =~ /^([0-9a-fA-F]{40})$/
+          $line =~ /^([[:xdigit:]]{40})$/
             or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
               $fail = 1, next;
           $sha = lc $1;
@@ -220,10 +238,13 @@
 
 {
   my $since_date;
+  my $until_date;
   my $format_string = '%s%n%b%n';
   my $amend_file;
   my $append_dot = 0;
   my $cluster = 1;
+  my $ignore_matching;
+  my $ignore_line;
   my $strip_tab = 0;
   my $strip_cherry_pick = 0;
   my $srcdir;
@@ -232,10 +253,13 @@
      help => sub { usage 0 },
      version => sub { print "$ME version $VERSION\n"; exit },
      'since=s' => \$since_date,
+     'until=s' => \$until_date,
      'format=s' => \$format_string,
      'amend=s' => \$amend_file,
      'append-dot' => \$append_dot,
      'cluster!' => \$cluster,
+     'ignore-matching=s' => \$ignore_matching,
+     'ignore-line=s' => \$ignore_line,
      'strip-tab' => \$strip_tab,
      'strip-cherry-pick' => \$strip_cherry_pick,
      'srcdir=s' => \$srcdir,
@@ -243,6 +267,8 @@
 
   defined $since_date
     and unshift @ARGV, "--since=$since_date";
+  defined $until_date
+    and unshift @ARGV, "--until=$until_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.
@@ -259,6 +285,7 @@
   my $prev_multi_paragraph;
   my $prev_date_line = '';
   my @prev_coauthors = ();
+  my @skipshas = ();
   while (1)
     {
       defined (my $in = <PIPE>)
@@ -276,9 +303,22 @@
       my ($sha, $rest) = split ':', $log, 2;
       defined $sha
         or die "$ME:$.: malformed log entry\n";
-      $sha =~ /^[0-9a-fA-F]{40}$/
+      $sha =~ /^[[:xdigit:]]{40}$/
         or die "$ME:$.: invalid SHA1: $sha\n";
 
+      my $skipflag = 0;
+      if (@skipshas)
+        {
+          foreach(@skipshas)
+            {
+              if ($sha =~ /^$_/)
+                {
+                  $skipflag = $_;
+                  last;
+                }
+            }
+        }
+
       # If this commit's log requires any transformation, do it now.
       my $code = $amend_code->{$sha};
       if (defined $code)
@@ -306,7 +346,7 @@
           $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
         }
 
-      my @line = split "\n", $rest;
+      my @line = split /[ \t]*\n/, $rest;
       my $author_line = shift @line;
       defined $author_line
         or die "$ME:$.: unexpected EOF\n";
@@ -316,17 +356,18 @@
 
       # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
       # `(tiny change)' annotation.
-      my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+      my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
                   ? '  (tiny change)' : '');
 
       my $date_line = sprintf "%s  %s$tiny\n",
-        strftime ("%F", localtime ($1)), $2;
+        strftime ("%Y-%m-%d", 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:[ ]
+                       |Tiny-change:[ ]
                        )/x, @line;
 
       # Remove leading and trailing blank lines.
@@ -336,68 +377,109 @@
           while ($line[$#line] =~ /^\s*$/) { pop @line; }
         }
 
-      # Record whether there are two or more paragraphs.
-      my $multi_paragraph = grep /^\s*$/, @line;
+      # Handle Emacs gitmerge.el "skipped" commits.
+      # Yes, this should be controlled by an option.  So sue me.
+      if ( grep /^(; )?Merge from /, @line )
+      {
+          my $found = 0;
+          foreach (@line)
+          {
+              if (grep /^The following commit.*skipped:$/, $_)
+              {
+                  $found = 1;
+                  ## Reset at each merge to reduce chance of false matches.
+                  @skipshas = ();
+                  next;
+              }
+              if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/)
+              {
+                  push ( @skipshas, $1 );
+              }
+          }
+      }
 
-      # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
-      # standard multi-author ChangeLog format.
-      for (@coauthors)
+      # Ignore commits that match the --ignore-matching pattern, if specified.
+      if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
         {
-          s/^Co-authored-by:\s*/\t    /;
-          s/\s*</  </;
-
-          /<.*?@.*\..*>/
-            or warn "$ME: warning: missing email address for "
-              . substr ($_, 5) . "\n";
+          $skipflag = 1;
+        }
+      elsif ($skipflag)
+        {
+          ## Perhaps only warn if a pattern matches more than once?
+          warn "$ME: warning: skipping $sha due to $skipflag\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)
+      if (! $skipflag)
         {
-          $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 (defined $ignore_line && @line)
             {
-              # 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] .= '.';
-                }
+              @line = grep ! /$ignore_line/, @line;
+              while ($line[$#line] =~ /^\s*$/) { pop @line; }
             }
 
-          # Remove one additional leading TAB from each line.
-          $strip_tab
-            and map { s/^\t// } @line;
+          # Record whether there are two or more paragraphs.
+          my $multi_paragraph = grep /^\s*$/, @line;
 
-          # Prefix each non-empty line with a TAB.
-          @line = map { length $_ ? "\t$_" : '' } @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*</  </;
 
-          print "\n", join ("\n", @line), "\n";
+              /<.*?@.*\..*>/
+                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/etc. 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>)
@@ -424,9 +506,10 @@
 # Local Variables:
 # mode: perl
 # indent-tabs-mode: nil
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-line-limit: 50
 # time-stamp-start: "my $VERSION = '"
 # time-stamp-format: "%:y-%02m-%02d %02H:%02M"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "'; # UTC"
 # End:
diff --git a/build-aux/gnu-web-doc-update b/build-aux/gnu-web-doc-update
index 4acd69d..0d52171 100755
--- a/build-aux/gnu-web-doc-update
+++ b/build-aux/gnu-web-doc-update
@@ -1,15 +1,10 @@
 #!/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.
+# https://www.gnu.org/software/$pkg/manual/
 
-VERSION=2009-07-21.16; # UTC
+VERSION=2018-03-07.03; # UTC
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2019 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
@@ -22,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 ME=$(basename "$0")
 warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
@@ -35,10 +30,17 @@
 
 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/
+https://www.gnu.org/software/\$pkg/manual/
+
+This script 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.
 
 Options:
   -C, --builddir=DIR  location of (configured) Makefile (default: .)
+  -n, --dry-run       don't actually commit anything
+  -m, --mirror        remove out of date files from document server
   --help              print this help, then exit
   --version           print version number, then exit
 
@@ -53,7 +55,7 @@
   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>
+License GPLv3+: GNU GPL version 3 or later <https://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
@@ -100,12 +102,13 @@
 # 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=.
+dryrun=
+rm_stale='echo'
 while test $# != 0
 do
   # Handle --option=value by splitting apart and putting back on argv.
@@ -114,13 +117,15 @@
       opt=$(echo "$1" | sed -e 's/=.*//')
       val=$(echo "$1" | sed -e 's/[^=]*=//')
       shift
-      set dummy "$opt" "$val" ${1+"$@"}; shift
+      set dummy "$opt" "$val" "$@"; shift
       ;;
   esac
 
   case $1 in
     --help|--version) ${1#--};;
     -C|--builddir) shift; builddir=$1; shift ;;
+    -n|--dry-run) dryrun=echo; shift;;
+    -m|--mirror) rm_stale=''; shift;;
     --*) die "unrecognized option: $1";;
     *) break;;
   esac
@@ -139,7 +144,7 @@
 cleanup()
 {
   __st=$?
-  rm -rf "$tmp"
+  $dryrun rm -rf "$tmp"
   $GIT checkout "$current_branch"
   $GIT submodule update --recursive
   $GIT branch -d $tmp_branch
@@ -157,6 +162,7 @@
 ./bootstrap
 srcdir=$(pwd)
 cd "$builddir"
+builddir=$(pwd)
   ./config.status --recheck
   ./config.status
   make
@@ -172,18 +178,33 @@
 (
   cd $tmp/$pkg/manual
 
-  # Add any new files:
-  $CVSU --types='?'                             \
-    | sed s/..//                                \
-    | $XARGS --no-run-if-empty -- $CVS add -ko
+  # Add all the files.  This is simpler than trying to add only the
+  # new ones because of new directories
+  # First add non empty dirs individually
+  find . -name CVS -prune -o -type d \! -empty -print             \
+    | $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko
+  # Now add all files
+  find . -name CVS -prune -o -type f -print             \
+    | $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
 
-  $CVS ci -m $version
+  # Report/Remove stale files
+  #   excluding doc server specific files like CVS/* and .symlinks
+  if test -n "$rm_stale"; then
+    echo 'Consider the --mirror option if all of the manual is generated,' >&2
+    echo 'which will run `cvs remove` to remove stale files.' >&2
+  fi
+  { find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print
+    (cd "$builddir"/doc/manual/ && find . -type f -print | sed p)
+  } | sort | uniq -u \
+    | $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f
+
+  $dryrun $CVS ci -m $version
 )
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "VERSION="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/gnupload b/build-aux/gnupload
index 6eecef4..afbafa9 100755
--- a/build-aux/gnupload
+++ b/build-aux/gnupload
@@ -1,9 +1,9 @@
 #!/bin/sh
 # Sign files and upload them.
 
-scriptversion=2012-12-11.16; # UTC
+scriptversion=2018-05-19.18; # UTC
 
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2019 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,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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.
@@ -24,7 +24,30 @@
 
 set -e
 
-GPG='gpg --batch --no-tty'
+GPG=gpg
+# Choose the proper version of gpg, so as to avoid a
+# "gpg-agent is not available in this session" error
+# when gpg-agent is version 3 but gpg is still version 1.
+# FIXME-2020: remove, once all major distros ship gpg version 3 as /usr/bin/gpg
+gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
+case "$gpg_agent_version" in
+  2.*)
+    gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
+    case "$gpg_version" in
+      1.*)
+        if (type gpg2) >/dev/null 2>/dev/null; then
+          # gpg2 is present.
+          GPG=gpg2
+        else
+          # gpg2 is missing. Ubuntu users should install the package 'gnupg2'.
+          echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2
+        fi
+        ;;
+    esac
+    ;;
+esac
+
+GPG="${GPG} --batch --no-tty"
 conffile=.gnuploadrc
 to=
 dry_run=false
@@ -39,9 +62,8 @@
 
 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.
+Sign all FILES, and process them at the destinations specified with --to.
+If CMD is not given, it defaults to uploading.  See examples below.
 
 Commands:
   --delete                 delete FILES from destination
@@ -50,19 +72,18 @@
   --                       treat the remaining arguments as files to upload
 
 Options:
-  --help                   print this help text and exit
-  --to DEST                specify one destination for FILES
+  --to DEST                specify a destination DEST 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
+  -n, --dry-run            do nothing, show what would have been done
                            (including the constructed directive file)
   --version                output version information and exit
+  -h, --help               print this help text 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:
@@ -80,6 +101,9 @@
 actual command line options.  Use this to keep your defaults.  Comments
 (#) and empty lines in $conffile are allowed.
 
+<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
+gives some further background.
+
 Examples:
 1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
   gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
@@ -92,22 +116,32 @@
            --symlink-regex \\
            foobar-1.0.tar.gz foobar-1.0.tar.xz
 
-4. Upload foobar-0.9.90.tar.gz to two sites:
+4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz
+   and likewise for the corresponding .sig file:
+  gnupload --to ftp.gnu.org:foobar \\
+           --symlink foobar-1.0.tar.gz     foobar-latest.tar.gz \\
+                     foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
+  or (equivalent):
+  gnupload --to ftp.gnu.org:foobar \\
+           --symlink foobar-1.0.tar.gz     foobar-latest.tar.gz \\
+           --symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
+
+5. 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
+6. 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
+gnupload executes a program ncftpput 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.
+(https://savannah.gnu.org/projects/gnulib) may serve as a replacement.
 
 Send patches and bug reports to <bug-gnulib@gnu.org>."
 
@@ -124,7 +158,7 @@
   -*)
     collect_var=
     case $1 in
-    --help)
+    -h | --help)
       echo "$usage"
       exit $?
       ;;
@@ -132,6 +166,12 @@
       if test -z "$2"; then
         echo "$0: Missing argument for --to" 1>&2
         exit 1
+      elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then
+        echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2
+        echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2
+        echo "$0:  is used for direct ftp uploads, not with gnupload)." >&2
+        echo "$0: See --help and its examples if need be." >&2
+        exit 1
       else
         to="$to $2"
         shift
@@ -164,7 +204,7 @@
     --symlink)
       collect_var=symlink_files
       ;;
-    --dry-run|-n)
+    -n | --dry-run)
       dry_run=:
       ;;
     --version)
@@ -425,9 +465,9 @@
 exit 0
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/install-reloc b/build-aux/install-reloc
new file mode 100755
index 0000000..aa17a60
--- /dev/null
+++ b/build-aux/install-reloc
@@ -0,0 +1,280 @@
+#!/bin/sh
+# install-reloc - install a program including a relocating wrapper
+# Copyright (C) 2003-2019 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 <https://www.gnu.org/licenses/>.
+
+# Usage 1:
+#   install-reloc -- library_path_var library_path_value prefix destdir \
+#                    compile_command srcdir builddir config_h_dir exeext \
+#                    strip_command \
+#                    install_command... destprog
+# where
+#   - library_path_var is the platform dependent runtime library path variable
+#   - library_path_value is a colon separated list of directories that contain
+#     the libraries at installation time (use this instead of -rpath)
+#   - prefix is the base directory at installation time
+#   - destdir is a string that is prepended to all file names at installation
+#     time; it is already prepended to destprog but not to library_path_value
+#     and prefix
+#   - compile_command is a C compiler compilation and linking command
+#   - srcdir is the directory where to find relocwrapper.c and its dependencies
+#   - builddir is the directory where to find built dependencies (namely,
+#     alloca.h and stdbool.h)
+#   - config_h_dir is the directory where to find config.h
+#   - exeext is platform dependent suffix of executables
+#   - strip_command is the command for stripping executables, or : if no
+#     stripping is desired
+#   - install_command is the install command line, excluding the final destprog
+#   - destprog is the destination program name
+# Usage 2:
+#   env RELOC_LIBRARY_PATH_VAR=library_path_var \
+#       RELOC_LIBRARY_PATH_VALUE=library_path_value \
+#       RELOC_PREFIX=prefix \
+#       RELOC_DESTDIR=destdir \
+#       RELOC_COMPILE_COMMAND=compile_command \
+#       RELOC_SRCDIR=srcdir \
+#       RELOC_BUILDDIR=builddir \
+#       RELOC_CONFIG_H_DIR=config_h_dir \
+#       RELOC_EXEEXT=exeext \
+#       RELOC_STRIP_PROG=strip_command \
+#       RELOC_INSTALL_PROG=install_command... \
+#   install-reloc prog1 ... destprog
+#   where destprog is either the destination program name (when only one program
+#   is specified) or the destination directory for all programs.
+# install-reloc renames destprog to destprog.bin and installs a relocating
+# wrapper in the place of destprog.
+
+progname=$0
+
+if test $# -ge 12 && test "x$1" = "x--"; then
+  # Get fixed position arguments.
+  shift
+  library_path_var=$1
+  library_path_value=$2
+  prefix=$3
+  destdir=$4
+  shift
+  shift
+  shift
+  shift
+  compile_command=$1
+  srcdir=$2
+  builddir=$3
+  config_h_dir=$4
+  exeext=$5
+  shift
+  shift
+  shift
+  shift
+  shift
+  strip_prog=$1
+  shift
+  install_prog=$1 # maybe not including the "-c" option
+  shift
+else
+  if test $# -ge 2; then
+    # Get arguments from environment variables.
+    library_path_var=$RELOC_LIBRARY_PATH_VAR
+    library_path_value=$RELOC_LIBRARY_PATH_VALUE
+    prefix=$RELOC_PREFIX
+    destdir=$RELOC_DESTDIR
+    compile_command=$RELOC_COMPILE_COMMAND
+    srcdir=$RELOC_SRCDIR
+    builddir=$RELOC_BUILDDIR
+    config_h_dir=$RELOC_CONFIG_H_DIR
+    exeext=$RELOC_EXEEXT
+    strip_prog=$RELOC_STRIP_PROG
+    install_prog=$RELOC_INSTALL_PROG # including the "-c" option
+  else
+    echo "Usage: $0 -- library_path_var library_path_value prefix destdir" \
+         "compile_command srcdir builddir config_h_dir exeext" \
+         "strip_command" \
+         "install_command... destprog" 1>&2
+    exit 1
+  fi
+fi
+
+# Get destprog, last argument.
+destprog=
+for arg
+do
+  destprog=$arg
+done
+# Determine whether destprog is a program name or a directory name.
+if test -d "$destprog"; then
+  sed_remove_trailing_slashes='s|//*$||'
+  destprog_directory=`echo "$destprog" | sed -e "$sed_remove_trailing_slashes"`
+  if test -z "$destprog_directory"; then
+    destprog_directory='/'
+  fi
+else
+  destprog_directory=
+fi
+# Prepare for remove trailing $exeext, if present.
+if test -n "$exeext"; then
+  sed_quote='s,\.,\\.,g'
+  sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||'
+fi
+if test -z "$destprog_directory"; then
+  # Remove trailing $exeext, if present.
+  if test -n "$exeext"; then
+    destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
+  fi
+fi
+
+# Outputs a command and runs it.
+func_verbose ()
+{
+  # Make it easy to copy&paste the printed command into a shell in most cases,
+  # by escaping '\\', '"', and '$'. This is not perfect, just good enough.
+  echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g'
+  "$@"
+}
+
+# Run install_command.
+func_verbose $install_prog "$@" || exit $?
+
+# Iterate over all destination program names.
+# func_iterate f
+# applies f to each destination program names, after setting destprog.
+sed_basename_of_file='s|^.*/||'
+func_iterate ()
+{
+  if test -n "$destprog_directory"; then
+    prev_arg=
+    for arg
+    do
+      if test -n "prev_arg"; then
+        destprog="$destprog_directory"/`echo "$prev_arg" | sed -e "$sed_basename_of_file"`
+        $1
+      fi
+      prev_arg="$arg"
+    done
+  else
+    $1
+  fi
+}
+
+# Run strip_command.
+func_strip ()
+{
+  # Remove trailing $exeext, if present.
+  if test -n "$exeext"; then
+    destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
+  fi
+  func_verbose "$strip_prog" "$destprog$exeext" || exit $?
+}
+if test "$strip_prog" != ':'; then
+  func_iterate func_strip
+fi
+
+# If the platform doesn't support LD_LIBRARY_PATH or similar, we cannot build
+# a wrapper.
+test -n "$library_path_var" || exit 0
+
+libdirs=
+save_IFS="$IFS"; IFS=":"
+for dir in $library_path_value; do
+  IFS="$save_IFS"
+  if test -n "$dir"; then
+    case "$libdirs" in
+      *"\"$dir\""*) ;; # remove duplicate
+      *) libdirs="$libdirs\"$dir\"," ;;
+    esac
+  fi
+done
+IFS="$save_IFS"
+# If there are no library directories to add at runtime, we don't need a
+# wrapper.
+test -n "$libdirs" || exit 0
+
+# Determine installdir from destprog, removing a leading destdir if present.
+if test -n "$destprog_directory"; then
+  installdir="$destprog_directory"
+else
+  installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'`
+fi
+if test -n "$destdir"; then
+  sed_quote='s,\([|.\*^$[]\),\\\1,g'
+  sed_remove_destdir='s|^'`echo "$destdir" | sed -e "$sed_quote"`'||'
+  installdir=`echo "$installdir" | sed -e "$sed_remove_destdir"`
+fi
+
+# Compile and install wrapper.
+func_create_wrapper ()
+{
+  # Remove trailing $exeext, if present.
+  if test -n "$exeext"; then
+    destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"`
+  fi
+
+  # Compile wrapper.
+  func_verbose $compile_command \
+               -I"$builddir" -I"$srcdir" -I"$config_h_dir" \
+               -DHAVE_CONFIG_H -DIN_RELOCWRAPPER -DNO_XMALLOC \
+               -D"INSTALLPREFIX=\"$prefix\"" -D"INSTALLDIR=\"$installdir\"" \
+               -D"LIBPATHVAR=\"$library_path_var\"" -D"LIBDIRS=$libdirs" \
+               -D"EXEEXT=\"$exeext\"" \
+               "$srcdir"/relocwrapper.c \
+               "$srcdir"/progname.c \
+               "$srcdir"/progreloc.c \
+               "$srcdir"/areadlink.c \
+               "$srcdir"/careadlinkat.c \
+               "$srcdir"/allocator.c \
+               "$srcdir"/readlink.c \
+               "$srcdir"/stat.c \
+               "$srcdir"/canonicalize-lgpl.c \
+               "$srcdir"/malloca.c \
+               "$srcdir"/lstat.c \
+               "$srcdir"/relocatable.c \
+               "$srcdir"/setenv.c \
+               "$srcdir"/c-ctype.c \
+               -o "$destprog.wrapper$exeext"
+  rc=$?
+  # Clean up object files left over in the current directory by the native C
+  # compilers on Solaris, HP-UX, OSF/1, IRIX.
+  rm -f relocwrapper.o \
+        progname.o \
+        progreloc.o \
+        areadlink.o \
+        careadlinkat.o \
+        allocator.o \
+        readlink.o \
+        stat.o \
+        canonicalize-lgpl.o \
+        malloca.o \
+        lstat.o \
+        relocatable.o \
+        setenv.o \
+        c-ctype.o
+  test $rc = 0 || exit $?
+  # Clean up debugging information left over by the native C compiler on MacOS X.
+  rm -rf "$destprog.wrapper$exeext.dSYM"
+  test $rc = 0 || exit $?
+
+  # Strip wrapper.
+  test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog.wrapper$exeext" || exit $?
+
+  # Rename $destprog.wrapper -> $destprog -> $destprog.bin.
+  ln -f "$destprog$exeext" "$destprog.bin$exeext" \
+    || { rm -f "$destprog.bin$exeext" \
+         && cp -p "$destprog$exeext" "$destprog.bin$exeext"; } \
+    || exit 1
+  mv "$destprog.wrapper$exeext" "$destprog$exeext" || exit 1
+}
+func_iterate func_create_wrapper
+
+exit 0
diff --git a/build-aux/install-sh b/build-aux/install-sh
index 377bb86..20d8b2e 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=2011-11-20.07; # UTC
+scriptversion=2018-03-11.20; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='	'
 nl='
 '
-IFS=" ""	$nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-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.
@@ -97,7 +82,7 @@
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-	shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-	shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-	# Protect names problematic for 'test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
+    -t)
+        is_target_a_directory=always
+        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;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)	shift
-	break;;
+    --) shift
+        break;;
 
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 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.
@@ -208,6 +204,15 @@
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+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
@@ -223,16 +228,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -266,122 +271,113 @@
     fi
     dst=$dst_arg
 
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
+    # If destination is a directory, append the input filename.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
-      dst=$dstdir/`basename "$src"`
+      dstbase=`basename "$src"`
+      case $dst in
+	*/) dst=$dst$dstbase;;
+	*)  dst=$dst/$dstbase;;
+      esac
       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'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
   fi
 
+  case $dstdir in
+    */) dstdirslash=$dstdir;;
+    *)  dstdirslash=$dstdir/;;
+  esac
+
   obsolete_mkdir_used=false
 
   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;;
+        # 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;;
 
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
 
-	# 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
+        # 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
 
-	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
+        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.
+            ;;
+          *)
+            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
+            # here however when possible just to lower collision chance.
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
 
-	    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;;
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # Because "mkdir -p" follows existing symlinks and we likely work
+            # directly in world-writeable /tmp, make sure that the '$tmpdir'
+            # directory is successfully created first before we actually test
+            # 'mkdir -p' feature.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +387,51 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test X"$d" = X && continue
+        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/
+        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
+        # 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
     fi
   fi
@@ -450,14 +444,25 @@
   else
 
     # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
+    dsttmp=${dstdirslash}_inst.$$_
+    rmtmp=${dstdirslash}_rm.$$_
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
 
     # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+    (umask $cp_umask &&
+     { test -z "$stripcmd" || {
+	 # Create $dsttmp read-write so that cp doesn't create it read-only,
+	 # which would cause strip to fail.
+	 if test -z "$doit"; then
+	   : >"$dsttmp" # No need to fork-exec 'touch'.
+	 else
+	   $doit touch "$dsttmp"
+	 fi
+       }
+     } &&
+     $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -472,15 +477,12 @@
 
     # 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` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +495,24 @@
       # 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 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"
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
@@ -519,9 +521,9 @@
 done
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/javacomp.sh.in b/build-aux/javacomp.sh.in
index bc1081b..0f610dd 100644
--- a/build-aux/javacomp.sh.in
+++ b/build-aux/javacomp.sh.in
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Compile a Java program.
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2019 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
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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
diff --git a/build-aux/javaexec.sh.in b/build-aux/javaexec.sh.in
index 2f8d533..2f9eecd 100644
--- a/build-aux/javaexec.sh.in
+++ b/build-aux/javaexec.sh.in
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Execute a Java program.
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2019 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
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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
diff --git a/build-aux/libtool-reloc b/build-aux/libtool-reloc
new file mode 100755
index 0000000..9d899ab
--- /dev/null
+++ b/build-aux/libtool-reloc
@@ -0,0 +1,89 @@
+#!/bin/sh
+# libtool-reloc - libtool wrapper with support for relocatable programs
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# Written by Bruno Haible <bruno@clisp.org>, 2019.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the 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 <https://www.gnu.org/licenses/>.
+
+# Usage: libtool-reloc libtool LIBTOOL_ARGUMENTS
+
+# Outputs a command and runs it.
+func_verbose ()
+{
+  # Make it easy to copy&paste the printed command into a shell in most cases,
+  # by escaping '\\', '"', and '$'. This is not perfect, just good enough.
+  echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g'
+  "$@"
+}
+
+# Determine the mode from the arguments.
+mode=
+for arg
+do
+  case "$arg" in
+    --mode=link) mode=link ;;
+  esac
+done
+
+if test "$mode" = link; then
+  # Determine the target from the arguments.
+  target=
+  next_is_target=false
+  for arg
+  do
+    if $next_is_target; then
+      target="$arg"
+      next_is_target=false
+    else
+      case "$arg" in
+        -o) next_is_target=true ;;
+        *) next_is_target=false ;;
+      esac
+    fi
+  done
+  case "$target" in
+    *.la)
+      # When creating a library:
+      # 1. Add a '-Wl,-rpath,@loader_path' option.
+      #    (A '-R @loader_path' option does not work: libtool produces
+      #    an error "error: only absolute run-paths are allowed".)
+      #    (Also note that 'install_name_tool -add_rpath @loader_path ...'
+      #    does not work on Mac OS X 10.5.)
+      #    This is done through the RELOCATABLE_LDFLAGS macro.
+      # 2. After creating the library, run
+      #    install_name_tool -id @rpath/$dlname $target_dir/.libs/$dlname
+      #    (This is easier than to modify the libtool script to emit a different
+      #    install_name. Also, an option '-Wl,-install_name,@rpath/$dlname' does
+      #    not work since libtool emits another option '-Wl,-install_name,...'
+      #    after it.
+      "$@" && {
+        dlname_assignment=`grep '^dlname=' "$target"`
+        dlname=
+        eval "$dlname_assignment"
+        # Nothing to do when --disable-shared was specified.
+        if test -n "$dlname"; then
+          target_dir=`dirname "$target"`
+          if test -f "$target_dir/.libs/$dlname"; then
+            func_verbose install_name_tool -id "@rpath/$dlname" "$target_dir/.libs/$dlname"
+          fi
+        fi
+      }
+      ;;
+    *)
+      "$@"
+      ;;
+  esac
+else
+  "$@"
+fi
diff --git a/build-aux/local.mk b/build-aux/local.mk
new file mode 100644
index 0000000..b9cb25a
--- /dev/null
+++ b/build-aux/local.mk
@@ -0,0 +1,22 @@
+## Copyright (C) 2000-2015, 2018-2019 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 +=					\
+  build-aux/Darwin.valgrind			\
+  build-aux/Linux.valgrind			\
+  build-aux/cross-options.pl			\
+  build-aux/move-if-change			\
+  build-aux/prev-version.txt			\
+  build-aux/update-b4-copyright
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
index 4614441..79687f7 100755
--- a/build-aux/mdate-sh
+++ b/build-aux/mdate-sh
@@ -1,9 +1,9 @@
 #!/bin/sh
 # Get modification time of a file or directory and pretty-print it.
 
-scriptversion=2010-08-21.06; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1995-2012 Free Software Foundation, Inc.
+# Copyright (C) 1995-2019 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
@@ -17,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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
@@ -74,6 +74,10 @@
 LC_TIME=C
 export LC_TIME
 
+# Use UTC to get reproducible result.
+TZ=UTC0
+export TZ
+
 # GNU ls changes its time format in response to the TIME_STYLE
 # variable.  Since we cannot assume 'unset' works, revert this
 # variable to its documented default.
@@ -216,9 +220,9 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/missing b/build-aux/missing
index 9a55648..625aeb1 100755
--- a/build-aux/missing
+++ b/build-aux/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-01-06.18; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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,61 +29,33 @@
   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
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
 case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --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'
-  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
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
 
 Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
 'g' are ignored when checking the name.
@@ -98,233 +70,146 @@
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown '$1' option"
+    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'`
+# Run the given program, remember its exit status.
+"$@"; st=$?
 
-# 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).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
     ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
 
-  *)
-    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
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
 
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-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
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  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
-         archive site."
-    touch configure
-    ;;
-
-  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
-         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
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  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.
-         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*)
-    echo 1>&2 "\
-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
-         archive site."
-
-    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 "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  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
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  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
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-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."
-
-    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 $?
-    fi
-    ;;
-
-  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
-         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."
-    # The file to touch is that specified with -o ...
-    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`
-      # ... 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
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  *)
-    echo 1>&2 "\
-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,
-         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."
-    exit 1
-    ;;
-esac
-
-exit 0
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
new file mode 100755
index 0000000..9073f1a
--- /dev/null
+++ b/build-aux/move-if-change
@@ -0,0 +1,84 @@
+#!/bin/sh
+# Like mv $1 $2, but if the files are the same, just delete $1.
+# Status is zero if successful, nonzero otherwise.
+
+VERSION='2018-03-07 03:47'; # 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-2019 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 <https://www.gnu.org/licenses/>.
+
+usage="usage: $0 SOURCE DEST"
+
+help="$usage
+  or:  $0 OPTION
+If SOURCE is different than DEST, then move it to DEST; else remove SOURCE.
+
+  --help     display this help and exit
+  --version  output version information and exit
+
+The variable CMPPROG can be used to specify an alternative to 'cmp'.
+
+Report bugs to <bug-gnulib@gnu.org>."
+
+year=`expr "$VERSION" : '\([^-]*\)'`
+version=`expr "$VERSION" : '\([^ ]*\)'`
+version="move-if-change (gnulib) $version
+Copyright $year Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <https://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."
+
+cmpprog=${CMPPROG-cmp}
+
+for arg
+do
+  case $arg in
+    --help | --hel | --he | --h)
+      exec echo "$help" ;;
+    --version | --versio | --versi | --vers | --ver | --ve | --v)
+      exec echo "$version" ;;
+    --)
+      shift
+      break ;;
+    -*)
+      echo "$0: invalid option: $arg" >&2
+      exit 1 ;;
+    *)
+      break ;;
+  esac
+done
+
+test $# -eq 2 || { echo "$0: $usage" >&2; exit 1; }
+
+if test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null; then
+  rm -f -- "$1"
+else
+  if mv -f -- "$1" "$2"; then :; else
+    # Ignore failure due to a concurrent move-if-change.
+    test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null && rm -f -- "$1"
+  fi
+fi
+
+## Local Variables:
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-start: "VERSION='"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC0"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/prefix-gnulib-mk b/build-aux/prefix-gnulib-mk
new file mode 100755
index 0000000..445d916
--- /dev/null
+++ b/build-aux/prefix-gnulib-mk
@@ -0,0 +1,281 @@
+#!/bin/sh
+#! -*-perl-*-
+
+# Rewrite a gnulib.mk, adding prefixes to work with automake's subdir-objects.
+
+# Copyright (C) 2012-2019 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 <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line.  The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name.  The second line is essential for perl and is
+# also useful for editing this file in Emacs.  The next two lines below
+# are valid code in both sh and perl.  When executed by sh, they re-execute
+# the script through the perl program found in $PATH.  The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh.  When executed by  perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+     if 0;
+
+my $VERSION = '2012-01-21 17:13'; # 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.
+
+use strict;
+use IO::File;
+use Getopt::Long;
+use File::Basename; # for dirname
+
+(my $ME = $0) =~ s|.*/||;
+
+my $prefix;
+my $lib_name;
+
+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 --lib-name=NAME FILE
+   or: $ME [--help|--version]
+Rewrite a gnulib-tool-generated FILE like lib/gnulib.mk to work with
+automake's subdir-objects.
+
+OPTIONS:
+
+This option must be specified:
+
+   --lib-name=NAME    library name, often "lib\$project"
+
+The following are optional:
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# contents ($FILE_NAME)
+# ---------------------
+sub contents ($)
+{
+  my ($file) = @_;
+  local $/;                     # Turn on slurp-mode.
+  my $f = new IO::File "< $file" or die "$file";
+  my $contents = $f->getline or die "$file";
+  $f->close;
+  return $contents;
+}
+
+# prefix_word ($WORD)
+# -------------------
+# Do not prefix special words such as variable dereferences.  Also,
+# "Makefile" is really "Makefile", since precisely there is no
+# lib/Makefile.
+sub prefix_word ($)
+{
+  local ($_) = @_;
+  $_ = $prefix . $_
+    unless (/^-/ || m{^\$\(\w+\)} || $_ eq "Makefile" || $_ eq '\\'
+            || $_ eq '@ALLOCA@');
+  return $_;
+}
+
+
+# prefix_words ($TEXT)
+# --------------------
+sub prefix_words ($)
+{
+  local ($_) = @_;
+  s{(\S+)}{prefix_word($1)}gem;
+  return $_;
+}
+
+
+# prefix_assignment ($LHS-AND-ASSIGN-OP, $RHS)
+# --------------------------------------------
+sub prefix_assignment ($$)
+{
+  my ($lhs_and_assign_op, $rhs) = @_;
+
+  # Some variables are initialized by gnulib.mk, and we don't want
+  # that.  Change '=' to '+='.
+  if ($lhs_and_assign_op =~ /^(GPERF|V_GPERF.*) =$/)
+    {
+      # Do not change the RHS, which specifies the GPERF program.
+    }
+  # Don't change variables such as HAVE_INCLUDE_NEXT.
+  elsif ($lhs_and_assign_op =~ /^HAVE_/)
+    {
+    }
+  elsif ($lhs_and_assign_op =~
+      /^(SUBDIRS|EXTRA_DIST|BUILT_SOURCES|SUFFIXES|MOSTLYCLEANFILES
+         |CLEANFILES|DISTCLEANFILES|MAINTAINERCLEANFILES
+         |AM_GNU_GETTEXT)\ =/x)
+    {
+      $lhs_and_assign_op =~ s/=/+=/;
+    }
+  # We don't want things such as AM_CPPFLAGS +=
+  # -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\" to apply to the whole
+  # Makefile.in: scope it to the library: libbison_a_CPPFLAGS =
+  # $(AM_CPPFLAGS) -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\".
+  elsif ($lhs_and_assign_op =~
+      /^(AM_CFLAGS|AM_CPPFLAGS)\ \+?=/x)
+    {
+      $lhs_and_assign_op =~ s/^AM_(\w+)\ \+?=/${lib_name}_a_$1 =/;
+      $rhs = " \$(AM_$1)$rhs";
+    }
+  # We don't want to inherit gnulib's AUTOMAKE_OPTIONS, comment them.
+  elsif ($lhs_and_assign_op =~ /^AUTOMAKE_OPTIONS =/)
+    {
+      $lhs_and_assign_op =~ s/^/# /;
+    }
+  # Elide any SUFFIXES assignment or concatenation.
+  elsif ($lhs_and_assign_op =~ /^SUFFIXES /)
+    {
+      $lhs_and_assign_op =~ s/^/# /;
+    }
+  # The words are (probably) paths to files in lib/: prefix them.
+  else
+    {
+      $rhs = prefix_words($rhs)
+    }
+
+  # Variables whose name depend on the location: libbison_a_SOURCES =>
+  # lib_libbison_a_SOURCES.
+  $lhs_and_assign_op =~ s/($lib_name)/lib_$1/g;
+
+  $lhs_and_assign_op . $rhs;
+}
+
+# prefix $CONTENTS
+# ----------------
+# $CONTENTS is a Makefile content.  Post-process it so that each file-name
+# is prefixed with $prefix (e.g., "lib/").
+#
+# Relies heavily on the regularity of the file generated by gnulib-tool.
+sub prefix ($)
+{
+  # Work on $_.
+  local ($_) = @_;
+
+  # Prefix all the occurrence of files in rules.  If there is nothing
+  # after in the :, it's probably a phony target, or a suffix rule.
+  # Don't touch it.
+  s{^([-\w+/]+\.[-\w.]+ *: *\S.*)$}
+   {prefix_words($1)}gem;
+
+  # Prefix files in variables.
+  s{^([\w.]+\s*\+?=)(.*)$}
+   {prefix_assignment($1, $2)}gem;
+
+  # $(srcdir)/ is actually $(top_srcdir)/$prefix/.
+  # The trailing slash is required to avoid matching this rule:
+  #   test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+  s{\$\(srcdir\)/}{\$(top_srcdir)/$prefix}g;
+
+  # Sometimes, t-$@ is used instead of $@-t, which, of course, does
+  # not work when we have a $@ with a directory in it.
+  s{t-\$\@}{\$\@-t}g;
+
+  # Some AC_SUBST patterns remain and would better be Make macros.
+  s{\@(MKDIR_P)\@}{\$($1)}g;
+
+  # Adjust paths in mkdir.
+  s{(\$\(MKDIR_P\))\s*(\w+)}{$1 $prefix$2}g;
+
+  return $_;
+}
+
+# process ($IN)
+# -------------
+sub process ($)
+{
+  my ($file) = @_;
+  my ($bak) = "$file.bak";
+  rename ($file, $bak) or die "$ME: rename $file $bak failed: $!\n";
+  my $contents = contents ($bak);
+  $contents = prefix ($contents);
+  my $out = new IO::File(">$file")
+    or die "$ME: $file: failed to open for writing: $!\n";
+  print $out $contents;
+}
+
+{
+  GetOptions
+    (
+     'lib-name=s' => \$lib_name,
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+    ) or usage 1;
+
+  my $fail = 0;
+  defined $lib_name
+    or (warn "$ME: no library name; use --lib-name=NAME\n"), $fail = 1;
+
+  # There must be exactly one argument.
+  @ARGV == 0
+    and (warn "$ME: missing FILE argument\n"), $fail = 1;
+  1 < @ARGV
+    and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
+      $fail = 1;
+  $fail
+    and usage 1;
+
+  my $file = $ARGV[0];
+  $prefix = (dirname $file) . '/';
+  warn "prefix=$prefix\n";
+
+  process $file;
+}
+
+### 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
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-line-limit: 50
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC0"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/reloc-ldflags b/build-aux/reloc-ldflags
new file mode 100755
index 0000000..625fef2
--- /dev/null
+++ b/build-aux/reloc-ldflags
@@ -0,0 +1,119 @@
+#! /bin/sh
+# Output a system dependent linker command for putting a relocatable library
+# search path into an executable.
+#
+#   Copyright 2003-2019 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 <https://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.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variable LD should be set by the caller.
+#
+# The second argument is a colon separated list of directories that contain
+# the libraries at installation time.
+#
+# The third argument is the directory into which the executable is going to be
+# installed.
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+library_path_value=$2
+
+installdir=$3
+
+# Verify that installdir is absolute.
+case "$installdir" in
+  /*) ;;
+  *)
+    echo "installdir is not absolute: $installdir" 1>&2
+    exit 1
+    ;;
+esac
+
+origin_token=
+case "$host_os" in
+  linux* | gnu* | kfreebsd* | \
+  freebsd* | dragonfly* | \
+  netbsd* | \
+  openbsd* | \
+  solaris* | \
+  haiku*)
+    origin_token='$ORIGIN'
+    ;;
+  darwin*)
+    origin_token='@loader_path'
+    ;;
+esac
+if test -n "$origin_token"; then
+  rpath=
+  save_IFS="$IFS"; IFS=":"
+  for dir in $library_path_value; do
+    IFS="$save_IFS"
+    case "$dir" in
+      /*)
+        # Make dir relative to installdir. (Works only if dir is absolute.)
+        idir="$installdir"
+        while true; do
+          dfirst=`echo "$dir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'`
+          ifirst=`echo "$idir" | sed -n -e 's,^//*\([^/]*\).*$,/\1,p'`
+          if test -z "$dfirst" || test -z "$ifirst"; then
+            break
+          fi
+          if test "$dfirst" != "$ifirst"; then
+            break
+          fi
+          dir=`echo "$dir" | sed -e 's,^//*[^/]*,,'`
+          idir=`echo "$idir" | sed -e 's,^//*[^/]*,,'`
+        done
+        dir="$origin_token"`echo "$idir" | sed -e 's,//*[^/]*,/..,g'`"$dir"
+        # Add dir to rpath.
+        rpath="${rpath}${rpath:+ }$dir"
+        ;;
+      *)
+        if test -n "$dir"; then
+          echo "libdir is not absolute: $dir" 1>&2
+        fi
+        ;;
+    esac
+  done
+  IFS="$save_IFS"
+  # Output it.
+  if test -n "$rpath"; then
+    case "$host_os" in
+      # At least some versions of FreeBSD, DragonFly, and OpenBSD need the
+      # linker option "-z origin". See <https://lekensteyn.nl/rpath.html>.
+      freebsd* | dragonfly* | openbsd*)
+        echo "-Wl,-z,origin -Wl,-rpath,$rpath" ;;
+      *)
+        echo "-Wl,-rpath,$rpath" ;;
+    esac
+  fi
+else
+  echo "relocation via rpath not supported on this system: $host" 1>&2
+  exit 1
+fi
+
+exit 0
diff --git a/build-aux/relocatable.sh.in b/build-aux/relocatable.sh.in
new file mode 100644
index 0000000..1bbc15f
--- /dev/null
+++ b/build-aux/relocatable.sh.in
@@ -0,0 +1,99 @@
+# The functions in this file provide support for relocatability of
+# shell scripts.  They should be included near the beginning of each
+# shell script in a relocatable program, by adding @relocatable_sh@
+# and causing the script to be expanded with AC_CONFIG_FILES.  A
+# small amount of additional code must be added and adapted to the
+# package by hand; see doc/relocatable-maint.texi (in Gnulib) for
+# details.
+#
+# Copyright (C) 2003-2019 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 <https://www.gnu.org/licenses/>.
+#
+
+# Support for relocatability.
+func_find_curr_installdir ()
+{
+  # Determine curr_installdir, even taking into account symlinks.
+  curr_executable="$0"
+  case "$curr_executable" in
+    */* | *\\*) ;;
+    *) # Need to look in the PATH.
+      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
+      save_IFS="$IFS"; IFS="$PATH_SEPARATOR"
+      for dir in $PATH; do
+        IFS="$save_IFS"
+        test -z "$dir" && dir=.
+        for exec_ext in ''; do
+          if test -f "$dir/$curr_executable$exec_ext"; then
+            curr_executable="$dir/$curr_executable$exec_ext"
+            break 2
+          fi
+        done
+      done
+      IFS="$save_IFS"
+      ;;
+  esac
+  # Make absolute.
+  case "$curr_executable" in
+    /* | ?:/* | ?:\\*) ;;
+    *) curr_executable=`pwd`/"$curr_executable" ;;
+  esac
+  # Resolve symlinks.
+  sed_dirname='s,/[^/]*$,,'
+  sed_linkdest='s,^.* -> \(.*\),\1,p'
+  while : ; do
+    lsline=`LC_ALL=C ls -l "$curr_executable"`
+    case "$lsline" in
+      *" -> "*)
+        linkdest=`echo "$lsline" | sed -n -e "$sed_linkdest"`
+        case "$linkdest" in
+          /* | ?:/* | ?:\\*) curr_executable="$linkdest" ;;
+          *) curr_executable=`echo "$curr_executable" | sed -e "$sed_dirname"`/"$linkdest" ;;
+        esac ;;
+      *) break ;;
+    esac
+  done
+  curr_installdir=`echo "$curr_executable" | sed -e 's,/[^/]*$,,'`
+  # Canonicalize.
+  curr_installdir=`cd "$curr_installdir" && pwd`
+}
+func_find_prefixes ()
+{
+  # Compute the original/current installation prefixes by stripping the
+  # trailing directories off the original/current installation directories.
+  orig_installprefix="$orig_installdir"
+  curr_installprefix="$curr_installdir"
+  while true; do
+    orig_last=`echo "$orig_installprefix" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
+    curr_last=`echo "$curr_installprefix" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
+    if test -z "$orig_last" || test -z "$curr_last"; then
+      break
+    fi
+    if test "$orig_last" != "$curr_last"; then
+      break
+    fi
+    orig_installprefix=`echo "$orig_installprefix" | sed -e 's,/[^/]*$,,'`
+    curr_installprefix=`echo "$curr_installprefix" | sed -e 's,/[^/]*$,,'`
+  done
+}
diff --git a/build-aux/snippet/_Noreturn.h b/build-aux/snippet/_Noreturn.h
deleted file mode 100644
index c44ad89..0000000
--- a/build-aux/snippet/_Noreturn.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#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/test-driver b/build-aux/test-driver
new file mode 100755
index 0000000..b8521a4
--- /dev/null
+++ b/build-aux/test-driver
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2011-2018 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, see <https://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>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
index b5f3141..1ea515b 100644
--- a/build-aux/texinfo.tex
+++ b/build-aux/texinfo.tex
@@ -1,13 +1,11 @@
 % 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{2012-11-08.11}
+\def\texinfoversion{2019-09-24.13}
 %
-% 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.
+% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
 %
 % 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
@@ -20,17 +18,18 @@
 % General Public License for more details.
 %
 % You should have received a copy of the GNU General Public License
-% along with this program.  If not, see <http://www.gnu.org/licenses/>.
+% along with this program.  If not, see <https://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
-% restriction.  (This has been our intent since Texinfo was invented.)
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-%   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)
+%   https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+%   https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+%   https://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.
 %
@@ -54,7 +53,7 @@
 % extent.  You can get the existing language-specific files from the
 % full Texinfo distribution.
 %
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
 
 
 \message{Loading texinfo [version \texinfoversion]:}
@@ -65,6 +64,10 @@
 \everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
+% LaTeX's \typeout.  This ensures that the messages it is used for
+% are identical in format to the corresponding ones from latex/pdflatex.
+\def\typeout{\immediate\write17}%
+
 \chardef\other=12
 
 % We never want plain's \outer definition of \+ in Texinfo.
@@ -95,7 +98,9 @@
 \let\ptexraggedright=\raggedright
 \let\ptexrbrace=\}
 \let\ptexslash=\/
+\let\ptexsp=\sp
 \let\ptexstar=\*
+\let\ptexsup=\sup
 \let\ptext=\t
 \let\ptextop=\top
 {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
@@ -154,22 +159,13 @@
 \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
 \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
 
-% Since the category of space is not known, we have to be careful.
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode`\ =\spacecat}
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
 
-% sometimes characters are active, so we need control sequences.
-\chardef\ampChar   = `\&
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
+% Likewise for ^^M, the end of line character.
+\def\endlineisspace{\catcode13=10\relax}
+
 \chardef\dashChar  = `\-
-\chardef\dotChar   = `\.
-\chardef\exclamChar= `\!
-\chardef\hashChar  = `\#
-\chardef\lquoteChar= `\`
-\chardef\questChar = `\?
-\chardef\rquoteChar= `\'
-\chardef\semiChar  = `\;
 \chardef\slashChar = `\/
 \chardef\underChar = `\_
 
@@ -192,17 +188,6 @@
   wide-spread wrap-around
 }
 
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\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,
 % since that produces some useless output on the terminal.  We also make
@@ -233,7 +218,7 @@
 % @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}}
 
@@ -247,17 +232,16 @@
 \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
   \removelastskip\penalty-200\bigskip\fi\fi}
 
-% Do @cropmarks to get crop marks.
+% Output routine
 %
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
 %
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
+\def\finalout{\overfullrule=0pt }
+
 \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong  \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
 \newdimen\topandbottommargin \topandbottommargin=.75in
 
 % Output a mark which sets \thischapter, \thissection and \thiscolor.
@@ -269,99 +253,145 @@
 %
 % 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...
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+%   In the second call \prevchapterdefs is the same as \currentchapterdefs,
+% and \prevsectiondefs is the same as \currentsectiondefs.
+%   Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+%   @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
 \def\domark{%
-  \toks0=\expandafter{\lastchapterdefs}%
-  \toks2=\expandafter{\lastsectiondefs}%
+  \toks0=\expandafter{\currentchapterdefs}%
+  \toks2=\expandafter{\currentsectiondefs}%
   \toks4=\expandafter{\prevchapterdefs}%
   \toks6=\expandafter{\prevsectiondefs}%
-  \toks8=\expandafter{\lastcolordefs}%
+  \toks8=\expandafter{\currentcolordefs}%
   \mark{%
-                   \the\toks0 \the\toks2
-      \noexpand\or \the\toks4 \the\toks6
-    \noexpand\else \the\toks8
+                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
+      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
+    \noexpand\else \the\toks8             % 2: color marks
   }%
 }
+
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
+%
 % \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
+  \ifcase0\the\savedtopmark\fi
   \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
 }
 \def\getbottomheadingmarks{\ifcase1\botmark\fi}
-\def\getcolormarks{\ifcase2\topmark\fi}
+\def\getcolormarks{\ifcase2\the\savedtopmark\fi}
 
 % Avoid "undefined control sequence" errors.
-\def\lastchapterdefs{}
-\def\lastsectiondefs{}
+\def\currentchapterdefs{}
+\def\currentsectiondefs{}
+\def\currentsection{}
 \def\prevchapterdefs{}
 \def\prevsectiondefs{}
-\def\lastcolordefs{}
+\def\currentcolordefs{}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\txipagewidth \newdimen\txipageheight
 
 % Main output routine.
+%
 \chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
+\newtoks\defaultoutput
+\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}}
+\output=\expandafter{\the\defaultoutput}
 
 \newbox\headlinebox
 \newbox\footlinebox
 
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
+% When outputting the double column layout for indices, an output routine
+% is run several times, which hides the original value of \topmark.  This
+% can lead to a page heading being output and duplicating the chapter heading
+% of the index.  Hence, save the contents of \topmark at the beginning of
+% the output routine.  The saved contents are valid until we actually
+% \shipout a page.
+%
+% (We used to run a short output routine to actually set \topmark and
+% \firstmark to the right values, but if this was called with an empty page
+% containing whatsits for writing index entries, the whatsits would be thrown
+% away and the index auxiliary file would remain empty.)
+%
+\newtoks\savedtopmark
+\newif\iftopmarksaved
+\topmarksavedtrue
+\def\savetopmark{%
+  \iftopmarksaved\else
+    \global\savedtopmark=\expandafter{\topmark}%
+    \global\topmarksavedtrue
+  \fi
+}
+
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer
+% and footnote.  This also causes index entries for this page to be written
+% to the auxiliary files.
+%
 \def\onepageout#1{%
-  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+  \hoffset=\normaloffset
   %
   \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi
   %
+  % Retrieve the information for the headings from the marks in the page,
+  % and call Plain TeX's \makeheadline and \makefootline, which use the
+  % values in \headline and \footline.
+  %
+  % This is used to check if we are on the first page of a chapter.
+  \ifcase1\the\savedtopmark\fi
+  \let\prevchaptername\thischaptername
+  \ifcase0\firstmark\fi
+  \let\curchaptername\thischaptername
+  %
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+  %
+  \ifx\curchaptername\prevchaptername
+    \let\thischapterheading\thischapter
+  \else
+    % \thischapterheading is the same as \thischapter except it is blank
+    % for the first page of a chapter.  This is to prevent the chapter name
+    % being shown twice.
+    \def\thischapterheading{}%
+  \fi
+  %
+  % Common context changes for both heading and footing.
   % 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}%
+  \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars}
+  %
+  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
+  %
   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
-  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+  \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
   %
   {%
+    % Set context for writing to auxiliary files like index files.
     % Have to do this stuff outside the \shipout because we want it to
     % take effect in \write's, yet the group defined by the \vbox ends
     % 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}
+    \atdummies         % don't expand commands in the output.
+    \turnoffactive
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
       \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
       %
-      \ifcropmarks \vbox to \outervsize\bgroup
-        \hsize = \outerhsize
-        \vskip-\topandbottommargin
-        \vtop to0pt{%
-          \line{\ewtop\hfil\ewtop}%
-          \nointerlineskip
-          \line{%
-            \vbox{\moveleft\cornerthick\nstop}%
-            \hfill
-            \vbox{\moveright\cornerthick\nstop}%
-          }%
-          \vss}%
-        \vskip\topandbottommargin
-        \line\bgroup
-          \hfil % center the page within the outer (page) hsize.
-          \ifodd\pageno\hskip\bindingoffset\fi
-          \vbox\bgroup
-      \fi
-      %
       \unvbox\headlinebox
       \pagebody{#1}%
       \ifdim\ht\footlinebox > 0pt
@@ -372,31 +402,17 @@
         \unvbox\footlinebox
       \fi
       %
-      \ifcropmarks
-          \egroup % end of \vbox\bgroup
-        \hfil\egroup % end of (centering) \line\bgroup
-        \vskip\topandbottommargin plus1fill minus1fill
-        \boxmaxdepth = \cornerthick
-        \vbox to0pt{\vss
-          \line{%
-            \vbox{\moveleft\cornerthick\nsbot}%
-            \hfill
-            \vbox{\moveright\cornerthick\nsbot}%
-          }%
-          \nointerlineskip
-          \line{\ewbot\hfil\ewbot}%
-        }%
-      \egroup % \vbox from first cropmarks clause
-      \fi
-    }% end of \shipout\vbox
-  }% end of group with \indexdummies
+    }%
+  }%
+  \global\topmarksavedfalse
   \advancepageno
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
 }
 
 \newinsert\margin \dimen\margin=\maxdimen
 
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
 {\catcode`\@ =11
 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
 % marginal hacks, juha@viisa.uucp (Juha Takala)
@@ -407,20 +423,13 @@
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }
 
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Argument parsing
 
 % Parse an argument, then pass it to #1.  The argument is the rest of
 % the input line (except we remove a trailing comment).  #1 should be a
 % macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
 %
 \def\parsearg{\parseargusing{}}
 \def\parseargusing#1#2{%
@@ -439,7 +448,8 @@
   }%
 }
 
-% First remove any @comment, then any @c comment.
+% First remove any @comment, then any @c comment.  Pass the result on to
+% \argcheckspaces.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
 \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
@@ -476,14 +486,13 @@
 %
 \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
 
+
+% \parseargdef - define a command taking an argument on the line
+%
 % \parseargdef\foo{...}
 %	is roughly equivalent to
 % \def\foo{\parsearg\Xfoo}
 % \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick.  --kasal, 16nov03
-
 \def\parseargdef#1{%
   \expandafter \doparseargdef \csname\string#1\endcsname #1%
 }
@@ -673,21 +682,26 @@
     \endgraf % Not \par, as it may have been set to \lisppar.
     \global\dimen1 = \prevdepth
   \egroup           % End the \vtop.
+  \addgroupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+
+\def\addgroupbox{
   % \dimen0 is the vertical size of the group's box.
   \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
   % \dimen2 is how much space is left on the page (more or less).
-  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  \dimen2 = \txipageheight   \advance\dimen2 by -\pagetotal
   % if the group doesn't fit on the current page, and it's a big big
   % group, force a page break.
   \ifdim \dimen0 > \dimen2
-    \ifdim \pagetotal < \vfilllimit\pageheight
+    \ifdim \pagetotal < \vfilllimit\txipageheight
       \page
     \fi
   \fi
   \box\groupbox
-  \prevdepth = \dimen1
-  \checkinserts
 }
+
 %
 % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
 % message, so this ends up printing `@group can only ...'.
@@ -811,36 +825,6 @@
   \temp
 }
 
-% @| 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}
@@ -929,13 +913,14 @@
 % @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%
+
+
+\def\c{\begingroup \catcode`\^^M=\active%
 \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
 %
-\let\c=\comment
+\let\comment\c
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
@@ -1006,69 +991,23 @@
 % paragraph.
 %
 \gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \restorefirstparagraphindent
-    \indent
-  }%
-  \gdef\noindent{%
-    \restorefirstparagraphindent
-    \noindent
-  }%
-  \global\everypar = {%
-    \kern -\parindent
-    \restorefirstparagraphindent
-  }%
+  \gdef\indent  {\restorefirstparagraphindent \indent}%
+  \gdef\noindent{\restorefirstparagraphindent \noindent}%
+  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
 }
-
+%
 \gdef\restorefirstparagraphindent{%
-  \global \let \indent = \ptexindent
-  \global \let \noindent = \ptexnoindent
-  \global \everypar = {}%
+  \global\let\indent = \ptexindent
+  \global\let\noindent = \ptexnoindent
+  \global\everypar = {}%
 }
 
 
 % @refill is a no-op.
 \let\refill=\relax
 
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \iflinks
-     \tryauxfile
-     % Open the new aux file.  TeX will close it automatically at exit.
-     \immediate\openout\auxfile=\jobname.aux
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   \openin 1 texinfo.cnf
-   \ifeof 1 \else \input texinfo.cnf \fi
-   \closein 1
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
 
 % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
@@ -1086,10 +1025,95 @@
 \newtoks\toksC
 \newtoks\toksD
 \newbox\boxA
+\newbox\boxB
 \newcount\countA
 \newif\ifpdf
 \newif\ifpdfmakepagedest
 
+%
+% For LuaTeX
+%
+
+\newif\iftxiuseunicodedestname
+\txiuseunicodedestnamefalse % For pdfTeX etc.
+
+\ifx\luatexversion\thisisundefined
+\else
+  % Use Unicode destination names
+  \txiuseunicodedestnametrue
+  % Escape PDF strings with converting UTF-16 from UTF-8
+  \begingroup
+    \catcode`\%=12
+    \directlua{
+      function UTF16oct(str)
+        tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
+        for c in string.utfvalues(str) do
+          if c < 0x10000 then
+            tex.sprint(
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o',
+                            math.floor(c / 256), math.floor(c % 256)))
+          else
+            c = c - 0x10000
+            local c_hi = c / 1024 + 0xd800
+            local c_lo = c % 1024 + 0xdc00
+            tex.sprint(
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
+                            string.char(0x5c) .. string.char(0x25) .. '03o',
+                            math.floor(c_hi / 256), math.floor(c_hi % 256),
+                            math.floor(c_lo / 256), math.floor(c_lo % 256)))
+          end
+        end
+      end
+    }
+  \endgroup
+  \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+  % Escape PDF strings without converting
+  \begingroup
+    \directlua{
+      function PDFescstr(str)
+        for c in string.bytes(str) do
+          if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
+            tex.sprint(-2,
+              string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
+                            c))
+          else
+            tex.sprint(-2, string.char(c))
+          end
+        end
+      end
+    }
+    % The -2 in the arguments here gives all the input to TeX catcode 12
+    % (other) or 10 (space), preventing undefined control sequence errors. See
+    % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
+    %
+  \endgroup
+  \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
+  \ifnum\luatexversion>84
+    % For LuaTeX >= 0.85
+    \def\pdfdest{\pdfextension dest}
+    \let\pdfoutput\outputmode
+    \def\pdfliteral{\pdfextension literal}
+    \def\pdfcatalog{\pdfextension catalog}
+    \def\pdftexversion{\numexpr\pdffeedback version\relax}
+    \let\pdfximage\saveimageresource
+    \let\pdfrefximage\useimageresource
+    \let\pdflastximage\lastsavedimageresourceindex
+    \def\pdfendlink{\pdfextension endlink\relax}
+    \def\pdfoutline{\pdfextension outline}
+    \def\pdfstartlink{\pdfextension startlink}
+    \def\pdffontattr{\pdfextension fontattr}
+    \def\pdfobj{\pdfextension obj}
+    \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
+    \let\pdfpagewidth\pagewidth
+    \let\pdfpageheight\pageheight
+    \edef\pdfhorigin{\pdfvariable horigin}
+    \edef\pdfvorigin{\pdfvariable vorigin}
+  \fi
+\fi
+
 % 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 being undefined.
 \ifx\pdfoutput\thisisundefined
@@ -1103,11 +1127,21 @@
   \fi
 \fi
 
+\newif\ifpdforxetex
+\pdforxetexfalse
+\ifpdf
+  \pdforxetextrue
+\fi
+\ifx\XeTeXrevision\thisisundefined\else
+  \pdforxetextrue
+\fi
+
+
 % 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.
-% 
+%
 % 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
@@ -1120,12 +1154,21 @@
   \ifx\pdfescapestring\thisisundefined
     % No primitive available; should we give a warning or log?
     % Many times it won't matter.
+    \xdef#1{#1}%
   \else
     % The expandable \pdfescapestring primitive escapes parentheses,
     % backslashes, and other special chars.
     \xdef#1{\pdfescapestring{#1}}%
   \fi
 }
+\def\txiescapepdfutfsixteen#1{%
+  \ifx\pdfescapestrutfsixteen\thisisundefined
+    % No UTF-16 converting macro available.
+    \txiescapepdf{#1}%
+  \else
+    \xdef#1{\pdfescapestrutfsixteen{#1}}%
+  \fi
+}
 
 \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
 with PDF output, and none of those formats could be found.  (.eps cannot
@@ -1134,21 +1177,23 @@
 
 \ifpdf
   %
-  % Color manipulation macros based on pdfcolor.tex,
+  % Color manipulation macros using ideas from 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.
+  % of actual black. The dark red here is dark enough to print on paper as
+  % nearly black, but still distinguishable for online viewing.  We use
+  % black by default, though.
   \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).
+  % rg sets the color for filling (usual text, etc.);
+  % RG 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}}%
+    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
     \domark
     \pdfsetcolor{#1}%
   }
@@ -1156,7 +1201,7 @@
   \def\maincolor{\rgbBlack}
   \pdfsetcolor{\maincolor}
   \edef\thiscolor{\maincolor}
-  \def\lastcolordefs{}
+  \def\currentcolordefs{}
   %
   \def\makefootline{%
     \baselineskip24pt
@@ -1233,24 +1278,83 @@
       \pdfrefximage \pdflastximage
     \fi}
   %
-  \def\pdfmkdest#1{{%
+  \def\setpdfdestname#1{{%
     % We have to set dummies so commands such as @code, and characters
     % such as \, aren't expanded when present in a section title.
     \indexnofonts
-    \turnoffactive
     \makevalueexpandable
+    \turnoffactive
+    \iftxiuseunicodedestname
+      \ifx \declaredencoding \latone
+        % Pass through Latin-1 characters.
+        % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
+      \else
+        \ifx \declaredencoding \utfeight
+          % Pass through Unicode characters.
+        \else
+          % Use ASCII approximations in destination names.
+          \passthroughcharsfalse
+        \fi
+      \fi
+    \else
+      % Use ASCII approximations in destination names.
+      \passthroughcharsfalse
+    \fi
     \def\pdfdestname{#1}%
     \txiescapepdf\pdfdestname
-    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
   }}
   %
+  \def\setpdfoutlinetext#1{{%
+    \indexnofonts
+    \makevalueexpandable
+    \turnoffactive
+    \ifx \declaredencoding \latone
+      % The PDF format can use an extended form of Latin-1 in bookmark
+      % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
+      % the "PDFDocEncoding".
+      \passthroughcharstrue
+      % Pass through Latin-1 characters.
+      %   LuaTeX: Convert to Unicode
+      %   pdfTeX: Use Latin-1 as PDFDocEncoding
+      \def\pdfoutlinetext{#1}%
+    \else
+      \ifx \declaredencoding \utfeight
+        \ifx\luatexversion\thisisundefined
+          % For pdfTeX  with UTF-8.
+          % TODO: the PDF format can use UTF-16 in bookmark strings,
+          % but the code for this isn't done yet.
+          % Use ASCII approximations.
+          \passthroughcharsfalse
+          \def\pdfoutlinetext{#1}%
+        \else
+          % For LuaTeX with UTF-8.
+          % Pass through Unicode characters for title texts.
+          \passthroughcharstrue
+          \def\pdfoutlinetext{#1}%
+        \fi
+      \else
+        % For non-Latin-1 or non-UTF-8 encodings.
+        % Use ASCII approximations.
+        \passthroughcharsfalse
+        \def\pdfoutlinetext{#1}%
+      \fi
+    \fi
+    % LuaTeX: Convert to UTF-16
+    % pdfTeX: Use Latin-1 as PDFDocEncoding
+    \txiescapepdfutfsixteen\pdfoutlinetext
+  }}
+  %
+  \def\pdfmkdest#1{%
+    \setpdfdestname{#1}%
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }
+  %
   % used to mark target names; must be expandable.
   \def\pdfmkpgn#1{#1}
   %
-  % 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}
+  % by default, use black for everything.
+  \def\urlcolor{\rgbBlack}
+  \def\linkcolor{\rgbBlack}
   \def\endlink{\setcolor{\maincolor}\pdfendlink}
   %
   % Adding outlines to PDF; macros for calculating structure of outlines
@@ -1272,18 +1376,13 @@
     % 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.
-    \edef\pdfoutlinedest{#3}%
-    \ifx\pdfoutlinedest\empty
-      \def\pdfoutlinedest{#4}%
-    \else
-      \txiescapepdf\pdfoutlinedest
+    \setpdfoutlinetext{#1}
+    \setpdfdestname{#3}
+    \ifx\pdfdestname\empty
+      \def\pdfdestname{#4}%
     \fi
     %
-    % Also escape PDF chars in the display string.
-    \edef\pdfoutlinetext{#1}%
-    \txiescapepdf\pdfoutlinetext
-    %
-    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+    \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
   }
   %
   \def\pdfmakeoutlines{%
@@ -1347,7 +1446,7 @@
       % 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
       % We can have normal brace characters in the PDF outlines, unlike
@@ -1403,6 +1502,9 @@
       \startlink attr{/Border [0 0 0]}%
         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
     \endgroup}
+  % \pdfgettoks - Surround page numbers in #1 with @pdflink.  #1 may
+  % be a simple number, or a list of numbers in the case of an index
+  % entry.
   \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
   \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
@@ -1438,42 +1540,298 @@
   \let\pdfmakeoutlines = \relax
 \fi  % \ifx\pdfoutput
 
+%
+% For XeTeX
+%
+\ifx\XeTeXrevision\thisisundefined
+\else
+  %
+  % XeTeX version check
+  %
+  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
+    % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
+    % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
+    % For avoiding PDF destination name replacement, we use this special
+    % instead of xdvipdfmx's command line option `-C 0x0010'.
+    \special{dvipdfmx:config C 0x0010}
+    % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
+    % It can handle Unicode destination names for PDF.
+    \txiuseunicodedestnametrue
+  \else
+    % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
+    % `dvipdfmx:config' special.
+    % So for avoiding PDF destination name replacement,
+    % xdvipdfmx's command line option `-C 0x0010' is necessary.
+    %
+    % XeTeX < 0.99995 can not handle Unicode destination names for PDF
+    % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
+    % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+    \txiuseunicodedestnamefalse
+  \fi
+  %
+  % Color support
+  %
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
+  %
+  \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
+  %
+  % Set color, and create a mark which defines \thiscolor accordingly,
+  % so that \makeheadline knows which color to restore.
+  \def\setcolor#1{%
+    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
+    \domark
+    \pdfsetcolor{#1}%
+  }
+  %
+  \def\maincolor{\rgbBlack}
+  \pdfsetcolor{\maincolor}
+  \edef\thiscolor{\maincolor}
+  \def\currentcolordefs{}
+  %
+  \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
+  }
+  %
+  % PDF outline support
+  %
+  % Emulate pdfTeX primitive
+  \def\pdfdest name#1 xyz{%
+    \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
+  }
+  %
+  \def\setpdfdestname#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \indexnofonts
+    \makevalueexpandable
+    \turnoffactive
+    \iftxiuseunicodedestname
+      % Pass through Unicode characters.
+    \else
+      % Use ASCII approximations in destination names.
+      \passthroughcharsfalse
+    \fi
+    \def\pdfdestname{#1}%
+    \txiescapepdf\pdfdestname
+  }}
+  %
+  \def\setpdfoutlinetext#1{{%
+    \turnoffactive
+    % Always use Unicode characters in title texts.
+    \def\pdfoutlinetext{#1}%
+    % For XeTeX, xdvipdfmx converts to UTF-16.
+    % So we do not convert.
+    \txiescapepdf\pdfoutlinetext
+  }}
+  %
+  \def\pdfmkdest#1{%
+    \setpdfdestname{#1}%
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }
+  %
+  % by default, use black for everything.
+  \def\urlcolor{\rgbBlack}
+  \def\linkcolor{\rgbBlack}
+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    \setpdfoutlinetext{#1}
+    \setpdfdestname{#3}
+    \ifx\pdfdestname\empty
+      \def\pdfdestname{#4}%
+    \fi
+    %
+    \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+      << /S /GoTo /D (\pdfdestname) >> >> }%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      %
+      % For XeTeX, counts of subentries are not necessary.
+      % Therefore, we read toc only once.
+      %
+      % We use node names as destinations.
+      \def\partentry##1##2##3##4{}% ignore parts in the outlines
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{1}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{2}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{3}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{4}{##3}{##4}}%
+      %
+      \let\appentry\numchapentry%
+      \let\appsecentry\numsecentry%
+      \let\appsubsecentry\numsubsecentry%
+      \let\appsubsubsecentry\numsubsubsecentry%
+      \let\unnchapentry\numchapentry%
+      \let\unnsecentry\numsecentry%
+      \let\unnsubsecentry\numsubsecentry%
+      \let\unnsubsubsecentry\numsubsubsecentry%
+      %
+      % For XeTeX, xdvipdfmx converts strings to UTF-16.
+      % Therefore, the encoding and the language may not be considered.
+      %
+      \indexnofonts
+      \setupdatafile
+      % 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[}]%
+  ]
 
+  \special{pdf:docview << /PageMode /UseOutlines >> }
+  % ``\special{pdf:tounicode ...}'' is not necessary
+  % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
+  % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
+  % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
+  % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+%
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \addtokens{\filename}{\PP}%
+      \advance\filenamelength by 1
+    \fi
+    \nextsp}
+  \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
+  }
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % 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
+      % 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}%
+      \special{pdf:bann << /Border [0 0 0]
+        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+    \endgroup}
+  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \special{pdf:bann << /Border [0 0 0]
+      /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
+    \setcolor{\linkcolor}#1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+%
+  %
+  % @image support
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\doxeteximage#1#2#3{%
+    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % XeTeX (and the PDF format) supports .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\xeteximgext=\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
+                  \errmessage{Could not find image file #1 for XeTeX}%
+                \else \gdef\xeteximgext{JPG}%
+                \fi
+              \else \gdef\xeteximgext{jpeg}%
+              \fi
+            \else \gdef\xeteximgext{jpg}%
+            \fi
+          \else \gdef\xeteximgext{png}%
+          \fi
+        \else \gdef\xeteximgext{PDF}%
+        \fi
+      \else \gdef\xeteximgext{pdf}%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    \def\xetexpdfext{pdf}%
+    \ifx\xeteximgext\xetexpdfext
+      \XeTeXpdffile "#1".\xeteximgext ""
+    \else
+      \def\xetexpdfext{PDF}%
+      \ifx\xeteximgext\xetexpdfext
+        \XeTeXpdffile "#1".\xeteximgext ""
+      \else
+        \XeTeXpicfile "#1".\xeteximgext ""
+      \fi
+    \fi
+    \ifdim \wd0 >0pt width \xeteximagewidth \fi
+    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+  }
+\fi
+
+
+%
 \message{fonts,}
 
-% Change the current font style to #1, remembering it in \curfontstyle.
-% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-% italics, not bold italics.
-%
-\def\setfontstyle#1{%
-  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-  \csname ten#1\endcsname  % change the current font
-}
-
-% Select #1 fonts with the current style.
-%
-\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-
-\def\rm{\fam=0 \setfontstyle{rm}}
-\def\it{\fam=\itfam \setfontstyle{it}}
-\def\sl{\fam=\slfam \setfontstyle{sl}}
-\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
-\def\sf{\fam=\sffam \setfontstyle{sf}}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this font style.
-\def\ttsl{\setfontstyle{ttsl}}
-
-
 % Set the baselineskip to #1, and the lineskip and strut size
 % correspondingly.  There is no deep meaning behind these magic numbers
 % used as factors; they just match (closely enough) what Knuth defined.
@@ -1821,8 +2179,10 @@
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstep1}{OT1}
 \setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1}
 \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -1852,6 +2212,20 @@
 \font\smallersy=cmsy8
 \def\smallerecsize{0800}
 
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
 % Fonts for title page (20.4pt):
 \def\titlenominalsize{20pt}
 \setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
@@ -1883,6 +2257,7 @@
 % Section fonts (14.4pt).
 \def\secnominalsize{14pt}
 \setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
 \setfont\secit\itbshape{10}{\magstep2}{OT1IT}
 \setfont\secsl\slbshape{10}{\magstep2}{OT1}
 \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
@@ -1908,7 +2283,7 @@
 \font\ssecsy=cmsy10 scaled 1315
 \def\ssececsize{1200}
 
-% Reduced fonts for @acro in text (10pt).
+% Reduced fonts for @acronym in text (10pt).
 \def\reducednominalsize{10pt}
 \setfont\reducedrm\rmshape{10}{1000}{OT1}
 \setfont\reducedtt\ttshape{10}{1000}{OT1TT}
@@ -1952,8 +2327,10 @@
 % A few fonts for @defun names and args.
 \setfont\defbf\bfshape{10}{\magstephalf}{OT1}
 \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1}
 \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \def\smallnominalsize{9pt}
@@ -1983,6 +2360,20 @@
 \font\smallersy=cmsy8
 \def\smallerecsize{0800}
 
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
 % Fonts for title page (20.4pt):
 \def\titlenominalsize{20pt}
 \setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
@@ -2039,7 +2430,7 @@
 \font\ssecsy=cmsy10
 \def\ssececsize{1000}
 
-% Reduced fonts for @acro in text (9pt).
+% Reduced fonts for @acronym in text (9pt).
 \def\reducednominalsize{9pt}
 \setfont\reducedrm\rmshape{9}{1000}{OT1}
 \setfont\reducedtt\ttshape{9}{1000}{OT1TT}
@@ -2059,6 +2450,12 @@
 \rm
 } % end of 10pt text font size definitions, \definetextfontsizex
 
+% 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}
+
 
 % We provide the user-level command
 %   @fonttextsize 10
@@ -2085,102 +2482,121 @@
  \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
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
 %
-\def\resetmathfonts{%
-  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname #1font\endcsname  % change the current font
 }
 
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this because \STYLE needs to also set the
-% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
-% \tenSTYLE to set the current font.
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.
+% We don't bother to reset \scriptscriptfont; awaiting user need.
+%
+\def\resetmathfonts{%
+  \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
+  \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
+  \textfont\ttfam=\ttfont \textfont\sffam=\sffont
+  %
+  % Fonts for superscript.  Note that the 7pt fonts are used regardless
+  % of the current font size.
+  \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy
+  \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl
+  \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt
+  \scriptfont\sffam=\sevensf
+}
+
+%
+
+% The font-changing commands (all called \...fonts) redefine the meanings
+% of \STYLEfont, instead of just \STYLE.  We do this because \STYLE needs
+% to also set the current \fam for math mode.  Our \STYLE (e.g., \rm)
+% commands hardwire \STYLEfont to set the current font.
+%
+% The fonts used for \ifont are for "math italics"  (\itfont is for italics
+% in regular text).  \syfont is also used in math mode only.
 %
 % Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower).  These relative commands are used in
-% the LaTeX logo and acronyms.
+% and \lllsize (three sizes lower).  These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
 %
 % This all needs generalizing, badly.
 %
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-  \let\tenttsl=\textttsl
-  \def\curfontsize{text}%
-  \def\lsize{reduced}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
-  \def\curfontsize{title}%
-  \def\lsize{chap}\def\lllsize{subsec}%
-  \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
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-  \let\tenttsl=\chapttsl
-  \def\curfontsize{chap}%
-  \def\lsize{sec}\def\lllsize{text}%
-  \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-  \let\tenttsl=\secttsl
-  \def\curfontsize{sec}%
-  \def\lsize{subsec}\def\lllsize{reduced}%
-  \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-  \let\tenttsl=\ssecttsl
-  \def\curfontsize{ssec}%
-  \def\lsize{text}\def\lllsize{small}%
-  \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts
-\def\reducedfonts{%
-  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-  \let\tenttsl=\reducedttsl
-  \def\curfontsize{reduced}%
-  \def\lsize{small}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallfonts{%
-  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-  \let\tenttsl=\smallttsl
-  \def\curfontsize{small}%
-  \def\lsize{smaller}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
-  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-  \let\tenttsl=\smallerttsl
-  \def\curfontsize{smaller}%
-  \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}
+\def\assignfonts#1{%
+  \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
+  \expandafter\let\expandafter\itfont\csname #1it\endcsname
+  \expandafter\let\expandafter\slfont\csname #1sl\endcsname
+  \expandafter\let\expandafter\bffont\csname #1bf\endcsname
+  \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
+  \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
+  \expandafter\let\expandafter\sffont  \csname #1sf\endcsname
+  \expandafter\let\expandafter\ifont   \csname #1i\endcsname
+  \expandafter\let\expandafter\syfont  \csname #1sy\endcsname
+  \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
+}
+
+\newif\ifrmisbold
+
+% Select smaller font size with the current style.  Used to change font size
+% in, e.g., the LaTeX logo and acronyms.  If we are using bold fonts for
+% normal roman text, also use bold fonts for roman text in the smaller size.
+\def\switchtolllsize{%
+   \expandafter\assignfonts\expandafter{\lllsize}%
+   \ifrmisbold
+     \let\rmfont\bffont
+   \fi
+   \csname\curfontstyle\endcsname
+}%
+
+\def\switchtolsize{%
+   \expandafter\assignfonts\expandafter{\lsize}%
+   \ifrmisbold
+     \let\rmfont\bffont
+   \fi
+   \csname\curfontstyle\endcsname
+}%
+
+\def\definefontsetatsize#1#2#3#4#5{%
+\expandafter\def\csname #1fonts\endcsname{%
+  \def\curfontsize{#1}%
+  \def\lsize{#2}\def\lllsize{#3}%
+  \csname rmisbold#5\endcsname
+  \assignfonts{#1}%
+  \resetmathfonts
+  \setleading{#4}%
+}}
+
+\definefontsetatsize{text}   {reduced}{smaller}{\textleading}{false}
+\definefontsetatsize{title}  {chap}   {subsec} {27pt}  {true}
+\definefontsetatsize{chap}   {sec}    {text}   {19pt}  {true}
+\definefontsetatsize{sec}    {subsec} {reduced}{17pt}  {true}
+\definefontsetatsize{ssec}   {text}   {small}  {15pt}  {true}
+\definefontsetatsize{reduced}{small}  {smaller}{10.5pt}{false}
+\definefontsetatsize{small}  {smaller}{smaller}{10.5pt}{false}
+\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
+
+\def\titlefont#1{{\titlefonts\rm #1}}
+\let\subsecfonts = \ssecfonts
+\let\subsubsecfonts = \ssecfonts
 
 % Define these just so they can be easily changed for other fonts.
 \def\angleleft{$\langle$}
@@ -2218,26 +2634,11 @@
 % 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
+% style.
 
 \let\currentmarkupstyle\empty
 
 \def\setupmarkupstyle#1{%
-  \csname markup#1true\endcsname
   \def\currentmarkupstyle{#1}%
   \markupstylesetup
 }
@@ -2299,11 +2700,15 @@
 % lilypond developers report.  xpdf does work with the regular 0x27.
 %
 \def\codequoteright{%
-  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
-      '%
+  \ifmonospace
+    \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+      \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+        '%
+      \else \char'15 \fi
     \else \char'15 \fi
-  \else \char'15 \fi
+   \else
+     '%
+   \fi
 }
 %
 % and a similar option for the left quote char vs. a grave accent.
@@ -2311,17 +2716,21 @@
 % 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`%
+  \ifmonospace
+    \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
-  \else \char'22 \fi
+   \else
+     \relax`%
+   \fi
 }
 
 % Commands to set the quote options.
-% 
+%
 \parseargdef\codequoteundirected{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -2362,7 +2771,7 @@
 % 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 
+  \ifusingtt
     {{\ttsl #2}\let\next=\relax}%
     {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
   \next
@@ -2376,8 +2785,10 @@
   \ifx\next,%
   \else\ifx\next-%
   \else\ifx\next.%
+  \else\ifx\next\.%
+  \else\ifx\next\comma%
   \else\ptexslash
-  \fi\fi\fi
+  \fi\fi\fi\fi\fi
   \aftersmartic
 }
 
@@ -2425,8 +2836,8 @@
 %
 \catcode`@=11
   \def\plainfrenchspacing{%
-    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
+    \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
     \def\endofsentencespacefactor{1000}% for @. and friends
   }
   \def\plainnonfrenchspacing{%
@@ -2439,7 +2850,7 @@
 
 % @t, explicit typewriter.
 \def\t#1{%
-  {\tt \rawbackslash \plainfrenchspacing #1}%
+  {\tt \plainfrenchspacing #1}%
   \null
 }
 
@@ -2466,7 +2877,6 @@
     % Turn off hyphenation.
     \nohyphenation
     %
-    \rawbackslash
     \plainfrenchspacing
     #1%
   }%
@@ -2474,14 +2884,14 @@
 }
 
 % We *must* turn on hyphenation at `-' and `_' in @code.
+% (But see \codedashfinish below.)
 % 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.
+% and arrange explicitly to hyphenate at a dash. -- rms.
 {
   \catcode`\-=\active \catcode`\_=\active
   \catcode`\'=\active \catcode`\`=\active
@@ -2495,17 +2905,38 @@
      \let-\codedash
      \let_\codeunder
     \else
-     \let-\realdash
+     \let-\normaldash
      \let_\realunder
     \fi
+    % Given -foo (with a single dash), we do not want to allow a break
+    % after the hyphen.
+    \global\let\codedashprev=\codedash
+    %
     \codex
   }
+  %
+  \gdef\codedash{\futurelet\next\codedashfinish}
+  \gdef\codedashfinish{%
+    \normaldash % always output the dash character itself.
+    %
+    % Now, output a discretionary to allow a line break, unless
+    % (a) the next character is a -, or
+    % (b) the preceding character is a -.
+    % E.g., given --posix, we do not want to allow a break after either -.
+    % Given --foo-bar, we do want to allow a break between the - and the b.
+    \ifx\next\codedash \else
+      \ifx\codedashprev\codedash
+      \else \discretionary{}{}{}\fi
+    \fi
+    % we need the space after the = for the case when \next itself is a
+    % space token; it would get swallowed otherwise.  As in @code{- a}.
+    \global\let\codedashprev= \next
+  }
 }
-
+\def\normaldash{-}
+%
 \def\codex #1{\tclose{#1}\endgroup}
 
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
 \def\codeunder{%
   % this is all so @math{@code{var_name}+1} can work.  In math mode, _
   % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
@@ -2519,9 +2950,9 @@
 }
 
 % 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.
+% each of the four underscores in __typeof__.  This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
 %
 \newif\ifallowcodebreaks  \allowcodebreakstrue
 
@@ -2547,37 +2978,21 @@
 \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.
-% (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}%
-  \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\ (\code{#1})% DVI: 2nd arg given, show both it and url
-      \fi
-    \else
-      \code{#1}% only url given, so show it
-    \fi
-  \fi
-  \endlink
-\endgroup}
+% @uref (abbreviation for `urlref') aka @url 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.
 
-% This \urefbreak definition is the active one.
+% TeX-only option to allow changing PDF output to show only the second
+% arg (if given), and not the url (which is then just the link target).
+\newif\ifurefurlonlylink
+
+% The main macro is \urefbreak, which allows breaking at expected
+% places within the url.  (There used to be another version, which
+% didn't support automatic breaking.)
 \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
@@ -2586,12 +3001,32 @@
   \ifdim\wd0 > 0pt
     \unhbox0 % third arg given, show only that
   \else
-    \setbox0 = \hbox{\ignorespaces #2}%
+    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
     \ifdim\wd0 > 0pt
       \ifpdf
-        \unhbox0             % PDF: 2nd arg given, show only it
+        % For pdfTeX and LuaTeX
+        \ifurefurlonlylink
+          % PDF plus option to not display url, show just arg
+          \unhbox0
+        \else
+          % PDF, normally display both arg and url for consistency,
+          % visibility, if the pdf is eventually used to print, etc.
+          \unhbox0\ (\urefcode{#1})%
+        \fi
       \else
-        \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
+        \ifx\XeTeXrevision\thisisundefined
+          \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+        \else
+          % For XeTeX
+          \ifurefurlonlylink
+            % PDF plus option to not display url, show just arg
+            \unhbox0
+          \else
+            % PDF, normally display both arg and url for consistency,
+            % visibility, if the pdf is eventually used to print, etc.
+            \unhbox0\ (\urefcode{#1})%
+          \fi
+        \fi
       \fi
     \else
       \urefcode{#1}% only url given, so show it
@@ -2602,9 +3037,9 @@
 
 % 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
+  \catcode`\&=\active \catcode`\.=\active
+  \catcode`\#=\active \catcode`\?=\active
+  \catcode`\/=\active
 }
 {
   \urefcatcodes
@@ -2628,39 +3063,33 @@
   \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\urefcodeamp{\urefprebreak \&\urefpostbreak}
+\def\urefcodedot{\urefprebreak .\urefpostbreak}
+\def\urefcodehash{\urefprebreak \#\urefpostbreak}
+\def\urefcodequest{\urefprebreak ?\urefpostbreak}
 \def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
 {
   \catcode`\/=\active
   \global\def\urefcodeslashfinish{%
-    \urefprestretch \slashChar
+    \urefprebreak \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
+    \ifx\next/\else \urefpostbreak \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.
-% 
+% 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}
+    \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak}
   \else\ifx\txiarg\wordafter
-    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+    \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak}
   \else
     \errhelp = \EMsimple
     \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
@@ -2670,6 +3099,19 @@
 \def\wordbefore{before}
 \def\wordnone{none}
 
+% Allow a ragged right output to aid breaking long URL's.  There can
+% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% the line is sufficent), a break at the \penalty100 with extra glue added
+% at the end of the line, or no break at all here.
+%   Changing the value of the penalty and/or the amount of stretch affects how
+% preferrable one choice is over the other.
+\def\urefallowbreak{%
+  \allowbreak
+  \hskip 0pt plus 4 em\relax
+  \penalty100
+  \hskip 0pt plus -4 em\relax
+}
+
 \urefbreakstyle after
 
 % @url synonym for @uref, since that's how everyone uses it.
@@ -2680,7 +3122,7 @@
 % So now @email is just like @uref, unless we are pdf.
 %
 %\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
+\ifpdforxetex
   \def\email#1{\doemail#1,,\finish}
   \def\doemail#1,#2,#3\finish{\begingroup
     \unsepspaces
@@ -2759,18 +3201,13 @@
 %
 \def\dmn#1{\thinspace #1}
 
-% @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}
-
 % @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}%
+  {\switchtolsize #1}%
   \def\temp{#2}%
   \ifx\temp\empty \else
     \space ({\unsepspaces \ignorespaces \temp \unskip})%
@@ -2816,21 +3253,24 @@
 \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
+  \ifmmode\else % only go into math if not in math mode already
+    \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
+    % have to provide another name for sup operator
+    \let\mathopsup=\sup
+  $\expandafter\finishmath\fi
 }
 \def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
 
@@ -2853,13 +3293,22 @@
   }
 }
 
-% ctrl is no longer a Texinfo command, but leave this definition for fun.
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts.  This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #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}
@@ -2867,6 +3316,15 @@
   \def\inlinefmtname{#1}%
   \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
 }
+%
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
+% FMTNAME is tex, else ELSE-TEXT.
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
+  \def\inlinefmtname{#1}%
+  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\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
@@ -2874,7 +3332,7 @@
 % *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{%
@@ -2883,6 +3341,23 @@
   \endgroup % close group opened by \tex.
 }
 
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
+%
+\long\def\inlineifset#1{\doinlineifset #1,\finish}
+\long\def\doinlineifset#1,#2,\finish{%
+  \def\inlinevarname{#1}%
+  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
+  \else\ignorespaces#2\fi
+}
+
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
+%
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
+\long\def\doinlineifclear#1,#2,\finish{%
+  \def\inlinevarname{#1}%
+  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
+}
+
 
 \message{glyphs,}
 % and logos.
@@ -2892,23 +3367,10 @@
 \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
+\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
+\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
+\let\{=\lbracechar
+\let\}=\rbracechar
 
 % @comma{} to avoid , parsing problems.
 \let\comma = ,
@@ -2926,8 +3388,8 @@
 % 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}}}
+\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
 
 % Dotless i and dotless j, used for accents.
 \def\imacro{i}
@@ -2956,12 +3418,12 @@
   {\setbox0=\hbox{T}%
    \vbox to \ht0{\hbox{%
      \ifx\textnominalsize\xwordpt
-       % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+       % 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%
+       \switchtolllsize A%
      \fi
      }%
      \vss
@@ -2970,11 +3432,16 @@
   \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}
+% Some math mode symbols.  Define \ensuremath to switch into math mode
+% unless we are already there.  Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
 
 % @dots{} outputs an ellipsis using the current font.
 % We do .5em per period so that it has the same spacing in the cm
@@ -3022,7 +3489,7 @@
 %
 \newbox\errorbox
 %
-{\tentt \global\dimen0 = 3em}% Width of the box.
+{\ttfont \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}
@@ -3138,8 +3605,15 @@
 \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{%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs.  That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding).  Both are part of the ec
+% package and follow the same conventions.
+%
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
   % 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
@@ -3148,14 +3622,14 @@
   \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
   \ifmonospace
     % typewriter:
-    \font\thisecfont = ectt\ecsize \space at \nominalsize
+    \font\thisecfont = #1ctt\ecsize \space at \nominalsize
   \else
     \ifx\curfontstyle\bfstylename
       % bold:
-      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+      \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
     \else
       % regular:
-      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+      \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
     \fi
   \fi
   \thisecfont
@@ -3166,7 +3640,7 @@
 % Adapted from the plain.tex definition of \copyright.
 %
 \def\registeredsymbol{%
-  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
                \hfil\crcr\Orb}}%
     }$%
 }
@@ -3199,13 +3673,16 @@
 \newif\ifseenauthor
 \newif\iffinishedtitlepage
 
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+% @setcontentsaftertitlepage used to do an implicit @contents or
+% @shortcontents after @end titlepage, but it is now obsolete.
+\def\setcontentsaftertitlepage{%
+  \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
+              command; move your @contents command if you want the contents
+              after the title page.}}%
+\def\setshortcontentsaftertitlepage{%
+  \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
+              command; move your @shortcontents and @contents commands if you
+              want the contents after the title page.}}%
 
 \parseargdef\shorttitlepage{%
   \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
@@ -3247,20 +3724,6 @@
   % Need this before the \...aftertitlepage checks so that if they are
   % in effect the toc pages will come out with page numbers.
   \HEADINGSon
-  %
-  % If they want short, they certainly want long too.
-  \ifsetshortcontentsaftertitlepage
-    \shortcontents
-    \contents
-    \global\let\shortcontents = \relax
-    \global\let\contents = \relax
-  \fi
-  %
-  \ifsetcontentsaftertitlepage
-    \contents
-    \global\let\contents = \relax
-    \global\let\shortcontents = \relax
-  \fi
 }
 
 \def\finishtitlepage{%
@@ -3271,12 +3734,11 @@
 
 % 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.
-% 
+% inside a \vbox, and fonts need to be set appropriately first. \par should
+% be specified before the end of the \vbox, since a vbox is a group.
+%
 \def\raggedtitlesettings{%
-  \rmisbold
+  \rm
   \hyphenpenalty=10000
   \parindent=0pt
   \tolerance=5000
@@ -3285,7 +3747,7 @@
 
 % Macros to be used within @titlepage:
 
-\let\subtitlerm=\tenrm
+\let\subtitlerm=\rmfont
 \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
 
 \parseargdef\title{%
@@ -3311,7 +3773,7 @@
   \else
     \checkenv\titlepage
     \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-    {\secfonts\rmisbold \leftline{#1}}%
+    {\secfonts\rm \leftline{#1}}%
   \fi
 }
 
@@ -3325,7 +3787,7 @@
 \newtoks\evenfootline    % footline on even pages
 \newtoks\oddfootline     % footline on odd pages
 
-% Now make TeX use those variables
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                             \else \the\evenheadline \fi}}
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
@@ -3364,7 +3826,7 @@
   %
   % Leave some space for the footline.  Hopefully ok to assume
   % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -12pt
+  \global\advance\txipageheight by -12pt
   \global\advance\vsize by -12pt
 }
 
@@ -3381,13 +3843,17 @@
 % @everyheadingmarks
 % @everyfootingmarks
 
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
 \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}
+\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
                           \headingmarks{odd}{heading}{#1} }
-\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
                           \headingmarks{odd}{footing}{#1} }
 % #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
 \def\headingmarks#1#2#3 {%
@@ -3408,7 +3874,7 @@
 % By default, they are off at the start of a document,
 % and turned `on' after @end titlepage.
 
-\def\headings #1 {\csname HEADINGS#1\endcsname}
+\parseargdef\headings{\csname HEADINGS#1\endcsname}
 
 \def\headingsoff{% non-global headings elimination
   \evenheadline={\hfil}\evenfootline={\hfil}%
@@ -3428,7 +3894,7 @@
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 \let\contentsalignmacro = \chappager
@@ -3439,8 +3905,8 @@
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 \def\HEADINGSon{\HEADINGSdouble}
@@ -3451,7 +3917,7 @@
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 
@@ -3459,8 +3925,8 @@
 \def\HEADINGSsinglex{%
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 
@@ -3638,7 +4104,7 @@
   \parskip=\smallskipamount
   \ifdim\parskip=0pt \parskip=2pt \fi
   %
-  % Try typesetting the item mark that if the document erroneously says
+  % Try typesetting the item mark so 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
@@ -3670,7 +4136,12 @@
    \noindent
    \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
    %
-   \vadjust{\penalty 1200}}% not good to break after first line of item.
+   \ifinner\else
+     \vadjust{\penalty 1200}% not good to break after first line of item.
+   \fi
+   % We can be in inner vertical mode in a footnote, although an
+   % @itemize looks awful there.
+  }%
   \flushcr
 }
 
@@ -3889,18 +4360,22 @@
 
 % multitable-only commands.
 %
-% @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.  \everycr resets \everytab so we don't have to
+% @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.  \everycr below 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
+  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
   \global\everytab={\bf}% can't use \headitemfont since the parsing differs
   \the\everytab % for the first item
 }%
 %
+% default for tables with no headings.
+\let\headitemcrhook=\relax
+%
 % 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 again encounter the problem the 1sp was intended to solve.
@@ -3931,15 +4406,15 @@
   %
   \everycr = {%
     \noalign{%
-      \global\everytab={}%
+      \global\everytab={}% Reset from possible headitem.
       \global\colcount=0 % Reset the column counter.
-      % Check for saved footnotes, etc.
+      %
+      % Check for saved footnotes, etc.:
       \checkinserts
-      % Keeps underfull box messages off when table breaks over pages.
-      %\filbreak
-	% Maybe so, but it also creates really weird page breaks when the
-	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
-	% problem manifests itself, so it can be fixed for real --karl.
+      %
+      % Perhaps a \nobreak, then reset:
+      \headitemcrhook
+      \global\let\headitemcrhook=\relax
     }%
   }%
   %
@@ -4178,7 +4653,7 @@
 \def\value{\begingroup\makevalueexpandable\valuexxx}
 \def\valuexxx#1{\expandablevalue{#1}\endgroup}
 {
-  \catcode`\- = \active \catcode`\_ = \active
+  \catcode`\-=\active \catcode`\_=\active
   %
   \gdef\makevalueexpandable{%
     \let\value = \expandablevalue
@@ -4187,18 +4662,10 @@
     % ..., but we might end up with active ones in the argument if
     % we're called from @code, as @code{@value{foo-bar_}}, though.
     % So \let them to their normal equivalents.
-    \let-\realdash \let_\normalunderscore
+    \let-\normaldash \let_\normalunderscore
   }
 }
 
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we call \makevalueexpandable in \indexdummies).
-% The command has to be fully expandable (if the variable is set), since
-% the result winds up in the index file.  This means that if the
-% variable's value contains other Texinfo commands, it's almost certain
-% it will fail (although perhaps we could fix that with sufficient work
-% to do a one-level expansion on the result, instead of complete).
-%
 \def\expandablevalue#1{%
   \expandafter\ifx\csname SET#1\endcsname\relax
     {[No value for ``#1'']}%
@@ -4208,10 +4675,36 @@
   \fi
 }
 
+% Like \expandablevalue, but completely expandable (the \message in the
+% definition above operates at the execution level of TeX).  Used when
+% writing to auxiliary files, due to the expansion that \write does.
+% If flag is undefined, pass through an unexpanded @value command: maybe it
+% will be set by the time it is read back in.
+%
+% NB flag names containing - or _ may not work here.
+\def\dummyvalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    \string\value{#1}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% Used for @value's in index entries to form the sort key: expand the @value
+% if possible, otherwise sort late.
+\def\indexnofontsvalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    ZZZZZZZ%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
 %
-% To get special treatment of `@end ifset,' call \makeond and the redefine.
+% To get the special treatment we need for `@end ifset,' we call
+% \makecond and then redefine.
 %
 \makecond{ifset}
 \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
@@ -4242,7 +4735,7 @@
 % 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}}}
 %
@@ -4282,19 +4775,16 @@
 % except not \outer, so it can be used within macros and \if's.
 \edef\newwrite{\makecsname{ptexnewwrite}}
 
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
+% \newindex {foo} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index.  The file's extension is IX.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
 %
 \def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
     \noexpand\doindex{#1}}
 }
@@ -4308,14 +4798,19 @@
 \def\defcodeindex{\parsearg\newcodeindex}
 %
 \def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
+  \expandafter\chardef\csname#1indfile\endcsname=0
   \expandafter\xdef\csname#1index\endcsname{%
     \noexpand\docodeindex{#1}}%
 }
 
+% The default indices:
+\newindex{cp}%      concepts,
+\newcodeindex{fn}%  functions,
+\newcodeindex{vr}%  variables,
+\newcodeindex{tp}%  types,
+\newcodeindex{ky}%  keys
+\newcodeindex{pg}%  and programs.
+
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
@@ -4329,14 +4824,7 @@
 % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
 % #3 the target index (bar).
 \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 \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
-  \fi
+  \requireopenindexfile{#3}%
   % redefine \fooindfile:
   \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
   \expandafter\let\csname#2indfile\endcsname=\temp
@@ -4344,108 +4832,57 @@
   \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }
 
-% Define \doindex, the driver for all \fooindex macros.
+% Define \doindex, the driver for all index macros.
 % Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
+% and it is the two-letter name of the index.
 
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
 
 % like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
 
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
-  \escapechar = `\\     % use backslash in output files.
-  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-  \def\ {\realbackslash\space }%
-  %
-  % 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
-}
 
-% For the aux and toc files, @ is the escape character.  So we want to
-% redefine everything using @ as the escape character (instead of
-% \realbackslash, still used for index files).  When everything uses @,
-% this will be simpler.
+% Used for the aux, toc and index files to prevent expansion of Texinfo
+% commands.
 %
 \def\atdummies{%
-  \def\@{@@}%
-  \def\ {@ }%
-  \let\{ = \lbraceatcmd
-  \let\} = \rbraceatcmd
+  \definedummyletter\@%
+  \definedummyletter\ %
+  \definedummyletter\{%
+  \definedummyletter\}%
+  \definedummyletter\&%
   %
   % Do the redefinitions.
-  \commondummies
+  \definedummies
   \otherbackslash
 }
 
-% Called from \indexdummies and \atdummies.
+% \definedummyword defines \#1 as \string\#1\space, thus effectively
+% 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.
 %
-\def\commondummies{%
+% These can be used both for control words that take an argument and
+% those that do not.  If it is followed by {arg} in the input, then
+% that will dutifully get written to the index (or wherever).
+%
+% For control letters, we have \definedummyletter, which omits the
+% space.
+%
+\def\definedummyword  #1{\def#1{\string#1\space}}%
+\def\definedummyletter#1{\def#1{\string#1}}%
+\let\definedummyaccent\definedummyletter
+
+% Called from \atdummies to prevent the expansion of commands.
+%
+\def\definedummies{%
   %
-  % \definedummyword defines \#1 as \string\#1\space, thus effectively
-  % 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.
-  %
-  % For control letters, we have \definedummyletter, which omits the
-  % space.
-  %
-  % These can be used both for control words that take an argument and
-  % those that do not.  If it is followed by {arg} in the input, then
-  % that will dutifully get written to the index (or wherever).
-  %
-  \def\definedummyword  ##1{\def##1{\string##1\space}}%
-  \def\definedummyletter##1{\def##1{\string##1}}%
-  \let\definedummyaccent\definedummyletter
-  %
+  \let\commondummyword\definedummyword
+  \let\commondummyletter\definedummyletter
+  \let\commondummyaccent\definedummyaccent
   \commondummiesnofonts
   %
   \definedummyletter\_%
@@ -4486,7 +4923,10 @@
   \definedummyword\TeX
   %
   % Assorted special characters.
+  \definedummyword\ampchar
+  \definedummyword\atchar
   \definedummyword\arrow
+  \definedummyword\backslashchar
   \definedummyword\bullet
   \definedummyword\comma
   \definedummyword\copyright
@@ -4505,6 +4945,7 @@
   \definedummyword\guilsinglright
   \definedummyword\lbracechar
   \definedummyword\leq
+  \definedummyword\mathopsup
   \definedummyword\minus
   \definedummyword\ogonek
   \definedummyword\pounds
@@ -4518,88 +4959,135 @@
   \definedummyword\quotesinglbase
   \definedummyword\rbracechar
   \definedummyword\result
+  \definedummyword\sub
+  \definedummyword\sup
   \definedummyword\textdegree
   %
+  \definedummyword\subentry
+  %
   % We want to disable all macros so that they are not expanded by \write.
   \macrolist
+  \let\value\dummyvalue
   %
   \normalturnoffactive
-  %
-  % Handle some cases of @value -- where it does not contain any
-  % (non-fully-expandable) commands.
-  \makevalueexpandable
 }
 
-% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+% \commondummiesnofonts: common to \definedummies and \indexnofonts.
+% Define \commondummyletter, \commondummyaccent and \commondummyword before
+% using.  Used for accents, font commands, and various control letters.
 %
 \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
+  \commondummyletter\!%
+  \commondummyaccent\"%
+  \commondummyaccent\'%
+  \commondummyletter\*%
+  \commondummyaccent\,%
+  \commondummyletter\.%
+  \commondummyletter\/%
+  \commondummyletter\:%
+  \commondummyaccent\=%
+  \commondummyletter\?%
+  \commondummyaccent\^%
+  \commondummyaccent\`%
+  \commondummyaccent\~%
+  \commondummyword\u
+  \commondummyword\v
+  \commondummyword\H
+  \commondummyword\dotaccent
+  \commondummyword\ogonek
+  \commondummyword\ringaccent
+  \commondummyword\tieaccent
+  \commondummyword\ubaraccent
+  \commondummyword\udotaccent
+  \commondummyword\dotless
   %
   % Texinfo font commands.
-  \definedummyword\b
-  \definedummyword\i
-  \definedummyword\r
-  \definedummyword\sansserif
-  \definedummyword\sc
-  \definedummyword\slanted
-  \definedummyword\t
+  \commondummyword\b
+  \commondummyword\i
+  \commondummyword\r
+  \commondummyword\sansserif
+  \commondummyword\sc
+  \commondummyword\slanted
+  \commondummyword\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
+  \commondummyword\abbr
+  \commondummyword\acronym
+  \commondummyword\anchor
+  \commondummyword\cite
+  \commondummyword\code
+  \commondummyword\command
+  \commondummyword\dfn
+  \commondummyword\dmn
+  \commondummyword\email
+  \commondummyword\emph
+  \commondummyword\env
+  \commondummyword\file
+  \commondummyword\image
+  \commondummyword\indicateurl
+  \commondummyword\inforef
+  \commondummyword\kbd
+  \commondummyword\key
+  \commondummyword\math
+  \commondummyword\option
+  \commondummyword\pxref
+  \commondummyword\ref
+  \commondummyword\samp
+  \commondummyword\strong
+  \commondummyword\tie
+  \commondummyword\U
+  \commondummyword\uref
+  \commondummyword\url
+  \commondummyword\var
+  \commondummyword\verb
+  \commondummyword\w
+  \commondummyword\xref
 }
 
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+\let\indexatchar\relax
+\let\indexbackslash\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+  @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+  \gdef\indexnonalnumdisappear{%
+    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+      % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+      % (Introduced for FSFS 2nd ed.)
+      \let`=\empty
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+      \backslashdisappear
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+      \def-{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+      \def<{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+      \def\@{}%
+    \fi
+  }
+
+  \gdef\indexnonalnumreappear{%
+    \let-\normaldash
+    \let<\normalless
+  }
+}
+
+
 % \indexnofonts is used when outputting the strings to sort the index
 % by, and when constructing control sequence names.  It eliminates all
 % control sequences and just writes whatever the best ASCII sort string
@@ -4607,12 +5095,11 @@
 %
 \def\indexnofonts{%
   % Accent commands should become @asis.
-  \def\definedummyaccent##1{\let##1\asis}%
+  \def\commondummyaccent##1{\let##1\asis}%
   % We can just ignore other control letters.
-  \def\definedummyletter##1{\let##1\empty}%
+  \def\commondummyletter##1{\let##1\empty}%
   % All control words become @asis by default; overrides below.
-  \let\definedummyword\definedummyaccent
-  %
+  \let\commondummyword\commondummyaccent
   \commondummiesnofonts
   %
   % Don't no-op \tt, since it isn't a user-level command
@@ -4625,14 +5112,10 @@
   \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}%
+  \uccode`\1=`\{ \uppercase{\def\{{1}}%
+  \uccode`\1=`\} \uppercase{\def\}{1}}%
+  \let\lbracechar\{%
+  \let\rbracechar\}%
   %
   % Non-English letters.
   \def\AA{AA}%
@@ -4641,7 +5124,7 @@
   \def\L{L}%
   \def\OE{OE}%
   \def\O{O}%
-  \def\TH{ZZZ}%
+  \def\TH{TH}%
   \def\aa{aa}%
   \def\ae{ae}%
   \def\dh{dzz}%
@@ -4653,45 +5136,45 @@
   \def\o{o}%
   \def\questiondown{?}%
   \def\ss{ss}%
-  \def\th{zzz}%
+  \def\th{th}%
   %
   \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\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\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
+  % Assorted special characters.  \defglyph gives the control sequence a
+  % definition that removes the {} that follows its use.
+  \defglyph\atchar{@}%
+  \defglyph\arrow{->}%
+  \defglyph\bullet{bullet}%
+  \defglyph\comma{,}%
+  \defglyph\copyright{copyright}%
+  \defglyph\dots{...}%
+  \defglyph\enddots{...}%
+  \defglyph\equiv{==}%
+  \defglyph\error{error}%
+  \defglyph\euro{euro}%
+  \defglyph\expansion{==>}%
+  \defglyph\geq{>=}%
+  \defglyph\guillemetleft{<<}%
+  \defglyph\guillemetright{>>}%
+  \defglyph\guilsinglleft{<}%
+  \defglyph\guilsinglright{>}%
+  \defglyph\leq{<=}%
+  \defglyph\lbracechar{\{}%
+  \defglyph\minus{-}%
+  \defglyph\point{.}%
+  \defglyph\pounds{pounds}%
+  \defglyph\print{-|}%
+  \defglyph\quotedblbase{"}%
+  \defglyph\quotedblleft{"}%
+  \defglyph\quotedblright{"}%
+  \defglyph\quoteleft{`}%
+  \defglyph\quoteright{'}%
+  \defglyph\quotesinglbase{,}%
+  \defglyph\rbracechar{\}}%
+  \defglyph\registeredsymbol{R}%
+  \defglyph\result{=>}%
+  \defglyph\textdegree{o}%
   %
   % 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.
@@ -4704,75 +5187,200 @@
   % goes to end-of-line is not handled.
   %
   \macrolist
+  \let\value\indexnofontsvalue
 }
+\def\defglyph#1#2{\def#1##1{#2}} % see above
 
-% 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)?
 
-% Most index entries go through here, but \dosubind is the general case.
+
 % #1 is the index name, #2 is the entry text.
-\def\doind#1#2{\dosubind{#1}{#2}{}}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% empty if called from \doind, as we usually are (the main exception
-% is with most defuns, which call us directly).
-%
-\def\dosubind#1#2#3{%
+\def\doind#1#2{%
   \iflinks
   {%
-    % Store the main index entry text (including the third arg).
-    \toks0 = {#2}%
-    % If third arg is present, precede it with a space.
-    \def\thirdarg{#3}%
-    \ifx\thirdarg\empty \else
-      \toks0 = \expandafter{\the\toks0 \space #3}%
-    \fi
     %
+    \requireopenindexfile{#1}%
     \edef\writeto{\csname#1indfile\endcsname}%
     %
-    \safewhatsit\dosubindwrite
+    \def\indextext{#2}%
+    \safewhatsit\doindwrite
   }%
   \fi
 }
 
-% Write the entry in \toks0 to the index file:
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+  \expandafter\newwrite \csname#1indfile\endcsname
+  \edef\suffix{#1}%
+  % A .fls suffix would conflict with the file extension for the output
+  % of -recorder, so use .f1s instead.
+  \ifx\suffix\indexisfl\def\suffix{f1}\fi
+  % Open the file
+  \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+  % Using \immediate above here prevents an object entering into the current
+  % box, which could confound checks such as those in \safewhatsit for
+  % preceding skips.
+  \typeout{Writing index file \jobname.\suffix}%
+\fi}
+\def\indexisfl{fl}
+
+% Definition for writing index entry sort key.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+  \begingroup
+  \indexnonalnumreappear
+  \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+  \xdef\indexsortkey{#1}\endgroup}
+}
+
+\def\indexwriteseealso#1{
+  \gdef\pagenumbertext{\string\seealso{#1}}%
+}
+\def\indexwriteseeentry#1{
+  \gdef\pagenumbertext{\string\seeentry{#1}}%
+}
+
+% The default definitions
+\def\sortas#1{}%
+\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
+\def\putwordSeeAlso{See also}
+\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
+
+
+% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
+%   * Set \bracedtext to "{aaa}{bbb}"
+%   * Set \fullindexsortkey to "aaa @subentry ZZZ"
+%   * If @seealso occurs, set \pagenumbertext
 %
-\def\dosubindwrite{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+\def\splitindexentry#1{%
+  \gdef\fullindexsortkey{}%
+  \xdef\bracedtext{}%
+  \def\sep{}%
+  \def\seealso##1{}%
+  \def\seeentry##1{}%
+  \expandafter\doindexsegment#1\subentry\finish\subentry
+}
+
+% append the results from the next segment
+\def\doindexsegment#1\subentry{%
+  \def\segment{#1}%
+  \ifx\segment\isfinish
+  \else
+    %
+    % Fully expand the segment, throwing away any @sortas directives, and
+    % trim spaces.
+    \edef\trimmed{\segment}%
+    \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+    %
+    \xdef\bracedtext{\bracedtext{\trimmed}}%
+    %
+    % Get the string to sort by.  Process the segment with all
+    % font commands turned off.
+    \bgroup
+      \let\sortas\indexwritesortas
+      \let\seealso\indexwriteseealso
+      \let\seeentry\indexwriteseeentry
+      \indexnofonts
+      % The braces around the commands are recognized by texindex.
+      \def\lbracechar{{\string\indexlbrace}}%
+      \def\rbracechar{{\string\indexrbrace}}%
+      \let\{=\lbracechar
+      \let\}=\rbracechar
+      \def\@{{\string\indexatchar}}%
+      \def\atchar##1{\@}%
+      \def\backslashchar{{\string\indexbackslash}}%
+      \uccode`\~=`\\ \uppercase{\let~\backslashchar}%
+      %
+      \let\indexsortkey\empty
+      \global\let\pagenumbertext\empty
+      % Execute the segment and throw away the typeset output.  This executes
+      % any @sortas or @seealso commands in this segment.
+      \setbox\dummybox = \hbox{\segment}%
+      \ifx\indexsortkey\empty{%
+        \indexnonalnumdisappear
+        \xdef\trimmed{\segment}%
+        \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+        \xdef\indexsortkey{\trimmed}%
+        \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
+      }\fi
+      %
+      % Append to \fullindexsortkey.
+      \edef\tmp{\gdef\noexpand\fullindexsortkey{%
+                  \fullindexsortkey\sep\indexsortkey}}%
+      \tmp
+    \egroup
+    \def\sep{\subentry}%
+    %
+    \expandafter\doindexsegment
+  \fi
+}
+\def\isfinish{\finish}%
+\newbox\dummybox % used above
+
+\let\subentry\relax
+
+% Use \ instead of @ in index files.  To support old texi2dvi and texindex.
+% This works without changing the escape character used in the toc or aux
+% files because the index entries are fully expanded here, and \string uses
+% the current value of \escapechar.
+\def\escapeisbackslash{\escapechar=`\\}
+
+% Use \ in index files by default.  texi2dvi didn't support @ as the escape
+% character (as it checked for "\entry" in the files, and not "@entry").  When
+% the new version of texi2dvi has had a chance to become more prevalent, then
+% the escape character can change back to @ again.  This should be an easy
+% change to make now because both @ and \ are only used as escape characters in
+% index files, never standing for themselves.
+%
+\set txiindexescapeisbackslash
+
+% Write the entry in \indextext to the index file.
+%
+\def\doindwrite{%
+  \maybemarginindex
+  %
+  \atdummies
+  %
+  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
+    \escapeisbackslash
   \fi
   %
-  % Remember, we are within a group.
-  \indexdummies % Must do this here, since \bf, etc expand at this stage
-  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-      % so it will be output as is; and it will print as backslash.
+  % For texindex which always views { and } as separators.
+  \def\{{\lbracechar{}}%
+  \def\}{\rbracechar{}}%
+  \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
   %
-  % Process the index entry with all font commands turned off, to
-  % get the string to sort by.
-  {\indexnofonts
-   \edef\temp{\the\toks0}% need full expansion
-   \xdef\indexsorttmp{\temp}%
-  }%
+  % Split the entry into primary entry and any subentries, and get the index
+  % sort key.
+  \splitindexentry\indextext
   %
   % Set up the complete index entry, with both the sort key and
   % the original text, including any font commands.  We write
   % three arguments to \entry to the .?? file (four in the
   % subentry case), texindex reduces to two when writing the .??s
   % sorted result.
+  %
   \edef\temp{%
     \write\writeto{%
-      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+      \string\entry{\fullindexsortkey}%
+        {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
+        \bracedtext}%
   }%
   \temp
 }
 
+% Put the index entry in the margin if desired (undocumented).
+\def\maybemarginindex{%
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
+  \fi
+}
+\let\SETmarginindex=\relax
+
+
 % Take care of unwanted page breaks/skips around a whatsit:
 %
 % If a skip is the last thing on the list now, preserve it
@@ -4859,9 +5467,14 @@
 %  \entry {topic}{pagelist}
 %     for a topic that is used without subtopics
 %  \primary {topic}
+%  \entry {topic}{}
 %     for the beginning of a topic that is used with subtopics
 %  \secondary {subtopic}{pagelist}
 %     for each subtopic.
+%  \secondary {subtopic}{}
+%     for a subtopic with sub-subtopics
+%  \tertiary {subtopic}{subsubtopic}{pagelist}
+%     for each sub-subtopic.
 
 % Define the user-accessible indexing commands
 % @findex, @vindex, @kindex, @cindex.
@@ -4873,11 +5486,6 @@
 \def\tindex {\tpindex}
 \def\pindex {\pgindex}
 
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
 % Define the macros used in formatting output of the sorted index material.
 
 % @printindex causes a particular index (the ??s file) to get printed.
@@ -4891,57 +5499,123 @@
   \plainfrenchspacing
   \everypar = {}% don't want the \kern\-parindent from indentation suppression.
   %
+  % See comment in \requireopenindexfile.
+  \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+  %
   % See if the index file exists and is nonempty.
-  % Change catcode of @ here so that if the index file contains
-  % \initial {@}
-  % as its first line, TeX doesn't complain about mismatched braces
-  % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
-  \openin 1 \jobname.#1s
+  \openin 1 \jobname.\indexname s
   \ifeof 1
     % \enddoublecolumns gets confused if there is no text in the index,
     % and it loses the chapter title and the aux file entries for the
     % index.  The easiest way to prevent this problem is to make sure
     % there is some text.
     \putwordIndexNonexistent
+    \typeout{No file \jobname.\indexname s.}%
   \else
-    %
     % If the index file exists but is empty, then \openin leaves \ifeof
     % false.  We have to make TeX try to read something from the file, so
     % it can discover if there is anything in it.
-    \read 1 to \temp
+    \read 1 to \thisline
     \ifeof 1
       \putwordIndexIsEmpty
     \else
-      % Index files are almost Texinfo source, but we use \ as the escape
-      % character.  It would be better to use @, but that's too big a change
-      % to make right now.
-      \def\indexbackslash{\backslashcurfont}%
-      \catcode`\\ = 0
-      \escapechar = `\\
-      \begindoublecolumns
-      \input \jobname.#1s
-      \enddoublecolumns
+      \expandafter\printindexzz\thisline\relax\relax\finish%
     \fi
   \fi
   \closein 1
 \endgroup}
 
+% If the index file starts with a backslash, forgo reading the index
+% file altogether.  If somebody upgrades texinfo.tex they may still have
+% old index files using \ as the escape character.  Reading this would
+% at best lead to typesetting garbage, at worst a TeX syntax error.
+\def\printindexzz#1#2\finish{%
+  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
+    \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
+      \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
+\errmessage{%
+ERROR: A sorted index file in an obsolete format was skipped.
+To fix this problem, please upgrade your version of 'texi2dvi'
+or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
+If you are using an old version of 'texindex' (part of the Texinfo
+distribution), you may also need to upgrade to a newer version (at least 6.0).
+You may be able to typeset the index if you run
+'texindex \jobname.\indexname' yourself.
+You could also try setting the 'txiindexescapeisbackslash' flag by
+running a command like
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
+this, Texinfo will try to use index files in the old format.
+If you continue to have problems, deleting the index files and starting again
+might help (with 'rm \jobname.?? \jobname.??s')%
+}%
+      \else
+        (Skipped sorted index file in obsolete format)
+      \fi
+    \else
+      \begindoublecolumns
+      \input \jobname.\indexname s
+      \enddoublecolumns
+    \fi
+  \else
+    \begindoublecolumns
+    \catcode`\\=0\relax
+    \catcode`\@=12\relax
+    \input \jobname.\indexname s
+    \enddoublecolumns
+  \fi
+}
+
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+  % special control sequences used in the index sort key
+  \let\indexlbrace\{%
+  \let\indexrbrace\}%
+  \let\indexatchar\@%
+  \def\indexbackslash{\math{\backslash}}%
   %
+  % Some changes for non-alphabetic characters.  Using the glyphs from the
+  % math fonts looks more consistent than the typewriter font used elsewhere
+  % for these characters.
+  \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
+  %
+  % In case @\ is used for backslash
+  \uppercase{\let\\=~}
+  % Can't get bold backslash so don't use bold forward slash
+  \catcode`\/=13
+  \def/{{\secrmnotbold \normalslash}}%
+  \def-{{\normaldash\normaldash}}% en dash `--'
+  \def^{{\chapbf \normalcaret}}%
+  \def~{{\chapbf \normaltilde}}%
+  \def\_{%
+     \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+  \def|{$\vert$}%
+  \def<{$\less$}%
+  \def>{$\gtr$}%
+  \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+  \bgroup
+  \initialglyphs
+  \initialx
+}
+
+\def\initialx#1{%
   % Remove any glue we may have, we'll be inserting our own.
   \removelastskip
   %
   % We like breaks before the index initials, so insert a bonus.
+  % The glue before the bonus allows a little bit of space at the
+  % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
-  \vskip 0pt plus 3\baselineskip
-  \penalty 0
-  \vskip 0pt plus -3\baselineskip
+  \vskip 0pt plus 5\baselineskip
+  \penalty -300
+  \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
   % baselineskips increases the chance of the dots lining up from column
@@ -4949,24 +5623,24 @@
   % we need before each entry, but it's better.
   %
   % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
+  \vskip 1.67\baselineskip plus 1\baselineskip
+  \leftline{\secfonts \kern-0.05em \secbf #1}%
+  % \secfonts is inside the argument of \leftline so that the change of
+  % \baselineskip will not affect any glue inserted before the vbox that
+  % \leftline creates.
   % Do our best not to break after the initial.
   \nobreak
   \vskip .33\baselineskip plus .1\baselineskip
-}}
+  \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
 
 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and
 % then page number (#2) flushed to the right margin.  It is used for index
 % and table of contents entries.  The paragraph is indented by \leftskip.
 %
-% A straightforward implementation would start like this:
-%	\def\entry#1#2{...
-% 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{%
   \begingroup
     %
@@ -4974,38 +5648,14 @@
     % affect previous text.
     \par
     %
-    % Do not fill out the last line with white space.
-    \parfillskip = 0in
-    %
     % No extra space above this paragraph.
     \parskip = 0in
     %
-    % Do not prefer a separate line ending with a hyphen to fewer lines.
-    \finalhyphendemerits = 0
-    %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
-    %
-    % \hangafter is reset to 1 (which is the value we want) at the start
-    % of each paragraph, so we need not do anything with that.
-    \hangindent = 2em
-    %
-    % When the entry text needs to be broken, just fill out the first line
-    % with blank space.
-    \rightskip = 0pt plus1fil
-    %
-    % A bit of stretch before each entry for the benefit of balancing
-    % 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}%
+    \def\entrybreak{\hfil\break}% An undocumented command
     %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
@@ -5013,85 +5663,148 @@
 }
 \def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
+    % Save the text of the entry
+    \global\setbox\boxA=\hbox\bgroup
     \bgroup % Instead of the swallowed brace.
       \noindent
       \aftergroup\finishentry
       % And now comes the text of the entry.
+      % Not absorbing as a macro argument reduces the chance of problems
+      % with catcodes occurring.
 }
-\def\finishentry#1{%
-    % #1 is the page number.
-    %
-    % 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.
-    \setbox\boxA = \hbox{#1}%
-    \ifdim\wd\boxA = 0pt
-      \ %
-    \else
+{\catcode`\@=11
+\gdef\finishentry#1{%
+    \egroup % end box A
+    \dimen@ = \wd\boxA % Length of text of entry
+    \global\setbox\boxA=\hbox\bgroup
+      \unhbox\boxA
+      % #1 is the page number.
       %
-      % If we must, put the page number on a line of its own, and fill out
-      % this line with blank space.  (The \hfil is overwhelmed with the
-      % fill leaders glue in \indexdotfill if the page number does fit.)
-      \hfil\penalty50
-      \null\nobreak\indexdotfill % Have leaders before the page number.
-      %
-      % The `\ ' here is removed by the implicit \unskip that TeX does as
-      % part of (the primitive) \par.  Without it, a spurious underfull
-      % \hbox ensues.
-      \ifpdf
-	\pdfgettoks#1.%
-	\ \the\toksA
+      % Get the width of the page numbers, and only use
+      % leaders if they are present.
+      \global\setbox\boxB = \hbox{#1}%
+      \ifdim\wd\boxB = 0pt
+        \null\nobreak\hfill\ %
       \else
-	\ #1%
+        %
+        \null\nobreak\indexdotfill % Have leaders before the page number.
+        %
+        \ifpdforxetex
+          \pdfgettoks#1.%
+          \hskip\skip\thinshrinkable\the\toksA
+        \else
+          \hskip\skip\thinshrinkable #1%
+        \fi
       \fi
+    \egroup % end \boxA
+    \ifdim\wd\boxB = 0pt
+      \noindent\unhbox\boxA\par
+      \nobreak
+    \else\bgroup
+      % We want the text of the entries to be aligned to the left, and the
+      % page numbers to be aligned to the right.
+      %
+      \parindent = 0pt
+      \advance\leftskip by 0pt plus 1fil
+      \advance\leftskip by 0pt plus -1fill
+      \rightskip = 0pt plus -1fil
+      \advance\rightskip by 0pt plus 1fill
+      % Cause last line, which could consist of page numbers on their own
+      % if the list of page numbers is long, to be aligned to the right.
+      \parfillskip=0pt plus -1fill
+      %
+      \advance\rightskip by \entryrightmargin
+      % Determine how far we can stretch into the margin.
+      % This allows, e.g., "Appendix H  GNU Free Documentation License" to
+      % fit on one line in @letterpaper format.
+      \ifdim\entryrightmargin>2.1em
+        \dimen@i=2.1em
+      \else
+        \dimen@i=0em
+      \fi
+      \advance \parfillskip by 0pt minus 1\dimen@i
+      %
+      \dimen@ii = \hsize
+      \advance\dimen@ii by -1\leftskip
+      \advance\dimen@ii by -1\entryrightmargin
+      \advance\dimen@ii by 1\dimen@i
+      \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+      \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
+        % Try to split the text roughly evenly.  \dimen@ will be the length of
+        % the first line.
+        \dimen@ = 0.7\dimen@
+        \dimen@ii = \hsize
+        \ifnum\dimen@>\dimen@ii
+          % If the entry is too long (for example, if it needs more than
+          % two lines), use all the space in the first line.
+          \dimen@ = \dimen@ii
+        \fi
+        \advance\leftskip by 0pt plus 1fill % ragged right
+        \advance \dimen@ by 1\rightskip
+        \parshape = 2 0pt \dimen@ 0em \dimen@ii
+        % Ideally we'd add a finite glue at the end of the first line only,
+        % instead of using \parshape with explicit line lengths, but TeX
+        % doesn't seem to provide a way to do such a thing.
+        %
+        % Indent all lines but the first one.
+        \advance\leftskip by 1em
+        \advance\parindent by -1em
+      \fi\fi
+      \indent % start paragraph
+      \unhbox\boxA
+      %
+      % Do not prefer a separate line ending with a hyphen to fewer lines.
+      \finalhyphendemerits = 0
+      %
+      % Word spacing - no stretch
+      \spaceskip=\fontdimen2\font minus \fontdimen4\font
+      %
+      \linepenalty=1000  % Discourage line breaks.
+      \hyphenpenalty=5000  % Discourage hyphenation.
+      %
+      \par % format the paragraph
+    \egroup % The \vbox
     \fi
-    \par
   \endgroup
-}
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
 
 % Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
 \def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
 
 \def\primary #1{\line{#1\hfil}}
 
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
-  \parfillskip=0in
-  \parskip=0in
-  \hangindent=1in
-  \hangafter=1
-  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-  \ifpdf
-    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-  \else
-    #2
-  \fi
-  \par
-}}
+\def\secondary{\indententry{0.5cm}}
+\def\tertiary{\indententry{1cm}}
+
+\def\indententry#1#2#3{%
+  \bgroup
+  \leftskip=#1
+  \entry{#2}{#3}%
+  \egroup
+}
 
 % Define two-column mode, which we use to typeset indexes.
 % Adapted from the TeXbook, page 416, which is to say,
 % the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
+\catcode`\@=11  % private names
 
 \newbox\partialpage
 \newdimen\doublecolumnhsize
 
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % If not much space left on page, start a new page.
+  \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+  %
   % Grab any single-column material above us.
   \output = {%
-    %
-    % Here is a possibility not foreseen in manmac: if we accumulate a
-    % whole lot of material, we might end up calling this \output
-    % routine twice in a row (see the doublecol-lose test, which is
-    % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case we just ship out what is in \partialpage with the normal
-    % output routine.  Generally, \partialpage will be empty when this
-    % runs and this will be a no-op.  See the indexspread.tex test case.
-    \ifvoid\partialpage \else
-      \onepageout{\pagecontents\partialpage}%
-    \fi
+    \savetopmark
     %
     \global\setbox\partialpage = \vbox{%
       % Unvbox the main output page.
@@ -5125,27 +5838,31 @@
     \divide\doublecolumnhsize by 2
   \hsize = \doublecolumnhsize
   %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
-  \splittopskip=\topskip \splitmaxdepth=\maxdepth
   % Get the available space for the double columns -- the normal
   % (undoubled) page height minus any material left over from the
   % previous page.
+  \advance\vsize by -\ht\partialpage
+  \vsize = 2\vsize
+  %
+  % For the benefit of balancing columns
+  \advance\baselineskip by 0pt plus 0.5pt
+}
+
+% The double-column output routine for all double-column pages except
+% the last, which is done by \balancecolumns.
+%
+\def\doublecolumnout{%
+  %
+  \savetopmark
+  \splittopskip=\topskip \splitmaxdepth=\maxdepth
   \dimen@ = \vsize
   \divide\dimen@ by 2
-  \advance\dimen@ by -\ht\partialpage
   %
   % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar
-  \unvbox255
+  \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
+  \global\advance\vsize by 2\ht\partialpage
+  \onepageout\pagesofar % empty except for the first time we are called
+  \unvbox\PAGE
   \penalty\outputpenalty
 }
 %
@@ -5156,10 +5873,11 @@
   %
   \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
+  \hbox to\txipagewidth{\box0\hfil\box2}%
 }
-%
-% All done with double columns.
+
+
+% Finished 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
@@ -5182,7 +5900,7 @@
   % 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
+  % and the final section into the vbox of \txipageheight (see
   % \pagebody), causing an overfull box.
   %
   % Note that glue won't work here, because glue does not exercise the
@@ -5190,53 +5908,88 @@
   \penalty0
   %
   \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
+    % Split the last of the double-column material.
+    \savetopmark
     \balancecolumns
-    %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
+  }%
+  \eject % call the \output just set
+  \ifdim\pagetotal=0pt
+    % Having called \balancecolumns once, we do not
     % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
-    \global\output = {\onepageout{\pagecontents\PAGE}}%
-  }%
-  \eject
-  \endgroup % started in \begindoublecolumns
-  %
-  % \pagegoal was set to the doubled \vsize above, since we restarted
-  % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
+    % definition right away.
+    \global\output=\expandafter{\the\defaultoutput}
+    %
+    \endgroup % started in \begindoublecolumns
+    % Leave the double-column material on the current page, no automatic
+    % page break.
+    \box\balancedcolumns
+    %
+    % \pagegoal was set to the doubled \vsize above, since we restarted
+    % the current page.  We're now back to normal single-column
+    % typesetting, so reset \pagegoal to the normal \vsize.
+    \global\vsize = \txipageheight %
+    \pagegoal = \txipageheight %
+  \else
+    % We had some left-over material.  This might happen when \doublecolumnout
+    % is called in \balancecolumns.  Try again.
+    \expandafter\enddoublecolumns
+  \fi
 }
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
-% Called at the end of the double column material.
+% Only called for the last of the double column material.  \doublecolumnout
+% does the others.
 \def\balancecolumns{%
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+  \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
-  \advance\dimen@ by \topskip
-  \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
+  \ifdim\dimen@<7\baselineskip
+    % Don't split a short final column in two.
+    \setbox2=\vbox{}%
+    \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+  \else
+    % double the leading vertical space
+    \advance\dimen@ by \topskip
+    \advance\dimen@ by-\baselineskip
+    \divide\dimen@ by 2 % target to split to
+    \dimen@ii = \dimen@
+    \splittopskip = \topskip
+    % Loop until left column is at least as high as the right column.
+    {%
+      \vbadness = 10000
+      \loop
+        \global\setbox3 = \copy0
+        \global\setbox1 = \vsplit3 to \dimen@
+      \ifdim\ht1<\ht3
+        \global\advance\dimen@ by 1pt
+      \repeat
+    }%
+    % Now the left column is in box 1, and the right column in box 3.
+    %
+    % Check whether the left column has come out higher than the page itself.
+    % (Note that we have doubled \vsize for the double columns, so
+    % the actual height of the page is 0.5\vsize).
+    \ifdim2\ht1>\vsize
+      % It appears that we have been called upon to balance too much material.
+      % Output some of it with \doublecolumnout, leaving the rest on the page.
+      \setbox\PAGE=\box0
+      \doublecolumnout
+    \else
+      % Compare the heights of the two columns.
+      \ifdim4\ht1>5\ht3
+        % Column heights are too different, so don't make their bottoms
+        % flush with each other.
+        \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
+        \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
+      \else
+        % Make column bottoms flush with each other.
+        \setbox2=\vbox to\ht1{\unvbox3\unskip}%
+        \setbox0=\vbox to\ht1{\unvbox1\unskip}%
+      \fi
+      \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+    \fi
+  \fi
   %
-  \pagesofar
 }
 \catcode`\@ = \other
 
@@ -5251,10 +6004,14 @@
   \null
   \vskip.3\vsize  % move it down on the page a bit
   \begingroup
-    \noindent \titlefonts\rmisbold #1\par % the text
+    \noindent \titlefonts\rm #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
+    % This outputs a mark at the end of the page that clears \thischapter
+    % and \thissection, as is done in \startcontents.
+    \let\pchapsepmacro\relax
+    \chapmacro{}{Yomitfromtoc}{}%
     \chapoddpage
   \endgroup
 }
@@ -5328,11 +6085,9 @@
 
 % @raisesections: treat @section as chapter, @subsection as section, etc.
 \def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
 
 % @lowersections: treat @chapter as section, @section as subsection, etc.
 \def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
 
 % we only have subsub.
 \chardef\maxseclevel = 3
@@ -5499,9 +6254,6 @@
 
 % @centerchap is like @unnumbered, but the heading is centered.
 \outer\parseargdef\centerchap{%
-  % Well, we could do the following in a group, but that would break
-  % an assumption that \chapmacro is called at the outermost level.
-  % Thus we are safer this way:		--kasal, 24feb04
   \let\centerparametersmaybe = \centerparameters
   \unnmhead0{#1}%
   \let\centerparametersmaybe = \relax
@@ -5511,7 +6263,7 @@
 \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
@@ -5534,7 +6286,7 @@
 }
 
 % Subsections.
-% 
+%
 % normally calls numberedsubseczzz:
 \outer\parseargdef\numberedsubsec{\numhead2{#1}}
 \def\numberedsubseczzz#1{%
@@ -5559,7 +6311,7 @@
 }
 
 % Subsubsections.
-% 
+%
 % normally numberedsubsubseczzz:
 \outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 \def\numberedsubsubseczzz#1{%
@@ -5625,7 +6377,11 @@
 
 % Define plain chapter starts, and page on/off switching for it.
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
 \def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
 % 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.
@@ -5640,7 +6396,7 @@
   \fi
 }
 
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
 
 \def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
@@ -5661,33 +6417,37 @@
 
 \CHAPPAGon
 
-% Chapter opening.
+% \chapmacro - Chapter opening.
 %
 % #1 is the text, #2 is the section type (Ynumbered, Ynothing,
 % Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
 %
 % To test against our argument.
 \def\Ynothingkeyword{Ynothing}
-\def\Yomitfromtockeyword{Yomitfromtoc}
 \def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
 %
 \def\chapmacro#1#2#3{%
+  \expandafter\ifx\thisenv\titlepage\else
+    \checkenv{}% chapters, etc., should not start inside an environment.
+  \fi
   % Insert the first mark before the heading break (see notes for \domark).
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
-  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+  \let\prevchapterdefs=\currentchapterdefs
+  \let\prevsectiondefs=\currentsectiondefs
+  \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
                         \gdef\thissection{}}%
   %
   \def\temptype{#2}%
   \ifx\temptype\Ynothingkeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
                           \gdef\thischapter{\thischaptername}}%
   \else\ifx\temptype\Yomitfromtockeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
                           \gdef\thischapter{}}%
   \else\ifx\temptype\Yappendixkeyword
     \toks0={#1}%
-    \xdef\lastchapterdefs{%
+    \xdef\currentchapterdefs{%
       \gdef\noexpand\thischaptername{\the\toks0}%
       \gdef\noexpand\thischapternum{\appendixletter}%
       % \noexpand\putwordAppendix avoids expanding indigestible
@@ -5698,7 +6458,7 @@
     }%
   \else
     \toks0={#1}%
-    \xdef\lastchapterdefs{%
+    \xdef\currentchapterdefs{%
       \gdef\noexpand\thischaptername{\the\toks0}%
       \gdef\noexpand\thischapternum{\the\chapno}%
       % \noexpand\putwordChapter avoids expanding indigestible
@@ -5718,17 +6478,18 @@
   %
   % Now the second mark, after the heading break.  No break points
   % between here and the heading.
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
+  \let\prevchapterdefs=\currentchapterdefs
+  \let\prevsectiondefs=\currentsectiondefs
   \domark
   %
   {%
-    \chapfonts \rmisbold
+    \chapfonts \rm
+    \let\footnote=\errfootnoteheading % give better error message
     %
-    % Have to define \lastsection before calling \donoderef, because the
+    % Have to define \currentsection 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\lastsection{#1}%
+    \gdef\currentsection{#1}%
     %
     % Only insert the separating space if we have a chapter/appendix
     % number, and don't print the unnumbered ``number''.
@@ -5776,30 +6537,6 @@
 }
 
 
-% I don't think this chapter style is supported any more, so I'm not
-% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
-%
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-%
-\def\unnchfopen #1{%
-  \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
-  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
-  \nobreak\bigskip \nobreak
-}
-\def\CHAPFopen{%
-  \global\let\chapmacro=\chfopen
-  \global\let\centerchapmacro=\centerchfopen}
-
-
 % Section titles.  These macros combine the section number parts and
 % call the generic \sectionheading to do the printing.
 %
@@ -5817,27 +6554,34 @@
 
 % Print any size, any type, section title.
 %
-% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-% section number.
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #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 \rmisbold
-    %
     \def\sectionlevel{#2}%
     \def\temptype{#3}%
     %
+    % It is ok for the @heading series commands to appear inside an
+    % environment (it's been historically allowed, though the logic is
+    % dubious), but not the others.
+    \ifx\temptype\Yomitfromtockeyword\else
+      \checkenv{}% non-@*heading should not be in an environment.
+    \fi
+    \let\footnote=\errfootnoteheading
+    %
+    % Switch to the right set of fonts.
+    \csname #2fonts\endcsname \rm
+    %
     % Insert first mark before the heading break (see notes for \domark).
-    \let\prevsectiondefs=\lastsectiondefs
+    \let\prevsectiondefs=\currentsectiondefs
     \ifx\temptype\Ynothingkeyword
       \ifx\sectionlevel\seckeyword
-        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+        \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
                               \gdef\thissection{\thissectionname}}%
       \fi
     \else\ifx\temptype\Yomitfromtockeyword
@@ -5845,7 +6589,7 @@
     \else\ifx\temptype\Yappendixkeyword
       \ifx\sectionlevel\seckeyword
         \toks0={#1}%
-        \xdef\lastsectiondefs{%
+        \xdef\currentsectiondefs{%
           \gdef\noexpand\thissectionname{\the\toks0}%
           \gdef\noexpand\thissectionnum{#4}%
           % \noexpand\putwordSection avoids expanding indigestible
@@ -5858,7 +6602,7 @@
     \else
       \ifx\sectionlevel\seckeyword
         \toks0={#1}%
-        \xdef\lastsectiondefs{%
+        \xdef\currentsectiondefs{%
           \gdef\noexpand\thissectionname{\the\toks0}%
           \gdef\noexpand\thissectionnum{#4}%
           % \noexpand\putwordSection avoids expanding indigestible
@@ -5884,28 +6628,28 @@
     %
     % Now the second mark, after the heading break.  No break points
     % between here and the heading.
-    \let\prevsectiondefs=\lastsectiondefs
+    \global\let\prevsectiondefs=\currentsectiondefs
     \domark
     %
     % Only insert the space after the number if we have a section number.
     \ifx\temptype\Ynothingkeyword
       \setbox0 = \hbox{}%
       \def\toctype{unn}%
-      \gdef\lastsection{#1}%
+      \gdef\currentsection{#1}%
     \else\ifx\temptype\Yomitfromtockeyword
       % for @headings -- no section number, don't include in toc,
-      % and don't redefine \lastsection.
+      % and don't redefine \currentsection.
       \setbox0 = \hbox{}%
       \def\toctype{omit}%
       \let\sectionlevel=\empty
     \else\ifx\temptype\Yappendixkeyword
       \setbox0 = \hbox{#4\enspace}%
       \def\toctype{app}%
-      \gdef\lastsection{#1}%
+      \gdef\currentsection{#1}%
     \else
       \setbox0 = \hbox{#4\enspace}%
       \def\toctype{num}%
-      \gdef\lastsection{#1}%
+      \gdef\currentsection{#1}%
     \fi\fi\fi
     %
     % Write the toc entry (before \donoderef).  See comments in \chapmacro.
@@ -5995,7 +6739,9 @@
   % 1 and 2 (the page numbers aren't printed), and so are the first
   % two pages of the document.  Thus, we'd have two destinations named
   % `1', and two named `2'.
-  \ifpdf \global\pdfmakepagedesttrue \fi
+  \ifpdforxetex
+    \global\pdfmakepagedesttrue
+  \fi
 }
 
 
@@ -6044,7 +6790,7 @@
   \savepageno = \pageno
   \begingroup                  % Set up to handle contents files properly.
     \raggedbottom              % Worry more about breakpoints than the bottom.
-    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    \entryrightmargin=\contentsrightmargin % Don't use the full line length.
     %
     % Roman numerals for page numbers.
     \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
@@ -6138,7 +6884,15 @@
 % 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}{}}
+\def\partentry#1#2#3#4{%
+  % Add stretch and a bonus for breaking the page before the part heading.
+  % This reduces the chance of the page being broken immediately after the
+  % part heading, before a following chapter heading.
+  \vskip 0pt plus 5\baselineskip
+  \penalty-300
+  \vskip 0pt plus -5\baselineskip
+  \dochapentry{\numeralbox\labelspace#1}{}%
+}
 %
 % Parts, in the short toc.
 \def\shortpartentry#1#2#3#4{%
@@ -6149,7 +6903,7 @@
 
 % Chapters, in the main contents.
 \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
+
 % Chapters, in the short toc.
 % See comments in \dochapentry re vbox and related settings.
 \def\shortchapentry#1#2#3#4{%
@@ -6164,7 +6918,7 @@
   \setbox0 = \hbox{\putwordAppendix{} M}%
   \hbox to \wd0{\putwordAppendix{} #1\hss}}
 %
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
 
 % Unnumbered chapters.
 \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
@@ -6197,6 +6951,8 @@
 \def\dochapentry#1#2{%
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
+     % Move the page numbers slightly to the right
+     \advance\entryrightmargin by -0.05em
      \chapentryfonts
      \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup
@@ -6251,14 +7007,14 @@
   \catcode `\|=\other
   \catcode `\<=\other
   \catcode `\>=\other
-  \catcode`\`=\other
-  \catcode`\'=\other
-  \escapechar=`\\
+  \catcode `\`=\other
+  \catcode `\'=\other
   %
   % ' 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
   %
+  % Inverse of the list at the beginning of the file.
   \let\b=\ptexb
   \let\bullet=\ptexbullet
   \let\c=\ptexc
@@ -6274,9 +7030,11 @@
   \let\+=\tabalign
   \let\}=\ptexrbrace
   \let\/=\ptexslash
+  \let\sp=\ptexsp
   \let\*=\ptexstar
+  %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
   \let\t=\ptext
-  \expandafter \let\csname top\endcsname=\ptextop  % outer
+  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
   \let\frenchspacing=\plainfrenchspacing
   %
   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
@@ -6313,6 +7071,24 @@
     \endgraf
     \ifdim\lastskip<\envskipamount
       \removelastskip
+      \ifnum\lastpenalty<10000
+        % Penalize breaking before the environment, because preceding text
+        % often leads into it.
+        \penalty100
+      \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
+
+\def\afterenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
       % it's not a good place to break if the last penalty was \nobreak
       % or better ...
       \ifnum\lastpenalty<10000 \penalty-50 \fi
@@ -6321,19 +7097,13 @@
   \fi
 }}
 
-\let\afterenvbreak = \aboveenvbreak
-
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
 % also clear it, so that its embedded environments do the narrowing again.
 \let\nonarrowing=\relax
 
 % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
 % environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
+
 %
 \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
 \def\ctr{{\hskip 6pt\circle\char'010}}
@@ -6348,7 +7118,18 @@
 %
 \newskip\lskip\newskip\rskip
 
+% only require the font if @cartouche is actually used
+\def\cartouchefontdefs{%
+  \font\circle=lcircle10\relax
+  \circthick=\fontdimen8\circle
+}
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+
+
 \envdef\cartouche{%
+  \cartouchefontdefs
   \ifhmode\par\fi  % can't be in the midst of a paragraph.
   \startsavinginserts
   \lskip=\leftskip \rskip=\rightskip
@@ -6360,15 +7141,13 @@
 				% side, and for 6pt waste from
 				% each corner char, and rule thickness
   \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
+  \setbox\groupbox=\vbox\bgroup
       \baselineskip=0pt\parskip=0pt\lineskip=0pt
       \carttop
       \hbox\bgroup
@@ -6392,6 +7171,7 @@
       \egroup
       \cartbot
   \egroup
+  \addgroupbox
   \checkinserts
 }
 
@@ -6401,7 +7181,7 @@
 \newdimen\nonfillparindent
 \def\nonfillstart{%
   \aboveenvbreak
-  \hfuzz = 12pt % Don't be fussy
+  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
   \sepspaces % Make spaces be word-separators rather than space tokens.
   \let\par = \lisppar % don't ignore blank lines
   \obeylines % each line of input is a line of output
@@ -6530,7 +7310,7 @@
 % @raggedright does more-or-less normal line breaking but no right
 % justification.  From plain.tex.
 \envdef\raggedright{%
-  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
 }
 \let\Eraggedright\par
 
@@ -6589,7 +7369,7 @@
 
 % @indentedblock is like @quotation, but indents only on the left and
 % has no optional argument.
-% 
+%
 \makedispenvdef{indentedblock}{\indentedblockstart}
 %
 \def\indentedblockstart{%
@@ -6692,7 +7472,7 @@
   \nonfillstart
   \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.
+  % never \starttabbox and the \egroup would end verbatim mode.
   \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
   \tabexpand
   \setupmarkupstyle{verbatim}%
@@ -6755,9 +7535,12 @@
   {%
     \makevalueexpandable
     \setupverbatim
-    \indexnofonts       % Allow `@@' and other weird things in file names.
-    \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
-    \input #1
+    {%
+      \indexnofonts       % Allow `@@' and other weird things in file names.
+      \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+      \edef\tmp{\noexpand\input #1 }
+      \expandafter
+    }\tmp
     \afterenvbreak
   }%
 }
@@ -6770,7 +7553,7 @@
 % typesetting commands (@smallbook, font changes, etc.) have to be done
 % beforehand -- and a) we want @copying to be done first in the source
 % file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
+% possible is desirable.
 %
 \def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
 \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
@@ -6865,7 +7648,7 @@
   \temp
 }
 
-% \domakedefun \deffn \deffnx \deffnheader
+% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
 %
 % Define \deffn and \deffnx, without parameters.
 % \deffnheader has to be defined explicitly.
@@ -6886,7 +7669,7 @@
 % @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
@@ -6902,6 +7685,21 @@
   \fi\fi
 }
 
+% \dosubind {index}{topic}{subtopic}
+%
+% If SUBTOPIC is present, precede it with a space, and call \doind.
+% (At some time during the 20th century, this made a two-level entry in an
+% index such as the operation index.  Nobody seemed to notice the change in
+% behaviour though.)
+\def\dosubind#1#2#3{%
+  \def\thirdarg{#3}%
+  \ifx\thirdarg\empty
+    \doind{#1}{#2}%
+  \else
+    \doind{#1}{#2\space#3}%
+  \fi
+}
+
 % Untyped functions:
 
 % @deffn category name args
@@ -6916,7 +7714,6 @@
 % \deffngeneral {subind}category name args
 %
 \def\deffngeneral#1#2 #3 #4\endheader{%
-  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
   \dosubind{fn}{\code{#3}}{#1}%
   \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
 }
@@ -7067,14 +7864,14 @@
       \tclose{\temp}% typeset the return type
       \ifrettypeownline
         % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break  
+        \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
+  {\rm\enskip}% hskip 0.5 em of \rmfont
   %
   \boldbrax
   % arguments will be output next, if any.
@@ -7123,6 +7920,7 @@
   \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
   \gdef\magicamp{\let&=\amprm}
 }
+\let\ampchar\&
 
 \newcount\parencount
 
@@ -7203,34 +8001,23 @@
   }
 \fi
 
-\def\scanmacro#1{\begingroup
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
   \newlinechar`\^^M
-  \let\xeatspaces\eatspaces
+  \def\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=`\@
+  % Process the macro body under the current catcode regime.
+  \scantokens{#1@comment}%
   %
-  % ... 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}
+  % The \comment is to remove the \newlinechar added by \scantokens, and
+  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
+  % in math mode.
+}
 
+% Used for copying and captions
 \def\scanexp#1{%
-  \edef\temp{\noexpand\scanmacro{#1}}%
-  \temp
+  \expandafter\scanmacro\expandafter{#1}%
 }
 
 \newcount\paramno   % Count of parameters
@@ -7238,7 +8025,7 @@
 \newif\ifrecursive  % Is it recursive?
 
 % List of all defined macros in the form
-%    \definedummyword\macro1\definedummyword\macro2...
+%    \commondummyword\macro1\commondummyword\macro2...
 % Currently is also contains all @aliases; the list can be split
 % if there is a need.
 \def\macrolist{}
@@ -7246,7 +8033,7 @@
 % Add the macro to \macrolist
 \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
 \def\addtomacrolistxxx#1{%
-     \toks0 = \expandafter{\macrolist\definedummyword#1}%
+     \toks0 = \expandafter{\macrolist\commondummyword#1}%
      \xdef\macrolist{\the\toks0}%
 }
 
@@ -7296,48 +8083,47 @@
   \catcode`\+=\other
   \catcode`\<=\other
   \catcode`\>=\other
-  \catcode`\@=\other
   \catcode`\^=\other
   \catcode`\_=\other
   \catcode`\|=\other
   \catcode`\~=\other
-  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+  \passthroughcharstrue
 }
 
 \def\scanargctxt{% used for copying and captions, not macros.
   \scanctxt
+  \catcode`\@=\other
   \catcode`\\=\other
   \catcode`\^^M=\other
 }
 
 \def\macrobodyctxt{% used for @macro definitions
   \scanctxt
+  \catcode`\ =\other
+  \catcode`\@=\other
   \catcode`\{=\other
   \catcode`\}=\other
   \catcode`\^^M=\other
   \usembodybackslash
 }
 
-\def\macroargctxt{% used when scanning invocations
+% Used when scanning braced macro arguments.  Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
   \scanctxt
-  \catcode`\\=0
+  \catcode`\ =\active
+  \catcode`\@=\other
+  \catcode`\^^M=\other
+  \catcode`\\=\active
 }
-% 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.
 
+\def\macrolineargctxt{% used for whole-line arguments without braces
+  \scanctxt
+  \catcode`\@=\other
+  \catcode`\{=\other
+  \catcode`\}=\other
+}
 
 % \mbodybackslash is the definition of \ in @macro bodies.
 % It maps \foo\ => \csname macarg.foo\endcsname => #N
@@ -7390,7 +8176,7 @@
     % Remove the macro name from \macrolist:
     \begingroup
       \expandafter\let\csname#1\endcsname \relax
-      \let\definedummyword\unmacrodo
+      \let\commondummyword\unmacrodo
       \xdef\macrolist{\macrolist}%
     \endgroup
   \else
@@ -7405,61 +8191,40 @@
   \ifx #1\relax
     % remove this
   \else
-    \noexpand\definedummyword \noexpand#1%
+    \noexpand\commondummyword \noexpand#1%
   \fi
 }
 
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
+% \getargs -- Parse the arguments to a @macro line.  Set \macname to
+% the name of the macro, and \argl to the braced argument list.
 \def\getargs#1{\getargsxxx#1{}}
 \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
 \def\getmacname#1 #2\relax{\macname={#1}}
 \def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
 
-% 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
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.)  Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is 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.  
+% 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
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
 %
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-%
-% 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
+  % \hash is redefined to `#' later to get it into definitions
   \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
@@ -7474,9 +8239,46 @@
     \edef\paramlist{\paramlist\hash\the\paramno,}%
   \fi\next}
 
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+%
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \defmacro.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only   %%%%%%%%%%%%%%%%%%
+
+% 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 under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% 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.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
-  \else 
+  \else
     \let\next=\parsemmanyargdef@@
     \edef\tempb{\eatspaces{#1}}%
     \expandafter\def\expandafter\tempa
@@ -7489,16 +8291,6 @@
     \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
 
 \let\endargs@\relax
 \let\nil@\relax
@@ -7506,7 +8298,7 @@
 \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
+% definition.  It gets all the arguments' values and assigns them to macros
 % macarg.ARGNAME
 %
 % #1 is the macro name
@@ -7527,8 +8319,6 @@
     \getargvals@@
   \fi
 }
-
-% 
 \def\getargvals@@{%
   \ifx\paramlist\nilm@
       % Some sanity check needed here that \argvaluelist is also empty.
@@ -7572,7 +8362,8 @@
 }
 
 % Replace arguments by their values in the macro body, and place the result
-% in macro \@tempa
+% 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
@@ -7596,8 +8387,9 @@
   \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
   }
 
-\def\macargexpandinbody@{% 
-  %% Define the named-macro outside of this group and then close this group. 
+% Define the named-macro outside of this group and then close this group.
+%
+\def\macargexpandinbody@{%
   \expandafter
   \endgroup
   \macargdeflist@
@@ -7634,14 +8426,8 @@
   \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
+% Trailing missing arguments are set to empty.
+%
 \def\setemptyargvalues@{%
   \ifx\paramlist\nilm@
     \let\next\macargexpandinbody@
@@ -7671,99 +8457,191 @@
    \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.
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+%    \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\xeatspaces{\hash 1}".
+%    \paramno is the number of parameters
+%    \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are four cases: macros of zero, one, up to nine, and many arguments.
 % \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
+% they're defined in: @include reads the file inside a group.
 %
 \def\defmacro{%
   \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \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
+  \ifnum\paramno=1
+    \def\xeatspaces##1{##1}%
+    % This removes the pair of braces around the argument.  We don't
+    % use \eatspaces, because this can cause ends of lines to be lost
+    % when the argument to \eatspaces is read, leading to line-based
+    % commands like "@itemize" not being read correctly.
   \else
-    \ifcase\paramno
-    % 0
+    \let\xeatspaces\relax % suppress expansion
+  \fi
+  \ifcase\paramno
+  % 0
+    \expandafter\xdef\csname\the\macname\endcsname{%
+      \bgroup
+        \noexpand\spaceisspace
+        \noexpand\endlineisspace
+        \noexpand\expandafter % skip any whitespace after the macro name.
+        \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+    \expandafter\xdef\csname\the\macname @@@\endcsname{%
+      \egroup
+      \noexpand\scanmacro{\macrobody}}%
+  \or % 1
+    \expandafter\xdef\csname\the\macname\endcsname{%
+       \bgroup
+       \noexpand\braceorline
+       \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+    \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+      \egroup
+      \noexpand\scanmacro{\macrobody}%
+      }%
+  \else % at most 9
+    \ifnum\paramno<10\relax
+      % @MACNAME sets the context for reading the macro argument
+      % @MACNAME@@ gets the argument, processes backslashes and appends a
+      % comma.
+      % @MACNAME@@@ removes braces surrounding the argument list.
+      % @MACNAME@@@@ scans the macro body with arguments substituted.
       \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \or % 1
+        \bgroup
+        \noexpand\expandafter  % This \expandafter skip any spaces after the
+        \noexpand\macroargctxt % macro before we change the catcode of space.
+        \noexpand\expandafter
+        \expandafter\noexpand\csname\the\macname @@\endcsname}%
+      \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+          \noexpand\passargtomacro
+          \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname @@@@\endcsname\paramlist{%
+          \egroup\noexpand\scanmacro{\macrobody}}%
+    \else % 10 or more:
       \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-        \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
+        \noexpand\getargvals@{\the\macname}{\argl}%
+      }%
+      \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+      \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
     \fi
   \fi}
 
-\catcode `\@\texiatcatcode\relax
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
 
 \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).
-% 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13  % We need to manipulate \ so use @ as escape
+@catcode`@_=11  % private names
+@catcode`@!=11  % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use
+% \def or similar).  This reduces the risk of this failing in contexts where
+% complete expansion is done with no execution (for example, in writing out to
+% an auxiliary file for an index entry).
+%
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN  (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+  @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument;
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+  @ifx#4\%
+   @expandafter@gobble_and_check_finish
+  @else
+   @expandafter@add_segment
+  @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found.  Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+  @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a
+% backslash sequence, either a lone backslash, or a doubled backslash.
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash.  PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+  @call_the_macro#1!%
+@else
+  % append the pending backslash to the result, followed by the next segment
+  @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+  % this @fi is discarded by @look_ahead.
+  % we can't get rid of it with \expandafter because we don't know how
+  % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC.  It checks
+% whether the next non-whitespace character is a {.  It sets the context
+% for reading the argument (slightly different in the two cases).  Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
+%
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg
+  \ifx\nchar\bgroup
+    \macroargctxt
+    \expandafter\passargtomacro
+  \else
+    \macrolineargctxt\expandafter\parsearg
   \fi \macnamexxx}
 
 
@@ -7806,9 +8684,29 @@
 % also remove a trailing comma, in case of something like this:
 % @node Help-Cross,  ,  , Cross-refs
 \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
 
-\let\nwnode=\node
+% Used so that the @top node doesn't have to be wrapped in an @ifnottex
+% conditional.
+% \doignore goes to more effort to skip nested conditionals but we don't need
+% that here.
+\def\omittopnode{%
+   \ifx\lastnode\wordTop
+   \expandafter\ignorenode\fi
+}
+\def\wordTop{Top}
+
+% Until the next @node or @bye command, divert output to a box that is not
+% output.
+\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
+\ignorenodebye
+}
+
+{\let\bye\relax
+\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
+\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
+% The redefinition of \bye here is because it is declared \outer
+
 \let\lastnode=\empty
 
 % Write a cross-reference definition for the current node.  #1 is the
@@ -7831,7 +8729,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 \lastsection,
+% 1) NAME-title - the current sectioning name taken from \currentsection,
 %                 or the anchor name.
 % 2) NAME-snt   - section number and type, passed as the SNT arg, or
 %                 empty for anchors.
@@ -7845,12 +8743,15 @@
   \pdfmkdest{#1}%
   \iflinks
     {%
+      \requireauxfile
       \atdummies  % preserve commands, but don't expand them
+      % match definition in \xrdef, \refx, \xrefX.
+      \def\value##1{##1}%
       \edef\writexrdef##1##2{%
 	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
 	  ##1}{##2}}% these are parameters of \writexrdef
       }%
-      \toks0 = \expandafter{\lastsection}%
+      \toks0 = \expandafter{\currentsection}%
       \immediate \writexrdef{title}{\the\toks0 }%
       \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
       \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
@@ -7862,7 +8763,7 @@
 % 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
@@ -7878,15 +8779,18 @@
   \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
 % manual.  All but the node name can be omitted.
 %
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
 %
 \newbox\toprefbox
 \newbox\printedrefnamebox
@@ -7933,9 +8837,10 @@
   %
   % Make link in pdf output.
   \ifpdf
+    % For pdfTeX and LuaTeX
     {\indexnofonts
-     \turnoffactive
      \makevalueexpandable
+     \turnoffactive
      % 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.
@@ -7943,35 +8848,74 @@
      %
      % 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
-       \txiescapepdf\pdfxrefdest  % escape PDF special chars
+     \setpdfdestname{#1}%
+     %
+     \ifx\pdfdestname\empty
+       \def\pdfdestname{Top}% no empty targets
      \fi
      %
      \leavevmode
      \startlink attr{/Border [0 0 0]}%
      \ifnum\filenamelength>0
-       goto file{\the\filename.pdf} name{\pdfxrefdest}%
+       goto file{\the\filename.pdf} name{\pdfdestname}%
      \else
-       goto name{\pdfmkpgn{\pdfxrefdest}}%
+       goto name{\pdfmkpgn{\pdfdestname}}%
      \fi
     }%
     \setcolor{\linkcolor}%
+  \else
+    \ifx\XeTeXrevision\thisisundefined
+    \else
+      % For XeTeX
+      {\indexnofonts
+       \makevalueexpandable
+       \turnoffactive
+       % 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}%
+       %
+       % This (wrongly) does not take account of leading or trailing
+       % spaces in #1, which should be ignored.
+       \setpdfdestname{#1}%
+       %
+       \ifx\pdfdestname\empty
+         \def\pdfdestname{Top}% no empty targets
+       \fi
+       %
+       \leavevmode
+       \ifnum\filenamelength>0
+         % With default settings,
+         % XeTeX (xdvipdfmx) replaces link destination names with integers.
+         % In this case, the replaced destination names of
+         % remote PDFs are no longer known.  In order to avoid a replacement,
+         % you can use xdvipdfmx's command line option `-C 0x0010'.
+         % If you use XeTeX 0.99996+ (TeX Live 2016+),
+         % this command line option is no longer necessary
+         % because we can use the `dvipdfmx:config' special.
+         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+           << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
+       \else
+         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+           << /S /GoTo /D (\pdfdestname) >> >>}%
+       \fi
+      }%
+      \setcolor{\linkcolor}%
+    \fi
   \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
   {%
     % Have to otherify everything special to allow the \csname to
     % include an _ in the xref name, etc.
     \indexnofonts
     \turnoffactive
+    \def\value##1{##1}%
     \expandafter\global\expandafter\let\expandafter\Xthisreftitle
       \csname XR#1-title\endcsname
   }%
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  \iffloat distinguishes them by
+  % \Xthisreftitle being set to a magic string.
   \iffloat\Xthisreftitle
     % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".
@@ -7988,24 +8932,24 @@
     \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}}%
     %
     \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
@@ -8030,26 +8974,35 @@
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+      % Add a , if xref followed by a space
+      \if\space\noexpand\tokenafterxref ,%
+      \else\ifx\	\tokenafterxref ,% @TAB
+      \else\ifx\*\tokenafterxref ,%   @*
+      \else\ifx\ \tokenafterxref ,%   @SPACE
+      \else\ifx\
+                \tokenafterxref ,%    @NL
+      \else\ifx\tie\tokenafterxref ,% @tie
+      \fi\fi\fi\fi\fi\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}%
@@ -8096,13 +9049,14 @@
   \fi\fi\fi
 }
 
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
+% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME.  SUFFIX
+% is output afterwards if non-empty.
 \def\refx#1#2{%
+  \requireauxfile
   {%
     \indexnofonts
     \otherbackslash
+    \def\value##1{##1}%
     \expandafter\global\expandafter\let\expandafter\thisrefX
       \csname XR#1\endcsname
   }%
@@ -8127,20 +9081,28 @@
   #2% Output the suffix in any case.
 }
 
-% This is the macro invoked by entries in the aux file.  Usually it's
-% just a \def (we prepend XR to the control sequence name to avoid
-% collisions).  But if this is a float type, we have more work to do.
+% This is the macro invoked by entries in the aux file.  Define a control
+% sequence for a cross-reference target (we prepend XR to the control sequence
+% name to avoid collisions).  The value is the page number.  If this is a float
+% type, we have more work to do.
 %
 \def\xrdef#1#2{%
-  {% 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.
+  {% Expand the node or anchor name to remove control sequences.
+   % \turnoffactive stops 8-bit characters being changed to commands
+   % like @'e.  \refx does the same to retrieve the value in the definition.
     \indexnofonts
     \turnoffactive
+    \def\value##1{##1}%
     \xdef\safexrefname{#1}%
   }%
   %
-  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+  \bgroup
+    \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
+  \egroup
+  % We put the \gdef inside a group to avoid the definitions building up on
+  % TeX's save stack, which can cause it to run out of space for aux files with
+  % thousands of lines.  \gdef doesn't use the save stack, but \csname does
+  % when it defines an unknown control sequence as \relax.
   %
   % Was that xref control sequence that we just defined for a float?
   \expandafter\iffloat\csname XR\safexrefname\endcsname
@@ -8163,6 +9125,23 @@
   \fi
 }
 
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+  \iflinks
+    \tryauxfile
+    % Open the new aux file.  TeX will close it automatically at exit.
+    \immediate\openout\auxfile=\jobname.aux
+  \fi
+  \global\let\requireauxfile=\relax   % Only do this once.
+}
+
 % Read the last existing aux file, if any.  No error if none exists.
 %
 \def\tryauxfile{%
@@ -8202,19 +9181,6 @@
   \catcode`\^^]=\other
   \catcode`\^^^=\other
   \catcode`\^^_=\other
-  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
-  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-  % supported in the main text, it doesn't seem desirable.  Furthermore,
-  % that is not enough: for node names that actually contain a ^
-  % character, we would end up writing a line like this: 'xrdef {'hat
-  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-  % argument, and \hat is not an expandable control sequence.  It could
-  % all be worked out, but why?  Either we support ^^ or we don't.
-  %
-  % The other change necessary for this was to define \auxhat:
-  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-  % and then to call \auxhat in \setq.
-  %
   \catcode`\^=\other
   %
   % Special characters.  Should be turned off anyway, but...
@@ -8232,24 +9198,7 @@
   \catcode`\%=\other
   \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
   %
-  % This is to support \ in node names and titles, since the \
-  % characters end up in a \csname.  It's easier than
-  % leaving it active and making its active definition an actual \
-  % character.  What I don't understand is why it works in the *value*
-  % of the xrdef.  Seems like it should be a catcode12 \, and that
-  % should not typeset properly.  But it works, so I'm moving on for
-  % now.  --karl, 15jan04.
-  \catcode`\\=\other
-  %
-  % Make the characters 128-255 be printing characters.
-  {%
-    \count1=128
-    \def\loop{%
-      \catcode\count1=\other
-      \advance\count1 by 1
-      \ifnum \count1<256 \loop \fi
-    }%
-  }%
+  \catcode`\\=\active
   %
   % @ is our escape character in .aux files, and we need braces.
   \catcode`\{=1
@@ -8283,8 +9232,6 @@
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
   \global\advance\footnoteno by \@ne
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
@@ -8308,10 +9255,15 @@
 %
 \gdef\dofootnote{%
   \insert\footins\bgroup
+  %
+  % Nested footnotes are not supported in TeX, that would take a lot
+  % more work.  (\startsavinginserts does not suffice.)
+  \let\footnote=\errfootnotenest
+  %
   % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.
   % So reset some parameters.
-  \hsize=\pagewidth
+  \hsize=\txipagewidth
   \interlinepenalty\interfootnotelinepenalty
   \splittopskip\ht\strutbox % top baseline for broken footnotes
   \splitmaxdepth\dp\strutbox
@@ -8345,13 +9297,24 @@
 }
 }%end \catcode `\@=11
 
+\def\errfootnotenest{%
+  \errhelp=\EMsimple
+  \errmessage{Nested footnotes not supported in texinfo.tex,
+    even though they work in makeinfo; sorry}
+}
+
+\def\errfootnoteheading{%
+  \errhelp=\EMsimple
+  \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
 % 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.
 % 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.
-
+%
 % Replace the \insert primitive by a cheating macro.
 % Deeper inside, just make sure that the saved insertions are not spilled
 % out prematurely.
@@ -8425,7 +9388,7 @@
 \newif\ifwarnednoepsf
 \newhelp\noepsfhelp{epsf.tex must be installed for images to
   work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://tug.org/tex/epsf.tex.}
+  it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
 %
 \def\image#1{%
   \ifx\epsfbox\thisisundefined
@@ -8449,6 +9412,7 @@
 \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
   \catcode`\^^M = 5     % in case we're inside an example
   \normalturnoffactive  % allow _ et al. in names
+  \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
   % If the image is by itself, center it.
   \ifvmode
     \imagevmodetrue
@@ -8478,17 +9442,26 @@
   %
   % Output the image.
   \ifpdf
+    % For pdfTeX and LuaTeX <= 0.80
     \dopdfimage{#1}{#2}{#3}%
   \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
+    \ifx\XeTeXrevision\thisisundefined
+      % For epsf.tex
+      % \epsfbox itself resets \epsf?size at each figure.
+      \setbox0 = \hbox{\ignorespaces #2}%
+        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+      \setbox0 = \hbox{\ignorespaces #3}%
+        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+      \epsfbox{#1.eps}%
+    \else
+      % For XeTeX
+      \doxeteximage{#1}{#2}{#3}%
+    \fi
   \fi
   %
   \ifimagevmode
     \medskip  % space after a standalone image
-  \fi  
+  \fi
   \ifx\centersub\centerV \egroup \fi
 \endgroup}
 
@@ -8556,13 +9529,13 @@
       \global\advance\floatno by 1
       %
       {%
-        % This magic value for \lastsection is output by \setref as the
+        % This magic value for \currentsection 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\lastsection{\floatmagic=\safefloattype}%
+        \edef\currentsection{\floatmagic=\safefloattype}%
         \setref{\floatlabel}{Yfloat}%
       }%
     \fi
@@ -8605,7 +9578,7 @@
     %
     \ifx\thiscaption\empty \else
       \ifx\floatident\empty \else
-	\appendtomacro\captionline{: }% had ident, so need a colon between
+        \appendtomacro\captionline{: }% had ident, so need a colon between
       \fi
       %
       % caption text.
@@ -8629,32 +9602,20 @@
       % \floatlabel-lof.  Besides \floatident, we include the short
       % caption if specified, else the full caption if specified, else nothing.
       {%
+        \requireauxfile
         \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.
-	\scanexp{%
-	  \xdef\noexpand\gtemp{%
-	    \ifx\thisshortcaption\empty
-	      \thiscaption
-	    \else
-	      \thisshortcaption
-	    \fi
-	  }%
-	}%
+        \ifx\thisshortcaption\empty
+          \def\gtemp{\thiscaption}%
+        \else
+          \def\gtemp{\thisshortcaption}%
+        \fi
         \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-	  \ifx\gtemp\empty \else : \gtemp \fi}}%
+          \ifx\gtemp\empty \else : \gtemp \fi}}%
       }%
     \fi
   \egroup  % end of \vtop
   %
-  % place the captured inserts
-  %
-  % 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
 }
 
@@ -8697,7 +9658,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
-% \lastsection value which we \setref above.
+% \currentsection value which we \setref above.
 %
 \def\iffloat#1{\expandafter\doiffloat#1==\finish}
 %
@@ -8768,20 +9729,20 @@
 {
   \catcode`\_ = \active
   \globaldefs=1
-\parseargdef\documentlanguage{\begingroup
-  \let_=\normalunderscore  % normal _ character for filenames
+\parseargdef\documentlanguage{%
   \tex % read txi-??.tex file in plain TeX.
     % Read the file by the name they passed if it exists.
+    \let_ = \normalunderscore  % normal _ character for filename test
     \openin 1 txi-#1.tex
     \ifeof 1
-      \documentlanguagetrywithoutunderscore{#1_\finish}%
+      \documentlanguagetrywithoutunderscore #1_\finish
     \else
       \globaldefs = 1  % everything in the txi-LL files needs to persist
       \input txi-#1.tex
     \fi
     \closein 1
   \endgroup % end raw TeX
-\endgroup}
+}
 %
 % If they passed de_DE, and txi-de_DE.tex doesn't exist,
 % try txi-de.tex.
@@ -8829,6 +9790,70 @@
   \global\righthyphenmin = #3\relax
 }
 
+% XeTeX and LuaTeX can handle Unicode natively.
+% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
+% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+  \ifx\luatexversion\thisisundefined
+    \txinativeunicodecapablefalse
+    \txiusebytewiseiotrue
+  \else
+    \txinativeunicodecapabletrue
+    \txiusebytewiseiofalse
+  \fi
+\else
+  \txinativeunicodecapabletrue
+  \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \XeTeXdefaultencoding "bytes"  % For subsequent files to be read
+    \XeTeXinputencoding "bytes"  % For document root file
+    % Unfortunately, there seems to be no corresponding XeTeX command for
+    % output encoding.  This is a problem for auxiliary index and TOC files.
+    % The only solution would be perhaps to write out @U{...} sequences in
+    % place of non-ASCII characters.
+  \fi
+
+  \ifx\luatexversion\thisisundefined
+  \else
+    \directlua{
+    local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+    local function convert_char (char)
+      return utf8_char(byte(char))
+    end
+
+    local function convert_line (line)
+      return gsub(line, ".", convert_char)
+    end
+
+    callback.register("process_input_buffer", convert_line)
+
+    local function convert_line_out (line)
+      local line_out = ""
+      for c in string.utfvalues(line) do
+         line_out = line_out .. string.char(c)
+      end
+      return line_out
+    end
+
+    callback.register("process_output_buffer", convert_line_out)
+    }
+  \fi
+
+  \txiusebytewiseiotrue
+}
+
+
 % Helpers for encodings.
 % Set the catcode of characters 128 through 255 to the specified number.
 %
@@ -8851,7 +9876,9 @@
 % @documentencoding sets the definition of non-ASCII characters
 % according to the specified encoding.
 %
-\parseargdef\documentencoding{%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+  %
   % Encoding being declared for the document.
   \def\declaredencoding{\csname #1.enc\endcsname}%
   %
@@ -8867,35 +9894,66 @@
      \asciichardefs
   %
   \else \ifx \declaredencoding \lattwo
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \lattwochardefs
   %
   \else \ifx \declaredencoding \latone
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latonechardefs
   %
   \else \ifx \declaredencoding \latnine
+     \iftxinativeunicodecapable
+       \setbytewiseio
+     \fi
      \setnonasciicharscatcode\active
      \latninechardefs
   %
   \else \ifx \declaredencoding \utfeight
-     \setnonasciicharscatcode\active
-     \utfeightchardefs
+     \iftxinativeunicodecapable
+       % For native Unicode handling (XeTeX and LuaTeX)
+       \nativeunicodechardefs
+     \else
+       % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
+       \setnonasciicharscatcode\active
+       % since we already invoked \utfeightchardefs at the top level
+       % (below), do not re-invoke it, otherwise our check for duplicated
+       % definitions gets triggered.  Making non-ascii chars active is
+       % sufficient.
+     \fi
   %
   \else
-    \message{Unknown document encoding #1, ignoring.}%
+    \message{Ignoring unknown document encoding: #1.}%
   %
   \fi % utfeight
   \fi % latnine
   \fi % latone
   \fi % lattwo
   \fi % ascii
+  %
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \ifx \declaredencoding \utfeight
+    \else
+      \ifx \declaredencoding \ascii
+      \else
+        \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
+        non-ASCII characters in auxiliary files.}%
+      \fi
+    \fi
+  \fi
 }
 
+% emacs-page
 % 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.}}
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
 
 % Take account of \c (plain) vs. \, (Texinfo) difference.
 \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
@@ -8905,111 +9963,119 @@
 % macros containing the character definitions.
 \setnonasciicharscatcode\active
 %
+
+\def\gdefchar#1#2{%
+\gdef#1{%
+   \ifpassthroughchars
+     \string#1%
+   \else
+     #2%
+   \fi
+}}
+
 % 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{\={}}
+  \gdefchar^^a0{\tie}
+  \gdefchar^^a1{\exclamdown}
+  \gdefchar^^a2{{\tcfont \char162}} % cent
+  \gdefchar^^a3{\pounds{}}
+  \gdefchar^^a4{{\tcfont \char164}} % currency
+  \gdefchar^^a5{{\tcfont \char165}} % yen
+  \gdefchar^^a6{{\tcfont \char166}} % broken bar
+  \gdefchar^^a7{\S}
+  \gdefchar^^a8{\"{}}
+  \gdefchar^^a9{\copyright{}}
+  \gdefchar^^aa{\ordf}
+  \gdefchar^^ab{\guillemetleft{}}
+  \gdefchar^^ac{\ensuremath\lnot}
+  \gdefchar^^ad{\-}
+  \gdefchar^^ae{\registeredsymbol{}}
+  \gdefchar^^af{\={}}
   %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{$\pm$}
-  \gdef^^b2{$^2$}
-  \gdef^^b3{$^3$}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{$\mu$}
-  \gdef^^b6{\P}
+  \gdefchar^^b0{\textdegree}
+  \gdefchar^^b1{$\pm$}
+  \gdefchar^^b2{$^2$}
+  \gdefchar^^b3{$^3$}
+  \gdefchar^^b4{\'{}}
+  \gdefchar^^b5{$\mu$}
+  \gdefchar^^b6{\P}
+  \gdefchar^^b7{\ensuremath\cdot}
+  \gdefchar^^b8{\cedilla\ }
+  \gdefchar^^b9{$^1$}
+  \gdefchar^^ba{\ordm}
+  \gdefchar^^bb{\guillemetright{}}
+  \gdefchar^^bc{$1\over4$}
+  \gdefchar^^bd{$1\over2$}
+  \gdefchar^^be{$3\over4$}
+  \gdefchar^^bf{\questiondown}
   %
-  \gdef^^b7{$^.$}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{$^1$}
-  \gdef^^ba{\ordm}
+  \gdefchar^^c0{\`A}
+  \gdefchar^^c1{\'A}
+  \gdefchar^^c2{\^A}
+  \gdefchar^^c3{\~A}
+  \gdefchar^^c4{\"A}
+  \gdefchar^^c5{\ringaccent A}
+  \gdefchar^^c6{\AE}
+  \gdefchar^^c7{\cedilla C}
+  \gdefchar^^c8{\`E}
+  \gdefchar^^c9{\'E}
+  \gdefchar^^ca{\^E}
+  \gdefchar^^cb{\"E}
+  \gdefchar^^cc{\`I}
+  \gdefchar^^cd{\'I}
+  \gdefchar^^ce{\^I}
+  \gdefchar^^cf{\"I}
   %
-  \gdef^^bb{\guillemetright}
-  \gdef^^bc{$1\over4$}
-  \gdef^^bd{$1\over2$}
-  \gdef^^be{$3\over4$}
-  \gdef^^bf{\questiondown}
+  \gdefchar^^d0{\DH}
+  \gdefchar^^d1{\~N}
+  \gdefchar^^d2{\`O}
+  \gdefchar^^d3{\'O}
+  \gdefchar^^d4{\^O}
+  \gdefchar^^d5{\~O}
+  \gdefchar^^d6{\"O}
+  \gdefchar^^d7{$\times$}
+  \gdefchar^^d8{\O}
+  \gdefchar^^d9{\`U}
+  \gdefchar^^da{\'U}
+  \gdefchar^^db{\^U}
+  \gdefchar^^dc{\"U}
+  \gdefchar^^dd{\'Y}
+  \gdefchar^^de{\TH}
+  \gdefchar^^df{\ss}
   %
-  \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}
+  \gdefchar^^e0{\`a}
+  \gdefchar^^e1{\'a}
+  \gdefchar^^e2{\^a}
+  \gdefchar^^e3{\~a}
+  \gdefchar^^e4{\"a}
+  \gdefchar^^e5{\ringaccent a}
+  \gdefchar^^e6{\ae}
+  \gdefchar^^e7{\cedilla c}
+  \gdefchar^^e8{\`e}
+  \gdefchar^^e9{\'e}
+  \gdefchar^^ea{\^e}
+  \gdefchar^^eb{\"e}
+  \gdefchar^^ec{\`{\dotless i}}
+  \gdefchar^^ed{\'{\dotless i}}
+  \gdefchar^^ee{\^{\dotless i}}
+  \gdefchar^^ef{\"{\dotless 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}
+  \gdefchar^^f0{\dh}
+  \gdefchar^^f1{\~n}
+  \gdefchar^^f2{\`o}
+  \gdefchar^^f3{\'o}
+  \gdefchar^^f4{\^o}
+  \gdefchar^^f5{\~o}
+  \gdefchar^^f6{\"o}
+  \gdefchar^^f7{$\div$}
+  \gdefchar^^f8{\o}
+  \gdefchar^^f9{\`u}
+  \gdefchar^^fa{\'u}
+  \gdefchar^^fb{\^u}
+  \gdefchar^^fc{\"u}
+  \gdefchar^^fd{\'y}
+  \gdefchar^^fe{\th}
+  \gdefchar^^ff{\"y}
 }
 
 % Latin9 (ISO-8859-15) encoding character definitions.
@@ -9017,119 +10083,119 @@
   % 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}
+  \gdefchar^^a4{\euro{}}
+  \gdefchar^^a6{\v S}
+  \gdefchar^^a8{\v s}
+  \gdefchar^^b4{\v Z}
+  \gdefchar^^b8{\v z}
+  \gdefchar^^bc{\OE}
+  \gdefchar^^bd{\oe}
+  \gdefchar^^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}
+  \gdefchar^^a0{\tie}
+  \gdefchar^^a1{\ogonek{A}}
+  \gdefchar^^a2{\u{}}
+  \gdefchar^^a3{\L}
+  \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdefchar^^a5{\v L}
+  \gdefchar^^a6{\'S}
+  \gdefchar^^a7{\S}
+  \gdefchar^^a8{\"{}}
+  \gdefchar^^a9{\v S}
+  \gdefchar^^aa{\cedilla S}
+  \gdefchar^^ab{\v T}
+  \gdefchar^^ac{\'Z}
+  \gdefchar^^ad{\-}
+  \gdefchar^^ae{\v Z}
+  \gdefchar^^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}
+  \gdefchar^^b0{\textdegree{}}
+  \gdefchar^^b1{\ogonek{a}}
+  \gdefchar^^b2{\ogonek{ }}
+  \gdefchar^^b3{\l}
+  \gdefchar^^b4{\'{}}
+  \gdefchar^^b5{\v l}
+  \gdefchar^^b6{\'s}
+  \gdefchar^^b7{\v{}}
+  \gdefchar^^b8{\cedilla\ }
+  \gdefchar^^b9{\v s}
+  \gdefchar^^ba{\cedilla s}
+  \gdefchar^^bb{\v t}
+  \gdefchar^^bc{\'z}
+  \gdefchar^^bd{\H{}}
+  \gdefchar^^be{\v z}
+  \gdefchar^^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}
+  \gdefchar^^c0{\'R}
+  \gdefchar^^c1{\'A}
+  \gdefchar^^c2{\^A}
+  \gdefchar^^c3{\u A}
+  \gdefchar^^c4{\"A}
+  \gdefchar^^c5{\'L}
+  \gdefchar^^c6{\'C}
+  \gdefchar^^c7{\cedilla C}
+  \gdefchar^^c8{\v C}
+  \gdefchar^^c9{\'E}
+  \gdefchar^^ca{\ogonek{E}}
+  \gdefchar^^cb{\"E}
+  \gdefchar^^cc{\v E}
+  \gdefchar^^cd{\'I}
+  \gdefchar^^ce{\^I}
+  \gdefchar^^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}
+  \gdefchar^^d0{\DH}
+  \gdefchar^^d1{\'N}
+  \gdefchar^^d2{\v N}
+  \gdefchar^^d3{\'O}
+  \gdefchar^^d4{\^O}
+  \gdefchar^^d5{\H O}
+  \gdefchar^^d6{\"O}
+  \gdefchar^^d7{$\times$}
+  \gdefchar^^d8{\v R}
+  \gdefchar^^d9{\ringaccent U}
+  \gdefchar^^da{\'U}
+  \gdefchar^^db{\H U}
+  \gdefchar^^dc{\"U}
+  \gdefchar^^dd{\'Y}
+  \gdefchar^^de{\cedilla T}
+  \gdefchar^^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}
+  \gdefchar^^e0{\'r}
+  \gdefchar^^e1{\'a}
+  \gdefchar^^e2{\^a}
+  \gdefchar^^e3{\u a}
+  \gdefchar^^e4{\"a}
+  \gdefchar^^e5{\'l}
+  \gdefchar^^e6{\'c}
+  \gdefchar^^e7{\cedilla c}
+  \gdefchar^^e8{\v c}
+  \gdefchar^^e9{\'e}
+  \gdefchar^^ea{\ogonek{e}}
+  \gdefchar^^eb{\"e}
+  \gdefchar^^ec{\v e}
+  \gdefchar^^ed{\'{\dotless{i}}}
+  \gdefchar^^ee{\^{\dotless{i}}}
+  \gdefchar^^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{}}
+  \gdefchar^^f0{\dh}
+  \gdefchar^^f1{\'n}
+  \gdefchar^^f2{\v n}
+  \gdefchar^^f3{\'o}
+  \gdefchar^^f4{\^o}
+  \gdefchar^^f5{\H o}
+  \gdefchar^^f6{\"o}
+  \gdefchar^^f7{$\div$}
+  \gdefchar^^f8{\v r}
+  \gdefchar^^f9{\ringaccent u}
+  \gdefchar^^fa{\'u}
+  \gdefchar^^fb{\H u}
+  \gdefchar^^fc{\"u}
+  \gdefchar^^fd{\'y}
+  \gdefchar^^fe{\cedilla t}
+  \gdefchar^^ff{\dotaccent{}}
 }
 
 % UTF-8 character definitions.
@@ -9159,38 +10225,94 @@
   \fi
 }
 
+% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
 \begingroup
   \catcode`\~13
+  \catcode`\$12
   \catcode`\"12
 
+  % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
+  % substituting ~ and $ with a character token of that value.
   \def\UTFviiiLoop{%
     \global\catcode\countUTFx\active
     \uccode`\~\countUTFx
+    \uccode`\$\countUTFx
     \uppercase\expandafter{\UTFviiiTmp}%
     \advance\countUTFx by 1
     \ifnum\countUTFx < \countUTFy
       \expandafter\UTFviiiLoop
     \fi}
 
+  % For bytes other than the first in a UTF-8 sequence.  Not expected to
+  % be expanded except when writing to auxiliary files.
+  \countUTFx = "80
+  \countUTFy = "C2
+  \def\UTFviiiTmp{%
+    \gdef~{%
+        \ifpassthroughchars $\fi}}%
+  \UTFviiiLoop
+
   \countUTFx = "C2
   \countUTFy = "E0
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
   \UTFviiiLoop
 
   \countUTFx = "E0
   \countUTFy = "F0
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
   \UTFviiiLoop
 
   \countUTFx = "F0
   \countUTFy = "F4
   \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+    \gdef~{%
+        \ifpassthroughchars $%
+        \else\expandafter\UTFviiiFourOctets\expandafter$\fi
+        }}%
   \UTFviiiLoop
 \endgroup
 
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+  \expandafter\ifx\csname uni:#1\endcsname \relax
+    \iftxinativeunicodecapable
+      % All Unicode characters can be used if native Unicode handling is
+      % active.  However, if the font does not have the glyph,
+      % letters are missing.
+      \begingroup
+        \uccode`\.="#1\relax
+        \uppercase{.}
+      \endgroup
+    \else
+      \errhelp = \EMsimple
+      \errmessage{Unicode character U+#1 not supported, sorry}%
+    \fi
+  \else
+    \csname uni:#1\endcsname
+  \fi
+}
+
+% These macros are used here to construct the name of a control
+% sequence to be defined.
+\def\UTFviiiTwoOctetsName#1#2{%
+  \csname u8:#1\string #2\endcsname}%
+\def\UTFviiiThreeOctetsName#1#2#3{%
+  \csname u8:#1\string #2\string #3\endcsname}%
+\def\UTFviiiFourOctetsName#1#2#3#4{%
+  \csname u8:#1\string #2\string #3\string #4\endcsname}%
+
+% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
+% provide a definition macro to replace a Unicode character;
+% this gets used by the @U command
+%
 \begingroup
   \catcode`\"=12
   \catcode`\<=12
@@ -9199,465 +10321,838 @@
   \catcode`\;=12
   \catcode`\!=12
   \catcode`\~=13
-
-  \gdef\DeclareUnicodeCharacter#1#2{%
+  \gdef\DeclareUnicodeCharacterUTFviii#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}
 
+      % Give \u8:... its definition.  The sequence of seven \expandafter's
+      % expands after the \gdef three times, e.g.
+      %
+      % 1.  \UTFviiTwoOctetsName B1 B2
+      % 2.  \csname u8:B1 \string B2 \endcsname
+      % 3.  \u8: B1 B2  (a single control sequence token)
+      %
+      \expandafter\expandafter
+      \expandafter\expandafter
+      \expandafter\expandafter
+      \expandafter\gdef       \UTFviiiTmp{#2}%
+      %
+      \expandafter\ifx\csname uni:#1\endcsname \relax \else
+       \message{Internal error, already defined: #1}%
+      \fi
+      %
+      % define an additional control sequence for this code point.
+      \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
+    \endgroup}
+  %
+  % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
+  % to the corresponding UTF-8 sequence.
   \gdef\parseXMLCharref{%
     \ifnum\countUTFz < "A0\relax
       \errhelp = \EMsimple
       \errmessage{Cannot define Unicode char value < 00A0}%
     \else\ifnum\countUTFz < "800\relax
       \parseUTFviiiA,%
-      \parseUTFviiiB C\UTFviiiTwoOctets.,%
+      \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
     \else\ifnum\countUTFz < "10000\relax
       \parseUTFviiiA;%
       \parseUTFviiiA,%
-      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+      \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
     \else
       \parseUTFviiiA;%
       \parseUTFviiiA,%
       \parseUTFviiiA!%
-      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+      \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
     \fi\fi\fi
   }
 
+  % Extract a byte from the end of the UTF-8 representation of \countUTFx.
+  % It must be a non-initial byte in the sequence.
+  % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
+  % of the bytes.
   \gdef\parseUTFviiiA#1{%
     \countUTFx = \countUTFz
     \divide\countUTFz by 64
-    \countUTFy = \countUTFz
+    \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
     \multiply\countUTFz by 64
+
+    % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
+    % in order to get the last five bits.
     \advance\countUTFx by -\countUTFz
+
+    % Convert this to the byte in the UTF-8 sequence.
     \advance\countUTFx by 128
     \uccode `#1\countUTFx
     \countUTFz = \countUTFy}
 
+  % Used to put a UTF-8 byte sequence into \UTFviiiTmp
+  % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
+  %    sequence.
+  % #2 is one of the \UTFviii*OctetsName macros.
+  % #3 is always a full stop (.)
+  % #4 is a template for the other bytes in the sequence.  The values for these
+  %    bytes is substituted in here with \uppercase using the \uccode's.
   \gdef\parseUTFviiiB#1#2#3#4{%
     \advance\countUTFz by "#10\relax
     \uccode `#3\countUTFz
     \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
 \endgroup
 
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro that sets a catcode to `other' non-globally
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+  \catcode"#1=\other
+}
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere.  Loading the necessary fonts
+% awaits user request.  We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file.  But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\unicodechardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}%
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}%
+  \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+  \DeclareUnicodeCharacter{00A3}{\pounds{}}%
+  \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+  \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+  \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+  \DeclareUnicodeCharacter{00A7}{\S}%
+  \DeclareUnicodeCharacter{00A8}{\"{ }}%
+  \DeclareUnicodeCharacter{00A9}{\copyright{}}%
+  \DeclareUnicodeCharacter{00AA}{\ordf}%
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
+  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+  \DeclareUnicodeCharacter{00AD}{\-}%
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
+  \DeclareUnicodeCharacter{00AF}{\={ }}%
+  %
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
+  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+  \DeclareUnicodeCharacter{00B2}{$^2$}%
+  \DeclareUnicodeCharacter{00B3}{$^3$}%
+  \DeclareUnicodeCharacter{00B4}{\'{ }}%
+  \DeclareUnicodeCharacter{00B5}{$\mu$}%
+  \DeclareUnicodeCharacter{00B6}{\P}%
+  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+  \DeclareUnicodeCharacter{00B9}{$^1$}%
+  \DeclareUnicodeCharacter{00BA}{\ordm}%
+  \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
+  \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+  \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+  \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+  \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{00D7}{\ensuremath\times}%
+  \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{00F7}{\ensuremath\div}%
+  \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{010A}{\dotaccent{C}}%
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+  \DeclareUnicodeCharacter{010C}{\v{C}}%
+  \DeclareUnicodeCharacter{010D}{\v{c}}%
+  \DeclareUnicodeCharacter{010E}{\v{D}}%
+  \DeclareUnicodeCharacter{010F}{d'}%
+  %
+  \DeclareUnicodeCharacter{0110}{\DH}%
+  \DeclareUnicodeCharacter{0111}{\dh}%
+  \DeclareUnicodeCharacter{0112}{\=E}%
+  \DeclareUnicodeCharacter{0113}{\=e}%
+  \DeclareUnicodeCharacter{0114}{\u{E}}%
+  \DeclareUnicodeCharacter{0115}{\u{e}}%
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+  \DeclareUnicodeCharacter{0119}{\ogonek{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{0122}{\cedilla{G}}%
+  \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+  \DeclareUnicodeCharacter{0124}{\^H}%
+  \DeclareUnicodeCharacter{0125}{\^h}%
+  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+  \DeclareUnicodeCharacter{0128}{\~I}%
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012A}{\=I}%
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+  \DeclareUnicodeCharacter{012C}{\u{I}}%
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+  \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+  \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+  %
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+  \DeclareUnicodeCharacter{0132}{IJ}%
+  \DeclareUnicodeCharacter{0133}{ij}%
+  \DeclareUnicodeCharacter{0134}{\^J}%
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+  \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+  \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{0139}{\'L}%
+  \DeclareUnicodeCharacter{013A}{\'l}%
+  \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+  \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
+  \DeclareUnicodeCharacter{013D}{L'}% should kern
+  \DeclareUnicodeCharacter{013E}{l'}% should kern
+  \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+  %
+  \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+  \DeclareUnicodeCharacter{0141}{\L}%
+  \DeclareUnicodeCharacter{0142}{\l}%
+  \DeclareUnicodeCharacter{0143}{\'N}%
+  \DeclareUnicodeCharacter{0144}{\'n}%
+  \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+  \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+  \DeclareUnicodeCharacter{0147}{\v{N}}%
+  \DeclareUnicodeCharacter{0148}{\v{n}}%
+  \DeclareUnicodeCharacter{0149}{'n}%
+  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+  \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{0156}{\cedilla{R}}%
+  \DeclareUnicodeCharacter{0157}{\cedilla{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{0165}{\v{t}}%
+  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+  \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{0172}{\ogonek{U}}%
+  \DeclareUnicodeCharacter{0173}{\ogonek{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{017F}{\missingcharmsg{LONG S}}%
+  %
+  \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{ }}%
+  %
+  % Greek letters upper case
+  \DeclareUnicodeCharacter{0391}{{\it A}}%
+  \DeclareUnicodeCharacter{0392}{{\it B}}%
+  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+  \DeclareUnicodeCharacter{0395}{{\it E}}%
+  \DeclareUnicodeCharacter{0396}{{\it Z}}%
+  \DeclareUnicodeCharacter{0397}{{\it H}}%
+  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+  \DeclareUnicodeCharacter{0399}{{\it I}}%
+  \DeclareUnicodeCharacter{039A}{{\it K}}%
+  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+  \DeclareUnicodeCharacter{039C}{{\it M}}%
+  \DeclareUnicodeCharacter{039D}{{\it N}}%
+  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+  \DeclareUnicodeCharacter{039F}{{\it O}}%
+  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+  \DeclareUnicodeCharacter{03A1}{{\it P}}%
+  %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+  \DeclareUnicodeCharacter{03A4}{{\it T}}%
+  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+  \DeclareUnicodeCharacter{03A7}{{\it X}}%
+  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+  %
+  % Vowels with accents
+  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+  %
+  % Standalone accent
+  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+  %
+  % Greek letters lower case
+  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+  \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+  %
+  % More Greek vowels with accents
+  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+  %
+  % Variant Greek letters
+  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+  %
+  \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}%
+  %
+  % Punctuation
+  \DeclareUnicodeCharacter{2013}{--}%
+  \DeclareUnicodeCharacter{2014}{---}%
+  \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
+  \DeclareUnicodeCharacter{2019}{\quoteright{}}%
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
+  \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
+  \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
+  \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
+  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+  \DeclareUnicodeCharacter{2022}{\bullet{}}%
+  \DeclareUnicodeCharacter{202F}{\thinspace}%
+  \DeclareUnicodeCharacter{2026}{\dots{}}%
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
+  \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
+  %
+  \DeclareUnicodeCharacter{20AC}{\euro{}}%
+  %
+  \DeclareUnicodeCharacter{2192}{\expansion{}}%
+  \DeclareUnicodeCharacter{21D2}{\result{}}%
+  %
+  % Mathematical symbols
+  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+  \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+  \DeclareUnicodeCharacter{2212}{\minus{}}%
+  \DeclareUnicodeCharacter{2217}{\ast}%
+  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+  \DeclareUnicodeCharacter{2261}{\equiv{}}%
+  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+  %
+  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+  %
+  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+  \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
+  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+  %
+  \global\mathchardef\checkmark="1370% actually the square root sign
+  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
 \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}{\={ }}
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+  \unicodechardefs
+}
 
-  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B4}{\'{ }}
-  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-  \DeclareUnicodeCharacter{00BA}{\ordm}
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-  \DeclareUnicodeCharacter{00BF}{\questiondown}
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code.  This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\newif\ifpassthroughchars
+\passthroughcharsfalse
 
-  \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}
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro to replace/pass-through a Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+  \catcode"#1=\active
+  \def\dodeclareunicodecharacternative##1##2##3{%
+    \begingroup
+      \uccode`\~="##2\relax
+      \uppercase{\gdef~}{%
+        \ifpassthroughchars
+          ##1%
+        \else
+          ##3%
+        \fi
+      }
+    \endgroup
+  }
+  \begingroup
+    \uccode`\.="#1\relax
+    \uppercase{\def\UTFNativeTmp{.}}%
+    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+  \endgroup
+}
 
-  \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}
+% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
+% It activates the setting that replaces Unicode characters.
+\def\nativeunicodechardefs{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+  \unicodechardefs
+}
 
-  \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}}}
+% For native Unicode handling (XeTeX and LuaTeX),
+% make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+  \def\UTFAtUTmp{#2}
+  \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
 
-  \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
-
+% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
+\def\nativeunicodechardefsatu{%
+  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+  \unicodechardefs
+}
 
 % 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
-
+% Define all Unicode characters we know about.  This makes UTF-8 the default
+% input encoding and allows @U to work.
+\iftxinativeunicodecapable
+  \nativeunicodechardefsatu
+\else
+  \utfeightchardefs
+\fi
 
 \message{formatting,}
 
@@ -9707,12 +11202,12 @@
   \advance\vsize by \topskip
   \outervsize = \vsize
   \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
+  \txipageheight = \vsize
   %
   \hsize = #2\relax
   \outerhsize = \hsize
   \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
+  \txipagewidth = \hsize
   %
   \normaloffset = #4\relax
   \bindingoffset = #5\relax
@@ -9724,6 +11219,14 @@
     % whatever layout pdftex was dumped with.
     \pdfhorigin = 1 true in
     \pdfvorigin = 1 true in
+  \else
+    \ifx\XeTeXrevision\thisisundefined
+      \special{papersize=#8,#7}%
+    \else
+      \pdfpageheight #7\relax
+      \pdfpagewidth #8\relax
+      % XeTeX does not have \pdfhorigin and \pdfvorigin.
+    \fi
   \fi
   %
   \setleading{\textleading}
@@ -9756,7 +11259,6 @@
   %
   \lispnarrowing = 0.3in
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = .5cm
 }}
@@ -9774,7 +11276,6 @@
   %
   \lispnarrowing = 0.25in
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = .4cm
 }}
@@ -9800,7 +11301,6 @@
                     {297mm}{210mm}%
   %
   \tolerance = 700
-  \hfuzz = 1pt
   \contentsrightmargin = 0pt
   \defbodyindent = 5mm
 }}
@@ -9819,7 +11319,6 @@
   %
   \lispnarrowing = 0.2in
   \tolerance = 800
-  \hfuzz = 1.2pt
   \contentsrightmargin = 0pt
   \defbodyindent = 2mm
   \tableindent = 12mm
@@ -9861,9 +11360,11 @@
   %
   \dimen0 = #1\relax
   \advance\dimen0 by \voffset
+  \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page
   %
   \dimen2 = \hsize
   \advance\dimen2 by \normaloffset
+  \advance\dimen2 by 1in % reference point is 1 inch from left edge of page
   %
   \internalpagesizes{#1}{\hsize}%
                     {\voffset}{\normaloffset}%
@@ -9875,6 +11376,9 @@
 %
 \letterpaper
 
+% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
+\hfuzz = 1pt
+
 
 \message{and turning on texinfo input format.}
 
@@ -9911,44 +11415,47 @@
 % this is not a problem.
 \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
 % Most of these we simply print from the \tt font, but for some, we can
 % use math or other variants that look better in normal text.
-
+%
 \catcode`\"=\active
 \def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
 
 \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}
-\let\realunder=_
-% Subroutine for the previous macro.
 \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
 
-\catcode`\|=\active
-\def|{{\tt\char124}}
+\catcode`\|=\active \def|{{\tt\char124}}
+
 \chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
 \chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
+\catcode`\+=\active \def+{{\tt \char 43}}
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
 
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% used for headline/footline in the output routine, in case the page
+% breaks in the middle of an @tex block.
+\def\texinfochars{%
+  \let< = \activeless
+  \let> = \activegtr
+  \let~ = \activetilde
+  \let^ = \activehat
+  \markupsetuplqdefault \markupsetuprqdefault
+  \let\b = \strong
+  \let\i = \smartitalic
+  % in principle, all other definitions in \tex have to be undone too.
+}
 
 % Used sometimes to turn off (effectively) the active characters even after
 % parsing them.
@@ -9962,77 +11469,118 @@
 % \backslashcurfont outputs one backslash character in current font,
 % as in \char`\\.
 \global\chardef\backslashcurfont=`\\
-\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
 
-% \realbackslash is an actual character `\' with catcode other, and
-% \doublebackslash is two of them (for the pdf outlines).
-{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
 
-% In texinfo, backslash is an active character; it prints the backslash
+% In Texinfo, backslash is an active character; it prints the backslash
 % in fixed width font.
 \catcode`\\=\active  % @ for escape char from now on.
 
-% 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,
+% Print a typewriter backslash.  For math mode, we can't simply use
+% \backslashcurfont: 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).  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.
 
-% On startup, @fixbackslash assigns:
-%  @let \ = @normalbackslash
-% \rawbackslash defines an active \ to do \backslashcurfont.
+@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
+
 % \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.  We switch back and forth between these.
-@gdef@rawbackslash{@let\=@backslashcurfont}
+% catcode other.
 @gdef@otherbackslash{@let\=@realbackslash}
 
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
 % the literal character `\'.
 %
-@def@normalturnoffactive{%
-  @let"=@normaldoublequote
-  @let$=@normaldollar %$ font-lock fix
-  @let+=@normalplus
-  @let<=@normalless
-  @let>=@normalgreater
-  @let\=@normalbackslash
-  @let^=@normalcaret
-  @let_=@normalunderscore
-  @let|=@normalverticalbar
-  @let~=@normaltilde
-  @markupsetuplqdefault
-  @markupsetuprqdefault
-  @unsepspaces
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+   @passthroughcharstrue
+   @let-=@normaldash
+   @let"=@normaldoublequote
+   @let$=@normaldollar %$ font-lock fix
+   @let+=@normalplus
+   @let<=@normalless
+   @let>=@normalgreater
+   @let^=@normalcaret
+   @let_=@normalunderscore
+   @let|=@normalverticalbar
+   @let~=@normaltilde
+   @let\=@ttbackslash
+   @markupsetuplqdefault
+   @markupsetuprqdefault
+   @unsepspaces
+ }
 }
 
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have @fixbackslash turn them back on.
+@catcode`+=@other @catcode`@_=@other
 
+% \enablebackslashhack - allow file to begin `\input texinfo'
+%
 % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
 % That is what \eatinput is for; after that, the `\' should revert to printing
 % a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
+% If the file did not have a `\input texinfo', then it is turned off after
+% the first line; otherwise the first `\' in the file would cause an error.
+% This is used on the very last line of this file, texinfo.tex.
+% We also use @c to call @fixbackslash, in case ends of lines are hidden.
+{
+@catcode`@^=7
+@catcode`@^^M=13@gdef@enablebackslashhack{%
+  @global@let\ = @eatinput%
+  @catcode`@^^M=13%
+  @def@c{@fixbackslash@c}%
+  % Definition for the newline at the end of this file.
+  @def ^^M{@let^^M@secondlinenl}%
+  % Definition for a newline in the main Texinfo file.
+  @gdef @secondlinenl{@fixbackslash}%
+  % In case the first line has a whole-line command on it
+  @let@originalparsearg@parsearg
+  @def@parsearg{@fixbackslash@originalparsearg}
+}}
 
-% 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
-% 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.
-%
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
+
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{@catcode`@^=7 @catcode13=13%
+@gdef@enableemergencynewline{%
+  @gdef^^M{%
+    @par%
+    %<warning: active newline>@par%
+}}}
+
+
 @gdef@fixbackslash{%
-  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @ifx\@eatinput @let\ = @ttbackslash @fi
+  @catcode13=5 % regular end of line
+  @enableemergencynewline
+  @let@c=@comment
+  @let@parsearg@originalparsearg
+  % Also turn back on active characters that might appear in the input
+  % file name, in case not using a pre-dumped format.
   @catcode`+=@active
   @catcode`@_=@active
+  %
+  % If texinfo.cnf is present on the system, read it.
+  % Useful for site-wide @afourpaper, etc.  This macro, @fixbackslash, gets
+  % called at the beginning of every Texinfo file.  Not opening texinfo.cnf
+  % directly in this file, texinfo.tex, makes it possible to make a format
+  % file for Texinfo.
+  %
+  @openin 1 texinfo.cnf
+  @ifeof 1 @else @input texinfo.cnf @fi
+  @closein 1
 }
 
+
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
@@ -10060,8 +11608,8 @@
 @markupsetuprqdefault
 
 @c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
+@c eval: (add-hook 'before-save-hook 'time-stamp)
+@c page-delimiter: "^\\\\message\\|emacs-page"
 @c time-stamp-start: "def\\\\texinfoversion{"
 @c time-stamp-format: "%:y-%02m-%02d.%02H"
 @c time-stamp-end: "}"
@@ -10069,6 +11617,4 @@
 
 @c vim:sw=2:
 
-@ignore
-   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-@end ignore
+@enablebackslashhack
diff --git a/build-aux/update-b4-copyright b/build-aux/update-b4-copyright
index c0f5a13..744592f 100755
--- a/build-aux/update-b4-copyright
+++ b/build-aux/update-b4-copyright
@@ -3,7 +3,7 @@
 # Update b4_copyright invocations or b4_copyright_years definitions to
 # include the current year.
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2015, 2018-2019 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
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
index 082b749..e4809f6 100755
--- a/build-aux/update-copyright
+++ b/build-aux/update-copyright
@@ -1,11 +1,9 @@
-eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
-  & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
-    if 0;
+#!/bin/sh
+#! -*-perl-*-
+
 # 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.
+# Copyright (C) 2009-2019 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
@@ -18,10 +16,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, see <http://www.gnu.org/licenses/>.
-
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+#
 # Written by Jim Meyering and Joel E. Denny
 
+# This script updates an FSF copyright year list to include the current year.
+# Usage: update-copyright [FILE...]
+#
 # 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
@@ -81,6 +82,7 @@
 #        B. (c)
 #        C. @copyright{}
 #        D. &copy;
+#        E. ©
 #
 #   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
@@ -96,7 +98,7 @@
 #   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.
+#      commas, "-", or "--".  Whitespace may appear after commas.
 #
 # Environment variables:
 #
@@ -120,11 +122,32 @@
 #   5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
 #      than "Free Software Foundation, Inc.".
 
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line.  The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name.  The second line is essential for perl and is
+# also useful for editing this file in Emacs.  The next two lines below
+# are valid code in both sh and perl.  When executed by sh, they re-execute
+# the script through the perl program found in $PATH.  The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh.  When executed by  perl, the next two lines are a no-op.
+eval 'exec perl -wSx -0777 -pi "$0" "$@"'
+     if 0;
+
+my $VERSION = '2018-03-07.03:47'; # 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.
+
 use strict;
 use warnings;
 
 my $copyright_re = 'Copyright';
-my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
+my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|&copy;|©)';
 my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
 $holder ||= 'Free Software Foundation, Inc.';
 my $prefix_max = 5;
@@ -169,7 +192,7 @@
     $holder_re =~ s/\s/$ws_re/g;
     my $stmt_remainder_re =
       "(?:$ws_re$circle_c_re)?"
-      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*"
       . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
     if (/\G$stmt_remainder_re/)
       {
@@ -192,7 +215,7 @@
     if ($final_year != $this_year)
       {
         # Update the year.
-        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+        $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/;
       }
     if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
       {
@@ -208,26 +231,28 @@
         # Make the use of intervals consistent.
         if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
           {
-            $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+            $stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg;
           }
         else
           {
+            my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-";
+
             $stmt =~
               s/
                 (\d{4})
                 (?:
-                  (,\ |-)
+                  (,\ |--?)
                   ((??{
-                    if    ($2 eq '-') { '\d{4}'; }
+                    if   ($2 ne ', ') { '\d{4}'; }
                     elsif (!$3)       { $1 + 1;  }
                     else              { $3 + 1;  }
                   }))
                 )+
-              /$1-$3/gx;
+              /$1$ndash$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/;
+              and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/;
           }
 
         # Format within margin.
@@ -263,12 +288,15 @@
     print STDERR "$ARGV: warning: copyright statement not found\n";
   }
 
+# Hey Emacs!
 # Local variables:
+# coding: utf-8
 # mode: perl
 # indent-tabs-mode: nil
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-line-limit: 200
 # time-stamp-start: "my $VERSION = '"
 # time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "'; # UTC"
 # End:
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
index 2b64630..6ac8aa9 100755
--- a/build-aux/useless-if-before-free
+++ b/build-aux/useless-if-before-free
@@ -1,39 +1,54 @@
-eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}'
-  & eval 'exec perl -wST "$0" $argv:q'
-    if 0;
+#!/bin/sh
+#! -*-perl-*-
+
 # 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.
-
+# Copyright (C) 2008-2019 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/>.
-
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+#
 # Written by Jim Meyering
 
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line.  The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name.  The second line is essential for perl and is
+# also useful for editing this file in Emacs.  The next two lines below
+# are valid code in both sh and perl.  When executed by sh, they re-execute
+# the script through the perl program found in $PATH.  The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh.  When executed by  perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+     if 0;
+
+my $VERSION = '2018-03-07 03:47'; # 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.
+
 use strict;
 use warnings;
 use Getopt::Long;
 
 (my $ME = $0) =~ s|.*/||;
 
-# use File::Coda; # http://meyering.net/code/Coda/
+# use File::Coda; # https://meyering.net/code/Coda/
 END {
   defined fileno STDOUT or return;
   close STDOUT and return;
@@ -129,6 +144,9 @@
           $err = EXIT_ERROR, next;
       while (defined (my $line = <FH>))
         {
+          # Skip non-matching lines early to save time
+          $line =~ /\bif\b/
+            or next;
           while ($line =~
               /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
               #  1          2                  3
@@ -199,9 +217,10 @@
 ## Local Variables:
 ## mode: perl
 ## indent-tabs-mode: nil
-## eval: (add-hook 'write-file-hooks 'time-stamp)
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-line-limit: 50
 ## time-stamp-start: "my $VERSION = '"
 ## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
-## time-stamp-time-zone: "UTC"
+## time-stamp-time-zone: "UTC0"
 ## time-stamp-end: "'; # UTC"
 ## End:
diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files
index d477da8..6eafd8c 100755
--- a/build-aux/vc-list-files
+++ b/build-aux/vc-list-files
@@ -2,9 +2,9 @@
 # List version-controlled file names.
 
 # Print a version string.
-scriptversion=2011-05-16.22; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2019 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
@@ -17,7 +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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 
 # List the specified version-controlled files.
@@ -25,7 +25,7 @@
 # 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/
+# cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/
 
 postprocess=
 case $1 in
@@ -49,7 +49,7 @@
     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>
+License GPLv3+: GNU GPL version 3 or later <https://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
@@ -65,7 +65,7 @@
 
 for dir
 do
-  if test -d .git; then
+  if test -d .git || test -f .git; then
     test "x$dir" = x. \
       && dir= sed_esc= \
       || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
@@ -105,9 +105,9 @@
 done
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
index 9db6e2c..5943168 100755
--- a/build-aux/ylwrap
+++ b/build-aux/ylwrap
@@ -1,10 +1,9 @@
 #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.
 
-scriptversion=2012-10-08.07; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-# 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
@@ -19,7 +18,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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://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,9 +29,41 @@
 # bugs to <bug-automake@gnu.org> or send patches to
 # <automake-patches@gnu.org>.
 
+get_dirname ()
+{
+  case $1 in
+    */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
+    # Otherwise,  we want the empty string (not ".").
+  esac
+}
+
+# guard FILE
+# ----------
+# The CPP macro used to guard inclusion of FILE.
+guard ()
+{
+  printf '%s\n' "$1"                                                    \
+    | sed                                                               \
+        -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'   \
+        -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'                        \
+        -e 's/__*/_/g'
+}
+
+# quote_for_sed [STRING]
+# ----------------------
+# Return STRING (or stdin) quoted to be used as a sed pattern.
+quote_for_sed ()
+{
+  case $# in
+    0) cat;;
+    1) printf '%s\n' "$1";;
+  esac \
+    | sed -e 's|[][\\.*]|\\&|g'
+}
+
 case "$1" in
   '')
-    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    echo "$0: No files given.  Try '$0 --help' for more information." 1>&2
     exit 1
     ;;
   --basedir)
@@ -65,39 +96,71 @@
 
 
 # The input.
-input="$1"
+input=$1
 shift
-case "$input" in
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case $input in
   [\\/]* | ?:[\\/]*)
     # Absolute path; do nothing.
     ;;
   *)
     # Relative path.  Make it absolute.
-    input="`pwd`/$input"
+    input=`pwd`/$input
     ;;
 esac
+input_rx=`get_dirname "$input" | quote_for_sed`
 
-pairlist=
-while test "$#" -ne 0; do
-  if test "$1" = "--"; then
+# Since DOS filename conventions don't allow two dots,
+# the DOS version of Bison writes out y_tab.c instead of y.tab.c
+# and y_tab.h instead of y.tab.h. Test to see if this is the case.
+y_tab_nodot=false
+if test -f y_tab.c || test -f y_tab.h; then
+  y_tab_nodot=true
+fi
+
+# The parser itself, the first file, is the destination of the .y.c
+# rule in the Makefile.
+parser=$1
+
+# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
+# instance, we rename #include "y.tab.h" into #include "parse.h"
+# during the conversion from y.tab.c to parse.c.
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test $# -ne 0; do
+  if test x"$1" = x"--"; then
     shift
     break
   fi
-  pairlist="$pairlist $1"
+  from=$1
+  # Handle y_tab.c and y_tab.h output by DOS
+  if $y_tab_nodot; then
+    case $from in
+      "y.tab.c") from=y_tab.c;;
+      "y.tab.h") from=y_tab.h;;
+    esac
+  fi
   shift
+  to=$1
+  shift
+  sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+  sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
 done
 
 # The program to run.
-prog="$1"
+prog=$1
 shift
 # Make any relative path in $prog absolute.
-case "$prog" in
+case $prog in
   [\\/]* | ?:[\\/]*) ;;
-  *[\\/]*) prog="`pwd`/$prog" ;;
+  *[\\/]*) prog=`pwd`/$prog ;;
 esac
 
-# 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$$
 do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
 trap "ret=129; $do_exit" 1
@@ -115,98 +178,56 @@
 ret=$?
 
 if test $ret -eq 0; then
-  set X $pairlist
-  shift
-  first=yes
-  # Since DOS filename conventions don't allow two dots,
-  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
-  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
-  y_tab_nodot="no"
-  if test -f y_tab.c || test -f y_tab.h; then
-    y_tab_nodot="yes"
-  fi
-
-  # The directory holding the input.
-  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
-  # Quote $INPUT_DIR so we can use it in a regexp.
-  # FIXME: really we should care about more than `.' and `\'.
-  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
-
-  while test "$#" -ne 0; do
-    from="$1"
-    # 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"
-      else
-        if test $from = "y.tab.h"; then
-          from="y_tab.h"
-        fi
-      fi
-    fi
+  for from in *
+  do
+    to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
     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";;
+      # otherwise prepend '../'.
+      case $to in
+        [\\/]* | ?:[\\/]*) target=$to;;
+        *) target=../$to;;
       esac
 
-      # We do not want to overwrite a header file if it hasn't
-      # changed.  This avoid useless recompilations.  However the
-      # parser itself (the first file) should always be updated,
-      # because it is the destination of the .y.c rule in the
-      # 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`"
+      # Do not overwrite unchanged header files to avoid useless
+      # recompilations.  Always update the parser itself: it is the
+      # destination of the .y.c rule in the Makefile.  Divert the
+      # output of all other files to a temporary file so we can
+      # compare them to existing versions.
+      if test $from != $parser; then
+        realtarget=$target
+        target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
       fi
-      # Edit out `#line' or `#' directives.
-      #
-      # We don't want the resulting debug information to point at
-      # an absolute srcdir; it is better for it to just mention the
-      # .y file with no path.
-      #
-      # We want to use the real output file name, not yy.lex.c for
-      # instance.
-      #
-      # We want the include guards to be adjusted too.
-      FROM=`echo "$from" | sed \
-            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
-      TARGET=`echo "$2" | sed \
-            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
 
-      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
-          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+      # Munge "#line" or "#" directives.  Don't let the resulting
+      # debug information point at an absolute srcdir.  Use the real
+      # output file name, not yy.lex.c for instance.  Adjust the
+      # include guards too.
+      sed -e "/^#/!b"                           \
+          -e "s|$input_rx|$input_sub_rx|"       \
+          -e "$sed_fix_filenames"               \
+          -e "$sed_fix_header_guards"           \
+        "$from" >"$target" || ret=$?
 
-      # Check whether header files must be updated.
-      if test $first = no; then
+      # Check whether files must be updated.
+      if test "$from" != "$parser"; then
         if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
-          echo "$2" is unchanged
+          echo "$to is unchanged"
           rm -f "$target"
         else
-          echo updating "$2"
+          echo "updating $to"
           mv -f "$target" "$realtarget"
         fi
       fi
     else
-      # A missing file is only an error for the first file.  This
-      # is a blatant hack to let us support using "yacc -d".  If -d
-      # is not specified, we don't want an error when the header
-      # file is "missing".
-      if test $first = yes; then
+      # A missing file is only an error for the parser.  This is a
+      # blatant hack to let us support using "yacc -d".  If -d is not
+      # specified, don't fail when the header file is "missing".
+      if test "$from" = "$parser"; then
         ret=1
       fi
     fi
-    shift
-    shift
-    first=no
   done
-else
-  ret=$?
 fi
 
 # Remove the directory.
@@ -218,9 +239,9 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/cfg.mk b/cfg.mk
index e77312e..48c5494 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1,18 +1,18 @@
-# Customize maint.mk                           -*- makefile -*-
-# Copyright (C) 2008-2012 Free Software Foundation, Inc.
+## Customize maint.mk                           -*- makefile -*-
+## Copyright (C) 2008-2015, 2018-2019 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 free software: you can redistribute it and/or modify
+## it under the terms of the 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, see <http://www.gnu.org/licenses/>.
+## 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.
@@ -26,26 +26,23 @@
 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
+# By default, propagate -j from make to Bison's test suite.
+TESTSUITEFLAGS = $(filter -j%,$(MAKEFLAGS))
+
+# 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*
+# 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, \
+_is-dist-target = $(filter-out %clean maintainer-check%, \
   $(filter maintainer-% dist% alpha beta major,$(MAKECMDGOALS)))
 
 url_dir_list = \
-  ftp://$(gnu_rel_host)/gnu/bison
+  https://$(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 \
+local-checks-to-skip =			\
   sc_immutable_NEWS			\
-  sc_prohibit_always_true_header_tests	\
-  sc_prohibit_atoi_atof			\
-  sc_prohibit_strcmp
+  sc_prohibit_atoi_atof
 
 # The local directory containing the checked-out copy of gnulib used in
 # this release.  Used solely to get a date for the "announcement" target.
@@ -61,33 +58,118 @@
 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'	\
+
+## -------------------- ##
+## More syntax-checks.  ##
+## -------------------- ##
+
+# Indent only with spaces.
+# Taken from Coreutils.
+sc_prohibit_tab_based_indentation:
+	@prohibit='^ *	'						\
+	halt='TAB in indentation; use only spaces'			\
 	  $(_sc_search_regexp)
 
+# Prohibit the use of `...` in tests/.  Use $(...) instead.
+# Taken from Coreutils.
+# Not ready for Bison yet.
+#sc_prohibit_test_backticks:
+#	@prohibit='`' in_vc_files='^tests/'		\
+#	halt='use $$(...), not `...` in tests/'		\
+#	  $(_sc_search_regexp)
+
+# Enforce recommended preprocessor indentation style.
+# Taken from Coreutils.
+sc_preprocessor_indentation:
+	@if cppi --version >/dev/null 2>&1; then			\
+	  $(VC_LIST_EXCEPT) | grep '\.[ch]$$' | xargs cppi -a -c	\
+	    || { echo '$(ME): incorrect preprocessor indentation' 1>&2;	\
+		exit 1; };						\
+	else								\
+	  echo '$(ME): skipping test $@: cppi not installed' 1>&2;	\
+	fi
+
+###########################################################
+# Taken from Coreutils.
+_p0 = \([^"'/]\|"\([^\"]\|[\].\)*"\|'\([^\']\|[\].\)*'
+_pre = $(_p0)\|[/][^"'/*]\|[/]"\([^\"]\|[\].\)*"\|[/]'\([^\']\|[\].\)*'\)*
+_pre_anchored = ^\($(_pre)\)
+_comment_and_close = [^*]\|[*][^/*]\)*[*][*]*/
+# help font-lock mode: '
+
+# A sed expression that removes ANSI C and ISO C99 comments.
+# Derived from the one in GNU gettext's 'moopp' preprocessor.
+_sed_remove_comments =					\
+/[/][/*]/{						\
+  ta;							\
+  :a;							\
+  s,$(_pre_anchored)//.*,\1,;				\
+  te;							\
+  s,$(_pre_anchored)/[*]\($(_comment_and_close),\1 ,;	\
+  ta;							\
+  /^$(_pre)[/][*]/{					\
+    s,$(_pre_anchored)/[*].*,\1 ,;			\
+    tu;							\
+    :u;							\
+    n;							\
+    s,^\($(_comment_and_close),,;			\
+    tv;							\
+    s,^.*$$,,;						\
+    bu;							\
+    :v;							\
+  };							\
+  :e;							\
+}
+# Quote all single quotes.
+_sed_rm_comments_q = $(subst ','\'',$(_sed_remove_comments))
+# help font-lock mode: '
+
+_space_before_paren_exempt =? \\n\\$$
+_space_before_paren_exempt = \
+  (^ *\#|(LA)?LR\([01]\)|percent_(code|define)|b4_syncline|m4_(define|init)|symbol)
+# Ensure that there is a space before each open parenthesis in C code.
+sc_space_before_open_paren:
+	@if $(VC_LIST_EXCEPT) | grep -l '\.[ch]$$' > /dev/null; then	\
+	  fail=0;							\
+	  for c in $$($(VC_LIST_EXCEPT) | grep '\.[ch]$$'); do		\
+	    sed '$(_sed_rm_comments_q)' $$c 2>/dev/null			\
+	      | grep -i '[[:alnum:]]('					\
+	      | grep -vE '$(_space_before_paren_exempt)'		\
+	      | grep . && { fail=1; echo "*** $$c"; };			\
+	  done;								\
+	  test $$fail = 1 &&						\
+	    { echo '$(ME): the above files lack a space-before-open-paren' \
+		1>&2; exit 1; } || :;					\
+	else :;								\
+	fi
+
+## -------------------------- ##
+## syntax-checks exceptions.  ##
+## -------------------------- ##
+
+# po-check: we use gnulib-po, so we don't need/want them in our POTFILE.
+generated_files =
+
 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$$)	\
+
+$(call exclude,                                                                 \
+  bindtextdomain=^lib/main.c$$                                                  \
+  cast_of_argument_to_free=^src/muscle-tab.c$$                                  \
+  po_check=(^po/POTFILES.in|.md)$$		                                \
+  preprocessor_indentation=^data/|^lib/|^src/parse-gram.[ch]$$                  \
+  program_name=^lib/main.c$$                                                    \
+  prohibit_always-defined_macros=^data/skeletons/yacc.c$$                       \
+  prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$              \
+  prohibit_always-defined_macros+=?|^tests/regression.at$$                      \
+  prohibit_doubled_word=^tests/named-refs.at$$                                  \
+  prohibit_magic_number_exit=^doc/bison.texi$$                                  \
+  prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$              \
+  prohibit_strcmp=^doc/bison\.texi|examples|tests/local\.at$$                   \
+  prohibit_tab_based_indentation=install-icc.sh|\.(am|mk)$$|^\.git|tests/input.at|Makefile$$   \
+  require_config_h=^(lib/yyerror|data/skeletons/(glr|yacc))\.c$$                \
+  require_config_h_first=^(lib/yyerror|data/skeletons/(glr|yacc))\.c$$          \
+  space_before_open_paren=^data/skeletons/                                      \
+  two_space_separator_in_usage=^(bootstrap|build-aux/install-icc.sh)            \
+  unmarked_diagnostics=^(doc/bison.texi$$|tests/c\+\+\.at$$)                    \
 )
diff --git a/configure b/configure
index 29c9b62..52befaa 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GNU Bison 2.7.
+# Generated by GNU Autoconf 2.69 for GNU Bison 3.5.
 #
 # Report bugs to <bug-bison@gnu.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='GNU Bison'
 PACKAGE_TARNAME='bison'
-PACKAGE_VERSION='2.7'
-PACKAGE_STRING='GNU Bison 2.7'
+PACKAGE_VERSION='3.5'
+PACKAGE_STRING='GNU Bison 3.5'
 PACKAGE_BUGREPORT='bug-bison@gnu.org'
 PACKAGE_URL='http://www.gnu.org/software/bison/'
 
@@ -622,11 +622,12 @@
 #endif"
 
 gl_use_threads_default=
+gl_use_winpthreads_default=
 ac_header_list=
 ac_func_list=
 gl_getopt_required=POSIX
-gl_getopt_required=POSIX
 gt_needs=
+ac_config_libobj_dir=lib
 ac_subst_vars='gltests_LTLIBOBJS
 gltests_LIBOBJS
 gl_LTLIBOBJS
@@ -636,29 +637,11 @@
 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
+CROSS_COMPILING_FALSE
+CROSS_COMPILING_TRUE
+VALGRIND_OPTS_SUPPRESSION
 VALGRIND
 aclocaldir
 BISON_LOCALEDIR
@@ -680,6 +663,104 @@
 LIBBISON_LTLIBDEPS
 LIBBISON_LIBDEPS
 gltests_WITNESS
+gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_FALSE
+gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_TRUE
+gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_FALSE
+gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_TRUE
+gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_FALSE
+gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_TRUE
+gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_FALSE
+gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_TRUE
+gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_FALSE
+gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_TRUE
+gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_FALSE
+gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_TRUE
+gl_GNULIB_ENABLED_sys_stat_FALSE
+gl_GNULIB_ENABLED_sys_stat_TRUE
+gl_GNULIB_ENABLED_strnlen_FALSE
+gl_GNULIB_ENABLED_strnlen_TRUE
+gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_FALSE
+gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_TRUE
+gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_FALSE
+gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_TRUE
+gl_GNULIB_ENABLED_strchrnul_FALSE
+gl_GNULIB_ENABLED_strchrnul_TRUE
+gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_FALSE
+gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE
+gl_GNULIB_ENABLED_stat_FALSE
+gl_GNULIB_ENABLED_stat_TRUE
+gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_FALSE
+gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_TRUE
+gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_FALSE
+gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_TRUE
+gl_GNULIB_ENABLED_rmdir_FALSE
+gl_GNULIB_ENABLED_rmdir_TRUE
+gl_GNULIB_ENABLED_rawmemchr_FALSE
+gl_GNULIB_ENABLED_rawmemchr_TRUE
+gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_FALSE
+gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_TRUE
+gl_GNULIB_ENABLED_malloca_FALSE
+gl_GNULIB_ENABLED_malloca_TRUE
+gl_GNULIB_ENABLED_lstat_FALSE
+gl_GNULIB_ENABLED_lstat_TRUE
+gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_FALSE
+gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_TRUE
+gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_FALSE
+gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_TRUE
+gl_GNULIB_ENABLED_ldexp_FALSE
+gl_GNULIB_ENABLED_ldexp_TRUE
+gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_FALSE
+gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_TRUE
+gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_FALSE
+gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE
+gl_GNULIB_ENABLED_getdtablesize_FALSE
+gl_GNULIB_ENABLED_getdtablesize_TRUE
+gl_GNULIB_ENABLED_fstat_FALSE
+gl_GNULIB_ENABLED_fstat_TRUE
+gl_GNULIB_ENABLED_fseterr_FALSE
+gl_GNULIB_ENABLED_fseterr_TRUE
+gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_FALSE
+gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE
+gl_GNULIB_ENABLED_chdir_FALSE
+gl_GNULIB_ENABLED_chdir_TRUE
+WINDOWS_64_BIT_ST_SIZE
+WINDOWS_STAT_TIMESPEC
+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_OVERRIDES_STRUCT_STAT
+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
 NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
 NEXT_WCHAR_H
 LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE
@@ -689,30 +770,28 @@
 HAVE_UNISTD_H
 NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
 NEXT_UNISTD_H
+UNISTD_H_DEFINES_STRUCT_TIMESPEC
 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_STAT_INODES
 WINDOWS_64_BIT_OFF_T
 NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H
 NEXT_SYS_TYPES_H
+HAVE_SYS_TIMES_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIMES_H
+NEXT_SYS_TIMES_H
+HAVE_TIMES
+HAVE_STRUCT_TMS
+GNULIB_TIMES
+HAVE_SYS_RESOURCE_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_RESOURCE_H
+NEXT_SYS_RESOURCE_H
 NEXT_AS_FIRST_DIRECTIVE_STRING_H
 NEXT_STRING_H
 NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
@@ -725,6 +804,7 @@
 GL_GENERATE_STDDEF_H_TRUE
 STDDEF_H
 HAVE_WCHAR_T
+HAVE_MAX_ALIGN_T
 REPLACE_NULL
 HAVE__BOOL
 GL_GENERATE_STDBOOL_H_FALSE
@@ -735,13 +815,25 @@
 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_SCHED_YIELD
+HAVE_SCHED_YIELD
+GNULIB_SCHED_YIELD
+RELOCATABLE_STRIP
+RELOCATABLE_BUILD_DIR
+RELOCATABLE_SRC_DIR
+RELOCATABLE_CONFIG_H_DIR
+RELOCATABLE_LIBRARY_PATH
+RELOCATABLE_VIA_WRAPPER_FALSE
+RELOCATABLE_VIA_WRAPPER_TRUE
+RELOCATABLE_VIA_LD_FALSE
+RELOCATABLE_VIA_LD_TRUE
+INSTALL_PROGRAM_ENV
+RELOCATABLE_LDFLAGS
+RELOCATABLE
 REPLACE_RAISE
 REPLACE_PTHREAD_SIGMASK
 HAVE_SIGHANDLER_T
@@ -759,10 +851,15 @@
 GNULIB_RAISE
 GNULIB_PTHREAD_SIGMASK
 ASM_SYMBOL_PREFIX
+LIB_POSIX_SPAWN
 REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR
 REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
 REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR
 REPLACE_POSIX_SPAWN
+HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR
+HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR
 HAVE_POSIX_SPAWN_FILE_ACTIONS_T
 HAVE_POSIX_SPAWNATTR_T
 HAVE_POSIX_SPAWN
@@ -782,23 +879,25 @@
 GNULIB_POSIX_SPAWNATTR_INIT
 GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY
 GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR
 GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
 GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
+GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR
 GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT
 GNULIB_POSIX_SPAWNP
 GNULIB_POSIX_SPAWN
 UNDEFINE_STRTOK_R
-REPLACE_STRTOK_R
 REPLACE_STRSIGNAL
+REPLACE_STRERROR_R
+REPLACE_STRERROR
+REPLACE_STRTOK_R
+REPLACE_STRCASESTR
+REPLACE_STRSTR
 REPLACE_STRNLEN
 REPLACE_STRNDUP
 REPLACE_STRNCAT
-REPLACE_STRERROR_R
-REPLACE_STRERROR
-REPLACE_STRCHRNUL
-REPLACE_STRCASESTR
-REPLACE_STRSTR
 REPLACE_STRDUP
+REPLACE_STRCHRNUL
 REPLACE_STPNCPY
 REPLACE_MEMMEM
 REPLACE_MEMCHR
@@ -822,6 +921,7 @@
 HAVE_MEMCHR
 HAVE_FFSLL
 HAVE_FFSL
+HAVE_EXPLICIT_BZERO
 HAVE_MBSLEN
 GNULIB_STRVERSCMP
 GNULIB_STRSIGNAL
@@ -860,9 +960,12 @@
 GNULIB_MEMCHR
 GNULIB_FFSLL
 GNULIB_FFSL
-LOCALE_FR_UTF8
+GNULIB_EXPLICIT_BZERO
 LOCALE_ZH_CN
+LOCALE_FR_UTF8
 LOCALE_JA
+REPLACE_WCSTOK
+REPLACE_WCSFTIME
 REPLACE_WCSWIDTH
 REPLACE_WCWIDTH
 REPLACE_WCSNRTOMBS
@@ -878,6 +981,7 @@
 REPLACE_MBSTATE_T
 HAVE_DECL_WCWIDTH
 HAVE_DECL_WCTOB
+HAVE_WCSFTIME
 HAVE_WCSWIDTH
 HAVE_WCSTOK
 HAVE_WCSSTR
@@ -915,6 +1019,7 @@
 HAVE_MBRTOWC
 HAVE_MBSINIT
 HAVE_BTOWC
+GNULIB_WCSFTIME
 GNULIB_WCSWIDTH
 GNULIB_WCSTOK
 GNULIB_WCSSTR
@@ -956,15 +1061,21 @@
 GNULIB_BTOWC
 NEXT_AS_FIRST_DIRECTIVE_MATH_H
 NEXT_MATH_H
+SED
 LTLIBMULTITHREAD
 LIBMULTITHREAD
 LTLIBTHREAD
 LIBTHREAD
-LIBPTH_PREFIX
-LTLIBPTH
-LIBPTH
+LIBPMULTITHREAD
+LIBPTHREAD
 LOCALCHARSET_TESTS_ENVIRONMENT
-GLIBC21
+GL_GENERATE_TEXTSTYLE_H_FALSE
+GL_GENERATE_TEXTSTYLE_H_TRUE
+TEXTSTYLE_H
+LIBTEXTSTYLE_PREFIX
+LTLIBTEXTSTYLE
+LIBTEXTSTYLE
+HAVE_LIBTEXTSTYLE
 LDEXPL_LIBM
 LDEXP_LIBM
 REPLACE_TOWLOWER
@@ -972,6 +1083,7 @@
 HAVE_WCTYPE_H
 NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
 NEXT_WCTYPE_H
+HAVE_CRTDEFS_H
 HAVE_WINT_T
 HAVE_ISWCNTRL
 REPLACE_ISWBLANK
@@ -995,7 +1107,9 @@
 PRI_MACROS_BROKEN
 INT64_MAX_EQ_LONG_MAX
 INT32_MAX_LT_INTMAX_MAX
+REPLACE_STRTOUMAX
 REPLACE_STRTOIMAX
+HAVE_IMAXDIV_T
 HAVE_DECL_STRTOUMAX
 HAVE_DECL_STRTOIMAX
 HAVE_DECL_IMAXDIV
@@ -1007,6 +1121,9 @@
 GL_GENERATE_STDINT_H_FALSE
 GL_GENERATE_STDINT_H_TRUE
 STDINT_H
+HAVE_SYS_INTTYPES_H
+HAVE_SYS_BITYPES_H
+HAVE_C99_STDINT_H
 WINT_T_SUFFIX
 WCHAR_T_SUFFIX
 SIG_ATOMIC_T_SUFFIX
@@ -1020,8 +1137,6 @@
 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
@@ -1030,58 +1145,71 @@
 HAVE_WCHAR_H
 HAVE_UNSIGNED_LONG_LONG_INT
 HAVE_LONG_LONG_INT
+GL_GENERATE_LIMITS_H_FALSE
+GL_GENERATE_LIMITS_H_TRUE
+LIMITS_H
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H
+NEXT_LIMITS_H
+REPLACE_LOCALTIME
+REPLACE_GMTIME
+REPLACE_TZSET
+REPLACE_TIMEGM
+REPLACE_STRFTIME
+REPLACE_NANOSLEEP
+REPLACE_MKTIME
+REPLACE_LOCALTIME_R
+REPLACE_CTIME
+HAVE_TIMEZONE_T
+HAVE_TZSET
+HAVE_TIMEGM
+HAVE_STRPTIME
+HAVE_NANOSLEEP
+HAVE_DECL_LOCALTIME_R
+GNULIB_TZSET
+GNULIB_TIME_RZ
+GNULIB_TIME_R
+GNULIB_TIMEGM
+GNULIB_STRPTIME
+GNULIB_STRFTIME
+GNULIB_NANOSLEEP
+GNULIB_LOCALTIME
+GNULIB_MKTIME
+GNULIB_CTIME
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H
+NEXT_SYS_TIME_H
+REPLACE_STRUCT_TIMEVAL
+REPLACE_GETTIMEOFDAY
+HAVE_SYS_TIME_H
+HAVE_STRUCT_TIMEVAL
+HAVE_GETTIMEOFDAY
+GNULIB_GETTIMEOFDAY
 LTLIBINTL
 LIBINTL
+HAVE_GETRUSAGE
+GNULIB_GETRUSAGE
 GNULIB_GL_UNISTD_H_GETOPT
+GETOPT_CDEFS_H
 GETOPT_H
+HAVE_SYS_CDEFS_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
+LIB_GETHRXTIME
 REPLACE_TRUNCL
 REPLACE_TRUNCF
 REPLACE_TRUNC
+REPLACE_TANHF
+REPLACE_TANF
 REPLACE_SQRTL
+REPLACE_SQRTF
+REPLACE_SINHF
+REPLACE_SINF
 REPLACE_SIGNBIT_USING_GCC
 REPLACE_SIGNBIT
 REPLACE_ROUNDL
 REPLACE_ROUNDF
 REPLACE_ROUND
+REPLACE_RINTL
 REPLACE_REMAINDERL
 REPLACE_REMAINDERF
 REPLACE_REMAINDER
@@ -1108,6 +1236,7 @@
 REPLACE_ISNAN
 REPLACE_ISINF
 REPLACE_ISFINITE
+REPLACE_ILOGBL
 REPLACE_ILOGBF
 REPLACE_ILOGB
 REPLACE_HYPOTL
@@ -1129,13 +1258,22 @@
 REPLACE_FABSL
 REPLACE_EXP2L
 REPLACE_EXP2
+REPLACE_EXPM1L
 REPLACE_EXPM1F
 REPLACE_EXPM1
+REPLACE_EXPL
+REPLACE_EXPF
+REPLACE_COSHF
+REPLACE_COSF
 REPLACE_CEILL
 REPLACE_CEILF
 REPLACE_CEIL
 REPLACE_CBRTL
 REPLACE_CBRTF
+REPLACE_ATAN2F
+REPLACE_ATANF
+REPLACE_ASINF
+REPLACE_ACOSF
 HAVE_DECL_TRUNCL
 HAVE_DECL_TRUNCF
 HAVE_DECL_TRUNC
@@ -1328,6 +1466,7 @@
 GNULIB_ACOSL
 GNULIB_ACOSF
 HAVE_FEATURES_H
+GNULIB_OVERRIDES_WINT_T
 APPLE_UNIVERSAL_BUILD
 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
 REPLACE_VSPRINTF
@@ -1442,12 +1581,14 @@
 REPLACE_OPENAT
 REPLACE_OPEN
 REPLACE_FCNTL
+REPLACE_CREAT
 HAVE_OPENAT
 HAVE_FCNTL
 GNULIB_OPENAT
 GNULIB_OPEN
 GNULIB_NONBLOCKING
 GNULIB_FCNTL
+GNULIB_CREAT
 EOVERFLOW_VALUE
 EOVERFLOW_HIDDEN
 ENOLINK_VALUE
@@ -1464,6 +1605,7 @@
 INCLUDE_NEXT_AS_FIRST_DIRECTIVE
 INCLUDE_NEXT
 pkglibexecdir
+runstatedir
 lispdir
 HAVE_WINSOCK2_H
 HAVE_MSVC_INVALID_PARAMETER_HANDLER
@@ -1474,9 +1616,12 @@
 REPLACE_UNLINKAT
 REPLACE_UNLINK
 REPLACE_TTYNAME_R
+REPLACE_TRUNCATE
+REPLACE_SYMLINKAT
 REPLACE_SYMLINK
 REPLACE_SLEEP
 REPLACE_RMDIR
+REPLACE_READLINKAT
 REPLACE_READLINK
 REPLACE_READ
 REPLACE_PWRITE
@@ -1486,24 +1631,30 @@
 REPLACE_LINK
 REPLACE_LCHOWN
 REPLACE_ISATTY
+REPLACE_GETPASS
 REPLACE_GETPAGESIZE
 REPLACE_GETGROUPS
 REPLACE_GETLOGIN_R
+REPLACE_GETDTABLESIZE
 REPLACE_GETDOMAINNAME
 REPLACE_GETCWD
 REPLACE_FTRUNCATE
 REPLACE_FCHOWNAT
+REPLACE_FACCESSAT
 REPLACE_DUP2
 REPLACE_DUP
 REPLACE_CLOSE
 REPLACE_CHOWN
+REPLACE_ACCESS
 HAVE_SYS_PARAM_H
 HAVE_OS_H
 HAVE_DECL_TTYNAME_R
+HAVE_DECL_TRUNCATE
 HAVE_DECL_SETHOSTNAME
 HAVE_DECL_GETUSERSHELL
 HAVE_DECL_GETPAGESIZE
 HAVE_DECL_GETLOGIN_R
+HAVE_DECL_GETLOGIN
 HAVE_DECL_GETDOMAINNAME
 HAVE_DECL_FDATASYNC
 HAVE_DECL_FCHDIR
@@ -1524,6 +1675,7 @@
 HAVE_LINK
 HAVE_LCHOWN
 HAVE_GROUP_MEMBER
+HAVE_GETPASS
 HAVE_GETPAGESIZE
 HAVE_GETLOGIN
 HAVE_GETHOSTNAME
@@ -1538,6 +1690,7 @@
 HAVE_EUIDACCESS
 HAVE_DUP3
 HAVE_DUP2
+HAVE_COPY_FILE_RANGE
 HAVE_CHOWN
 GNULIB_WRITE
 GNULIB_USLEEP
@@ -1546,6 +1699,7 @@
 GNULIB_UNISTD_H_SIGPIPE
 GNULIB_UNISTD_H_NONBLOCKING
 GNULIB_TTYNAME_R
+GNULIB_TRUNCATE
 GNULIB_SYMLINKAT
 GNULIB_SYMLINK
 GNULIB_SLEEP
@@ -1565,6 +1719,7 @@
 GNULIB_ISATTY
 GNULIB_GROUP_MEMBER
 GNULIB_GETUSERSHELL
+GNULIB_GETPASS
 GNULIB_GETPAGESIZE
 GNULIB_GETLOGIN_R
 GNULIB_GETLOGIN
@@ -1584,22 +1739,30 @@
 GNULIB_DUP3
 GNULIB_DUP2
 GNULIB_DUP
+GNULIB_COPY_FILE_RANGE
 GNULIB_CLOSE
 GNULIB_CHOWN
 GNULIB_CHDIR
+GNULIB_ACCESS
+LIB_CLOCK_GETTIME
 REPLACE_WCTOMB
 REPLACE_UNSETENV
+REPLACE_STRTOLD
 REPLACE_STRTOD
+REPLACE_SETSTATE
 REPLACE_SETENV
 REPLACE_REALPATH
 REPLACE_REALLOC
 REPLACE_RANDOM_R
+REPLACE_RANDOM
+REPLACE_QSORT_R
 REPLACE_PUTENV
 REPLACE_PTSNAME_R
 REPLACE_PTSNAME
 REPLACE_MKSTEMP
 REPLACE_MBTOWC
 REPLACE_MALLOC
+REPLACE_INITSTATE
 REPLACE_CANONICALIZE_FILE_NAME
 REPLACE_CALLOC
 HAVE_DECL_UNSETENV
@@ -1608,14 +1771,20 @@
 HAVE_STRUCT_RANDOM_DATA
 HAVE_STRTOULL
 HAVE_STRTOLL
+HAVE_STRTOLD
 HAVE_STRTOD
+HAVE_DECL_SETSTATE
+HAVE_SETSTATE
 HAVE_DECL_SETENV
 HAVE_SETENV
+HAVE_SECURE_GETENV
 HAVE_RPMATCH
 HAVE_REALPATH
+HAVE_REALLOCARRAY
 HAVE_RANDOM_R
 HAVE_RANDOM_H
 HAVE_RANDOM
+HAVE_QSORT_R
 HAVE_PTSNAME_R
 HAVE_PTSNAME
 HAVE_POSIX_OPENPT
@@ -1624,6 +1793,9 @@
 HAVE_MKOSTEMPS
 HAVE_MKOSTEMP
 HAVE_MKDTEMP
+HAVE_MBTOWC
+HAVE_DECL_INITSTATE
+HAVE_INITSTATE
 HAVE_GRANTPT
 HAVE_GETSUBOPT
 HAVE_DECL_GETLOADAVG
@@ -1636,13 +1808,17 @@
 GNULIB_SYSTEM_POSIX
 GNULIB_STRTOULL
 GNULIB_STRTOLL
+GNULIB_STRTOLD
 GNULIB_STRTOD
 GNULIB_SETENV
+GNULIB_SECURE_GETENV
 GNULIB_RPMATCH
 GNULIB_REALPATH
 GNULIB_REALLOC_POSIX
+GNULIB_REALLOCARRAY
 GNULIB_RANDOM_R
 GNULIB_RANDOM
+GNULIB_QSORT_R
 GNULIB_PUTENV
 GNULIB_PTSNAME_R
 GNULIB_PTSNAME
@@ -1661,6 +1837,7 @@
 GNULIB_CALLOC_POSIX
 GNULIB_ATOLL
 GNULIB__EXIT
+HAVE_ALLOCA_H
 GL_GENERATE_ALLOCA_H_FALSE
 GL_GENERATE_ALLOCA_H_TRUE
 ALLOCA_H
@@ -1675,25 +1852,70 @@
 M4
 YFLAGS
 YACC
+FLEX_CXX_WORKS_FALSE
+FLEX_CXX_WORKS_TRUE
+FLEX_WORKS_FALSE
+FLEX_WORKS_TRUE
+LEX_IS_FLEX
 LEXLIB
 LEX_OUTPUT_ROOT
-LEX_IS_FLEX
 LEX
 DOT
-YACC_LIBRARY
-YACC_SCRIPT
+ENABLE_YACC_FALSE
+ENABLE_YACC_TRUE
+ENABLE_JAVA_FALSE
+ENABLE_JAVA_TRUE
+HAVE_JVIEW
+HAVE_JRE
+HAVE_JAVA
+HAVE_GIJ
+HAVE_JAVA_ENVVAR
+CONF_JAVA
+HAVE_JVIEW_IN_PATH
+HAVE_JRE_IN_PATH
+HAVE_JAVA_IN_PATH
+HAVE_GIJ_IN_PATH
+HAVE_JIKES
+HAVE_JAVAC
+HAVE_GCJ_C
+HAVE_JAVAC_ENVVAR
+CLASSPATH_SEPARATOR
+CLASSPATH
+CONF_JAVAC
+HAVE_JIKES_IN_PATH
+HAVE_JAVAC_IN_PATH
+HAVE_GCJ_IN_PATH
+ENABLE_D_FALSE
+ENABLE_D_TRUE
+DCFLAGS
+DC
 CXX_COMPILER_POSIXLY_CORRECT
-BISON_CXX_WORKS_FALSE
-BISON_CXX_WORKS_TRUE
+ENABLE_CXX_FALSE
+ENABLE_CXX_TRUE
 BISON_CXX_WORKS
 C_COMPILER_POSIXLY_CORRECT
 BISON_C_WORKS
+WNO_DEPRECATED_CXXFLAGS
+FLEX_SCANNER_CXXFLAGS
 WARN_CXXFLAGS_TEST
 WERROR_CXXFLAGS
 WARN_CXXFLAGS
 WARN_CFLAGS_TEST
 WERROR_CFLAGS
 WARN_CFLAGS
+ENABLE_GCC_WARNINGS_FALSE
+ENABLE_GCC_WARNINGS_TRUE
+ENABLE_CXX14_FALSE
+ENABLE_CXX14_TRUE
+ENABLE_CXX11_FALSE
+ENABLE_CXX11_TRUE
+CXX2A_CXXFLAGS
+CXX17_CXXFLAGS
+CXX14_CXXFLAGS
+CXX11_CXXFLAGS
+CXX03_CXXFLAGS
+CXX98_CXXFLAGS
+NO_EXCEPTIONS_CXXFLAGS
 host_os
 host_vendor
 host_cpu
@@ -1721,7 +1943,6 @@
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
-am__quote
 am__include
 DEPDIR
 OBJEXT
@@ -1796,8 +2017,9 @@
 PACKAGE_TARNAME
 PACKAGE_NAME
 PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
+SHELL
+am__quote'
+ac_subst_files='relocatable_sh'
 ac_user_opts='
 enable_option_checking
 enable_silent_rules
@@ -1806,11 +2028,12 @@
 enable_threads
 enable_gcc_warnings
 enable_yacc
+enable_cross_guesses
 enable_assert
 with_gnu_ld
 enable_rpath
-with_libpth_prefix
-with_dmalloc
+with_libtextstyle_prefix
+enable_relocatable
 enable_nls
 with_libiconv_prefix
 with_libintl_prefix
@@ -2370,7 +2593,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.7 to adapt to many kinds of systems.
+\`configure' configures GNU Bison 3.5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2440,7 +2663,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GNU Bison 2.7:";;
+     short | recursive ) echo "Configuration of GNU Bison 3.5:";;
    esac
   cat <<\_ACEOF
 
@@ -2455,23 +2678,27 @@
   --disable-dependency-tracking
                           speeds up one-time build
   --disable-largefile     omit support for large files
-  --enable-threads={posix|solaris|pth|windows}
+  --enable-threads={isoc|posix|isoc+posix|windows}
                           specify multithreading API
   --disable-threads       build without multithread safety
-  --enable-gcc-warnings   turn on lots of GCC warnings (not recommended)
+  --enable-gcc-warnings   turn on lots of GCC warnings (not recommended).
+                           Also, issue synclines from the examples/ to
+                           the corresponding source in the Texinfo doc.
   --disable-yacc          do not build a yacc command or an -ly library
+  --enable-cross-guesses={conservative|risky}
+                          specify policy for cross-compilation guesses
   --disable-assert        turn off assertions
   --disable-rpath         do not hardcode runtime library paths
+  --enable-relocatable    install a package that can be moved in the file
+                          system
   --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-libtextstyle-prefix[=DIR]  search for libtextstyle in DIR/include and DIR/lib
+  --without-libtextstyle-prefix     don't search for libtextstyle in includedir and libdir
   --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
@@ -2565,7 +2792,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GNU Bison configure 2.7
+GNU Bison configure 3.5
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2856,52 +3083,6 @@
 
 } # 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.
@@ -2948,6 +3129,52 @@
 
 } # ac_fn_cxx_try_link
 
+# 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_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -3358,7 +3585,7 @@
 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.7, which was
+It was created by GNU Bison $as_me 3.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3639,29 +3866,42 @@
 fi
 
 as_fn_append ac_header_list " locale.h"
+as_fn_append ac_func_list " canonicalize_file_name"
+as_fn_append ac_func_list " getcwd"
+as_fn_append ac_func_list " readlink"
+as_fn_append ac_func_list " realpath"
+as_fn_append ac_header_list " sys/param.h"
+as_fn_append ac_func_list " readlinkat"
 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"
+as_fn_append ac_func_list " fsync"
+as_fn_append ac_func_list " microuptime"
+as_fn_append ac_func_list " nanouptime"
 gl_getopt_required=GNU
 as_fn_append ac_header_list " getopt.h"
+as_fn_append ac_header_list " sys/cdefs.h"
+as_fn_append ac_func_list " getprogname"
+as_fn_append ac_func_list " getexecname"
+as_fn_append ac_func_list " getrusage"
+as_fn_append ac_func_list " gettimeofday"
+as_fn_append ac_header_list " sys/time.h"
+as_fn_append ac_header_list " limits.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 " crtdefs.h"
 as_fn_append ac_header_list " wctype.h"
 as_fn_append ac_func_list " iswblank"
+as_fn_append ac_func_list " tcdrain"
+as_fn_append ac_header_list " threads.h"
 as_fn_append ac_header_list " math.h"
 as_fn_append ac_func_list " mbsinit"
 as_fn_append ac_func_list " mbrtowc"
@@ -3670,24 +3910,27 @@
 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 " setenv"
+as_fn_append ac_func_list " link"
 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/resource.h"
+as_fn_append ac_header_list " sys/times.h"
 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 " __fseterr"
+as_fn_append ac_header_list " sys/stat.h"
+as_fn_append ac_func_list " getdtablesize"
+as_fn_append ac_func_list " catgets"
 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
@@ -3758,7 +4001,7 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-PACKAGE_COPYRIGHT_YEAR=2012
+PACKAGE_COPYRIGHT_YEAR=2019
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3797,11 +4040,10 @@
 
 
 
-# Automake 1.10.3 and 1.11.1 fix a security flaw discussed here:
+# We use Automake 1.14's %D% and %C%.
 #
-#   http://thread.gmane.org/gmane.comp.sysutils.autotools.announce/131
-#
-# To avoid 1.11, we make 1.11.1 the minimum version.
+# When we move to Automake 1.16, simplify examples/c/reccalc/local.mk.
+# Our CI runs on Xenial, which has only Automake 1.15.
 #
 # We want gnits strictness only when rolling a stable release.  For
 # release candidates, we use version strings like 2.4.3_rc1, but gnits
@@ -3809,7 +4051,7 @@
 # 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'
+am__api_version='1.16'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -3981,8 +4223,8 @@
 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`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
@@ -3993,15 +4235,15 @@
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   { $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 test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -4152,7 +4394,6 @@
 { $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.
@@ -4296,7 +4537,7 @@
 
 # Define the identity of the package.
  PACKAGE='bison'
- VERSION='2.7'
+ VERSION='3.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4326,22 +4567,69 @@
 
 # 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>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://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.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # 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}'
 
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
 am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
 
 
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
 # Check whether --enable-silent-rules was given.
 if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
@@ -4389,45 +4677,45 @@
 
 ac_config_commands="$ac_config_commands depfiles"
 
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
 am__doit:
-	@echo this is the am__doit target
+	@echo this is the am__doit target >confinc.out
 .PHONY: am__doit
 END
-# If we don't find an include directive, just comment out the code.
-{ $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
-# 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
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+   (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  case $?:`cat confinc.out 2>/dev/null` in #(
+  '0:this is the am__doit target') :
+    case $s in #(
+  BSD) :
+    am__include='.include' am__quote='"' ;; #(
+  *) :
+    am__include='include' am__quote='' ;;
+esac ;; #(
+  *) :
      ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
+esac
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
 
 # Check whether --enable-dependency-tracking was given.
 if test "${enable_dependency_tracking+set}" = set; then :
@@ -4744,6 +5032,100 @@
 fi
 
 fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; 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_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.
+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_CC="${ac_tool_prefix}clang"
+    $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
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $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 "clang", so it can be a program name with args.
+set dummy clang; 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_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.
+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_CC="clang"
+    $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_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  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
+
+fi
 
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
@@ -4755,7 +5137,7 @@
 $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
+for ac_option in --version -v -V -qversion -version; do
   { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
@@ -5141,8 +5523,420 @@
     CFLAGS=
   fi
 fi
-{ $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; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+$as_echo_n "checking for $CC option to enable C11 features... " >&6; }
+if ${ac_cv_prog_cc_c11+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.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 bool
+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 = 0;
+  float fnumber = 0;
+
+  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);
+
+  return *str && number && fnumber;
+}
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= 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);
+
+  v1.i = 2;
+  v1.w.k = 5;
+  _Static_assert ((offsetof (struct anonymous, i)
+		   == offsetof (struct anonymous, w.k)),
+		  "Anonymous union alignment botch");
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+ac_prog_cc_stdc_options=
+case "x$ac_cv_prog_cc_c11" 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; } ;;
+  *)
+    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c11"
+    CC=$CC$ac_prog_cc_stdc_options
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+$as_echo "$ac_cv_prog_cc_c11" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c11" != xno; then :
+  ac_prog_cc_stdc=c11
+		 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+$as_echo_n "checking for $CC option to enable C99 features... " >&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 <stddef.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 bool
+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 = 0;
+  float fnumber = 0;
+
+  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);
+
+  return *str && number && fnumber;
+}
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= 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=extc1x -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
+ac_prog_cc_stdc_options=
+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; } ;;
+  *)
+    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c99"
+    CC=$CC$ac_prog_cc_stdc_options
+    { $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_prog_cc_stdc=c99
+		    ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+$as_echo_n "checking for $CC option to enable C89 features... " >&6; }
 if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
@@ -5215,6 +6009,7 @@
 
 fi
 # AC_CACHE_VAL
+ac_prog_cc_stdc_options=
 case "x$ac_cv_prog_cc_c89" in
   x)
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
@@ -5223,11 +6018,20 @@
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
 $as_echo "unsupported" >&6; } ;;
   *)
-    CC="$CC $ac_cv_prog_cc_c89"
+    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c89"
+    CC=$CC$ac_prog_cc_stdc_options
     { $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_prog_cc_stdc=c89
+		       ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_prog_cc_stdc=no
+		       ac_cv_prog_cc_stdc=no
+fi
+
+fi
 
 fi
 
@@ -5365,297 +6169,6 @@
 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'
@@ -5667,7 +6180,7 @@
     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
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
   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
@@ -5711,7 +6224,7 @@
 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
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
@@ -5908,6 +6421,421 @@
     CXXFLAGS=
   fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
+$as_echo_n "checking for $CXX option to enable C++11 features... " >&6; }
+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 ${ac_cv_prog_cxx_cxx11+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cxx_cxx11=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <deque>
+#include <functional>
+#include <memory>
+#include <tuple>
+#include <array>
+#include <regex>
+#include <iostream>
+
+namespace cxx11test
+{
+  typedef std::shared_ptr<std::string> sptr;
+  typedef std::weak_ptr<std::string> wptr;
+
+  typedef std::tuple<std::string,int,double> tp;
+  typedef std::array<int, 20> int_array;
+
+  constexpr int get_val() { return 20; }
+
+  struct testinit
+  {
+    int i;
+    double d;
+  };
+
+  class delegate  {
+  public:
+    delegate(int n) : n(n) {}
+    delegate(): delegate(2354) {}
+
+    virtual int getval() { return this->n; };
+  protected:
+    int n;
+  };
+
+  class overridden : public delegate {
+  public:
+    overridden(int n): delegate(n) {}
+    virtual int getval() override final { return this->n * 2; }
+  };
+
+  class nocopy {
+  public:
+    nocopy(int i): i(i) {}
+    nocopy() = default;
+    nocopy(const nocopy&) = delete;
+    nocopy & operator=(const nocopy&) = delete;
+  private:
+    int i;
+  };
+}
+
+
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace test {
+  typedef std::vector<std::string> string_vec;
+  typedef std::pair<int,bool> map_value;
+  typedef std::map<std::string,map_value> map_type;
+  typedef std::set<int> set_type;
+
+  template<typename T>
+  class printer {
+  public:
+    printer(std::ostringstream& os): os(os) {}
+    void operator() (T elem) { os << elem << std::endl; }
+  private:
+    std::ostringstream& os;
+  };
+}
+
+int
+main ()
+{
+
+{
+  // Test auto and decltype
+  std::deque<int> d;
+  d.push_front(43);
+  d.push_front(484);
+  d.push_front(3);
+  d.push_front(844);
+  int total = 0;
+  for (auto i = d.begin(); i != d.end(); ++i) { total += *i; }
+
+  auto a1 = 6538;
+  auto a2 = 48573953.4;
+  auto a3 = "String literal";
+
+  decltype(a2) a4 = 34895.034;
+}
+{
+  // Test constexpr
+  short sa[cxx11test::get_val()] = { 0 };
+}
+{
+  // Test initializer lists
+  cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+  // Test range-based for and lambda
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  for (int &x : array) { x += 23; }
+  std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; });
+}
+{
+  using cxx11test::sptr;
+  using cxx11test::wptr;
+
+  sptr sp(new std::string("ASCII string"));
+  wptr wp(sp);
+  sptr sp2(wp);
+}
+{
+  cxx11test::tp tuple("test", 54, 45.53434);
+  double d = std::get<2>(tuple);
+  std::string s;
+  int i;
+  std::tie(s,i,d) = tuple;
+}
+{
+  static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$");
+  std::string testmatch("Test if this string matches");
+  bool match = std::regex_search(testmatch, filename_regex);
+}
+{
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  cxx11test::int_array::size_type size = array.size();
+}
+{
+  // Test constructor delegation
+  cxx11test::delegate d1;
+  cxx11test::delegate d2();
+  cxx11test::delegate d3(45);
+}
+{
+  // Test override and final
+  cxx11test::overridden o1(55464);
+}
+{
+  // Test nullptr
+  char *c = nullptr;
+}
+{
+  // Test template brackets
+  std::vector<std::pair<int,char*>> v1;
+}
+{
+  // Unicode literals
+  char const *utf8 = u8"UTF-8 string \u2500";
+  char16_t const *utf16 = u"UTF-8 string \u2500";
+  char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+
+
+
+try {
+  // Basic string.
+  std::string teststr("ASCII text");
+  teststr += " string";
+
+  // Simple vector.
+  test::string_vec testvec;
+  testvec.push_back(teststr);
+  testvec.push_back("foo");
+  testvec.push_back("bar");
+  if (testvec.size() != 3) {
+    throw std::runtime_error("vector size is not 1");
+  }
+
+  // Dump vector into stringstream and obtain string.
+  std::ostringstream os;
+  for (test::string_vec::const_iterator i = testvec.begin();
+       i != testvec.end(); ++i) {
+    if (i + 1 != testvec.end()) {
+      os << teststr << '\n';
+    }
+  }
+  // Check algorithms work.
+  std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
+  std::string os_out = os.str();
+
+  // Test pair and map.
+  test::map_type testmap;
+  testmap.insert(std::make_pair(std::string("key"),
+                                std::make_pair(53,false)));
+
+  // Test set.
+  int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
+  std::list<int> testlist(testset.begin(), testset.end());
+  std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
+} catch (const std::exception& e) {
+  std::cerr << "Caught exception: " << e.what() << std::endl;
+
+  // Test fstream
+  std::ofstream of("test.txt");
+  of << "Test ASCII text\n" << std::flush;
+  of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
+  of.close();
+}
+std::exit(0);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA
+do
+  CXX="$ac_save_CXX $ac_arg"
+  if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_cxx11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+
+fi
+# AC_CACHE_VAL
+ac_prog_cxx_stdcxx_options=
+case "x$ac_cv_prog_cxx_cxx11" 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; } ;;
+  *)
+    ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx11"
+    CXX=$CXX$ac_prog_cxx_stdcxx_options
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
+$as_echo "$ac_cv_prog_cxx_cxx11" >&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 "x$ac_cv_prog_cxx_cxx11" != xno; then :
+  ac_prog_cxx_stdcxx=cxx11
+		    ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+		    ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
+$as_echo_n "checking for $CXX option to enable C++98 features... " >&6; }
+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 ${ac_cv_prog_cxx_cxx98+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cxx_cxx98=no
+ac_save_CXX=$CXX
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace test {
+  typedef std::vector<std::string> string_vec;
+  typedef std::pair<int,bool> map_value;
+  typedef std::map<std::string,map_value> map_type;
+  typedef std::set<int> set_type;
+
+  template<typename T>
+  class printer {
+  public:
+    printer(std::ostringstream& os): os(os) {}
+    void operator() (T elem) { os << elem << std::endl; }
+  private:
+    std::ostringstream& os;
+  };
+}
+
+int
+main ()
+{
+
+
+try {
+  // Basic string.
+  std::string teststr("ASCII text");
+  teststr += " string";
+
+  // Simple vector.
+  test::string_vec testvec;
+  testvec.push_back(teststr);
+  testvec.push_back("foo");
+  testvec.push_back("bar");
+  if (testvec.size() != 3) {
+    throw std::runtime_error("vector size is not 1");
+  }
+
+  // Dump vector into stringstream and obtain string.
+  std::ostringstream os;
+  for (test::string_vec::const_iterator i = testvec.begin();
+       i != testvec.end(); ++i) {
+    if (i + 1 != testvec.end()) {
+      os << teststr << '\n';
+    }
+  }
+  // Check algorithms work.
+  std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
+  std::string os_out = os.str();
+
+  // Test pair and map.
+  test::map_type testmap;
+  testmap.insert(std::make_pair(std::string("key"),
+                                std::make_pair(53,false)));
+
+  // Test set.
+  int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
+  std::list<int> testlist(testset.begin(), testset.end());
+  std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
+} catch (const std::exception& e) {
+  std::cerr << "Caught exception: " << e.what() << std::endl;
+
+  // Test fstream
+  std::ofstream of("test.txt");
+  of << "Test ASCII text\n" << std::flush;
+  of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
+  of.close();
+}
+std::exit(0);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
+do
+  CXX="$ac_save_CXX $ac_arg"
+  if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_cxx98=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+
+fi
+# AC_CACHE_VAL
+ac_prog_cxx_stdcxx_options=
+case "x$ac_cv_prog_cxx_cxx98" 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; } ;;
+  *)
+    ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx98"
+    CXX=$CXX$ac_prog_cxx_stdcxx_options
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
+$as_echo "$ac_cv_prog_cxx_cxx98" >&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 "x$ac_cv_prog_cxx_cxx98" != xno; then :
+  ac_prog_cxx_stdcxx=cxx98
+		        ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
+else
+  ac_prog_cxx_stdcxx=no
+		        ac_cv_prog_cxx_stdcxx=no
+fi
+
+fi
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -6313,441 +7241,6 @@
  EGREP="$ac_cv_path_EGREP"
 
 
-
-
-  { $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 __ACK__
-Amsterdam
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Amsterdam" >/dev/null 2>&1; then :
-  gl_cv_c_amsterdam_compiler=yes
-else
-  gl_cv_c_amsterdam_compiler=no
-fi
-rm -f conftest*
-
-
-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
-  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
-# 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 :
@@ -6878,8 +7371,6 @@
 
 
 
-
-
   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
@@ -6898,16 +7389,11 @@
 
 $as_echo "#define _MINIX 1" >>confdefs.h
 
+
+$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
+
   fi
 
-        case "$host_os" in
-    hpux*)
-
-$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
-
-      ;;
-  esac
-
 
   { $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; }
@@ -6945,10 +7431,77 @@
 
   $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
 
+  $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
   $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
+  $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
   $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if ${ac_cv_should_define__xopen_source+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_should_define__xopen_source=no
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <wchar.h>
+          mbstate_t x;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #define _XOPEN_SOURCE 500
+             #include <wchar.h>
+             mbstate_t x;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_should_define__xopen_source=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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+$as_echo "$ac_cv_should_define__xopen_source" >&6; }
+  test $ac_cv_should_define__xopen_source = yes &&
+    $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+  $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
 
 
 
@@ -6959,6 +7512,318 @@
 
 
 
+
+  { $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 __ACK__
+Amsterdam
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Amsterdam" >/dev/null 2>&1; then :
+  gl_cv_c_amsterdam_compiler=yes
+else
+  gl_cv_c_amsterdam_compiler=no
+fi
+rm -f conftest*
+
+
+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 $gl_cv_c_amsterdam_compiler = yes; then
+    if test -z "$AR"; then
+      AR='cc -c.a'
+    fi
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='-o'
+    fi
+  else
+                                                :
+  fi
+
+        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
+  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='cr'
+  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
+
+
+
+# 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
+
+
+
+
+
   # 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).
@@ -6966,7 +7831,7 @@
     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>
+      # <https://backdrift.org/man/tru64/man3/ieee.3.html>
       if test -n "$GCC"; then
         # GCC has the option -mieee.
         # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
@@ -7001,9 +7866,9 @@
      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
+         # 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.
@@ -7012,8 +7877,8 @@
     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];
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1];
 int
 main ()
 {
@@ -7022,16 +7887,16 @@
   return 0;
 }
 _ACEOF
-	 if ac_fn_c_try_compile "$LINENO"; then :
+         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 :
+         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
+         break
        done
        CC=$ac_save_CC
        rm -f conftest.$ac_ext
@@ -7058,8 +7923,8 @@
     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];
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1];
 int
 main ()
 {
@@ -7082,8 +7947,8 @@
     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];
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1];
 int
 main ()
 {
@@ -7127,8 +7992,8 @@
     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];
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1];
 int
 main ()
 {
@@ -7151,8 +8016,8 @@
     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];
+                       && LARGE_OFF_T % 2147483647 == 1)
+                      ? 1 : -1];
 int
 main ()
 {
@@ -7183,6 +8048,8 @@
   fi
 
 
+$as_echo "#define _DARWIN_USE_64_BIT_INODE 1" >>confdefs.h
+
 fi
 
 
@@ -7190,6 +8057,7 @@
 
 
 
+
   # Check whether --enable-threads was given.
 if test "${enable_threads+set}" = set; then :
   enableval=$enable_threads; gl_use_threads=$enableval
@@ -7198,21 +8066,34 @@
        gl_use_threads="$gl_use_threads_default"
      else
        case "$host_os" in
-                                                               osf*) gl_use_threads=no ;;
-         cygwin*)
+                                    osf*) gl_use_threads=no ;;
+                                    cygwin*)
                case `uname -r` in
                  1.[0-5].*) gl_use_threads=no ;;
                  *)         gl_use_threads=yes ;;
                esac
                ;;
+                  mingw*)
+               case "$gl_use_winpthreads_default" in
+                 yes) gl_use_threads=posix ;;
+                 no)  gl_use_threads=windows ;;
+                 *)   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>:
+  if test "$gl_use_threads" = yes \
+     || test "$gl_use_threads" = isoc \
+     || test "$gl_use_threads" = posix \
+     || test "$gl_use_threads" = isoc+posix; then
+    # For using <threads.h> or <pthread.h>:
+
+
+  if test -z "$gl_anythreadlib_early_done"; then
     case "$host_os" in
       osf*)
         # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
@@ -7231,27 +8112,49 @@
       aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
       solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
     esac
+    gl_anythreadlib_early_done=done
+  fi
+
   fi
 
 
 
+  # Pre-early section.
 
+
+
+
+  # Code from module absolute-header:
+  # Code from module alignof:
   # Code from module alloca-opt:
+  # Code from module allocator:
   # Code from module announce-gen:
+  # Code from module areadlink:
   # Code from module argmatch:
+  # Code from module array-list:
   # Code from module assert:
+  # Code from module assure:
   # Code from module binary-io:
   # Code from module bitrotate:
+  # Code from module bitset:
+  # Code from module bitsetv:
   # Code from module c-ctype:
   # Code from module c-strcase:
   # Code from module c-strcaseeq:
+  # Code from module c99:
   # Code from module calloc-posix:
+  # Code from module canonicalize-lgpl:
+  # Code from module careadlinkat:
+  # Code from module chdir:
+  # Code from module clock-time:
   # Code from module cloexec:
   # Code from module close:
   # Code from module close-stream:
   # Code from module closeout:
+  # Code from module concat-filename:
   # Code from module config-h:
   # Code from module configmake:
+  # Code from module diffseq:
   # Code from module dirname:
   # Code from module dirname-lgpl:
   # Code from module do-release-commit-and-tag:
@@ -7263,7 +8166,6 @@
   # 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:
@@ -7271,6 +8173,7 @@
   # Code from module fd-hook:
   # Code from module fd-safer-flag:
   # Code from module fdl:
+  # Code from module filename:
   # Code from module float:
   # Code from module fopen:
   # Code from module fopen-safer:
@@ -7283,20 +8186,25 @@
   # Code from module frexpl-nolibm:
   # Code from module fseterr:
   # Code from module fstat:
+  # Code from module fstrcmp:
+  # Code from module fsync:
   # Code from module gendocs:
-  # Code from module getdelim:
   # Code from module getdtablesize:
-  # Code from module getline:
+  # Code from module gethrxtime:
   # Code from module getopt-gnu:
   # Code from module getopt-posix:
-  # Code from module gettext:
+  # Code from module getprogname:
+  # Code from module getrusage:
   # Code from module gettext-h:
+  # Code from module gettime:
+  # Code from module gettimeofday:
   # 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 hard-locale:
   # Code from module hash:
   # Code from module havelib:
   # Code from module include_next:
@@ -7317,24 +8225,32 @@
 
   # Code from module ldexp:
   # Code from module ldexpl:
+  # Code from module libc-config:
+  # Code from module libtextstyle:
+  # Code from module libtextstyle-optional:
+  # Code from module limits-h:
+  # Code from module list:
   # Code from module localcharset:
+  # Code from module localtime-buffer:
   # Code from module lock:
+  # Code from module lstat:
   # Code from module maintainer-makefile:
   # Code from module malloc-gnu:
   # Code from module malloc-posix:
+  # Code from module malloca:
   # Code from module math:
   # Code from module mbchar:
+  # Code from module mbfile:
   # 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 minmax:
   # Code from module msvc-inval:
   # Code from module msvc-nothrow:
   # Code from module multiarch:
   # Code from module nocrash:
+  # Code from module non-recursive-gnulib-prefix-hack:
   # Code from module obstack:
   # Code from module obstack-printf:
   # Code from module open:
@@ -7363,9 +8279,17 @@
   # Code from module quotearg-simple:
   # Code from module raise:
   # Code from module rawmemchr:
+  # Code from module readlink:
   # Code from module readme-release:
   # Code from module realloc-posix:
+  # Code from module relocatable-prog:
+  # Code from module relocatable-prog-wrapper:
+  # Code from module relocatable-script:
+  # Code from module rename:
+  # Code from module rmdir:
+  # Code from module same-inode:
   # Code from module sched:
+  # Code from module sh-filename:
   # Code from module sigaction:
   # Code from module signal-h:
   # Code from module signbit:
@@ -7382,6 +8306,8 @@
   # Code from module sprintf-posix:
   # Code from module ssize_t:
   # Code from module stat:
+  # Code from module stat-time:
+  # Code from module std-gnu11:
   # Code from module stdbool:
   # Code from module stddef:
   # Code from module stdint:
@@ -7397,10 +8323,11 @@
   # 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_resource:
   # Code from module sys_stat:
+  # Code from module sys_time:
+  # Code from module sys_times:
   # Code from module sys_types:
   # Code from module sys_wait:
   # Code from module threadlib:
@@ -7408,16 +8335,22 @@
 
 
   # Code from module time:
+  # Code from module timespec:
+  # Code from module timevar:
+  # Code from module tls:
   # 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 unlink:
   # 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 vasprintf:
+  # Code from module vasprintf-posix:
   # Code from module vc-list-files:
   # Code from module verify:
   # Code from module vfprintf-posix:
@@ -7430,10 +8363,21 @@
   # Code from module wchar:
   # Code from module wctype-h:
   # Code from module wcwidth:
+  # Code from module windows-mutex:
+  # Code from module windows-once:
+  # Code from module windows-recmutex:
+  # Code from module windows-rwlock:
+  # Code from module windows-tls:
+  # Code from module winsz-ioctl:
+  # Code from module winsz-termios:
   # Code from module xalloc:
   # Code from module xalloc-die:
   # Code from module xalloc-oversized:
+  # Code from module xconcat-filename:
+  # Code from module xhash:
+  # Code from module xlist:
   # Code from module xmemdup0:
+  # Code from module xreadlink:
   # Code from module xsize:
   # Code from module xstrndup:
 
@@ -7473,6 +8417,735 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lv_cv_gcc_pragma_push_works" >&5
 $as_echo "$lv_cv_gcc_pragma_push_works" >&6; }
 
+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
+
+
+
+  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 C++ compiler handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether C++ compiler handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_cxx__Werror__Wunknown_warning_option+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__Werror__Wunknown_warning_option=yes
+else
+  gl_cv_warn_cxx__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_cxx__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_cxx__Werror__Wunknown_warning_option" = xyes; then :
+  gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+  gl_unknown_warnings_are_errors=
+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 C++ compiler handles -fno-exceptions" >&5
+$as_echo_n "checking whether C++ compiler handles -fno-exceptions... " >&6; }
+if ${gl_cv_warn_cxx__fno_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -fno-exceptions"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__fno_exceptions=yes
+else
+  gl_cv_warn_cxx__fno_exceptions=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__fno_exceptions" >&5
+$as_echo "$gl_cv_warn_cxx__fno_exceptions" >&6; }
+if test "x$gl_cv_warn_cxx__fno_exceptions" = xyes; then :
+  as_fn_append NO_EXCEPTIONS_CXXFLAGS " -fno-exceptions"
+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
+
+for f in '-std=c++98' '-std=c++98 -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX98_CXXFLAGS=$f
+ break
+fi
+
+done
+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
+
+
+
+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
+
+for f in '-std=c++03' '-std=c++03 -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX03_CXXFLAGS=$f
+ break
+fi
+
+done
+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
+
+
+
+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
+
+for f in '-std=c++11' '-std=c++11 -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+#include <algorithm>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <string>
+
+  // C++11
+  template <typename T>
+  struct check
+  {
+    static_assert(sizeof(int) <= sizeof(T), "not big enough");
+  };
+
+  using right_angle_brackets = check<check<bool>>;
+
+  auto f = std::make_shared<std::string>("shared_ptr");
+
+  int a;
+  decltype(a) b;
+
+  typedef check<int> check_type;
+  check_type c;
+  check_type&& cr = static_cast<check_type&&>(c);
+
+  auto d = a;
+
+  // Some versions of libstdc++ do not support std::set::emplace.
+  void foo()
+  {
+    std::set<int> is;
+    is.emplace(42);
+  }
+
+  // Clang++ 3.5, for a while, was unable to process properly
+  // the for-loop because its variable, r, is a typedef...
+  // It failed as follows:
+  //
+  // error: unexpected ':' in nested name specifier; did you mean '::'?
+  //    for (auto r: std::set<int>{1, 2})
+  //               ^
+  //               ::
+  using r = std::set<int>;
+  void bar()
+  {
+    for (int r: std::set<int>{1, 2})
+      continue;
+  }
+
+  // GCC 4.8.2 on Solaris 11.3 does not support to_string.
+  auto e = std::to_string(42);
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX11_CXXFLAGS=$f
+ break
+fi
+
+done
+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
+
+
+
+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
+
+for f in '-std=c++14' '-std=c++14 -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+#include <algorithm>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <string>
+
+  // C++11
+  template <typename T>
+  struct check
+  {
+    static_assert(sizeof(int) <= sizeof(T), "not big enough");
+  };
+
+  using right_angle_brackets = check<check<bool>>;
+
+  auto f = std::make_shared<std::string>("shared_ptr");
+
+  int a;
+  decltype(a) b;
+
+  typedef check<int> check_type;
+  check_type c;
+  check_type&& cr = static_cast<check_type&&>(c);
+
+  auto d = a;
+
+  // Some versions of libstdc++ do not support std::set::emplace.
+  void foo()
+  {
+    std::set<int> is;
+    is.emplace(42);
+  }
+
+  // Clang++ 3.5, for a while, was unable to process properly
+  // the for-loop because its variable, r, is a typedef...
+  // It failed as follows:
+  //
+  // error: unexpected ':' in nested name specifier; did you mean '::'?
+  //    for (auto r: std::set<int>{1, 2})
+  //               ^
+  //               ::
+  using r = std::set<int>;
+  void bar()
+  {
+    for (int r: std::set<int>{1, 2})
+      continue;
+  }
+
+  // GCC 4.8.2 on Solaris 11.3 does not support to_string.
+  auto e = std::to_string(42);
+
+  // C++14
+  void mismatch()
+  {
+    using ints = std::vector<int>;
+    auto v1 = ints{1, 2, 3};
+    auto v2 = ints{1, 2};
+    std::mismatch(std::begin(v1), std::end(v1),
+                  std::begin(v2), std::end(v2));
+  }
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX14_CXXFLAGS=$f
+ break
+fi
+
+done
+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
+
+
+
+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
+
+for f in '-std=c++17' '-std=c++17 -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+#include <algorithm>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <string>
+
+  // C++11
+  template <typename T>
+  struct check
+  {
+    static_assert(sizeof(int) <= sizeof(T), "not big enough");
+  };
+
+  using right_angle_brackets = check<check<bool>>;
+
+  auto f = std::make_shared<std::string>("shared_ptr");
+
+  int a;
+  decltype(a) b;
+
+  typedef check<int> check_type;
+  check_type c;
+  check_type&& cr = static_cast<check_type&&>(c);
+
+  auto d = a;
+
+  // Some versions of libstdc++ do not support std::set::emplace.
+  void foo()
+  {
+    std::set<int> is;
+    is.emplace(42);
+  }
+
+  // Clang++ 3.5, for a while, was unable to process properly
+  // the for-loop because its variable, r, is a typedef...
+  // It failed as follows:
+  //
+  // error: unexpected ':' in nested name specifier; did you mean '::'?
+  //    for (auto r: std::set<int>{1, 2})
+  //               ^
+  //               ::
+  using r = std::set<int>;
+  void bar()
+  {
+    for (int r: std::set<int>{1, 2})
+      continue;
+  }
+
+  // GCC 4.8.2 on Solaris 11.3 does not support to_string.
+  auto e = std::to_string(42);
+
+  // C++14
+  void mismatch()
+  {
+    using ints = std::vector<int>;
+    auto v1 = ints{1, 2, 3};
+    auto v2 = ints{1, 2};
+    std::mismatch(std::begin(v1), std::end(v1),
+                  std::begin(v2), std::end(v2));
+  }
+
+  // C++17
+  namespace ns1::ns2::ns3 {}
+
+#include <optional>
+  auto opt_string = std::optional<std::string>{};
+  auto out = std::ostringstream{};
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX17_CXXFLAGS=$f
+ break
+fi
+
+done
+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
+
+
+
+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
+
+for f in '-std=c++2a' '-std=c++2a -stdlib=libc++'
+do
+  as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__$f" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts $f" >&5
+$as_echo_n "checking whether C++ compiler accepts $f... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  $f"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+typedef std::vector<int> ints;
+
+
+#include <algorithm>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <string>
+
+  // C++11
+  template <typename T>
+  struct check
+  {
+    static_assert(sizeof(int) <= sizeof(T), "not big enough");
+  };
+
+  using right_angle_brackets = check<check<bool>>;
+
+  auto f = std::make_shared<std::string>("shared_ptr");
+
+  int a;
+  decltype(a) b;
+
+  typedef check<int> check_type;
+  check_type c;
+  check_type&& cr = static_cast<check_type&&>(c);
+
+  auto d = a;
+
+  // Some versions of libstdc++ do not support std::set::emplace.
+  void foo()
+  {
+    std::set<int> is;
+    is.emplace(42);
+  }
+
+  // Clang++ 3.5, for a while, was unable to process properly
+  // the for-loop because its variable, r, is a typedef...
+  // It failed as follows:
+  //
+  // error: unexpected ':' in nested name specifier; did you mean '::'?
+  //    for (auto r: std::set<int>{1, 2})
+  //               ^
+  //               ::
+  using r = std::set<int>;
+  void bar()
+  {
+    for (int r: std::set<int>{1, 2})
+      continue;
+  }
+
+  // GCC 4.8.2 on Solaris 11.3 does not support to_string.
+  auto e = std::to_string(42);
+
+  // C++14
+  void mismatch()
+  {
+    using ints = std::vector<int>;
+    auto v1 = ints{1, 2, 3};
+    auto v2 = ints{1, 2};
+    std::mismatch(std::begin(v1), std::end(v1),
+                  std::begin(v2), std::end(v2));
+  }
+
+  // C++17
+  namespace ns1::ns2::ns3 {}
+
+#include <optional>
+  auto opt_string = std::optional<std::string>{};
+  auto out = std::ostringstream{};
+
+  // C++2A
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};$as_echo "$as_val"'`" = xyes; then :
+  CXX2A_CXXFLAGS=$f
+ break
+fi
+
+done
+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 x"$CXX11_CXXFLAGS" != x; then
+  ENABLE_CXX11_TRUE=
+  ENABLE_CXX11_FALSE='#'
+else
+  ENABLE_CXX11_TRUE='#'
+  ENABLE_CXX11_FALSE=
+fi
+
+ if test x"$CXX14_CXXFLAGS" != x; then
+  ENABLE_CXX14_TRUE=
+  ENABLE_CXX14_FALSE='#'
+else
+  ENABLE_CXX14_TRUE='#'
+  ENABLE_CXX14_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
+
+
 # Check whether --enable-gcc-warnings was given.
 if test "${enable_gcc_warnings+set}" = set; then :
   enableval=$enable_gcc_warnings; case $enable_gcc_warnings in
@@ -7483,11 +9156,43 @@
   enable_gcc_warnings=no
 fi
 
+ if test "$enable_gcc_warnings" = yes; then
+  ENABLE_GCC_WARNINGS_TRUE=
+  ENABLE_GCC_WARNINGS_FALSE='#'
+else
+  ENABLE_GCC_WARNINGS_TRUE='#'
+  ENABLE_GCC_WARNINGS_FALSE=
+fi
+
 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'
+  # -Wno-tautological-constant-out-of-range-compare for Clang 3.3 and
+  # 3.4 on GNU/Linux that choke on intprops.h's INT_MULTIPLY_WRAPV,
+  # etc.
+  warn_common='-Wall -Wextra -Wcast-align
+    -fparse-all-comments -Wdocumentation
+    -Wformat -Wimplicit-fallthrough -Wnull-dereference
+    -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare
+    -Wpointer-arith -Wshadow
+    -Wwrite-strings'
+  warn_c='-Wbad-function-cast -Wstrict-prototypes'
+  warn_cxx='-Wextra-semi -Wnoexcept -Wold-style-cast -Wundefined-func-template
+    -Wweak-vtables'
+  # Warnings for the test suite only.
+  #
+  # -fno-color-diagnostics: Clang's use of colors in the error
+  # messages is confusing the tests looking at the compiler's output
+  # (e.g., synclines.at).
+  #
+  # -Wno-keyword-macro: We use the "#define private public" dirty
+  # trick in the test suite to check some private implementation
+  # details for lalr1.cc.
+  warn_tests='-Wundef -pedantic -Wconversion
+    -Wdeprecated -Wsign-compare -Wsign-conversion
+    -Wtautological-constant-out-of-range-compare
+    -fno-color-diagnostics
+    -Wno-keyword-macro'
+
+
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -7505,14 +9210,22 @@
   # 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 :
+
+  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 C compiler handles -Werror -Wunknown-warning-option" >&5
+$as_echo_n "checking whether C compiler handles -Werror -Wunknown-warning-option... " >&6; }
+if ${gl_cv_warn_c__Werror__Wunknown_warning_option+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
   gl_save_compiler_FLAGS="$CFLAGS"
-  as_fn_append CFLAGS " -Werror=unknown-warning-option"
+  as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7524,12 +9237,59 @@
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_warn_c__Werror__Wunknown_warning_option=yes
+else
+  gl_cv_warn_c__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror__Wunknown_warning_option" >&5
+$as_echo "$gl_cv_warn_c__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_c__Werror__Wunknown_warning_option" = xyes; then :
+  gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else
+  gl_unknown_warnings_are_errors=
+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
+
+
+
+
+{ $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 " $gl_unknown_warnings_are_errors -Werror=unknown-warning-option"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
   gl_cv_warn_c__Werror_unknown_warning_option=yes
 else
   gl_cv_warn_c__Werror_unknown_warning_option=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7540,9 +9300,55 @@
 fi
 
 
+  # Accept this warning only if it is not too touchy (e.g., clang 3.3
+  # and 3.4).
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wunreachable-code" >&5
+$as_echo_n "checking whether C compiler handles -Wunreachable-code... " >&6; }
+if ${gl_cv_warn_c__Wunreachable_code+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CFLAGS"
+  as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunreachable-code"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+if (sizeof (long) < sizeof (int)) return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_warn_c__Wunreachable_code=yes
+else
+  gl_cv_warn_c__Wunreachable_code=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wunreachable_code" >&5
+$as_echo "$gl_cv_warn_c__Wunreachable_code" >&6; }
+if test "x$gl_cv_warn_c__Wunreachable_code" = xyes; then :
+  as_fn_append WARN_CFLAGS " -Wunreachable-code"
+fi
+
+
   for i in $warn_common $warn_c;
   do
-    as_gl_Warn=`$as_echo "gl_cv_warn_c_$i" | $as_tr_sh`
+
+
+as_gl_Warn=`$as_echo "gl_cv_warn_c_$i" | $as_tr_sh`
+gl_positive="$i"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
 { $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 :
@@ -7550,7 +9356,7 @@
 else
 
   gl_save_compiler_FLAGS="$CFLAGS"
-  as_fn_append CFLAGS " $i"
+  as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7562,12 +9368,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
   eval "$as_gl_Warn=yes"
 else
   eval "$as_gl_Warn=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7580,14 +9387,16 @@
 
 
   done
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror" >&5
+
+
+{ $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"
+  as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7599,12 +9408,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
   gl_cv_warn_c__Werror=yes
 else
   gl_cv_warn_c__Werror=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7618,88 +9428,27 @@
 
   # 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 ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_warn_c__Wmissing_declarations=yes
-else
-  gl_cv_warn_c__Wmissing_declarations=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$gl_save_compiler_FLAGS"
-
-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 ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_warn_c__Wmissing_prototypes=yes
-else
-  gl_cv_warn_c__Wmissing_prototypes=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$gl_save_compiler_FLAGS"
-
-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 :
+  for i in $warn_tests -Wincompatible-pointer-types;
+  do
+
+
+as_gl_Warn=`$as_echo "gl_cv_warn_c_$i" | $as_tr_sh`
+gl_positive="$i"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+{ $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 " -Wundef"
+  as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7711,57 +9460,25 @@
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_warn_c__Wundef=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_gl_Warn=yes"
 else
-  gl_cv_warn_c__Wundef=no
+  eval "$as_gl_Warn=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CFLAGS="$gl_save_compiler_FLAGS"
 
 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"
+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_TEST " $i"
 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 ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_warn_c__pedantic=yes
-else
-  gl_cv_warn_c__pedantic=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$gl_save_compiler_FLAGS"
-
-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
-
-
+  done
   CFLAGS=$save_CFLAGS
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -7779,6 +9496,7 @@
 
   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 :
@@ -7786,7 +9504,7 @@
 else
 
   gl_save_compiler_FLAGS="$CXXFLAGS"
-  as_fn_append CXXFLAGS " -Werror=unknown-warning-option"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Werror=unknown-warning-option"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7798,12 +9516,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"; then :
   gl_cv_warn_cxx__Werror_unknown_warning_option=yes
 else
   gl_cv_warn_cxx__Werror_unknown_warning_option=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CXXFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7816,7 +9535,13 @@
 
   for i in $warn_common $warn_cxx;
   do
-    as_gl_Warn=`$as_echo "gl_cv_warn_cxx_$i" | $as_tr_sh`
+
+
+as_gl_Warn=`$as_echo "gl_cv_warn_cxx_$i" | $as_tr_sh`
+gl_positive="$i"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
 { $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 :
@@ -7824,7 +9549,7 @@
 else
 
   gl_save_compiler_FLAGS="$CXXFLAGS"
-  as_fn_append CXXFLAGS " $i"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors $gl_positive"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7836,12 +9561,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"; then :
   eval "$as_gl_Warn=yes"
 else
   eval "$as_gl_Warn=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CXXFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7854,14 +9580,56 @@
 
 
   done
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wzero-as-null-pointer-constant" >&5
+  # Accept this warning only if it is not too touchy (e.g., clang 3.3
+  # and 3.4).
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wunreachable-code" >&5
+$as_echo_n "checking whether C++ compiler handles -Wunreachable-code... " >&6; }
+if ${gl_cv_warn_cxx__Wunreachable_code+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Wunreachable-code"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+if (sizeof (long) < sizeof (int)) return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__Wunreachable_code=yes
+else
+  gl_cv_warn_cxx__Wunreachable_code=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wunreachable_code" >&5
+$as_echo "$gl_cv_warn_cxx__Wunreachable_code" >&6; }
+if test "x$gl_cv_warn_cxx__Wunreachable_code" = xyes; then :
+  as_fn_append WARN_CXXFLAGS " -Wunreachable-code"
+fi
+
+
+
+
+{ $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"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Wzero-as-null-pointer-constant"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7873,12 +9641,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"; then :
   gl_cv_warn_cxx__Wzero_as_null_pointer_constant=yes
 else
   gl_cv_warn_cxx__Wzero_as_null_pointer_constant=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CXXFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7889,14 +9658,60 @@
 fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Werror" >&5
+  # Before GCC6, the pragmas don't work well enough to neutralize
+  # this warning.
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wuseless-cast" >&5
+$as_echo_n "checking whether C++ compiler handles -Wuseless-cast... " >&6; }
+if ${gl_cv_warn_cxx__Wuseless_cast+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Wuseless-cast"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+              #if defined __GNUC__ && ! defined __ICC && ! defined __clang__ && __GNUC__ < 6
+              syntax error
+              #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__Wuseless_cast=yes
+else
+  gl_cv_warn_cxx__Wuseless_cast=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wuseless_cast" >&5
+$as_echo "$gl_cv_warn_cxx__Wuseless_cast" >&6; }
+if test "x$gl_cv_warn_cxx__Wuseless_cast" = xyes; then :
+  as_fn_append WARN_CXXFLAGS " -Wuseless-cast"
+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"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Werror"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7908,12 +9723,13 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_link "$LINENO"; then :
   gl_cv_warn_cxx__Werror=yes
 else
   gl_cv_warn_cxx__Werror=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CXXFLAGS="$gl_save_compiler_FLAGS"
 
 fi
@@ -7925,14 +9741,23 @@
 
 
   # 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 :
+  for i in $warn_tests;
+  do
+
+
+as_gl_Warn=`$as_echo "gl_cv_warn_cxx_$i" | $as_tr_sh`
+gl_positive="$i"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+{ $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 " -Wundef"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors $gl_positive"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7944,30 +9769,36 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  gl_cv_warn_cxx__Wundef=yes
+if ac_fn_cxx_try_link "$LINENO"; then :
+  eval "$as_gl_Warn=yes"
 else
-  gl_cv_warn_cxx__Wundef=no
+  eval "$as_gl_Warn=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
   CXXFLAGS="$gl_save_compiler_FLAGS"
 
 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"
+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_TEST " $i"
 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 :
+  done
+  # Too many compilers complain about Flex generated code.
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wno-error" >&5
+$as_echo_n "checking whether C++ compiler handles -Wno-error... " >&6; }
+if ${gl_cv_warn_cxx__Wno_error+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
   gl_save_compiler_FLAGS="$CXXFLAGS"
-  as_fn_append CXXFLAGS " -pedantic"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Werror"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7979,19 +9810,59 @@
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  gl_cv_warn_cxx__pedantic=yes
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__Wno_error=yes
 else
-  gl_cv_warn_cxx__pedantic=no
+  gl_cv_warn_cxx__Wno_error=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext 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"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wno_error" >&5
+$as_echo "$gl_cv_warn_cxx__Wno_error" >&6; }
+if test "x$gl_cv_warn_cxx__Wno_error" = xyes; then :
+  as_fn_append FLEX_SCANNER_CXXFLAGS " -Wno-error"
+fi
+
+
+  # Clang++ deprecates compiling C.
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler handles -Wno-deprecated" >&5
+$as_echo_n "checking whether C++ compiler handles -Wno-deprecated... " >&6; }
+if ${gl_cv_warn_cxx__Wno_deprecated+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  gl_save_compiler_FLAGS="$CXXFLAGS"
+  as_fn_append CXXFLAGS " $gl_unknown_warnings_are_errors -Wdeprecated"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  gl_cv_warn_cxx__Wno_deprecated=yes
+else
+  gl_cv_warn_cxx__Wno_deprecated=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CXXFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_cxx__Wno_deprecated" >&5
+$as_echo "$gl_cv_warn_cxx__Wno_deprecated" >&6; }
+if test "x$gl_cv_warn_cxx__Wno_deprecated" = xyes; then :
+  as_fn_append WNO_DEPRECATED_CXXFLAGS " -Wno-deprecated"
 fi
 
 
@@ -8005,10 +9876,11 @@
 fi
 
 
+
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
-	 int test_array[CHAR_BIT];
+         int test_array[CHAR_BIT];
 int
 main ()
 {
@@ -8105,22 +9977,22 @@
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <cstdlib>
-	  #include <iostream>
-	  #include <map>
-	  #include <string>
-	  using namespace std;
+          #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;
+          typedef std::pair<unsigned, int> uipair;
+          std::map<unsigned, int> m;
+          std::map<unsigned, int>::iterator i;
+          m.insert (uipair (4, -4));
+          for (i = m.begin (); i != m.end (); ++i)
+            if (i->first != 4)
+              return 1;
   ;
   return 0;
 }
@@ -8159,19 +10031,17 @@
 $as_echo "$bison_cv_cxx_works" >&6; }
 
  case $bison_cv_cxx_works in
- yes)
-    BISON_CXX_WORKS=':';;
- no | cross)
-    BISON_CXX_WORKS='exit 77';;
+   yes)        BISON_CXX_WORKS=':';;
+   no | cross) BISON_CXX_WORKS='false';;
  esac
 
 
   if test $bison_cv_cxx_works = yes; then
-  BISON_CXX_WORKS_TRUE=
-  BISON_CXX_WORKS_FALSE='#'
+  ENABLE_CXX_TRUE=
+  ENABLE_CXX_FALSE='#'
 else
-  BISON_CXX_WORKS_TRUE='#'
-  BISON_CXX_WORKS_FALSE=
+  ENABLE_CXX_TRUE='#'
+  ENABLE_CXX_FALSE=
 fi
 
 
@@ -8236,6 +10106,894 @@
 
 
 
+# D.
+for ac_prog in dmd
+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_DC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DC"; then
+  ac_cv_prog_DC="$DC" # 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_DC="$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
+DC=$ac_cv_prog_DC
+if test -n "$DC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DC" >&5
+$as_echo "$DC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$DC" && break
+done
+
+for ac_prog in -g
+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_DCFLAGS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DCFLAGS"; then
+  ac_cv_prog_DCFLAGS="$DCFLAGS" # 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_DCFLAGS="$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
+DCFLAGS=$ac_cv_prog_DCFLAGS
+if test -n "$DCFLAGS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DCFLAGS" >&5
+$as_echo "$DCFLAGS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$DCFLAGS" && break
+done
+
+ if test x"$DC" != x; then
+  ENABLE_D_TRUE=
+  ENABLE_D_FALSE='#'
+else
+  ENABLE_D_TRUE='#'
+  ENABLE_D_FALSE=
+fi
+
+
+# Java.
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if 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.7
+  test -n "$source_version" || {
+    as_fn_error $? "missing source-version argument to gt_JAVACOMP" "$LINENO" 5
+  }
+  target_version=1.7
+  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 { void foo () { switch ("A") {} } }' ;;
+    1.7) goodcode='class conftest     { void foo () { switch ("A") {} } }'
+         failcode='class conftestfail { void foo () { Runnable r = () -> {}; } }' ;;
+    1.8) goodcode='class conftest     { void foo () { Runnable r = () -> {}; } }'
+         failcode='interface conftestfail { private void foo () {} }' ;;
+    9)   goodcode='interface conftest     { private void foo () {} }'
+         failcode='class conftestfail { public void m() { var i = new Integer(0); } }' ;;
+    10)  goodcode='class conftest     { public void m() { var i = new Integer(0); } }'
+         failcode='class conftestfail { Readable r = (var b) -> 0; }' ;;
+    11)  goodcode='class conftest     { Readable r = (var b) -> 0; }'
+         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 ;;
+    1.7) cfversion=51 ;;
+    1.8) cfversion=52 ;;
+    9)   cfversion=53 ;;
+    10)  cfversion=54 ;;
+    11)  cfversion=55 ;;
+    *) 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:10295: $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:10302: $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:10307: $JAVAC -d . conftestfail.java" >&5
+                  $JAVAC -d . conftestfail.java >&5 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:10311: $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:10325: $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:10338: $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:10350: $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:10358: $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:10366: $JAVAC -d . conftestfail.java" >&5
+                   $JAVAC -d . conftestfail.java >&5 2>&1
+                 } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:10370: $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
+                                    if test "$source_version" = 1.5; then
+        case "$target_version" in
+          1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;;
+          *) source_version='1.6' ;;
+        esac
+      fi
+      rm -f conftest.class
+      if { echo "$as_me:10398: $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:10405: $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:10410: $JAVAC -d . conftestfail.java" >&5
+                $JAVAC -d . conftestfail.java >&5 2>&1
+              } \
+           && test -f conftestfail.class \
+           && ! { echo "$as_me:10414: $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:10427: $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:10434: $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:10439: $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:10443: $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:10456: $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:10574: 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:10579: 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:10586: 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:10591: gcj -C -d . conftestfail.java" >&5
+                      gcj -C -d . conftestfail.java >&5 2>&1
+                    } \
+                 && test -f conftestfail.class \
+                 && ! { echo "$as_me:10595: 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:10609: 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:10622: 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:10633: 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:10642: 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
+                                        if test "$source_version" = 1.5; then
+          case "$target_version" in
+            1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;;
+            *) source_version='1.6' ;;
+          esac
+        fi
+                        rm -f conftest.class
+        if { echo "$as_me:10667: 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:10674: 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:10679: javac -d . conftestfail.java" >&5
+                  javac -d . conftestfail.java >&5 2>&1
+                } \
+             && test -f conftestfail.class \
+             && ! { echo "$as_me:10683: 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:10696: 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:10703: 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:10708: 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:10712: 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:10725: 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 __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; }
+
+
+
+
+
+
+
+
+
+ if test x"$CONF_JAVAC" != x && test x"$CONF_JAVA" != x; then
+  ENABLE_JAVA_TRUE=
+  ENABLE_JAVA_FALSE='#'
+else
+  ENABLE_JAVA_TRUE='#'
+  ENABLE_JAVA_FALSE=
+fi
+
+
+
 # Check whether --enable-yacc was given.
 if test "${enable_yacc+set}" = set; then :
   enableval=$enable_yacc;
@@ -8243,15 +11001,15 @@
   enable_yacc=yes
 fi
 
-case $enable_yacc in
-yes)
-  YACC_SCRIPT=yacc
-  YACC_LIBRARY=liby.a;;
-*)
-  YACC_SCRIPT=
-  YACC_LIBRARY=;;
-esac
+ if test "$enable_yacc" = yes; then
+  ENABLE_YACC_TRUE=
+  ENABLE_YACC_FALSE='#'
+else
+  ENABLE_YACC_TRUE='#'
+  ENABLE_YACC_FALSE=
+fi
 
+ac_config_files="$ac_config_files src/yacc"
 
 
 # Checks for programs.
@@ -8332,7 +11090,6 @@
 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
 %%
@@ -8449,7 +11206,29 @@
 rm -f conftest.l $LEX_OUTPUT_ROOT.c
 
 fi
-$LEX_IS_FLEX || as_fn_error $? "Flex is required" "$LINENO" 5
+LEX_IS_FLEX=`test "$ac_cv_prog_lex_is_flex" = yes && echo true || echo false`
+
+if ! "$LEX_IS_FLEX" || test "X$LEX" = X:; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bypassing lex because flex is required" >&5
+$as_echo "$as_me: WARNING: bypassing lex because flex is required" >&2;}
+  LEX=:
+fi
+ if $LEX_IS_FLEX; then
+  FLEX_WORKS_TRUE=
+  FLEX_WORKS_FALSE='#'
+else
+  FLEX_WORKS_TRUE='#'
+  FLEX_WORKS_FALSE=
+fi
+
+ if $LEX_IS_FLEX && test $bison_cv_cxx_works = yes; then
+  FLEX_CXX_WORKS_TRUE=
+  FLEX_CXX_WORKS_FALSE='#'
+else
+  FLEX_CXX_WORKS_TRUE='#'
+  FLEX_CXX_WORKS_FALSE=
+fi
+
 for ac_prog in 'bison -y' byacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -8730,9 +11509,6 @@
 fi
 
 
-if test -z "$PERL"; then
-   as_fn_error $? "perl not found" "$LINENO" 5
-fi
 
 HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
 
@@ -8851,6 +11627,26 @@
 
 
 
+
+                        # Check whether --enable-cross-guesses was given.
+if test "${enable_cross_guesses+set}" = set; then :
+  enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5
+$as_echo "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;}
+       enableval=conservative
+     fi
+     gl_cross_guesses="$enableval"
+else
+  gl_cross_guesses=conservative
+fi
+
+  if test $gl_cross_guesses = risky; then
+    gl_cross_guess_normal="guessing yes"
+    gl_cross_guess_inverted="guessing no"
+  else
+    gl_cross_guess_normal="guessing no"
+    gl_cross_guess_inverted="guessing yes"
+  fi
           LIBC_FATAL_STDERR_=1
   export LIBC_FATAL_STDERR_
 
@@ -9074,13 +11870,17 @@
   GNULIB_PTSNAME=0;
   GNULIB_PTSNAME_R=0;
   GNULIB_PUTENV=0;
+  GNULIB_QSORT_R=0;
   GNULIB_RANDOM=0;
   GNULIB_RANDOM_R=0;
+  GNULIB_REALLOCARRAY=0;
   GNULIB_REALLOC_POSIX=0;
   GNULIB_REALPATH=0;
   GNULIB_RPMATCH=0;
+  GNULIB_SECURE_GETENV=0;
   GNULIB_SETENV=0;
   GNULIB_STRTOD=0;
+  GNULIB_STRTOLD=0;
   GNULIB_STRTOLL=0;
   GNULIB_STRTOULL=0;
   GNULIB_SYSTEM_POSIX=0;
@@ -9093,6 +11893,9 @@
   HAVE_DECL_GETLOADAVG=1;
   HAVE_GETSUBOPT=1;
   HAVE_GRANTPT=1;
+  HAVE_INITSTATE=1;
+  HAVE_DECL_INITSTATE=1;
+  HAVE_MBTOWC=1;
   HAVE_MKDTEMP=1;
   HAVE_MKOSTEMP=1;
   HAVE_MKOSTEMPS=1;
@@ -9101,14 +11904,20 @@
   HAVE_POSIX_OPENPT=1;
   HAVE_PTSNAME=1;
   HAVE_PTSNAME_R=1;
+  HAVE_QSORT_R=1;
   HAVE_RANDOM=1;
   HAVE_RANDOM_H=1;
   HAVE_RANDOM_R=1;
+  HAVE_REALLOCARRAY=1;
   HAVE_REALPATH=1;
   HAVE_RPMATCH=1;
+  HAVE_SECURE_GETENV=1;
   HAVE_SETENV=1;
   HAVE_DECL_SETENV=1;
+  HAVE_SETSTATE=1;
+  HAVE_DECL_SETSTATE=1;
   HAVE_STRTOD=1;
+  HAVE_STRTOLD=1;
   HAVE_STRTOLL=1;
   HAVE_STRTOULL=1;
   HAVE_STRUCT_RANDOM_DATA=1;
@@ -9117,17 +11926,22 @@
   HAVE_DECL_UNSETENV=1;
   REPLACE_CALLOC=0;
   REPLACE_CANONICALIZE_FILE_NAME=0;
+  REPLACE_INITSTATE=0;
   REPLACE_MALLOC=0;
   REPLACE_MBTOWC=0;
   REPLACE_MKSTEMP=0;
   REPLACE_PTSNAME=0;
   REPLACE_PTSNAME_R=0;
   REPLACE_PUTENV=0;
+  REPLACE_QSORT_R=0;
+  REPLACE_RANDOM=0;
   REPLACE_RANDOM_R=0;
   REPLACE_REALLOC=0;
   REPLACE_REALPATH=0;
   REPLACE_SETENV=0;
+  REPLACE_SETSTATE=0;
   REPLACE_STRTOD=0;
+  REPLACE_STRTOLD=0;
   REPLACE_UNSETENV=0;
   REPLACE_WCTOMB=0;
 
@@ -9144,7 +11958,7 @@
 int
 main ()
 {
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
              choke me
              #endif
 
@@ -9164,129 +11978,6 @@
 $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
@@ -9305,16 +11996,6 @@
 
 
 
-  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
-
-
 
 
 
@@ -9360,6 +12041,377 @@
 
 
 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5
+$as_echo_n "checking whether realpath works... " >&6; }
+if ${gl_cv_func_realpath_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    touch conftest.a
+    mkdir conftest.d
+    if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                       # Guess yes on glibc systems.
+        *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
+                       # Guess yes on musl systems.
+        *-musl*)       gl_cv_func_realpath_works="guessing yes" ;;
+                       # Guess no on native Windows.
+        mingw*)        gl_cv_func_realpath_works="guessing no" ;;
+                       # If we don't know, obey --enable-cross-guesses.
+        *)             gl_cv_func_realpath_works="$gl_cross_guess_normal" ;;
+      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 https://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 https://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 __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>
+#include <unistd.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 <stdlib.h>
+        #include <string.h>
+
+int
+main ()
+{
+
+        int result = 0;
+        {
+          char *name = realpath ("conftest.a", NULL);
+          if (!(name && *name == '/'))
+            result |= 1;
+          free (name);
+        }
+        {
+          char *name = realpath ("conftest.b/../conftest.a", NULL);
+          if (name != NULL)
+            result |= 2;
+          free (name);
+        }
+        {
+          char *name = realpath ("conftest.a/", NULL);
+          if (name != NULL)
+            result |= 4;
+          free (name);
+        }
+        {
+          char *name1 = realpath (".", NULL);
+          char *name2 = realpath ("conftest.d//./..", NULL);
+          if (! name1 || ! name2 || strcmp (name1, name2))
+            result |= 8;
+          free (name1);
+          free (name2);
+        }
+        return result;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_realpath_works=yes
+else
+  gl_cv_func_realpath_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
+
+    rm -rf conftest.a conftest.d
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5
+$as_echo "$gl_cv_func_realpath_works" >&6; }
+  case "$gl_cv_func_realpath_works" in
+    *yes)
+
+$as_echo "#define FUNC_REALPATH_WORKS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+  GNULIB_ACCESS=0;
+  GNULIB_CHDIR=0;
+  GNULIB_CHOWN=0;
+  GNULIB_CLOSE=0;
+  GNULIB_COPY_FILE_RANGE=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_GETPASS=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_TRUNCATE=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_COPY_FILE_RANGE=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_GETPASS=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=1;
+  HAVE_DECL_GETLOGIN_R=1;
+  HAVE_DECL_GETPAGESIZE=1;
+  HAVE_DECL_GETUSERSHELL=1;
+  HAVE_DECL_SETHOSTNAME=1;
+  HAVE_DECL_TRUNCATE=1;
+  HAVE_DECL_TTYNAME_R=1;
+  HAVE_OS_H=0;
+  HAVE_SYS_PARAM_H=0;
+  REPLACE_ACCESS=0;
+  REPLACE_CHOWN=0;
+  REPLACE_CLOSE=0;
+  REPLACE_DUP=0;
+  REPLACE_DUP2=0;
+  REPLACE_FACCESSAT=0;
+  REPLACE_FCHOWNAT=0;
+  REPLACE_FTRUNCATE=0;
+  REPLACE_GETCWD=0;
+  REPLACE_GETDOMAINNAME=0;
+  REPLACE_GETDTABLESIZE=0;
+  REPLACE_GETLOGIN_R=0;
+  REPLACE_GETGROUPS=0;
+  REPLACE_GETPAGESIZE=0;
+  REPLACE_GETPASS=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_READLINKAT=0;
+  REPLACE_RMDIR=0;
+  REPLACE_SLEEP=0;
+  REPLACE_SYMLINK=0;
+  REPLACE_SYMLINKAT=0;
+  REPLACE_TRUNCATE=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;
+
+
+
+
+
+
+  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
+
+
+
+
+
+
+
+
 
 
 
@@ -9371,11 +12423,10 @@
 
   { $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 :
+if ${gt_cv_var_environ_declaration+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if HAVE_UNISTD_H
      #include <unistd.h>
@@ -9383,7 +12434,7 @@
      /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
      #include <stdlib.h>
 
-           extern struct { int foo; } environ;
+            extern struct { int foo; } environ;
 int
 main ()
 {
@@ -9399,8 +12450,7 @@
 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 "$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
 
@@ -9624,36 +12674,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_errno_h
+           gl_cv_next_errno_h='"'$gl_header'"'
 
 
 fi
@@ -10015,12 +13069,14 @@
 
 
 
+  GNULIB_CREAT=0;
   GNULIB_FCNTL=0;
   GNULIB_NONBLOCKING=0;
   GNULIB_OPEN=0;
   GNULIB_OPENAT=0;
     HAVE_FCNTL=1;
   HAVE_OPENAT=1;
+  REPLACE_CREAT=0;
   REPLACE_FCNTL=0;
   REPLACE_OPEN=0;
   REPLACE_OPENAT=0;
@@ -10040,7 +13096,12 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
+  case "$host_os" in
+                  # Guess 'no' on native Windows.
+          mingw*) gl_cv_header_working_fcntl_h='no' ;;
+          *)      gl_cv_header_working_fcntl_h=cross-compiling ;;
+        esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -10151,6 +13212,7 @@
   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; }
@@ -10303,8 +13365,6 @@
 
 
 
-
-
   { $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 :
@@ -10390,9 +13450,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_sizes_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -10408,8 +13470,28 @@
            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";;
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_sizes_c99="guessing yes"
+else
+  gl_cv_func_printf_sizes_c99="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -10435,6 +13517,8 @@
   if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
       || strcmp (buf, "12345671 33") != 0)
     result |= 1;
+#else
+  result |= 1;
 #endif
   buf[0] = '\0';
   if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
@@ -10474,11 +13558,30 @@
 else
 
       if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                            # Guess no on BeOS.
+           beos*)           gl_cv_func_printf_long_double="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_long_double="guessing yes";;
+                            # Guess yes on MSVC, no on mingw.
+           mingw*)          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-         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";;
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_long_double="guessing yes"
+else
+  gl_cv_func_printf_long_double="guessing no"
+fi
+rm -f conftest*
+
+                            ;;
+           *)               gl_cv_func_printf_long_double="guessing yes";;
          esac
 
 else
@@ -10532,9 +13635,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_infinite="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              gl_cv_func_printf_infinite="guessing yes";;
                                  # Guess yes on FreeBSD >= 6.
-           freebsd[1-5]*)        gl_cv_func_printf_infinite="guessing no";;
+           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";;
@@ -10548,8 +13653,28 @@
            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";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_infinite="guessing no";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_infinite="guessing yes"
+else
+  gl_cv_func_printf_infinite="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_infinite="$gl_cross_guess_normal";;
          esac
 
 else
@@ -10924,22 +14049,43 @@
 else
 
           if test "$cross_compiling" = yes; then :
-
-             case "$host_cpu" in
+  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";;
+                   *-gnu* | gnu*)        gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on musl systems.
+                   *-musl*)              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[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";;
+                                         # Guess no on Android.
+                   linux*-android*)      gl_cv_func_printf_infinite_long_double="guessing no";;
+                                         # Guess yes on MSVC, no on mingw.
+                   mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_infinite_long_double="guessing yes"
+else
+  gl_cv_func_printf_infinite_long_double="guessing no"
+fi
+rm -f conftest*
+
+                                         ;;
+                                         # If we don't know, obey --enable-cross-guesses.
+                   *)                    gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";;
                  esac
                  ;;
              esac
@@ -10986,7 +14132,7 @@
   /* 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.  */
+    /* See https://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) {
@@ -11005,14 +14151,14 @@
            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.  */
+           See https://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__
+#elif defined _WIN32 && ! defined __CYGWIN__
 /* Avoid a crash on native Windows.  */
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -11043,11 +14189,12 @@
 #else
 /* Avoid a crash on POSIX systems.  */
 #include <signal.h>
+#include <unistd.h>
 /* A POSIX signal handler.  */
 static void
 exception_handler (int sig)
 {
-  exit (1);
+  _exit (1);
 }
 static void
 nocrash_init (void)
@@ -11121,7 +14268,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -11158,66 +14305,51 @@
   { /* 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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 4;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 4;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 8;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 8;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 16;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 16;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 32;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 32;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 64;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 64;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       result |= 64;
   }
 #endif
@@ -11255,7 +14387,7 @@
 
          case "$host_os" in
                                  # Guess yes on glibc >= 2.5 systems.
-           *-gnu*)
+           *-gnu* | gnu*)
              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -11276,8 +14408,14 @@
 rm -f conftest*
 
              ;;
-                                 # If we don't know, assume the worst.
-           *)                    gl_cv_func_printf_directive_a="guessing no";;
+                                 # Guess yes on musl systems.
+           *-musl*)              gl_cv_func_printf_directive_a="guessing yes";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_directive_a="guessing no";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_printf_directive_a="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_directive_a="$gl_cross_guess_normal";;
          esac
 
 else
@@ -11310,8 +14448,15 @@
           && strcmp (buf, "0x6.0ap-2 33") != 0
           && strcmp (buf, "0xc.14p-3 33") != 0))
     result |= 4;
+  /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round.  */
+  if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x2p+0 33") != 0
+          && strcmp (buf, "0x3p-1 33") != 0
+          && strcmp (buf, "0x6p-2 33") != 0
+          && strcmp (buf, "0xcp-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> */
+     <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */
   if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
       || buf[0] == '0')
     result |= 8;
@@ -11323,7 +14468,7 @@
           && 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>.  */
+     glibc 2.4 bug <https://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
@@ -11359,18 +14504,40 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_directive_f="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
+           solaris*)             gl_cv_func_printf_directive_f="guessing no";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_directive_f="guessing no";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_directive_f="guessing yes"
+else
+  gl_cv_func_printf_directive_f="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_directive_f="$gl_cross_guess_normal";;
          esac
 
 else
@@ -11420,10 +14587,12 @@
 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";;
+  case "$host_os" in
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_directive_n="guessing no";;
+                            # Guess no on native Windows.
+           mingw*)          gl_cv_func_printf_directive_n="guessing no";;
+           *)               gl_cv_func_printf_directive_n="guessing yes";;
          esac
 
 else
@@ -11493,6 +14662,10 @@
            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";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_directive_ls="guessing no";;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_printf_directive_ls="guessing yes";;
            *)               gl_cv_func_printf_directive_ls="guessing yes";;
          esac
 
@@ -11576,10 +14749,13 @@
 
          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";;
+                            gl_cv_func_printf_positions="guessing no";;
+           beos*)           gl_cv_func_printf_positions="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_positions="guessing yes";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_positions="guessing no";;
+           *)               gl_cv_func_printf_positions="guessing yes";;
          esac
 
 else
@@ -11623,10 +14799,13 @@
       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";;
+           cygwin*)         gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)         gl_cv_func_printf_flag_grouping="guessing no";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_flag_grouping="guessing no";;
+           *)               gl_cv_func_printf_flag_grouping="guessing yes";;
          esac
 
 else
@@ -11669,12 +14848,16 @@
       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";;
+                            # 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 on Android.
+           linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                            # Guess yes otherwise.
+           *)               gl_cv_func_printf_flag_leftadjust="guessing yes";;
          esac
 
 else
@@ -11718,12 +14901,18 @@
       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";;
+                            # Guess yes on glibc systems.
+           *-gnu* | gnu*)   gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess yes on musl systems.
+           *-musl*)         gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess yes on BeOS.
+           beos*)           gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_flag_zero="guessing no";;
+                            # Guess no on native Windows.
+           mingw*)          gl_cv_func_printf_flag_zero="guessing no";;
+                            # If we don't know, obey --enable-cross-guesses.
+           *)               gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";;
          esac
 
 else
@@ -11769,10 +14958,12 @@
 
          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" ;;
+           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" ;;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_precision="guessing yes" ;;
+           *)               gl_cv_func_printf_precision="guessing yes" ;;
          esac
 
 else
@@ -11911,7 +15102,7 @@
   /* 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.  */
+    /* See https://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) {
@@ -11930,14 +15121,14 @@
            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.  */
+           See https://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__
+#elif defined _WIN32 && ! defined __CYGWIN__
 /* Avoid a crash on native Windows.  */
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -11968,11 +15159,12 @@
 #else
 /* Avoid a crash on POSIX systems.  */
 #include <signal.h>
+#include <unistd.h>
 /* A POSIX signal handler.  */
 static void
 exception_handler (int sig)
 {
-  exit (1);
+  _exit (1);
 }
 static void
 nocrash_init (void)
@@ -12058,28 +15250,30 @@
       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";;
+                           # Guess yes on glibc systems.
+          *-gnu* | 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";;
+                           # Guess no on Android.
+          linux*-android*) gl_cv_func_printf_enomem="guessing no";;
+                           # If we don't know, obey --enable-cross-guesses.
+          *)               gl_cv_func_printf_enomem="$gl_cross_guess_normal";;
         esac
       fi
 
@@ -12290,12 +15484,58 @@
 
 $as_echo "#define HAVE_WINT_T 1" >>confdefs.h
 
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5
+$as_echo_n "checking whether wint_t is too small... " >&6; }
+if ${gl_cv_type_wint_t_too_small+:} 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 verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wint_t_too_small=no
+else
+  gl_cv_type_wint_t_too_small=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5
+$as_echo "$gl_cv_type_wint_t_too_small" >&6; }
+    if test $gl_cv_type_wint_t_too_small = yes; then
+      GNULIB_OVERRIDES_WINT_T=1
+    else
+      GNULIB_OVERRIDES_WINT_T=0
+    fi
+  else
+    GNULIB_OVERRIDES_WINT_T=0
   fi
 
 
 
 
 
+
   if test $ac_cv_header_features_h = yes; then
     HAVE_FEATURES_H=1
   else
@@ -12717,12 +15957,13 @@
 else
 
       if test "$cross_compiling" = yes; then :
-
-         case "$host_os" in
+  case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_retval_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -12743,8 +15984,28 @@
            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";;
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_snprintf_retval_c99="guessing yes"
+else
+  gl_cv_func_snprintf_retval_c99="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -13025,13 +16286,22 @@
   HAVE_DECL_TRUNC=1;
   HAVE_DECL_TRUNCF=1;
   HAVE_DECL_TRUNCL=1;
+  REPLACE_ACOSF=0;
+  REPLACE_ASINF=0;
+  REPLACE_ATANF=0;
+  REPLACE_ATAN2F=0;
   REPLACE_CBRTF=0;
   REPLACE_CBRTL=0;
   REPLACE_CEIL=0;
   REPLACE_CEILF=0;
   REPLACE_CEILL=0;
+  REPLACE_COSF=0;
+  REPLACE_COSHF=0;
+  REPLACE_EXPF=0;
+  REPLACE_EXPL=0;
   REPLACE_EXPM1=0;
   REPLACE_EXPM1F=0;
+  REPLACE_EXPM1L=0;
   REPLACE_EXP2=0;
   REPLACE_EXP2L=0;
   REPLACE_FABSL=0;
@@ -13053,6 +16323,7 @@
   REPLACE_HYPOTL=0;
   REPLACE_ILOGB=0;
   REPLACE_ILOGBF=0;
+  REPLACE_ILOGBL=0;
   REPLACE_ISFINITE=0;
   REPLACE_ISINF=0;
   REPLACE_ISNAN=0;
@@ -13079,12 +16350,18 @@
   REPLACE_REMAINDER=0;
   REPLACE_REMAINDERF=0;
   REPLACE_REMAINDERL=0;
+  REPLACE_RINTL=0;
   REPLACE_ROUND=0;
   REPLACE_ROUNDF=0;
   REPLACE_ROUNDL=0;
   REPLACE_SIGNBIT=0;
   REPLACE_SIGNBIT_USING_GCC=0;
+  REPLACE_SINF=0;
+  REPLACE_SINHF=0;
+  REPLACE_SQRTF=0;
   REPLACE_SQRTL=0;
+  REPLACE_TANF=0;
+  REPLACE_TANHF=0;
   REPLACE_TRUNC=0;
   REPLACE_TRUNCF=0;
   REPLACE_TRUNCL=0;
@@ -13120,305 +16397,60 @@
 { $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
+ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default"
+if test "x$ac_cv_have_decl_alarm" = xyes; then :
+  ac_have_decl=1
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/stat.h>
+  ac_have_decl=0
+fi
 
-#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
-
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ALARM $ac_have_decl
 _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 "$as_me:${as_lineno-$LINENO}: checking for arithmetic hrtime_t" >&5
+$as_echo_n "checking for arithmetic hrtime_t... " >&6; }
+if ${gl_cv_arithmetic_hrtime_t+:} 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];
-
+#include <time.h>
 int
 main ()
 {
-
+hrtime_t x = 0; return x/x;
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_type_off_t_64=yes
+  gl_cv_arithmetic_hrtime_t=yes
 else
-  gl_cv_type_off_t_64=no
+  gl_cv_arithmetic_hrtime_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_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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_arithmetic_hrtime_t" >&5
+$as_echo "$gl_cv_arithmetic_hrtime_t" >&6; }
+  if test $gl_cv_arithmetic_hrtime_t = yes; then
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-     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
+$as_echo "#define HAVE_ARITHMETIC_HRTIME_T 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
-
 
 
 
@@ -13446,36 +16478,40 @@
              if test $ac_cv_header_getopt_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_getopt_h
+           gl_cv_next_getopt_h='"'$gl_header'"'
           else
                gl_cv_next_getopt_h='<'getopt.h'>'
              fi
@@ -13731,7 +16767,7 @@
        POSIXLY_CORRECT=1
        export POSIXLY_CORRECT
        if test "$cross_compiling" = yes; then :
-           gl_cv_func_getopt_gnu="guessing no"
+                             gl_cv_func_getopt_gnu="$gl_cross_guess_normal"
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13777,7 +16813,7 @@
   /* 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.  */
+    /* See https://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) {
@@ -13796,14 +16832,14 @@
            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.  */
+           See https://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__
+#elif defined _WIN32 && ! defined __CYGWIN__
 /* Avoid a crash on native Windows.  */
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -13834,11 +16870,12 @@
 #else
 /* Avoid a crash on POSIX systems.  */
 #include <signal.h>
+#include <unistd.h>
 /* A POSIX signal handler.  */
 static void
 exception_handler (int sig)
 {
-  exit (1);
+  _exit (1);
 }
 static void
 nocrash_init (void)
@@ -14023,31 +17060,436 @@
 
 
 
-    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
+  GNULIB_GETRUSAGE=0;
+    HAVE_GETRUSAGE=1;
 
 
 
+:
+
+
+
+  GNULIB_GETTIMEOFDAY=0;
+    HAVE_GETTIMEOFDAY=1;
+  HAVE_STRUCT_TIMEVAL=1;
+  HAVE_SYS_TIME_H=1;
+  REPLACE_GETTIMEOFDAY=0;
+  REPLACE_STRUCT_TIMEVAL=0;
+
+{ $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 bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+           int bar (int ip[$ac_kw]) { return ip[0]; }
+
+int
+main ()
+{
+int s[1];
+           int *$ac_kw t = s;
+           t[0] = 0;
+           return foo (t) + bar (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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_time_h='<'sys/time.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5
+$as_echo_n "checking absolute name of <sys/time.h>... " >&6; }
+if ${gl_cv_next_sys_time_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_sys_time_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/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 'sys/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_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_time_h
+           gl_cv_next_sys_time_h='"'$gl_header'"'
+          else
+               gl_cv_next_sys_time_h='<'sys/time.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5
+$as_echo "$gl_cv_next_sys_time_h" >&6; }
+     fi
+     NEXT_SYS_TIME_H=$gl_cv_next_sys_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='<'sys/time.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_time_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive
+
+
+
+
+
+  if test $ac_cv_header_sys_time_h != yes; then
+    HAVE_SYS_TIME_H=0
   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
+
+
+
+
+  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
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV $ac_have_decl
+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
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5
+$as_echo_n "checking for struct timeval... " >&6; }
+if ${gl_cv_sys_struct_timeval+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_SYS_TIME_H
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
+            #if HAVE_WINSOCK2_H
+            # include <winsock2.h>
+            #endif
+
+int
+main ()
+{
+static struct timeval x; x.tv_sec = x.tv_usec;
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_timeval=yes
+else
+  gl_cv_sys_struct_timeval=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_timeval" >&5
+$as_echo "$gl_cv_sys_struct_timeval" >&6; }
+  if test $gl_cv_sys_struct_timeval != yes; then
+    HAVE_STRUCT_TIMEVAL=0
+  else
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5
+$as_echo_n "checking for wide-enough struct timeval.tv_sec member... " >&6; }
+if ${gl_cv_sys_struct_timeval_tv_sec+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_SYS_TIME_H
+               #include <sys/time.h>
+              #endif
+              #include <time.h>
+              #if HAVE_WINSOCK2_H
+              # include <winsock2.h>
+              #endif
+
+int
+main ()
+{
+static struct timeval x;
+              typedef int verify_tv_sec_type[
+                sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1
+              ];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_timeval_tv_sec=yes
+else
+  gl_cv_sys_struct_timeval_tv_sec=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_timeval_tv_sec" >&5
+$as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; }
+    if test $gl_cv_sys_struct_timeval_tv_sec != yes; then
+      REPLACE_STRUCT_TIMEVAL=1
+    fi
+  fi
+
+
+
+
+
+
+
+
+
+  NEED_LOCALTIME_BUFFER=0
+
+
+  GNULIB_CTIME=0;
+  GNULIB_MKTIME=0;
+  GNULIB_LOCALTIME=0;
+  GNULIB_NANOSLEEP=0;
+  GNULIB_STRFTIME=0;
+  GNULIB_STRPTIME=0;
+  GNULIB_TIMEGM=0;
+  GNULIB_TIME_R=0;
+  GNULIB_TIME_RZ=0;
+  GNULIB_TZSET=0;
+    HAVE_DECL_LOCALTIME_R=1;
+  HAVE_NANOSLEEP=1;
+  HAVE_STRPTIME=1;
+  HAVE_TIMEGM=1;
+  HAVE_TZSET=1;
+    HAVE_TIMEZONE_T=0;
+        REPLACE_CTIME=GNULIB_PORTCHECK;
+  REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
+  REPLACE_MKTIME=GNULIB_PORTCHECK;
+  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;
+  REPLACE_STRFTIME=GNULIB_PORTCHECK;
+  REPLACE_TIMEGM=GNULIB_PORTCHECK;
+  REPLACE_TZSET=GNULIB_PORTCHECK;
+
+      : ${GNULIB_GETTIMEOFDAY=0};
+        REPLACE_GMTIME=0;
+  REPLACE_LOCALTIME=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_limits_h='<'limits.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5
+$as_echo_n "checking absolute name of <limits.h>... " >&6; }
+if ${gl_cv_next_limits_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_limits_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.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 'limits.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_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_limits_h
+           gl_cv_next_limits_h='"'$gl_header'"'
+          else
+               gl_cv_next_limits_h='<'limits.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5
+$as_echo "$gl_cv_next_limits_h" >&6; }
+     fi
+     NEXT_LIMITS_H=$gl_cv_next_limits_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='<'limits.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_limits_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5
+$as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; }
+if ${gl_cv_header_limits_width+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+             #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+            #endif
+            #include <limits.h>
+            long long llm = LLONG_MAX;
+            int wb = WORD_BIT;
+            int ullw = ULLONG_WIDTH;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_limits_width=yes
+else
+  gl_cv_header_limits_width=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_limits_width" >&5
+$as_echo "$gl_cv_header_limits_width" >&6; }
+  if test "$gl_cv_header_limits_width" = yes; then
+    LIMITS_H=
+  else
+    LIMITS_H=limits.h
+  fi
+
+   if test -n "$LIMITS_H"; then
+  GL_GENERATE_LIMITS_H_TRUE=
+  GL_GENERATE_LIMITS_H_FALSE='#'
+else
+  GL_GENERATE_LIMITS_H_TRUE='#'
+  GL_GENERATE_LIMITS_H_FALSE=
+fi
+
+
+
+
 
 
 
@@ -14113,36 +17555,40 @@
              if test $ac_cv_header_stdint_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdint_h
+           gl_cv_next_stdint_h='"'$gl_header'"'
           else
                gl_cv_next_stdint_h='<'stdint.h'>'
              fi
@@ -14185,6 +17631,8 @@
 
 
 #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
 #include <stdint.h>
 /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
 #if !(defined WCHAR_MIN && defined WCHAR_MAX)
@@ -14275,6 +17723,15 @@
 intmax_t i = INTMAX_MAX;
 uintmax_t j = UINTMAX_MAX;
 
+/* Check that SIZE_MAX has the correct type, if possible.  */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
+       || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
 #include <limits.h> /* for CHAR_BIT */
 #define TYPE_MINIMUM(t) \
   ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
@@ -14345,7 +17802,12 @@
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
                                                     if test "$cross_compiling" = yes; then :
-                 gl_cv_header_working_stdint_h=yes
+  case "$host_os" in
+                         # Guess yes on native Windows.
+                 mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+                         # In general, assume it works.
+                 *)      gl_cv_header_working_stdint_h="guessing yes" ;;
+               esac
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14353,6 +17815,8 @@
 
 
 #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
 #include <stdint.h>
 
 
@@ -14438,10 +17902,115 @@
 { $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
+
+  HAVE_C99_STDINT_H=0
+  HAVE_SYS_BITYPES_H=0
+  HAVE_SYS_INTTYPES_H=0
+  STDINT_H=stdint.h
+  case "$gl_cv_header_working_stdint_h" in
+    *yes)
+      HAVE_C99_STDINT_H=1
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5
+$as_echo_n "checking whether stdint.h predates C++11... " >&6; }
+if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_stdint_predates_cxx11_h=yes
+         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
+
+
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_predates_cxx11_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_stdint_predates_cxx11_h" >&5
+$as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; }
+
+      if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+
+$as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h
+
+
+$as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h
+
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5
+$as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; }
+if ${gl_cv_header_stdint_width+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_stdint_width=no
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+              /* Work if build is not clean.  */
+              #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+              #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+               #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+              #endif
+              #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
+
+              int iw = UINTMAX_WIDTH;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_width=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5
+$as_echo "$gl_cv_header_stdint_width" >&6; }
+      if test "$gl_cv_header_stdint_width" = yes; then
+        STDINT_H=
+      fi
+      ;;
+    *)
+                  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"
@@ -14454,19 +18023,12 @@
 
 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 $ac_cv_header_sys_inttypes_h = yes; then
+        HAVE_SYS_INTTYPES_H=1
+      fi
+      if test $ac_cv_header_sys_bitypes_h = yes; then
+        HAVE_SYS_BITYPES_H=1
+      fi
 
 
   if test $APPLE_UNIVERSAL_BUILD = 0; then
@@ -14762,12 +18324,29 @@
 
 
 
-          if test $BITSIZEOF_WINT_T -lt 32; then
+          if test $GNULIB_OVERRIDES_WINT_T = 1; then
     BITSIZEOF_WINT_T=32
   fi
 
-    STDINT_H=stdint.h
-  fi
+      ;;
+  esac
+
+
+
+  LIMITS_H='limits.h'
+   if test -n "$LIMITS_H"; then
+  GL_GENERATE_LIMITS_H_TRUE=
+  GL_GENERATE_LIMITS_H_FALSE='#'
+else
+  GL_GENERATE_LIMITS_H_TRUE='#'
+  GL_GENERATE_LIMITS_H_FALSE=
+fi
+
+
+
+
+
+
 
    if test -n "$STDINT_H"; then
   GL_GENERATE_STDINT_H_TRUE=
@@ -14789,7 +18368,9 @@
   HAVE_DECL_IMAXDIV=1;
   HAVE_DECL_STRTOIMAX=1;
   HAVE_DECL_STRTOUMAX=1;
+  HAVE_IMAXDIV_T=1;
   REPLACE_STRTOIMAX=0;
+  REPLACE_STRTOUMAX=0;
   INT32_MAX_LT_INTMAX_MAX=1;
   INT64_MAX_EQ_LONG_MAX='defined _LP64';
   PRI_MACROS_BROKEN=0;
@@ -14823,36 +18404,40 @@
              if test $ac_cv_header_inttypes_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_inttypes_h
+           gl_cv_next_inttypes_h='"'$gl_header'"'
           else
                gl_cv_next_inttypes_h='<'inttypes.h'>'
              fi
@@ -14880,44 +18465,7 @@
 
 
 
-    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
 
 
 
@@ -15190,8 +18738,26 @@
 
       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";;
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanf_works="guessing yes"
+else
+  gl_cv_func_isnanf_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_isnanf_works="guessing yes" ;;
          esac
 
 else
@@ -15475,15 +19041,26 @@
 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
+  case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanl_works="guessing yes"
+else
+  gl_cv_func_isnanl_works="guessing no"
+fi
+rm -f conftest*
+
              ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
          esac
 
 else
@@ -15544,7 +19121,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -15564,41 +19141,35 @@
     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"
-   */
+  /* isnanl should return something even for noncanonical values.  */
   { /* Pseudo-NaN.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 4;
   }
   { /* Pseudo-Infinity.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 8;
   }
   { /* Pseudo-Zero.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 16;
   }
   { /* Unnormalized number.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 32;
   }
   { /* Pseudo-Denormal.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 64;
   }
 #endif
@@ -15650,6 +19221,17 @@
 
 
 
+  if test $ac_cv_header_crtdefs_h = yes; then
+    HAVE_CRTDEFS_H=1
+  else
+    HAVE_CRTDEFS_H=0
+  fi
+
+
+
+
+
+
 
 
 
@@ -15677,6 +19259,8 @@
 
 
 
+
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_wctype_h='<'wctype.h'>'
      else
@@ -15689,36 +19273,40 @@
              if test $ac_cv_header_wctype_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wctype_h
+           gl_cv_next_wctype_h='"'$gl_header'"'
           else
                gl_cv_next_wctype_h='<'wctype.h'>'
              fi
@@ -15751,7 +19339,7 @@
 else
 
           if test "$cross_compiling" = yes; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
                           #if __GNU_LIBRARY__ == 1
@@ -15808,10 +19396,14 @@
   fi
 
 
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
+  if test $GNULIB_OVERRIDES_WINT_T = 1; then
+    REPLACE_ISWCNTRL=1
+  else
+    case "$gl_cv_func_iswcntrl_works" in
+      *yes) REPLACE_ISWCNTRL=0 ;;
+      *)    REPLACE_ISWCNTRL=1 ;;
+    esac
+  fi
 
 
   if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
@@ -15954,58 +19546,88 @@
   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 :
+
+
+
+
+
+
+
+  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.  */
-
-/* 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>
+#include <sys/types.h>
+                int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1];
 
 int
 main ()
 {
-#undef $gl_func
-  (void) $gl_func;
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
+  gl_cv_type_off_t_64=yes
 else
-  eval "$as_gl_Symbol=no"
+  gl_cv_type_off_t_64=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
+{ $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
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5
+$as_echo_n "checking for 64-bit st_size... " >&6; }
+if ${gl_cv_member_st_size_64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+                struct stat buf;
+                int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_member_st_size_64=yes
+else
+  gl_cv_member_st_size_64=no
 fi
-      done
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-
-
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5
+$as_echo "$gl_cv_member_st_size_64" >&6; }
+      if test $gl_cv_member_st_size_64 = no; then
+        WINDOWS_64_BIT_ST_SIZE=1
+      else
+        WINDOWS_64_BIT_ST_SIZE=0
+      fi
+      ;;
+    *)
+                                                      WINDOWS_64_BIT_OFF_T=0
+      WINDOWS_64_BIT_ST_SIZE=0
+      ;;
+  esac
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp() can be used without linking with libm" >&5
@@ -16043,86 +19665,50 @@
 $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 :
+
+  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
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+        save_LIBS="$LIBS"
+        LIBS="$LIBS -lm"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <langinfo.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 ()
 {
-char* cs = nl_langinfo(CODESET); return !cs;
+return ldexp (x, -1) > 0;
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
+  gl_cv_func_ldexp_in_libm=yes
 else
-  am_cv_langinfo_codeset=no
+  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: $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
-
+{ $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" "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
@@ -16162,38 +19748,12 @@
        }
 fi
 
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5
+$as_echo_n "checking for ld... " >&6; }
+elif test "$GCC" = yes; then
   { $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; }
@@ -16201,44 +19761,129 @@
   { $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 :
+if test -n "$LD"; then
+  # Let the user override the test with a path.
+  :
+else
+  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
-        ;;
+
+    acl_cv_path_LD= # Final result of this test
+    ac_prog=ld # Program to search in $PATH
+    if test "$GCC" = yes; then
+      # Check if gcc -print-prog-name=ld gives a path.
+      case $host in
+        *-*-mingw*)
+          # gcc leaves a trailing carriage return which upsets mingw
+          acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+        *)
+          acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+      esac
+      case $acl_output in
+        # Accept absolute paths.
+        [\\/]* | ?:[\\/]*)
+          re_direlt='/[^/][^/]*/\.\./'
+          # Canonicalize the pathname of ld
+          acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+          while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+            acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+          done
+          # Got the pathname. No search in PATH is needed.
+          acl_cv_path_LD="$acl_output"
+          ac_prog=
+          ;;
+        "")
+          # If it fails, then pretend we aren't using GCC.
+          ;;
+        *)
+          # If it is relative, then search for the first ld in PATH.
+          with_gnu_ld=unknown
+          ;;
       esac
     fi
-  done
-  IFS="$acl_save_ifs"
-else
-  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+    if test -n "$ac_prog"; then
+      # Search for $ac_prog in $PATH.
+      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"
+    fi
+    case $host in
+      *-*-aix*)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+                int ok;
+               #else
+                error fail
+               #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # The compiler produces 64-bit code. Add option '-b64' so that the
+           # linker groks 64-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -b64 "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+           esac
+
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        ;;
+      sparc64-*-netbsd*)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __sparcv9 || defined __arch64__
+                int ok;
+               #else
+                error fail
+               #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  # The compiler produces 32-bit code. Add option '-m elf32_sparc'
+           # so that the linker groks 32-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -m elf32_sparc "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+           esac
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        ;;
+    esac
+
 fi
 
-LD="$acl_cv_path_LD"
+  LD="$acl_cv_path_LD"
+fi
 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; }
+  as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 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 :
@@ -16295,66 +19940,450 @@
 
 
 
-  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 "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5
+$as_echo_n "checking 32-bit host C ABI... " >&6; }
+if ${gl_cv_host_cpu_c_abi_32bit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$gl_cv_host_cpu_c_abi"; then
+       case "$gl_cv_host_cpu_c_abi" in
+         i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+           gl_cv_host_cpu_c_abi_32bit=yes ;;
+         x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+           gl_cv_host_cpu_c_abi_32bit=no ;;
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown ;;
+       esac
+     else
+       case "$host_cpu" in
+
+         # CPUs that only support a 32-bit ABI.
+         arc \
+         | bfin \
+         | cris* \
+         | csky \
+         | epiphany \
+         | ft32 \
+         | h8300 \
+         | m68k \
+         | microblaze | microblazeel \
+         | nds32 | nds32le | nds32be \
+         | nios2 | nios2eb | nios2el \
+         | or1k* \
+         | or32 \
+         | sh | sh1234 | sh1234elb \
+         | tic6x \
+         | xtensa* )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         # CPUs that only support a 64-bit ABI.
+         alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+         | mmix )
+           gl_cv_host_cpu_c_abi_32bit=no
+           ;;
+
+         i[34567]86 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         x86_64 )
+           # On x86_64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+           # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+           #   with native Windows (mingw, MSVC).
+           # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if (defined __x86_64__ || defined __amd64__ \
+                       || defined _M_X64 || defined _M_AMD64) \
+                      && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         arm* | aarch64 )
+           # Assume arm with EABI.
+           # On arm64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+           # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+           # On hppa, the C compiler may be generating 32-bit code or 64-bit
+           # code. In the latter case, it defines _LP64 and __LP64__.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __LP64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         ia64* )
+           # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+           # 32-bit code. In the latter case, it defines _ILP32.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=yes
+else
+  gl_cv_host_cpu_c_abi_32bit=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         mips* )
+           # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+           # at 32.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         powerpc* )
+           # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+           # No need to distinguish them here; the caller may distinguish
+           # them based on the OS.
+           # On powerpc64 systems, the C compiler may still be generating
+           # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+           # be generating 64-bit code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         rs6000 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         riscv32 | riscv64 )
+           # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+           # Size of 'long' and 'void *':
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         s390* )
+           # On s390x, the C compiler may be generating 64-bit (= s390x) code
+           # or 31-bit (= s390) code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __s390x__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         sparc | sparc64 )
+           # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+           # C compiler still generates 32-bit code.
+           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __sparcv9 || defined __arch64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi_32bit=no
+else
+  gl_cv_host_cpu_c_abi_32bit=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+           ;;
+
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown
+           ;;
+       esac
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5
+$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; }
+
+  HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5
+$as_echo_n "checking for ELF binary format... " >&6; }
+if ${gl_cv_elf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-#ifdef _LP64
-sixtyfour bits
-#endif
+#ifdef __ELF__
+        Extensible Linking Format
+        #endif
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
-  gl_cv_solaris_64bit=yes
+  $EGREP "Extensible Linking Format" >/dev/null 2>&1; then :
+  gl_cv_elf=yes
 else
-  gl_cv_solaris_64bit=no
+  gl_cv_elf=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"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5
+$as_echo "$gl_cv_elf" >&6; }
+  if test $gl_cv_elf; then
+    # Extract the ELF class of a file (5th byte) in decimal.
+    # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+    if od -A x < /dev/null >/dev/null 2>/dev/null; then
+      # Use POSIX od.
+      func_elfclass ()
+      {
+        od -A n -t d1 -j 4 -N 1
+      }
+    else
+      # Use BSD hexdump.
+      func_elfclass ()
+      {
+        dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+        echo
+      }
+    fi
+    case $HOST_CPU_C_ABI_32BIT in
+      yes)
+        # 32-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[ 	]//g'`" = 1
+        }
+        ;;
+      no)
+        # 64-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[ 	]//g'`" = 2
+        }
+        ;;
+      *)
+        # Unknown.
+        acl_is_expected_elfclass ()
+        {
+          :
+        }
+        ;;
+    esac
+  else
+    acl_is_expected_elfclass ()
+    {
+      :
+    }
+  fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5
+$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; }
+if ${acl_cv_libdirstems+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            acl_libdirstem=lib
+     acl_libdirstem2=
+     acl_libdirstem3=
+     case "$host_os" in
+       solaris*)
+                                                      if test $HOST_CPU_C_ABI_32BIT = no; then
+           acl_libdirstem2=lib/64
+           case "$host_cpu" in
+             sparc*)        acl_libdirstem3=lib/sparcv9 ;;
+             i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+           esac
+         fi
+         ;;
+       *)
+                                                                                 searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+                     | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+         if test $HOST_CPU_C_ABI_32BIT != no; then
+           # 32-bit or unknown ABI.
+           if test -d /usr/lib32; then
+             acl_libdirstem2=lib32
+           fi
+         fi
+         if test $HOST_CPU_C_ABI_32BIT != yes; then
+           # 64-bit or unknown ABI.
+           if test -d /usr/lib64; then
+             acl_libdirstem3=lib64
+           fi
+         fi
+         if test -n "$searchpath"; then
+           acl_save_IFS="${IFS= 	}"; IFS=":"
+           for searchdir in $searchpath; do
+             if test -d "$searchdir"; then
+               case "$searchdir" in
+                 */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+                 */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+                 */../ | */.. )
+                   # Better ignore directories of this form. They are misleading.
+                   ;;
+                 *) searchdir=`cd "$searchdir" && pwd`
+                    case "$searchdir" in
+                      */lib32 ) acl_libdirstem2=lib32 ;;
+                      */lib64 ) acl_libdirstem3=lib64 ;;
+                    esac ;;
+               esac
+             fi
+           done
+           IFS="$acl_save_IFS"
+           if test $HOST_CPU_C_ABI_32BIT = yes; then
+             # 32-bit ABI.
+             acl_libdirstem3=
+           fi
+           if test $HOST_CPU_C_ABI_32BIT = no; then
+             # 64-bit ABI.
+             acl_libdirstem2=
+           fi
+         fi
+         ;;
+     esac
+     test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+     test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+     acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5
+$as_echo "$acl_cv_libdirstems" >&6; }
+      acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+  acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+  acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
+
+
+
+
+  { $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
+
+
 
 
 
@@ -16426,14 +20455,57 @@
 fi
 
        fi
+              case " $LDFLAGS " in
+         *" -static "*) gl_cv_have_weak=no ;;
+       esac
 
 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 case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+      :
+    fi
+    if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then
+
+      if test $ac_cv_header_threads_h = yes; then
+        gl_have_isoc_threads=
+        # Test whether both mtx_lock and cnd_timedwait exist in libc.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <threads.h>
+               #include <stddef.h>
+               mtx_t m;
+               cnd_t c;
+
+int
+main ()
+{
+mtx_lock (&m);
+               cnd_timedwait (&c, &m, NULL);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_have_isoc_threads=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      fi
+    fi
+    if test "$gl_use_threads" = yes \
+       || test "$gl_use_threads" = posix \
+       || test "$gl_use_threads" = isoc+posix; then
+
+
+  if test -z "$gl_threadlib_body_done"; then
+    gl_pthread_api=no
+    LIBPTHREAD=
+    LIBPMULTITHREAD=
+    # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+    # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+    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
@@ -16441,37 +20513,52 @@
 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.
+    if test "$gl_have_pthread_h" = yes; then
+      # Other possible tests:
+      #   -lpthreads (FSU threads, PCthreads)
+      #   -lgthreads
+      # 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.
+      #
+      # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+      # needs -pthread for some reason.  See:
+      # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+      save_LIBS=$LIBS
+      for gl_pthread in '' '-pthread'; do
+        LIBS="$LIBS $gl_pthread"
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
+               pthread_mutex_t m;
+               pthread_mutexattr_t ma;
+
 int
 main ()
 {
-pthread_mutex_lock((pthread_mutex_t*)0);
-               pthread_mutexattr_init((pthread_mutexattr_t*)0);
+pthread_mutex_lock (&m);
+               pthread_mutexattr_init (&ma);
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  gl_have_pthread=yes
+  gl_pthread_api=yes
+           LIBPTHREAD=$gl_pthread
+           LIBPMULTITHREAD=$gl_pthread
 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
+        LIBS=$save_LIBS
+        test $gl_pthread_api = yes && break
+      done
+
+      # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+      # since it is defined as a macro on OSF/1.)
+      if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; 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
@@ -16508,23 +20595,25 @@
 { $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*)
+  LIBPMULTITHREAD=-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.
+           # On Solaris 10 or newer, this test is no longer needed, because
+           # libc contains the fully functional pthread functions.
+           case "$host_os" in
+             solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
 
 $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
 
-             esac
+           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
+      elif test $gl_pthread_api != yes; then
+        # 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
@@ -16561,14 +20650,14 @@
 { $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
+  gl_pthread_api=yes
+           LIBPTHREAD=-lpthread
+           LIBPMULTITHREAD=-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
+        if test $gl_pthread_api != yes; 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
@@ -16605,14 +20694,33 @@
 { $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
+  gl_pthread_api=yes
+             LIBPTHREAD=-lc_r
+             LIBPMULTITHREAD=-lc_r
 fi
 
-          fi
         fi
-        if test -n "$gl_have_pthread"; then
+      fi
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
+$as_echo_n "checking whether POSIX threads API is available... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5
+$as_echo "$gl_pthread_api" >&6; }
+
+
+    gl_threadlib_body_done=done
+  fi
+
+      LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD
+      LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD
+      if test $gl_pthread_api = yes; then
+        if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then
+          gl_threads_api='isoc+posix'
+
+$as_echo "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h
+
+          LIBTHREAD= LTLIBTHREAD=
+        else
           gl_threads_api=posix
 
 $as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h
@@ -16622,616 +20730,21 @@
 
 $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
 
-              LIBTHREAD=
-              LTLIBTHREAD=
+              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.  */
+    if test $gl_threads_api = none; then
+      if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then
+        gl_threads_api=isoc
 
-#include <thread.h>
-#include <synch.h>
+$as_echo "#define USE_ISOC_THREADS 1" >>confdefs.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
+    if test $gl_threads_api = none; then
       case "$gl_use_threads" in
         yes | windows | win32) # The 'win32' is for backward compatibility.
           if { case "$host_os" in
@@ -17261,101 +20774,77 @@
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_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 sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_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 '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_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_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
 
 
 
-  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
@@ -17402,6 +20891,103 @@
    fi
 
 
+  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;
+  GNULIB_WCSFTIME=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_WCSFTIME=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;
+  REPLACE_WCSFTIME=0;
+  REPLACE_WCSTOK=0;
+
+
 
 
 
@@ -17428,9 +21014,14 @@
 char buf[16];
 int main ()
 {
-  const char *p;
+  /* 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__
+  return 1;
+#else
   /* Check whether the given locale name is recognized by the system.  */
-#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+# if 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
@@ -17438,9 +21029,9 @@
   if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
       || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
     return 1;
-#else
+# else
   if (setlocale (LC_ALL, "") == NULL) return 1;
-#endif
+# 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.
@@ -17449,32 +21040,36 @@
      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
+# 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__
+# 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
+# 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;
+  {
+    const char *p;
+    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;
+#endif
 }
 
 _ACEOF
@@ -17546,139 +21141,6 @@
 
 
 
-
-  { $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 :
@@ -17703,7 +21165,7 @@
      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__
+# if 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
@@ -17806,6 +21268,155 @@
 
 
 
+
+
+  { $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 ()
+{
+  /* 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__
+  return 1;
+#else
+  /* Check whether the given locale name is recognized by the system.  */
+# if 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).  */
+  {
+    const char *p;
+    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;
+#endif
+}
+
+_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
+
+
+
+
+
+
+
+
+
+  GNULIB_EXPLICIT_BZERO=0;
   GNULIB_FFSL=0;
   GNULIB_FFSLL=0;
   GNULIB_MEMCHR=0;
@@ -17844,7 +21455,8 @@
   GNULIB_STRSIGNAL=0;
   GNULIB_STRVERSCMP=0;
   HAVE_MBSLEN=0;
-    HAVE_FFSL=1;
+    HAVE_EXPLICIT_BZERO=1;
+  HAVE_FFSL=1;
   HAVE_FFSLL=1;
   HAVE_MEMCHR=1;
   HAVE_DECL_MEMMEM=1;
@@ -17867,17 +21479,17 @@
   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_STRDUP=0;
   REPLACE_STRNCAT=0;
   REPLACE_STRNDUP=0;
   REPLACE_STRNLEN=0;
-  REPLACE_STRSIGNAL=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
   REPLACE_STRTOK_R=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRERROR_R=0;
+  REPLACE_STRSIGNAL=0;
   UNDEFINE_STRTOK_R=0;
 
 
@@ -17885,11 +21497,6 @@
 
 
 
-
-
-
-
-
   # 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.
@@ -17958,10 +21565,12 @@
   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
+    #   https://bugzilla.redhat.com/show_bug.cgi?id=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
+    #   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # memchr should cast the second argument to 'unsigned char'.
+    #   This bug exists in Android 4.3.
     # 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; }
@@ -17969,7 +21578,15 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-         gl_cv_func_memchr_works="guessing no"
+  case "$host_os" in
+                             # Guess no on Android.
+            linux*-android*) gl_cv_func_memchr_works="guessing no" ;;
+                             # Guess yes on native Windows.
+            mingw*)          gl_cv_func_memchr_works="guessing yes" ;;
+                             # If we don't know, obey --enable-cross-guesses.
+            *)               gl_cv_func_memchr_works="$gl_cross_guess_normal" ;;
+          esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -18020,6 +21637,15 @@
       if (memchr (fence - 1, 0, 3) != fence - 1)
         result |= 4;
     }
+  /* Test against bug on Android 4.3.  */
+  {
+    char input[3];
+    input[0] = 'a';
+    input[1] = 'b';
+    input[2] = 'c';
+    if (memchr (input, 0x789abc00 | 'b', 3) != input + 1)
+      result |= 8;
+  }
   return result;
 
   ;
@@ -18035,16 +21661,97 @@
   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
+    case "$gl_cv_func_memchr_works" in
+      *yes) ;;
+      *) REPLACE_MEMCHR=1 ;;
+    esac
   fi
 
 
 
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5
+$as_echo_n "checking whether <limits.h> defines MIN and MAX... " >&6; }
+if ${gl_cv_minmax_in_limits_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+            int x = MIN (42, 17);
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_minmax_in_limits_h=yes
+else
+  gl_cv_minmax_in_limits_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_minmax_in_limits_h" >&5
+$as_echo "$gl_cv_minmax_in_limits_h" >&6; }
+  if test $gl_cv_minmax_in_limits_h = yes; then
+
+$as_echo "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5
+$as_echo_n "checking whether <sys/param.h> defines MIN and MAX... " >&6; }
+if ${gl_cv_minmax_in_sys_param_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/param.h>
+            int x = MIN (42, 17);
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_minmax_in_sys_param_h=yes
+else
+  gl_cv_minmax_in_sys_param_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_minmax_in_sys_param_h" >&5
+$as_echo "$gl_cv_minmax_in_sys_param_h" >&6; }
+  if test $gl_cv_minmax_in_sys_param_h = yes; then
+
+$as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h
+
+  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
@@ -18057,6 +21764,37 @@
 _ACEOF
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5
+$as_echo_n "checking for O_CLOEXEC... " >&6; }
+if ${gl_cv_macro_O_CLOEXEC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <fcntl.h>
+                          #ifndef O_CLOEXEC
+                            choke me;
+                          #endif
+
+int
+main ()
+{
+return O_CLOEXEC;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_macro_O_CLOEXEC=yes
+else
+  gl_cv_macro_O_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_macro_O_CLOEXEC" >&5
+$as_echo "$gl_cv_macro_O_CLOEXEC" >&6; }
+
+
 
 
 
@@ -18094,8 +21832,6 @@
 
 
 
-
-
      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; }
@@ -18104,10 +21840,14 @@
 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" ;;
+                        # Guess yes on glibc systems.
+         *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # Guess yes on musl systems.
+         *-musl*)       gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # Guess yes on native Windows.
+         mingw*)        gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # If we don't know, obey --enable-cross-guesses.
+         *)             gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;;
        esac
 
 else
@@ -18272,7 +22012,7 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-                                  gl_cv_func_strerror_r_works="guessing no"
+                                  gl_cv_func_strerror_r_works="$gl_cross_guess_normal"
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -18366,8 +22106,10 @@
   GNULIB_POSIX_SPAWN=0;
   GNULIB_POSIX_SPAWNP=0;
   GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0;
   GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0;
   GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;
+  GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0;
   GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;
   GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0;
   GNULIB_POSIX_SPAWNATTR_INIT=0;
@@ -18388,19 +22130,97 @@
   HAVE_POSIX_SPAWNATTR_T=1;
   HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1;
 
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1;
+
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1;
+
   REPLACE_POSIX_SPAWN=0;
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0;
+
   REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0;
 
   REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0;
 
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0;
+
   REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0;
 
 
 
 
 
+  LIB_POSIX_SPAWN=
 
+  gl_saved_libs=$LIBS
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing posix_spawn" >&5
+$as_echo_n "checking for library containing posix_spawn... " >&6; }
+if ${ac_cv_search_posix_spawn+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$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 posix_spawn ();
+int
+main ()
+{
+return posix_spawn ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_posix_spawn=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_posix_spawn+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_posix_spawn+:} false; then :
+
+else
+  ac_cv_search_posix_spawn=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_posix_spawn" >&5
+$as_echo "$ac_cv_search_posix_spawn" >&6; }
+ac_res=$ac_cv_search_posix_spawn
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  test "$ac_cv_search_posix_spawn" = "none required" ||
+                    LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn
+fi
+
+    for ac_func in posix_spawn
+do :
+  ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn"
+if test "x$ac_cv_func_posix_spawn" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_POSIX_SPAWN 1
+_ACEOF
+
+fi
+done
+
+  LIBS=$gl_saved_libs
 
   if test $ac_cv_func_posix_spawn != yes; then
     HAVE_POSIX_SPAWN=0
@@ -18412,6 +22232,9 @@
                                       if test $ac_cv_func_posix_spawn = yes; then
 
 
+    if test $REPLACE_POSIX_SPAWN = 0; 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 :
@@ -18556,7 +22379,7 @@
   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
+             && cmp conftest.out conftest.ok >/dev/null 2>&1; then
             gl_cv_func_posix_spawn_works=yes
           else
             gl_cv_func_posix_spawn_works=no
@@ -18748,12 +22571,9 @@
 { $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
+      case "$gl_cv_func_posix_spawn_works" in
+        *yes)
+                                                  { $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
@@ -18779,7 +22599,7 @@
 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 "$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
@@ -18805,9 +22625,15 @@
 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
+          ;;
+        *) REPLACE_POSIX_SPAWN=1 ;;
+      esac
+    fi
+  fi
+  if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then
+
+$as_echo "#define REPLACE_POSIX_SPAWN 1" >>confdefs.h
+
   fi
 
 
@@ -19153,6 +22979,7 @@
 
 
 
+
   { $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 :
@@ -19171,7 +22998,7 @@
   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
+     if LC_ALL=C $EGREP '(^|[^a-zA-Z0-9_])_foo([^a-zA-Z0-9_]|$)' conftest.$gl_asmext >/dev/null; then
        gl_cv_prog_as_underscore=yes
      else
        gl_cv_prog_as_underscore=no
@@ -19237,54 +23064,298 @@
   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 "$as_me:${as_lineno-$LINENO}: checking for shared library path variable" >&5
+$as_echo_n "checking for shared library path variable... " >&6; }
+if ${acl_cv_libpath+:} 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
+
+    LD="$LD" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.libpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_libpath=${acl_cv_shlibpath_var:-none}
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libpath" >&5
+$as_echo "$acl_cv_libpath" >&6; }
+  shlibpath_var="$acl_cv_shlibpath_var"
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to activate relocatable installation" >&5
+$as_echo_n "checking whether to activate relocatable installation... " >&6; }
+  # Check whether --enable-relocatable was given.
+if test "${enable_relocatable+set}" = set; then :
+  enableval=$enable_relocatable; if test "$enableval" != no; then
+       RELOCATABLE=yes
+     else
+       RELOCATABLE=no
+     fi
+
+else
+  RELOCATABLE=no
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RELOCATABLE" >&5
+$as_echo "$RELOCATABLE" >&6; }
+
+
+
+    if test "X$prefix" = "XNONE"; then
+    reloc_final_prefix="$ac_default_prefix"
+  else
+    reloc_final_prefix="$prefix"
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define INSTALLPREFIX "${reloc_final_prefix}"
+_ACEOF
+
+  if test $RELOCATABLE = yes; then
+
+$as_echo "#define ENABLE_RELOCATABLE 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+  is_noop=no
+  use_elf_origin_trick=no
+  use_macos_tools=no
+  use_wrapper=no
+  if test $RELOCATABLE = yes; then
+    # --enable-relocatable implies --disable-rpath
+    enable_rpath=no
+    for ac_header in mach-o/dyld.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "mach-o/dyld.h" "ac_cv_header_mach_o_dyld_h" "$ac_includes_default"
+if test "x$ac_cv_header_mach_o_dyld_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MACH_O_DYLD_H 1
+_ACEOF
+
+fi
+
+done
+
+    for ac_func in _NSGetExecutablePath
+do :
+  ac_fn_c_check_func "$LINENO" "_NSGetExecutablePath" "ac_cv_func__NSGetExecutablePath"
+if test "x$ac_cv_func__NSGetExecutablePath" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE__NSGETEXECUTABLEPATH 1
+_ACEOF
+
+fi
+done
+
+    case "$host_os" in
+      mingw*) is_noop=yes ;;
+      # For the platforms that support $ORIGIN, see
+      # <https://lekensteyn.nl/rpath.html>.
+      # glibc systems, Linux with musl libc: yes. Android: no.
+      linux*-android*) ;;
+      linux* | kfreebsd*) use_elf_origin_trick=yes ;;
+      # Hurd: <https://lists.gnu.org/r/bug-hurd/2019-02/msg00049.html>
+      # only after the glibc commit from 2018-01-08
+      # <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=311ba8dc4416467947eff2ab327854f124226309>
+      gnu*)
+        # Test for a glibc version >= 2.27.
+        for ac_func in copy_file_range
+do :
+  ac_fn_c_check_func "$LINENO" "copy_file_range" "ac_cv_func_copy_file_range"
+if test "x$ac_cv_func_copy_file_range" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_COPY_FILE_RANGE 1
+_ACEOF
+
+fi
+done
+
+        if test $ac_cv_func_copy_file_range = yes; then
+          use_elf_origin_trick=yes
+        fi
+        ;;
+      # FreeBSD >= 7.3, DragonFly >= 3.0: yes.
+      freebsd | freebsd[1-7] | freebsd[1-6].* | freebsd7.[0-2]) ;;
+      dragonfly | dragonfly[1-2] | dragonfly[1-2].*) ;;
+      freebsd* | dragonfly*) use_elf_origin_trick=yes ;;
+      # NetBSD >= 8.0: yes.
+      netbsd | netbsd[1-7] | netbsd[1-7].*) ;;
+      netbsdelf | netbsdelf[1-7] | netbsdelf[1-7].*) ;;
+      netbsd*) use_elf_origin_trick=yes ;;
+      # OpenBSD >= 5.4: yes.
+      openbsd | openbsd[1-5] | openbsd[1-4].* | openbsd5.[0-3]) ;;
+      openbsd*) use_elf_origin_trick=yes ;;
+      # Solaris >= 10: yes.
+      solaris | solaris2.[1-9] | solaris2.[1-9].*) ;;
+      solaris*) use_elf_origin_trick=yes ;;
+      # Haiku: yes.
+      haiku*) use_elf_origin_trick=yes ;;
+      # On Mac OS X 10.4 or newer, use Mac OS X tools. See
+      # <https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath>.
+      darwin | darwin[1-7].*) ;;
+      darwin*) use_macos_tools=yes ;;
+    esac
+    if test $is_noop = yes; then
+      RELOCATABLE_LDFLAGS=:
+
+    else
+      if test $use_elf_origin_trick = yes || test $use_macos_tools = yes; then
+                case "$ac_aux_dir" in
+          /*) reloc_ldflags="$ac_aux_dir/reloc-ldflags" ;;
+          *) reloc_ldflags="\$(top_builddir)/$ac_aux_dir/reloc-ldflags" ;;
+        esac
+        RELOCATABLE_LDFLAGS="\"$reloc_ldflags\" \"\$(host)\" \"\$(RELOCATABLE_LIBRARY_PATH)\""
+
+        if test $use_macos_tools = yes; then
+                    case "$ac_aux_dir" in
+            /*) LIBTOOL="${CONFIG_SHELL-$SHELL} $ac_aux_dir/libtool-reloc $LIBTOOL" ;;
+            *) LIBTOOL="${CONFIG_SHELL-$SHELL} \$(top_builddir)/$ac_aux_dir/libtool-reloc $LIBTOOL" ;;
+          esac
+        fi
+      else
+        use_wrapper=yes
+                                        INSTALL_PROGRAM_ENV="RELOC_LIBRARY_PATH_VAR=\"$shlibpath_var\" RELOC_LIBRARY_PATH_VALUE=\"\$(RELOCATABLE_LIBRARY_PATH)\" RELOC_PREFIX=\"\$(prefix)\" RELOC_DESTDIR=\"\$(DESTDIR)\" RELOC_COMPILE_COMMAND=\"\$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(LDFLAGS)\" RELOC_SRCDIR=\"\$(RELOCATABLE_SRC_DIR)\" RELOC_BUILDDIR=\"\$(RELOCATABLE_BUILD_DIR)\" RELOC_CONFIG_H_DIR=\"\$(RELOCATABLE_CONFIG_H_DIR)\" RELOC_EXEEXT=\"\$(EXEEXT)\" RELOC_STRIP_PROG=\"\$(RELOCATABLE_STRIP)\" RELOC_INSTALL_PROG=\"$INSTALL_PROGRAM\""
+
+        case "$ac_aux_dir" in
+          /*) INSTALL_PROGRAM="$ac_aux_dir/install-reloc" ;;
+          *) INSTALL_PROGRAM="\$(top_builddir)/$ac_aux_dir/install-reloc" ;;
+        esac
+      fi
+    fi
+  fi
+   if test $is_noop = yes || test $use_elf_origin_trick = yes || test $use_macos_tools = yes; then
+  RELOCATABLE_VIA_LD_TRUE=
+  RELOCATABLE_VIA_LD_FALSE='#'
+else
+  RELOCATABLE_VIA_LD_TRUE='#'
+  RELOCATABLE_VIA_LD_FALSE=
+fi
+
+   if test $use_wrapper = yes; then
+  RELOCATABLE_VIA_WRAPPER_TRUE=
+  RELOCATABLE_VIA_WRAPPER_FALSE='#'
+else
+  RELOCATABLE_VIA_WRAPPER_TRUE='#'
+  RELOCATABLE_VIA_WRAPPER_FALSE=
+fi
+
+
+
+
+
+
+
+
+      RELOCATABLE_STRIP=':'
+
+
+
+
+      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* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
+          | hpux* | solaris* | cygwin* | mingw*)
+            ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+          # If we don't know, obey --enable-cross-guesses.
+          *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
+        esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-typedef int * int_ptr;
-	int foo (int_ptr $ac_kw ip) {
-	return ip[0];
-       }
+#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+            # include <stdlib.h>
+            #else
+            char *malloc ();
+            #endif
+
 int
 main ()
 {
-int s[1];
-	int * $ac_kw t = s;
-	t[0] = 0;
-	return foo(t)
+char *p = malloc (0);
+            int result = !p;
+            free (p);
+            return result;
   ;
   return 0;
 }
+
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_restrict=$ac_kw
+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 conftest.err conftest.$ac_objext conftest.$ac_ext
-     test "$ac_cv_c_restrict" != no && break
-   done
+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_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
+  case "$ac_cv_func_malloc_0_nonnull" in
+    *yes)
+      gl_cv_func_malloc_0_nonnull=1
+      ;;
+    *)
+      gl_cv_func_malloc_0_nonnull=0
+      ;;
+  esac
 
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) $as_echo "#define restrict /**/" >>confdefs.h
- ;;
-   *)  cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
+
+cat >>confdefs.h <<_ACEOF
+#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull
 _ACEOF
- ;;
- esac
+
+
+ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default"
+if test "x$ac_cv_have_decl_setenv" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SETENV $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+  GNULIB_SCHED_YIELD=0;
+    HAVE_SCHED_YIELD=1;
+  REPLACE_SCHED_YIELD=0;
+
+
 
 { $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; }
@@ -19342,59 +23413,67 @@
 /* end confdefs.h.  */
 
              #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
+
+             #ifdef __cplusplus
+              typedef bool Bool;
+             #else
+              typedef _Bool Bool;
+              #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
              #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; bool u: 1; bool v; } 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 f[(Bool) 0.0 == false ? 1 : -1];
              char g[true];
-             char h[sizeof (_Bool)];
+             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];
+             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];
+             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
+                https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html
               */
-             _Bool q = true;
-             _Bool *pq = &q;
+             Bool q = true;
+             Bool *pq = &q;
+             bool *qq = &q;
 
 int
 main ()
 {
 
              bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
+             *pq |= q; *pq |= ! q;
+             *qq |= q; *qq |= ! 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);
+                     + !m + !n + !o + !p + !q + !pq + !qq);
 
   ;
   return 0;
@@ -19422,6 +23501,7 @@
 
 
     REPLACE_NULL=0;
+  HAVE_MAX_ALIGN_T=1;
   HAVE_WCHAR_T=1;
 
 
@@ -19448,8 +23528,6 @@
 
 
 
-
-
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_string_h='<'string.h'>'
      else
@@ -19459,36 +23537,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_string_h
+           gl_cv_next_string_h='"'$gl_header'"'
 
 
 fi
@@ -19511,44 +23593,7 @@
 
 
 
-    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"
@@ -19564,16 +23609,96 @@
 
 
 
-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
+
+
+
+  GNULIB_TIMES=0;
+  HAVE_STRUCT_TMS=1;
+  HAVE_TIMES=1;
+
+
+
+
+
+
+
+
+
+
+
+
+
+$as_echo "#define _USE_STD_STAT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+     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
-  ac_have_decl=0
-fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNLEN $ac_have_decl
+
+
+  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_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_types_h
+           gl_cv_next_sys_types_h='"'$gl_header'"'
+
+
+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
 
 
 
@@ -19584,28 +23709,18 @@
 
 
 
+
+
+    WINDOWS_STAT_INODES=0
+
+
+
+
   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; }
@@ -19637,6 +23752,7 @@
   TIME_H_DEFINES_STRUCT_TIMESPEC=0
   SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
   PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+  UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
   if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
     TIME_H_DEFINES_STRUCT_TIMESPEC=1
   else
@@ -19697,6 +23813,36 @@
 $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
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5
+$as_echo_n "checking for struct timespec in <unistd.h>... " >&6; }
+if ${gl_cv_sys_struct_timespec_in_unistd_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.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_unistd_h=yes
+else
+  gl_cv_sys_struct_timespec_in_unistd_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_unistd_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; }
+        if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
+          UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
+        fi
       fi
     fi
   fi
@@ -19715,6 +23861,7 @@
 
 
 
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_time_h='<'time.h'>'
      else
@@ -19724,36 +23871,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_time_h
+           gl_cv_next_time_h='"'$gl_header'"'
 
 
 fi
@@ -19906,6 +24057,17 @@
 #define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl
 _ACEOF
 
+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
+
 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
@@ -19984,12 +24146,14 @@
 int main () { return zero(); }
 
 _ACEOF
-     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+                              save_ac_compile="$ac_compile"
+     ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+     if echo '#include "conftest.c"' >conftest1.c &&
+        { { 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.  */
 
@@ -20005,12 +24169,13 @@
 int zero (void) { return 0; }
 
 _ACEOF
-       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+              ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+       if echo '#include "conftest.c"' >conftest2.c &&
+          { { 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
@@ -20018,7 +24183,8 @@
          fi
        fi
      fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+     ac_compile="$save_ac_compile"
+     rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
@@ -20029,7 +24195,7 @@
 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
+    <https://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
@@ -20037,6 +24203,354 @@
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking POSIX termios" >&5
+$as_echo_n "checking POSIX termios... " >&6; }
+if ${ac_cv_sys_posix_termios+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+
+int
+main ()
+{
+/* SunOS 4.0.3 has termios.h but not the library calls.  */
+   tcgetattr(0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_sys_posix_termios=yes
+else
+  ac_cv_sys_posix_termios=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_sys_posix_termios" >&5
+$as_echo "$ac_cv_sys_posix_termios" >&6; }
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of TIOCGWINSZ requires termios.h" >&5
+$as_echo_n "checking whether use of TIOCGWINSZ requires termios.h... " >&6; }
+if ${gl_cv_sys_tiocgwinsz_needs_termios_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_sys_tiocgwinsz_needs_termios_h=no
+
+   if test $ac_cv_sys_posix_termios = yes; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#      include <termios.h>
+#      ifdef TIOCGWINSZ
+         yes
+#      endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_sys_tiocgwinsz_needs_termios_h=yes
+fi
+rm -f conftest*
+
+   fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_tiocgwinsz_needs_termios_h" >&5
+$as_echo "$gl_cv_sys_tiocgwinsz_needs_termios_h" >&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;
+  GNULIB_OVERRIDES_STRUCT_STAT=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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     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_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_stat_h
+           gl_cv_next_sys_stat_h='"'$gl_header'"'
+          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
+
+
+
+
+
+
+
+
+    WINDOWS_STAT_TIMESPEC=0
+
+
+
+
+
+
+
+
+      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
+
+
+
+
+
+
+
+
+ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getdtablesize" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETDTABLESIZE $ac_have_decl
+_ACEOF
+
+
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
+if ${gl_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f conftest.sym conftest.file
+     echo >conftest.file
+     if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+          linux-* | linux)
+            # Guess yes on Linux systems.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+          *-gnu* | gnu*)
+            # Guess yes on glibc systems.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+          mingw*)
+            # Guess no on native Windows.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
+          *)
+            # If we don't know, obey --enable-cross-guesses.
+            gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;;
+        esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+            if (symlink ("conftest.file", "conftest.sym") != 0)
+              return 1;
+            /* Linux will dereference the symlink and fail, as required by
+               POSIX.  That is better in the sense that it means we will not
+               have to compile and use the lstat wrapper.  */
+            return lstat ("conftest.sym/", &sbuf) == 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  gl_cv_func_lstat_dereferences_slashed_symlink=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.sym conftest.file
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5
+$as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+  case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
+    *yes)
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+      ;;
+  esac
+
+
+
+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
+
 
    if false; then
   GL_COND_LIBTOOL_TRUE=
@@ -20115,6 +24629,13 @@
 fi
 
 
+  if test $ac_cv_working_alloca_h = yes; then
+    HAVE_ALLOCA_H=1
+  else
+    HAVE_ALLOCA_H=0
+  fi
+
+
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5
 $as_echo_n "checking whether to enable assertions... " >&6; }
@@ -20176,15 +24697,174 @@
 
 
 
+
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+    if test $ac_cv_func_realpath = no; then
+      HAVE_REALPATH=0
+    else
+      case "$gl_cv_func_realpath_works" in
+        *yes) ;;
+        *)    REPLACE_REALPATH=1 ;;
+      esac
+    fi
+  else
+    case "$gl_cv_func_realpath_works" in
+      *yes)
+        ;;
+      *)
+        REPLACE_CANONICALIZE_FILE_NAME=1
+        REPLACE_REALPATH=1
+        ;;
+    esac
+  fi
+
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext"
+
+  fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_CANONICALIZE_LGPL 1
+_ACEOF
+
+
+
+
+
+
+
+          GNULIB_CANONICALIZE_FILE_NAME=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h
+
+
+
+
+
+
+
+
+          GNULIB_REALPATH=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_REALPATH 1" >>confdefs.h
+
+
+
+
+
+
+
+  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+
+  # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
+  # programs in the package would end up linked with that potentially-shared
+  # library, inducing unnecessary run-time overhead.
+  LIB_CLOCK_GETTIME=
+
+  gl_saved_libs=$LIBS
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$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 clock_gettime ();
+int
+main ()
+{
+return clock_gettime ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt posix4; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_clock_gettime+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
+else
+  ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  test "$ac_cv_search_clock_gettime" = "none required" ||
+                    LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime
+fi
+
+    for ac_func in clock_gettime clock_settime
+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
+
+  LIBS=$gl_saved_libs
+
+
+
 $as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h
 
 
 
 
 
-  if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
-    REPLACE_CLOSE=1
-  fi
+
+    if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+      REPLACE_CLOSE=1
+    fi
+
 
 
 
@@ -20247,9 +24927,6 @@
 
 
 
-  :
-
-
 
 cat >>confdefs.h <<_ACEOF
 #define GNULIB_CLOSE_STREAM 1
@@ -20257,40 +24934,13 @@
 
 
 
-  :
 
-
-
-          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'
+    if test "x$runstatedir" = x; then
+    runstatedir='${localstatedir}/run'
 
   fi
 
@@ -20370,44 +25020,78 @@
              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.
+           aix* | freebsd*)
+                   # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) 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" ;;
+           *-android*) # implemented using dup3(), which fails if oldfd == newfd
+             gl_cv_func_dup2_works="guessing no" ;;
+           os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd.
+             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>
+         #include <errno.h>
+             #include <fcntl.h>
+             #include <limits.h>
+             #include <sys/resource.h>
+             #include <unistd.h>
+             #ifndef RLIM_SAVED_CUR
+             # define RLIM_SAVED_CUR RLIM_INFINITY
+             #endif
+             #ifndef RLIM_SAVED_MAX
+             # define RLIM_SAVED_MAX RLIM_INFINITY
+             #endif
+
 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;
+             int bad_fd = INT_MAX;
+             struct rlimit rlim;
+             if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                 && rlim.rlim_cur != RLIM_INFINITY
+                 && rlim.rlim_cur != RLIM_SAVED_MAX
+                 && rlim.rlim_cur != RLIM_SAVED_CUR)
+               bad_fd = rlim.rlim_cur;
+             #ifdef FD_CLOEXEC
+               if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+                 result |= 1;
+             #endif
+             if (dup2 (1, 1) != 1)
+               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, bad_fd) == -1 && errno != EBADF)
+               result |= 16;
+             /* Flush out some cygwin core dumps.  */
+             if (dup2 (2, -1) != -1 || errno != EBADF)
+               result |= 32;
+             dup2 (2, 255);
+             dup2 (2, 256);
+             /* On OS/2 kLIBC, dup2() does not work on a directory fd.  */
+             {
+               int fd = open (".", O_RDONLY);
+               if (fd == -1)
+                 result |= 64;
+               else if (dup2 (fd, fd + 1) == -1)
+                 result |= 128;
 
+               close (fd);
+             }
+             return result;
   ;
   return 0;
 }
@@ -20430,6 +25114,17 @@
       *yes) ;;
       *)
         REPLACE_DUP2=1
+        for ac_func in setdtablesize
+do :
+  ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize"
+if test "x$ac_cv_func_setdtablesize" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SETDTABLESIZE 1
+_ACEOF
+
+fi
+done
+
         ;;
     esac
   fi
@@ -20560,26 +25255,54 @@
   $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";;
+  case $host_os in
+            aix* | cygwin* | haiku*)
+               gl_cv_func_fcntl_f_dupfd_works="guessing no" ;;
+            *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;;
           esac
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-#include <fcntl.h>
 #include <errno.h>
+              #include <fcntl.h>
+              #include <limits.h>
+              #include <sys/resource.h>
+              #include <unistd.h>
+              #ifndef RLIM_SAVED_CUR
+              # define RLIM_SAVED_CUR RLIM_INFINITY
+              #endif
+              #ifndef RLIM_SAVED_MAX
+              # define RLIM_SAVED_MAX RLIM_INFINITY
+              #endif
 
 int
 main ()
 {
 int result = 0;
-      if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
-      if (errno != EINVAL) result |= 2;
-      return result;
+              int bad_fd = INT_MAX;
+              struct rlimit rlim;
+              if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                  && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                  && rlim.rlim_cur != RLIM_INFINITY
+                  && rlim.rlim_cur != RLIM_SAVED_MAX
+                  && rlim.rlim_cur != RLIM_SAVED_CUR)
+                bad_fd = rlim.rlim_cur;
+              if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+              if (errno != EINVAL) result |= 2;
+              if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
+              if (errno != EINVAL) result |= 8;
+              /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */
+              {
+                int fd;
+                fd = open (".", O_RDONLY);
+                if (fd == -1)
+                  result |= 16;
+                else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1)
+                  result |= 32;
 
+                close (fd);
+              }
+              return result;
   ;
   return 0;
 }
@@ -20725,36 +25448,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_fcntl_h
+           gl_cv_next_fcntl_h='"'$gl_header'"'
 
 
 fi
@@ -20781,44 +25508,7 @@
 
 
 
-    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
 
 
 
@@ -20837,7 +25527,7 @@
     aix* | beos* | openbsd* | mirbsd* | irix*)
       FLOAT_H=float.h
       ;;
-    freebsd*)
+    freebsd* | dragonfly*)
       case "$host_cpu" in
         i[34567]86 )
           FLOAT_H=float.h
@@ -20848,17 +25538,18 @@
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined __LP64__ || defined __x86_64__ || defined __amd64__
-             yes
-             #endif
+                  int ok;
+                 #else
+                  error fail
+                 #endif
+
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then :
+if ac_fn_c_try_compile "$LINENO"; then :
 
 else
   FLOAT_H=float.h
 fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
           ;;
       esac
       ;;
@@ -20871,7 +25562,7 @@
       ;;
   esac
   case "$host_os" in
-    aix* | freebsd* | linux*)
+    aix* | freebsd* | dragonfly* | linux*)
       if test -n "$FLOAT_H"; then
         REPLACE_FLOAT_LDBL=1
       fi
@@ -20891,19 +25582,22 @@
              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if defined __LP64__ || defined __arch64__
-                yes
-                #endif
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then :
+if ac_fn_c_try_compile "$LINENO"; then :
   gl_cv_func_itold_works="guessing no"
 else
   gl_cv_func_itold_works="guessing yes"
 fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
              ;;
-           *) gl_cv_func_itold_works="guessing yes" ;;
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_itold_works="guessing yes" ;;
+           *)      gl_cv_func_itold_works="guessing yes" ;;
          esac
 
 else
@@ -20958,36 +25652,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_float_h
+           gl_cv_next_float_h='"'$gl_header'"'
 
 
 fi
@@ -21076,7 +25774,11 @@
 #include <stdio.h>
 int main ()
 {
-  return fopen ("conftest.sl/", "w") != NULL;
+  FILE *fp = fopen ("conftest.sl/", "w");
+  int result = (fp != NULL);
+  if (fp != NULL)
+    fclose (fp);
+  return result;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -21141,14 +25843,42 @@
 
 
 
-
   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
+    #include <stdio.h>
+    #if HAVE_STDIO_EXT_H
+    # include <stdio_ext.h>
+    #endif
+  '
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5
+$as_echo_n "checking for __fpending... " >&6; }
+if ${gl_cv_func___fpending+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$fp_headers
+int
+main ()
+{
+return ! __fpending (stdin);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func___fpending=yes
+else
+  gl_cv_func___fpending=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___fpending" >&5
+$as_echo "$gl_cv_func___fpending" >&6; }
+  if test $gl_cv_func___fpending = yes; then
+    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
@@ -21160,8 +25890,9 @@
 #define HAVE_DECL___FPENDING $ac_have_decl
 _ACEOF
 
+  fi
 
-  if test $ac_cv_func___fpending = no; then
+  if test $gl_cv_func___fpending = no; then
 
 
 
@@ -21172,86 +25903,6 @@
 
   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
 
 
@@ -21602,8 +26253,26 @@
 
       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";;
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Good
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Good" >/dev/null 2>&1; then :
+  gl_cv_func_frexp_works="guessing yes"
+else
+  gl_cv_func_frexp_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_frexp_works="guessing yes" ;;
          esac
 
 else
@@ -21613,7 +26282,8 @@
 #include <float.h>
 #include <math.h>
 #include <string.h>
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
+# include <signal.h>
 # include <unistd.h>
 #endif
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
@@ -21636,9 +26306,10 @@
   int i;
   volatile double x;
   double zero = 0.0;
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
   /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
      number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
   alarm (5);
 #endif
   /* Test on denormalized numbers.  */
@@ -21798,7 +26469,7 @@
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
-#if defined __i386__ && defined __FreeBSD__
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
@@ -21943,34 +26614,11 @@
 
 
 
-  if test $ac_cv_func___fseterr = no; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS fseterr.$ac_objext"
-
+  if test $ac_cv_func_fsync = no; then
+    HAVE_FSYNC=0
   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
+  if test $HAVE_FSYNC = 0; then
 
 
 
@@ -21979,7 +26627,7 @@
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext"
+  gl_LIBOBJS="$gl_LIBOBJS fsync.$ac_objext"
 
     :
   fi
@@ -21988,13 +26636,13 @@
 
 
 
-          GNULIB_FSTAT=1
+          GNULIB_FSYNC=1
 
 
 
 
 
-$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h
+$as_echo "#define GNULIB_TEST_FSYNC 1" >>confdefs.h
 
 
 
@@ -22002,350 +26650,62 @@
 
 
 
-
-
-
-
-  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_fn_c_check_decl "$LINENO" "gethrtime" "ac_cv_have_decl_gethrtime" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_gethrtime" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
 fi
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
+#define HAVE_DECL_GETHRTIME $ac_have_decl
 _ACEOF
 
-
-  fi
+  LIB_GETHRXTIME=
+  if test $ac_cv_have_decl_gethrtime = no \
+     || test $gl_cv_arithmetic_hrtime_t = no; then
 
 
 
-
-
-          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 :
+    if test $ac_cv_func_nanouptime != yes \
+       && { test $ac_cv_have_decl_gethrtime = no \
+            || test $gl_cv_arithmetic_hrtime_t = no; }; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined" >&5
+$as_echo_n "checking whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined... " >&6; }
+if ${gl_cv_have_clock_gettime_macro+:} 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;
-    }
+#          include <time.h>
+#          if defined CLOCK_MONOTONIC || defined CLOCK_REALTIME
+            have_clock_gettime_macro
+#          endif
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  am_cv_func_working_getline=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "have_clock_gettime_macro" >/dev/null 2>&1; then :
+  gl_cv_have_clock_gettime_macro=yes
 else
-  am_cv_func_working_getline=no
+  gl_cv_have_clock_gettime_macro=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*
 
 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"
-
-
-  :
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_clock_gettime_macro" >&5
+$as_echo "$gl_cv_have_clock_gettime_macro" >&6; }
+      if test $gl_cv_have_clock_gettime_macro = yes; then
+        LIB_GETHRXTIME=$LIB_CLOCK_GETTIME
+      fi
+    fi
   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
-
 
 
 
@@ -22359,10 +26719,20 @@
 
   if test $REPLACE_GETOPT = 1; then
 
-  GETOPT_H=getopt.h
+
+  if test $ac_cv_header_sys_cdefs_h = yes; then
+    HAVE_SYS_CDEFS_H=1
+  else
+    HAVE_SYS_CDEFS_H=0
+  fi
+
+
 
 $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h
 
+  GETOPT_H=getopt.h
+  GETOPT_CDEFS_H=getopt-cdefs.h
+
 
 
   fi
@@ -22388,15 +26758,329 @@
 
   gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
 
-
-
-
         GNULIB_GL_UNISTD_H_GETOPT=1
   fi
 
 
 
 
+  ac_found=0
+  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
+if test $ac_have_decl = 1; then :
+  ac_found=1
+fi
+
+  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
+if test $ac_have_decl = 1; then :
+  ac_found=1
+fi
+
+  ac_fn_c_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h>
+"
+if test "x$ac_cv_have_decl___argv" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL___ARGV $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+  ac_found=1
+fi
+
+
+  # Incur the cost of this test only if none of the above worked.
+  if test $ac_found = 0; then
+    # On OpenBSD 5.1, using the global __progname variable appears to be
+    # the only way to implement getprogname.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5
+$as_echo_n "checking whether __progname is defined in default libraries... " >&6; }
+if ${gl_cv_var___progname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        gl_cv_var___progname=
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+extern char *__progname;
+int
+main ()
+{
+return *__progname;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_var___progname=yes
+
+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_var___progname" >&5
+$as_echo "$gl_cv_var___progname" >&6; }
+    if test "$gl_cv_var___progname" = yes; then
+
+$as_echo "#define HAVE_VAR___PROGNAME 1" >>confdefs.h
+
+    fi
+  fi
+
+
+
+
+  if test $ac_cv_func_getrusage = no; then
+    HAVE_GETRUSAGE=0
+  fi
+
+  if test $HAVE_GETRUSAGE = 0; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getrusage.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_GETRUSAGE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETRUSAGE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_gettimeofday_timezone=void
+  if test $ac_cv_func_gettimeofday != yes; then
+    HAVE_GETTIMEOFDAY=0
+  else
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday clobbers localtime buffer" >&5
+$as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; }
+if ${gl_cv_func_gettimeofday_clobber+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  # When cross-compiling:
+      case "$host_os" in
+                       # Guess all is fine on glibc systems.
+        *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # Guess all is fine on musl systems.
+        *-musl*)       gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # Guess no on native Windows.
+        mingw*)        gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # If we don't know, obey --enable-cross-guesses.
+        *)             gl_cv_func_gettimeofday_clobber="$gl_cross_guess_inverted" ;;
+      esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+          #include <sys/time.h>
+          #include <time.h>
+          #include <stdlib.h>
+
+int
+main ()
+{
+
+          time_t t = 0;
+          struct tm *lt;
+          struct tm saved_lt;
+          struct timeval tv;
+          lt = localtime (&t);
+          saved_lt = *lt;
+          gettimeofday (&tv, NULL);
+          return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_gettimeofday_clobber=no
+else
+  gl_cv_func_gettimeofday_clobber=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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_clobber" >&5
+$as_echo "$gl_cv_func_gettimeofday_clobber" >&6; }
+
+ case "$gl_cv_func_gettimeofday_clobber" in
+   *yes)
+     REPLACE_GETTIMEOFDAY=1
+
+$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h
+
+
+
+
+  NEED_LOCALTIME_BUFFER=1
+  REPLACE_GMTIME=1
+  REPLACE_LOCALTIME=1
+
+     ;;
+ esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5
+$as_echo_n "checking for gettimeofday with POSIX signature... " >&6; }
+if ${gl_cv_func_gettimeofday_posix_signature+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/time.h>
+              struct timeval c;
+              int gettimeofday (struct timeval *restrict, void *restrict);
+
+int
+main ()
+{
+/* glibc uses struct timezone * rather than the POSIX void *
+                 if _GNU_SOURCE is defined.  However, since the only portable
+                 use of gettimeofday uses NULL as the second parameter, and
+                 since the glibc definition is actually more typesafe, it is
+                 not worth wrapping this to get a compliant signature.  */
+              int (*f) (struct timeval *restrict, void *restrict)
+                = gettimeofday;
+              int x = f (&c, 0);
+              return !(x | c.tv_sec | c.tv_usec);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_gettimeofday_posix_signature=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_gettimeofday_posix_signature=almost
+else
+  gl_cv_func_gettimeofday_posix_signature=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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5
+$as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; }
+    if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+      gl_gettimeofday_timezone='struct timezone'
+    elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+      REPLACE_GETTIMEOFDAY=1
+    fi
+        if test $REPLACE_STRUCT_TIMEVAL = 1; then
+      REPLACE_GETTIMEOFDAY=1
+    fi
+            case "$host_os" in
+      mingw*) REPLACE_GETTIMEOFDAY=1 ;;
+    esac
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone
+_ACEOF
+
+
+  if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext"
+
+    :
+  fi
+
+
+
+
+
+          GNULIB_GETTIMEOFDAY=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h
+
+
+
   # 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.
@@ -23001,8 +27685,26 @@
 
       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";;
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanf_works="guessing yes"
+else
+  gl_cv_func_isnanf_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_isnanf_works="guessing yes" ;;
          esac
 
 else
@@ -23231,269 +27933,6 @@
 
 
 
-  { $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
@@ -23594,15 +28033,26 @@
 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
+  case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanl_works="guessing yes"
+else
+  gl_cv_func_isnanl_works="guessing no"
+fi
+rm -f conftest*
+
              ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
          esac
 
 else
@@ -23663,7 +28113,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -23683,41 +28133,35 @@
     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"
-   */
+  /* isnanl should return something even for noncanonical values.  */
   { /* Pseudo-NaN.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 4;
   }
   { /* Pseudo-Infinity.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 8;
   }
   { /* Pseudo-Zero.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 16;
   }
   { /* Unnormalized number.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 32;
   }
   { /* Pseudo-Denormal.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 64;
   }
 #endif
@@ -23769,7 +28213,7 @@
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5
+     { $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
@@ -23778,6 +28222,39 @@
       if test "$cross_compiling" = yes; then :
 
                               gl_cv_cc_long_double_expbit0="unknown"
+          case "$host_os" in
+            mingw*) # On native Windows (little-endian), we know the result
+                    # in two cases: mingw, MSVC.
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 2 bit 0"
+fi
+rm -f conftest*
+
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 1 bit 20"
+fi
+rm -f conftest*
+
+              ;;
+          esac
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -23950,15 +28427,26 @@
 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
+  case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanl_works="guessing yes"
+else
+  gl_cv_func_isnanl_works="guessing no"
+fi
+rm -f conftest*
+
              ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
          esac
 
 else
@@ -24019,7 +28507,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -24039,41 +28527,35 @@
     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"
-   */
+  /* isnanl should return something even for noncanonical values.  */
   { /* Pseudo-NaN.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 4;
   }
   { /* Pseudo-Infinity.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 8;
   }
   { /* Pseudo-Zero.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 16;
   }
   { /* Unnormalized number.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 32;
   }
   { /* Pseudo-Denormal.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 64;
   }
 #endif
@@ -24120,7 +28602,7 @@
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5
+     { $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
@@ -24129,6 +28611,39 @@
       if test "$cross_compiling" = yes; then :
 
                               gl_cv_cc_long_double_expbit0="unknown"
+          case "$host_os" in
+            mingw*) # On native Windows (little-endian), we know the result
+                    # in two cases: mingw, MSVC.
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 2 bit 0"
+fi
+rm -f conftest*
+
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 1 bit 20"
+fi
+rm -f conftest*
+
+              ;;
+          esac
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -24316,52 +28831,6 @@
 
 
 
-  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
-
-
-
-
 
 
 
@@ -24460,8 +28929,10 @@
       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";;
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
+           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
          esac
 
 else
@@ -24565,21 +29036,781 @@
 
 
 
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+
+
+
+
+
+    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\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libtextstyle-prefix was given.
+if test "${with_libtextstyle_prefix+set}" = set; then :
+  withval=$with_libtextstyle_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\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
+      fi
+    fi
+
+fi
+
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
+      LIBTEXTSTYLE=
+  LTLIBTEXTSTYLE=
+  INCTEXTSTYLE=
+  LIBTEXTSTYLE_PREFIX=
+      HAVE_LIBTEXTSTYLE=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='textstyle '
+  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" || LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }$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
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                                                      if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; 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
+              fi
+            done
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBTEXTSTYLE; 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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; 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
+                        LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }-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" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
+                                LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$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
+                                                      LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$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 $LIBTEXTSTYLE; 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
+                      LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$found_a"
+              else
+                                                LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }-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" = 'textstyle'; then
+                  LIBTEXTSTYLE_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" = 'textstyle'; then
+                  LIBTEXTSTYLE_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = 'textstyle'; then
+                  LIBTEXTSTYLE_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 $INCTEXTSTYLE; 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
+                                            INCTEXTSTYLE="${INCTEXTSTYLE}${INCTEXTSTYLE:+ }-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*)
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
+                      haveit=
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; 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 $LIBTEXTSTYLE; 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$dependency_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$dependency_libdir"; then
+                                                        LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }-L$dependency_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBTEXTSTYLE; 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$dependency_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$dependency_libdir"; then
+                                                        LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }-L$dependency_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$,,'`
+                    ;;
+                  *)
+                                        LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$dep"
+                    LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }-l$name"
+            LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }-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"
+      LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$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"
+        LIBTEXTSTYLE="${LIBTEXTSTYLE}${LIBTEXTSTYLE:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBTEXTSTYLE="${LTLIBTEXTSTYLE}${LTLIBTEXTSTYLE:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+        ac_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCTEXTSTYLE; 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
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libtextstyle" >&5
+$as_echo_n "checking for libtextstyle... " >&6; }
+if ${ac_cv_libtextstyle+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ac_save_LIBS="$LIBS"
+                                case " $LIBTEXTSTYLE" in
+      *" -l"*) LIBS="$LIBS $LIBTEXTSTYLE" ;;
+      *)       LIBS="$LIBTEXTSTYLE $LIBS" ;;
+    esac
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <textstyle.h>
+int
+main ()
+{
+term_styled_ostream_create(1,"",TTYCTL_AUTO,"");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_libtextstyle=yes
+else
+  ac_cv_libtextstyle='no'
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libtextstyle" >&5
+$as_echo "$ac_cv_libtextstyle" >&6; }
+  if test "$ac_cv_libtextstyle" = yes; then
+    HAVE_LIBTEXTSTYLE=yes
+
+$as_echo "#define HAVE_LIBTEXTSTYLE 1" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libtextstyle" >&5
+$as_echo_n "checking how to link with libtextstyle... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTEXTSTYLE" >&5
+$as_echo "$LIBTEXTSTYLE" >&6; }
+  else
+    HAVE_LIBTEXTSTYLE=no
+            CPPFLAGS="$ac_save_CPPFLAGS"
+    LIBTEXTSTYLE=
+    LTLIBTEXTSTYLE=
+    LIBTEXTSTYLE_PREFIX=
+  fi
+
+
+
+
+
+
+
+
+
+
+  if test $HAVE_LIBTEXTSTYLE = yes; then
+    TEXTSTYLE_H=
+  else
+    TEXTSTYLE_H=textstyle.h
+
+
+  fi
+
+   if test -n "$TEXTSTYLE_H"; then
+  GL_GENERATE_TEXTSTYLE_H_TRUE=
+  GL_GENERATE_TEXTSTYLE_H_FALSE='#'
+else
+  GL_GENERATE_TEXTSTYLE_H_TRUE='#'
+  GL_GENERATE_TEXTSTYLE_H_FALSE=
+fi
+
+
+
+
+
+
+    LOCALCHARSET_TESTS_ENVIRONMENT=
 
 
 
   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.
+    has_rwlock=false
     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 :
+  has_rwlock=true
 
 $as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
 
 fi
 
+    if $has_rwlock; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5
+$as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; }
+if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LIBS="$LIBS"
+     LIBS="$LIBS $LIBMULTITHREAD"
+     if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                         # Guess no on glibc systems.
+          *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess no on musl systems.
+          *-musl*)       gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess no on bionic systems.
+          *-android*)    gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess yes on native Windows with the mingw-w64 winpthreads library.
+                         # Guess no on native Windows with the gnulib windows-rwlock module.
+          mingw*)        if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+                           gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
+                         else
+                           gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no"
+                         fi
+                         ;;
+                         # If we don't know, obey --enable-cross-guesses.
+          *)             gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define SUCCEED() exit (0)
+#define FAILURE() exit (1)
+#define UNEXPECTED(n) (exit (10 + (n)))
+
+/* The main thread creates the waiting writer and the requesting reader threads
+   in the default way; this guarantees that they have the same priority.
+   We can reuse the main thread as first reader thread.  */
+
+static pthread_rwlock_t lock;
+static pthread_t reader1;
+static pthread_t writer;
+static pthread_t reader2;
+static pthread_t timer;
+/* Used to pass control from writer to reader2 and from reader2 to timer,
+   as in a relay race.
+   Passing control from one running thread to another running thread
+   is most likely faster than to create the second thread.  */
+static pthread_mutex_t baton;
+
+static void *
+timer_func (void *ignored)
+{
+  /* Step 13 (can be before or after step 12):
+     The timer thread takes the baton, then waits a moment to make sure
+     it can tell whether the second reader thread is blocked at step 12.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (13);
+  usleep (100000);
+  /* By the time we get here, it's clear that the second reader thread is
+     blocked at step 12.  This is the desired behaviour.  */
+  SUCCEED ();
+}
+
+static void *
+reader2_func (void *ignored)
+{
+  int err;
+
+  /* Step 8 (can be before or after step 7):
+     The second reader thread takes the baton, then waits a moment to make sure
+     the writer thread has reached step 7.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (8);
+  usleep (100000);
+  /* Step 9: The second reader thread requests the lock.  */
+  err = pthread_rwlock_tryrdlock (&lock);
+  if (err == 0)
+    FAILURE ();
+  else if (err != EBUSY)
+    UNEXPECTED (9);
+  /* Step 10: Launch a timer, to test whether the next call blocks.  */
+  if (pthread_create (&timer, NULL, timer_func, NULL))
+    UNEXPECTED (10);
+  /* Step 11: Release the baton.  */
+  if (pthread_mutex_unlock (&baton))
+    UNEXPECTED (11);
+  /* Step 12: The second reader thread requests the lock.  */
+  err = pthread_rwlock_rdlock (&lock);
+  if (err == 0)
+    FAILURE ();
+  else
+    UNEXPECTED (12);
+}
+
+static void *
+writer_func (void *ignored)
+{
+  /* Step 4: Take the baton, so that the second reader thread does not go ahead
+     too early.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (4);
+  /* Step 5: Create the second reader thread.  */
+  if (pthread_create (&reader2, NULL, reader2_func, NULL))
+    UNEXPECTED (5);
+  /* Step 6: Release the baton.  */
+  if (pthread_mutex_unlock (&baton))
+    UNEXPECTED (6);
+  /* Step 7: The writer thread requests the lock.  */
+  if (pthread_rwlock_wrlock (&lock))
+    UNEXPECTED (7);
+  return NULL;
+}
+
+int
+main ()
+{
+  reader1 = pthread_self ();
+
+  /* Step 1: The main thread initializes the lock and the baton.  */
+  if (pthread_rwlock_init (&lock, NULL))
+    UNEXPECTED (1);
+  if (pthread_mutex_init (&baton, NULL))
+    UNEXPECTED (1);
+  /* Step 2: The main thread acquires the lock as a reader.  */
+  if (pthread_rwlock_rdlock (&lock))
+    UNEXPECTED (2);
+  /* Step 3: Create the writer thread.  */
+  if (pthread_create (&writer, NULL, writer_func, NULL))
+    UNEXPECTED (3);
+  /* Job done.  Go to sleep.  */
+  for (;;)
+    {
+      sleep (1);
+    }
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_pthread_rwlock_rdlock_prefer_writer=yes
+else
+  gl_cv_pthread_rwlock_rdlock_prefer_writer=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="$save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5
+$as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; }
+  case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in
+    *yes)
+
+$as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h
+
+      ;;
+  esac
+
+    fi
     # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -24591,6 +29822,9 @@
 
 #if __FreeBSD__ == 4
 error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
+       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
 #else
 int x = (int)PTHREAD_MUTEX_RECURSIVE;
 return !x;
@@ -24611,6 +29845,15 @@
 
 
 
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_LOCK 1
+_ACEOF
+
+
+
+
+
+
 
 
       for ac_header in stdlib.h
@@ -24633,11 +29876,11 @@
   if test "$cross_compiling" = yes; then :
   case "$host_os" in
           # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* \
+          *-gnu* | gnu* | *-musl* | 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 ;;
+            ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+          # If we don't know, obey --enable-cross-guesses.
+          *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
         esac
 
 else
@@ -24652,7 +29895,10 @@
 int
 main ()
 {
-return ! malloc (0);
+char *p = malloc (0);
+            int result = !p;
+            free (p);
+            return result;
   ;
   return 0;
 }
@@ -24671,16 +29917,19 @@
 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 :
+  case "$ac_cv_func_malloc_0_nonnull" in
+    *yes)
 
 $as_echo "#define HAVE_MALLOC_GNU 1" >>confdefs.h
 
-else
-  $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h
+      ;;
+    *)
+      $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h
 
      REPLACE_MALLOC=1
 
-fi
+      ;;
+  esac
 
 
   if test $REPLACE_MALLOC = 1; then
@@ -24763,36 +30012,40 @@
              if test $ac_cv_header_math_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_math_h
+           gl_cv_next_math_h='"'$gl_header'"'
           else
                gl_cv_next_math_h='<'math.h'>'
              fi
@@ -24884,43 +30137,6 @@
   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
 
 
 
@@ -24929,6 +30145,11 @@
 
 
 
+  :
+
+
+
+
 
 
 
@@ -24940,6 +30161,7 @@
 
 
 
+
      { $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 :
@@ -24980,7 +30202,7 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
         if (mbsinit (&state))
-          return 1;
+          return 2;
     }
   return 0;
 }
@@ -24994,6 +30216,50 @@
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+      else
+        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)
+    {
+      const 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))
+        if (mbsinit (&state))
+          return 2;
+    }
+  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
 
 fi
@@ -25047,7 +30313,7 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 3, 6, &state) != 4
           && mbtowc (&wc, input + 3, 6) == 4)
-        return 1;
+        return 2;
     }
   return 0;
 }
@@ -25234,7 +30500,7 @@
       mbrtowc (&wc, NULL, 5, &state);
       /* Check that wc was not modified.  */
       if (wc != (wchar_t) 0xBADFACE)
-        return 1;
+        return 2;
     }
   return 0;
 }
@@ -25434,7 +30700,7 @@
 
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, "", 1, &state) != 0)
-        return 1;
+        return 2;
     }
   return 0;
 }
@@ -25454,6 +30720,109 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5
 $as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; }
 
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5
+$as_echo_n "checking whether mbrtowc works on empty input... " >&6; }
+if ${gl_cv_func_mbrtowc_empty_input+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                              # Guess no on AIX and glibc systems.
+        aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+                              # Guess yes on native Windows.
+        mingw*)               gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+        *)                    gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+      esac
+      if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+           #include <wchar.h>
+           static wchar_t wc;
+           static mbstate_t mbs;
+           int
+           main (void)
+           {
+             return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2;
+           }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_empty_input=yes
+else
+  gl_cv_func_mbrtowc_empty_input=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_mbrtowc_empty_input" >&5
+$as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; }
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5
+$as_echo_n "checking whether the C locale is free of encoding errors... " >&6; }
+if ${gl_cv_C_locale_sans_EILSEQ+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               gl_cv_C_locale_sans_EILSEQ="$gl_cross_guess_normal"
+
+     if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                 # Guess yes on native Windows.
+         mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+            #include <locale.h>
+            #include <wchar.h>
+
+int
+main ()
+{
+
+            int i;
+            char *locale = setlocale (LC_ALL, "C");
+            if (! locale)
+              return 2;
+            for (i = CHAR_MIN; i <= CHAR_MAX; i++)
+              {
+                char c = i;
+                wchar_t wc;
+                mbstate_t mbs = { 0, };
+                size_t ss = mbrtowc (&wc, &c, 1, &mbs);
+                if (1 < ss)
+                  return 3;
+              }
+            return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_C_locale_sans_EILSEQ=yes
+else
+  gl_cv_C_locale_sans_EILSEQ=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_C_locale_sans_EILSEQ" >&5
+$as_echo "$gl_cv_C_locale_sans_EILSEQ" >&6; }
+
       case "$gl_cv_func_mbrtowc_null_arg1" in
         *yes) ;;
         *)
@@ -25486,6 +30855,22 @@
            REPLACE_MBRTOWC=1
            ;;
       esac
+      case "$gl_cv_func_mbrtowc_empty_input" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case $gl_cv_C_locale_sans_EILSEQ in
+        *yes) ;;
+        *)
+$as_echo "#define C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
     fi
   fi
 
@@ -25501,6 +30886,7 @@
   gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
 
 
+
   :
 
   fi
@@ -25524,21 +30910,6 @@
 
 
 
-          GNULIB_MBSCHR=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_MBSCHR 1" >>confdefs.h
-
-
-
-
-
-
-
-
 
 
 
@@ -25549,6 +30920,7 @@
 
 
 
+
      { $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 :
@@ -25589,7 +30961,7 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
         if (mbsinit (&state))
-          return 1;
+          return 2;
     }
   return 0;
 }
@@ -25603,6 +30975,50 @@
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+      else
+        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)
+    {
+      const 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))
+        if (mbsinit (&state))
+          return 2;
+    }
+  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
 
 fi
@@ -25656,7 +31072,7 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 3, 6, &state) != 4
           && mbtowc (&wc, input + 3, 6) == 4)
-        return 1;
+        return 2;
     }
   return 0;
 }
@@ -25761,21 +31177,6 @@
 
 
 
-
-          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 :
@@ -25871,10 +31272,6 @@
 
 
 
-
-  :
-
-
   if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
 
 
@@ -25918,14 +31315,6 @@
 
 
 
-  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
@@ -25941,8 +31330,6 @@
 
   fi
 
-
-
   if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
 
 
@@ -25957,6 +31344,9 @@
   fi
 
 
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_MSVC_NOTHROW 1
+_ACEOF
 
 
 
@@ -25968,23 +31358,31 @@
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks" >&5
-$as_echo_n "checking for obstacks... " >&6; }
+
+
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks that work with any size object" >&5
+$as_echo_n "checking for obstacks that work with any size object... " >&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"
+#include "obstack.h"
+             void *obstack_chunk_alloc (size_t n) { return 0; }
+             void obstack_chunk_free (void *p) { }
+             /* Check that an internal function returns size_t, not int.  */
+             size_t _obstack_memory_used (struct obstack *);
+
 int
 main ()
 {
 struct obstack mem;
-		       #define obstack_chunk_alloc malloc
-		       #define obstack_chunk_free free
-		       obstack_init (&mem);
-		       obstack_free (&mem, 0);
+             obstack_init (&mem);
+             obstack_free (&mem, 0);
+
   ;
   return 0;
 }
@@ -25999,11 +31397,11 @@
 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
+   if test "$ac_cv_func_obstack" = yes; then
 
 $as_echo "#define HAVE_OBSTACK 1" >>confdefs.h
 
-else
+   else
 
 
 
@@ -26014,7 +31412,7 @@
 
   gl_LIBOBJS="$gl_LIBOBJS obstack.$ac_objext"
 
-fi
+   fi
 
 
 
@@ -26066,30 +31464,36 @@
 
 
 
+
   case "$host_os" in
     mingw* | pw*)
       REPLACE_OPEN=1
       ;;
     *)
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5
+      if test "$gl_cv_macro_O_CLOEXEC" != yes; then
+        REPLACE_OPEN=1
+      fi
+
+
+  { $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 :
+     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
+        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
@@ -26120,16 +31524,21 @@
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-          rm -f conftest.sl conftest.tmp conftest.lnk
+     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)
+  case "$gl_cv_func_open_slash" in
+    *no)
 
 $as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h
 
+      ;;
+  esac
+
+      case "$gl_cv_func_open_slash" in
+        *no)
           REPLACE_OPEN=1
           ;;
       esac
@@ -26177,7 +31586,7 @@
 
 
 
-          if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then
+             if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then
             REPLACE_PERROR=1
   fi
   case ${gl_cv_func_strerror_r_works-unset} in
@@ -26188,7 +31597,14 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-              gl_cv_func_perror_works="guessing no"
+  case "$host_os" in
+                       # Guess yes on musl systems.
+              *-musl*) gl_cv_func_perror_works="guessing yes" ;;
+                       # Guess yes on native Windows.
+              mingw*)  gl_cv_func_perror_works="guessing yes" ;;
+                       # Otherwise obey --enable-cross-guesses.
+              *)       gl_cv_func_perror_works="$gl_cross_guess_normal" ;;
+            esac
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -26232,9 +31648,10 @@
 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
+      case "$gl_cv_func_perror_works" in
+        *yes) ;;
+        *) REPLACE_PERROR=1 ;;
+      esac
       ;;
     *)
                   REPLACE_PERROR=1
@@ -26315,10 +31732,13 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  # Guess no on Solaris, yes otherwise.
+  # Guess no on musl libc and 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";;
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+            solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+            *)        gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes" ;;
           esac
 
 else
@@ -26355,7 +31775,7 @@
     esac
   fi
 
-  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
 
 
 
@@ -26397,9 +31817,12 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  # Guess no on Solaris, yes otherwise.
+  # Guess no on musl libc and Solaris, yes otherwise.
           case "$host_os" in
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
             solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no" ;;
             *)        gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";;
           esac
 
@@ -26437,7 +31860,7 @@
     esac
   fi
 
-  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
 
 
 
@@ -26479,9 +31902,12 @@
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  # Guess no on Solaris, yes otherwise.
+  # Guess no on musl libc and Solaris, yes otherwise.
           case "$host_os" in
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
             solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;;
             *)        gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";;
           esac
 
@@ -26521,7 +31947,7 @@
     esac
   fi
 
-  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
 
 
 
@@ -26742,42 +32168,6 @@
 
   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
 
 
@@ -26808,8 +32198,26 @@
 
       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";;
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Good
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Good" >/dev/null 2>&1; then :
+  gl_cv_func_frexp_works="guessing yes"
+else
+  gl_cv_func_frexp_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_frexp_works="guessing yes" ;;
          esac
 
 else
@@ -26819,7 +32227,8 @@
 #include <float.h>
 #include <math.h>
 #include <string.h>
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
+# include <signal.h>
 # include <unistd.h>
 #endif
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
@@ -26842,9 +32251,10 @@
   int i;
   volatile double x;
   double zero = 0.0;
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
   /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
      number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
   alarm (5);
 #endif
   /* Test on denormalized numbers.  */
@@ -27000,7 +32410,7 @@
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
-#if defined __i386__ && defined __FreeBSD__
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
@@ -27165,8 +32575,10 @@
       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";;
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
+           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
          esac
 
 else
@@ -27301,7 +32713,6 @@
 
 
 
-
   for ac_func in raise
 do :
   ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise"
@@ -27316,9 +32727,12 @@
   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 $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+        REPLACE_RAISE=1
+      fi
+
 
 
 
@@ -27371,23 +32785,97 @@
 
 
 
+  if test $ac_cv_func_readlink = no; then
+    HAVE_READLINK=0
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readlink signature is correct" >&5
+$as_echo_n "checking whether readlink signature is correct... " >&6; }
+if ${gl_cv_decl_readlink_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+      /* Cause compilation failure if original declaration has wrong type.  */
+      ssize_t readlink (const char *, char *, size_t);
+int
+main ()
+{
 
-  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
+  ;
+  return 0;
+}
 _ACEOF
-
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_readlink_works=yes
+else
+  gl_cv_decl_readlink_works=no
 fi
-done
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_readlink_works" >&5
+$as_echo "$gl_cv_decl_readlink_works" >&6; }
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readlink handles trailing slash correctly" >&5
+$as_echo_n "checking whether readlink handles trailing slash correctly... " >&6; }
+if ${gl_cv_func_readlink_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # We have readlink, so assume ln -s works.
+       ln -s conftest.no-such conftest.link
+       ln -s conftest.link conftest.lnk2
+       if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                             # Guess yes on Linux systems.
+            linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;;
+                             # Guess yes on glibc systems.
+            *-gnu* | gnu*)   gl_cv_func_readlink_works="guessing yes" ;;
+                             # If we don't know, obey --enable-cross-guesses.
+            *)               gl_cv_func_readlink_works="$gl_cross_guess_normal" ;;
+          esac
 
-  if test $ac_cv_func_rawmemchr = no; then
-    HAVE_RAWMEMCHR=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+int
+main ()
+{
+char buf[20];
+      return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_readlink_works=yes
+else
+  gl_cv_func_readlink_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
+
+      rm -f conftest.link conftest.lnk2
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_works" >&5
+$as_echo "$gl_cv_func_readlink_works" >&6; }
+    case "$gl_cv_func_readlink_works" in
+      *yes)
+        if test "$gl_cv_decl_readlink_works" != yes; then
+          REPLACE_READLINK=1
+        fi
+        ;;
+      *)
+
+$as_echo "#define READLINK_TRAILING_SLASH_BUG 1" >>confdefs.h
+
+        REPLACE_READLINK=1
+        ;;
+    esac
   fi
 
-  if test $HAVE_RAWMEMCHR = 0; then
+  if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
 
 
 
@@ -27396,22 +32884,24 @@
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext"
+  gl_LIBOBJS="$gl_LIBOBJS readlink.$ac_objext"
 
-    :
+
+  :
+
   fi
 
 
 
 
 
-          GNULIB_RAWMEMCHR=1
+          GNULIB_READLINK=1
 
 
 
 
 
-$as_echo "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h
+$as_echo "#define GNULIB_TEST_READLINK 1" >>confdefs.h
 
 
 
@@ -27454,27 +32944,450 @@
 
 
 
+
+
+
+
+  : ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'}
+  RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base"
+  RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base"
+
+  if test $RELOCATABLE = yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS progreloc.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS relocatable.$ac_objext"
+
+  fi
+
+
+
+  :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_setenv = no; then
+    HAVE_DECL_SETENV=0
+  fi
+
+
+
+
+
+  for ac_header in search.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default"
+if test "x$ac_cv_header_search_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SEARCH_H 1
+_ACEOF
+
+fi
+
+done
+
+  for ac_func in tsearch
+do :
+  ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch"
+if test "x$ac_cv_func_tsearch" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TSEARCH 1
+_ACEOF
+
+fi
+done
+
+
+
+
+  relocatable_sh=$ac_aux_dir/relocatable.sh.in
+
+
+
+
+
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on destination" >&5
+$as_echo_n "checking whether rename honors trailing slash on destination... " >&6; }
+if ${gl_cv_func_rename_slash_dst_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk
+    touch conftest.f && touch conftest.f1 && mkdir conftest.d1 ||
+      as_fn_error $? "cannot create temporary files" "$LINENO" 5
+    # Assume that if we have lstat, we can also check symlinks.
+    if test $ac_cv_func_lstat = yes; then
+      ln -s conftest.f conftest.lnk
+    fi
+    if test "$cross_compiling" = yes; then :
+        case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_slash_dst_works="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_rename_slash_dst_works="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;;
+       esac
+
+else
   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;
+#        include <stdio.h>
+#        include <stdlib.h>
 
 int
 main ()
 {
+int result = 0;
+           if (rename ("conftest.f1", "conftest.f2/") == 0)
+             result |= 1;
+           if (rename ("conftest.d1", "conftest.d2/") != 0)
+             result |= 2;
+#if HAVE_LSTAT
+           if (rename ("conftest.f", "conftest.lnk/") == 0)
+             result |= 4;
+#endif
+           return result;
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  SCHED_H=''
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_rename_slash_dst_works=yes
 else
-  SCHED_H='sched.h'
+  gl_cv_func_rename_slash_dst_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
 
+    rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_dst_works" >&5
+$as_echo "$gl_cv_func_rename_slash_dst_works" >&6; }
+  case "$gl_cv_func_rename_slash_dst_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+
+$as_echo "#define RENAME_TRAILING_SLASH_DEST_BUG 1" >>confdefs.h
+
+      ;;
+  esac
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on source" >&5
+$as_echo_n "checking whether rename honors trailing slash on source... " >&6; }
+if ${gl_cv_func_rename_slash_src_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk
+    touch conftest.f && touch conftest.f1 && mkdir conftest.d1 ||
+      as_fn_error $? "cannot create temporary files" "$LINENO" 5
+    # Assume that if we have lstat, we can also check symlinks.
+    if test $ac_cv_func_lstat = yes; then
+      ln -s conftest.f conftest.lnk
+    fi
+    if test "$cross_compiling" = yes; then :
+        case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # Guess yes on native Windows.
+         mingw*)          gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#        include <stdio.h>
+#        include <stdlib.h>
+
+int
+main ()
+{
+int result = 0;
+           if (rename ("conftest.f1/", "conftest.d3") == 0)
+             result |= 1;
+           if (rename ("conftest.d1/", "conftest.d2") != 0)
+             result |= 2;
+#if HAVE_LSTAT
+           if (rename ("conftest.lnk/", "conftest.f") == 0)
+             result |= 4;
+#endif
+           return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_rename_slash_src_works=yes
+else
+  gl_cv_func_rename_slash_src_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
+
+    rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_src_works" >&5
+$as_echo "$gl_cv_func_rename_slash_src_works" >&6; }
+  case "$gl_cv_func_rename_slash_src_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+
+$as_echo "#define RENAME_TRAILING_SLASH_SOURCE_BUG 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename manages hard links correctly" >&5
+$as_echo_n "checking whether rename manages hard links correctly... " >&6; }
+if ${gl_cv_func_rename_link_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test $ac_cv_func_link = yes; then
+       if test $cross_compiling != yes; then
+         rm -rf conftest.f conftest.f1 conftest.f2
+         if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 &&
+             set x `ls -i conftest.f conftest.f1` && test "" = ""; then
+           if test "$cross_compiling" = yes; then :
+                :
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#               include <errno.h>
+#               include <stdio.h>
+#               include <stdlib.h>
+#               include <unistd.h>
+
+int
+main ()
+{
+int result = 0;
+                  if (rename ("conftest.f", "conftest.f1"))
+                    result |= 1;
+                  if (unlink ("conftest.f1"))
+                    result |= 2;
+
+                  /* Allow either the POSIX-required behavior, where the
+                     previous rename kept conftest.f, or the (better) NetBSD
+                     behavior, where it removed conftest.f.  */
+                  if (rename ("conftest.f", "conftest.f") != 0
+                      && errno != ENOENT)
+                    result |= 4;
+
+                  if (rename ("conftest.f1", "conftest.f1") == 0)
+                    result |= 8;
+                  if (rename ("conftest.f2", "conftest.f2") != 0)
+                    result |= 16;
+                  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_rename_link_works=yes
+else
+  gl_cv_func_rename_link_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
+
+         else
+           gl_cv_func_rename_link_works="guessing no"
+         fi
+         rm -rf conftest.f conftest.f1 conftest.f2
+       else
+                  case "$host_os" in
+                            # Guess yes on Linux systems.
+           linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;;
+                            # Guess yes on glibc systems.
+           *-gnu*)          gl_cv_func_rename_link_works="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_rename_link_works="guessing yes" ;;
+                            # If we don't know, obey --enable-cross-guesses.
+           *)               gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;;
+         esac
+       fi
+     else
+       gl_cv_func_rename_link_works=yes
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_link_works" >&5
+$as_echo "$gl_cv_func_rename_link_works" >&6; }
+  case "$gl_cv_func_rename_link_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+
+$as_echo "#define RENAME_HARD_LINK_BUG 1" >>confdefs.h
+
+      ;;
+  esac
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename manages existing destinations correctly" >&5
+$as_echo_n "checking whether rename manages existing destinations correctly... " >&6; }
+if ${gl_cv_func_rename_dest_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftest.f conftest.d1 conftest.d2
+    touch conftest.f && mkdir conftest.d1 conftest.d2 ||
+      as_fn_error $? "cannot create temporary files" "$LINENO" 5
+    if test "$cross_compiling" = yes; then :
+        case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_dest_works="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_rename_dest_works="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#        include <stdio.h>
+#        include <stdlib.h>
+
+int
+main ()
+{
+int result = 0;
+           if (rename ("conftest.d1", "conftest.d2") != 0)
+             result |= 1;
+           if (rename ("conftest.d2", "conftest.f") == 0)
+             result |= 2;
+           return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_rename_dest_works=yes
+else
+  gl_cv_func_rename_dest_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
+
+    rm -rf conftest.f conftest.d1 conftest.d2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_dest_works" >&5
+$as_echo "$gl_cv_func_rename_dest_works" >&6; }
+  case "$gl_cv_func_rename_dest_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+
+$as_echo "#define RENAME_DEST_EXISTS_BUG 1" >>confdefs.h
+
+      ;;
+  esac
+
+  if test $REPLACE_RENAME = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS rename.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_RENAME=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_RENAME 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+  for ac_header in sched.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "#if HAVE_SYS_CDEFS_H
+       #include <sys/cdefs.h>
+      #endif
+
+"
+if test "x$ac_cv_header_sched_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHED_H 1
+_ACEOF
+
+fi
+
+done
 
 
 
@@ -27493,42 +33406,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-             if test $ac_cv_header_sched_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  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
+    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'
+  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_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
+        gl_cv_absolute_sched_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sched_h
+           gl_cv_next_sched_h='"'$gl_header'"'
 
 
 fi
@@ -27550,14 +33461,19 @@
 
 
 
-     if test $ac_cv_header_sched_h = yes; then
-       HAVE_SCHED_H=1
-     else
-       HAVE_SCHED_H=0
-     fi
+  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 "$HAVE_SCHED_H" = 1; then
+    ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#if HAVE_SYS_CDEFS_H
+         #include <sys/cdefs.h>
+        #endif
+        #include <sched.h>
+
 "
 if test "x$ac_cv_type_struct_sched_param" = xyes; then :
   HAVE_STRUCT_SCHED_PARAM=1
@@ -27565,21 +33481,41 @@
   HAVE_STRUCT_SCHED_PARAM=0
 fi
 
-
-
-
-
+  else
+    HAVE_STRUCT_SCHED_PARAM=0
+    case "$host_os" in
+      os2*)
+                ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <spawn.h>
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes; then :
+  HAVE_STRUCT_SCHED_PARAM=1
 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=
+        ;;
+      vms)
+                ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <pthread.h>
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes; then :
+  HAVE_STRUCT_SCHED_PARAM=1
 fi
 
+        ;;
+    esac
+  fi
+
+
+  if test "$ac_cv_header_sys_cdefs_h" = yes; then
+    HAVE_SYS_CDEFS_H=1
+  else
+    HAVE_SYS_CDEFS_H=0
+  fi
+
+
+
+
+
+
+
 
 
 
@@ -27673,36 +33609,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_signal_h
+           gl_cv_next_signal_h='"'$gl_header'"'
 
 
 fi
@@ -27754,49 +33694,13 @@
 
 
 
-    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 "$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
@@ -27804,10 +33708,14 @@
 
       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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on native Windows.
+           mingw*)        gl_cv_func_signbit="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_signbit="$gl_cross_guess_normal" ;;
          esac
 
 else
@@ -27922,10 +33830,19 @@
 
       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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on mingw, no on MSVC.
+           mingw*)        if test -n "$GCC"; then
+                            gl_cv_func_signbit_gcc="guessing yes"
+                          else
+                            gl_cv_func_signbit_gcc="guessing no"
+                          fi
+                          ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_signbit_gcc="$gl_cross_guess_normal" ;;
          esac
 
 else
@@ -28038,6 +33955,16 @@
         *yes) ;;
         *)
                     REPLACE_SIGNBIT=1
+          ;;
+      esac
+      ;;
+  esac
+          case "$host_os" in
+    solaris*)
+      REPLACE_SIGNBIT=1
+      ;;
+  esac
+  if test $REPLACE_SIGNBIT = 1; then
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5
@@ -28078,6 +34005,7 @@
         {
           /* More than one bit difference.  */
           fprintf (fp, "unknown");
+          fclose (fp);
           return 2;
         }
       if (x)
@@ -28090,6 +34018,7 @@
     {
       /* No difference.  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 3;
     }
   /* Now m = plus.word[k] ^ ~minus.word[k].  */
@@ -28098,6 +34027,7 @@
       /* Oh? The sign bit is set in the positive and cleared in the negative
          numbers?  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 4;
     }
   for (i = 0; ; i++)
@@ -28182,6 +34112,7 @@
         {
           /* More than one bit difference.  */
           fprintf (fp, "unknown");
+          fclose (fp);
           return 2;
         }
       if (x)
@@ -28194,6 +34125,7 @@
     {
       /* No difference.  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 3;
     }
   /* Now m = plus.word[k] ^ ~minus.word[k].  */
@@ -28202,6 +34134,7 @@
       /* Oh? The sign bit is set in the positive and cleared in the negative
          numbers?  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 4;
     }
   for (i = 0; ; i++)
@@ -28286,6 +34219,7 @@
         {
           /* More than one bit difference.  */
           fprintf (fp, "unknown");
+          fclose (fp);
           return 2;
         }
       if (x)
@@ -28298,6 +34232,7 @@
     {
       /* No difference.  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 3;
     }
   /* Now m = plus.word[k] ^ ~minus.word[k].  */
@@ -28306,6 +34241,7 @@
       /* Oh? The sign bit is set in the positive and cleared in the negative
          numbers?  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 4;
     }
   for (i = 0; ; i++)
@@ -28350,8 +34286,8 @@
   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 "$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
@@ -28363,17 +34299,17 @@
 #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
+      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
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <math.h>
-                         float x, y;
+                   float x, y;
 int
 main ()
 {
@@ -28393,15 +34329,15 @@
 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
+        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>
+        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
@@ -28413,17 +34349,17 @@
 #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
+      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
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <math.h>
-                         double x, y;
+                   double x, y;
 int
 main ()
 {
@@ -28443,15 +34379,15 @@
 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
+        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>
+        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
@@ -28463,17 +34399,17 @@
 #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
+      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
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <math.h>
-                         long double x, y;
+                   long double x, y;
 int
 main ()
 {
@@ -28493,17 +34429,14 @@
 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
+        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
+        fi
+      fi
+    fi
+  fi
 
   if test $REPLACE_SIGNBIT = 1; then
 
@@ -28714,7 +34647,14 @@
 else
 
       if test "$cross_compiling" = yes; then :
-  gl_cv_func_snprintf_size1="guessing yes"
+  case "$host_os" in
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -28772,10 +34712,13 @@
 
          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";;
+                            gl_cv_func_printf_positions="guessing no";;
+           beos*)           gl_cv_func_printf_positions="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_positions="guessing yes";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_positions="guessing no";;
+           *)               gl_cv_func_printf_positions="guessing yes";;
          esac
 
 else
@@ -28833,6 +34776,11 @@
 
   if test $ac_cv_func_snprintf = yes; then
     REPLACE_SNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_snprintf = yes; then
+                        REPLACE_SNPRINTF=1
+    fi
   fi
   :
 
@@ -28905,9 +34853,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -28937,8 +34887,12 @@
            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";;
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_truncation_c99="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -28999,9 +34953,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -29024,8 +34980,12 @@
            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";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";;
          esac
 
 else
@@ -29087,7 +35047,14 @@
 else
 
       if test "$cross_compiling" = yes; then :
-  gl_cv_func_snprintf_size1="guessing yes"
+  case "$host_os" in
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -29140,9 +35107,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -29164,10 +35133,12 @@
            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.
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on native Windows.
            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";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -29524,6 +35495,11 @@
 
   if test $ac_cv_func_snprintf = yes; then
     REPLACE_SNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_snprintf = yes; then
+                        REPLACE_SNPRINTF=1
+    fi
   fi
   :
 
@@ -29553,36 +35529,40 @@
              if test $ac_cv_header_spawn_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <spawn.h>
-
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                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'
+  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_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"`'"'
+        gl_cv_absolute_spawn_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_spawn_h
+           gl_cv_next_spawn_h='"'$gl_header'"'
           else
                gl_cv_next_spawn_h='<'spawn.h'>'
              fi
@@ -29655,44 +35635,7 @@
 
 
 
-    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
 
 
 
@@ -30065,138 +36008,6 @@
 
 
 
-    { $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
@@ -30225,10 +36036,49 @@
 
 
   STDDEF_H=
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5
+$as_echo_n "checking for good max_align_t... " >&6; }
+if ${gl_cv_type_max_align_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+            unsigned int s = sizeof (max_align_t);
+            #if defined __GNUC__ || defined __IBM__ALIGNOF__
+            int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+            int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+            #endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_max_align_t=yes
+else
+  gl_cv_type_max_align_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_max_align_t" >&5
+$as_echo "$gl_cv_type_max_align_t" >&6; }
+  if test $gl_cv_type_max_align_t = no; then
+    HAVE_MAX_ALIGN_T=0
+    STDDEF_H=stddef.h
+  fi
+
   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 :
@@ -30261,6 +36111,7 @@
     STDDEF_H=stddef.h
   fi
 
+
    if test -n "$STDDEF_H"; then
   GL_GENERATE_STDDEF_H_TRUE=
   GL_GENERATE_STDDEF_H_FALSE='#'
@@ -30287,36 +36138,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stddef_h
+           gl_cv_next_stddef_h='"'$gl_header'"'
 
 
 fi
@@ -30342,6 +36197,9 @@
 
 
 
+  $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
+
 
 
 
@@ -30359,36 +36217,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdio_h
+           gl_cv_next_stdio_h='"'$gl_header'"'
 
 
 fi
@@ -30410,6 +36272,48 @@
 
 
 
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5
+$as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; }
+if ${gl_cv_func_printf_attribute_flavor+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define __STDC_FORMAT_MACROS 1
+       #include <stdio.h>
+       #include <inttypes.h>
+       /* For non-mingw systems, compilation will trivially succeed.
+          For mingw, compilation will succeed for older mingw (system
+          printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+       #if (defined _WIN32 && ! defined __CYGWIN__) && \
+         (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+       extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+       #endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_printf_attribute_flavor=system
+else
+  gl_cv_func_printf_attribute_flavor=gnu
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5
+$as_echo "$gl_cv_func_printf_attribute_flavor" >&6; }
+  if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+
+$as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h
+
+  fi
+
       GNULIB_FSCANF=1
 
 
@@ -30447,44 +36351,7 @@
 
 
 
-    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
 
 
 
@@ -30506,36 +36373,40 @@
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdlib_h
+           gl_cv_next_stdlib_h='"'$gl_header'"'
 
 
 fi
@@ -30558,50 +36429,7 @@
 
 
 
-    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
 
 
 
@@ -30659,115 +36487,6 @@
 
 
 
-  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
@@ -30821,10 +36540,12 @@
 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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_working_strerror="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_working_strerror="$gl_cross_guess_normal" ;;
          esac
 
 else
@@ -30904,104 +36625,6 @@
 
 
 
-  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
-
-
-
-
-
 
 
 
@@ -31045,11 +36668,14 @@
   #endif
   char *strndup (const char *, size_t);
 #endif
+  int result;
   char *s;
   s = strndup ("some longer string", 15);
   free (s);
   s = strndup ("shorter string", 13);
-  return s[13] != '\0';
+  result = s[13] != '\0';
+  free (s);
+  return result;
   ;
   return 0;
 }
@@ -31104,127 +36730,6 @@
 
 
 
-
-
-  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
-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
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_strnlen_working=yes
-else
-  ac_cv_func_strnlen_working=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_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
-
-  if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; 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 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"
@@ -31281,138 +36786,90 @@
 
 
 
-
-
-
      if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+       gl_cv_next_sys_resource_h='<'sys/resource.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 "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/resource.h>" >&5
+$as_echo_n "checking absolute name of <sys/resource.h>... " >&6; }
+if ${gl_cv_next_sys_resource_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-             if test $ac_cv_header_sys_stat_h = yes; then
+             if test $ac_cv_header_sys_resource_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <sys/stat.h>
-
+#include <sys/resource.h>
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                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'
+  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/resource.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_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"`'"'
+        gl_cv_absolute_sys_resource_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_resource_h
+           gl_cv_next_sys_resource_h='"'$gl_header'"'
           else
-               gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+               gl_cv_next_sys_resource_h='<'sys/resource.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; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_resource_h" >&5
+$as_echo "$gl_cv_next_sys_resource_h" >&6; }
      fi
-     NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
+     NEXT_SYS_RESOURCE_H=$gl_cv_next_sys_resource_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'>'
+       gl_next_as_first_directive='<'sys/resource.h'>'
      else
        # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_sys_stat_h
+       gl_next_as_first_directive=$gl_cv_next_sys_resource_h
      fi
-     NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
+     NEXT_AS_FIRST_DIRECTIVE_SYS_RESOURCE_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
-
+  if test $ac_cv_header_sys_resource_h = yes; then
+    HAVE_SYS_RESOURCE_H=1
+  else
+    HAVE_SYS_RESOURCE_H=0
   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
+
+
+
+
 
 
 
@@ -31427,64 +36884,96 @@
 
 
      if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_sys_types_h='<'sys/types.h'>'
+       gl_cv_next_sys_times_h='<'sys/times.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 "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/times.h>" >&5
+$as_echo_n "checking absolute name of <sys/times.h>... " >&6; }
+if ${gl_cv_next_sys_times_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+             if test $ac_cv_header_sys_times_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <sys/types.h>
-
+#include <sys/times.h>
 _ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
+                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'
+  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/times.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_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"`'"'
+        gl_cv_absolute_sys_times_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_times_h
+           gl_cv_next_sys_times_h='"'$gl_header'"'
+          else
+               gl_cv_next_sys_times_h='<'sys/times.h'>'
+             fi
 
 
 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; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_times_h" >&5
+$as_echo "$gl_cv_next_sys_times_h" >&6; }
      fi
-     NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h
+     NEXT_SYS_TIMES_H=$gl_cv_next_sys_times_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'>'
+       gl_next_as_first_directive='<'sys/times.h'>'
      else
        # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_sys_types_h
+       gl_next_as_first_directive=$gl_cv_next_sys_times_h
      fi
-     NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive
+     NEXT_AS_FIRST_DIRECTIVE_SYS_TIMES_H=$gl_next_as_first_directive
 
 
 
 
+  if test $ac_cv_header_sys_times_h = yes; then
+    HAVE_SYS_TIMES_H=1
+    ac_fn_c_check_type "$LINENO" "struct tms" "ac_cv_type_struct_tms" "
+#include <sys/times.h>
+
+"
+if test "x$ac_cv_type_struct_tms" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TMS 1
+_ACEOF
+
+
+else
+  HAVE_STRUCT_TMS=0
+fi
+
+  else
+    HAVE_SYS_TIMES_H=0
+    HAVE_STRUCT_TMS=0
+  fi
+
 
 
 
@@ -31517,36 +37006,40 @@
              if test $ac_cv_header_sys_wait_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_wait_h
+           gl_cv_next_sys_wait_h='"'$gl_header'"'
           else
                gl_cv_next_sys_wait_h='<'sys/wait.h'>'
              fi
@@ -31574,43 +37067,6 @@
 
 
 
-    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
 
 
 
@@ -31619,6 +37075,8 @@
 
 
 
+  :
+
 
 
 
@@ -31645,36 +37103,40 @@
              if test $ac_cv_header_unistd_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_unistd_h
+           gl_cv_next_unistd_h='"'$gl_header'"'
           else
                gl_cv_next_unistd_h='<'unistd.h'>'
              fi
@@ -31710,56 +37172,7 @@
 
 
 
-    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
 
 
 
@@ -31776,7 +37189,7 @@
             || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
                  && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
                       || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
                          }
                     }
                }
@@ -31803,7 +37216,7 @@
             || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
                  && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
                       || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
                          }
                     }
                }
@@ -31830,7 +37243,7 @@
             || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
                  && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
                       || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8
                          }
                     }
                }
@@ -31850,6 +37263,192 @@
 
 
 
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unlink honors trailing slashes" >&5
+$as_echo_n "checking whether unlink honors trailing slashes... " >&6; }
+if ${gl_cv_func_unlink_honors_slashes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.file
+     # Assume that if we have lstat, we can also check symlinks.
+     if test $ac_cv_func_lstat = yes; then
+       ln -s conftest.file conftest.lnk
+     fi
+     if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_unlink_honors_slashes="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;;
+       esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           #endif
+           #include <errno.h>
+
+int
+main ()
+{
+int result = 0;
+           if (!unlink ("conftest.file/"))
+             result |= 1;
+           else if (errno != ENOTDIR)
+             result |= 2;
+#if HAVE_LSTAT
+           if (!unlink ("conftest.lnk/"))
+             result |= 4;
+           else if (errno != ENOTDIR)
+             result |= 8;
+#endif
+           return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_unlink_honors_slashes=yes
+else
+  gl_cv_func_unlink_honors_slashes=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.file conftest.lnk
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_honors_slashes" >&5
+$as_echo "$gl_cv_func_unlink_honors_slashes" >&6; }
+  case "$gl_cv_func_unlink_honors_slashes" in
+    *no)
+      REPLACE_UNLINK=1
+      ;;
+  esac
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unlink of a parent directory fails as it should" >&5
+$as_echo_n "checking whether unlink of a parent directory fails as it should... " >&6; }
+if ${gl_cv_func_unlink_parent_fails+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$host_os" in
+       darwin*)
+                                                      if {
+              # Use the mktemp program if available. If not available, hide the error
+              # message.
+              tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&
+              test -n "$tmp" && test -d "$tmp"
+            } ||
+            {
+              # Use a simple mkdir command. It is guaranteed to fail if the directory
+              # already exists.  $RANDOM is bash specific and expands to empty in shells
+              # other than bash, ksh and zsh.  Its use does not increase security;
+              # rather, it minimizes the probability of failure in a very cluttered /tmp
+              # directory.
+              tmp=/tmp/gt$$-$RANDOM
+              (umask 077 && mkdir "$tmp")
+            }; then
+           mkdir "$tmp/subdir"
+           GL_SUBDIR_FOR_UNLINK="$tmp/subdir"
+           export GL_SUBDIR_FOR_UNLINK
+           if test "$cross_compiling" = yes; then :
+  # If we don't know, obey --enable-cross-guesses.
+              gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+                #include <stdlib.h>
+                #if HAVE_UNISTD_H
+                # include <unistd.h>
+                #else /* on Windows with MSVC */
+                # include <direct.h>
+                # include <io.h>
+                #endif
+                int main ()
+                {
+                  int result = 0;
+                  if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0)
+                    result |= 1;
+                  else if (unlink ("..") == 0)
+                    result |= 2;
+                  return result;
+                }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_unlink_parent_fails=yes
+else
+  gl_cv_func_unlink_parent_fails=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+           unset GL_SUBDIR_FOR_UNLINK
+           rm -rf "$tmp"
+         else
+           gl_cv_func_unlink_parent_fails="guessing no"
+         fi
+         ;;
+       *)
+         gl_cv_func_unlink_parent_fails="guessing yes"
+         ;;
+     esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_parent_fails" >&5
+$as_echo "$gl_cv_func_unlink_parent_fails" >&6; }
+  case "$gl_cv_func_unlink_parent_fails" in
+    *no)
+      REPLACE_UNLINK=1
+
+$as_echo "#define UNLINK_PARENT_BUG 1" >>confdefs.h
+
+      ;;
+  esac
+
+  if test $REPLACE_UNLINK = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unlink.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_UNLINK=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_UNLINK 1" >>confdefs.h
+
+
+
+
+
 $as_echo "#define USE_UNLOCKED_IO 1" >>confdefs.h
 
 
@@ -31940,8 +37539,8 @@
   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" ;;
+                 # If we don't know, obey --enable-cross-guesses.
+         *)      gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;;
        esac
 
 else
@@ -32107,6 +37706,77 @@
   fi
 
 
+  for ac_func in vasprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VASPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_vasprintf = no; then
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext"
+
+
+  if test $ac_cv_func_vasprintf = yes; then
+    REPLACE_VASPRINTF=1
+  else
+    HAVE_VASPRINTF=0
+  fi
+
+
+
+
+
+
+
+
+  fi
+
+
+
+
+
+
+          GNULIB_VASPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VASPRINTF 1" >>confdefs.h
+
+
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format"
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format"
 
 
 
@@ -32121,7 +37791,20 @@
 
 
 
-  gl_cv_func_vfprintf_posix=no
+
+
+  gl_cv_func_vasprintf_posix=no
+  for ac_func in vasprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VASPRINTF 1
+_ACEOF
+
+fi
+done
+
   case "$gl_cv_func_printf_sizes_c99" in
     *yes)
       case "$gl_cv_func_printf_long_double" in
@@ -32150,9 +37833,11 @@
                                                     *yes)
                                                       case "$gl_cv_func_printf_enomem" in
                                                         *yes)
-                                                          # vfprintf exists and is
-                                                          # already POSIX compliant.
-                                                          gl_cv_func_vfprintf_posix=yes
+                                                          if test $ac_cv_func_vasprintf = yes; then
+                                                            # vasprintf exists and is
+                                                            # already POSIX compliant.
+                                                            gl_cv_func_vasprintf_posix=yes
+                                                          fi
                                                           ;;
                                                       esac
                                                       ;;
@@ -32181,7 +37866,7 @@
       esac
       ;;
   esac
-  if test $gl_cv_func_vfprintf_posix = no; then
+  if test $gl_cv_func_vasprintf_posix = no; then
 
 
 
@@ -32414,15 +38099,23 @@
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext"
 
-  gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext"
 
-  REPLACE_VFPRINTF=1
 
-$as_echo "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h
 
-  :
 
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext"
+
+
+  if test $ac_cv_func_vasprintf = yes; then
+    REPLACE_VASPRINTF=1
+  else
+    HAVE_VASPRINTF=0
   fi
 
 
@@ -32430,15 +38123,9 @@
 
 
 
-          GNULIB_VFPRINTF_POSIX=1
 
 
-
-
-
-$as_echo "#define GNULIB_TEST_VFPRINTF_POSIX 1" >>confdefs.h
-
-
+  fi
 
 
 
@@ -32465,7 +38152,14 @@
 else
 
       if test "$cross_compiling" = yes; then :
-  gl_cv_func_snprintf_size1="guessing yes"
+  case "$host_os" in
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -32523,10 +38217,13 @@
 
          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";;
+                            gl_cv_func_printf_positions="guessing no";;
+           beos*)           gl_cv_func_printf_positions="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_positions="guessing yes";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_positions="guessing no";;
+           *)               gl_cv_func_printf_positions="guessing yes";;
          esac
 
 else
@@ -32584,6 +38281,11 @@
 
   if test $ac_cv_func_vsnprintf = yes; then
     REPLACE_VSNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_vsnprintf = yes; then
+                        REPLACE_VSNPRINTF=1
+    fi
   fi
   :
 
@@ -32649,9 +38351,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -32681,8 +38385,12 @@
            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";;
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_truncation_c99="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -32743,9 +38451,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -32768,8 +38478,12 @@
            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";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";;
          esac
 
 else
@@ -32831,7 +38545,14 @@
 else
 
       if test "$cross_compiling" = yes; then :
-  gl_cv_func_snprintf_size1="guessing yes"
+  case "$host_os" in
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -32884,9 +38605,11 @@
 
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -32908,10 +38631,12 @@
            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.
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on native Windows.
            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";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";;
          esac
 
 else
@@ -33268,6 +38993,11 @@
 
   if test $ac_cv_func_vsnprintf = yes; then
     REPLACE_VSNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_vsnprintf = yes; then
+                        REPLACE_VSNPRINTF=1
+    fi
   fi
   :
 
@@ -33676,36 +39406,40 @@
              if test $ac_cv_header_wchar_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wchar_h
+           gl_cv_next_wchar_h='"'$gl_header'"'
           else
                gl_cv_next_wchar_h='<'wchar.h'>'
              fi
@@ -33747,54 +39481,9 @@
 
 
 
-    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
 
 
 
@@ -33826,6 +39515,8 @@
 
 
 
+
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_wctype_h='<'wctype.h'>'
      else
@@ -33838,36 +39529,40 @@
              if test $ac_cv_header_wctype_h = yes; then
 
 
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+
+  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
+    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'
+  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_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"`'"'
+        gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wctype_h
+           gl_cv_next_wctype_h='"'$gl_header'"'
           else
                gl_cv_next_wctype_h='<'wctype.h'>'
              fi
@@ -33900,7 +39595,7 @@
 else
 
           if test "$cross_compiling" = yes; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
                           #if __GNU_LIBRARY__ == 1
@@ -33957,10 +39652,14 @@
   fi
 
 
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
+  if test $GNULIB_OVERRIDES_WINT_T = 1; then
+    REPLACE_ISWCNTRL=1
+  else
+    case "$gl_cv_func_iswcntrl_works" in
+      *yes) REPLACE_ISWCNTRL=0 ;;
+      *)    REPLACE_ISWCNTRL=1 ;;
+    esac
+  fi
 
 
   if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
@@ -34103,55 +39802,7 @@
   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
 
 
 
@@ -34192,9 +39843,37 @@
     HAVE_DECL_WCWIDTH=0
   fi
 
-  if test $ac_cv_func_wcwidth = yes; then
+  if test $ac_cv_func_wcwidth != yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth is a macro" >&5
+$as_echo_n "checking whether wcwidth is a macro... " >&6; }
+if ${gl_cv_func_wcwidth_macro+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <wchar.h>
+#ifdef wcwidth
+ wchar_header_defines_wcwidth
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "wchar_header_defines_wcwidth" >/dev/null 2>&1; then :
+  gl_cv_func_wcwidth_macro=yes
+else
+  gl_cv_func_wcwidth_macro=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_macro" >&5
+$as_echo "$gl_cv_func_wcwidth_macro" >&6; }
+  fi
+
+  if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then
     HAVE_WCWIDTH=1
-                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5
+                                { $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
@@ -34203,9 +39882,13 @@
         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";;
+                            # Guess yes on glibc systems.
+             *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";;
+                            # Guess yes on musl systems.
+             *-musl*)       gl_cv_func_wcwidth_works="guessing yes";;
+                            # Guess yes on AIX 7 systems.
+             aix[7-9]*)     gl_cv_func_wcwidth_works="guessing yes";;
+             *)             gl_cv_func_wcwidth_works="$gl_cross_guess_normal";;
            esac
 
 else
@@ -34233,7 +39916,7 @@
 int main ()
 {
   int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+  if (setlocale (LC_ALL, "en_US.UTF-8") != NULL)
     {
       if (wcwidth (0x0301) > 0)
         result |= 1;
@@ -34241,6 +39924,10 @@
         result |= 2;
       if (wcwidth (0x200B) > 0)
         result |= 4;
+      if (wcwidth (0xFF1A) == 0)
+        result |= 8;
+      if (wcwidth (0x2202) > 1)
+        result |= 16;
     }
   return result;
 }
@@ -34277,6 +39964,10 @@
 
   gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
 
+
+
+  :
+
   fi
 
 
@@ -34293,6 +39984,126 @@
 
 
 
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of TIOCGWINSZ requires sys/ioctl.h" >&5
+$as_echo_n "checking whether use of TIOCGWINSZ requires sys/ioctl.h... " >&6; }
+if ${gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=no
+
+   if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#        include <sys/ioctl.h>
+#        ifdef TIOCGWINSZ
+           yes
+#        endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=yes
+fi
+rm -f conftest*
+
+   fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h" >&5
+$as_echo "$gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h" >&6; }
+  if test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = yes; then
+
+$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h
+
+  fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of TIOCGWINSZ requires termios.h" >&5
+$as_echo_n "checking whether use of TIOCGWINSZ requires termios.h... " >&6; }
+if ${gl_cv_sys_tiocgwinsz_needs_termios_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_sys_tiocgwinsz_needs_termios_h=no
+
+   if test $ac_cv_sys_posix_termios = yes; then
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#      include <termios.h>
+#      ifdef TIOCGWINSZ
+         yes
+#      endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_sys_tiocgwinsz_needs_termios_h=yes
+fi
+rm -f conftest*
+
+   fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_tiocgwinsz_needs_termios_h" >&5
+$as_echo "$gl_cv_sys_tiocgwinsz_needs_termios_h" >&6; }
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of struct winsize requires sys/ptem.h" >&5
+$as_echo_n "checking whether use of struct winsize requires sys/ptem.h... " >&6; }
+if ${gl_cv_sys_struct_winsize_needs_sys_ptem_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_sys_struct_winsize_needs_sys_ptem_h=yes
+      if test $ac_cv_sys_posix_termios = yes; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <termios.h>
+int
+main ()
+{
+struct winsize x;
+            if (sizeof x > 0) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_sys_struct_winsize_needs_sys_ptem_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      fi
+      if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/ptem.h>
+int
+main ()
+{
+struct winsize x;
+            if (sizeof x > 0) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  gl_cv_sys_struct_winsize_needs_sys_ptem_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_winsize_needs_sys_ptem_h" >&5
+$as_echo "$gl_cv_sys_struct_winsize_needs_sys_ptem_h" >&6; }
+   if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then
+
+$as_echo "#define WINSIZE_IN_PTEM 1" >>confdefs.h
+
+   fi
+
   :
 
 
@@ -34324,6 +40135,2468 @@
   :
 
 
+  gl_gnulib_enabled_chdir=false
+  gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239=false
+  gl_gnulib_enabled_fseterr=false
+  gl_gnulib_enabled_fstat=false
+  gl_gnulib_enabled_getdtablesize=false
+  gl_gnulib_enabled_30838f5439487421042f2225bed3af76=false
+  gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=false
+  gl_gnulib_enabled_ldexp=false
+  gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467=false
+  gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9=false
+  gl_gnulib_enabled_lstat=false
+  gl_gnulib_enabled_malloca=false
+  gl_gnulib_enabled_332607f759618fb73dfc3076748afea7=false
+  gl_gnulib_enabled_rawmemchr=false
+  gl_gnulib_enabled_rmdir=false
+  gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62=false
+  gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70=false
+  gl_gnulib_enabled_stat=false
+  gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c=false
+  gl_gnulib_enabled_strchrnul=false
+  gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72=false
+  gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a=false
+  gl_gnulib_enabled_strnlen=false
+  gl_gnulib_enabled_sys_stat=false
+  gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=false
+  gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440=false
+  gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab=false
+  gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354=false
+  gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef=false
+  gl_gnulib_enabled_48b2271240803e4879464b755748a89d=false
+  func_gl_gnulib_m4code_chdir ()
+  {
+    if ! $gl_gnulib_enabled_chdir; then
+
+
+
+
+
+          GNULIB_CHDIR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_CHDIR 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_chdir=true
+    fi
+  }
+  func_gl_gnulib_m4code_43fe87a341d9b4b93c47c3ad819a5239 ()
+  {
+    if ! $gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239; then
+      gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239=true
+    fi
+  }
+  func_gl_gnulib_m4code_fseterr ()
+  {
+    if ! $gl_gnulib_enabled_fseterr; then
+
+
+
+      if test $ac_cv_func___fseterr = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fseterr.$ac_objext"
+
+      fi
+      gl_gnulib_enabled_fseterr=true
+    fi
+  }
+  func_gl_gnulib_m4code_fstat ()
+  {
+    if ! $gl_gnulib_enabled_fstat; then
+
+
+
+
+  case "$host_os" in
+    mingw* | solaris*)
+                        REPLACE_FSTAT=1
+      ;;
+  esac
+
+
+
+      if test $REPLACE_FSTAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext"
+
+        case "$host_os" in
+          mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext"
+
+            ;;
+        esac
+
+
+  :
+
+      fi
+
+
+
+
+
+          GNULIB_FSTAT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_fstat=true
+      if test $REPLACE_FSTAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_getdtablesize ()
+  {
+    if ! $gl_gnulib_enabled_getdtablesize; then
+
+
+
+
+
+  if test $ac_cv_func_getdtablesize = yes &&
+     test $ac_cv_have_decl_getdtablesize = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5
+$as_echo_n "checking whether getdtablesize works... " >&6; }
+if ${gl_cv_func_getdtablesize_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+                                                   case "$host_os" in
+         vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;;
+         *)
+                                                       if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows
+                  gl_cv_func_getdtablesize_works="guessing no" ;;
+                *) gl_cv_func_getdtablesize_works="guessing yes" ;;
+              esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #include <unistd.h>
+int
+main ()
+{
+int size = getdtablesize();
+                if (dup2 (0, getdtablesize()) != -1)
+                  return 1;
+                if (size != getdtablesize())
+                  return 2;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getdtablesize_works=yes
+else
+  gl_cv_func_getdtablesize_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
+
+           ;;
+       esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5
+$as_echo "$gl_cv_func_getdtablesize_works" >&6; }
+    case "$gl_cv_func_getdtablesize_works" in
+      *yes | "no (limitation)") ;;
+      *) REPLACE_GETDTABLESIZE=1 ;;
+    esac
+  else
+    HAVE_GETDTABLESIZE=0
+  fi
+
+      if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext"
+
+        :
+      fi
+
+
+
+
+
+          GNULIB_GETDTABLESIZE=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_getdtablesize=true
+    fi
+  }
+  func_gl_gnulib_m4code_30838f5439487421042f2225bed3af76 ()
+  {
+    if ! $gl_gnulib_enabled_30838f5439487421042f2225bed3af76; then
+      gl_gnulib_enabled_30838f5439487421042f2225bed3af76=true
+    fi
+  }
+  func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66 ()
+  {
+    if ! $gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66; then
+
+
+  { $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" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanf_works="guessing yes"
+else
+  gl_cv_func_isnanf_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) 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
+      gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=true
+    fi
+  }
+  func_gl_gnulib_m4code_ldexp ()
+  {
+    if ! $gl_gnulib_enabled_ldexp; then
+
+
+  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
+
+
+      gl_gnulib_enabled_ldexp=true
+    fi
+  }
+  func_gl_gnulib_m4code_21ee726a3540c09237a8e70c0baf7467 ()
+  {
+    if ! $gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5
+$as_echo_n "checking whether the compiler supports the __inline keyword... " >&6; }
+if ${gl_cv_c___inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int foo_t;
+           static __inline foo_t foo (void) { return 0; }
+int
+main ()
+{
+return foo ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_c___inline=yes
+else
+  gl_cv_c___inline=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5
+$as_echo "$gl_cv_c___inline" >&6; }
+  if test $gl_cv_c___inline = yes; then
+
+$as_echo "#define HAVE___INLINE 1" >>confdefs.h
+
+  fi
+
+      gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467=true
+    fi
+  }
+  func_gl_gnulib_m4code_2049e887c7e5308faad27b3f894bb8c9 ()
+  {
+    if ! $gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9; then
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS localtime-buffer.$ac_objext"
+
+      gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9=true
+    fi
+  }
+  func_gl_gnulib_m4code_lstat ()
+  {
+    if ! $gl_gnulib_enabled_lstat; then
+
+
+
+
+  if test $ac_cv_func_lstat = yes; then
+
+    case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in
+      solaris* | *no)
+        REPLACE_LSTAT=1
+        ;;
+    esac
+  else
+    HAVE_LSTAT=0
+  fi
+
+      if test $REPLACE_LSTAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext"
+
+        :
+      fi
+
+
+
+
+
+          GNULIB_LSTAT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_lstat=true
+      if test $REPLACE_LSTAT = 1; then
+        func_gl_gnulib_m4code_stat
+      fi
+      if test $REPLACE_LSTAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_malloca ()
+  {
+    if ! $gl_gnulib_enabled_malloca; then
+
+
+
+
+      gl_gnulib_enabled_malloca=true
+    fi
+  }
+  func_gl_gnulib_m4code_332607f759618fb73dfc3076748afea7 ()
+  {
+    if ! $gl_gnulib_enabled_332607f759618fb73dfc3076748afea7; then
+
+
+
+      if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+
+
+
+
+
+
+
+
+  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
+      gl_gnulib_enabled_332607f759618fb73dfc3076748afea7=true
+      func_gl_gnulib_m4code_cdeb0f2aaf9d280baa6526bfa1b07f70
+      func_gl_gnulib_m4code_strchrnul
+    fi
+  }
+  func_gl_gnulib_m4code_rawmemchr ()
+  {
+    if ! $gl_gnulib_enabled_rawmemchr; then
+
+
+
+
+  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
+
+
+
+      gl_gnulib_enabled_rawmemchr=true
+    fi
+  }
+  func_gl_gnulib_m4code_rmdir ()
+  {
+    if ! $gl_gnulib_enabled_rmdir; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rmdir works" >&5
+$as_echo_n "checking whether rmdir works... " >&6; }
+if ${gl_cv_func_rmdir_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  mkdir conftest.dir
+     touch conftest.file
+     if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                           # Guess yes on Linux systems.
+          linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;;
+                           # Guess yes on glibc systems.
+          *-gnu* | gnu*)   gl_cv_func_rmdir_works="guessing yes" ;;
+                           # Guess no on native Windows.
+          mingw*)          gl_cv_func_rmdir_works="guessing no" ;;
+                           # If we don't know, obey --enable-cross-guesses.
+          *)               gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;;
+        esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+           #include <errno.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <direct.h>
+           #endif
+
+int
+main ()
+{
+int result = 0;
+      if (!rmdir ("conftest.file/"))
+        result |= 1;
+      else if (errno != ENOTDIR)
+        result |= 2;
+      if (!rmdir ("conftest.dir/./"))
+        result |= 4;
+      return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_rmdir_works=yes
+else
+  gl_cv_func_rmdir_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
+
+     rm -rf conftest.dir conftest.file
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5
+$as_echo "$gl_cv_func_rmdir_works" >&6; }
+  case "$gl_cv_func_rmdir_works" in
+    *yes) ;;
+    *)
+      REPLACE_RMDIR=1
+      ;;
+  esac
+
+      if test $REPLACE_RMDIR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext"
+
+      fi
+
+
+
+
+
+          GNULIB_RMDIR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_rmdir=true
+      if test $REPLACE_RMDIR = 1; then
+        func_gl_gnulib_m4code_sys_stat
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_9bc5f216d57e231e4834049d67d0db62 ()
+  {
+    if ! $gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62; then
+      gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62=true
+    fi
+  }
+  func_gl_gnulib_m4code_cdeb0f2aaf9d280baa6526bfa1b07f70 ()
+  {
+    if ! $gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70; then
+
+
+
+      gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70=true
+    fi
+  }
+  func_gl_gnulib_m4code_stat ()
+  {
+    if ! $gl_gnulib_enabled_stat; then
+
+
+
+
+  case "$host_os" in
+    mingw*)
+                  REPLACE_STAT=1
+      ;;
+    *)
+                        { $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 Linux systems.
+              linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;;
+                               # Guess yes on glibc systems.
+              *-gnu* | gnu*)   gl_cv_func_stat_file_slash="guessing yes" ;;
+                               # If we don't know, obey --enable-cross-guesses.
+              *)               gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;;
+            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_file_slash in
+        *no)
+          REPLACE_STAT=1
+
+$as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h
+;;
+      esac
+      case $host_os in
+                solaris*)
+          REPLACE_FSTAT=1 ;;
+      esac
+      ;;
+  esac
+
+      if test $REPLACE_STAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext"
+
+        case "$host_os" in
+          mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext"
+
+            ;;
+        esac
+
+
+  :
+
+      fi
+
+
+
+
+
+          GNULIB_STAT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STAT 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_stat=true
+      if test $REPLACE_STAT = 1; then
+        func_gl_gnulib_m4code_malloca
+      fi
+      if test $REPLACE_STAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c ()
+  {
+    if ! $gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c; then
+
+
+
+
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h>
+     #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
+_ACEOF
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5
+$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; }
+if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} 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 HAVE_SYS_TIME_H
+            # include <sys/time.h>
+            #endif
+            #include <time.h>
+            struct timespec ts;
+            struct stat st;
+
+int
+main ()
+{
+
+            st.st_atim = ts;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes
+else
+  ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
+$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
+     if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
+
+$as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h
+
+     fi
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h>
+        #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1
+_ACEOF
+
+
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h>
+           #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
+_ACEOF
+
+
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h>
+              #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1
+_ACEOF
+
+
+fi
+
+fi
+
+fi
+
+fi
+
+
+
+
+
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h>
+     #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1
+_ACEOF
+
+
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h>
+        #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1
+_ACEOF
+
+
+else
+  ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h>
+          #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1
+_ACEOF
+
+
+fi
+
+fi
+
+fi
+
+
+      gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c=true
+    fi
+  }
+  func_gl_gnulib_m4code_strchrnul ()
+  {
+    if ! $gl_gnulib_enabled_strchrnul; then
+
+
+
+
+  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
+
+
+
+      gl_gnulib_enabled_strchrnul=true
+      if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+        func_gl_gnulib_m4code_rawmemchr
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72 ()
+  {
+    if ! $gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72; then
+
+
+      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
+      gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72=true
+    fi
+  }
+  func_gl_gnulib_m4code_1f32594a85e6221ba15f884daeee8c2a ()
+  {
+    if ! $gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a; then
+
+
+
+
+
+
+
+  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
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_STRERROR_R_POSIX 1
+_ACEOF
+
+
+      gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a=true
+      if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+        func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_strnlen ()
+  {
+    if ! $gl_gnulib_enabled_strnlen; then
+
+
+
+
+
+
+  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
+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
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strnlen_working=yes
+else
+  ac_cv_func_strnlen_working=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_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
+
+      if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext"
+
+        :
+      fi
+
+
+
+
+
+          GNULIB_STRNLEN=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h
+
+
+
+      gl_gnulib_enabled_strnlen=true
+    fi
+  }
+  func_gl_gnulib_m4code_sys_stat ()
+  {
+    if ! $gl_gnulib_enabled_sys_stat; then
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     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_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_stat_h
+           gl_cv_next_sys_stat_h='"'$gl_header'"'
+          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
+
+
+
+
+
+
+
+
+    WINDOWS_STAT_TIMESPEC=0
+
+
+
+
+
+
+
+
+      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
+
+
+
+
+
+
+
+      gl_gnulib_enabled_sys_stat=true
+    fi
+  }
+  func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b ()
+  {
+    if ! $gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b; then
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  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_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=true
+      if test $REPLACE_VFPRINTF = 1; then
+        func_gl_gnulib_m4code_fseterr
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_503a4cb75d69c787103d0aa2ab7d8440 ()
+  {
+    if ! $gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440; then
+
+      case "$host_os" in
+        mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS windows-mutex.$ac_objext"
+
+          ;;
+      esac
+      gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440=true
+    fi
+  }
+  func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab ()
+  {
+    if ! $gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab; then
+
+      case "$host_os" in
+        mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS windows-once.$ac_objext"
+
+          ;;
+      esac
+      gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab=true
+    fi
+  }
+  func_gl_gnulib_m4code_f0efff84a70f4afba30902bb8ffe9354 ()
+  {
+    if ! $gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354; then
+
+      case "$host_os" in
+        mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS windows-recmutex.$ac_objext"
+
+          ;;
+      esac
+      gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354=true
+    fi
+  }
+  func_gl_gnulib_m4code_8bb827fe37eaccf1b97feb0c87bc92ef ()
+  {
+    if ! $gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef; then
+
+      case "$host_os" in
+        mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS windows-rwlock.$ac_objext"
+
+          ;;
+      esac
+      gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef=true
+    fi
+  }
+  func_gl_gnulib_m4code_48b2271240803e4879464b755748a89d ()
+  {
+    if ! $gl_gnulib_enabled_48b2271240803e4879464b755748a89d; then
+
+      case "$host_os" in
+        mingw*)
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS windows-tls.$ac_objext"
+
+          ;;
+      esac
+      gl_gnulib_enabled_48b2271240803e4879464b755748a89d=true
+      func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab
+    fi
+  }
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_malloca
+  fi
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_sys_stat
+  fi
+  if test $REPLACE_CLOSE = 1; then
+    func_gl_gnulib_m4code_43fe87a341d9b4b93c47c3ad819a5239
+  fi
+  if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $REPLACE_FOPEN = 1; then
+    func_gl_gnulib_m4code_fstat
+  fi
+  if test $REPLACE_FPRINTF = 1; then
+    func_gl_gnulib_m4code_fseterr
+  fi
+  if test $NEED_LOCALTIME_BUFFER = 1; then
+    func_gl_gnulib_m4code_2049e887c7e5308faad27b3f894bb8c9
+  fi
+  if { test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+    func_gl_gnulib_m4code_ldexp
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_503a4cb75d69c787103d0aa2ab7d8440
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_f0efff84a70f4afba30902bb8ffe9354
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_8bb827fe37eaccf1b97feb0c87bc92ef
+  fi
+  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+    func_gl_gnulib_m4code_30838f5439487421042f2225bed3af76
+  fi
+  if test $REPLACE_OPEN = 1; then
+    func_gl_gnulib_m4code_fstat
+  fi
+  if test $REPLACE_OPEN = 1; then
+    func_gl_gnulib_m4code_stat
+  fi
+  if test $REPLACE_PERROR = 1; then
+    func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+  fi
+  if test $REPLACE_PERROR = 1; then
+    func_gl_gnulib_m4code_1f32594a85e6221ba15f884daeee8c2a
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    func_gl_gnulib_m4code_332607f759618fb73dfc3076748afea7
+  fi
+  if test $REPLACE_PRINTF = 1; then
+    func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b
+  fi
+  if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+    func_gl_gnulib_m4code_stat
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_chdir
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_rmdir
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_9bc5f216d57e231e4834049d67d0db62
+  fi
+  if test $REPLACE_SIGNBIT = 1; then
+    func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66
+  fi
+  if test $REPLACE_STRERROR = 1; then
+    func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+  fi
+  if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then
+    func_gl_gnulib_m4code_strnlen
+  fi
+  if test $HAVE_STRVERSCMP = 0; then
+    func_gl_gnulib_m4code_21ee726a3540c09237a8e70c0baf7467
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_48b2271240803e4879464b755748a89d
+  fi
+  if test $REPLACE_UNLINK = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+
+   if $gl_gnulib_enabled_chdir; then
+  gl_GNULIB_ENABLED_chdir_TRUE=
+  gl_GNULIB_ENABLED_chdir_FALSE='#'
+else
+  gl_GNULIB_ENABLED_chdir_TRUE='#'
+  gl_GNULIB_ENABLED_chdir_FALSE=
+fi
+
+   if $gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239; then
+  gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE=
+  gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_FALSE='#'
+else
+  gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE='#'
+  gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_FALSE=
+fi
+
+   if $gl_gnulib_enabled_fseterr; then
+  gl_GNULIB_ENABLED_fseterr_TRUE=
+  gl_GNULIB_ENABLED_fseterr_FALSE='#'
+else
+  gl_GNULIB_ENABLED_fseterr_TRUE='#'
+  gl_GNULIB_ENABLED_fseterr_FALSE=
+fi
+
+   if $gl_gnulib_enabled_fstat; then
+  gl_GNULIB_ENABLED_fstat_TRUE=
+  gl_GNULIB_ENABLED_fstat_FALSE='#'
+else
+  gl_GNULIB_ENABLED_fstat_TRUE='#'
+  gl_GNULIB_ENABLED_fstat_FALSE=
+fi
+
+   if $gl_gnulib_enabled_getdtablesize; then
+  gl_GNULIB_ENABLED_getdtablesize_TRUE=
+  gl_GNULIB_ENABLED_getdtablesize_FALSE='#'
+else
+  gl_GNULIB_ENABLED_getdtablesize_TRUE='#'
+  gl_GNULIB_ENABLED_getdtablesize_FALSE=
+fi
+
+   if $gl_gnulib_enabled_30838f5439487421042f2225bed3af76; then
+  gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE=
+  gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_FALSE='#'
+else
+  gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE='#'
+  gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_FALSE=
+fi
+
+   if $gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66; then
+  gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_TRUE=
+  gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_FALSE='#'
+else
+  gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_TRUE='#'
+  gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_FALSE=
+fi
+
+   if $gl_gnulib_enabled_ldexp; then
+  gl_GNULIB_ENABLED_ldexp_TRUE=
+  gl_GNULIB_ENABLED_ldexp_FALSE='#'
+else
+  gl_GNULIB_ENABLED_ldexp_TRUE='#'
+  gl_GNULIB_ENABLED_ldexp_FALSE=
+fi
+
+   if $gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467; then
+  gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_TRUE=
+  gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_FALSE='#'
+else
+  gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_TRUE='#'
+  gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_FALSE=
+fi
+
+   if $gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9; then
+  gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_TRUE=
+  gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_FALSE='#'
+else
+  gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_TRUE='#'
+  gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_FALSE=
+fi
+
+   if $gl_gnulib_enabled_lstat; then
+  gl_GNULIB_ENABLED_lstat_TRUE=
+  gl_GNULIB_ENABLED_lstat_FALSE='#'
+else
+  gl_GNULIB_ENABLED_lstat_TRUE='#'
+  gl_GNULIB_ENABLED_lstat_FALSE=
+fi
+
+   if $gl_gnulib_enabled_malloca; then
+  gl_GNULIB_ENABLED_malloca_TRUE=
+  gl_GNULIB_ENABLED_malloca_FALSE='#'
+else
+  gl_GNULIB_ENABLED_malloca_TRUE='#'
+  gl_GNULIB_ENABLED_malloca_FALSE=
+fi
+
+   if $gl_gnulib_enabled_332607f759618fb73dfc3076748afea7; then
+  gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_TRUE=
+  gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_FALSE='#'
+else
+  gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_TRUE='#'
+  gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_FALSE=
+fi
+
+   if $gl_gnulib_enabled_rawmemchr; then
+  gl_GNULIB_ENABLED_rawmemchr_TRUE=
+  gl_GNULIB_ENABLED_rawmemchr_FALSE='#'
+else
+  gl_GNULIB_ENABLED_rawmemchr_TRUE='#'
+  gl_GNULIB_ENABLED_rawmemchr_FALSE=
+fi
+
+   if $gl_gnulib_enabled_rmdir; then
+  gl_GNULIB_ENABLED_rmdir_TRUE=
+  gl_GNULIB_ENABLED_rmdir_FALSE='#'
+else
+  gl_GNULIB_ENABLED_rmdir_TRUE='#'
+  gl_GNULIB_ENABLED_rmdir_FALSE=
+fi
+
+   if $gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62; then
+  gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_TRUE=
+  gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_FALSE='#'
+else
+  gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_TRUE='#'
+  gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_FALSE=
+fi
+
+   if $gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70; then
+  gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_TRUE=
+  gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_FALSE='#'
+else
+  gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_TRUE='#'
+  gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_FALSE=
+fi
+
+   if $gl_gnulib_enabled_stat; then
+  gl_GNULIB_ENABLED_stat_TRUE=
+  gl_GNULIB_ENABLED_stat_FALSE='#'
+else
+  gl_GNULIB_ENABLED_stat_TRUE='#'
+  gl_GNULIB_ENABLED_stat_FALSE=
+fi
+
+   if $gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c; then
+  gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE=
+  gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_FALSE='#'
+else
+  gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE='#'
+  gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_FALSE=
+fi
+
+   if $gl_gnulib_enabled_strchrnul; then
+  gl_GNULIB_ENABLED_strchrnul_TRUE=
+  gl_GNULIB_ENABLED_strchrnul_FALSE='#'
+else
+  gl_GNULIB_ENABLED_strchrnul_TRUE='#'
+  gl_GNULIB_ENABLED_strchrnul_FALSE=
+fi
+
+   if $gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72; then
+  gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_TRUE=
+  gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_FALSE='#'
+else
+  gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_TRUE='#'
+  gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_FALSE=
+fi
+
+   if $gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a; then
+  gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_TRUE=
+  gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_FALSE='#'
+else
+  gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_TRUE='#'
+  gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_FALSE=
+fi
+
+   if $gl_gnulib_enabled_strnlen; then
+  gl_GNULIB_ENABLED_strnlen_TRUE=
+  gl_GNULIB_ENABLED_strnlen_FALSE='#'
+else
+  gl_GNULIB_ENABLED_strnlen_TRUE='#'
+  gl_GNULIB_ENABLED_strnlen_FALSE=
+fi
+
+   if $gl_gnulib_enabled_sys_stat; then
+  gl_GNULIB_ENABLED_sys_stat_TRUE=
+  gl_GNULIB_ENABLED_sys_stat_FALSE='#'
+else
+  gl_GNULIB_ENABLED_sys_stat_TRUE='#'
+  gl_GNULIB_ENABLED_sys_stat_FALSE=
+fi
+
+   if $gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b; then
+  gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_TRUE=
+  gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_FALSE='#'
+else
+  gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_TRUE='#'
+  gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_FALSE=
+fi
+
+   if $gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440; then
+  gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_TRUE=
+  gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_FALSE='#'
+else
+  gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_TRUE='#'
+  gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_FALSE=
+fi
+
+   if $gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab; then
+  gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_TRUE=
+  gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_FALSE='#'
+else
+  gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_TRUE='#'
+  gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_FALSE=
+fi
+
+   if $gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354; then
+  gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_TRUE=
+  gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_FALSE='#'
+else
+  gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_TRUE='#'
+  gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_FALSE=
+fi
+
+   if $gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef; then
+  gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_TRUE=
+  gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_FALSE='#'
+else
+  gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_TRUE='#'
+  gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_FALSE=
+fi
+
+   if $gl_gnulib_enabled_48b2271240803e4879464b755748a89d; then
+  gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_TRUE=
+  gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_FALSE='#'
+else
+  gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_TRUE='#'
+  gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_FALSE=
+fi
+
   # End of code from modules
 
 
@@ -34358,6 +42631,7 @@
 
 
 
+
   LIBBISON_LIBDEPS="$gl_libdeps"
 
   LIBBISON_LTLIBDEPS="$gl_ltlibdeps"
@@ -34368,214 +42642,11 @@
 
 
 
-{ $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
-  { $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
-
-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
-#ifdef HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-
-"
-if test "x$ac_cv_header_sys_resource_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_RESOURCE_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in times
-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 HAVE_TIMES 1
-_ACEOF
-
-fi
-done
-
-
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_have_decl_getrusage" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETRUSAGE $ac_have_decl
-_ACEOF
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_have_decl_times" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TIMES $ac_have_decl
-_ACEOF
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_have_decl_clock" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOCK $ac_have_decl
-_ACEOF
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_have_decl_sysconf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYSCONF $ac_have_decl
-_ACEOF
-
-
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_type_clock_t" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_CLOCK_T 1
-_ACEOF
-
-
-fi
-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
-#if HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
-"
-if test "x$ac_cv_type_struct_tms" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_TMS 1
-_ACEOF
-
-
-fi
-
-
 
 # Gettext.
 # We use gnulib, which is only guaranteed to work properly with the
 # latest Gettext.
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
-
   { $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.
@@ -34591,7 +42662,7 @@
 
 
 
-      GETTEXT_MACRO_VERSION=0.18
+      GETTEXT_MACRO_VERSION=0.19
 
 
 
@@ -34882,7 +42953,6 @@
 
 
 
-
     use_additional=yes
 
   acl_save_prefix="$prefix"
@@ -34892,6 +42962,8 @@
 
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -34912,6 +42984,8 @@
 
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -34919,15 +42993,19 @@
       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
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 
 fi
 
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
       LIBICONV=
   LTLIBICONV=
   INCICONV=
@@ -34973,45 +43051,51 @@
             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
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                                                      if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
+                      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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
                     fi
-                  done
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; 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
               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
+            done
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIBICONV; do
@@ -35028,7 +43112,7 @@
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
                                     if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
@@ -35038,14 +43122,14 @@
                               | 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
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$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
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -35055,7 +43139,7 @@
                     fi
                   fi
                                     if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -35077,7 +43161,8 @@
             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
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
                                 LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
               else
                                                                                 haveit=
@@ -35156,6 +43241,13 @@
                 fi
                 additional_includedir="$basedir/include"
                 ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = 'iconv'; then
+                  LIBICONV_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
             esac
             if test "X$additional_includedir" != "X"; then
                                                                                                                 if test "X$additional_includedir" != "X/usr/include"; then
@@ -35201,12 +43293,14 @@
                             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
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -35225,14 +43319,14 @@
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir"
                           fi
                         fi
                         haveit=
@@ -35246,14 +43340,14 @@
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir"
                           fi
                         fi
                       fi
@@ -35361,7 +43455,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 :
@@ -35766,7 +43859,6 @@
 
 
 
-
     use_additional=yes
 
   acl_save_prefix="$prefix"
@@ -35776,6 +43868,8 @@
 
     eval additional_includedir=\"$includedir\"
     eval additional_libdir=\"$libdir\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -35796,6 +43890,8 @@
 
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
 
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
@@ -35803,15 +43899,19 @@
       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
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 
 fi
 
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
       LIBINTL=
   LTLIBINTL=
   INCINTL=
@@ -35857,45 +43957,51 @@
             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
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                                                      if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
-                      found_so="$dir/$f"
-                      break
+                      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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
                     fi
-                  done
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; 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
               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
+            done
           fi
           if test "X$found_dir" = "X"; then
             for x in $LDFLAGS $LTLIBINTL; do
@@ -35912,7 +44018,7 @@
                 -L*)
                   dir=`echo "X$x" | sed -e 's/^X-L//'`
                                     if test -n "$acl_shlibext"; then
-                    if test -f "$dir/$libname$shrext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
@@ -35922,14 +44028,14 @@
                               | 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
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$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
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -35939,7 +44045,7 @@
                     fi
                   fi
                                     if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -35961,7 +44067,8 @@
             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
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
                                 LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
               else
                                                                                 haveit=
@@ -36040,6 +44147,13 @@
                 fi
                 additional_includedir="$basedir/include"
                 ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = 'intl'; then
+                  LIBINTL_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
             esac
             if test "X$additional_includedir" != "X"; then
                                                                                                                 if test "X$additional_includedir" != "X/usr/include"; then
@@ -36085,12 +44199,14 @@
                             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
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -36109,14 +44225,14 @@
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir"
                           fi
                         fi
                         haveit=
@@ -36130,14 +44246,14 @@
   exec_prefix="$acl_save_exec_prefix"
   prefix="$acl_save_prefix"
 
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir"
                           fi
                         fi
                       fi
@@ -36220,7 +44336,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 :
@@ -36432,6 +44547,8 @@
 
   fi
 
+ac_config_files="$ac_config_files gnulib-po/Makefile.in"
+
 
 # Internationalized parsers.
 ac_config_files="$ac_config_files runtime-po/Makefile.in"
@@ -36447,10 +44564,11 @@
 # Initialize the test suite.
 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/atlocal"
 
 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.
@@ -36493,16 +44611,35 @@
   test -n "$VALGRIND" && break
 done
 
-case $VALGRIND:$host_os in
+# Use something simpler that $host_os to select our suppression file.
+uname=`uname`
+case $VALGRIND:$uname in
   '':*) ;;
-  *:darwin*)
-    # See README-hacking.
-    # VALGRIND+=' --suppressions=$(abs_top_srcdir)/build-aux/darwin11.4.0.valgrind'
+  *:Darwin)
+    # See README-hacking.md.
     VALGRIND=;;
   *:*)
-    VALGRIND_PREBISON="$VALGRIND -q"
-;;
+    suppfile=build-aux/$uname.valgrind
+    if test -f "$srcdir/$suppfile"; then
+      VALGRIND_OPTS_SUPPRESSION="--suppressions=\$(abs_top_srcdir)/$suppfile"
+
+    fi
+    ;;
 esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Valgrind suppression file" >&5
+$as_echo_n "checking Valgrind suppression file... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $suppfile" >&5
+$as_echo "$suppfile" >&6; }
+
+# Whether we cannot run the compiled bison.
+ if test "$cross_compiling" = yes; then
+  CROSS_COMPILING_TRUE=
+  CROSS_COMPILING_FALSE='#'
+else
+  CROSS_COMPILING_TRUE='#'
+  CROSS_COMPILING_FALSE=
+fi
+
 
 
 AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"}
@@ -36510,1007 +44647,13 @@
 # Needed by tests/atlocal.in.
 
 
+ac_config_files="$ac_config_files Makefile po/Makefile.in doc/yacc.1"
 
-  { $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; }
-
-
-
-
-
-
-
-
-
+# Fix LIBOBJS to give the Makefile the right file names.  Otherwise
+# compilation works, but with unexpected file names, so clean rules don't
+# remove the actual files and distcheck fails.
 
-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
@@ -37649,8 +44792,40 @@
   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.
+if test -z "${ENABLE_CXX11_TRUE}" && test -z "${ENABLE_CXX11_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_CXX11\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_CXX14_TRUE}" && test -z "${ENABLE_CXX14_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_CXX14\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_GCC_WARNINGS_TRUE}" && test -z "${ENABLE_GCC_WARNINGS_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_GCC_WARNINGS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_CXX_TRUE}" && test -z "${ENABLE_CXX_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_CXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_D_TRUE}" && test -z "${ENABLE_D_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_D\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_JAVA_TRUE}" && test -z "${ENABLE_JAVA_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_JAVA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_YACC_TRUE}" && test -z "${ENABLE_YACC_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_YACC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FLEX_WORKS_TRUE}" && test -z "${FLEX_WORKS_FALSE}"; then
+  as_fn_error $? "conditional \"FLEX_WORKS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FLEX_CXX_WORKS_TRUE}" && test -z "${FLEX_CXX_WORKS_FALSE}"; then
+  as_fn_error $? "conditional \"FLEX_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
@@ -37672,14 +44847,55 @@
 fi
 
 
+if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_LIMITS_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
+if test -z "${GL_GENERATE_TEXTSTYLE_H_TRUE}" && test -z "${GL_GENERATE_TEXTSTYLE_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_TEXTSTYLE_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.
+
+
+
+  # Tell AC_LIBSOURCES where to find source files like alloca.c.
+
+
+  # This hack originated in bison.  It is required when using non-recursive
+  # automake rules to build from gnulib-provided lib/ sources.  Hence, LIB_DIR
+  # is usually simply "lib".  Those rules use the list of names like "fchdir.o"
+  # and "strstr.o" in gl_LIBOBJS.  With non-recursive make, we must prefix each
+  # such file name with the "lib/" prefix.  See also build-aux/prefix-gnulib-mk.
+  gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , lib/,g'`
+
+  # Listing the names of the variables to prefix is error-prone.
+  # Rather, adjust each AC_SUBST'd variable whose name ends in '_H'
+  # and whose value ends in '.h'.
+  for ac_var in $ac_subst_vars
+  do
+    eval "ac_val=\$$ac_var"
+    case $ac_var:$ac_val in
+      *_H:*.h) eval "$ac_var=lib/\$$ac_var";;
+    esac
+  done
+
+
+if test -z "${RELOCATABLE_VIA_LD_TRUE}" && test -z "${RELOCATABLE_VIA_LD_FALSE}"; then
+  as_fn_error $? "conditional \"RELOCATABLE_VIA_LD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${RELOCATABLE_VIA_WRAPPER_TRUE}" && test -z "${RELOCATABLE_VIA_WRAPPER_FALSE}"; then
+  as_fn_error $? "conditional \"RELOCATABLE_VIA_WRAPPER\" 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
@@ -37694,6 +44910,126 @@
   as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${gl_GNULIB_ENABLED_chdir_TRUE}" && test -z "${gl_GNULIB_ENABLED_chdir_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_chdir\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_TRUE}" && test -z "${gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_fseterr_TRUE}" && test -z "${gl_GNULIB_ENABLED_fseterr_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_fseterr\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_fstat_TRUE}" && test -z "${gl_GNULIB_ENABLED_fstat_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_fstat\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_getdtablesize_TRUE}" && test -z "${gl_GNULIB_ENABLED_getdtablesize_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_getdtablesize\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_TRUE}" && test -z "${gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_TRUE}" && test -z "${gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_ldexp_TRUE}" && test -z "${gl_GNULIB_ENABLED_ldexp_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_ldexp\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_TRUE}" && test -z "${gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_TRUE}" && test -z "${gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_lstat_TRUE}" && test -z "${gl_GNULIB_ENABLED_lstat_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_lstat\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_malloca_TRUE}" && test -z "${gl_GNULIB_ENABLED_malloca_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_malloca\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_TRUE}" && test -z "${gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_rawmemchr_TRUE}" && test -z "${gl_GNULIB_ENABLED_rawmemchr_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_rawmemchr\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_rmdir_TRUE}" && test -z "${gl_GNULIB_ENABLED_rmdir_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_rmdir\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_TRUE}" && test -z "${gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_TRUE}" && test -z "${gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_stat_TRUE}" && test -z "${gl_GNULIB_ENABLED_stat_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_stat\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_TRUE}" && test -z "${gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_strchrnul_TRUE}" && test -z "${gl_GNULIB_ENABLED_strchrnul_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_strchrnul\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_TRUE}" && test -z "${gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_TRUE}" && test -z "${gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_strnlen_TRUE}" && test -z "${gl_GNULIB_ENABLED_strnlen_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_strnlen\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_sys_stat_TRUE}" && test -z "${gl_GNULIB_ENABLED_sys_stat_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_sys_stat\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_TRUE}" && test -z "${gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_TRUE}" && test -z "${gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_TRUE}" && test -z "${gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_TRUE}" && test -z "${gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_TRUE}" && test -z "${gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_TRUE}" && test -z "${gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d_FALSE}"; then
+  as_fn_error $? "conditional \"gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
     gl_libobjs=
     gl_ltlibobjs=
@@ -37726,6 +45062,16 @@
     gltests_LTLIBOBJS=$gltests_ltlibobjs
 
 
+if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then
+  as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+  case $am__api_version in
+    1.14*|1.15*) gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, lib/, lib/lib_libbison_a-,g'`;;
+    *)           gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, lib/, lib/libbison_a-,g'`;;
+  esac
+
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -38123,7 +45469,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GNU Bison $as_me 2.7, which was
+This file was extended by GNU Bison $as_me 3.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -38195,7 +45541,7 @@
 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.7
+GNU Bison config.status 3.5
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -38314,7 +45660,7 @@
 #
 # INIT-COMMANDS
 #
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
 GNUmakefile=$GNUmakefile
 # Capture the value of obsolete ALL_LINGUAS because we need it to compute
     # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
@@ -38335,26 +45681,19 @@
   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" ;;
+    "src/yacc") CONFIG_FILES="$CONFIG_FILES src/yacc" ;;
     "$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" ;;
+    "gnulib-po/Makefile.in") CONFIG_FILES="$CONFIG_FILES gnulib-po/Makefile.in" ;;
     "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;;
@@ -38405,7 +45744,24 @@
 # This happens for instance with `./config.status config.h'.
 if test -n "$CONFIG_FILES"; then
 
-
+if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
+  ac_cs_awk_getline=:
+  ac_cs_awk_pipe_init=
+  ac_cs_awk_read_file='
+      while ((getline aline < (F[key])) > 0)
+	print(aline)
+      close(F[key])'
+  ac_cs_awk_pipe_fini=
+else
+  ac_cs_awk_getline=false
+  ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
+  ac_cs_awk_read_file='
+      print "|#_!!_#|"
+      print "cat " F[key] " &&"
+      '$ac_cs_awk_pipe_init
+  # The final `:' finishes the AND list.
+  ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
+fi
 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
@@ -38423,6 +45779,17 @@
 echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
+# Create commands to substitute file output variables.
+{
+  echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
+  echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' &&
+  echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
+  echo "_ACAWK" &&
+  echo "_ACEOF"
+} >conf$$files.sh &&
+. ./conf$$files.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+rm -f conf$$files.sh
 
 {
   echo "cat >conf$$subs.awk <<_ACEOF" &&
@@ -38499,7 +45866,7 @@
 cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
-
+  \$ac_cs_awk_pipe_init
 }
 {
   line = $ 0
@@ -38517,10 +45884,16 @@
     } else
       len += 1 + keylen
   }
-
+  if (nfields == 3 && !substed) {
+    key = field[2]
+    if (F[key] != "" && line ~ /^[	 ]*@.*@[	 ]*$/) {
+      \$ac_cs_awk_read_file
+      next
+    }
+  }
   print line
 }
-
+\$ac_cs_awk_pipe_fini
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -38867,7 +46240,12 @@
 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" \
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
+if $ac_cs_awk_getline; then
+  $AWK -f "$ac_tmp/subs.awk"
+else
+  $AWK -f "$ac_tmp/subs.awk" | $SHELL
+fi \
   >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
@@ -38984,32 +46362,38 @@
 
   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
+  # Older Autoconf 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
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  case $CONFIG_FILES in #(
+  *\'*) :
+    eval set x "$CONFIG_FILES" ;; #(
+  *) :
+    set x $CONFIG_FILES ;; #(
+  *) :
+     ;;
+esac
   shift
-  for mf
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_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
+    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: 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 ||
-$as_echo X"$mf" |
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$am_mf" : 'X\(//\)[^/]' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -39027,55 +46411,51 @@
 	    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 ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+    am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$am_mf" : 'X\(//\)$' \| \
+	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
 	  }
-	  /^X\(\/\/\)[^/].*/{
+	  /^X\/\(\/\/\)$/{
 	    s//\1/
 	    q
 	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
+	  /^X\/\(\/\).*/{
 	    s//\1/
 	    q
 	  }
 	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
+    { echo "$as_me:$LINENO: cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles" >&5
+   (cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } || am_rc=$?
   done
+  if test $am_rc -ne 0; 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 $? "Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  { am_dirpart=; unset am_dirpart;}
+  { am_filepart=; unset am_filepart;}
+  { am_mf=; unset am_mf;}
+  { am_rc=; unset am_rc;}
+  rm -f conftest-deps.mk
 }
  ;;
+    "src/yacc":F) chmod +x src/yacc ;;
     "po-directories":C)
     for ac_file in $CONFIG_FILES; do
       # Support "outfile[:infile[:infile...]]"
@@ -39086,7 +46466,7 @@
       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_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.
diff --git a/configure.ac b/configure.ac
index e6403f4..7a80eac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 # Configure template for GNU Bison.                   -*-Autoconf-*-
 #
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -18,26 +18,26 @@
 # 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
+# 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]])
+m4_pattern_forbid([^_?(gl_[A-Z]|AX_|BISON_)])
+m4_pattern_allow([^BISON_USE_NLS$])
 
 AC_INIT([GNU Bison],
         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
         [bug-bison@gnu.org])
-AC_SUBST([PACKAGE_COPYRIGHT_YEAR], [2012])
+AC_SUBST([PACKAGE_COPYRIGHT_YEAR], [2019])
 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])
 
-# Automake 1.10.3 and 1.11.1 fix a security flaw discussed here:
+# We use Automake 1.14's %D% and %C%.
 #
-#   http://thread.gmane.org/gmane.comp.sysutils.autotools.announce/131
-#
-# To avoid 1.11, we make 1.11.1 the minimum version.
+# When we move to Automake 1.16, simplify examples/c/reccalc/local.mk.
+# Our CI runs on Xenial, which has only Automake 1.15.
 #
 # We want gnits strictness only when rolling a stable release.  For
 # release candidates, we use version strings like 2.4.3_rc1, but gnits
@@ -45,7 +45,9 @@
 # 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]
+AM_INIT_AUTOMAKE([1.14 dist-xz nostdinc
+                 color-tests parallel-tests
+                 silent-rules]
                  m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[-_]],
                            [gnu], [gnits]))
 AM_SILENT_RULES([yes])
@@ -72,18 +74,57 @@
   [lv_cv_gcc_pragma_push_works=no])
   CFLAGS=$save_CFLAGS])
 
+AC_LANG_PUSH([C++])
+gl_WARN_ADD([-fno-exceptions], [NO_EXCEPTIONS_CXXFLAGS])
+BISON_CXXSTD([98])
+BISON_CXXSTD([03])
+BISON_CXXSTD([11])
+BISON_CXXSTD([14])
+BISON_CXXSTD([17])
+BISON_CXXSTD([2a])
+AM_CONDITIONAL([ENABLE_CXX11], [test x"$CXX11_CXXFLAGS" != x])
+AM_CONDITIONAL([ENABLE_CXX14], [test x"$CXX14_CXXFLAGS" != x])
+AC_LANG_POP([C++])
+
 AC_ARG_ENABLE([gcc-warnings],
-[  --enable-gcc-warnings   turn on lots of GCC warnings (not recommended)],
+[  --enable-gcc-warnings   turn on lots of GCC warnings (not recommended).
+                           Also, issue synclines from the examples/ to
+                           the corresponding source in the Texinfo doc.],
 [case $enable_gcc_warnings in
    yes|no) ;;
    *)  AC_MSG_ERROR([invalid value for --gcc-warnings: $enable_gcc_warnings]);;
  esac],
               [enable_gcc_warnings=no])
+AM_CONDITIONAL([ENABLE_GCC_WARNINGS], [test "$enable_gcc_warnings" = yes])
 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'
+  # -Wno-tautological-constant-out-of-range-compare for Clang 3.3 and
+  # 3.4 on GNU/Linux that choke on intprops.h's INT_MULTIPLY_WRAPV,
+  # etc.
+  warn_common='-Wall -Wextra -Wcast-align
+    -fparse-all-comments -Wdocumentation
+    -Wformat -Wimplicit-fallthrough -Wnull-dereference
+    -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare
+    -Wpointer-arith -Wshadow
+    -Wwrite-strings'
+  warn_c='-Wbad-function-cast -Wstrict-prototypes'
+  warn_cxx='-Wextra-semi -Wnoexcept -Wold-style-cast -Wundefined-func-template
+    -Wweak-vtables'
+  # Warnings for the test suite only.
+  #
+  # -fno-color-diagnostics: Clang's use of colors in the error
+  # messages is confusing the tests looking at the compiler's output
+  # (e.g., synclines.at).
+  #
+  # -Wno-keyword-macro: We use the "#define private public" dirty
+  # trick in the test suite to check some private implementation
+  # details for lalr1.cc.
+  warn_tests='-Wundef -pedantic -Wconversion
+    -Wdeprecated -Wsign-compare -Wsign-conversion
+    -Wtautological-constant-out-of-range-compare
+    -fno-color-diagnostics
+    -Wno-keyword-macro'
+
+
   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
@@ -97,6 +138,11 @@
   # CFLAGS, and restore CFLAGS after the tests.
   save_CFLAGS=$CFLAGS
   gl_WARN_ADD([-Werror=unknown-warning-option], [CFLAGS])
+  # Accept this warning only if it is not too touchy (e.g., clang 3.3
+  # and 3.4).
+  gl_WARN_ADD([-Wunreachable-code], [WARN_CFLAGS],
+              [AC_LANG_PROGRAM([],
+              [[if (sizeof (long) < sizeof (int)) return 1;]])])
   for i in $warn_common $warn_c;
   do
     gl_WARN_ADD([$i], [WARN_CFLAGS])
@@ -105,14 +151,14 @@
 
   # 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])
+  for i in $warn_tests -Wincompatible-pointer-types;
+  do
+    gl_WARN_ADD([$i], [WARN_CFLAGS_TEST])
+  done
   CFLAGS=$save_CFLAGS
   AC_LANG_POP([C])
 
@@ -124,40 +170,69 @@
   do
     gl_WARN_ADD([$i], [WARN_CXXFLAGS])
   done
+  # Accept this warning only if it is not too touchy (e.g., clang 3.3
+  # and 3.4).
+  gl_WARN_ADD([-Wunreachable-code], [WARN_CXXFLAGS],
+              [AC_LANG_PROGRAM([],
+              [[if (sizeof (long) < sizeof (int)) return 1;]])])
   gl_WARN_ADD([-Wzero-as-null-pointer-constant], [WARN_CXXFLAGS],
               [AC_LANG_PROGRAM([], [nullptr])])
+  # Before GCC6, the pragmas don't work well enough to neutralize
+  # this warning.
+  gl_WARN_ADD([-Wuseless-cast], [WARN_CXXFLAGS],
+              [AC_LANG_PROGRAM([], [
+              #if defined __GNUC__ && ! defined __ICC && ! defined __clang__ && __GNUC__ < 6
+              syntax error
+              #endif
+              ])])
   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])
+  for i in $warn_tests;
+  do
+    gl_WARN_ADD([$i], [WARN_CXXFLAGS_TEST])
+  done
+  # Too many compilers complain about Flex generated code.
+  gl_WARN_ADD([-Wno-error], [FLEX_SCANNER_CXXFLAGS])
+  # Clang++ deprecates compiling C.
+  gl_WARN_ADD([-Wno-deprecated], [WNO_DEPRECATED_CXXFLAGS])
   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
 
+# D.
+AC_CHECK_PROGS([DC], [dmd])
+AC_CHECK_PROGS([DCFLAGS], [-g])
+AM_CONDITIONAL([ENABLE_D], [test x"$DC" != x])
+
+# Java.
+gt_JAVACOMP([1.7], [1.7])
+gt_JAVAEXEC
+AM_CONDITIONAL([ENABLE_JAVA], [test x"$CONF_JAVAC" != x && test x"$CONF_JAVA" != x])
+
+
 AC_ARG_ENABLE([yacc],
   [AC_HELP_STRING([--disable-yacc],
      [do not build a yacc command or an -ly library])],
   , [enable_yacc=yes])
-case $enable_yacc in
-yes)
-  YACC_SCRIPT=yacc
-  YACC_LIBRARY=liby.a;;
-*)
-  YACC_SCRIPT=
-  YACC_LIBRARY=;;
-esac
-AC_SUBST([YACC_SCRIPT])
-AC_SUBST([YACC_LIBRARY])
+AM_CONDITIONAL([ENABLE_YACC], [test "$enable_yacc" = yes])
+AC_CONFIG_FILES([src/yacc], [chmod +x src/yacc])
 
 # Checks for programs.
 AM_MISSING_PROG([DOT], [dot])
 AC_PROG_LEX
-$LEX_IS_FLEX || AC_MSG_ERROR([Flex is required])
+if ! "$LEX_IS_FLEX" || test "X$LEX" = X:; then
+  AC_MSG_WARN([bypassing lex because flex is required])
+  LEX=:
+fi
+AM_CONDITIONAL([FLEX_WORKS], [$LEX_IS_FLEX])
+AM_CONDITIONAL([FLEX_CXX_WORKS],
+  [$LEX_IS_FLEX && test $bison_cv_cxx_works = yes])
 AC_PROG_YACC
 AC_PROG_RANLIB
 AC_PROG_GNU_M4
@@ -165,9 +240,6 @@
 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])
@@ -184,15 +256,14 @@
 
 # Checks for library functions.
 AC_CHECK_FUNCS_ONCE([setlocale])
-AM_WITH_DMALLOC
-BISON_PREREQ_TIMEVAR
 
 # 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])
+AM_GNU_GETTEXT_VERSION([0.19])
 BISON_I18N
+AC_CONFIG_FILES([gnulib-po/Makefile.in])
 
 # Internationalized parsers.
 AC_CONFIG_FILES([runtime-po/Makefile.in])
@@ -205,34 +276,47 @@
 
 # Initialize the test suite.
 AC_CONFIG_TESTDIR(tests)
-AC_CONFIG_FILES([tests/Makefile tests/atlocal])
+AC_CONFIG_FILES([tests/atlocal])
 AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
+
 AC_CHECK_PROGS([VALGRIND], [valgrind])
-case $VALGRIND:$host_os in
+# Use something simpler that $host_os to select our suppression file.
+uname=`uname`
+case $VALGRIND:$uname in
   '':*) ;;
-  *:darwin*)
-    # See README-hacking.
-    # VALGRIND+=' --suppressions=$(abs_top_srcdir)/build-aux/darwin11.4.0.valgrind'
+  *:Darwin)
+    # See README-hacking.md.
     VALGRIND=;;
   *:*)
-    AC_SUBST([VALGRIND_PREBISON], ["$VALGRIND -q"]);;
+    suppfile=build-aux/$uname.valgrind
+    if test -f "$srcdir/$suppfile"; then
+      AC_SUBST([VALGRIND_OPTS_SUPPRESSION],
+               ["--suppressions=\$(abs_top_srcdir)/$suppfile"])
+    fi
+    ;;
 esac
+AC_MSG_CHECKING([Valgrind suppression file])
+AC_MSG_RESULT([$suppfile])
+
+# Whether we cannot run the compiled bison.
+AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
 
 AM_MISSING_PROG([AUTOM4TE], [autom4te])
 # Needed by tests/atlocal.in.
 AC_SUBST([GCC])
 
-gt_JAVACOMP([1.3])
-gt_JAVAEXEC
-
 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])
+                 po/Makefile.in
+                 doc/yacc.1])
+
+# Fix LIBOBJS to give the Makefile the right file names.  Otherwise
+# compilation works, but with unexpected file names, so clean rules don't
+# remove the actual files and distcheck fails.
+AC_CONFIG_COMMANDS_PRE([
+  case $am__api_version in
+    1.14*|1.15*) gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, lib/, lib/lib_libbison_a-,g'`;;
+    *)           gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, lib/, lib/libbison_a-,g'`;;
+  esac
+])
+
 AC_OUTPUT
diff --git a/darwin-lib/alloca.h b/darwin-lib/alloca.h
deleted file mode 100644
index a0d618b..0000000
--- a/darwin-lib/alloca.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 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
deleted file mode 100644
index f0dbac7..0000000
--- a/darwin-lib/arg-nonnull.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* _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
deleted file mode 100644
index 3fd6322..0000000
--- a/darwin-lib/c++defs.h
+++ /dev/null
@@ -1,255 +0,0 @@
-#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
deleted file mode 100644
index 57b2480..0000000
--- a/darwin-lib/config.h
+++ /dev/null
@@ -1,2268 +0,0 @@
-/* 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
deleted file mode 100644
index 2a32931..0000000
--- a/darwin-lib/configmake.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* 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
deleted file mode 100644
index 0e13f3e..0000000
--- a/darwin-lib/fcntl.h
+++ /dev/null
@@ -1,659 +0,0 @@
-/* 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
deleted file mode 100644
index 24da809..0000000
--- a/darwin-lib/getopt.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/* 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
deleted file mode 100644
index 5a53dba..0000000
--- a/darwin-lib/inttypes.h
+++ /dev/null
@@ -1,1442 +0,0 @@
-/* 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
deleted file mode 100644
index a79e9d7..0000000
--- a/darwin-lib/math.h
+++ /dev/null
@@ -1,2587 +0,0 @@
-/* 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
deleted file mode 100644
index 067de9a..0000000
--- a/darwin-lib/sched.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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
deleted file mode 100644
index a39383f..0000000
--- a/darwin-lib/signal.h
+++ /dev/null
@@ -1,759 +0,0 @@
-/* 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
deleted file mode 100644
index 9182ed2..0000000
--- a/darwin-lib/spawn.h
+++ /dev/null
@@ -1,1193 +0,0 @@
-/* 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
deleted file mode 100644
index df6f556..0000000
--- a/darwin-lib/stdint.h
+++ /dev/null
@@ -1,637 +0,0 @@
-/* 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
deleted file mode 100644
index eb8c074..0000000
--- a/darwin-lib/stdio.h
+++ /dev/null
@@ -1,1657 +0,0 @@
-/* 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
deleted file mode 100644
index 12c9ac1..0000000
--- a/darwin-lib/stdlib.h
+++ /dev/null
@@ -1,1259 +0,0 @@
-/* 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
deleted file mode 100644
index a45c895..0000000
--- a/darwin-lib/string.h
+++ /dev/null
@@ -1,1341 +0,0 @@
-/* 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
deleted file mode 100644
index ddb169a..0000000
--- a/darwin-lib/sys/stat.h
+++ /dev/null
@@ -1,1040 +0,0 @@
-/* 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
deleted file mode 100644
index 5051902..0000000
--- a/darwin-lib/sys/types.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 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
deleted file mode 100644
index c6c63f3..0000000
--- a/darwin-lib/sys/wait.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* 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
deleted file mode 100644
index 9bb0188..0000000
--- a/darwin-lib/time.h
+++ /dev/null
@@ -1,560 +0,0 @@
-/* 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
deleted file mode 100644
index 5c4e28d..0000000
--- a/darwin-lib/unistd.h
+++ /dev/null
@@ -1,1853 +0,0 @@
-/* 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
deleted file mode 100644
index b85b07a..0000000
--- a/darwin-lib/unitypes.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 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
deleted file mode 100644
index c6466b2..0000000
--- a/darwin-lib/uniwidth.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 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
deleted file mode 100644
index 9aebda4..0000000
--- a/darwin-lib/warn-on-use.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#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
deleted file mode 100644
index df11351..0000000
--- a/darwin-lib/wchar.h
+++ /dev/null
@@ -1,1340 +0,0 @@
-/* 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
deleted file mode 100644
index 196e4ea..0000000
--- a/darwin-lib/wctype.h
+++ /dev/null
@@ -1,806 +0,0 @@
-/* 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.am b/data/Makefile.am
deleted file mode 100644
index 1fd10b4..0000000
--- a/data/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-## 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 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-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 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
deleted file mode 100644
index aae8326..0000000
--- a/data/Makefile.in
+++ /dev/null
@@ -1,1639 +0,0 @@
-# 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 = data
-DIST_COMMON = README $(dist_m4sugar_DATA) $(dist_pkgdata_DATA) \
-	$(dist_xslt_DATA) $(srcdir)/Makefile.am $(srcdir)/Makefile.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 =
-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 = 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@
-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@
-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 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:
-$(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 data/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnits 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
-$(am__aclocal_m4_deps):
-install-dist_m4sugarDATA: $(dist_m4sugar_DATA)
-	@$(NORMAL_INSTALL)
-	@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; \
-	  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)'; 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)
-	@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; \
-	  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)'; 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)
-	@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 $(DATA)
-installdirs:
-	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
-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-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
-	-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-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-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-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.
-.NOEXPORT:
diff --git a/data/README b/data/README
deleted file mode 100644
index e78c1cf..0000000
--- a/data/README
+++ /dev/null
@@ -1,70 +0,0 @@
--*- outline -*-
-
-This directory contains data needed by Bison.
-
-* 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.
-
-- 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, 2008-2012 Free Software Foundation, Inc.
-
-This file is part of GNU Bison.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the 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/data/README.md b/data/README.md
new file mode 100644
index 0000000..94e9891
--- /dev/null
+++ b/data/README.md
@@ -0,0 +1,192 @@
+This directory contains data needed by Bison.
+
+# Directory content
+## 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.
+
+- 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.
+
+# Implementation note about the skeletons
+
+"Skeleton" in Bison parlance means "backend": a skeleton is fed by the bison
+executable with LR tables, facts about the symbols, etc. and they generate
+the output (say parser.cc, parser.hh, location.hh, etc.).  They are only in
+charge of generating the parser and its auxiliary files, they do not
+generate the XML output, the parser.output reports, nor the graphical
+rendering.
+
+The bits of information passing from bison to the backend is named
+"muscles".  Muscles are passed to M4 via its standard input: it's a set of
+m4 definitions.  To see them, use `--trace=muscles`.
+
+Except for muscles, whose names are generated by bison, the skeletons have
+no constraint at all on the macro names: there is no technical/theoretical
+limitation, as long as you generate the output, you can do what you want.
+However, of course, that would be a bad idea if, say, the C and C++
+skeletons used different approaches and had completely different
+implementations.  That would be a maintenance nightmare.
+
+Below, we document some of the macros that we use in several of the
+skeletons.  If you are to write a new skeleton, please, implement them for
+your language.  Overall, be sure to follow the same patterns as the existing
+skeletons.
+
+## Symbols
+
+### `b4_symbol(NUM, FIELD)`
+In order to unify the handling of the various aspects of symbols (tag, type
+name, whether terminal, etc.), bison.exe defines one macro per (token,
+field), where field can `has_id`, `id`, etc.: see
+`prepare_symbols_definitions()` in `src/output.c`.
+
+The macro `b4_symbol(NUM, FIELD)` gives access to the following FIELDS:
+
+- `has_id`: 0 or 1.
+
+  Whether the symbol has an id.
+
+- `id`: string
+  If has_id, the id (prefixed by api.token.prefix if defined), otherwise
+  defined as empty.  Guaranteed to be usable as a C identifier.
+
+- `tag`: string.
+  A representation of the symbol.  Can be 'foo', 'foo.id', '"foo"' etc.
+
+- `user_number`: integer
+  The external number as used by yylex.  Can be ASCII code when a character,
+  some number chosen by bison, or some user number in the case of
+  %token FOO <NUM>.  Corresponds to yychar in yacc.c.
+
+- `is_token`: 0 or 1
+  Whether this is a terminal symbol.
+
+- `number`: integer
+  The internal number (computed from the external number by yytranslate).
+  Corresponds to yytoken in yacc.c.  This is the same number that serves as
+  key in b4_symbol(NUM, FIELD).
+
+  In bison, symbols are first assigned increasing numbers in order of
+  appearance (but tokens first, then nterms).  After grammar reduction,
+  unused nterms are then renumbered to appear last (i.e., first tokens, then
+  used nterms and finally unused nterms).  This final number NUM is the one
+  contained in this field, and it is the one used as key in `b4_symbol(NUM,
+  FIELD)`.
+
+  The code of the rule actions, however, is emitted before we know what
+  symbols are unused, so they use the original numbers.  To avoid confusion,
+  they actually use "orig NUM" instead of just "NUM".  bison also emits
+  definitions for `b4_symbol(orig NUM, number)` that map from original
+  numbers to the new ones.  `b4_symbol` actually resolves `orig NUM` in the
+  other case, i.e., `b4_symbol(orig 42, tag)` would return the tag of the
+  symbols whose original number was 42.
+
+- `has_type`: 0, 1
+  Whether has a semantic value.
+
+- `type_tag`: string
+  When api.value.type=union, the generated name for the union member.
+  yytype_INT etc. for symbols that has_id, otherwise yytype_1 etc.
+
+- `type`
+  If it has a semantic value, its type tag, or, if variant are used,
+  its type.
+  In the case of api.value.type=union, type is the real type (e.g. int).
+
+- `has_printer`: 0, 1
+- `printer`: string
+- `printer_file`: string
+- `printer_line`: integer
+- `printer_loc`: location
+  If the symbol has a printer, everything about it.
+
+- `has_destructor`, `destructor`, `destructor_file`, `destructor_line`, `destructor_loc`
+  Likewise.
+
+### `b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])`
+Expansion of $$, $1, $<TYPE-TAG>3, etc.
+
+The semantic value from a given VAL.
+- `VAL`: some semantic value storage (typically a union).  e.g., `yylval`
+- `SYMBOL-NUM`: the symbol number from which we extract the type tag.
+- `TYPE-TAG`, the user forced the `<TYPE-TAG>`.
+
+The result can be used safely, it is put in parens to avoid nasty precedence
+issues.
+
+### `b4_lhs_value(SYMBOL-NUM, [TYPE])`
+Expansion of `$$` or `$<TYPE>$`, for symbol `SYMBOL-NUM`.
+
+### `b4_rhs_data(RULE-LENGTH, POS)`
+The data corresponding to the symbol `#POS`, where the current rule has
+`RULE-LENGTH` symbols on RHS.
+
+### `b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])`
+Expansion of `$<TYPE>POS`, where the current rule has `RULE-LENGTH` symbols
+on RHS.
+
+-----
+
+Local Variables:
+mode: markdown
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2002, 2008-2015, 2018-2019 Free Software Foundation, Inc.
+
+This file is part of GNU Bison.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the 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/data/bison-default.css b/data/bison-default.css
new file mode 100644
index 0000000..68df166
--- /dev/null
+++ b/data/bison-default.css
@@ -0,0 +1,31 @@
+/* Default styling rules for Bison when doing terminal output.
+   Copyright (C) 2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* This is an experimental feature.  The class names may change in the
+   future.  */
+
+/* Diagnostics.  */
+.warning   { color: purple; }
+.error     { color: red; }
+.note      { color: cyan; }
+
+.fixit-insert { color: green; }
+
+/* Semantic values in Bison's own parser traces.  */
+.value     { color: green; }
+
+/* "Sections" in traces (--trace).  */
+.trace0    { color: green; }
diff --git a/data/bison.m4 b/data/bison.m4
deleted file mode 100644
index a24b162..0000000
--- a/data/bison.m4
+++ /dev/null
@@ -1,610 +0,0 @@
-                                                            -*- 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++.m4 b/data/c++.m4
deleted file mode 100644
index 8b98b8c..0000000
--- a/data/c++.m4
+++ /dev/null
@@ -1,205 +0,0 @@
-                                                            -*- Autoconf -*-
-
-# 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_include(b4_pkgdatadir/[c.m4])
-
-## ---------------- ##
-## Default values.  ##
-## ---------------- ##
-
-# Default parser class name.
-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)
-# -----------------------------------------------------
-# Output the definition of the tokens as enums.
-m4_define([b4_token_enums],
-[/* Tokens.  */
-   enum yytokentype {
-m4_map_sep([     b4_token_enum], [,
-],
-           [$@])
-   };
-])
-
-
-
-
-## ----------------- ##
-## Semantic Values.  ##
-## ----------------- ##
-
-
-# b4_lhs_value([TYPE])
-# --------------------
-# Expansion of $<TYPE>$.
-m4_define([b4_lhs_value],
-[(yyval[]m4_ifval([$1], [.$1]))])
-
-
-# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
-# --------------------------------------
-# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
-# symbols on RHS.
-m4_define([b4_rhs_value],
-[(yysemantic_stack_@{($1) - ($2)@}m4_ifval([$3], [.$3]))])
-
-# 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],
-[(yylocation_stack_@{($1) - ($2)@})])
-
-
-# b4_parse_param_decl
-# -------------------
-# Extra formal arguments of the constructor.
-# Change the parameter names from "foo" into "foo_yyarg", so that
-# there is no collision bw the user chosen attribute name, and the
-# argument name in the constructor.
-m4_define([b4_parse_param_decl],
-[m4_ifset([b4_parse_param],
-          [m4_map_sep([b4_parse_param_decl_1], [, ], [b4_parse_param])])])
-
-m4_define([b4_parse_param_decl_1],
-[$1_yyarg])
-
-
-
-# b4_parse_param_cons
-# -------------------
-# 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], [,
-      ], [$@])])
-m4_define([b4_cc_constructor_call],
-	  [$2 ($2_yyarg)])
-
-# b4_parse_param_vars
-# -------------------
-# Extra instance variables.
-m4_define([b4_parse_param_vars],
-          [m4_ifset([b4_parse_param],
-		    [
-    /* User arguments.  */
-b4_cc_var_decls(b4_parse_param)])])
-m4_define([b4_cc_var_decls],
-	  [m4_map_sep([b4_cc_var_decl], [
-], [$@])])
-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
deleted file mode 100644
index c2abce7..0000000
--- a/data/c-like.m4
+++ /dev/null
@@ -1,44 +0,0 @@
-                                                            -*- 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.m4 b/data/c.m4
deleted file mode 100644
index dc3d303..0000000
--- a/data/c.m4
+++ /dev/null
@@ -1,714 +0,0 @@
-                                                            -*- Autoconf -*-
-
-# C 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/>.
-
-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_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
-
-/* Bison version.  */
-#define YYBISON_VERSION "]b4_version["
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME ]b4_skeleton[]m4_ifdef([b4_pure_flag], [[
-
-/* Pure parsers.  */
-#define YYPURE ]b4_pure_flag])[]m4_ifdef([b4_push_flag], [[
-
-/* Push parsers.  */
-#define YYPUSH ]b4_push_flag])[]m4_ifdef([b4_pull_flag], [[
-
-/* Pull parsers.  */
-#define YYPULL ]b4_pull_flag])[
-]])
-
-
-## ---------------- ##
-## Default values.  ##
-## ---------------- ##
-
-# 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],
-[m4_ifset([b4_parse_param], [, b4_c_args(b4_parse_param)])])
-
-
-# b4_parse_param
-# --------------
-# If defined, b4_parse_param arrives double quoted, but below we prefer
-# it to be single quoted.
-m4_define([b4_parse_param],
-b4_parse_param)
-
-
-# b4_parse_param_for(DECL, FORMAL, BODY)
-# ---------------------------------------
-# Iterate over the user parameters, binding the declaration to DECL,
-# 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_unquote(m4_car($1_$2)))dnl
-m4_pushdef([$2], m4_shift($1_$2))dnl
-$3[]dnl
-m4_popdef([$2])dnl
-m4_popdef([$1])dnl
-])])
-
-# b4_parse_param_use
-# ------------------
-# `YYUSE' all the parse-params.
-m4_define([b4_parse_param_use],
-[b4_parse_param_for([Decl], [Formal], [  YYUSE (Formal);
-])dnl
-])
-
-
-## ------------ ##
-## 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($@,      [0],   [255]), [1], [unsigned char],
-       b4_ints_in($@,   [-128],   [127]), [1], [signed char],
-
-       b4_ints_in($@,      [0], [65535]), [1], [unsigned short int],
-       b4_ints_in($@, [-32768], [32767]), [1], [short int],
-
-       m4_eval([0 <= $1]),                [1], [unsigned int],
-
-                                               [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_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)))])])
-
-
-## ---------##
-## Values.  ##
-## ---------##
-
-
-# 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])
-
-
-
-## ------------------------- ##
-## Assigning token numbers.  ##
-## ------------------------- ##
-
-# b4_token_define(TOKEN-NAME, TOKEN-NUMBER)
-# -----------------------------------------
-# Output the definition of this token as #define.
-m4_define([b4_token_define],
-[#define $1 $2
-])
-
-
-# b4_token_defines(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
-# -------------------------------------------------------
-# Output the definition of the tokens (if there are) as #defines.
-m4_define([b4_token_defines],
-[m4_if([$#$1], [1], [],
-[/* Tokens.  */
-m4_map([b4_token_define], [$@])])
-])
-
-
-# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
-# ---------------------------------------
-# Output the definition of this token as an enum.
-m4_define([b4_token_enum],
-[$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.  */
-#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 ]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 any) as enums and, if POSIX
-# Yacc is enabled, as #defines.
-m4_define([b4_token_enums_defines],
-[b4_token_enums($@)b4_yacc_if([b4_token_defines($@)], [])
-])
-
-
-
-## --------------------------------------------- ##
-## Defining C functions in both K&R and ANSI-C.  ##
-## --------------------------------------------- ##
-
-
-# b4_modern_c
-# -----------
-# A predicate useful in #if to determine whether C is ancient or modern.
-#
-# If __STDC__ is defined, the compiler is modern.  IBM xlc 7.0 when run
-# as 'cc' doesn't define __STDC__ (or __STDC_VERSION__) for pedantic
-# reasons, but it defines __C99__FUNC__ so check that as well.
-# Microsoft C normally doesn't define these macros, but it defines _MSC_VER.
-# Consider a C++ compiler to be modern if it defines __cplusplus.
-#
-m4_define([b4_c_modern],
-  [[(defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)]])
-
-# b4_c_function_def(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
-# ----------------------------------------------------------
-# Declare the function NAME.
-m4_define([b4_c_function_def],
-[#if b4_c_modern
-b4_c_ansi_function_def($@)
-#else
-$2
-$1 (b4_c_knr_formal_names(m4_shift2($@)))
-b4_c_knr_formal_decls(m4_shift2($@))
-#endif[]dnl
-])
-
-
-# b4_c_ansi_function_def(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
-# ---------------------------------------------------------------
-# Declare the function NAME in ANSI.
-m4_define([b4_c_ansi_function_def],
-[$2
-$1 (b4_c_ansi_formals(m4_shift2($@)))[]dnl
-])
-
-
-# b4_c_ansi_formals([DECL1, NAME1], ...)
-# --------------------------------------
-# Output the arguments ANSI-C definition.
-m4_define([b4_c_ansi_formals],
-[m4_if([$#], [0], [void],
-       [$#$1], [1], [void],
-               [m4_map_sep([b4_c_ansi_formal], [, ], [$@])])])
-
-m4_define([b4_c_ansi_formal],
-[$1])
-
-
-# b4_c_knr_formal_names([DECL1, NAME1], ...)
-# ------------------------------------------
-# Output the argument names.
-m4_define([b4_c_knr_formal_names],
-[m4_map_sep([b4_c_knr_formal_name], [, ], [$@])])
-
-m4_define([b4_c_knr_formal_name],
-[$2])
-
-
-# b4_c_knr_formal_decls([DECL1, NAME1], ...)
-# ------------------------------------------
-# 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;])
-
-
-
-## ------------------------------------------------------------ ##
-## Declaring (prototyping) C functions in both K&R and ANSI-C.  ##
-## ------------------------------------------------------------ ##
-
-
-# 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 in both K&R and ANSI C.
-m4_define([b4_c_function_decl],
-[#if defined __STDC__ || defined __cplusplus
-b4_c_ansi_function_decl($@)
-#else
-$2 $1 ();
-#endif[]dnl
-])
-
-
-
-## --------------------- ##
-## Calling C functions.  ##
-## --------------------- ##
-
-
-# b4_c_function_call(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
-# -----------------------------------------------------------
-# Call the function NAME with arguments NAME1, NAME2 etc.
-m4_define([b4_c_function_call],
-[$1 (b4_c_args(m4_shift2($@)))[]dnl
-])
-
-
-# b4_c_args([DECL1, NAME1], ...)
-# ------------------------------
-# Output the arguments NAME1, NAME2...
-m4_define([b4_c_args],
-[m4_map_sep([b4_c_arg], [, ], [$@])])
-
-m4_define([b4_c_arg],
-[$2])
-
-
-## ----------- ##
-## Synclines.  ##
-## ----------- ##
-
-# b4_sync_start(LINE, FILE)
-# -----------------------
-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],
-[b4_dollar_pushdef([(*yyvaluep)], [$6], [(*yylocationp)])dnl
-      case $4: /* $3 */
-b4_syncline([$2], [$1])
-        $5;
-b4_syncline([@oline@], [@ofile@])
-        break;
-b4_dollar_popdef[]dnl
-])
-
-
-# b4_yydestruct_generate(FUNCTION-DECLARATOR)
-# -------------------------------------------
-# Generate the "yydestruct" function, which declaration is issued using
-# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C
-# or "b4_c_function_def" for K&R.
-m4_define_default([b4_yydestruct_generate],
-[[/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-]$1([yydestruct],
-    [static void],
-    [[const char *yymsg],    [yymsg]],
-    [[int yytype],           [yytype]],
-    [[YYSTYPE *yyvaluep],    [yyvaluep]][]dnl
-b4_locations_if(            [, [[YYLTYPE *yylocationp], [yylocationp]]])[]dnl
-m4_ifset([b4_parse_param], [, b4_parse_param]))[
-{
-  YYUSE (yyvaluep);
-]b4_locations_if([  YYUSE (yylocationp);
-])dnl
-b4_parse_param_use[]dnl
-[
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
-      default:
-        break;
-    }
-}]dnl
-])
-
-
-# b4_yy_symbol_print_generate(FUNCTION-DECLARATOR)
-# ------------------------------------------------
-# Generate the "yy_symbol_print" function, which declaration is issued using
-# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C
-# or "b4_c_function_def" for K&R.
-m4_define_default([b4_yy_symbol_print_generate],
-[[
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-]$1([yy_symbol_value_print],
-    [static void],
-               [[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);
-])dnl
-b4_parse_param_use[]dnl
-[# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
-[      default:
-        break;
-    }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-]$1([yy_symbol_print],
-    [static void],
-               [[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]))[
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-]b4_locations_if([  YY_LOCATION_PRINT (yyoutput, *yylocationp);
-  YYFPRINTF (yyoutput, ": ");
-])dnl
-[  yy_symbol_value_print (yyoutput, yytype, yyvaluep]dnl
-b4_locations_if([, yylocationp])[]b4_user_args[);
-  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.cc b/data/glr.cc
deleted file mode 100644
index 49b4fa1..0000000
--- a/data/glr.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-                                                                    -*- C -*-
-
-# C++ GLR 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/>.
-
-
-# This skeleton produces a C++ class that encapsulates a C glr parser.
-# This is in order to reduce the maintenance burden.  The glr.c
-# skeleton is clean and pure enough so that there are no real
-# problems.  The C++ interface is the same as that of lalr1.cc.  In
-# fact, glr.c can replace yacc.c without the user noticing any
-# difference, and similarly for glr.cc replacing lalr1.cc.
-#
-# The passing of parse-params
-#
-#   The additional arguments are stored as members of the parser
-#   object, yyparser.  The C routines need to carry yyparser
-#   throughout the C parser; that easy: just let yyparser become an
-#   additional parse-param.  But because the C++ skeleton needs to
-#   know the "real" original parse-param, we save them
-#   (b4_parse_param_orig).  Note that b4_parse_param is overquoted
-#   (and c.m4 strips one level of quotes).  This is a PITA, and
-#   explains why there are so many levels of quotes.
-#
-# The locations
-#
-#   We use location.cc just like lalr1.cc, but because glr.c stores
-#   the locations in a (C++) union, the position and location classes
-#   must not have a constructor.  Therefore, contrary to lalr1.cc, we
-#   must not define "b4_location_constructors".  As a consequence the
-#   user must initialize the first positions (in particular the
-#   filename member).
-
-# We require a pure interface using locations.
-m4_define([b4_locations_flag], [1])
-m4_define([b4_pure_flag],      [1])
-
-# The header is mandatory.
-b4_defines_if([],
-              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
-
-m4_include(b4_pkgdatadir/[c++.m4])
-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]))
-
-
-# b4_yy_symbol_print_generate
-# ---------------------------
-# Bypass the default implementation to generate the "yy_symbol_print"
-# and "yy_symbol_value_print" functions.
-m4_define([b4_yy_symbol_print_generate],
-[[
-/*--------------------.
-| Print this symbol.  |
-`--------------------*/
-
-]b4_c_ansi_function_def([yy_symbol_print],
-    [static void],
-    [[FILE *],               []],
-    [[int yytype],           [yytype]],
-    [[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])]))])])[
-
-# 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],
-    [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
-                        [yylocationp]],
-    b4_parse_param,
-    [[const char* msg], [msg]])])
-
-
-# Hijack the epilogue to define implementations (yyerror, parser member
-# functions etc.).
-m4_append([b4_epilogue],
-[b4_syncline([@oline@], [@ofile@])[
-/*------------------.
-| Report an error.  |
-`------------------*/
-
-]b4_c_ansi_function_def([yyerror],
-    [static void],
-    [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
-                        [yylocationp]],
-    b4_parse_param,
-    [[const char* msg], [msg]])[
-{
-]b4_parse_param_use[]dnl
-[  yyparser.error (*yylocationp, msg);
-}
-
-
-]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[)]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[
-  {
-  }
-
-  ]b4_parser_class_name::~b4_parser_class_name[ ()
-  {
-  }
-
-  int
-  ]b4_parser_class_name[::parse ()
-  {
-    return ::yyparse (*this]b4_user_args[);
-  }
-
-#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)
-  {
-    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;
-      }
-  }
-
-
-  void
-  ]b4_parser_class_name[::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_ << ')';
-  }
-
-  std::ostream&
-  ]b4_parser_class_name[::debug_stream () const
-  {
-    return *yycdebug_;
-  }
-
-  void
-  ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
-  {
-    yycdebug_ = &o;
-  }
-
-
-  ]b4_parser_class_name[::debug_level_type
-  ]b4_parser_class_name[::debug_level () const
-  {
-    return yydebug;
-  }
-
-  void
-  ]b4_parser_class_name[::set_debug_level (debug_level_type l)
-  {
-    // Actually, it is yydebug which is really used.
-    yydebug = l;
-  }
-
-#endif
-]m4_popdef([b4_parse_param])dnl
-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],
-            [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]],]
-m4_defn([b4_parse_param]))],
-[m4_pushdef([b4_parse_param],
-            [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]]])
-])
-m4_include(b4_pkgdatadir/[glr.c])
-m4_popdef([b4_parse_param])
-
-b4_output_begin([b4_spec_defines_file])
-b4_copyright([Skeleton interface for Bison GLR parsers in C++],
-             [2002-2006, 2009-2012])[
-
-/* C++ GLR parser skeleton written by Akim Demaille.  */
-
-]b4_cpp_guard_open([b4_spec_defines_file])[
-
-]b4_percent_code_get([[requires]])[
-
-# include <string>
-# include <iostream>
-]b4_percent_define_ifdef([[api.location.type]], [],
-                         [[# include "location.hh"]])[
-
-]b4_YYDEBUG_define[
-
-]b4_namespace_open[
-  /// A Bison parser.
-  class ]b4_parser_class_name[
-  {
-  public:
-    /// Symbol semantic values.
-# ifndef ]b4_api_PREFIX[STYPE
-]m4_ifdef([b4_stype],
-[    union 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 ]b4_api_PREFIX[STYPE semantic_type;
-# endif
-    /// Symbol locations.
-    typedef ]b4_percent_define_get([[api.location.type]],
-                                   [[location]])[ location_type;
-    /// Tokens.
-    struct token
-    {
-      ]b4_token_enums(b4_tokens)[
-    };
-    /// Token type.
-    typedef token::yytokentype token_type;
-
-    /// Build a parser object.
-    ]b4_parser_class_name[ (]b4_parse_param_decl[);
-    virtual ~]b4_parser_class_name[ ();
-
-    /// Parse.
-    /// \returns  0 iff parsing succeeded.
-    virtual int parse ();
-
-    /// 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);
-
-  private:
-
-  public:
-    /// 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);
-  private:
-
-# 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);
-    /// \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);
-  private:
-    /* Debugging.  */
-    std::ostream* yycdebug_;
-# endif
-
-]b4_parse_param_vars[
-  };
-
-]dnl Redirections for glr.c.
-b4_percent_define_flag_if([[global_tokens_and_yystype]],
-[b4_token_defines(b4_tokens)])
-[
-#ifndef ]b4_api_PREFIX[STYPE
-# define ]b4_api_PREFIX[STYPE ]b4_namespace_ref[::]b4_parser_class_name[::semantic_type
-#endif
-#ifndef ]b4_api_PREFIX[LTYPE
-# define ]b4_api_PREFIX[LTYPE ]b4_namespace_ref[::]b4_parser_class_name[::location_type
-#endif
-
-]b4_namespace_close[
-]b4_percent_code_get([[provides]])[
-]b4_cpp_guard_close([b4_spec_defines_file])[
-]b4_output_end()
diff --git a/data/java.m4 b/data/java.m4
deleted file mode 100644
index 627028b..0000000
--- a/data/java.m4
+++ /dev/null
@@ -1,304 +0,0 @@
-                                                            -*- 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
deleted file mode 100644
index 06f0ded..0000000
--- a/data/lalr1.cc
+++ /dev/null
@@ -1,1144 +0,0 @@
-# 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_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([],
-              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
-
-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])
-
-b4_defines_if(
-[b4_output_begin([b4_spec_defines_file])
-b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
-             [2002-2012])
-[
-/**
- ** \file ]b4_spec_defines_file[
- ** Define the ]b4_namespace_ref[::parser class.
- */
-
-/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
-
-]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"]])[
-
-]b4_YYDEBUG_define[
-
-]b4_namespace_open[
-
-  /// A Bison parser.
-  class ]b4_parser_class_name[
-  {
-  public:
-    /// Symbol semantic values.
-#ifndef ]b4_api_PREFIX[STYPE
-]m4_ifdef([b4_stype],
-[    union 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 ]b4_api_PREFIX[STYPE semantic_type;
-#endif
-    /// Symbol locations.
-    typedef ]b4_percent_define_get([[api.location.type]],
-                                   [[location]])[ location_type;
-    /// Tokens.
-    struct token
-    {
-      ]b4_token_enums(b4_tokens)[
-    };
-    /// Token type.
-    typedef token::yytokentype token_type;
-
-    /// Build a parser object.
-    ]b4_parser_class_name[ (]b4_parse_param_decl[);
-    virtual ~]b4_parser_class_name[ ();
-
-    /// Parse.
-    /// \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.
-    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 ]b4_api_PREFIX[DEBUG
-    /// \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 ]b4_int_type_for([b4_translate])[ token_number_type;
-    /* Tables.  */
-    /// For a state, the index in \a yytable_ of its portion.
-    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 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_[];
-
-    static const ]b4_int_type_for([b4_pgoto])[ yypgoto_[];
-    static const ]b4_int_type_for([b4_defgoto])[ 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 ]b4_int_type_for([b4_table])[ yytable_[];
-    static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
-
-    static const ]b4_int_type_for([b4_check])[ yycheck_[];
-
-    /// For a state, its accessing symbol.
-    static const ]b4_int_type_for([b4_stos])[ yystos_[];
-
-    /// 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_[]; ]b4_error_verbose_if([
-
-    /// 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_[];
-]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.
-    static const rhs_number_type yyrhs_[];
-    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
-    static const ]b4_int_type_for([b4_prhs])[ yyprhs_[];
-    /// For each rule, its source line number.
-    static const ]b4_int_type_for([b4_rline])[ yyrline_[];
-    /// For each scanner token number, its symbol number.
-    static const ]b4_int_type_for([b4_toknum])[ 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_;
-]b4_parse_param_vars[
-  };
-]b4_namespace_close[
-
-]b4_percent_define_flag_if([[global_tokens_and_yystype]],
-[b4_token_defines(b4_tokens)
-
-#ifndef ]b4_api_PREFIX[STYPE
- /* Redirection for backward compatibility.  */
-# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
-#endif
-])[
-]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-2012])
-b4_percent_code_get([[top]])[]dnl
-m4_if(b4_prefix, [yy], [],
-[
-// Take the name prefix into account.
-#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_user_post_prologue[
-]b4_percent_code_get[
-
-]b4_null_define[
-
-#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])
-]b4_yylloc_default_define[
-
-/* Suppress unused-variable warnings by "using" E.  */
-#define YYUSE(e) ((void) (e))
-
-/* Enable debugging if requested.  */
-#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 {							\
-  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 /* !]b4_api_PREFIX[DEBUG */
-
-# 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 /* !]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_)
-
-]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
-     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
-  ]b4_parser_class_name[::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.  */
-              [[fallthrough]];
-            default:
-              yyr += *yyp;
-              break;
-
-            case '"':
-              return yyr;
-            }
-      do_not_strip_quotes: ;
-      }
-
-    return yystr;
-  }
-]])[
-
-  /// Build a parser object.
-  ]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[
-  {
-  }
-
-  ]b4_parser_class_name::~b4_parser_class_name[ ()
-  {
-  }
-
-#if ]b4_api_PREFIX[DEBUG
-  /*--------------------------------.
-  | Print this symbol on YYOUTPUT.  |
-  `--------------------------------*/
-
-  inline void
-  ]b4_parser_class_name[::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)
-      {
-  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
-[       default:
-	  break;
-      }
-  }
-
-
-  void
-  ]b4_parser_class_name[::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
-  ]b4_parser_class_name[::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)
-      {
-  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
-	default:
-	  break;
-      }
-  }
-
-  void
-  ]b4_parser_class_name[::yypop_ (unsigned int n)
-  {
-    yystate_stack_.pop (n);
-    yysemantic_stack_.pop (n);
-    yylocation_stack_.pop (n);
-  }
-
-#if ]b4_api_PREFIX[DEBUG
-  std::ostream&
-  ]b4_parser_class_name[::debug_stream () const
-  {
-    return *yycdebug_;
-  }
-
-  void
-  ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
-  {
-    yycdebug_ = &o;
-  }
-
-
-  ]b4_parser_class_name[::debug_level_type
-  ]b4_parser_class_name[::debug_level () const
-  {
-    return yydebug_;
-  }
-
-  void
-  ]b4_parser_class_name[::set_debug_level (debug_level_type l)
-  {
-    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 ()
-  {
-    /// 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;
-
-]m4_ifdef([b4_initial_action], [
-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
-       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 = ]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_)
-      {
-	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)
-      {
-        ]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);
-    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
-  ]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_)
-      {
-        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;]], [[
-    return YY_("syntax error");]])[
-  }
-
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-  const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
-  const ]b4_int_type_for([b4_pact])[
-  ]b4_parser_class_name[::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.  */
-  const ]b4_int_type_for([b4_defact])[
-  ]b4_parser_class_name[::yydefact_[] =
-  {
-    ]b4_defact[
-  };
-
-  /* YYPGOTO[NTERM-NUM].  */
-  const ]b4_int_type_for([b4_pgoto])[
-  ]b4_parser_class_name[::yypgoto_[] =
-  {
-    ]b4_pgoto[
-  };
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-  const ]b4_int_type_for([b4_defgoto])[
-  ]b4_parser_class_name[::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.  */
-  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_[] =
-  {
-    ]b4_table[
-  };
-
-  /* YYCHECK.  */
-  const ]b4_int_type_for([b4_check])[
-  ]b4_parser_class_name[::yycheck_[] =
-  {
-    ]b4_check[
-  };
-
-  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-  const ]b4_int_type_for([b4_stos])[
-  ]b4_parser_class_name[::yystos_[] =
-  {
-    ]b4_stos[
-  };
-
-#if ]b4_api_PREFIX[DEBUG
-  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
-     to YYLEX-NUM.  */
-  const ]b4_int_type_for([b4_toknum])[
-  ]b4_parser_class_name[::yytoken_number_[] =
-  {
-    ]b4_toknum[
-  };
-#endif
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-  const ]b4_int_type_for([b4_r1])[
-  ]b4_parser_class_name[::yyr1_[] =
-  {
-    ]b4_r1[
-  };
-
-  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-  const ]b4_int_type_for([b4_r2])[
-  ]b4_parser_class_name[::yyr2_[] =
-  {
-    ]b4_r2[
-  };
-
-]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*
-  const ]b4_parser_class_name[::yytname_[] =
-  {
-    ]b4_tname[
-  };
-
-]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_[] =
-  {
-    ]b4_rhs[
-  };
-
-  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-     YYRHS.  */
-  const ]b4_int_type_for([b4_prhs])[
-  ]b4_parser_class_name[::yyprhs_[] =
-  {
-    ]b4_prhs[
-  };
-
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-  const ]b4_int_type_for([b4_rline])[
-  ]b4_parser_class_name[::yyrline_[] =
-  {
-    ]b4_rline[
-  };
-
-  // Print the state stack on the debug stream.
-  void
-  ]b4_parser_class_name[::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
-  ]b4_parser_class_name[::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],
-		       &]b4_rhs_value(yynrhs, yyi + 1)[,
-		       &]b4_rhs_location(yynrhs, yyi + 1)[);
-  }
-#endif // ]b4_api_PREFIX[DEBUG
-
-  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-  ]b4_parser_class_name[::token_number_type
-  ]b4_parser_class_name[::yytranslate_ (int t)
-  {
-    static
-    const token_number_type
-    translate_table[] =
-    {
-      ]b4_translate[
-    };
-    if ((unsigned int) t <= yyuser_token_number_max_)
-      return translate_table[t];
-    else
-      return yyundef_token_;
-  }
-
-  const int ]b4_parser_class_name[::yyeof_ = 0;
-  const int ]b4_parser_class_name[::yylast_ = ]b4_last[;
-  const int ]b4_parser_class_name[::yynnts_ = ]b4_nterms_number[;
-  const int ]b4_parser_class_name[::yyempty_ = -2;
-  const int ]b4_parser_class_name[::yyfinal_ = ]b4_final_state_number[;
-  const int ]b4_parser_class_name[::yyterror_ = 1;
-  const int ]b4_parser_class_name[::yyerrcode_ = 256;
-  const int ]b4_parser_class_name[::yyntokens_ = ]b4_tokens_number[;
-
-  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[;
-
-]b4_namespace_close[
-]b4_epilogue[]dnl
-b4_output_end()
diff --git a/data/lalr1.java b/data/lalr1.java
deleted file mode 100644
index e961fc5..0000000
--- a/data/lalr1.java
+++ /dev/null
@@ -1,927 +0,0 @@
-# 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/local.mk b/data/local.mk
new file mode 100644
index 0000000..f82aee7
--- /dev/null
+++ b/data/local.mk
@@ -0,0 +1,57 @@
+## Copyright (C) 2002, 2005-2015, 2018-2019 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/>.
+
+dist_pkgdata_DATA =                             \
+  data/README.md                                \
+  data/bison-default.css
+
+skeletonsdir = $(pkgdatadir)/skeletons
+dist_skeletons_DATA =                           \
+  data/skeletons/bison.m4                       \
+  data/skeletons/c++-skel.m4                    \
+  data/skeletons/c++.m4                         \
+  data/skeletons/c-like.m4                      \
+  data/skeletons/c-skel.m4                      \
+  data/skeletons/c.m4                           \
+  data/skeletons/glr.c                          \
+  data/skeletons/glr.cc                         \
+  data/skeletons/java-skel.m4                   \
+  data/skeletons/java.m4                        \
+  data/skeletons/lalr1.cc                       \
+  data/skeletons/lalr1.java                     \
+  data/skeletons/location.cc                    \
+  data/skeletons/stack.hh                       \
+  data/skeletons/variant.hh                     \
+  data/skeletons/yacc.c
+
+# Experimental support for the D language.
+dist_skeletons_DATA +=                          \
+  data/skeletons/README-D.txt                   \
+  data/skeletons/d-skel.m4                      \
+  data/skeletons/d.m4                           \
+  data/skeletons/lalr1.d
+
+m4sugardir = $(pkgdatadir)/m4sugar
+dist_m4sugar_DATA =                             \
+  data/m4sugar/foreach.m4                       \
+  data/m4sugar/m4sugar.m4
+
+xsltdir = $(pkgdatadir)/xslt
+dist_xslt_DATA =                                \
+  data/xslt/bison.xsl                           \
+  data/xslt/xml2dot.xsl                         \
+  data/xslt/xml2text.xsl                        \
+  data/xslt/xml2xhtml.xsl
diff --git a/data/location.cc b/data/location.cc
deleted file mode 100644
index 4082e09..0000000
--- a/data/location.cc
+++ /dev/null
@@ -1,299 +0,0 @@
-# C++ skeleton for Bison
-
-# 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/>.
-
-
-b4_output_begin([b4_dir_prefix[]position.hh])
-b4_copyright([Positions for Bison parsers in C++],
-             [2002-2007, 2009-2012])[
-
-/**
- ** \file ]b4_dir_prefix[position.hh
- ** Define the ]b4_namespace_ref[::position class.
- */
-
-]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[
-
-# include <algorithm> // std::max
-# include <iostream>
-# include <string>
-
-]b4_null_define[
-
-]b4_namespace_open[
-  /// Abstract a position.
-  class position
-  {
-  public:
-]m4_ifdef([b4_location_constructors], [[
-    /// Construct a position.
-    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.
-    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 = l;
-      column = c;
-    }
-
-    /** \name Line and Column related manipulators
-     ** \{ */
-    /// (line related) Advance to the COUNT next lines.
-    void lines (int count = 1)
-    {
-      column = ]b4_location_initial_column[u;
-      line += count;
-    }
-
-    /// (column related) Advance to the COUNT next columns.
-    void columns (int count = 1)
-    {
-      column = std::max (]b4_location_initial_column[u, column + count);
-    }
-    /** \} */
-
-    /// File name to which this position refers.
-    ]b4_percent_define_get([[filename_type]])[* 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;
-  }
-]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
-   */
-  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;
-  }
-
-]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-2007, 2009-2012])[
-
-/**
- ** \file ]b4_dir_prefix[location.hh
- ** Define the ]b4_namespace_ref[::location class.
- */
-
-]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[
-
-# include "position.hh"
-
-]b4_namespace_open[
-
-  /// Abstract a location.
-  class location
-  {
-  public:
-]m4_ifdef([b4_location_constructors], [
-    /// 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.
-    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 (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;
-  }
-]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.
-   */
-  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;
-  }
-
-]b4_namespace_close[
-
-]b4_cpp_guard_close([b4_dir_prefix[]location.hh])
-b4_output_end()
diff --git a/data/m4sugar/foreach.m4 b/data/m4sugar/foreach.m4
index 3fc1913..7093d0fc 100644
--- a/data/m4sugar/foreach.m4
+++ b/data/m4sugar/foreach.m4
@@ -4,7 +4,7 @@
 # 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.
+# Copyright (C) 2008-2017 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
@@ -24,7 +24,7 @@
 # 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/>.
+# respectively.  If not, see <https://www.gnu.org/licenses/>.
 
 # Written by Eric Blake.
 
diff --git a/data/m4sugar/m4sugar.m4 b/data/m4sugar/m4sugar.m4
index 12a9ab7..bbd6958 100644
--- a/data/m4sugar/m4sugar.m4
+++ b/data/m4sugar/m4sugar.m4
@@ -3,7 +3,7 @@
 # Base M4 layer.
 # Requires GNU M4.
 #
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 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
@@ -23,7 +23,7 @@
 # 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/>.
+# respectively.  If not, see <https://www.gnu.org/licenses/>.
 
 # Written by Akim Demaille.
 
@@ -2000,7 +2000,7 @@
 
 # m4_pattern_forbid(ERE, [WHY])
 # -----------------------------
-# Declare that no token matching the forbidden extended regular
+# Declare that no token matching the forbidden perl extended regular
 # expression ERE should be seen in the output unless...
 m4_define([m4_pattern_forbid], [])
 
@@ -2008,7 +2008,7 @@
 # m4_pattern_allow(ERE)
 # ---------------------
 # ... that token also matches the allowed extended regular expression ERE.
-# Both used via traces.
+# Both used via traces, by autom4te post-processing.
 m4_define([m4_pattern_allow], [])
 
 
@@ -2080,13 +2080,19 @@
 #
 # This is called frequently, so minimize the number of macro invocations
 # by avoiding dnl and other overhead on the common path.
+# The use of a witness macro protecting the warning allows aclocal
+# to silence any warnings when probing for what macros are required
+# and must therefore be located, when using the Autoconf-without-aclocal-m4
+# autom4te language.  For more background, see:
+# https://lists.gnu.org/archive/html/automake-patches/2012-11/msg00035.html
 m4_define([_m4_require_call],
 [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_ifndef([m4_require_silent_probe],
+    [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])])
@@ -2101,7 +2107,7 @@
 [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],
+https://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required])_m4_require_call],
        [m4_ignore])])
 
 
@@ -3120,7 +3126,8 @@
 # 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_pushdef([$2])m4_set_map_sep([$1],
+[m4_define([$2],], [)$3])m4_popdef([$2])])
 
 # m4_set_intersection(SET1, SET2)
 # -------------------------------
diff --git a/data/skeletons/README-D.txt b/data/skeletons/README-D.txt
new file mode 100644
index 0000000..214e309
--- /dev/null
+++ b/data/skeletons/README-D.txt
@@ -0,0 +1,60 @@
+Some usage notes for the D Parser:
+
+- it is a port of the Java parser, so interface is very similar.
+
+- the lexer class needs to implement the interface 'Lexer' (similar to
+  java). It typically (depending on options) looks like this:
+
+public interface Lexer
+{
+  /**
+   * Method to retrieve the beginning position of the last scanned token.
+   * @return the position at which the last scanned token starts.  */
+  @property YYPosition startPos ();
+
+  /**
+   * Method to retrieve the ending position of the last scanned token.
+   * @return the first position beyond the last scanned token.  */
+  @property YYPosition endPos ();
+
+  /**
+   * Method to retrieve the semantic value of the last scanned token.
+   * @return the semantic value of the last scanned token.  */
+  @property YYSemanticType semanticVal ();
+
+  /**
+   * Entry point for the scanner.  Returns the token identifier corresponding
+   * to the next token and prepares to return the semantic value
+   * and beginning/ending positions of the token.
+   * @return the token identifier corresponding to the next token. */
+  YYTokenType yylex ();
+
+  /**
+   * Entry point for error reporting.  Emits an error
+   * referring to the given location in a user-defined way.
+   *
+   * @param loc The location of the element to which the
+   *                error message is related
+   * @param s The string for the error message.  */
+   void yyerror (YYLocation loc, string s);
+}
+
+- semantic types are handled by D usions (same as for C/C++ parsers)
+
+- the following (non-standard) %defines are supported:
+
+  %define package "<package_name>"
+  %define api.parser.class "my_class_name>"
+  %define position_type "my_position_type"
+  %define location_type "my_location_type"
+
+- the following declarations basically work like in C/C++:
+
+  %locations
+  %error-verbose
+  %parse-param
+  %initial-action
+  %code
+  %union
+
+- %destructor is not yet supported
diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
new file mode 100644
index 0000000..7ca8497
--- /dev/null
+++ b/data/skeletons/bison.m4
@@ -0,0 +1,1118 @@
+                                                            -*- Autoconf -*-
+
+# Language-independent M4 Macros for Bison.
+
+# Copyright (C) 2002, 2004-2015, 2018-2019 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_generated_by
+# ---------------
+m4_define([b4_generated_by],
+[b4_comment([A Bison parser, made by GNU Bison b4_version.])
+])
+
+# b4_copyright(TITLE, [YEARS])
+# ----------------------------
+# If YEARS are not defined, use b4_copyright_years.
+m4_define([b4_copyright],
+[b4_generated_by
+b4_comment([$1
+
+]m4_dquote(m4_text_wrap([Copyright (C)
+]m4_ifval([$2], [[$2]], [m4_defn([b4_copyright_years])])[
+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.])
+])
+
+
+# b4_disclaimer
+# -------------
+# Issue a warning about private implementation details.
+m4_define([b4_disclaimer],
+[b4_comment([Undocumented macros, especially those whose name start with YY_,
+are private implementation details.  Do not rely on them.])
+])
+
+
+
+# b4_required_version_if(VERSION, IF_NEWER, IF_OLDER)
+# ---------------------------------------------------
+# If the version %require'd by the user is VERSION (or newer) expand
+# IF_NEWER, otherwise IF_OLDER.  VERSION should be an integer, e.g.,
+# 302 for 3.2.
+m4_define([b4_required_version_if],
+[m4_if(m4_eval($1 <= b4_required_version),
+              [1], [$2], [$3])])
+
+
+## -------- ##
+## Output.  ##
+## -------- ##
+
+# b4_output_begin(FILE1, FILE2)
+# -----------------------------
+# Enable output, i.e., send to diversion 0, expand after "#", and
+# generate the tag to output into FILE.  Must be followed by EOL.
+# FILE is FILE1 concatenated to FILE2.  FILE2 can be empty, or be
+# absolute: do the right thing.
+m4_define([b4_output_begin],
+[m4_changecom()
+m4_divert_push(0)dnl
+@output(m4_unquote([$1])@,m4_unquote([$2])@)@dnl
+])
+
+
+# b4_output_end
+# -------------
+# Output nothing, restore # as comment character (no expansions after #).
+m4_define([b4_output_end],
+[m4_divert_pop(0)
+m4_changecom([#])
+])
+
+
+# b4_divert_kill(CODE)
+# --------------------
+# Expand CODE for its side effects, discard its output.
+m4_define([b4_divert_kill],
+[m4_divert_text([KILL], [$1])])
+
+
+# b4_define_silent(MACRO, CODE)
+# -----------------------------
+# Same as m4_define, but throw away the expansion of CODE.
+m4_define([b4_define_silent],
+[m4_define([$1], [b4_divert_kill([$2])])])
+
+
+## ---------------- ##
+## 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, START, END, FORMAT, [ARG1], [ARG2], ...)
+# -------------------------------------------------------
+# Write @KIND(START@,END@,FORMAT@,ARG1@,ARG2@,...@) to stdout.
+#
+# For example:
+#
+#   b4_error([[complain]], [[input.y:2.3]], [[input.y:5.4]],
+#            [[invalid %s]], [[foo]])
+m4_define([b4_error],
+[b4_cat([[@complain][(]$1[@,]$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_at([[[asdf), asdf]]], [[[fsa), fsa]]], [[[fdsa), fdsa]]])
+#   b4_warn_at([[asdf), asdf]], [[fsa), fsa]], [[fdsa), fdsa]])
+#   b4_warn_at()
+#   b4_warn_at(1)
+#   b4_warn_at(1, 2)
+#
+# Should produce this without newlines:
+#
+#   @warn_at([asdf), asdf]@,@,@,[fsa), fsa]@,[fdsa), fdsa]@)
+#   @warn(asdf), asdf@,@,@,fsa), fsa@,fdsa), fdsa@)
+#   @warn(@)
+#   @warn(1@)
+#   @warn(1@,2@)
+m4_define([b4_warn],
+[b4_warn_at([], [], $@)])
+
+# 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([[warn]], $@)])
+
+# b4_complain(FORMAT, [ARG1], [ARG2], ...)
+# ----------------------------------------
+# Bounce to b4_complain_at.
+#
+# See b4_warn example.
+m4_define([b4_complain],
+[b4_complain_at([], [], $@)])
+
+# 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([[complain]], $@)])
+
+# b4_fatal(FORMAT, [ARG1], [ARG2], ...)
+# -------------------------------------
+# Bounce to b4_fatal_at.
+#
+# See b4_warn example.
+m4_define([b4_fatal],
+[b4_fatal_at([], [], $@)])
+
+# 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([[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])])
+
+
+# b4_subtract(LHS, RHS)
+# ---------------------
+# Evaluate LHS - RHS if they are integer literals, otherwise expand
+# to (LHS) - (RHS).
+m4_define([b4_subtract],
+[m4_bmatch([$1$2], [^[0123456789]*$],
+           [m4_eval([$1 - $2])],
+           [($1) - ($2)])])
+
+# b4_join(ARG1, ...)
+# _b4_join(ARG1, ...)
+# -------------------
+# Join with comma, skipping empty arguments.
+# b4_join calls itself recursively until it sees the first non-empty
+# argument, then calls _b4_join (i.e., `_$0`) which prepends each
+# non-empty argument with a comma.
+m4_define([b4_join],
+[m4_if([$#$1],
+       [1], [],
+       [m4_ifval([$1],
+                 [$1[]_$0(m4_shift($@))],
+                 [$0(m4_shift($@))])])])
+
+# _b4_join(ARGS1, ...)
+# --------------------
+m4_define([_b4_join],
+[m4_if([$#$1],
+       [1], [],
+       [m4_ifval([$1], [, $1])[]$0(m4_shift($@))])])
+
+
+
+
+# b4_integral_parser_tables_map(MACRO)
+# -------------------------------------
+# Map MACRO on all the integral tables.  MACRO is expected to have
+# the signature MACRO(TABLE-NAME, CONTENT, COMMENT).
+m4_define([b4_integral_parser_tables_map],
+[$1([pact], [b4_pact],
+    [[YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+STATE-NUM.]])
+
+$1([defact], [b4_defact],
+   [[YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+Performed when YYTABLE does not specify something else to do.  Zero
+means the default is an error.]])
+
+$1([pgoto], [b4_pgoto], [[YYPGOTO[NTERM-NUM].]])
+
+$1([defgoto], [b4_defgoto], [[YYDEFGOTO[NTERM-NUM].]])
+
+$1([table], [b4_table],
+   [[YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+positive, shift that token.  If negative, reduce the rule whose
+number is the opposite.  If YYTABLE_NINF, syntax error.]])
+
+$1([check], [b4_check])
+
+$1([stos], [b4_stos],
+   [[YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+symbol of state STATE-NUM.]])
+
+$1([r1], [b4_r1],
+   [[YYR1[YYN] -- Symbol number of symbol that rule YYN derives.]])
+
+$1([r2], [b4_r2],
+   [[YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.]])
+])
+
+
+# b4_parser_tables_declare
+# b4_parser_tables_define
+# ------------------------
+# Define/declare the (deterministic) parser tables.
+m4_define([b4_parser_tables_declare],
+[b4_integral_parser_tables_map([b4_integral_parser_table_declare])])
+
+m4_define([b4_parser_tables_define],
+[b4_integral_parser_tables_map([b4_integral_parser_table_define])])
+
+
+
+## ------------------ ##
+## 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: ]b4_$1_flag)])])
+
+
+# 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([glr])                # Whether a GLR parser is requested.
+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.
+
+
+# b4_glr_cc_if([IF-TRUE], [IF-FALSE])
+# -----------------------------------
+m4_define([b4_glr_cc_if],
+          [m4_if(b4_skeleton, ["glr.cc"], $@)])
+
+
+## --------- ##
+## Symbols.  ##
+## --------- ##
+
+# For a description of the Symbol handling, see README.
+#
+# The following macros provide access to symbol related values.
+
+# __b4_symbol(NUM, FIELD)
+# -----------------------
+# Recover a FIELD about symbol #NUM.  Thanks to m4_indir, fails if
+# undefined.
+m4_define([__b4_symbol],
+[m4_indir([b4_symbol($1, $2)])])
+
+
+# _b4_symbol(NUM, FIELD)
+# ----------------------
+# Recover a FIELD about symbol #NUM (or "orig NUM").  Fails if
+# undefined.
+m4_define([_b4_symbol],
+[m4_ifdef([b4_symbol($1, number)],
+          [__b4_symbol(m4_indir([b4_symbol($1, number)]), $2)],
+          [__b4_symbol([$1], [$2])])])
+
+
+
+# b4_symbol(NUM, FIELD)
+# ---------------------
+# Recover a FIELD about symbol #NUM (or "orig NUM").  Fails if
+# undefined.  If FIELD = id, prepend the token prefix.
+m4_define([b4_symbol],
+[m4_case([$2],
+         [id],    [m4_do([b4_percent_define_get([api.token.prefix])],
+                         [_b4_symbol([$1], [id])])],
+         [_b4_symbol($@)])])
+
+
+# b4_symbol_if(NUM, FIELD, IF-TRUE, IF-FALSE)
+# -------------------------------------------
+# If FIELD about symbol #NUM is 1 expand IF-TRUE, if is 0, expand IF-FALSE.
+# Otherwise an error.
+m4_define([b4_symbol_if],
+[m4_case(b4_symbol([$1], [$2]),
+         [1], [$3],
+         [0], [$4],
+         [m4_fatal([$0: field $2 of $1 is not a Boolean:] b4_symbol([$1], [$2]))])])
+
+
+# b4_symbol_tag_comment(SYMBOL-NUM)
+# ---------------------------------
+# Issue a comment giving the tag of symbol NUM.
+m4_define([b4_symbol_tag_comment],
+[b4_comment([b4_symbol([$1], [tag])])
+])
+
+
+# b4_symbol_action(SYMBOL-NUM, KIND)
+# ----------------------------------
+# Run the action KIND (destructor or printer) for SYMBOL-NUM.
+m4_define([b4_symbol_action],
+[b4_symbol_if([$1], [has_$2],
+[b4_dollar_pushdef([(*yyvaluep)],
+                   [$1],
+                   [],
+                   [(*yylocationp)])dnl
+    _b4_symbol_case([$1])[]dnl
+b4_syncline([b4_symbol([$1], [$2_line])], [b4_symbol([$1], [$2_file])])dnl
+b4_symbol([$1], [$2])
+b4_syncline([@oline@], [@ofile@])dnl
+        break;
+
+b4_dollar_popdef[]dnl
+])])
+
+
+# b4_symbol_destructor(SYMBOL-NUM)
+# b4_symbol_printer(SYMBOL-NUM)
+# --------------------------------
+m4_define([b4_symbol_destructor], [b4_symbol_action([$1], [destructor])])
+m4_define([b4_symbol_printer],    [b4_symbol_action([$1], [printer])])
+
+
+# b4_symbol_actions(KIND, [TYPE = yytype])
+# ----------------------------------------
+# Emit the symbol actions for KIND ("printer" or "destructor").
+# Dispatch on TYPE.
+m4_define([b4_symbol_actions],
+[m4_pushdef([b4_actions_], m4_expand([b4_symbol_foreach([b4_symbol_$1])]))dnl
+m4_ifval(m4_defn([b4_actions_]),
+[switch (m4_default([$2], [yytype]))
+    {
+m4_defn([b4_actions_])[]dnl
+      default:
+        break;
+    }dnl
+],
+[YYUSE (m4_default([$2], [yytype]));])dnl
+m4_popdef([b4_actions_])dnl
+])
+
+# _b4_symbol_case(SYMBOL-NUM)
+# ---------------------------
+# Issue a "case NUM" for SYMBOL-NUM.  Ends with its EOL to make it
+# easier to use with m4_map, but then, use []dnl to suppress the last
+# one.
+m4_define([_b4_symbol_case],
+[case b4_symbol([$1], [number]): b4_symbol_tag_comment([$1])])
+])
+
+
+# b4_symbol_foreach(MACRO)
+# ------------------------
+# Invoke MACRO(SYMBOL-NUM) for each SYMBOL-NUM.
+m4_define([b4_symbol_foreach],
+          [m4_map([$1], m4_defn([b4_symbol_numbers]))])
+
+# b4_symbol_map(MACRO)
+# --------------------
+# Return a list (possibly empty elements) of MACRO invoked for each
+# SYMBOL-NUM.
+m4_define([b4_symbol_map],
+[m4_map_args_sep([$1(], [)], [,], b4_symbol_numbers)])
+
+
+# b4_token_visible_if(NUM, IF-TRUE, IF-FALSE)
+# -------------------------------------------
+# Whether NUM denotes a token that has an exported definition (i.e.,
+# shows in enum yytokentype).
+m4_define([b4_token_visible_if],
+[b4_symbol_if([$1], [is_token],
+              [b4_symbol_if([$1], [has_id], [$2], [$3])],
+              [$3])])
+
+# b4_token_has_definition(NUM)
+# ----------------------------
+# 1 if NUM is visible, nothing otherwise.
+m4_define([b4_token_has_definition],
+[b4_token_visible_if([$1], [1])])
+
+# b4_any_token_visible_if([IF-TRUE], [IF-FALSE])
+# ----------------------------------------------
+# Whether there is a token that needs to be defined.
+m4_define([b4_any_token_visible_if],
+[m4_ifval(b4_symbol_foreach([b4_token_has_definition]),
+          [$1], [$2])])
+
+
+# b4_token_format(FORMAT, NUM)
+# ----------------------------
+m4_define([b4_token_format],
+[b4_token_visible_if([$2],
+[m4_quote(m4_format([$1],
+                     [b4_symbol([$2], [id])],
+                     [b4_symbol([$2], b4_api_token_raw_if([[number]], [[user_number]]))]))])])
+
+
+## ------- ##
+## Types.  ##
+## ------- ##
+
+# _b4_type_action(NUMS)
+# ---------------------
+# Run actions for the symbol NUMS that all have the same type-name.
+# Skip NUMS that have no type-name.
+#
+# To specify the action to run, define b4_dollar_dollar(SYMBOL-NUM,
+# TAG, TYPE).
+m4_define([_b4_type_action],
+[b4_symbol_if([$1], [has_type],
+[m4_map([      _b4_symbol_case], [$@])[]dnl
+        b4_dollar_dollar([b4_symbol([$1], [number])],
+                         [b4_symbol([$1], [tag])],
+                         [b4_symbol([$1], [type])]);
+        break;
+
+])])
+
+# b4_type_foreach(MACRO)
+# ----------------------
+# Invoke MACRO(SYMBOL-NUMS) for each set of SYMBOL-NUMS for each type set.
+m4_define([b4_type_foreach],
+          [m4_map([$1], m4_defn([b4_type_names]))])
+
+
+
+## ----------- ##
+## 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)dnl
+# --------------------------
+# Should always be following by a dnl.
+#
+# Emit "#line LINE FILE /* __LINE__ __FILE__ */".
+m4_define([b4_syncline],
+[b4_flag_if([synclines],
+[b4_sync_start([$1], [$2])[]dnl
+b4_sync_end([__line__], [b4_basename(m4_quote(__file__))])
+])])
+
+# b4_sync_start(LINE, FILE)
+# -----------------------
+# Syncline for the new place.  Typically a directive for the compiler.
+m4_define([b4_sync_start], [b4_comment([$2:$1])])
+
+# b4_sync_end(LINE, FILE)
+# -----------------------
+# Syncline for the current place, which ends.  Typically a comment
+# left for the reader.
+m4_define([b4_sync_end],   [ b4_comment([$2:$1])]
+)
+# This generates dependencies on the Bison skeletons hence lots of
+# useless 'git diff'.  This location is useless for the regular
+# user (who does not care about the skeletons) and is actually not
+# useful for Bison developpers too (I, Akim, never used this to locate
+# the code in skeletons that generated output).  So disable it
+# completely.  If someone thinks this was actually useful, a %define
+# variable should be provided to control the level of verbosity of
+# '#line', in replacement of --no-lines.
+m4_define([b4_sync_end])
+
+
+# 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, COMMENT)
+# -----------------------------------
+# From b4_MACRO, if defined, build b4_user_MACRO that includes the synclines.
+m4_define([b4_define_user_code],
+[m4_define([b4_user_$1],
+           [m4_ifdef([b4_$1],
+                     [m4_ifval([$2],
+                               [b4_comment([$2])
+])b4_user_code([b4_$1])])])])
+
+# b4_user_actions
+# b4_user_initial_action
+# b4_user_post_prologue
+# b4_user_pre_prologue
+# b4_user_union_members
+# ----------------------
+# Macros that issue user code, ending with synclines.
+b4_define_user_code([actions])
+b4_define_user_code([initial_action], [User initialization code.])
+b4_define_user_code([post_prologue], [Second part of user prologue.])
+b4_define_user_code([pre_prologue], [First part of user prologue.])
+b4_define_user_code([union_members])
+
+
+# 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
+_b4_percent_define_ifdef([$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 appropriate 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([[$0: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_define_get_kind(VARIABLE)
+# ------------------------------------
+# Get the kind (code, keyword, string) of VARIABLE, i.e., how its
+# value was defined (braces, not delimiters, quotes).
+#
+# If the %define variable VARIABLE is undefined, complain fatally
+# since that's a Bison or skeleton error.  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.
+m4_define([b4_percent_define_get_kind],
+[m4_ifdef([b4_percent_define_kind(]$1[)],
+          [m4_indir([b4_percent_define_kind(]$1[)])],
+          [b4_fatal([[$0: undefined %%define variable '%s']], [$1])])])
+
+# b4_percent_define_get_syncline(VARIABLE)dnl
+# -------------------------------------------
+# Should always be following by a dnl.
+#
+# 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([[$0: undefined %%define variable '%s']], [$1])])])
+
+# _b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
+# ------------------------------------------------------
+# If the %define variable VARIABLE is defined, expand IF-TRUE, else expand
+# IF-FALSE.  Don't record usage of 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[)],
+          [$2],
+          [$3])])
+
+# 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],
+[_b4_percent_define_ifdef([$1],
+                         [b4_percent_define_use([$1])$2],
+                         [$3])])
+
+
+# b4_percent_define_check_file_complain(VARIABLE)
+# -----------------------------------------------
+# Warn about %define variable VARIABLE having an incorrect
+# value.
+m4_define([b4_percent_define_check_file_complain],
+[b4_complain_at(b4_percent_define_get_loc([$1]),
+                [[%%define variable '%s' requires 'none' or '"..."' values]],
+                [$1])])
+
+
+# b4_percent_define_check_file(MACRO, VARIABLE, DEFAULT)
+# ------------------------------------------------------
+# If the %define variable VARIABLE:
+# - is undefined, then if DEFAULT is non-empty, define MACRO to DEFAULT
+# - is a string, define MACRO to its value
+# - is the keyword 'none', do nothing
+# - otherwise, warn about the incorrect value.
+m4_define([b4_percent_define_check_file],
+[b4_percent_define_ifdef([$2],
+  [m4_case(b4_percent_define_get_kind([$2]),
+    [string],
+         [m4_define([$1], b4_percent_define_get([$2]))],
+    [keyword],
+         [m4_if(b4_percent_define_get([$2]), [none], [],
+                [b4_percent_define_check_file_complain([$2])])],
+    [b4_percent_define_check_file_complain([$2])])
+   ],
+   [m4_ifval([$3],
+             [m4_define([$1], [$3])])])
+])
+
+
+
+## --------- ##
+## Options.  ##
+## --------- ##
+
+
+# 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([[$0: undefined %%define variable '%s']], [$1])])])
+
+
+# b4_percent_define_default(VARIABLE, DEFAULT, [KIND = keyword])
+# --------------------------------------------------------------
+# 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],
+[_b4_percent_define_ifdef([$1], [],
+           [m4_define([b4_percent_define(]$1[)], [$2])dnl
+            m4_define([b4_percent_define_kind(]$1[)],
+                      [m4_default([$3], [keyword])])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_if_define(NAME, [VARIABLE = NAME])
+# ----------------------------------------------------
+# Define b4_NAME_if that executes its $1 or $2 depending whether
+# VARIABLE was %defined.  The characters '.' and `-' in VARIABLE are mapped
+# to '_'.
+m4_define([_b4_percent_define_if_define],
+[m4_define(m4_bpatsubst([b4_$1_if], [[-.]], [_]),
+           [b4_percent_define_flag_if(m4_default([$2], [$1]),
+                                      [$3], [$4])])])
+m4_define([b4_percent_define_if_define],
+[b4_percent_define_default([m4_default([$2], [$1])], [[false]])
+_b4_percent_define_if_define([$1], [$2], $[1], $[2])])
+
+
+# b4_percent_define_check_kind(VARIABLE, KIND, [DIAGNOSTIC = complain])
+# ---------------------------------------------------------------------
+m4_define([b4_percent_define_check_kind],
+[_b4_percent_define_ifdef([$1],
+  [m4_if(b4_percent_define_get_kind([$1]), [$2], [],
+    [b4_error([m4_default([$3], [complain])],
+              b4_percent_define_get_loc([$1]),
+              [m4_case([$2],
+                 [code],    [[%%define variable '%s' requires '{...}' values]],
+                 [keyword], [[%%define variable '%s' requires keyword values]],
+                 [string],  [[%%define variable '%s' requires '"..."' values]])],
+              [$1])])])dnl
+])
+
+
+# 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],
+[_b4_percent_define_ifdef([$1],
+  [b4_percent_define_check_kind(]$1[, [keyword], [deprecated])dnl
+   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_error([[note]], b4_percent_define_get_loc([$1]), []
+                                     [[accepted value: '%s']],
+                                     m4_dquote(b4_value))])])dnl
+   m4_popdef([b4_good_value])],
+  [b4_fatal([[$0: 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 blocks.]]],
+                  [[["%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])])
+
+
+## ------------------ ##
+## Common variables.  ##
+## ------------------ ##
+
+
+# b4_parse_assert_if([IF-ASSERTIONS-ARE-USED], [IF-NOT])
+# b4_parse_trace_if([IF-DEBUG-TRACES-ARE-ENABLED], [IF-NOT])
+# b4_token_ctor_if([IF-YYLEX-RETURNS-A-TOKEN], [IF-NOT])
+# ----------------------------------------------------------
+b4_percent_define_if_define([api.token.raw])
+b4_percent_define_if_define([token_ctor], [api.token.constructor])
+b4_percent_define_if_define([locations])     # Whether locations are tracked.
+b4_percent_define_if_define([parse.assert])
+b4_percent_define_if_define([parse.trace])
+
+
+# b4_bison_locations_if([IF-TRUE])
+# --------------------------------
+# Expand IF-TRUE if using locations, and using the default location
+# type.
+m4_define([b4_bison_locations_if],
+[b4_locations_if([b4_percent_define_ifdef([[api.location.type]], [], [$1])])])
+
+
+# b4_error_verbose_if([IF-ERRORS-ARE-VERBOSE], [IF-NOT])
+# ------------------------------------------------------
+# Map %define parse.error "(simple|verbose)" to b4_error_verbose_if and
+# b4_error_verbose_flag.
+b4_percent_define_default([[parse.error]], [[simple]])
+b4_percent_define_check_values([[[[parse.error]],
+                                 [[simple]], [[verbose]]]])
+m4_define([b4_error_verbose_flag],
+          [m4_case(b4_percent_define_get([[parse.error]]),
+                   [simple],  [[0]],
+                   [verbose], [[1]])])
+b4_define_flag_if([error_verbose])
+
+# yytoken_table is needed to support verbose errors.
+b4_error_verbose_if([m4_define([b4_token_table_flag], [1])])
+
+
+# b4_variant_if([IF-VARIANT-ARE-USED], [IF-NOT])
+# ----------------------------------------------
+b4_percent_define_if_define([variant])
+m4_define([b4_variant_flag], [[0]])
+b4_percent_define_ifdef([[api.value.type]],
+   [m4_case(b4_percent_define_get_kind([[api.value.type]]), [keyword],
+            [m4_case(b4_percent_define_get([[api.value.type]]), [variant],
+                    [m4_define([b4_variant_flag], [[1]])])])])
+b4_define_flag_if([variant])
+
+
+## ----------------------------------------------------------- ##
+## 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_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.  ##
+## --------------- ##
+
+# api.location.type={...} (C, C++ and Java).
+b4_percent_define_check_kind([api.location.type], [code], [deprecated])
+
+# api.position.type={...} (Java).
+b4_percent_define_check_kind([api.position.type], [code], [deprecated])
+
+# api.prefix >< %name-prefix.
+b4_percent_define_check_kind([api.prefix], [code], [deprecated])
+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])])])
+
+# api.token.prefix={...}
+# Make it a warning for those who used betas of Bison 3.0.
+b4_percent_define_check_kind([api.token.prefix], [code], [deprecated])
+
+# api.value.type >< %union.
+b4_percent_define_ifdef([api.value.type],
+[m4_ifdef([b4_union_members],
+[b4_complain_at(b4_percent_define_get_loc([api.value.type]),
+                [['%s' and '%s' cannot be used together]],
+                [%union],
+                [%define api.value.type])])])
+
+# api.value.type=union >< %yacc.
+b4_percent_define_ifdef([api.value.type],
+[m4_if(b4_percent_define_get([api.value.type]), [union],
+[b4_yacc_if(dnl
+[b4_complain_at(b4_percent_define_get_loc([api.value.type]),
+                [['%s' and '%s' cannot be used together]],
+                [%yacc],
+                [%define api.value.type "union"])])])])
+
+# api.value.union.name.
+b4_percent_define_check_kind([api.value.union.name], [keyword])
diff --git a/data/c++-skel.m4 b/data/skeletons/c++-skel.m4
similarity index 72%
rename from data/c++-skel.m4
rename to data/skeletons/c++-skel.m4
index 4421d18..1c3721c 100644
--- a/data/c++-skel.m4
+++ b/data/skeletons/c++-skel.m4
@@ -2,7 +2,8 @@
 
 # C++ skeleton dispatching for Bison.
 
-# Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2015, 2018-2019 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
@@ -17,10 +18,10 @@
 # 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]])])
+b4_glr_if(             [m4_define([b4_used_skeleton], [b4_skeletonsdir/[glr.cc]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton], [b4_skeletonsdir/[glr.cc]])])
 
-m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[lalr1.cc]])
+m4_define_default([b4_used_skeleton], [b4_skeletonsdir/[lalr1.cc]])
 m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
 
 m4_include(b4_used_skeleton)
diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4
new file mode 100644
index 0000000..3e2e4df
--- /dev/null
+++ b/data/skeletons/c++.m4
@@ -0,0 +1,645 @@
+                                                            -*- Autoconf -*-
+
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2019 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/>.
+
+# Sanity checks, before defaults installed by c.m4.
+b4_percent_define_ifdef([[api.value.union.name]],
+  [b4_complain_at(b4_percent_define_get_loc([[api.value.union.name]]),
+                  [named %union is invalid in C++])])
+
+m4_include(b4_skeletonsdir/[c.m4])
+
+b4_percent_define_check_kind([api.namespace], [code], [deprecated])
+b4_percent_define_check_kind([api.parser.class], [code], [deprecated])
+
+
+## ----- ##
+## C++.  ##
+## ----- ##
+
+# b4_comment(TEXT, [PREFIX])
+# --------------------------
+# Put TEXT in comment. Prefix all the output lines with PREFIX.
+m4_define([b4_comment],
+[_b4_comment([$1], [$2// ], [$2// ])])
+
+
+# b4_inline(hh|cc)
+# ----------------
+# Expand to `inline\n  ` if $1 is hh.
+m4_define([b4_inline],
+[m4_case([$1],
+  [cc], [],
+  [hh], [[inline
+  ]],
+  [m4_fatal([$0: invalid argument: $1])])])
+
+
+# b4_cxx_portability
+# ------------------
+m4_define([b4_cxx_portability],
+[#if defined __cplusplus
+# define YY_CPLUSPLUS __cplusplus
+#else
+# define YY_CPLUSPLUS 199711L
+#endif
+
+// Support move semantics when possible.
+#if 201103L <= YY_CPLUSPLUS
+# define YY_MOVE           std::move
+# define YY_MOVE_OR_COPY   move
+# define YY_MOVE_REF(Type) Type&&
+# define YY_RVREF(Type)    Type&&
+# define YY_COPY(Type)     Type
+#else
+# define YY_MOVE
+# define YY_MOVE_OR_COPY   copy
+# define YY_MOVE_REF(Type) Type&
+# define YY_RVREF(Type)    const Type&
+# define YY_COPY(Type)     const Type&
+#endif
+
+// Support noexcept when possible.
+#if 201103L <= YY_CPLUSPLUS
+# define YY_NOEXCEPT noexcept
+# define YY_NOTHROW
+#else
+# define YY_NOEXCEPT
+# define YY_NOTHROW throw ()
+#endif
+
+// Support constexpr when possible.
+#if 201703 <= YY_CPLUSPLUS
+# define YY_CONSTEXPR constexpr
+#else
+# define YY_CONSTEXPR
+#endif[]dnl
+])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+b4_percent_define_default([[api.parser.class]], [[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]])
+# Make it a warning for those who used betas of Bison 3.0.
+b4_percent_define_default([[api.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([[api.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([[api.namespace]]),
+                [[namespace reference is empty]])])
+
+# Instead of assuming the C++ compiler will do it, Bison should reject any
+# invalid b4_namespace_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([[api.namespace]]),
+                [[namespace reference has consecutive "::"]])])
+m4_if(m4_bregexp(b4_namespace_ref, [::[	 ]*$]), [-1], [],
+[b4_complain_at(b4_percent_define_get_loc([[api.namespace]]),
+                [[namespace reference has a trailing "::"]])])
+
+m4_define([b4_namespace_open],
+[b4_user_code([b4_percent_define_get_syncline([[api.namespace]])dnl
+[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([[api.namespace]])dnl
+m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote(b4_namespace_ref[ ]),
+                                    [^\(.\)[	 ]*\(::\)?\([^][:]\|:[^:]\)*],
+                                    [\1])),
+             [::\([^][:]\|:[^:]\)*], [} ])[} // ]b4_namespace_ref])])
+
+
+# b4_token_enums
+# --------------
+# Output the definition of the tokens as enums.
+m4_define([b4_token_enums],
+[[enum yytokentype
+      {
+        ]m4_join([,
+        ],
+                 b4_symbol_map([b4_token_enum]))[
+      };]dnl
+])
+
+
+
+
+## ----------------- ##
+## Semantic Values.  ##
+## ----------------- ##
+
+
+
+# b4_value_type_declare
+# ---------------------
+# Declare semantic_type.
+m4_define([b4_value_type_declare],
+[b4_value_type_setup[]dnl
+[    /// Symbol semantic values.
+]m4_bmatch(b4_percent_define_get_kind([[api.value.type]]),
+[code],
+[[    typedef ]b4_percent_define_get([[api.value.type]])[ semantic_type;]],
+[m4_bmatch(b4_percent_define_get([[api.value.type]]),
+[union\|union-directive],
+[[    union semantic_type
+    {
+]b4_user_union_members[
+    };]])])dnl
+])
+
+
+# b4_public_types_declare
+# -----------------------
+# Define the public types: token, semantic value, location, and so forth.
+# Depending on %define token_lex, may be output in the header or source file.
+m4_define([b4_public_types_declare],
+[[#ifndef ]b4_api_PREFIX[STYPE
+]b4_value_type_declare[
+#else
+    typedef ]b4_api_PREFIX[STYPE semantic_type;
+#endif]b4_locations_if([
+    /// Symbol locations.
+    typedef b4_percent_define_get([[api.location.type]],
+                                  [[location]]) location_type;])[
+
+    /// Syntax errors thrown from user actions.
+    struct syntax_error : std::runtime_error
+    {
+      syntax_error (]b4_locations_if([const location_type& l, ])[const std::string& m)
+        : std::runtime_error (m)]b4_locations_if([
+        , location (l)])[
+      {}
+
+      syntax_error (const syntax_error& s)
+        : std::runtime_error (s.what ())]b4_locations_if([
+        , location (s.location)])[
+      {}
+
+      ~syntax_error () YY_NOEXCEPT YY_NOTHROW;]b4_locations_if([
+
+      location_type location;])[
+    };
+
+    /// Tokens.
+    struct token
+    {
+      ]b4_token_enums[
+    };
+
+    /// (External) token type, as returned by yylex.
+    typedef token::yytokentype token_type;
+
+    /// Symbol type: an internal symbol number.
+    typedef int symbol_number_type;
+
+    /// The symbol type number to denote an empty symbol.
+    enum { empty_symbol = -2 };
+
+    /// Internal symbol number for tokens (subsumed by symbol_number_type).
+    typedef ]b4_int_type_for([b4_translate])[ token_number_type;
+]])
+
+
+# b4_symbol_type_define
+# ---------------------
+# Define symbol_type, the external type for symbols used for symbol
+# constructors.
+m4_define([b4_symbol_type_define],
+[[    /// A complete symbol.
+    ///
+    /// Expects its Base type to provide access to the symbol type
+    /// via type_get ().
+    ///
+    /// Provide access to semantic value]b4_locations_if([ and location])[.
+    template <typename Base>
+    struct basic_symbol : Base
+    {
+      /// Alias to Base.
+      typedef Base super_type;
+
+      /// Default constructor.
+      basic_symbol ()
+        : value ()]b4_locations_if([
+        , location ()])[
+      {}
+
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      basic_symbol (basic_symbol&& that);
+#endif
+
+      /// Copy constructor.
+      basic_symbol (const basic_symbol& that);]b4_variant_if([[
+
+      /// Constructor for valueless symbols, and symbols from each type.
+]b4_type_foreach([b4_basic_symbol_constructor_define])], [[
+      /// Constructor for valueless symbols.
+      basic_symbol (typename Base::kind_type t]b4_locations_if([,
+                    YY_MOVE_REF (location_type) l])[);
+
+      /// Constructor for symbols with semantic value.
+      basic_symbol (typename Base::kind_type t,
+                    YY_RVREF (semantic_type) v]b4_locations_if([,
+                    YY_RVREF (location_type) l])[);
+]])[
+      /// Destroy the symbol.
+      ~basic_symbol ()
+      {
+        clear ();
+      }
+
+      /// Destroy contents, and record that is empty.
+      void clear ()
+      {]b4_variant_if([[
+        // User destructor.
+        symbol_number_type yytype = this->type_get ();
+        basic_symbol<Base>& yysym = *this;
+        (void) yysym;
+        switch (yytype)
+        {
+]b4_symbol_foreach([b4_symbol_destructor])dnl
+[       default:
+          break;
+        }
+
+        // Type destructor.
+]b4_symbol_variant([[yytype]], [[value]], [[template destroy]])])[
+        Base::clear ();
+      }
+
+      /// Whether empty.
+      bool empty () const YY_NOEXCEPT;
+
+      /// Destructive move, \a s is emptied into this.
+      void move (basic_symbol& s);
+
+      /// The semantic value.
+      semantic_type value;]b4_locations_if([
+
+      /// The location.
+      location_type location;])[
+
+    private:
+#if YY_CPLUSPLUS < 201103L
+      /// Assignment operator.
+      basic_symbol& operator= (const basic_symbol& that);
+#endif
+    };
+
+    /// Type access provider for token (enum) based symbols.
+    struct by_type
+    {
+      /// Default constructor.
+      by_type ();
+
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      by_type (by_type&& that);
+#endif
+
+      /// Copy constructor.
+      by_type (const by_type& that);
+
+      /// The symbol type as needed by the constructor.
+      typedef token_type kind_type;
+
+      /// Constructor from (external) token numbers.
+      by_type (kind_type t);
+
+      /// Record that this symbol is empty.
+      void clear ();
+
+      /// Steal the symbol type from \a that.
+      void move (by_type& that);
+
+      /// The (internal) type number (corresponding to \a type).
+      /// \a empty when empty.
+      symbol_number_type type_get () const YY_NOEXCEPT;
+
+      /// The symbol type.
+      /// \a empty_symbol when empty.
+      /// An int, not token_number_type, to be able to store empty_symbol.
+      int type;
+    };
+
+    /// "External" symbols: returned by the scanner.
+    struct symbol_type : basic_symbol<by_type>
+    {]b4_variant_if([[
+      /// Superclass.
+      typedef basic_symbol<by_type> super_type;
+
+      /// Empty symbol.
+      symbol_type () {}
+
+      /// Constructor for valueless symbols, and symbols from each type.
+]b4_type_foreach([_b4_token_constructor_define])dnl
+    ])[};
+]])
+
+
+# b4_public_types_define(hh|cc)
+# -----------------------------
+# Provide the implementation needed by the public types.
+m4_define([b4_public_types_define],
+[[  // basic_symbol.
+#if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  ]b4_parser_class[::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
+    : Base (std::move (that))
+    , value (]b4_variant_if([], [std::move (that.value)]))b4_locations_if([
+    , location (std::move (that.location))])[
+  {]b4_variant_if([
+    b4_symbol_variant([this->type_get ()], [value], [move],
+                      [std::move (that.value)])
+  ])[}
+#endif
+
+  template <typename Base>
+  ]b4_parser_class[::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
+    : Base (that)
+    , value (]b4_variant_if([], [that.value]))b4_locations_if([
+    , location (that.location)])[
+  {]b4_variant_if([
+    b4_symbol_variant([this->type_get ()], [value], [copy],
+                      [YY_MOVE (that.value)])
+  ])[}
+
+]b4_variant_if([], [[
+  /// Constructor for valueless symbols.
+  template <typename Base>
+  ]b4_parser_class[::basic_symbol<Base>::basic_symbol (]b4_join(
+          [typename Base::kind_type t],
+          b4_locations_if([YY_MOVE_REF (location_type) l]))[)
+    : Base (t)
+    , value ()]b4_locations_if([
+    , location (l)])[
+  {}
+
+  template <typename Base>
+  ]b4_parser_class[::basic_symbol<Base>::basic_symbol (]b4_join(
+          [typename Base::kind_type t],
+          [YY_RVREF (semantic_type) v],
+          b4_locations_if([YY_RVREF (location_type) l]))[)
+    : Base (t)
+    , value (]b4_variant_if([], [YY_MOVE (v)])[)]b4_locations_if([
+    , location (YY_MOVE (l))])[
+  {]b4_variant_if([[
+    (void) v;
+    ]b4_symbol_variant([this->type_get ()], [value], [YY_MOVE_OR_COPY], [YY_MOVE (v)])])[}]])[
+
+  template <typename Base>
+  bool
+  ]b4_parser_class[::basic_symbol<Base>::empty () const YY_NOEXCEPT
+  {
+    return Base::type_get () == empty_symbol;
+  }
+
+  template <typename Base>
+  void
+  ]b4_parser_class[::basic_symbol<Base>::move (basic_symbol& s)
+  {
+    super_type::move (s);
+    ]b4_variant_if([b4_symbol_variant([this->type_get ()], [value], [move],
+                                      [YY_MOVE (s.value)])],
+                   [value = YY_MOVE (s.value);])[]b4_locations_if([
+    location = YY_MOVE (s.location);])[
+  }
+
+  // by_type.
+  ]b4_inline([$1])b4_parser_class[::by_type::by_type ()
+    : type (empty_symbol)
+  {}
+
+#if 201103L <= YY_CPLUSPLUS
+  ]b4_inline([$1])b4_parser_class[::by_type::by_type (by_type&& that)
+    : type (that.type)
+  {
+    that.clear ();
+  }
+#endif
+
+  ]b4_inline([$1])b4_parser_class[::by_type::by_type (const by_type& that)
+    : type (that.type)
+  {}
+
+  ]b4_inline([$1])b4_parser_class[::by_type::by_type (token_type t)
+    : type (yytranslate_ (t))
+  {}
+
+  ]b4_inline([$1])[void
+  ]b4_parser_class[::by_type::clear ()
+  {
+    type = empty_symbol;
+  }
+
+  ]b4_inline([$1])[void
+  ]b4_parser_class[::by_type::move (by_type& that)
+  {
+    type = that.type;
+    that.clear ();
+  }
+
+  ]b4_inline([$1])[int
+  ]b4_parser_class[::by_type::type_get () const YY_NOEXCEPT
+  {
+    return type;
+  }
+]])
+
+
+# b4_token_constructor_define
+# ----------------------------
+# Define symbol constructors for all the value types.
+# Use at class-level.  Redefined in variant.hh.
+m4_define([b4_token_constructor_define], [])
+
+
+# b4_yytranslate_define(cc|hh)
+# ----------------------------
+# Define yytranslate_.  Sometimes used in the header file ($1=hh),
+# sometimes in the cc file.
+m4_define([b4_yytranslate_define],
+[  b4_inline([$1])b4_parser_class[::token_number_type
+  ]b4_parser_class[::yytranslate_ (int t)
+  {
+]b4_api_token_raw_if(
+[[    return static_cast<token_number_type> (t);]],
+[[    // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
+    // TOKEN-NUM as returned by yylex.
+    static
+    const token_number_type
+    translate_table[] =
+    {
+  ]b4_translate[
+    };
+    const int user_token_number_max_ = ]b4_user_token_number_max[;
+
+    if (t <= 0)
+      return yyeof_;
+    else if (t <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return yy_undef_token_;]])[
+  }
+]])
+
+
+# b4_lhs_value([TYPE])
+# --------------------
+m4_define([b4_lhs_value],
+[b4_symbol_value([yyval], [$1])])
+
+
+# b4_rhs_value(RULE-LENGTH, POS, [TYPE])
+# --------------------------------------
+# FIXME: Dead code.
+m4_define([b4_rhs_value],
+[b4_symbol_value([yysemantic_stack_@{($1) - ($2)@}], [$3])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[(yyloc)])
+
+
+# b4_rhs_location(RULE-LENGTH, POS)
+# ---------------------------------
+# Expansion of @POS, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[(yylocation_stack_@{($1) - ($2)@})])
+
+
+# b4_parse_param_decl
+# -------------------
+# Extra formal arguments of the constructor.
+# Change the parameter names from "foo" into "foo_yyarg", so that
+# there is no collision bw the user chosen attribute name, and the
+# argument name in the constructor.
+m4_define([b4_parse_param_decl],
+[m4_ifset([b4_parse_param],
+          [m4_map_sep([b4_parse_param_decl_1], [, ], [b4_parse_param])])])
+
+m4_define([b4_parse_param_decl_1],
+[$1_yyarg])
+
+
+
+# b4_parse_param_cons
+# -------------------
+# 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], [,
+      ], [$@])])
+m4_define([b4_cc_constructor_call],
+          [$2 ($2_yyarg)])
+
+# b4_parse_param_vars
+# -------------------
+# Extra instance variables.
+m4_define([b4_parse_param_vars],
+          [m4_ifset([b4_parse_param],
+                    [
+    // User arguments.
+b4_cc_var_decls(b4_parse_param)])])
+m4_define([b4_cc_var_decls],
+          [m4_map_sep([b4_cc_var_decl], [
+], [$@])])
+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 (false)
+# endif
+]])
+
+## -------- ##
+## Checks.  ##
+## -------- ##
+
+b4_token_ctor_if([b4_variant_if([],
+  [b4_fatal_at(b4_percent_define_get_loc(api.token.constructor),
+               [cannot use '%s' without '%s'],
+               [%define api.token.constructor],
+               [%define api.value.type variant]))])])
diff --git a/data/skeletons/c-like.m4 b/data/skeletons/c-like.m4
new file mode 100644
index 0000000..8d891b6
--- /dev/null
+++ b/data/skeletons/c-like.m4
@@ -0,0 +1,66 @@
+                                                            -*- Autoconf -*-
+
+# Common code for C-like languages (C, C++, Java, etc.)
+
+# Copyright (C) 2012-2015, 2018-2019 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(TEXT, OPEN, CONTINUE, END)
+# --------------------------------------
+# Put TEXT in comment.  Avoid trailing spaces: don't indent empty lines.
+# Avoid adding indentation to the first line, as the indentation comes
+# from OPEN.  That's why we don't patsubst([$1], [^\(.\)], [   \1]).
+#
+# Prefix all the output lines with PREFIX.
+m4_define([_b4_comment],
+[$2[]m4_bpatsubst(m4_expand([[$1]]), [
+\(.\)], [
+$3\1])$4])
+
+
+# b4_comment(TEXT, [PREFIX])
+# --------------------------
+# Put TEXT in comment.  Prefix all the output lines with PREFIX.
+m4_define([b4_comment],
+[_b4_comment([$1], [$2/* ], [$2   ], [  */])])
+
+
+
+
+# _b4_dollar_dollar(VALUE, SYMBOL-NUM, FIELD, DEFAULT-FIELD)
+# ----------------------------------------------------------
+# If FIELD (or DEFAULT-FIELD) is non-null, return "VALUE.FIELD",
+# otherwise just VALUE.  Be sure to pass "(VALUE)" if VALUE is a
+# pointer.
+m4_define([_b4_dollar_dollar],
+[b4_symbol_value([$1],
+                 [$2],
+                 m4_if([$3], [[]],
+                       [[$4]], [[$3]]))])
+
+# b4_dollar_pushdef(VALUE-POINTER, SYMBOL-NUM, [TYPE_TAG], LOCATION)
+# b4_dollar_popdef
+# ------------------------------------------------------------------
+# Define b4_dollar_dollar for VALUE-POINTER and DEFAULT-FIELD,
+# and b4_at_dollar for LOCATION.
+m4_define([b4_dollar_pushdef],
+[m4_pushdef([b4_dollar_dollar],
+            [_b4_dollar_dollar([$1], [$2], m4_dquote($][1), [$3])])dnl
+m4_pushdef([b4_at_dollar], [$4])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/skeletons/c-skel.m4
similarity index 72%
rename from data/c-skel.m4
rename to data/skeletons/c-skel.m4
index 8bcae59..2a21cfc 100644
--- a/data/c-skel.m4
+++ b/data/skeletons/c-skel.m4
@@ -2,7 +2,8 @@
 
 # C skeleton dispatching for Bison.
 
-# Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2015, 2018-2019 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
@@ -17,10 +18,10 @@
 # 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]])])
+b4_glr_if(             [m4_define([b4_used_skeleton], [b4_skeletonsdir/[glr.c]])])
+b4_nondeterministic_if([m4_define([b4_used_skeleton], [b4_skeletonsdir/[glr.c]])])
 
-m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[yacc.c]])
+m4_define_default([b4_used_skeleton], [b4_skeletonsdir/[yacc.c]])
 m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
 
 m4_include(b4_used_skeleton)
diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4
new file mode 100644
index 0000000..4b2c094
--- /dev/null
+++ b/data/skeletons/c.m4
@@ -0,0 +1,991 @@
+                                                            -*- Autoconf -*-
+
+# C M4 Macros for Bison.
+
+# Copyright (C) 2002, 2004-2015, 2018-2019 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_skeletonsdir/[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_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
+
+/* Bison version.  */
+#define YYBISON_VERSION "]b4_version["
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME ]b4_skeleton[]m4_ifdef([b4_pure_flag], [[
+
+/* Pure parsers.  */
+#define YYPURE ]b4_pure_flag])[]m4_ifdef([b4_push_flag], [[
+
+/* Push parsers.  */
+#define YYPUSH ]b4_push_flag])[]m4_ifdef([b4_pull_flag], [[
+
+/* Pull parsers.  */
+#define YYPULL ]b4_pull_flag])[
+]])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+# 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.
+b4_percent_define_default([[api.value.union.name]],
+                          [b4_api_PREFIX[][STYPE]])
+
+
+## ------------------------ ##
+## Pure/impure interfaces.  ##
+## ------------------------ ##
+
+# b4_lex_formals
+# --------------
+# All the yylex formal arguments.
+# b4_lex_param arrives quoted twice, but we want to keep only one level.
+m4_define([b4_lex_formals],
+[b4_pure_if([[[[YYSTYPE *yylvalp]], [[&yylval]]][]dnl
+b4_locations_if([, [[YYLTYPE *yyllocp], [&yylloc]]])])dnl
+m4_ifdef([b4_lex_param], [, ]b4_lex_param)])
+
+
+# b4_lex
+# ------
+# Call yylex.
+m4_define([b4_lex],
+[b4_function_call([yylex], [int], b4_lex_formals)])
+
+
+# b4_user_args
+# ------------
+m4_define([b4_user_args],
+[m4_ifset([b4_parse_param], [, b4_args(b4_parse_param)])])
+
+
+# b4_parse_param
+# --------------
+# If defined, b4_parse_param arrives double quoted, but below we prefer
+# it to be single quoted.
+m4_define([b4_parse_param],
+b4_parse_param)
+
+
+# b4_parse_param_for(DECL, FORMAL, BODY)
+# ---------------------------------------
+# Iterate over the user parameters, binding the declaration to DECL,
+# 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_unquote(m4_car($1_$2)))dnl
+m4_pushdef([$2], m4_shift($1_$2))dnl
+$3[]dnl
+m4_popdef([$2])dnl
+m4_popdef([$1])dnl
+])])
+
+# b4_parse_param_use([VAL], [LOC])
+# --------------------------------
+# 'YYUSE' VAL, LOC if locations are enabled, and all the parse-params.
+m4_define([b4_parse_param_use],
+[m4_ifvaln([$1], [  YYUSE ([$1]);])dnl
+b4_locations_if([m4_ifvaln([$2], [  YYUSE ([$2]);])])dnl
+b4_parse_param_for([Decl], [Formal], [  YYUSE (Formal);
+])dnl
+])
+
+
+## ------------ ##
+## Data Types.  ##
+## ------------ ##
+
+# b4_int_type(MIN, MAX)
+# ---------------------
+# Return a narrow int type able to handle integers ranging from MIN
+# to MAX (included) in portable C code.  Assume MIN and MAX fall in
+# 'int' range.
+m4_define([b4_int_type],
+[m4_if(b4_ints_in($@,   [-127],   [127]), [1], [signed char],
+       b4_ints_in($@,      [0],   [255]), [1], [unsigned char],
+
+       b4_ints_in($@, [-32767], [32767]), [1], [short],
+       b4_ints_in($@,      [0], [65535]), [1], [unsigned short],
+
+                                               [int])])
+
+# b4_c99_int_type(MIN, MAX)
+# -------------------------
+# Like b4_int_type, but for C99.
+# b4_c99_int_type_define replaces b4_int_type with this.
+m4_define([b4_c99_int_type],
+[m4_if(b4_ints_in($@,   [-127],   [127]), [1], [yytype_int8],
+       b4_ints_in($@,      [0],   [255]), [1], [yytype_uint8],
+
+       b4_ints_in($@, [-32767], [32767]), [1], [yytype_int16],
+       b4_ints_in($@,      [0], [65535]), [1], [yytype_uint16],
+
+                                               [int])])
+
+# b4_c99_int_type_define
+# ----------------------
+# Define private types suitable for holding small integers in C99 or later.
+m4_define([b4_c99_int_type_define],
+[m4_copy_force([b4_c99_int_type], [b4_int_type])dnl
+[/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
+#endif
+
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
+typedef signed char yytype_int8;
+#endif
+
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
+#endif
+
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif]])
+
+
+# b4_int_type_for(NAME)
+# ---------------------
+# Return a narrow 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_table_value_equals(TABLE, VALUE, LITERAL, SYMBOL)
+# ----------------------------------------------------
+# 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.  SYMBOL denotes
+m4_define([b4_table_value_equals],
+[m4_if(m4_eval($3 < m4_indir([b4_]$1[_min])
+               || m4_indir([b4_]$1[_max]) < $3), [1],
+       [[0]],
+       [(($2) == $4)])])
+
+
+## ----------------- ##
+## Compiler issues.  ##
+## ----------------- ##
+
+# b4_attribute_define([noreturn])
+# -------------------------------
+# Provide portable compiler "attributes".  If "noreturn" is passed, define
+# _Noreturn.
+m4_define([b4_attribute_define],
+[[#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
+# endif
+#endif
+
+]m4_bmatch([$1], [\bnoreturn\b], [[/* The _Noreturn keyword of C11.  */
+]dnl This is an exact copy of lib/_Noreturn.h.
+[#ifndef _Noreturn
+# if (defined __cplusplus \
+      && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+          || (defined _MSC_VER && 1900 <= _MSC_VER)))
+#  define _Noreturn [[noreturn]]
+# elif ((!defined __cplusplus || defined __clang__) \
+        && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0)  \
+            || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)))
+   /* _Noreturn works as-is.  */
+# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+]])[/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(E) ((void) (E))
+#else
+# define YYUSE(E) /* empty */
+#endif
+
+#if defined __GNUC__ && ! defined __ICC && 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
+# 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
+
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+]])
+
+
+# b4_cast_define
+# --------------
+m4_define([b4_cast_define],
+[# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+#  else
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif[]dnl
+])
+
+
+# b4_null_define
+# --------------
+# Portability issues: define a YY_NULLPTR appropriate for the current
+# language (C, C++98, or C++11).
+#
+# In C++ pre C++11 it is standard practice to use 0 (not NULL) for the
+# null pointer.  In C, prefer ((void*)0) to avoid having to include stdlib.h.
+m4_define([b4_null_define],
+[# ifndef YY_NULLPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
+#  else
+#   define YY_NULLPTR ((void*)0)
+#  endif
+# endif[]dnl
+])
+
+
+# b4_null
+# -------
+# Return a null pointer constant.
+m4_define([b4_null], [YY_NULLPTR])
+
+
+
+## ---------##
+## Values.  ##
+## ---------##
+
+# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
+# -------------------------------------------------------------
+# Define "yy<TABLE-NAME>" whose contents is CONTENT.
+m4_define([b4_integral_parser_table_define],
+[m4_ifvaln([$3], [b4_comment([$3], [  ])])dnl
+static const b4_int_type_for([$2]) yy$1[[]] =
+{
+  $2
+};dnl
+])
+
+
+## ------------------------- ##
+## Assigning token numbers.  ##
+## ------------------------- ##
+
+# b4_token_define(TOKEN-NUM)
+# --------------------------
+# Output the definition of this token as #define.
+m4_define([b4_token_define],
+[b4_token_format([#define %s %s], [$1])])
+
+# b4_token_defines
+# ----------------
+# Output the definition of the tokens.
+m4_define([b4_token_defines],
+[b4_any_token_visible_if([/* Tokens.  */
+m4_join([
+], b4_symbol_map([b4_token_define]))
+])])
+
+
+# b4_token_enum(TOKEN-NUM)
+# ------------------------
+# Output the definition of this token as an enum.
+m4_define([b4_token_enum],
+[b4_token_format([%s = %s], [$1])])
+
+
+# b4_token_enums
+# --------------
+# Output the definition of the tokens (if there are) as enums.
+m4_define([b4_token_enums],
+[b4_any_token_visible_if([[/* Token type.  */
+#ifndef ]b4_api_PREFIX[TOKENTYPE
+# define ]b4_api_PREFIX[TOKENTYPE
+  enum ]b4_api_prefix[tokentype
+  {
+    ]m4_join([,
+    ],
+             b4_symbol_map([b4_token_enum]))[
+  };
+#endif
+]])])
+
+
+# b4_token_enums_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_yacc_if([b4_token_defines])])
+
+
+## ----------------- ##
+## Semantic Values.  ##
+## ----------------- ##
+
+
+# b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])
+# ----------------------------------------------
+# See README.
+m4_define([b4_symbol_value],
+[m4_ifval([$3],
+          [($1.$3)],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [($1.b4_symbol([$2], [type]))],
+                                  [$1])],
+                    [$1])])])
+
+
+## ---------------------- ##
+## Defining C functions.  ##
+## ---------------------- ##
+
+
+# b4_function_define(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
+# -----------------------------------------------------------
+# Declare the function NAME in C.
+m4_define([b4_function_define],
+[$2
+$1 (b4_formals(m4_shift2($@)))[]dnl
+])
+
+
+# b4_formals([DECL1, NAME1], ...)
+# -------------------------------
+# The formal arguments of a C function definition.
+m4_define([b4_formals],
+[m4_if([$#], [0], [void],
+       [$#$1], [1], [void],
+               [m4_map_sep([b4_formal], [, ], [$@])])])
+
+m4_define([b4_formal],
+[$1])
+
+
+
+## ----------------------- ##
+## Declaring C functions.  ##
+## ----------------------- ##
+
+
+# b4_function_declare(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
+# ------------------------------------------------------------
+# Declare the function NAME.
+m4_define([b4_function_declare],
+[$2 $1 (b4_formals(m4_shift2($@)));[]dnl
+])
+
+
+
+
+## --------------------- ##
+## Calling C functions.  ##
+## --------------------- ##
+
+
+# b4_function_call(NAME, RETURN-VALUE, [DECL1, NAME1], ...)
+# -----------------------------------------------------------
+# Call the function NAME with arguments NAME1, NAME2 etc.
+m4_define([b4_function_call],
+[$1 (b4_args(m4_shift2($@)))[]dnl
+])
+
+
+# b4_args([DECL1, NAME1], ...)
+# ----------------------------
+# Output the arguments NAME1, NAME2...
+m4_define([b4_args],
+[m4_map_sep([b4_arg], [, ], [$@])])
+
+m4_define([b4_arg],
+[$2])
+
+
+## ----------- ##
+## Synclines.  ##
+## ----------- ##
+
+# b4_sync_start(LINE, FILE)
+# -------------------------
+m4_define([b4_sync_start], [[#]line $1 $2])
+
+
+## -------------- ##
+## User actions.  ##
+## -------------- ##
+
+# b4_case(LABEL, STATEMENTS)
+# --------------------------
+m4_define([b4_case],
+[  case $1:
+$2
+b4_syncline([@oline@], [@ofile@])dnl
+    break;])
+
+
+# b4_predicate_case(LABEL, CONDITIONS)
+# ------------------------------------
+m4_define([b4_predicate_case],
+[  case $1:
+    if (! (
+$2)) YYERROR;
+b4_syncline([@oline@], [@ofile@])dnl
+    break;])
+
+
+# b4_yydestruct_define
+# --------------------
+# Define the "yydestruct" function.
+m4_define_default([b4_yydestruct_define],
+[[/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+]b4_function_define([yydestruct],
+    [static void],
+    [[const char *yymsg],    [yymsg]],
+    [[int yytype],           [yytype]],
+    [[YYSTYPE *yyvaluep],    [yyvaluep]][]dnl
+b4_locations_if(            [, [[YYLTYPE *yylocationp], [yylocationp]]])[]dnl
+m4_ifset([b4_parse_param], [, b4_parse_param]))[
+{
+]b4_parse_param_use([yyvaluep], [yylocationp])dnl
+[  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  ]b4_symbol_actions([destructor])[
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
+}]dnl
+])
+
+
+# b4_yy_symbol_print_define
+# -------------------------
+# Define the "yy_symbol_print" function.
+m4_define_default([b4_yy_symbol_print_define],
+[[
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
+]b4_function_define([yy_symbol_value_print],
+    [static void],
+               [[FILE *yyo],                            [yyo]],
+               [[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 *yyoutput = yyo;
+]b4_parse_param_use([yyoutput], [yylocationp])dnl
+[  if (!yyvaluep)
+    return;]
+dnl glr.c does not feature yytoknum.
+m4_if(b4_skeleton, ["yacc.c"],
+[[# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
+# endif
+]])dnl
+b4_percent_code_get([[pre-printer]])dnl
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  b4_symbol_actions([printer])
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
+b4_percent_code_get([[post-printer]])dnl
+[}
+
+
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
+
+]b4_function_define([yy_symbol_print],
+    [static void],
+               [[FILE *yyo],                            [yyo]],
+               [[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]))[
+{
+  YYFPRINTF (yyo, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+
+]b4_locations_if([  YY_LOCATION_PRINT (yyo, *yylocationp);
+  YYFPRINTF (yyo, ": ");
+])dnl
+[  yy_symbol_value_print (yyo, yytype, yyvaluep]dnl
+b4_locations_if([, yylocationp])[]b4_user_args[);
+  YYFPRINTF (yyo, ")");
+}]dnl
+])
+
+
+## ---------------- ##
+## api.value.type.  ##
+## ---------------- ##
+
+
+# ---------------------- #
+# api.value.type=union.  #
+# ---------------------- #
+
+# b4_symbol_type_register(SYMBOL-NUM)
+# -----------------------------------
+# Symbol SYMBOL-NUM has a type (for variant) instead of a type-tag.
+# Extend the definition of %union's body (b4_union_members) with a
+# field of that type, and extend the symbol's "type" field to point to
+# the field name, instead of the type name.
+m4_define([b4_symbol_type_register],
+[m4_define([b4_symbol($1, type_tag)],
+           [b4_symbol_if([$1], [has_id],
+                         [b4_symbol([$1], [id])],
+                         [yytype_[]b4_symbol([$1], [number])])])dnl
+m4_append([b4_union_members],
+m4_expand([
+  b4_symbol_tag_comment([$1])dnl
+  b4_symbol([$1], [type]) b4_symbol([$1], [type_tag]);]))
+])
+
+
+# b4_type_define_tag(SYMBOL1-NUM, ...)
+# ------------------------------------
+# For the batch of symbols SYMBOL1-NUM... (which all have the same
+# type), enhance the %union definition for each of them, and set
+# there "type" field to the field tag name, instead of the type name.
+m4_define([b4_type_define_tag],
+[b4_symbol_if([$1], [has_type],
+              [m4_map([b4_symbol_type_register], [$@])])
+])
+
+
+# b4_symbol_value_union(VAL, SYMBOL-NUM, [TYPE])
+# ----------------------------------------------
+# Same of b4_symbol_value, but when api.value.type=union.
+m4_define([b4_symbol_value_union],
+[m4_ifval([$3],
+          [(*($3*)(&$1))],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [($1.b4_symbol([$2], [type_tag]))],
+                                  [$1])],
+                    [$1])])])
+
+
+# b4_value_type_setup_union
+# -------------------------
+# Setup support for api.value.type=union.  Symbols are defined with a
+# type instead of a union member name: build the corresponding union,
+# and give the symbols their tag.
+m4_define([b4_value_type_setup_union],
+[m4_define([b4_union_members])
+b4_type_foreach([b4_type_define_tag])
+m4_copy_force([b4_symbol_value_union], [b4_symbol_value])
+])
+
+
+# -------------------------- #
+# api.value.type = variant.  #
+# -------------------------- #
+
+# b4_value_type_setup_variant
+# ---------------------------
+# Setup support for api.value.type=variant.  By default, fail, specialized
+# by other skeletons.
+m4_define([b4_value_type_setup_variant],
+[b4_complain_at(b4_percent_define_get_loc([[api.value.type]]),
+                [['%s' does not support '%s']],
+                [b4_skeleton],
+                [%define api.value.type variant])])
+
+
+# _b4_value_type_setup_keyword
+# ----------------------------
+# api.value.type is defined with a keyword/string syntax.  Check if
+# that is properly defined, and prepare its use.
+m4_define([_b4_value_type_setup_keyword],
+[b4_percent_define_check_values([[[[api.value.type]],
+                                  [[none]],
+                                  [[union]],
+                                  [[union-directive]],
+                                  [[variant]],
+                                  [[yystype]]]])dnl
+m4_case(b4_percent_define_get([[api.value.type]]),
+        [union],   [b4_value_type_setup_union],
+        [variant], [b4_value_type_setup_variant])])
+
+
+# b4_value_type_setup
+# -------------------
+# Check if api.value.type is properly defined, and possibly prepare
+# its use.
+b4_define_silent([b4_value_type_setup],
+[# Define default value.
+b4_percent_define_ifdef([[api.value.type]], [],
+[# %union => api.value.type=union-directive
+m4_ifdef([b4_union_members],
+[m4_define([b4_percent_define_kind(api.value.type)], [keyword])
+m4_define([b4_percent_define(api.value.type)], [union-directive])],
+[# no tag seen => api.value.type={int}
+m4_if(b4_tag_seen_flag, 0,
+[m4_define([b4_percent_define_kind(api.value.type)], [code])
+m4_define([b4_percent_define(api.value.type)], [int])],
+[# otherwise api.value.type=yystype
+m4_define([b4_percent_define_kind(api.value.type)], [keyword])
+m4_define([b4_percent_define(api.value.type)], [yystype])])])])
+
+# Set up.
+m4_bmatch(b4_percent_define_get_kind([[api.value.type]]),
+   [keyword\|string], [_b4_value_type_setup_keyword])
+])
+
+
+## -------------- ##
+## Declarations.  ##
+## -------------- ##
+
+
+# b4_value_type_define
+# --------------------
+m4_define([b4_value_type_define],
+[b4_value_type_setup[]dnl
+/* Value type.  */
+m4_bmatch(b4_percent_define_get_kind([[api.value.type]]),
+[code],
+[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED
+typedef ]b4_percent_define_get([[api.value.type]])[ ]b4_api_PREFIX[STYPE;
+# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1
+# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1
+#endif
+]],
+[m4_bmatch(b4_percent_define_get([[api.value.type]]),
+[union\|union-directive],
+[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED
+]b4_percent_define_get_syncline([[api.value.union.name]])dnl
+[union ]b4_percent_define_get([[api.value.union.name]])[
+{
+]b4_user_union_members[
+};
+]b4_percent_define_get_syncline([[api.value.union.name]])dnl
+[typedef union ]b4_percent_define_get([[api.value.union.name]])[ ]b4_api_PREFIX[STYPE;
+# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1
+# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1
+#endif
+]])])])
+
+
+# b4_location_type_define
+# -----------------------
+m4_define([b4_location_type_define],
+[[/* Location type.  */
+]b4_percent_define_ifdef([[api.location.type]],
+[[typedef ]b4_percent_define_get([[api.location.type]])[ ]b4_api_PREFIX[LTYPE;
+]],
+[[#if ! defined ]b4_api_PREFIX[LTYPE && ! defined ]b4_api_PREFIX[LTYPE_IS_DECLARED
+typedef struct ]b4_api_PREFIX[LTYPE ]b4_api_PREFIX[LTYPE;
+struct ]b4_api_PREFIX[LTYPE
+{
+  int first_line;
+  int first_column;
+  int last_line;
+  int last_column;
+};
+# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1
+# define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1
+#endif
+]])])
+
+
+# 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],
+[b4_value_type_define[]b4_locations_if([
+b4_location_type_define])
+
+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],
+[[/* Debug traces.  */
+]m4_if(b4_api_prefix, [yy],
+[[#ifndef YYDEBUG
+# define YYDEBUG ]b4_parse_trace_if([1], [0])[
+#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_parse_trace_if([1], [0])[
+# 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 (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)
+#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. */
+
+YY_ATTRIBUTE_UNUSED
+]b4_function_define([yy_location_print_],
+    [static int],
+               [[FILE *yyo],                    [yyo]],
+               [[YYLTYPE const * const yylocp], [yylocp]])[
+{
+  int res = 0;
+  int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
+  if (0 <= yylocp->first_line)
+    {
+      res += YYFPRINTF (yyo, "%d", yylocp->first_line);
+      if (0 <= yylocp->first_column)
+        res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
+    }
+  if (0 <= yylocp->last_line)
+    {
+      if (yylocp->first_line < yylocp->last_line)
+        {
+          res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
+          if (0 <= end_col)
+            res += YYFPRINTF (yyo, ".%d", end_col);
+        }
+      else if (0 <= end_col && yylocp->first_column < end_col)
+        res += YYFPRINTF (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/java-skel.m4 b/data/skeletons/d-skel.m4
similarity index 81%
copy from data/java-skel.m4
copy to data/skeletons/d-skel.m4
index 81bf02a..1705d84 100644
--- a/data/java-skel.m4
+++ b/data/skeletons/d-skel.m4
@@ -1,8 +1,8 @@
                                                             -*- Autoconf -*-
 
-# Java skeleton dispatching for Bison.
+# D skeleton dispatching for Bison.
 
-# Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2018-2019 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
@@ -17,10 +17,10 @@
 # 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])])
+b4_glr_if(             [b4_complain([%%glr-parser not supported for D])])
+b4_nondeterministic_if([b4_complain([%%nondeterministic-parser not supported for D])])
 
-m4_define_default([b4_used_skeleton], [b4_pkgdatadir/[lalr1.java]])
+m4_define_default([b4_used_skeleton], [b4_skeletonsdir/[lalr1.d]])
 m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
 
 m4_include(b4_used_skeleton)
diff --git a/data/skeletons/d.m4 b/data/skeletons/d.m4
new file mode 100644
index 0000000..2d29127
--- /dev/null
+++ b/data/skeletons/d.m4
@@ -0,0 +1,332 @@
+                                                            -*- Autoconf -*-
+
+# D language support for Bison
+
+# Copyright (C) 2018-2019 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(TEXT, OPEN, CONTINUE, END)
+# --------------------------------------
+# Put TEXT in comment.  Avoid trailing spaces: don't indent empty lines.
+# Avoid adding indentation to the first line, as the indentation comes
+# from OPEN.  That's why we don't patsubst([$1], [^\(.\)], [   \1]).
+#
+# Prefix all the output lines with PREFIX.
+m4_define([_b4_comment],
+[$2[]m4_bpatsubst(m4_expand([[$1]]), [
+\(.\)], [
+$3\1])$4])
+
+
+# b4_comment(TEXT, [PREFIX])
+# --------------------------
+# Put TEXT in comment.  Prefix all the output lines with PREFIX.
+m4_define([b4_comment],
+[_b4_comment([$1], [$2/* ], [$2   ], [  */])])
+
+
+# b4_sync_start(LINE, FILE)
+# -------------------------
+m4_define([b4_sync_start], [[#]line $1 $2])
+
+
+# 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_parser_class_declaration
+# ---------------------------
+# The declaration of the parser class ("class YYParser"), with all its
+# qualifiers/annotations.
+b4_percent_define_default([[api.parser.abstract]], [[false]])
+b4_percent_define_default([[api.parser.final]],    [[false]])
+b4_percent_define_default([[api.parser.public]],   [[false]])
+
+m4_define([b4_parser_class_declaration],
+[b4_percent_define_get3([api.parser.annotations], [], [ ])dnl
+b4_percent_define_flag_if([api.parser.public],   [public ])dnl
+b4_percent_define_flag_if([api.parser.abstract], [abstract ])dnl
+b4_percent_define_flag_if([api.parser.final],    [final ])dnl
+[class ]b4_parser_class[]dnl
+b4_percent_define_get3([api.parser.extends], [ extends ])dnl
+b4_percent_define_get3([api.parser.implements], [ implements ])])
+
+
+# b4_lexer_if(TRUE, FALSE)
+# ------------------------
+m4_define([b4_lexer_if],
+[b4_percent_code_ifdef([[lexer]], [$1], [$2])])
+
+
+# b4_position_type_if(TRUE, FALSE)
+# --------------------------------
+m4_define([b4_position_type_if],
+[b4_percent_define_ifdef([[position_type]], [$1], [$2])])
+
+
+# b4_location_type_if(TRUE, FALSE)
+# --------------------------------
+m4_define([b4_location_type_if],
+[b4_percent_define_ifdef([[location_type]], [$1], [$2])])
+
+
+# b4_identification
+# -----------------
+m4_define([b4_identification],
+[/** Version number for the Bison executable that generated this parser.  */
+  public static immutable string yy_bison_version = "b4_version";
+
+  /** Name of the skeleton that generated this parser.  */
+  public static immutable string yy_bison_skeleton = 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])
+
+
+# b4_integral_parser_table_define(NAME, DATA, COMMENT)
+#-----------------------------------------------------
+# Define "yy<TABLE-NAME>" whose contents is CONTENT.
+m4_define([b4_integral_parser_table_define],
+[m4_ifvaln([$3], [b4_comment([$3], [  ])])dnl
+private static immutable b4_int_type_for([$2])[[]] yy$1_ =
+@{
+  $2
+@};dnl
+])
+
+
+## ------------------------- ##
+## Assigning token numbers.  ##
+## ------------------------- ##
+
+# b4_token_enum(TOKEN-NAME, TOKEN-NUMBER)
+# ---------------------------------------
+# Output the definition of this token as an enum.
+m4_define([b4_token_enum],
+[b4_token_format([  %s = %s,
+], [$1])])
+
+# b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
+# -----------------------------------------------------
+# Output the definition of the tokens as enums.
+m4_define([b4_token_enums],
+[/* Tokens.  */
+public enum YYTokenType {
+
+  /** Token returned by the scanner to signal the end of its input.  */
+  EOF = 0,
+b4_symbol_foreach([b4_token_enum])
+}
+])
+
+# b4-case(ID, CODE)
+# -----------------
+m4_define([b4_case], [    case $1:
+$2
+      break;])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+m4_define([b4_yystype], [b4_percent_define_get([[stype]])])
+b4_percent_define_default([[stype]], [[YYSemanticType]])])
+
+# %name-prefix
+m4_define_default([b4_prefix], [[YY]])
+
+b4_percent_define_default([[api.parser.class]], [b4_prefix[]Parser])])
+m4_define([b4_parser_class], [b4_percent_define_get([[api.parser.class]])])
+
+#b4_percent_define_default([[location_type]], [Location])])
+m4_define([b4_location_type], b4_percent_define_ifdef([[location_type]],[b4_percent_define_get([[location_type]])],[YYLocation]))
+
+#b4_percent_define_default([[position_type]], [Position])])
+m4_define([b4_position_type], b4_percent_define_ifdef([[position_type]],[b4_percent_define_get([[position_type]])],[YYPosition]))
+
+
+## ----------------- ##
+## Semantic Values.  ##
+## ----------------- ##
+
+
+# b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])
+# ----------------------------------------------
+# See README.  FIXME: factor in c-like?
+m4_define([b4_symbol_value],
+[m4_ifval([$3],
+          [($1.$3)],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [($1.b4_symbol([$2], [type]))],
+                                  [$1])],
+                    [$1])])])
+
+# b4_lhs_value(SYMBOL-NUM, [TYPE])
+# --------------------------------
+# See README.
+m4_define([b4_lhs_value],
+[b4_symbol_value([yyval], [$1], [$2])])
+
+
+# b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
+# --------------------------------------------------
+# See README.
+#
+# In this simple implementation, %token and %type have class names
+# between the angle brackets.
+m4_define([b4_rhs_value],
+[b4_symbol_value([(yystack.valueAt (b4_subtract([$1], [$2])))], [$3], [$4])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[(yyloc)])
+
+
+# b4_rhs_location(RULE-LENGTH, POS)
+# ---------------------------------
+# Expansion of @POS, 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 $1;])
diff --git a/data/glr.c b/data/skeletons/glr.c
similarity index 63%
rename from data/glr.c
rename to data/skeletons/glr.c
index 8cd6baf..467f7db 100644
--- a/data/glr.c
+++ b/data/skeletons/glr.c
@@ -2,7 +2,7 @@
 
 # GLR skeleton for Bison
 
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015, 2018-2019 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
@@ -21,7 +21,8 @@
 # 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])])
+      [m4_include(b4_skeletonsdir/[c.m4])])
+
 
 ## ---------------- ##
 ## Default values.  ##
@@ -52,17 +53,7 @@
 # This is not shared with yacc.c in c.m4 because  GLR relies on ISO C
 # formal argument declarations.
 m4_define([b4_user_formals],
-[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
-
-
-# b4_lex_param
-# ------------
-# Accumule in b4_lex_param all the yylex arguments.
-# Yes, this is quite ugly...
-m4_define([b4_lex_param],
-m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
-b4_locations_if([, [[YYLTYPE *], [&yylloc]]])])dnl
-m4_ifdef([b4_lex_param], [, ]b4_lex_param)))
+[m4_ifset([b4_parse_param], [, b4_formals(b4_parse_param)])])
 
 
 # b4_yyerror_args
@@ -71,7 +62,7 @@
 # a trailing comma.
 m4_define([b4_yyerror_args],
 [b4_pure_if([b4_locations_if([yylocp, ])])dnl
-m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
+m4_ifset([b4_parse_param], [b4_args(b4_parse_param), ])])
 
 
 # b4_lyyerror_args
@@ -79,7 +70,7 @@
 # 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), ])])
+m4_ifset([b4_parse_param], [b4_args(b4_parse_param), ])])
 
 
 # b4_pure_args
@@ -106,6 +97,7 @@
 
 # b4_locuser_formals(LOC = yylocp)
 # --------------------------------
+# User formal arguments, possibly preceded by location argument.
 m4_define([b4_locuser_formals],
 [b4_locations_if([, YYLTYPE *m4_default([$1], [yylocp])])[]b4_user_formals])
 
@@ -122,19 +114,25 @@
 ## ----------------- ##
 
 
-# b4_lhs_value([TYPE])
-# --------------------
-# Expansion of $<TYPE>$.
+# b4_lhs_value(SYMBOL-NUM, [TYPE])
+# --------------------------------
+# See README.
 m4_define([b4_lhs_value],
-[((*yyvalp)[]m4_ifval([$1], [.$1]))])
+[b4_symbol_value([(*yyvalp)], [$1], [$2])])
 
 
-# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
-# --------------------------------------
-# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
-# symbols on RHS.
+# b4_rhs_data(RULE-LENGTH, POS)
+# -----------------------------
+# See README.
+m4_define([b4_rhs_data],
+[YY_CAST (yyGLRStackItem const *, yyvsp)@{YYFILL (b4_subtract([$2], [$1]))@}.yystate])
+
+
+# b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
+# --------------------------------------------------
+# Expansion of $$ or $<TYPE>$, for symbol SYMBOL-NUM.
 m4_define([b4_rhs_value],
-[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))])
+[b4_symbol_value([b4_rhs_data([$1], [$2]).yysemantics.yysval], [$3], [$4])])
 
 
 
@@ -154,7 +152,7 @@
 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
 # on RHS.
 m4_define([b4_rhs_location],
-[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yyloc)])
+[(b4_rhs_data([$1], [$2]).yyloc)])
 
 
 ## -------------- ##
@@ -164,30 +162,63 @@
 # 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],
+# or open coded in the parser body.  glr.cc has its own definition.
+m4_if(b4_skeleton, ["glr.c"],
+[m4_define([b4_shared_declarations],
 [b4_declare_yydebug[
 ]b4_percent_code_get([[requires]])[
-]b4_token_enums(b4_tokens)[
+]b4_token_enums[
 ]b4_declare_yylstype[
-]b4_c_ansi_function_decl(b4_prefix[parse], [int], b4_parse_param)[
+]b4_function_declare(b4_prefix[parse], [int], b4_parse_param)[
 ]b4_percent_code_get([[provides]])[]dnl
 ])
-
+])
 
 ## -------------- ##
 ## Output files.  ##
 ## -------------- ##
 
+# Unfortunately the order of generation between the header and the
+# implementation file matters (for glr.c) because of the current
+# implementation of api.value.type=union.  In that case we still use a
+# union for YYSTYPE, but we generate the contents of this union when
+# setting up YYSTYPE.  This is needed for other aspects, such as
+# defining yy_symbol_value_print, since we need to now the name of the
+# members of this union.
+#
+# To avoid this issue, just generate the header before the
+# implementation file.  But we should also make them more independant.
+
+# ----------------- #
+# The header file.  #
+# ----------------- #
+
+# glr.cc produces its own header.
+b4_glr_cc_if([],
+[b4_defines_if(
+[b4_output_begin([b4_spec_header_file])
+b4_copyright([Skeleton interface for Bison GLR parsers in C],
+             [2002-2015, 2018-2019])[
+]b4_cpp_guard_open([b4_spec_header_file])[
+]b4_shared_declarations[
+]b4_cpp_guard_close([b4_spec_header_file])[
+]b4_output_end[
+]])])
+
+
+# ------------------------- #
+# The implementation file.  #
+# ------------------------- #
+
 b4_output_begin([b4_parser_file_name])
 b4_copyright([Skeleton implementation for Bison GLR parsers in C],
-             [2002-2012])[
-
+             [2002-2015, 2018-2019])[
 /* C GLR parser skeleton written by Paul Hilfinger.  */
 
-]b4_identification
+]b4_disclaimer[
+]b4_identification[
 
-b4_percent_code_get([[top]])[
+]b4_percent_code_get([[top]])[
 ]m4_if(b4_api_prefix, [yy], [],
 [[/* Substitute the type names.  */
 #define YYSTYPE ]b4_api_PREFIX[STYPE]b4_locations_if([[
@@ -197,18 +228,17 @@
 #define yyparse ]b4_prefix[parse
 #define yylex   ]b4_prefix[lex
 #define yyerror ]b4_prefix[error
+#define yydebug ]b4_prefix[debug]]b4_pure_if([], [[
 #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]])])[
+#define yylloc  ]b4_prefix[lloc]])]))[
 
-/* Copy the first part of user declarations.  */
 ]b4_user_pre_prologue[
-
+]b4_cast_define[
 ]b4_null_define[
 
-]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
+]b4_defines_if([[#include "@basename(]b4_spec_header_file[@)"]],
                [b4_shared_declarations])[
 
 /* Enabling verbose error messages.  */
@@ -216,7 +246,7 @@
 # undef YYERROR_VERBOSE
 # define YYERROR_VERBOSE 1
 #else
-# define YYERROR_VERBOSE ]b4_error_verbose_flag[
+# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
 #endif
 
 /* Default (constant) value used for initialization for null
@@ -226,14 +256,17 @@
 static YYSTYPE yyval_default;]b4_locations_if([[
 static YYLTYPE yyloc_default][]b4_yyloc_default;])[
 
-/* Copy the second part of user declarations.  */
-]b4_user_post_prologue
-b4_percent_code_get[]dnl
+]b4_user_post_prologue[
+]b4_percent_code_get[]dnl
 
-[#include <stdio.h>
+[#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+]b4_c99_int_type_define[
+
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
@@ -246,23 +279,6 @@
 # endif
 #endif
 
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
-#else
-]b4_c_function_def([YYID], [static int], [[int i], [i]])[
-{
-  return i;
-}
-#endif
-
 #ifndef YYFREE
 # define YYFREE free
 #endif
@@ -273,39 +289,42 @@
 # define YYREALLOC realloc
 #endif
 
-#define YYSIZEMAX ((size_t) -1)
+#define YYSIZEMAX \
+  (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : YY_CAST (ptrdiff_t, SIZE_MAX))
 
 #ifdef __cplusplus
-   typedef bool yybool;
+  typedef bool yybool;
+# define yytrue true
+# define yyfalse false
 #else
-   typedef unsigned char yybool;
+  /* When we move to stdbool, get rid of the various casts to yybool.  */
+  typedef signed char yybool;
+# define yytrue 1
+# define yyfalse 0
 #endif
-#define yytrue 1
-#define yyfalse 0
 
 #ifndef YYSETJMP
 # include <setjmp.h>
 # define YYJMP_BUF jmp_buf
 # define YYSETJMP(Env) setjmp (Env)
-/* Pacify clang.  */
-# define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0))
+/* Pacify Clang and ICC.  */
+# define YYLONGJMP(Env, Val)                    \
+ do {                                           \
+   longjmp (Env, Val);                          \
+   YY_ASSERT (0);                               \
+ } while (yyfalse)
 #endif
 
-/*-----------------.
-| GCC extensions.  |
-`-----------------*/
+]b4_attribute_define([noreturn])[
 
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if (! defined __GNUC__ || __GNUC__ < 2 \
-      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
-#  define __attribute__(Spec) /* empty */
-# endif
+]b4_parse_assert_if([[#ifdef NDEBUG
+# define YY_ASSERT(E) ((void) (0 && (E)))
+#else
+# include <assert.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_ASSERT(E) assert (E)
 #endif
-
-#ifndef YYASSERT
-# define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0)))
-#endif
+]],
+[[#define YY_ASSERT(E) ((void) (0 && (E)))]])[
 
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  ]b4_final_state_number[
@@ -318,7 +337,7 @@
 #define YYNNTS  ]b4_nterms_number[
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  ]b4_rules_number[
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  ]b4_states_number[
 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule.  */
 #define YYMAXRHS ]b4_r2_max[
@@ -326,33 +345,30 @@
    accessed by $0, $-1, etc., in any rule.  */
 #define YYMAXLEFT ]b4_max_left_semantic_context[
 
-/* YYTRANSLATE(X) -- Bison symbol number corresponding to X.  */
+/* YYMAXUTOK -- Last valid token number (for yychar).  */
+#define YYMAXUTOK   ]b4_user_token_number_max[]b4_glr_cc_if([[
+/* YYFAULTYTOK -- Token number (for yychar) that denotes a
+   syntax_error thrown from the scanner.  */
+#define YYFAULTYTOK (YYMAXUTOK + 1)]])[
+/* YYUNDEFTOK -- Symbol number (for yytoken) that denotes an unknown
+   token.  */
 #define YYUNDEFTOK  ]b4_undef_token_number[
-#define YYMAXUTOK   ]b4_user_token_number_max[
 
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+]b4_api_token_raw_if(dnl
+[[#define YYTRANSLATE(YYX) (YYX)]],
+[[#define YYTRANSLATE(YYX)                         \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
 static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
 {
   ]b4_translate[
-};
+};]])[
 
 #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[] =
-{
-  ]b4_prhs[
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
-{
-  ]b4_rhs[
-};
-
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const ]b4_int_type_for([b4_rline])[ yyrline[] =
 {
@@ -369,17 +385,10 @@
 };
 #endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const ]b4_int_type_for([b4_r1])[ yyr1[] =
-{
-  ]b4_r1[
-};
+#define YYPACT_NINF (]b4_pact_ninf[)
+#define YYTABLE_NINF (]b4_table_ninf[)
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const ]b4_int_type_for([b4_r2])[ yyr2[] =
-{
-  ]b4_r2[
-};
+]b4_parser_tables_define[
 
 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none).  */
 static const ]b4_int_type_for([b4_dprec])[ yydprec[] =
@@ -393,41 +402,11 @@
   ]b4_merger[
 };
 
-/* 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[] =
+/* YYIMMEDIATE[RULE-NUM] -- True iff rule #RULE-NUM is not to be deferred, as
+   in the case of predicates.  */
+static const yybool yyimmediate[] =
 {
-  ]b4_defact[
-};
-
-/* YYPDEFGOTO[NTERM-NUM].  */
-static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
-{
-  ]b4_defgoto[
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF ]b4_pact_ninf[
-static const ]b4_int_type_for([b4_pact])[ yypact[] =
-{
-  ]b4_pact[
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
-{
-  ]b4_pgoto[
-};
-
-/* 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.  */
-#define YYTABLE_NINF ]b4_table_ninf[
-static const ]b4_int_type_for([b4_table])[ yytable[] =
-{
-  ]b4_table[
+  ]b4_immediate[
 };
 
 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
@@ -442,25 +421,13 @@
 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
    0, pointed into by YYCONFLP.  */
 ]dnl Do not use b4_int_type_for here, since there are places where
-dnl pointers onto yyconfl are taken, which type is "short int *".
+dnl pointers onto yyconfl are taken, whose type is "short*".
 dnl We probably ought to introduce a type for confl.
-[static const short int yyconfl[] =
+[static const short yyconfl[] =
 {
   ]b4_conflicting_rules[
 };
 
-static const ]b4_int_type_for([b4_check])[ yycheck[] =
-{
-  ]b4_check[
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const ]b4_int_type_for([b4_stos])[ yystos[] =
-{
-  ]b4_stos[
-};
-
 /* Error token number */
 #define YYTERROR 1
 
@@ -468,10 +435,6 @@
 ]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)[
 
 ]b4_pure_if(
 [
@@ -499,9 +462,12 @@
 
 typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
 
-#define YYCHK(YYE)                                                           \
-   do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; }       \
-   while (YYID (0))
+#define YYCHK(YYE)                              \
+  do {                                          \
+    YYRESULTTAG yychk_flag = YYE;               \
+    if (yychk_flag != yyok)                     \
+      return yychk_flag;                        \
+  } while (0)
 
 #if ]b4_api_PREFIX[DEBUG
 
@@ -509,31 +475,52 @@
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
+# define YY_FPRINTF                             \
+  YY_IGNORE_USELESS_CAST_BEGIN YY_FPRINTF_
+
+# define YY_FPRINTF_(Args)                      \
+  do {                                          \
     YYFPRINTF Args;                             \
-} while (YYID (0))
+    YY_IGNORE_USELESS_CAST_END                  \
+  } while (0)
 
-]b4_yy_symbol_print_generate([b4_c_ansi_function_def])[
+# define YY_DPRINTF                             \
+  YY_IGNORE_USELESS_CAST_BEGIN YY_DPRINTF_
 
-# 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))
+# define YY_DPRINTF_(Args)                      \
+  do {                                          \
+    if (yydebug)                                \
+      YYFPRINTF Args;                           \
+    YY_IGNORE_USELESS_CAST_END                  \
+  } while (0)
+
+]b4_yy_location_print_define[
+
+]b4_yy_symbol_print_define[
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                  \
+  do {                                                                  \
+    if (yydebug)                                                        \
+      {                                                                 \
+        YY_FPRINTF ((stderr, "%s ", Title));                            \
+        yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[);        \
+        YY_FPRINTF ((stderr, "\n"));                                    \
+      }                                                                 \
+  } while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
 
+struct yyGLRStack;
+static void yypstack (struct yyGLRStack* yystackp, ptrdiff_t yyk)
+  YY_ATTRIBUTE_UNUSED;
+static void yypdumpstack (struct yyGLRStack* yystackp)
+  YY_ATTRIBUTE_UNUSED;
+
 #else /* !]b4_api_PREFIX[DEBUG */
 
-# define YYDPRINTF(Args)
+# define YY_DPRINTF(Args) do {} while (yyfalse)
 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 
 #endif /* !]b4_api_PREFIX[DEBUG */
@@ -562,13 +549,7 @@
 #define YYHEADROOM 2
 
 #ifndef YYSTACKEXPANDABLE
-# if (! defined __cplusplus \
-      || (]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
-# endif
 #endif
 
 #if YYSTACKEXPANDABLE
@@ -576,13 +557,13 @@
   do {                                                  \
     if (Yystack->yyspaceLeft < YYHEADROOM)              \
       yyexpandGLRStack (Yystack);                       \
-  } while (YYID (0))
+  } while (0)
 #else
 # define YY_RESERVE_GLRSTACK(Yystack)                   \
   do {                                                  \
     if (Yystack->yyspaceLeft < YYHEADROOM)              \
       yyMemoryExhausted (Yystack);                      \
-  } while (YYID (0))
+  } while (0)
 #endif
 
 
@@ -616,12 +597,12 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static size_t
+static ptrdiff_t
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      size_t yyn = 0;
+      ptrdiff_t yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -634,10 +615,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
-#ifdef __cplusplus
-            [[fallthrough]];
-#endif
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -652,26 +633,26 @@
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
-    return strlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
+    return YY_CAST (ptrdiff_t, strlen (yystr));
 }
 # endif
 
 #endif /* !YYERROR_VERBOSE */
 
-/** State numbers, as in LALR(1) machine */
+/** State numbers. */
 typedef int yyStateNum;
 
-/** Rule numbers, as in LALR(1) machine */
+/** Rule numbers. */
 typedef int yyRuleNum;
 
-/** Grammar symbol */
-typedef short int yySymbol;
+/** Grammar symbol. */
+typedef int yySymbol;
 
-/** Item references, as in LALR(1) machine */
-typedef short int yyItemNum;
+/** Item references. */
+typedef short yyItemNum;
 
 typedef struct yyGLRState yyGLRState;
 typedef struct yyGLRStateSet yyGLRStateSet;
@@ -689,11 +670,11 @@
   yyStateNum yylrState;
   /** Preceding state in this stack */
   yyGLRState* yypred;
-  /** Source position of the first token produced by my symbol */
-  size_t yyposn;
+  /** Source position of the last token produced by my symbol */
+  ptrdiff_t yyposn;
   union {
     /** First in a chain of alternative reductions producing the
-     *  non-terminal corresponding to this state, threaded through
+     *  nonterminal corresponding to this state, threaded through
      *  yynext.  */
     yySemanticOption* yyfirstVal;
     /** Semantic value for this state.  */
@@ -710,7 +691,8 @@
    *  operation, yylookaheadNeeds[0] is not maintained since it would merely
    *  duplicate yychar != YYEMPTY.  */
   yybool* yylookaheadNeeds;
-  size_t yysize, yycapacity;
+  ptrdiff_t yysize;
+  ptrdiff_t yycapacity;
 };
 
 struct yySemanticOption {
@@ -750,7 +732,7 @@
   YYJMP_BUF yyexception_buffer;
   yyGLRStackItem* yyitems;
   yyGLRStackItem* yynextFree;
-  size_t yyspaceLeft;
+  ptrdiff_t yyspaceLeft;
   yyGLRState* yysplitPoint;
   yyGLRState* yylastDeleted;
   yyGLRStateSet yytops;
@@ -760,19 +742,15 @@
 static void yyexpandGLRStack (yyGLRStack* yystackp);
 #endif
 
-static void yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
-  __attribute__ ((__noreturn__));
-static void
+_Noreturn static void
 yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
 {
-  if (yymsg != YY_NULL)
+  if (yymsg != YY_NULLPTR)
     yyerror (]b4_yyerror_args[yymsg);
   YYLONGJMP (yystackp->yyexception_buffer, 1);
 }
 
-static void yyMemoryExhausted (yyGLRStack* yystackp)
-  __attribute__ ((__noreturn__));
-static void
+_Noreturn static void
 yyMemoryExhausted (yyGLRStack* yystackp)
 {
   YYLONGJMP (yystackp->yyexception_buffer, 2);
@@ -783,17 +761,14 @@
 static inline const char*
 yytokenName (yySymbol yytoken)
 {
-  if (yytoken == YYEMPTY)
-    return "";
-
-  return yytname[yytoken];
+  return yytoken == YYEMPTY ? "" : yytname[yytoken];
 }
 #endif
 
 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
  *  at YYVSP[YYLOW0].yystate.yypred.  Leaves YYVSP[YYLOW1].yystate.yypred
  *  containing the pointer to the next state in the chain.  */
-static void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__));
+static void yyfillin (yyGLRStackItem *, int, int) YY_ATTRIBUTE_UNUSED;
 static void
 yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
 {
@@ -801,19 +776,70 @@
   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;]b4_locations_if([[
+#if ]b4_api_PREFIX[DEBUG
+      yyvsp[i].yystate.yylrState = s->yylrState;
+#endif
+      yyvsp[i].yystate.yyresolved = s->yyresolved;
+      if (s->yyresolved)
+        yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
+      else
+        /* The effect of using yysval or yyloc (in an immediate rule) is
+         * undefined.  */
+        yyvsp[i].yystate.yysemantics.yyfirstVal = YY_NULLPTR;]b4_locations_if([[
       yyvsp[i].yystate.yyloc = s->yyloc;]])[
       s = yyvsp[i].yystate.yypred = s->yypred;
     }
 }
 
+]m4_define([b4_yygetToken_call],
+           [[yygetToken (&yychar][]b4_pure_if([, yystackp])[]b4_user_args[)]])[
+/** If yychar is empty, fetch the next token.  */
+static inline yySymbol
+yygetToken (int *yycharp][]b4_pure_if([, yyGLRStack* yystackp])[]b4_user_formals[)
+{
+  yySymbol yytoken;
+]b4_parse_param_use()dnl
+[  if (*yycharp == YYEMPTY)
+    {
+      YY_DPRINTF ((stderr, "Reading a token: "));]b4_glr_cc_if([[
+#if YY_EXCEPTIONS
+      try
+        {
+#endif // YY_EXCEPTIONS
+          *yycharp = ]b4_lex[;
+#if YY_EXCEPTIONS
+        }
+      catch (const ]b4_namespace_ref[::]b4_parser_class[::syntax_error& yyexc)
+        {
+          YY_DPRINTF ((stderr, "Caught exception: %s\n", yyexc.what()));]b4_locations_if([
+          yylloc = yyexc.location;])[
+          yyerror (]b4_lyyerror_args[yyexc.what ());
+          // Map errors caught in the scanner to the undefined token
+          // (YYUNDEFTOK), so that error handling is started.
+          // However, record this with this special value of yychar.
+          *yycharp = YYFAULTYTOK;
+        }
+#endif // YY_EXCEPTIONS]], [[
+      *yycharp = ]b4_lex[;]])[
+    }
+  if (*yycharp <= YYEOF)
+    {
+      *yycharp = yytoken = YYEOF;
+      YY_DPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (*yycharp);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+  return yytoken;
+}
+
 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1.  Otherwise, fill in
  * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
  * For convenience, always return YYLOW1.  */
 static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
-     __attribute__ ((__unused__));
+     YY_ATTRIBUTE_UNUSED;
 static inline int
 yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
 {
@@ -830,16 +856,16 @@
  *  value ($$), and yylocp points to place for location information
  *  (@@$).  Returns yyok for normal return, yyaccept for YYACCEPT,
  *  yyerr for YYERROR, yyabort for YYABORT.  */
-/*ARGSUSED*/ static YYRESULTTAG
+static YYRESULTTAG
 yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
               yyGLRStack* yystackp,
               YYSTYPE* yyvalp]b4_locuser_formals[)
 {
-  yybool yynormal __attribute__ ((__unused__)) =
-    (yystackp->yysplitPoint == YY_NULL);
+  yybool yynormal YY_ATTRIBUTE_UNUSED = yystackp->yysplitPoint == YY_NULLPTR;
   int yylow;
-]b4_parse_param_use[]dnl
-[# undef yyerrok
+]b4_parse_param_use([yyvalp], [yylocp])dnl
+[  YYUSE (yyrhslen);
+# undef yyerrok
 # define yyerrok (yystackp->yyerrState = 0)
 # undef YYACCEPT
 # define YYACCEPT return yyaccept
@@ -852,7 +878,7 @@
 # undef yyclearin
 # define yyclearin (yychar = YYEMPTY)
 # undef YYFILL
-# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
+# define YYFILL(N) yyfill (yyvsp, &yylow, (N), yynormal)
 # undef YYBACKUP
 # define YYBACKUP(Token, Value)                                              \
   return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")),     \
@@ -863,14 +889,30 @@
     *yyvalp = yyval_default;
   else
     *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;]b4_locations_if([[
+  /* Default location. */
   YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen);
   yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
-]])[
+]])[]b4_glr_cc_if([[
+#if YY_EXCEPTIONS
+  typedef ]b4_namespace_ref[::]b4_parser_class[::syntax_error syntax_error;
+  try
+  {
+#endif // YY_EXCEPTIONS]])[
   switch (yyn)
     {
-      ]b4_user_actions[
+]b4_user_actions[
       default: break;
+    }]b4_glr_cc_if([[
+#if YY_EXCEPTIONS
+  }
+  catch (const syntax_error& yyexc)
+    {
+      YY_DPRINTF ((stderr, "Caught exception: %s\n", yyexc.what()));]b4_locations_if([
+      *yylocp = yyexc.location;])[
+      yyerror (]b4_yyerror_args[yyexc.what ());
+      YYERROR;
     }
+#endif // YY_EXCEPTIONS]])[
 
   return yyok;
 # undef yyerrok
@@ -881,9 +923,9 @@
 # undef yyclearin
 # undef YYRECOVERING
 }
-
 
-/*ARGSUSED*/ static void
+
+static void
 yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
 {
   YYUSE (yy0);
@@ -891,14 +933,14 @@
 
   switch (yyn)
     {
-      ]b4_mergers[
+]b4_mergers[
       default: break;
     }
 }
 
                               /* Bison grammar-table manipulation.  */
 
-]b4_yydestruct_generate([b4_c_ansi_function_def])[
+]b4_yydestruct_define[
 
 /** Number of symbols composing the right hand side of rule #RULE.  */
 static inline int
@@ -919,12 +961,10 @@
       if (yydebug)
         {
           if (yys->yysemantics.yyfirstVal)
-            YYFPRINTF (stderr, "%s unresolved ", yymsg);
+            YY_FPRINTF ((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");
+            YY_FPRINTF ((stderr, "%s incomplete", yymsg));
+          YY_SYMBOL_PRINT ("", yystos[yys->yylrState], YY_NULLPTR, &yys->yyloc);
         }
 #endif
 
@@ -941,17 +981,17 @@
     }
 }
 
-/** Left-hand-side symbol for rule #RULE.  */
+/** Left-hand-side symbol for rule #YYRULE.  */
 static inline yySymbol
 yylhsNonterm (yyRuleNum yyrule)
 {
   return yyr1[yyrule];
 }
 
-#define yypact_value_is_default(Yystate) \
-  ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
+#define yypact_value_is_default(Yyn) \
+  ]b4_table_value_equals([[pact]], [[Yyn]], [b4_pact_ninf], [YYPACT_NINF])[
 
-/** True iff LR state STATE has only a default reduction (regardless
+/** True iff LR state YYSTATE has only a default reduction (regardless
  *  of token).  */
 static inline yybool
 yyisDefaultedState (yyStateNum yystate)
@@ -959,56 +999,58 @@
   return yypact_value_is_default (yypact[yystate]);
 }
 
-/** The default reduction for STATE, assuming it has one.  */
+/** The default reduction for YYSTATE, assuming it has one.  */
 static inline yyRuleNum
 yydefaultAction (yyStateNum yystate)
 {
   return yydefact[yystate];
 }
 
-#define yytable_value_is_error(Yytable_value) \
-  ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
+#define yytable_value_is_error(Yyn) \
+  ]b4_table_value_equals([[table]], [[Yyn]], [b4_table_ninf], [YYTABLE_NINF])[
 
-/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
+/** The action to take in YYSTATE on seeing YYTOKEN.
  *  Result R means
  *    R < 0:  Reduce on rule -R.
  *    R = 0:  Error.
  *    R > 0:  Shift to state R.
- *  Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
- *  conflicting reductions.
+ *  Set *YYCONFLICTS to a pointer into yyconfl to a 0-terminated list
+ *  of conflicting reductions.
  */
-static inline void
-yygetLRActions (yyStateNum yystate, int yytoken,
-                int* yyaction, const short int** yyconflicts)
+static inline int
+yygetLRActions (yyStateNum yystate, yySymbol yytoken, const short** yyconflicts)
 {
   int yyindex = yypact[yystate] + yytoken;
-  if (yypact_value_is_default (yypact[yystate])
+  if (yyisDefaultedState (yystate)
       || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
     {
-      *yyaction = -yydefact[yystate];
       *yyconflicts = yyconfl;
+      return -yydefact[yystate];
     }
   else if (! yytable_value_is_error (yytable[yyindex]))
     {
-      *yyaction = yytable[yyindex];
       *yyconflicts = yyconfl + yyconflp[yyindex];
+      return yytable[yyindex];
     }
   else
     {
-      *yyaction = 0;
       *yyconflicts = yyconfl + yyconflp[yyindex];
+      return 0;
     }
 }
 
+/** Compute post-reduction state.
+ * \param yystate   the current state
+ * \param yysym     the nonterminal to push on the stack
+ */
 static inline yyStateNum
-yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
+yyLRgotoState (yyStateNum yystate, yySymbol yysym)
 {
-  int yyr;
-  yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
+  int yyr = yypgoto[yysym - YYNTOKENS] + yystate;
   if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
     return yytable[yyr];
   else
-    return yydefgoto[yylhs - YYNTOKENS];
+    return yydefgoto[yysym - YYNTOKENS];
 }
 
 static inline yybool
@@ -1025,9 +1067,10 @@
 
                                 /* GLRStates */
 
-/** Return a fresh GLRStackItem.  Callers should call
- * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
- * headroom.  */
+/** Return a fresh GLRStackItem in YYSTACKP.  The item is an LR state
+ *  if YYISSTATE, and otherwise a semantic option.  Callers should call
+ *  YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
+ *  headroom.  */
 
 static inline yyGLRStackItem*
 yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState)
@@ -1040,16 +1083,17 @@
 }
 
 /** Add a new semantic action that will execute the action for rule
- *  RULENUM on the semantic values in RHS to the list of
- *  alternative actions for STATE.  Assumes that RHS comes from
- *  stack #K of *STACKP. */
+ *  YYRULE on the semantic values in YYRHS to the list of
+ *  alternative actions for YYSTATE.  Assumes that YYRHS comes from
+ *  stack #YYK of *YYSTACKP. */
 static void
-yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate,
-                     yyGLRState* rhs, yyRuleNum yyrule)
+yyaddDeferredAction (yyGLRStack* yystackp, ptrdiff_t yyk, yyGLRState* yystate,
+                     yyGLRState* yyrhs, yyRuleNum yyrule)
 {
   yySemanticOption* yynewOption =
     &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
-  yynewOption->yystate = rhs;
+  YY_ASSERT (!yynewOption->yyisState);
+  yynewOption->yystate = yyrhs;
   yynewOption->yyrule = yyrule;
   if (yystackp->yytops.yylookaheadNeeds[yyk])
     {
@@ -1067,23 +1111,31 @@
 
                                 /* GLRStacks */
 
-/** Initialize SET to a singleton set containing an empty stack.  */
+/** Initialize YYSET to a singleton set containing an empty stack.  */
 static yybool
 yyinitStateSet (yyGLRStateSet* yyset)
 {
   yyset->yysize = 1;
   yyset->yycapacity = 16;
-  yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
+  yyset->yystates
+    = YY_CAST (yyGLRState**,
+               YYMALLOC (YY_CAST (size_t, yyset->yycapacity)
+                         * sizeof yyset->yystates[0]));
   if (! yyset->yystates)
     return yyfalse;
-  yyset->yystates[0] = YY_NULL;
-  yyset->yylookaheadNeeds =
-    (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]);
+  yyset->yystates[0] = YY_NULLPTR;
+  yyset->yylookaheadNeeds
+    = YY_CAST (yybool*,
+               YYMALLOC (YY_CAST (size_t, yyset->yycapacity)
+                         * sizeof yyset->yylookaheadNeeds[0]));
   if (! yyset->yylookaheadNeeds)
     {
       YYFREE (yyset->yystates);
       return yyfalse;
     }
+  memset (yyset->yylookaheadNeeds,
+          0,
+          YY_CAST (size_t, yyset->yycapacity) * sizeof yyset->yylookaheadNeeds[0]);
   return yytrue;
 }
 
@@ -1093,30 +1145,33 @@
   YYFREE (yyset->yylookaheadNeeds);
 }
 
-/** Initialize STACK to a single empty stack, with total maximum
- *  capacity for all stacks of SIZE.  */
+/** Initialize *YYSTACKP to a single empty stack, with total maximum
+ *  capacity for all stacks of YYSIZE.  */
 static yybool
-yyinitGLRStack (yyGLRStack* yystackp, size_t yysize)
+yyinitGLRStack (yyGLRStack* yystackp, ptrdiff_t yysize)
 {
   yystackp->yyerrState = 0;
   yynerrs = 0;
   yystackp->yyspaceLeft = yysize;
-  yystackp->yyitems =
-    (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]);
+  yystackp->yyitems
+    = YY_CAST (yyGLRStackItem*,
+               YYMALLOC (YY_CAST (size_t, yysize)
+                         * sizeof yystackp->yynextFree[0]));
   if (!yystackp->yyitems)
     return yyfalse;
   yystackp->yynextFree = yystackp->yyitems;
-  yystackp->yysplitPoint = YY_NULL;
-  yystackp->yylastDeleted = YY_NULL;
+  yystackp->yysplitPoint = YY_NULLPTR;
+  yystackp->yylastDeleted = YY_NULLPTR;
   return yyinitStateSet (&yystackp->yytops);
 }
 
 
 #if YYSTACKEXPANDABLE
-# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
-  &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
+# define YYRELOC(YYFROMITEMS, YYTOITEMS, YYX, YYTYPE)                   \
+  &((YYTOITEMS)                                                         \
+    - ((YYFROMITEMS) - YY_REINTERPRET_CAST (yyGLRStackItem*, (YYX))))->YYTYPE
 
-/** If STACK is expandable, extend it.  WARNING: Pointers into the
+/** If *YYSTACKP is expandable, extend it.  WARNING: Pointers into the
     stack from outside should be considered invalid after this call.
     We always expand when there are 1 or fewer items left AFTER an
     allocation, so that we can avoid having external pointers exist
@@ -1126,15 +1181,18 @@
 {
   yyGLRStackItem* yynewItems;
   yyGLRStackItem* yyp0, *yyp1;
-  size_t yynewSize;
-  size_t yyn;
-  size_t yysize = yystackp->yynextFree - yystackp->yyitems;
+  ptrdiff_t yynewSize;
+  ptrdiff_t yyn;
+  ptrdiff_t yysize = yystackp->yynextFree - yystackp->yyitems;
   if (YYMAXDEPTH - YYHEADROOM < yysize)
     yyMemoryExhausted (yystackp);
   yynewSize = 2*yysize;
   if (YYMAXDEPTH < yynewSize)
     yynewSize = YYMAXDEPTH;
-  yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]);
+  yynewItems
+    = YY_CAST (yyGLRStackItem*,
+               YYMALLOC (YY_CAST (size_t, yynewSize)
+                         * sizeof yynewItems[0]));
   if (! yynewItems)
     yyMemoryExhausted (yystackp);
   for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize;
@@ -1142,14 +1200,14 @@
        yyn -= 1, yyp0 += 1, yyp1 += 1)
     {
       *yyp1 = *yyp0;
-      if (*(yybool *) yyp0)
+      if (*YY_REINTERPRET_CAST (yybool *, yyp0))
         {
           yyGLRState* yys0 = &yyp0->yystate;
           yyGLRState* yys1 = &yyp1->yystate;
-          if (yys0->yypred != YY_NULL)
+          if (yys0->yypred != YY_NULLPTR)
             yys1->yypred =
               YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
-          if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULL)
+          if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULLPTR)
             yys1->yysemantics.yyfirstVal =
               YYRELOC (yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
         }
@@ -1157,18 +1215,18 @@
         {
           yySemanticOption* yyv0 = &yyp0->yyoption;
           yySemanticOption* yyv1 = &yyp1->yyoption;
-          if (yyv0->yystate != YY_NULL)
+          if (yyv0->yystate != YY_NULLPTR)
             yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
-          if (yyv0->yynext != YY_NULL)
+          if (yyv0->yynext != YY_NULLPTR)
             yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
         }
     }
-  if (yystackp->yysplitPoint != YY_NULL)
+  if (yystackp->yysplitPoint != YY_NULLPTR)
     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] != YY_NULL)
+    if (yystackp->yytops.yystates[yyn] != YY_NULLPTR)
       yystackp->yytops.yystates[yyn] =
         YYRELOC (yystackp->yyitems, yynewItems,
                  yystackp->yytops.yystates[yyn], yystate);
@@ -1186,52 +1244,50 @@
   yyfreeStateSet (&yystackp->yytops);
 }
 
-/** Assuming that S is a GLRState somewhere on STACK, update the
- *  splitpoint of STACK, if needed, so that it is at least as deep as
- *  S.  */
+/** Assuming that YYS is a GLRState somewhere on *YYSTACKP, update the
+ *  splitpoint of *YYSTACKP, if needed, so that it is at least as deep as
+ *  YYS.  */
 static inline void
 yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
 {
-  if (yystackp->yysplitPoint != YY_NULL && yystackp->yysplitPoint > yys)
+  if (yystackp->yysplitPoint != YY_NULLPTR && yystackp->yysplitPoint > yys)
     yystackp->yysplitPoint = yys;
 }
 
-/** Invalidate stack #K in STACK.  */
+/** Invalidate stack #YYK in *YYSTACKP.  */
 static inline void
-yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
+yymarkStackDeleted (yyGLRStack* yystackp, ptrdiff_t yyk)
 {
-  if (yystackp->yytops.yystates[yyk] != YY_NULL)
+  if (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
     yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
-  yystackp->yytops.yystates[yyk] = YY_NULL;
+  yystackp->yytops.yystates[yyk] = YY_NULLPTR;
 }
 
-/** Undelete the last stack that was marked as deleted.  Can only be
-    done once after a deletion, and only when all other stacks have
+/** Undelete the last stack in *YYSTACKP that was marked as deleted.  Can
+    only be done once after a deletion, and only when all other stacks have
     been deleted.  */
 static void
 yyundeleteLastStack (yyGLRStack* yystackp)
 {
-  if (yystackp->yylastDeleted == YY_NULL || yystackp->yytops.yysize != 0)
+  if (yystackp->yylastDeleted == YY_NULLPTR || 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 = YY_NULL;
+  YY_DPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
+  yystackp->yylastDeleted = YY_NULLPTR;
 }
 
 static inline void
 yyremoveDeletes (yyGLRStack* yystackp)
 {
-  size_t yyi, yyj;
+  ptrdiff_t yyi, yyj;
   yyi = yyj = 0;
   while (yyj < yystackp->yytops.yysize)
     {
-      if (yystackp->yytops.yystates[yyi] == YY_NULL)
+      if (yystackp->yytops.yystates[yyi] == YY_NULLPTR)
         {
           if (yyi == yyj)
-            {
-              YYDPRINTF ((stderr, "Removing dead stacks.\n"));
-            }
+            YY_DPRINTF ((stderr, "Removing dead stacks.\n"));
           yystackp->yytops.yysize -= 1;
         }
       else
@@ -1245,21 +1301,20 @@
           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));
-            }
+            YY_DPRINTF ((stderr, "Rename stack %ld -> %ld.\n",
+                        YY_CAST (long, yyi), YY_CAST (long, yyj)));
           yyj += 1;
         }
       yyi += 1;
     }
 }
 
-/** Shift to a new state on stack #K of STACK, corresponding to LR state
- * LRSTATE, at input position POSN, with (resolved) semantic value SVAL.  */
+/** Shift to a new state on stack #YYK of *YYSTACKP, corresponding to LR
+ * state YYLRSTATE, at input position YYPOSN, with (resolved) semantic
+ * value *YYVALP and source location *YYLOCP.  */
 static inline void
-yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
-            size_t yyposn,
+yyglrShift (yyGLRStack* yystackp, ptrdiff_t yyk, yyStateNum yylrState,
+            ptrdiff_t yyposn,
             YYSTYPE* yyvalp]b4_locations_if([, YYLTYPE* yylocp])[)
 {
   yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
@@ -1275,141 +1330,143 @@
   YY_RESERVE_GLRSTACK (yystackp);
 }
 
-/** Shift stack #K of YYSTACK, to a new state corresponding to LR
+/** Shift stack #YYK of *YYSTACKP, to a new state corresponding to LR
  *  state YYLRSTATE, at input position YYPOSN, with the (unresolved)
  *  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)
+yyglrShiftDefer (yyGLRStack* yystackp, ptrdiff_t yyk, yyStateNum yylrState,
+                 ptrdiff_t yyposn, yyGLRState* yyrhs, yyRuleNum yyrule)
 {
   yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
+  YY_ASSERT (yynewState->yyisState);
 
   yynewState->yylrState = yylrState;
   yynewState->yyposn = yyposn;
   yynewState->yyresolved = yyfalse;
   yynewState->yypred = yystackp->yytops.yystates[yyk];
-  yynewState->yysemantics.yyfirstVal = YY_NULL;
+  yynewState->yysemantics.yyfirstVal = YY_NULLPTR;
   yystackp->yytops.yystates[yyk] = yynewState;
 
   /* Invokes YY_RESERVE_GLRSTACK.  */
-  yyaddDeferredAction (yystackp, yyk, yynewState, rhs, yyrule);
-}
-
-/** Pop the symbols consumed by reduction #RULE from the top of stack
- *  #K of STACK, and perform the appropriate semantic action on their
- *  semantic values.  Assumes that all ambiguities in semantic values
- *  have been previously resolved.  Set *VALP to the resulting value,
- *  and *LOCP to the computed location (if any).  Return value is as
- *  for userAction.  */
-static inline YYRESULTTAG
-yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
-            YYSTYPE* yyvalp]b4_locuser_formals[)
-{
-  int yynrhs = yyrhsLength (yyrule);
-
-  if (yystackp->yysplitPoint == YY_NULL)
-    {
-      /* Standard special case: single stack.  */
-      yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
-      YYASSERT (yyk == 0);
-      yystackp->yynextFree -= yynrhs;
-      yystackp->yyspaceLeft += yynrhs;
-      yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
-      return yyuserAction (yyrule, yynrhs, rhs, yystackp,
-                           yyvalp]b4_locuser_args[);
-    }
-  else
-    {
-      /* At present, doAction is never called in nondeterministic
-       * mode, so this branch is never taken.  It is here in
-       * anticipation of a future feature that will allow immediate
-       * evaluation of selected actions in nondeterministic mode.  */
-      int yyi;
-      yyGLRState* yys;
-      yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
-      yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
-        = yystackp->yytops.yystates[yyk];]b4_locations_if([[
-      if (yynrhs == 0)
-        /* Set default location.  */
-        yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
-      for (yyi = 0; yyi < yynrhs; yyi += 1)
-        {
-          yys = yys->yypred;
-          YYASSERT (yys);
-        }
-      yyupdateSplit (yystackp, yys);
-      yystackp->yytops.yystates[yyk] = yys;
-      return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
-                           yystackp, yyvalp]b4_locuser_args[);
-    }
+  yyaddDeferredAction (yystackp, yyk, yynewState, yyrhs, yyrule);
 }
 
 #if !]b4_api_PREFIX[DEBUG
 # define YY_REDUCE_PRINT(Args)
 #else
 # define YY_REDUCE_PRINT(Args)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print Args;               \
-} while (YYID (0))
+  do {                                  \
+    if (yydebug)                        \
+      yy_reduce_print Args;             \
+  } while (0)
 
-/*----------------------------------------------------------.
-| Report that the RULE is going to be reduced on stack #K.  |
-`----------------------------------------------------------*/
+/*----------------------------------------------------------------------.
+| Report that stack #YYK of *YYSTACKP is going to be reduced by YYRULE. |
+`----------------------------------------------------------------------*/
 
-/*ARGSUSED*/ static inline void
-yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
-                 YYSTYPE* yyvalp]b4_locuser_formals[)
+static inline void
+yy_reduce_print (yybool yynormal, yyGLRStackItem* yyvsp, ptrdiff_t yyk,
+                 yyRuleNum yyrule]b4_user_formals[)
 {
-  int yynrhs = yyrhsLength (yyrule);
-  yybool yynormal __attribute__ ((__unused__)) =
-    (yystackp->yysplitPoint == YY_NULL);
-  yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
-  int yylow = 1;
+  int yynrhs = yyrhsLength (yyrule);]b4_locations_if([
+  int yylow = 1;])[
   int yyi;
-  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]);
+  YY_FPRINTF ((stderr, "Reducing stack %ld by rule %d (line %d):\n",
+               YY_CAST (long, yyk), yyrule - 1, yyrline[yyrule]));
+  if (! yynormal)
+    yyfillin (yyvsp, 1, -yynrhs);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
-      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
+      YY_FPRINTF ((stderr, "   $%d = ", yyi + 1));
+      yy_symbol_print (stderr,
+                       yystos[yyvsp[yyi - yynrhs + 1].yystate.yylrState],
+                       &yyvsp[yyi - yynrhs + 1].yystate.yysemantics.yysval]b4_locations_if([,
+                       &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
                        b4_user_args[);
-      YYFPRINTF (stderr, "\n");
+      if (!yyvsp[yyi - yynrhs + 1].yystate.yyresolved)
+        YY_FPRINTF ((stderr, " (unresolved)"));
+      YY_FPRINTF ((stderr, "\n"));
     }
 }
 #endif
 
-/** Pop items off stack #K of STACK according to grammar rule RULE,
+/** Pop the symbols consumed by reduction #YYRULE from the top of stack
+ *  #YYK of *YYSTACKP, and perform the appropriate semantic action on their
+ *  semantic values.  Assumes that all ambiguities in semantic values
+ *  have been previously resolved.  Set *YYVALP to the resulting value,
+ *  and *YYLOCP to the computed location (if any).  Return value is as
+ *  for userAction.  */
+static inline YYRESULTTAG
+yydoAction (yyGLRStack* yystackp, ptrdiff_t yyk, yyRuleNum yyrule,
+            YYSTYPE* yyvalp]b4_locuser_formals[)
+{
+  int yynrhs = yyrhsLength (yyrule);
+
+  if (yystackp->yysplitPoint == YY_NULLPTR)
+    {
+      /* Standard special case: single stack.  */
+      yyGLRStackItem* yyrhs
+        = YY_REINTERPRET_CAST (yyGLRStackItem*, yystackp->yytops.yystates[yyk]);
+      YY_ASSERT (yyk == 0);
+      yystackp->yynextFree -= yynrhs;
+      yystackp->yyspaceLeft += yynrhs;
+      yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
+      YY_REDUCE_PRINT ((yytrue, yyrhs, yyk, yyrule]b4_user_args[));
+      return yyuserAction (yyrule, yynrhs, yyrhs, yystackp,
+                           yyvalp]b4_locuser_args[);
+    }
+  else
+    {
+      yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
+      yyGLRState* yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
+        = yystackp->yytops.yystates[yyk];
+      int yyi;]b4_locations_if([[
+      if (yynrhs == 0)
+        /* Set default location.  */
+        yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
+      for (yyi = 0; yyi < yynrhs; yyi += 1)
+        {
+          yys = yys->yypred;
+          YY_ASSERT (yys);
+        }
+      yyupdateSplit (yystackp, yys);
+      yystackp->yytops.yystates[yyk] = yys;
+      YY_REDUCE_PRINT ((yyfalse, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yyk, yyrule]b4_user_args[));
+      return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
+                           yystackp, yyvalp]b4_locuser_args[);
+    }
+}
+
+/** Pop items off stack #YYK of *YYSTACKP according to grammar rule YYRULE,
  *  and push back on the resulting nonterminal symbol.  Perform the
- *  semantic action associated with RULE and store its value with the
- *  newly pushed state, if FORCEEVAL or if STACK is currently
+ *  semantic action associated with YYRULE and store its value with the
+ *  newly pushed state, if YYFORCEEVAL or if *YYSTACKP is currently
  *  unambiguous.  Otherwise, store the deferred semantic action with
  *  the new state.  If the new state would have an identical input
  *  position, LR state, and predecessor to an existing state on the stack,
- *  it is identified with that existing state, eliminating stack #K from
- *  the STACK.  In this case, the (necessarily deferred) semantic value is
+ *  it is identified with that existing state, eliminating stack #YYK from
+ *  *YYSTACKP.  In this case, the semantic value is
  *  added to the options for the existing state's semantic value.
  */
 static inline YYRESULTTAG
-yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
+yyglrReduce (yyGLRStack* yystackp, ptrdiff_t yyk, yyRuleNum yyrule,
              yybool yyforceEval]b4_user_formals[)
 {
-  size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
+  ptrdiff_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
 
-  if (yyforceEval || yystackp->yysplitPoint == YY_NULL)
+  if (yyforceEval || yystackp->yysplitPoint == YY_NULLPTR)
     {
-      YYSTYPE yysval;]b4_locations_if([
-      YYLTYPE yyloc;])[
+      YYSTYPE yysval;]b4_locations_if([[
+      YYLTYPE yyloc;]])[
 
-      YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
-      YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
+      YYRESULTTAG yyflag = yydoAction (yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[);
+      if (yyflag == yyerr && yystackp->yysplitPoint != YY_NULLPTR)
+        YY_DPRINTF ((stderr,
+                     "Parse on stack %ld rejected by rule %d (line %d).\n",
+                     YY_CAST (long, yyk), yyrule - 1, yyrline[yyrule - 1]));
+      if (yyflag != yyok)
+        return yyflag;
       YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
       yyglrShift (yystackp, yyk,
                   yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
@@ -1418,7 +1475,7 @@
     }
   else
     {
-      size_t yyi;
+      ptrdiff_t yyi;
       int yyn;
       yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk];
       yyStateNum yynewLRState;
@@ -1427,15 +1484,17 @@
            0 < yyn; yyn -= 1)
         {
           yys = yys->yypred;
-          YYASSERT (yys);
+          YY_ASSERT (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));
+      YY_DPRINTF ((stderr,
+                   "Reduced stack %ld by rule %d (line %d); action deferred.  "
+                   "Now in state %d.\n",
+                   YY_CAST (long, yyk), yyrule - 1, yyrline[yyrule - 1],
+                   yynewLRState));
       for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
-        if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULL)
+        if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULLPTR)
           {
             yyGLRState *yysplit = yystackp->yysplitPoint;
             yyGLRState *yyp = yystackp->yytops.yystates[yyi];
@@ -1445,9 +1504,8 @@
                   {
                     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));
+                    YY_DPRINTF ((stderr, "Merging stack %ld into stack %ld.\n",
+                                 YY_CAST (long, yyk), YY_CAST (long, yyi)));
                     return yyok;
                   }
                 yyp = yyp->yypred;
@@ -1459,51 +1517,53 @@
   return yyok;
 }
 
-static size_t
-yysplitStack (yyGLRStack* yystackp, size_t yyk)
+static ptrdiff_t
+yysplitStack (yyGLRStack* yystackp, ptrdiff_t yyk)
 {
-  if (yystackp->yysplitPoint == YY_NULL)
+  if (yystackp->yysplitPoint == YY_NULLPTR)
     {
-      YYASSERT (yyk == 0);
+      YY_ASSERT (yyk == 0);
       yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
     }
-  if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity)
+  if (yystackp->yytops.yycapacity <= yystackp->yytops.yysize)
     {
-      yyGLRState** yynewStates;
-      yybool* yynewLookaheadNeeds;
-
-      yynewStates = YY_NULL;
-
-      if (yystackp->yytops.yycapacity
-          > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
+      ptrdiff_t state_size = sizeof yystackp->yytops.yystates[0];
+      ptrdiff_t half_max_capacity = YYSIZEMAX / 2 / state_size;
+      if (half_max_capacity < yystackp->yytops.yycapacity)
         yyMemoryExhausted (yystackp);
       yystackp->yytops.yycapacity *= 2;
 
-      yynewStates =
-        (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
-                                  (yystackp->yytops.yycapacity
-                                   * sizeof yynewStates[0]));
-      if (yynewStates == YY_NULL)
-        yyMemoryExhausted (yystackp);
-      yystackp->yytops.yystates = yynewStates;
+      {
+        yyGLRState** yynewStates
+          = YY_CAST (yyGLRState**,
+                     YYREALLOC (yystackp->yytops.yystates,
+                                (YY_CAST (size_t, yystackp->yytops.yycapacity)
+                                 * sizeof yynewStates[0])));
+        if (yynewStates == YY_NULLPTR)
+          yyMemoryExhausted (yystackp);
+        yystackp->yytops.yystates = yynewStates;
+      }
 
-      yynewLookaheadNeeds =
-        (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
-                             (yystackp->yytops.yycapacity
-                              * sizeof yynewLookaheadNeeds[0]));
-      if (yynewLookaheadNeeds == YY_NULL)
-        yyMemoryExhausted (yystackp);
-      yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
+      {
+        yybool* yynewLookaheadNeeds
+          = YY_CAST (yybool*,
+                     YYREALLOC (yystackp->yytops.yylookaheadNeeds,
+                                (YY_CAST (size_t, yystackp->yytops.yycapacity)
+                                 * sizeof yynewLookaheadNeeds[0])));
+        if (yynewLookaheadNeeds == YY_NULLPTR)
+          yyMemoryExhausted (yystackp);
+        yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
+      }
     }
   yystackp->yytops.yystates[yystackp->yytops.yysize]
     = yystackp->yytops.yystates[yyk];
   yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize]
     = yystackp->yytops.yylookaheadNeeds[yyk];
   yystackp->yytops.yysize += 1;
-  return yystackp->yytops.yysize-1;
+  return yystackp->yytops.yysize - 1;
 }
 
-/** True iff Y0 and Y1 represent identical options at the top level.
+/** True iff YYY0 and YYY1 represent identical options at the top level.
  *  That is, they represent the same rule applied to RHS symbols
  *  that produce the same terminal symbols.  */
 static yybool
@@ -1525,8 +1585,8 @@
     return yyfalse;
 }
 
-/** Assuming identicalOptions (Y0,Y1), destructively merge the
- *  alternative semantic values for the RHS-symbols of Y1 and Y0.  */
+/** Assuming identicalOptions (YYY0,YYY1), destructively merge the
+ *  alternative semantic values for the RHS-symbols of YYY1 and YYY0.  */
 static void
 yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
 {
@@ -1534,7 +1594,7 @@
   int yyn;
   for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
        yyn = yyrhsLength (yyy0->yyrule);
-       yyn > 0;
+       0 < yyn;
        yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
     {
       if (yys0 == yys1)
@@ -1553,11 +1613,11 @@
         {
           yySemanticOption** yyz0p = &yys0->yysemantics.yyfirstVal;
           yySemanticOption* yyz1 = yys1->yysemantics.yyfirstVal;
-          while (YYID (yytrue))
+          while (yytrue)
             {
-              if (yyz1 == *yyz0p || yyz1 == YY_NULL)
+              if (yyz1 == *yyz0p || yyz1 == YY_NULLPTR)
                 break;
-              else if (*yyz0p == YY_NULL)
+              else if (*yyz0p == YY_NULLPTR)
                 {
                   *yyz0p = yyz1;
                   break;
@@ -1605,18 +1665,18 @@
                                    yyGLRStack* yystackp]b4_user_formals[);
 
 
-/** Resolve the previous N states starting at and including state S.  If result
- *  != yyok, some states may have been left unresolved possibly with empty
- *  semantic option chains.  Regardless of whether result = yyok, each state
- *  has been left with consistent data so that yydestroyGLRState can be invoked
- *  if necessary.  */
+/** Resolve the previous YYN states starting at and including state YYS
+ *  on *YYSTACKP. If result != yyok, some states may have been left
+ *  unresolved possibly with empty semantic option chains.  Regardless
+ *  of whether result = yyok, each state has been left with consistent
+ *  data so that yydestroyGLRState can be invoked if necessary.  */
 static YYRESULTTAG
 yyresolveStates (yyGLRState* yys, int yyn,
                  yyGLRStack* yystackp]b4_user_formals[)
 {
   if (0 < yyn)
     {
-      YYASSERT (yys->yypred);
+      YY_ASSERT (yys->yypred);
       YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[));
       if (! yys->yyresolved)
         YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
@@ -1624,9 +1684,10 @@
   return yyok;
 }
 
-/** Resolve the states for the RHS of OPT, perform its user action, and return
- *  the semantic value and location.  Regardless of whether result = yyok, all
- *  RHS states have been destroyed (assuming the user action destroys all RHS
+/** Resolve the states for the RHS of YYOPT on *YYSTACKP, perform its
+ *  user action, and return the semantic value and location in *YYVALP
+ *  and *YYLOCP.  Regardless of whether result = yyok, all RHS states
+ *  have been destroyed (assuming the user action destroys all RHS
  *  semantic values if invoked).  */
 static YYRESULTTAG
 yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
@@ -1677,7 +1738,7 @@
 
   for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
     yystates[yyi] = yys;
-  if (yys == YY_NULL)
+  if (yys == YY_NULLPTR)
     {
       yyleftmost_state.yyposn = 0;
       yystates[0] = &yyleftmost_state;
@@ -1686,26 +1747,26 @@
     yystates[0] = yys;
 
   if (yyx->yystate->yyposn < yys->yyposn + 1)
-    YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
-               yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
-               yyx->yyrule - 1);
+    YY_FPRINTF ((stderr, "%*s%s -> <Rule %d, empty>\n",
+                 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);
+    YY_FPRINTF ((stderr, "%*s%s -> <Rule %d, tokens %ld .. %ld>\n",
+                 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
+                 yyx->yyrule - 1, YY_CAST (long, yys->yyposn + 1),
+                 YY_CAST (long, 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]));
+            YY_FPRINTF ((stderr, "%*s%s <empty>\n", yyindent+2, "",
+                         yytokenName (yystos[yystates[yyi]->yylrState])));
           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);
+            YY_FPRINTF ((stderr, "%*s%s <tokens %ld .. %ld>\n", yyindent+2, "",
+                         yytokenName (yystos[yystates[yyi]->yylrState]),
+                         YY_CAST (long, yystates[yyi-1]->yyposn + 1),
+                         YY_CAST (long, yystates[yyi]->yyposn)));
         }
       else
         yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
@@ -1713,7 +1774,7 @@
 }
 #endif
 
-/*ARGSUSED*/ static YYRESULTTAG
+static YYRESULTTAG
 yyreportAmbiguity (yySemanticOption* yyx0,
                    yySemanticOption* yyx1]b4_pure_formals[)
 {
@@ -1721,23 +1782,23 @@
   YYUSE (yyx1);
 
 #if ]b4_api_PREFIX[DEBUG
-  YYFPRINTF (stderr, "Ambiguity detected.\n");
-  YYFPRINTF (stderr, "Option 1,\n");
+  YY_FPRINTF ((stderr, "Ambiguity detected.\n"));
+  YY_FPRINTF ((stderr, "Option 1,\n"));
   yyreportTree (yyx0, 2);
-  YYFPRINTF (stderr, "\nOption 2,\n");
+  YY_FPRINTF ((stderr, "\nOption 2,\n"));
   yyreportTree (yyx1, 2);
-  YYFPRINTF (stderr, "\n");
+  YY_FPRINTF ((stderr, "\n"));
 #endif
 
   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.  */
+/** Resolve the locations for each of the YYN1 states in *YYSTACKP,
+ *  ending at YYS1.  Has no effect on previously resolved states.
+ *  The first semantic option of a state is always chosen.  */
 static void
-yyresolveLocations (yyGLRState* yys1, int yyn1,
+yyresolveLocations (yyGLRState *yys1, int yyn1,
                     yyGLRStack *yystackp]b4_user_formals[)
 {
   if (0 < yyn1)
@@ -1748,9 +1809,9 @@
           yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
           int yynrhs;
           yySemanticOption *yyoption = yys1->yysemantics.yyfirstVal;
-          YYASSERT (yyoption != YY_NULL);
+          YY_ASSERT (yyoption);
           yynrhs = yyrhsLength (yyoption->yyrule);
-          if (yynrhs > 0)
+          if (0 < yynrhs)
             {
               yyGLRState *yys;
               int yyn;
@@ -1773,27 +1834,17 @@
               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;
-          }
+          YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
         }
     }
 }]])[
 
-/** Resolve the ambiguity represented in state S, perform the indicated
- *  actions, and set the semantic value of S.  If result != yyok, the chain of
- *  semantic options in S has been cleared instead or it has been left
- *  unmodified except that redundant options may have been removed.  Regardless
- *  of whether result = yyok, S has been left with consistent data so that
+/** Resolve the ambiguity represented in state YYS in *YYSTACKP,
+ *  perform the indicated actions, and set the semantic value of YYS.
+ *  If result != yyok, the chain of semantic options in YYS has been
+ *  cleared instead or it has been left unmodified except that
+ *  redundant options may have been removed.  Regardless of whether
+ *  result = yyok, YYS has been left with consistent data so that
  *  yydestroyGLRState can be invoked if necessary.  */
 static YYRESULTTAG
 yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp]b4_user_formals[)
@@ -1806,7 +1857,7 @@
   YYRESULTTAG yyflag;]b4_locations_if([
   YYLTYPE *yylocp = &yys->yyloc;])[
 
-  for (yypp = &yyoptionList->yynext; *yypp != YY_NULL; )
+  for (yypp = &yyoptionList->yynext; *yypp != YY_NULLPTR; )
     {
       yySemanticOption* yyp = *yypp;
 
@@ -1833,7 +1884,7 @@
               yymerge = yyfalse;
               break;
             default:
-              /* This cannot happen so it is not worth a YYASSERT (yyfalse),
+              /* This cannot happen so it is not worth a YY_ASSERT (yyfalse),
                  but some compilers complain if the default case is
                  omitted.  */
               break;
@@ -1848,7 +1899,7 @@
       int yyprec = yydprec[yybest->yyrule];
       yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args[);
       if (yyflag == yyok)
-        for (yyp = yybest->yynext; yyp != YY_NULL; yyp = yyp->yynext)
+        for (yyp = yybest->yynext; yyp != YY_NULLPTR; yyp = yyp->yynext)
           {
             if (yyprec == yydprec[yyp->yyrule])
               {
@@ -1875,14 +1926,14 @@
       yys->yysemantics.yysval = yysval;
     }
   else
-    yys->yysemantics.yyfirstVal = YY_NULL;
+    yys->yysemantics.yyfirstVal = YY_NULLPTR;
   return yyflag;
 }
 
 static YYRESULTTAG
 yyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
 {
-  if (yystackp->yysplitPoint != YY_NULL)
+  if (yystackp->yysplitPoint != YY_NULLPTR)
     {
       yyGLRState* yys;
       int yyn;
@@ -1902,21 +1953,21 @@
 {
   yyGLRState* yyp, *yyq, *yyr;
 
-  if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULL)
+  if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULLPTR)
     return;
 
-  for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULL;
+  for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULLPTR;
        yyp != yystackp->yysplitPoint;
        yyr = yyp, yyp = yyq, yyq = yyp->yypred)
     yyp->yypred = yyr;
 
   yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
-  yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
+  yystackp->yynextFree = YY_REINTERPRET_CAST (yyGLRStackItem*, yystackp->yysplitPoint) + 1;
   yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
-  yystackp->yysplitPoint = YY_NULL;
-  yystackp->yylastDeleted = YY_NULL;
+  yystackp->yysplitPoint = YY_NULLPTR;
+  yystackp->yylastDeleted = YY_NULLPTR;
 
-  while (yyr != YY_NULL)
+  while (yyr != YY_NULLPTR)
     {
       yystackp->yynextFree->yystate = *yyr;
       yyr = yyr->yypred;
@@ -1928,66 +1979,65 @@
 }
 
 static YYRESULTTAG
-yyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
-                   size_t yyposn]b4_pure_formals[)
+yyprocessOneStack (yyGLRStack* yystackp, ptrdiff_t yyk,
+                   ptrdiff_t yyposn]b4_pure_formals[)
 {
-  int yyaction;
-  const short int* yyconflicts;
-  yyRuleNum yyrule;
-
-  while (yystackp->yytops.yystates[yyk] != YY_NULL)
+  while (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
     {
       yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
-      YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
-                  (unsigned long int) yyk, yystate));
+      YY_DPRINTF ((stderr, "Stack %ld Entering state %d\n", yyk, yystate));
 
-      YYASSERT (yystate != YYFINAL);
+      YY_ASSERT (yystate != YYFINAL);
 
       if (yyisDefaultedState (yystate))
         {
-          yyrule = yydefaultAction (yystate);
+          YYRESULTTAG yyflag;
+          yyRuleNum yyrule = yydefaultAction (yystate);
           if (yyrule == 0)
             {
-              YYDPRINTF ((stderr, "Stack %lu dies.\n",
-                          (unsigned long int) yyk));
+              YY_DPRINTF ((stderr, "Stack %ld dies.\n", YY_CAST (long, yyk)));
               yymarkStackDeleted (yystackp, yyk);
               return yyok;
             }
-          YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
+          yyflag = yyglrReduce (yystackp, yyk, yyrule, yyimmediate[yyrule]]b4_user_args[);
+          if (yyflag == yyerr)
+            {
+              YY_DPRINTF ((stderr,
+                           "Stack %ld dies "
+                           "(predicate failure or explicit user error).\n",
+                           YY_CAST (long, yyk)));
+              yymarkStackDeleted (yystackp, yyk);
+              return yyok;
+            }
+          if (yyflag != yyok)
+            return yyflag;
         }
       else
         {
-          yySymbol yytoken;
+          yySymbol yytoken = ]b4_yygetToken_call[;
+          const short* yyconflicts;
+          const int yyaction = yygetLRActions (yystate, yytoken, &yyconflicts);
           yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
-          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);
 
           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[));
+              YYRESULTTAG yyflag;
+              ptrdiff_t yynewStack = yysplitStack (yystackp, yyk);
+              YY_DPRINTF ((stderr, "Splitting off stack %ld from %ld.\n",
+                           YY_CAST (long, yynewStack), YY_CAST (long, yyk)));
+              yyflag = yyglrReduce (yystackp, yynewStack,
+                                    *yyconflicts,
+                                    yyimmediate[*yyconflicts]]b4_user_args[);
+              if (yyflag == yyok)
+                YYCHK (yyprocessOneStack (yystackp, yynewStack,
+                                          yyposn]b4_pure_args[));
+              else if (yyflag == yyerr)
+                {
+                  YY_DPRINTF ((stderr, "Stack %ld dies.\n", YY_CAST (long, yynewStack)));
+                  yymarkStackDeleted (yystackp, yynewStack);
+                }
+              else
+                return yyflag;
               yyconflicts += 1;
             }
 
@@ -1995,20 +2045,32 @@
             break;
           else if (yyisErrorAction (yyaction))
             {
-              YYDPRINTF ((stderr, "Stack %lu dies.\n",
-                          (unsigned long int) yyk));
+              YY_DPRINTF ((stderr, "Stack %ld dies.\n", YY_CAST (long, yyk)));
               yymarkStackDeleted (yystackp, yyk);
               break;
             }
           else
-            YYCHK (yyglrReduce (yystackp, yyk, -yyaction,
-                                yyfalse]b4_user_args[));
+            {
+              YYRESULTTAG yyflag = yyglrReduce (yystackp, yyk, -yyaction,
+                                                yyimmediate[-yyaction]]b4_user_args[);
+              if (yyflag == yyerr)
+                {
+                  YY_DPRINTF ((stderr,
+                               "Stack %ld dies "
+                               "(predicate failure or explicit user error).\n",
+                               YY_CAST (long, yyk)));
+                  yymarkStackDeleted (yystackp, yyk);
+                  break;
+                }
+              else if (yyflag != yyok)
+                return yyflag;
+            }
         }
     }
   return yyok;
 }
 
-/*ARGSUSED*/ static void
+static void
 yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
 {
   if (yystackp->yyerrState != 0)
@@ -2018,18 +2080,18 @@
 #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;
+  char* yymsg = YY_NULLPTR;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULL;
-  /* Arguments of yyformat. */
+  const char *yyformat = YY_NULLPTR;
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected").  */
+  /* Actual size of YYARG. */
   int yycount = 0;
+  /* Cumulated lengths of YYARG.  */
+  ptrdiff_t yysize = 0;
 
   /* There are many possibilities here to consider:
      - If this state is a consistent state with a default action, then
@@ -2057,6 +2119,8 @@
   if (yytoken != YYEMPTY)
     {
       int yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
+      ptrdiff_t yysize0 = yytnamerr (YY_NULLPTR, yytokenName (yytoken));
+      yysize = yysize0;
       yyarg[yycount++] = yytokenName (yytoken);
       if (!yypact_value_is_default (yyn))
         {
@@ -2080,9 +2144,11 @@
                   }
                 yyarg[yycount++] = yytokenName (yyx);
                 {
-                  size_t yysz = yysize + yytnamerr (YY_NULL, yytokenName (yyx));
-                  yysize_overflow |= yysz < yysize;
-                  yysize = yysz;
+                  ptrdiff_t yysz = yytnamerr (YY_NULLPTR, yytokenName (yyx));
+                  if (YYSIZEMAX - yysize < yysz)
+                    yysize_overflow = yytrue;
+                  else
+                    yysize += yysz;
                 }
               }
         }
@@ -2094,6 +2160,7 @@
       case N:                           \
         yyformat = S;                   \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -2104,13 +2171,17 @@
     }
 
   {
-    size_t yysz = yysize + strlen (yyformat);
-    yysize_overflow |= yysz < yysize;
-    yysize = yysz;
+    /* Don't count the "%s"s in the final size, but reserve room for
+       the terminator.  */
+    ptrdiff_t yysz = YY_CAST (ptrdiff_t, strlen (yyformat)) - 2 * yycount + 1;
+    if (YYSIZEMAX - yysize < yysz)
+      yysize_overflow = yytrue;
+    else
+      yysize += yysz;
   }
 
   if (!yysize_overflow)
-    yymsg = (char *) YYMALLOC (yysize);
+    yymsg = YY_CAST (char *, YYMALLOC (YY_CAST (size_t, yysize)));
 
   if (yymsg)
     {
@@ -2125,8 +2196,8 @@
             }
           else
             {
-              yyp++;
-              yyformat++;
+              ++yyp;
+              ++yyformat;
             }
         }
       yyerror (]b4_lyyerror_args[yymsg);
@@ -2145,20 +2216,18 @@
 /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
    yylval, and yylloc are the syntactic category, semantic value, and location
    of the lookahead.  */
-/*ARGSUSED*/ static void
+static void
 yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
 {
-  size_t yyk;
-  int yyj;
-
   if (yystackp->yyerrState == 3)
     /* We just shifted the error token and (perhaps) took some
        reductions.  Skip tokens until we can proceed.  */
-    while (YYID (yytrue))
+    while (yytrue)
       {
         yySymbol yytoken;
+        int yyj;
         if (yychar == YYEOF)
-          yyFail (yystackp][]b4_lpure_args[, YY_NULL);
+          yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
         if (yychar != YYEMPTY)
           {]b4_locations_if([[
             /* We throw away the lookahead, but the error range
@@ -2171,19 +2240,9 @@
             yytoken = YYTRANSLATE (yychar);
             yydestruct ("Error: discarding",
                         yytoken, &yylval]b4_locuser_args([&yylloc])[);
+            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);
-          }
+        yytoken = ]b4_yygetToken_call[;
         yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
         if (yypact_value_is_default (yyj))
           return;
@@ -2198,50 +2257,54 @@
       }
 
   /* Reduce to one stack.  */
-  for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
-    if (yystackp->yytops.yystates[yyk] != YY_NULL)
-      break;
-  if (yyk >= yystackp->yytops.yysize)
-    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
-  for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
-    yymarkStackDeleted (yystackp, yyk);
-  yyremoveDeletes (yystackp);
-  yycompressStack (yystackp);
+  {
+    ptrdiff_t yyk;
+    for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
+      if (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
+        break;
+    if (yyk >= yystackp->yytops.yysize)
+      yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
+    for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
+      yymarkStackDeleted (yystackp, yyk);
+    yyremoveDeletes (yystackp);
+    yycompressStack (yystackp);
+  }
 
   /* Now pop stack until we find a state that shifts the error token.  */
   yystackp->yyerrState = 3;
-  while (yystackp->yytops.yystates[0] != YY_NULL)
+  while (yystackp->yytops.yystates[0] != YY_NULLPTR)
     {
       yyGLRState *yys = yystackp->yytops.yystates[0];
-      yyj = yypact[yys->yylrState];
+      int yyj = yypact[yys->yylrState];
       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([[
+              /* Shift the error token.  */
+              int yyaction = yytable[yyj];]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]],
+              YY_SYMBOL_PRINT ("Shifting", yystos[yyaction],
                                &yylval, &yyerrloc);
-              yyglrShift (yystackp, 0, yytable[yyj],
+              yyglrShift (yystackp, 0, yyaction,
                           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)
+      if (yys->yypred != YY_NULLPTR)
         yydestroyGLRState ("Error: popping", yys]b4_user_args[);
       yystackp->yytops.yystates[0] = yys->yypred;
       yystackp->yynextFree -= 1;
       yystackp->yyspaceLeft += 1;
     }
-  if (yystackp->yytops.yystates[0] == YY_NULL)
-    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
+  if (yystackp->yytops.yystates[0] == YY_NULLPTR)
+    yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
 }
 
 #define YYCHK1(YYE)                                                          \
@@ -2258,29 +2321,27 @@
     default:                                                                 \
       goto yybuglab;                                                         \
     }                                                                        \
-  } while (YYID (0))
-
+  } while (0)
 
 /*----------.
 | yyparse.  |
 `----------*/
 
-]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
+]b4_function_define([yyparse], [int], b4_parse_param)[
 {
   int yyresult;
   yyGLRStack yystack;
   yyGLRStack* const yystackp = &yystack;
-  size_t yyposn;
+  ptrdiff_t yyposn;
 
-  YYDPRINTF ((stderr, "Starting parse\n"));
+  YY_DPRINTF ((stderr, "Starting parse\n"));
 
   yychar = YYEMPTY;
   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_pushdef([yylval], [], [], [yylloc])dnl
+  b4_user_initial_action
 b4_dollar_popdef])[]dnl
 [
   if (! yyinitGLRStack (yystackp, YYINITDEPTH))
@@ -2295,28 +2356,24 @@
   yyglrShift (&yystack, 0, 0, 0, &yylval]b4_locations_if([, &yylloc])[);
   yyposn = 0;
 
-  while (YYID (yytrue))
+  while (yytrue)
     {
       /* For efficiency, we have two loops, the first of which is
          specialized to deterministic operation (single stack, no
          potential ambiguity).  */
       /* Standard mode */
-      while (YYID (yytrue))
+      while (yytrue)
         {
-          yyRuleNum yyrule;
-          int yyaction;
-          const short int* yyconflicts;
-
           yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
-          YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+          YY_DPRINTF ((stderr, "Entering state %d\n", yystate));
           if (yystate == YYFINAL)
             goto yyacceptlab;
           if (yyisDefaultedState (yystate))
             {
-              yyrule = yydefaultAction (yystate);
+              yyRuleNum yyrule = yydefaultAction (yystate);
               if (yyrule == 0)
-                {
-]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
+                {]b4_locations_if([[
+                  yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
                   yyreportSyntaxError (&yystack]b4_user_args[);
                   goto yyuser_error;
                 }
@@ -2324,25 +2381,9 @@
             }
           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);
+              yySymbol yytoken = ]b4_yygetToken_call;[
+              const short* yyconflicts;
+              int yyaction = yygetLRActions (yystate, yytoken, &yyconflicts);
               if (*yyconflicts != 0)
                 break;
               if (yyisShiftAction (yyaction))
@@ -2355,9 +2396,12 @@
                     yystack.yyerrState -= 1;
                 }
               else if (yyisErrorAction (yyaction))
-                {
-]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
-                  yyreportSyntaxError (&yystack]b4_user_args[);
+                {]b4_locations_if([[
+                  yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[]b4_glr_cc_if([[
+                  /* Don't issue an error message again for exceptions
+                     thrown from the scanner.  */
+                  if (yychar != YYFAULTYTOK)
+  ]])[                  yyreportSyntaxError (&yystack]b4_user_args[);
                   goto yyuser_error;
                 }
               else
@@ -2365,10 +2409,10 @@
             }
         }
 
-      while (YYID (yytrue))
+      while (yytrue)
         {
           yySymbol yytoken_to_shift;
-          size_t yys;
+          ptrdiff_t yys;
 
           for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
             yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
@@ -2401,8 +2445,8 @@
               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;]])[
+              YY_DPRINTF ((stderr, "Returning to deterministic operation.\n"));]b4_locations_if([[
+              yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
               yyreportSyntaxError (&yystack]b4_user_args[);
               goto yyuser_error;
             }
@@ -2417,25 +2461,24 @@
           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,
+              const short* yyconflicts;
+              int yyaction = yygetLRActions (yystate, yytoken_to_shift,
                               &yyconflicts);
               /* Note that yyconflicts were handled by yyprocessOneStack.  */
-              YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
+              YY_DPRINTF ((stderr, "On stack %ld, ", YY_CAST (long, 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));
+              YY_DPRINTF ((stderr, "Stack %ld now in state #%d\n",
+                           YY_CAST (long, yys),
+                           yystack.yytops.yystates[yys]->yylrState));
             }
 
           if (yystack.yytops.yysize == 1)
             {
               YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
-              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
+              YY_DPRINTF ((stderr, "Returning to deterministic operation.\n"));
               yycompressStack (&yystack);
               break;
             }
@@ -2451,7 +2494,7 @@
   goto yyreturn;
 
  yybuglab:
-  YYASSERT (yyfalse);
+  YY_ASSERT (yyfalse);
   goto yyabortlab;
 
  yyabortlab:
@@ -2476,16 +2519,16 @@
       yyGLRState** yystates = yystack.yytops.yystates;
       if (yystates)
         {
-          size_t yysize = yystack.yytops.yysize;
-          size_t yyk;
+          ptrdiff_t yysize = yystack.yytops.yysize;
+          ptrdiff_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)
+                    yyGLRState *yys = yystates[yyk];]b4_locations_if([[
+                    yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
+                    if (yys->yypred != YY_NULLPTR)
                       yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
                     yystates[yyk] = yys->yypred;
                     yystack.yynextFree -= 1;
@@ -2497,96 +2540,103 @@
       yyfreeGLRStack (&yystack);
     }
 
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
 
 /* DEBUGGING ONLY */
 #if ]b4_api_PREFIX[DEBUG
-static void yypstack (yyGLRStack* yystackp, size_t yyk)
-  __attribute__ ((__unused__));
-static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
-
 static void
 yy_yypstack (yyGLRState* yys)
 {
   if (yys->yypred)
     {
       yy_yypstack (yys->yypred);
-      YYFPRINTF (stderr, " -> ");
+      YY_FPRINTF ((stderr, " -> "));
     }
-  YYFPRINTF (stderr, "%d@@%lu", yys->yylrState,
-             (unsigned long int) yys->yyposn);
+  YY_FPRINTF ((stderr, "%d@@%ld", yys->yylrState, YY_CAST (long, yys->yyposn)));
 }
 
 static void
 yypstates (yyGLRState* yyst)
 {
-  if (yyst == YY_NULL)
-    YYFPRINTF (stderr, "<null>");
+  if (yyst == YY_NULLPTR)
+    YY_FPRINTF ((stderr, "<null>"));
   else
     yy_yypstack (yyst);
-  YYFPRINTF (stderr, "\n");
+  YY_FPRINTF ((stderr, "\n"));
 }
 
 static void
-yypstack (yyGLRStack* yystackp, size_t yyk)
+yypstack (yyGLRStack* yystackp, ptrdiff_t yyk)
 {
   yypstates (yystackp->yytops.yystates[yyk]);
 }
 
-#define YYINDEX(YYX)                                                         \
-    ((YYX) == YY_NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
-
-
 static void
 yypdumpstack (yyGLRStack* yystackp)
 {
+#define YYINDEX(YYX)                                                    \
+  YY_CAST (long,                                                        \
+           ((YYX)                                                       \
+            ? YY_REINTERPRET_CAST (yyGLRStackItem*, (YYX)) - yystackp->yyitems \
+            : -1))
+
   yyGLRStackItem* yyp;
-  size_t yyi;
   for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
     {
-      YYFPRINTF (stderr, "%3lu. ",
-                 (unsigned long int) (yyp - yystackp->yyitems));
-      if (*(yybool *) yyp)
+      YY_FPRINTF ((stderr, "%3ld. ",
+                   YY_CAST (long, yyp - yystackp->yyitems)));
+      if (*YY_REINTERPRET_CAST (yybool *, yyp))
         {
-          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));
+          YY_ASSERT (yyp->yystate.yyisState);
+          YY_ASSERT (yyp->yyoption.yyisState);
+          YY_FPRINTF ((stderr, "Res: %d, LR State: %d, posn: %ld, pred: %ld",
+                       yyp->yystate.yyresolved, yyp->yystate.yylrState,
+                       YY_CAST (long, yyp->yystate.yyposn),
+                       YYINDEX (yyp->yystate.yypred)));
           if (! yyp->yystate.yyresolved)
-            YYFPRINTF (stderr, ", firstVal: %ld",
-                       (long int) YYINDEX (yyp->yystate
-                                             .yysemantics.yyfirstVal));
+            YY_FPRINTF ((stderr, ", firstVal: %ld",
+                         YYINDEX (yyp->yystate.yysemantics.yyfirstVal)));
         }
       else
         {
-          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));
+          YY_ASSERT (!yyp->yystate.yyisState);
+          YY_ASSERT (!yyp->yyoption.yyisState);
+          YY_FPRINTF ((stderr, "Option. rule: %d, state: %ld, next: %ld",
+                       yyp->yyoption.yyrule - 1,
+                       YYINDEX (yyp->yyoption.yystate),
+                       YYINDEX (yyp->yyoption.yynext)));
         }
-      YYFPRINTF (stderr, "\n");
+      YY_FPRINTF ((stderr, "\n"));
     }
-  YYFPRINTF (stderr, "Tops:");
-  for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
-    YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi,
-               (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
-  YYFPRINTF (stderr, "\n");
+
+  YY_FPRINTF ((stderr, "Tops:"));
+  {
+    ptrdiff_t yyi;
+    for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
+      YY_FPRINTF ((stderr, "%ld: %ld; ", YY_CAST (long, yyi),
+                   YYINDEX (yystackp->yytops.yystates[yyi])));
+    YY_FPRINTF ((stderr, "\n"));
+  }
+#undef YYINDEX
 }
 #endif
+
+#undef yylval
+#undef yychar
+#undef yynerrs]b4_locations_if([
+#undef yylloc])
+
+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_epilogue[]dnl
-b4_output_end()
-
-# 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-2012])[
-
-]b4_cpp_guard_open([b4_spec_defines_file])[
-]b4_shared_declarations[
-]b4_cpp_guard_close([b4_spec_defines_file])[
-]b4_output_end()
-])])
+b4_output_end
diff --git a/data/skeletons/glr.cc b/data/skeletons/glr.cc
new file mode 100644
index 0000000..343b52e
--- /dev/null
+++ b/data/skeletons/glr.cc
@@ -0,0 +1,383 @@
+# C++ GLR skeleton for Bison
+
+# Copyright (C) 2002-2015, 2018-2019 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 skeleton produces a C++ class that encapsulates a C glr parser.
+# This is in order to reduce the maintenance burden.  The glr.c
+# skeleton is clean and pure enough so that there are no real
+# problems.  The C++ interface is the same as that of lalr1.cc.  In
+# fact, glr.c can replace yacc.c without the user noticing any
+# difference, and similarly for glr.cc replacing lalr1.cc.
+#
+# The passing of parse-params
+#
+#   The additional arguments are stored as members of the parser
+#   object, yyparser.  The C routines need to carry yyparser
+#   throughout the C parser; that's easy: make yyparser an
+#   additional parse-param.  But because the C++ skeleton needs to
+#   know the "real" original parse-param, we save them
+#   (b4_parse_param_orig).  Note that b4_parse_param is overquoted
+#   (and c.m4 strips one level of quotes).  This is a PITA, and
+#   explains why there are so many levels of quotes.
+#
+# The locations
+#
+#   We use location.cc just like lalr1.cc, but because glr.c stores
+#   the locations in a union, the position and location classes
+#   must not have a constructor.  Therefore, contrary to lalr1.cc, we
+#   must not define "b4_location_constructors".  As a consequence the
+#   user must initialize the first positions (in particular the
+#   filename member).
+
+# We require a pure interface.
+m4_define([b4_pure_flag], [1])
+
+m4_include(b4_skeletonsdir/[c++.m4])
+b4_bison_locations_if([m4_include(b4_skeletonsdir/[location.cc])])
+
+m4_define([b4_parser_class],
+          [b4_percent_define_get([[api.parser.class]])])
+
+# Save the parse parameters.
+m4_define([b4_parse_param_orig], m4_defn([b4_parse_param]))
+
+# b4_parse_param_wrap
+# -------------------
+# New ones.
+m4_ifset([b4_parse_param],
+[m4_define([b4_parse_param_wrap],
+           [[b4_namespace_ref::b4_parser_class[& yyparser], [[yyparser]]],]
+m4_defn([b4_parse_param]))],
+[m4_define([b4_parse_param_wrap],
+           [[b4_namespace_ref::b4_parser_class[& yyparser], [[yyparser]]]])
+])
+
+
+# b4_yy_symbol_print_define
+# -------------------------
+# Bypass the default implementation to generate the "yy_symbol_print"
+# and "yy_symbol_value_print" functions.
+m4_define([b4_yy_symbol_print_define],
+[[
+/*--------------------.
+| Print this symbol.  |
+`--------------------*/
+
+]b4_function_define([yy_symbol_print],
+    [static void],
+    [[FILE *],      []],
+    [[int yytype],  [yytype]],
+    [[const ]b4_namespace_ref::b4_parser_class[::semantic_type *yyvaluep],
+                    [yyvaluep]][]dnl
+b4_locations_if([,
+    [[const ]b4_namespace_ref::b4_parser_class[::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_bison_locations_if([m4_define([b4_initial_action],
+[yylloc.initialize ();]m4_ifdef([b4_initial_action], [
+m4_defn([b4_initial_action])]))])[
+
+# Hijack the post prologue to declare yyerror.
+]m4_append([b4_post_prologue],
+[b4_syncline([@oline@], [@ofile@])dnl
+b4_function_declare([yyerror],
+    [static void],b4_locations_if([
+    [[const ]b4_namespace_ref::b4_parser_class[::location_type *yylocationp],
+                        [yylocationp]],])
+    b4_parse_param,
+    [[const char* msg], [msg]])])[
+
+
+#undef yynerrs
+#undef yychar
+#undef yylval]b4_locations_if([
+#undef yylloc])
+
+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 yydebug ]b4_prefix[debug]]b4_pure_if([], [[
+#define yylval  ]b4_prefix[lval
+#define yychar  ]b4_prefix[char
+#define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
+#define yylloc  ]b4_prefix[lloc]])]))
+
+# Hijack the epilogue to define implementations (yyerror, parser member
+# functions etc.).
+m4_append([b4_epilogue],
+[b4_syncline([@oline@], [@ofile@])dnl
+[
+/*------------------.
+| Report an error.  |
+`------------------*/
+
+]b4_function_define([yyerror],
+    [static void],b4_locations_if([
+    [[const ]b4_namespace_ref::b4_parser_class[::location_type *yylocationp],
+                        [yylocationp]],])
+    b4_parse_param,
+    [[const char* msg], [msg]])[
+{
+]b4_parse_param_use[]dnl
+[  yyparser.error (]b4_locations_if([[*yylocationp, ]])[msg);
+}
+
+
+]b4_namespace_open[
+]dnl In this section, the parse params are the original parse_params.
+m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
+[  /// Build a parser object.
+  ]b4_parser_class::b4_parser_class[ (]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[
+  {}
+
+  ]b4_parser_class::~b4_parser_class[ ()
+  {}
+
+  ]b4_parser_class[::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
+  {}
+
+  int
+  ]b4_parser_class[::operator() ()
+  {
+    return parse ();
+  }
+
+  int
+  ]b4_parser_class[::parse ()
+  {
+    return ::yyparse (*this]b4_user_args[);
+  }
+
+#if ]b4_api_PREFIX[DEBUG
+  /*--------------------.
+  | Print this symbol.  |
+  `--------------------*/
+
+  void
+  ]b4_parser_class[::yy_symbol_value_print_ (int yytype,
+                           const semantic_type* yyvaluep]b4_locations_if([[,
+                           const location_type* yylocationp]])[)
+  {]b4_locations_if([[
+    YYUSE (yylocationp);]])[
+    YYUSE (yyvaluep);
+    std::ostream& yyo = debug_stream ();
+    std::ostream& yyoutput = yyo;
+    YYUSE (yyoutput);
+    ]b4_symbol_actions([printer])[
+  }
+
+
+  void
+  ]b4_parser_class[::yy_symbol_print_ (int yytype,
+                           const semantic_type* yyvaluep]b4_locations_if([[,
+                           const location_type* yylocationp]])[)
+  {
+    *yycdebug_ << (yytype < YYNTOKENS ? "token" : "nterm")
+               << ' ' << yytname[yytype] << " ("]b4_locations_if([[
+               << *yylocationp << ": "]])[;
+    yy_symbol_value_print_ (yytype, yyvaluep]b4_locations_if([[, yylocationp]])[);
+    *yycdebug_ << ')';
+  }
+
+  std::ostream&
+  ]b4_parser_class[::debug_stream () const
+  {
+    return *yycdebug_;
+  }
+
+  void
+  ]b4_parser_class[::set_debug_stream (std::ostream& o)
+  {
+    yycdebug_ = &o;
+  }
+
+
+  ]b4_parser_class[::debug_level_type
+  ]b4_parser_class[::debug_level () const
+  {
+    return yydebug;
+  }
+
+  void
+  ]b4_parser_class[::set_debug_level (debug_level_type l)
+  {
+    // Actually, it is yydebug which is really used.
+    yydebug = l;
+  }
+
+#endif
+]m4_popdef([b4_parse_param])dnl
+b4_namespace_close[]dnl
+])
+
+
+# b4_shared_declarations(hh|cc)
+# -----------------------------
+# Declaration that might either go into the header (if --defines, $1 = hh)
+# or in the implementation file.
+m4_define([b4_shared_declarations],
+[m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
+b4_percent_code_get([[requires]])[
+#include <iostream>
+#include <stdexcept>
+#include <string>
+
+]b4_cxx_portability[
+]m4_ifdef([b4_location_include],
+          [[# include ]b4_location_include])[
+]b4_variant_if([b4_variant_includes])[
+
+]b4_attribute_define[
+]b4_null_define[
+
+// This skeleton is based on C, yet compiles it as C++.
+// So expect warnings about C style casts.
+#if defined __clang__ && 306 <= __clang_major__ * 100 + __clang_minor__
+# pragma clang diagnostic ignored "-Wold-style-cast"
+#elif defined __GNUC__ && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
+# pragma GCC diagnostic ignored "-Wold-style-cast"
+#endif
+
+// On MacOS, PTRDIFF_MAX is defined as long long, which Clang's
+// -pedantic reports as being a C++11 extension.
+#if defined __APPLE__ && YY_CPLUSPLUS < 201103L && 4 <= __clang_major__
+# pragma clang diagnostic ignored "-Wc++11-long-long"
+#endif
+
+// Whether we are compiled with exception support.
+#ifndef YY_EXCEPTIONS
+# if defined __GNUC__ && !defined __EXCEPTIONS
+#  define YY_EXCEPTIONS 0
+# else
+#  define YY_EXCEPTIONS 1
+# endif
+#endif
+
+]b4_YYDEBUG_define[
+
+]b4_namespace_open[
+
+]b4_bison_locations_if([m4_ifndef([b4_location_file],
+                                  [b4_location_define])])[
+
+  /// A Bison parser.
+  class ]b4_parser_class[
+  {
+  public:
+]b4_public_types_declare[
+
+    /// Build a parser object.
+    ]b4_parser_class[ (]b4_parse_param_decl[);
+    virtual ~]b4_parser_class[ ();
+
+    /// Parse.  An alias for parse ().
+    /// \returns  0 iff parsing succeeded.
+    int operator() ();
+
+    /// Parse.
+    /// \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.
+    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
+
+    /// Report a syntax error.]b4_locations_if([[
+    /// \param loc    where the syntax error is found.]])[
+    /// \param msg    a description of the syntax error.
+    virtual void error (]b4_locations_if([[const location_type& loc, ]])[const std::string& msg);
+
+# 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.]b4_locations_if([[
+    /// \param yylocationp  Its location.]])[
+    virtual void yy_symbol_value_print_ (int yytype,
+                                         const semantic_type* yyvaluep]b4_locations_if([[,
+                                         const location_type* yylocationp]])[);
+    /// \brief Report a symbol on the debug stream.
+    /// \param yytype       The token type.
+    /// \param yyvaluep     Its semantic value.]b4_locations_if([[
+    /// \param yylocationp  Its location.]])[
+    virtual void yy_symbol_print_ (int yytype,
+                                   const semantic_type* yyvaluep]b4_locations_if([[,
+                                   const location_type* yylocationp]])[);
+  private:
+    // Debugging.
+    std::ostream* yycdebug_;
+#endif
+
+]b4_parse_param_vars[
+  };
+
+]dnl Redirections for glr.c.
+b4_percent_define_flag_if([[global_tokens_and_yystype]],
+[b4_token_defines])
+[
+#ifndef ]b4_api_PREFIX[STYPE
+# define ]b4_api_PREFIX[STYPE ]b4_namespace_ref[::]b4_parser_class[::semantic_type
+#endif
+#ifndef ]b4_api_PREFIX[LTYPE
+# define ]b4_api_PREFIX[LTYPE ]b4_namespace_ref[::]b4_parser_class[::location_type
+#endif
+
+]b4_namespace_close[
+]b4_percent_code_get([[provides]])[
+]m4_popdef([b4_parse_param])dnl
+])
+
+b4_defines_if(
+[b4_output_begin([b4_spec_header_file])
+b4_copyright([Skeleton interface for Bison GLR parsers in C++],
+             [2002-2015, 2018-2019])[
+// C++ GLR parser skeleton written by Akim Demaille.
+
+]b4_disclaimer[
+]b4_cpp_guard_open([b4_spec_header_file])[
+]b4_shared_declarations[
+]b4_cpp_guard_close([b4_spec_header_file])[
+]b4_output_end])
+
+# Let glr.c (and b4_shared_declarations) believe that the user
+# arguments include the parser itself.
+m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_wrap]))
+m4_include(b4_skeletonsdir/[glr.c])
+m4_popdef([b4_parse_param])
diff --git a/data/java-skel.m4 b/data/skeletons/java-skel.m4
similarity index 87%
rename from data/java-skel.m4
rename to data/skeletons/java-skel.m4
index 81bf02a..922f1a8 100644
--- a/data/java-skel.m4
+++ b/data/skeletons/java-skel.m4
@@ -2,7 +2,8 @@
 
 # Java skeleton dispatching for Bison.
 
-# Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2015, 2018-2019 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
@@ -20,7 +21,7 @@
 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_used_skeleton], [b4_skeletonsdir/[lalr1.java]])
 m4_define_default([b4_skeleton], ["b4_basename(b4_used_skeleton)"])
 
 m4_include(b4_used_skeleton)
diff --git a/data/skeletons/java.m4 b/data/skeletons/java.m4
new file mode 100644
index 0000000..edf23a9
--- /dev/null
+++ b/data/skeletons/java.m4
@@ -0,0 +1,364 @@
+                                                            -*- Autoconf -*-
+
+# Java language support for Bison
+
+# Copyright (C) 2007-2015, 2018-2019 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_skeletonsdir/[c-like.m4])
+
+
+# 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_parser_class_declaration
+# ---------------------------
+# The declaration of the parser class ("class YYParser"), with all its
+# qualifiers/annotations.
+b4_percent_define_default([[api.parser.abstract]], [[false]])
+b4_percent_define_default([[api.parser.final]],    [[false]])
+b4_percent_define_default([[api.parser.public]],   [[false]])
+b4_percent_define_default([[api.parser.strictfp]], [[false]])
+
+m4_define([b4_parser_class_declaration],
+[b4_percent_define_get3([api.parser.annotations], [], [ ])dnl
+b4_percent_define_flag_if([api.parser.public],   [public ])dnl
+b4_percent_define_flag_if([api.parser.abstract], [abstract ])dnl
+b4_percent_define_flag_if([api.parser.final],    [final ])dnl
+b4_percent_define_flag_if([api.parser.strictfp], [strictfp ])dnl
+[class ]b4_parser_class[]dnl
+b4_percent_define_get3([api.parser.extends], [ extends ])dnl
+b4_percent_define_get3([api.parser.implements], [ implements ])])
+
+
+# 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])
+
+
+# b4_typed_parser_table_define(TYPE, NAME, DATA, COMMENT)
+# -------------------------------------------------------
+m4_define([b4_typed_parser_table_define],
+[m4_ifval([$4], [b4_comment([$4])
+  ])dnl
+[private static final ]$1[ yy$2_[] = yy$2_init();
+  private static final ]$1[[] yy$2_init()
+  {
+    return new ]$1[[]
+    {
+  ]$3[
+    };
+  }]])
+
+
+# b4_integral_parser_table_define(NAME, DATA, COMMENT)
+#-----------------------------------------------------
+m4_define([b4_integral_parser_table_define],
+[b4_typed_parser_table_define([b4_int_type_for([$2])], [$1], [$2], [$3])])
+
+
+## ------------------------- ##
+## Assigning token numbers.  ##
+## ------------------------- ##
+
+# b4_token_enum(TOKEN-NUM)
+# ------------------------
+# Output the definition of this token as an enum.
+m4_define([b4_token_enum],
+[b4_token_format([    /** Token number, to be returned by the scanner.  */
+    static final int %s = %s;
+], [$1])])
+
+# b4_token_enums
+# --------------
+# Output the definition of the tokens (if there are) as enums.
+m4_define([b4_token_enums],
+[b4_any_token_visible_if([/* Tokens.  */
+b4_symbol_foreach([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;
+    ])
+
+# b4_predicate_case(LABEL, CONDITIONS)
+# ------------------------------------
+m4_define([b4_predicate_case], [  case $1:
+     if (! ($2)) YYERROR;
+    break;
+    ])
+
+
+## -------- ##
+## Checks.  ##
+## -------- ##
+
+b4_percent_define_check_kind([[api.value.type]],    [code], [deprecated])
+
+b4_percent_define_check_kind([[annotations]],       [code], [deprecated])
+b4_percent_define_check_kind([[extends]],           [code], [deprecated])
+b4_percent_define_check_kind([[implements]],        [code], [deprecated])
+b4_percent_define_check_kind([[init_throws]],       [code], [deprecated])
+b4_percent_define_check_kind([[lex_throws]],        [code], [deprecated])
+b4_percent_define_check_kind([[api.parser.class]],  [code], [deprecated])
+b4_percent_define_check_kind([[throws]],            [code], [deprecated])
+
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+m4_define([b4_yystype], [b4_percent_define_get([[api.value.type]])])
+b4_percent_define_default([[api.value.type]], [[Object]])
+
+# 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])
+
+b4_percent_define_default([[api.parser.class]], [b4_prefix[]Parser])
+m4_define([b4_parser_class], [b4_percent_define_get([[api.parser.class]])])
+
+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([[init_throws]], [])
+m4_define([b4_init_throws], [b4_percent_define_get([[init_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_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])
+# ----------------------------------------------
+# See README.
+m4_define([b4_symbol_value],
+[m4_ifval([$3],
+          [(($3)($1))],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [((b4_symbol([$2], [type]))($1))],
+                                  [$1])],
+                    [$1])])])
+
+
+# b4_lhs_value([SYMBOL-NUM], [TYPE])
+# ----------------------------------
+# See README.
+m4_define([b4_lhs_value], [yyval])
+
+
+# b4_rhs_data(RULE-LENGTH, POS)
+# -----------------------------
+# See README.
+m4_define([b4_rhs_data],
+[yystack.valueAt (b4_subtract($@))])
+
+# b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
+# --------------------------------------------------
+# See README.
+#
+# In this simple implementation, %token and %type have class names
+# between the angle brackets.
+m4_define([b4_rhs_value],
+[b4_symbol_value([b4_rhs_data([$1], [$2])], [$3], [$4])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[(yyloc)])
+
+
+# b4_rhs_location(RULE-LENGTH, POS)
+# ---------------------------------
+# Expansion of @POS, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[yystack.locationAt (b4_subtract($@))])
+
+
+# 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/skeletons/lalr1.cc b/data/skeletons/lalr1.cc
new file mode 100644
index 0000000..d245796
--- /dev/null
+++ b/data/skeletons/lalr1.cc
@@ -0,0 +1,1463 @@
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2015, 2018-2019 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_skeletonsdir/[c++.m4])
+
+# api.value.type=variant is valid.
+m4_define([b4_value_type_setup_variant])
+
+# Check the value of %define parse.lac, where LAC stands for lookahead
+# correction.
+b4_percent_define_default([[parse.lac]], [[none]])
+b4_define_flag_if([lac])
+m4_define([b4_lac_flag],
+          [m4_if(b4_percent_define_get([[parse.lac]]),
+                 [none], [[0]], [[1]])])
+
+
+# b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
+# --------------------------------------------------------------
+# Declare "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
+m4_define([b4_integral_parser_table_declare],
+[m4_ifval([$3], [b4_comment([$3], [    ])
+])dnl
+    static const b4_int_type_for([$2]) yy$1_[[]];dnl
+])
+
+# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
+# -------------------------------------------------------------
+# Define "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
+m4_define([b4_integral_parser_table_define],
+[  const b4_int_type_for([$2])
+  b4_parser_class::yy$1_[[]] =
+  {
+  $2
+  };dnl
+])
+
+# b4_symbol_value_template(VAL, SYMBOL-NUM, [TYPE])
+# -------------------------------------------------
+# Same as b4_symbol_value, but used in a template method.  It makes
+# a difference when using variants.  Note that b4_value_type_setup_union
+# overrides b4_symbol_value, so we must override it again.
+m4_copy([b4_symbol_value], [b4_symbol_value_template])
+m4_append([b4_value_type_setup_union],
+[m4_copy_force([b4_symbol_value_union], [b4_symbol_value_template])])
+
+# b4_lhs_value(SYMBOL-NUM, [TYPE])
+# --------------------------------
+# See README.
+m4_define([b4_lhs_value],
+[b4_symbol_value([yylhs.value], [$1], [$2])])
+
+
+# b4_lhs_location()
+# -----------------
+# Expansion of @$.
+m4_define([b4_lhs_location],
+[yylhs.location])
+
+
+# b4_rhs_data(RULE-LENGTH, POS)
+# -----------------------------
+# See README.
+m4_define([b4_rhs_data],
+[yystack_@{b4_subtract($@)@}])
+
+
+# b4_rhs_state(RULE-LENGTH, POS)
+# ------------------------------
+# The state corresponding to the symbol #POS, where the current
+# rule has RULE-LENGTH symbols on RHS.
+m4_define([b4_rhs_state],
+[b4_rhs_data([$1], [$2]).state])
+
+
+# b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
+# --------------------------------------------------
+# See README.
+m4_define([_b4_rhs_value],
+[b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3], [$4])])
+
+m4_define([b4_rhs_value],
+[b4_percent_define_ifdef([api.value.automove],
+                         [YY_MOVE (_b4_rhs_value($@))],
+                         [_b4_rhs_value($@)])])
+
+
+# b4_rhs_location(RULE-LENGTH, POS)
+# ---------------------------------
+# Expansion of @POS, where the current rule has RULE-LENGTH symbols
+# on RHS.
+m4_define([b4_rhs_location],
+[b4_rhs_data([$1], [$2]).location])
+
+
+# b4_symbol_action(SYMBOL-NUM, KIND)
+# ----------------------------------
+# Run the action KIND (destructor or printer) for SYMBOL-NUM.
+# Same as in C, but using references instead of pointers.
+m4_define([b4_symbol_action],
+[b4_symbol_if([$1], [has_$2],
+[m4_pushdef([b4_symbol_value], m4_defn([b4_symbol_value_template]))[]dnl
+b4_dollar_pushdef([yysym.value],
+                  [$1],
+                  [],
+                  [yysym.location])dnl
+      _b4_symbol_case([$1])[]dnl
+b4_syncline([b4_symbol([$1], [$2_line])], [b4_symbol([$1], [$2_file])])dnl
+        b4_symbol([$1], [$2])
+b4_syncline([@oline@], [@ofile@])dnl
+        break;
+
+m4_popdef([b4_symbol_value])[]dnl
+b4_dollar_popdef[]dnl
+])])
+
+
+# b4_lex
+# ------
+# Call yylex.
+m4_define([b4_lex],
+[b4_token_ctor_if(
+[b4_function_call([yylex],
+                  [symbol_type], m4_ifdef([b4_lex_param], b4_lex_param))],
+[b4_function_call([yylex], [int],
+                  [b4_api_PREFIX[STYPE*], [&yyla.value]][]dnl
+b4_locations_if([, [[location*], [&yyla.location]]])dnl
+m4_ifdef([b4_lex_param], [, ]b4_lex_param))])])
+
+
+m4_pushdef([b4_copyright_years],
+           [2002-2015, 2018-2019])
+
+m4_define([b4_parser_class],
+          [b4_percent_define_get([[api.parser.class]])])
+
+b4_bison_locations_if([# Backward compatibility.
+   m4_define([b4_location_constructors])
+   m4_include(b4_skeletonsdir/[location.cc])])
+m4_include(b4_skeletonsdir/[stack.hh])
+b4_variant_if([m4_include(b4_skeletonsdir/[variant.hh])])
+
+
+# b4_shared_declarations(hh|cc)
+# -----------------------------
+# Declaration that might either go into the header (if --defines, $1 = hh)
+# or in the implementation file.
+m4_define([b4_shared_declarations],
+[b4_percent_code_get([[requires]])[
+]b4_parse_assert_if([# include <cassert>])[
+# include <cstdlib> // std::abort
+# include <iostream>
+# include <stdexcept>
+# include <string>
+# include <vector>
+
+]b4_cxx_portability[
+]m4_ifdef([b4_location_include],
+          [[# include ]b4_location_include])[
+]b4_variant_if([b4_variant_includes])[
+
+]b4_attribute_define[
+]b4_cast_define[
+]b4_null_define[
+
+]b4_YYDEBUG_define[
+
+]b4_namespace_open[
+
+]b4_bison_locations_if([m4_ifndef([b4_location_file],
+                                  [b4_location_define])])[
+
+  /// A Bison parser.
+  class ]b4_parser_class[
+  {
+  public:
+]b4_public_types_declare[
+]b4_symbol_type_define[
+    /// Build a parser object.
+    ]b4_parser_class[ (]b4_parse_param_decl[);
+    virtual ~]b4_parser_class[ ();
+
+    /// Parse.  An alias for parse ().
+    /// \returns  0 iff parsing succeeded.
+    int operator() ();
+
+    /// Parse.
+    /// \returns  0 iff parsing succeeded.
+    virtual int parse ();
+
+#if ]b4_api_PREFIX[DEBUG
+    /// The current debugging stream.
+    std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
+    /// 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 YY_ATTRIBUTE_PURE;
+    /// Set the current debugging level.
+    void set_debug_level (debug_level_type l);
+#endif
+
+    /// Report a syntax error.]b4_locations_if([[
+    /// \param loc    where the syntax error is found.]])[
+    /// \param msg    a description of the syntax error.
+    virtual void error (]b4_locations_if([[const location_type& loc, ]])[const std::string& msg);
+
+    /// Report a syntax error.
+    void error (const syntax_error& err);
+
+]b4_token_constructor_define[
+
+  private:
+    /// This class is not copyable.
+    ]b4_parser_class[ (const ]b4_parser_class[&);
+    ]b4_parser_class[& operator= (const ]b4_parser_class[&);]b4_lac_if([[
+
+    /// Check the lookahead yytoken.
+    /// \returns  true iff the token will be eventually shifted.
+    bool yy_lac_check_ (int yytoken) const;
+    /// Establish the initial context if no initial context currently exists.
+    /// \returns  true iff the token will be eventually shifted.
+    bool yy_lac_establish_ (int yytoken);
+    /// Discard any previous initial lookahead context because of event.
+    /// \param event  the event which caused the lookahead to be discarded.
+    ///               Only used for debbuging output.
+    void yy_lac_discard_ (const char* event);]])[
+
+    /// Stored state numbers (used for stacks).
+    typedef ]b4_int_type(0, m4_eval(b4_states_number - 1))[ state_type;
+
+    /// Generate an error message.
+    /// \param yystate   the state where the error occurred.
+    /// \param yyla      the lookahead token.
+    virtual std::string yysyntax_error_ (state_type yystate,
+                                         const symbol_type& yyla) const;
+
+    /// Compute post-reduction state.
+    /// \param yystate   the current state
+    /// \param yysym     the nonterminal to push on the stack
+    static state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+
+    /// 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);
+
+    static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
+    static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
+
+    /// Convert a scanner token number \a t to a symbol number.
+    /// In theory \a t should be a token_type, but character literals
+    /// are valid, yet not members of the token_type enum.
+    static token_number_type yytranslate_ (int t);
+
+    // Tables.
+]b4_parser_tables_declare[]b4_error_verbose_if([
+
+    /// 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_[];
+]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
+]b4_integral_parser_table_declare([rline], [b4_rline],
+     [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
+    /// 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 level.
+    int yydebug_;
+    /// Debug stream.
+    std::ostream* yycdebug_;
+
+    /// \brief Display a symbol type, value and location.
+    /// \param yyo    The output stream.
+    /// \param yysym  The symbol.
+    template <typename Base>
+    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
+#endif
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg     Why this token is reclaimed.
+    ///                  If null, print nothing.
+    /// \param yysym     The symbol.
+    template <typename Base>
+    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+
+  private:
+    /// Type access provider for state based symbols.
+    struct by_state
+    {
+      /// Default constructor.
+      by_state () YY_NOEXCEPT;
+
+      /// The symbol type as needed by the constructor.
+      typedef state_type kind_type;
+
+      /// Constructor.
+      by_state (kind_type s) YY_NOEXCEPT;
+
+      /// Copy constructor.
+      by_state (const by_state& that) YY_NOEXCEPT;
+
+      /// Record that this symbol is empty.
+      void clear () YY_NOEXCEPT;
+
+      /// Steal the symbol type from \a that.
+      void move (by_state& that);
+
+      /// The (internal) type number (corresponding to \a state).
+      /// \a empty_symbol when empty.
+      symbol_number_type type_get () const YY_NOEXCEPT;
+
+      /// The state number used to denote an empty symbol.
+      /// We use the initial state, as it does not have a value.
+      enum { empty_state = 0 };
+
+      /// The state.
+      /// \a empty when empty.
+      state_type state;
+    };
+
+    /// "Internal" symbol: element of the stack.
+    struct stack_symbol_type : basic_symbol<by_state>
+    {
+      /// Superclass.
+      typedef basic_symbol<by_state> super_type;
+      /// Construct an empty symbol.
+      stack_symbol_type ();
+      /// Move or copy construction.
+      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
+      /// Steal the contents from \a sym to build this.
+      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
+#if YY_CPLUSPLUS < 201103L
+      /// Assignment, needed by push_back by some old implementations.
+      /// Moves the contents of that.
+      stack_symbol_type& operator= (stack_symbol_type& that);
+
+      /// Assignment, needed by push_back by other implementations.
+      /// Needed by some other old implementations.
+      stack_symbol_type& operator= (const stack_symbol_type& that);
+#endif
+    };
+
+]b4_stack_define[
+
+    /// Stack type.
+    typedef stack<stack_symbol_type> stack_type;
+
+    /// The stack.
+    stack_type yystack_;]b4_lac_if([[
+    /// The stack for LAC.
+    /// Logically, the yy_lac_stack's lifetime is confined to the function
+    /// yy_lac_check_. We just store it as a member of this class to hold
+    /// on to the memory and to avoid frequent reallocations.
+    /// Since yy_lac_check_ is const, this member must be mutable.
+    mutable std::vector<state_type> yylac_stack_;
+    /// Whether an initial LAC context was established.
+    bool yy_lac_established_;
+]])[
+
+    /// Push a new state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param sym  the symbol
+    /// \warning the contents of \a s.value is stolen.
+    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+
+    /// Push a new look ahead token on the state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param s    the state
+    /// \param sym  the symbol (for its value and location).
+    /// \warning the contents of \a sym.value is stolen.
+    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+
+    /// Pop \a n symbols from the stack.
+    void yypop_ (int n = 1);
+
+    /// Some specific tokens.
+    static const token_number_type yy_error_token_ = 1;
+    static const token_number_type yy_undef_token_ = ]b4_undef_token_number[;
+
+    /// Constants.
+    enum
+    {
+      yyeof_ = 0,
+      yylast_ = ]b4_last[,     ///< Last index in yytable_.
+      yynnts_ = ]b4_nterms_number[,  ///< Number of nonterminal symbols.
+      yyfinal_ = ]b4_final_state_number[, ///< Termination state number.
+      yyntokens_ = ]b4_tokens_number[  ///< Number of tokens.
+    };
+
+]b4_parse_param_vars[
+  };
+
+]b4_token_ctor_if([b4_yytranslate_define([$1])[
+]b4_public_types_define([$1])])[
+]b4_namespace_close[
+
+]b4_percent_define_flag_if([[global_tokens_and_yystype]],
+[b4_token_defines
+
+#ifndef ]b4_api_PREFIX[STYPE
+ // Redirection for backward compatibility.
+# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class::semantic_type
+#endif
+])[
+]b4_percent_code_get([[provides]])[
+]])
+
+## -------------- ##
+## Output files.  ##
+## -------------- ##
+
+b4_defines_if(
+[b4_output_begin([b4_spec_header_file])
+b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
+[
+/**
+ ** \file ]b4_spec_header_file[
+ ** Define the ]b4_namespace_ref[::parser class.
+ */
+
+// C++ LALR(1) parser skeleton written by Akim Demaille.
+
+]b4_disclaimer[
+]b4_cpp_guard_open([b4_spec_header_file])[
+]b4_shared_declarations(hh)[
+]b4_cpp_guard_close([b4_spec_header_file])[
+]b4_output_end[
+]])
+
+
+b4_output_begin([b4_parser_file_name])[
+]b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])[
+]b4_disclaimer[
+]b4_percent_code_get([[top]])[]dnl
+m4_if(b4_prefix, [yy], [],
+[
+// Take the name prefix into account.
+[#]define yylex   b4_prefix[]lex])[
+
+]b4_user_pre_prologue[
+
+]b4_defines_if([[#include "@basename(]b4_spec_header_file[@)"]],
+               [b4_shared_declarations([cc])])[
+
+]b4_user_post_prologue[
+]b4_percent_code_get[
+
+#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
+
+// Whether we are compiled with exception support.
+#ifndef YY_EXCEPTIONS
+# if defined __GNUC__ && !defined __EXCEPTIONS
+#  define YY_EXCEPTIONS 0
+# else
+#  define YY_EXCEPTIONS 1
+# endif
+#endif
+
+]b4_locations_if([dnl
+[#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
+]b4_yylloc_default_define])[
+
+// Enable debugging if requested.
+#if ]b4_api_PREFIX[DEBUG
+
+// A pseudo ostream that takes yydebug_ into account.
+# define YYCDEBUG if (yydebug_) (*yycdebug_)
+
+# define YY_SYMBOL_PRINT(Title, Symbol)         \
+  do {                                          \
+    if (yydebug_)                               \
+    {                                           \
+      *yycdebug_ << Title << ' ';               \
+      yy_print_ (*yycdebug_, Symbol);           \
+      *yycdebug_ << '\n';                       \
+    }                                           \
+  } 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 // !]b4_api_PREFIX[DEBUG
+
+# define YYCDEBUG if (false) std::cerr
+# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE (Symbol)
+# define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
+# define YY_STACK_PRINT()                static_cast<void> (0)
+
+#endif // !]b4_api_PREFIX[DEBUG
+
+#define yyerrok         (yyerrstatus_ = 0)
+#define yyclearin       (yyla.clear ())
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
+#define YYRECOVERING()  (!!yyerrstatus_)
+
+]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
+     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
+  ]b4_parser_class[::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;
+              else
+                goto append;
+
+            append:
+            default:
+              yyr += *yyp;
+              break;
+
+            case '"':
+              return yyr;
+            }
+      do_not_strip_quotes: ;
+      }
+
+    return yystr;
+  }
+]])[
+
+  /// Build a parser object.
+  ]b4_parser_class::b4_parser_class[ (]b4_parse_param_decl[)
+#if ]b4_api_PREFIX[DEBUG
+    : yydebug_ (false),
+      yycdebug_ (&std::cerr)]b4_lac_if([,], [m4_ifset([b4_parse_param], [,])])[
+#else
+]b4_lac_if([    :], [m4_ifset([b4_parse_param], [    :])])[
+#endif]b4_lac_if([[
+      yy_lac_established_ (false)]m4_ifset([b4_parse_param], [,])])[]b4_parse_param_cons[
+  {}
+
+  ]b4_parser_class::~b4_parser_class[ ()
+  {}
+
+  ]b4_parser_class[::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
+  {}
+
+  /*---------------.
+  | Symbol types.  |
+  `---------------*/
+
+]b4_token_ctor_if([], [b4_public_types_define([cc])])[
+
+  // by_state.
+  ]b4_parser_class[::by_state::by_state () YY_NOEXCEPT
+    : state (empty_state)
+  {}
+
+  ]b4_parser_class[::by_state::by_state (const by_state& that) YY_NOEXCEPT
+    : state (that.state)
+  {}
+
+  void
+  ]b4_parser_class[::by_state::clear () YY_NOEXCEPT
+  {
+    state = empty_state;
+  }
+
+  void
+  ]b4_parser_class[::by_state::move (by_state& that)
+  {
+    state = that.state;
+    that.clear ();
+  }
+
+  ]b4_parser_class[::by_state::by_state (state_type s) YY_NOEXCEPT
+    : state (s)
+  {}
+
+  ]b4_parser_class[::symbol_number_type
+  ]b4_parser_class[::by_state::type_get () const YY_NOEXCEPT
+  {
+    if (state == empty_state)
+      return empty_symbol;
+    else
+      return yystos_[state];
+  }
+
+  ]b4_parser_class[::stack_symbol_type::stack_symbol_type ()
+  {}
+
+  ]b4_parser_class[::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
+    : super_type (YY_MOVE (that.state)]b4_variant_if([], [, YY_MOVE (that.value)])b4_locations_if([, YY_MOVE (that.location)])[)
+  {]b4_variant_if([
+    b4_symbol_variant([that.type_get ()],
+                      [value], [YY_MOVE_OR_COPY], [YY_MOVE (that.value)])])[
+#if 201103L <= YY_CPLUSPLUS
+    // that is emptied.
+    that.state = empty_state;
+#endif
+  }
+
+  ]b4_parser_class[::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
+    : super_type (s]b4_variant_if([], [, YY_MOVE (that.value)])[]b4_locations_if([, YY_MOVE (that.location)])[)
+  {]b4_variant_if([
+    b4_symbol_variant([that.type_get ()],
+                      [value], [move], [YY_MOVE (that.value)])])[
+    // that is emptied.
+    that.type = empty_symbol;
+  }
+
+#if YY_CPLUSPLUS < 201103L
+  ]b4_parser_class[::stack_symbol_type&
+  ]b4_parser_class[::stack_symbol_type::operator= (const stack_symbol_type& that)
+  {
+    state = that.state;
+    ]b4_variant_if([b4_symbol_variant([that.type_get ()],
+                                      [value], [copy], [that.value])],
+                   [[value = that.value;]])[]b4_locations_if([
+    location = that.location;])[
+    return *this;
+  }
+
+  ]b4_parser_class[::stack_symbol_type&
+  ]b4_parser_class[::stack_symbol_type::operator= (stack_symbol_type& that)
+  {
+    state = that.state;
+    ]b4_variant_if([b4_symbol_variant([that.type_get ()],
+                                      [value], [move], [that.value])],
+                   [[value = that.value;]])[]b4_locations_if([
+    location = that.location;])[
+    // that is emptied.
+    that.state = empty_state;
+    return *this;
+  }
+#endif
+
+  template <typename Base>
+  void
+  ]b4_parser_class[::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
+  {
+    if (yymsg)
+      YY_SYMBOL_PRINT (yymsg, yysym);]b4_variant_if([], [
+
+    // User destructor.
+    b4_symbol_actions([destructor], [yysym.type_get ()])])[
+  }
+
+#if ]b4_api_PREFIX[DEBUG
+  template <typename Base>
+  void
+  ]b4_parser_class[::yy_print_ (std::ostream& yyo,
+                                     const basic_symbol<Base>& yysym) const
+  {
+    std::ostream& yyoutput = yyo;
+    YYUSE (yyoutput);
+    symbol_number_type yytype = yysym.type_get ();
+#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
+    // Avoid a (spurious) G++ 4.8 warning about "array subscript is
+    // below array bounds".
+    if (yysym.empty ())
+      std::abort ();
+#endif
+    yyo << (yytype < yyntokens_ ? "token" : "nterm")
+        << ' ' << yytname_[yytype] << " ("]b4_locations_if([
+        << yysym.location << ": "])[;
+    ]b4_symbol_actions([printer])[
+    yyo << ')';
+  }
+#endif
+
+  void
+  ]b4_parser_class[::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
+  {
+    if (m)
+      YY_SYMBOL_PRINT (m, sym);
+    yystack_.push (YY_MOVE (sym));
+  }
+
+  void
+  ]b4_parser_class[::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
+  {
+#if 201103L <= YY_CPLUSPLUS
+    yypush_ (m, stack_symbol_type (s, std::move (sym)));
+#else
+    stack_symbol_type ss (s, sym);
+    yypush_ (m, ss);
+#endif
+  }
+
+  void
+  ]b4_parser_class[::yypop_ (int n)
+  {
+    yystack_.pop (n);
+  }
+
+#if ]b4_api_PREFIX[DEBUG
+  std::ostream&
+  ]b4_parser_class[::debug_stream () const
+  {
+    return *yycdebug_;
+  }
+
+  void
+  ]b4_parser_class[::set_debug_stream (std::ostream& o)
+  {
+    yycdebug_ = &o;
+  }
+
+
+  ]b4_parser_class[::debug_level_type
+  ]b4_parser_class[::debug_level () const
+  {
+    return yydebug_;
+  }
+
+  void
+  ]b4_parser_class[::set_debug_level (debug_level_type l)
+  {
+    yydebug_ = l;
+  }
+#endif // ]b4_api_PREFIX[DEBUG
+
+  ]b4_parser_class[::state_type
+  ]b4_parser_class[::yy_lr_goto_state_ (state_type yystate, int yysym)
+  {
+    int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
+      return yytable_[yyr];
+    else
+      return yydefgoto_[yysym - yyntokens_];
+  }
+
+  bool
+  ]b4_parser_class[::yy_pact_value_is_default_ (int yyvalue)
+  {
+    return yyvalue == yypact_ninf_;
+  }
+
+  bool
+  ]b4_parser_class[::yy_table_value_is_error_ (int yyvalue)
+  {
+    return yyvalue == yytable_ninf_;
+  }
+
+  int
+  ]b4_parser_class[::operator() ()
+  {
+    return parse ();
+  }
+
+  int
+  ]b4_parser_class[::parse ()
+  {
+    int yyn;
+    /// Length of the RHS of the rule being reduced.
+    int yylen = 0;
+
+    // Error handling.
+    int yynerrs_ = 0;
+    int yyerrstatus_ = 0;
+
+    /// The lookahead symbol.
+    symbol_type yyla;]b4_locations_if([[
+
+    /// The locations where the error started and ended.
+    stack_symbol_type yyerror_range[3];]])[
+
+    /// The return value of parse ().
+    int yyresult;]b4_lac_if([[
+
+    /// Discard the LAC context in case there still is one left from a
+    /// previous invocation.
+    yy_lac_discard_ ("init");]])[
+
+#if YY_EXCEPTIONS
+    try
+#endif // YY_EXCEPTIONS
+      {
+    YYCDEBUG << "Starting parse\n";
+
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([yyla.value], [], [], [yyla.location])dnl
+    b4_user_initial_action
+b4_dollar_popdef])[]dnl
+
+  [  /* Initialize the stack.  The initial state will be set in
+       yynewstate, since the latter expects the semantical and the
+       location values to have been already stored, initialize these
+       stacks with a primary value.  */
+    yystack_.clear ();
+    yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
+
+  /*-----------------------------------------------.
+  | yynewstate -- push a new symbol on the stack.  |
+  `-----------------------------------------------*/
+  yynewstate:
+    YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+
+    // Accept?
+    if (yystack_[0].state == yyfinal_)
+      YYACCEPT;
+
+    goto yybackup;
+
+
+  /*-----------.
+  | yybackup.  |
+  `-----------*/
+  yybackup:
+    // Try to take a decision without lookahead.
+    yyn = yypact_[yystack_[0].state];
+    if (yy_pact_value_is_default_ (yyn))
+      goto yydefault;
+
+    // Read a lookahead token.
+    if (yyla.empty ())
+      {
+        YYCDEBUG << "Reading a token: ";
+#if YY_EXCEPTIONS
+        try
+#endif // YY_EXCEPTIONS
+          {]b4_token_ctor_if([[
+            symbol_type yylookahead (]b4_lex[);
+            yyla.move (yylookahead);]], [[
+            yyla.type = yytranslate_ (]b4_lex[);]])[
+          }
+#if YY_EXCEPTIONS
+        catch (const syntax_error& yyexc)
+          {
+            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
+            error (yyexc);
+            goto yyerrlab1;
+          }
+#endif // YY_EXCEPTIONS
+      }
+    YY_SYMBOL_PRINT ("Next token is", yyla);
+
+    /* If the proper action on seeing token YYLA.TYPE is to reduce or
+       to detect an error, take that action.  */
+    yyn += yyla.type_get ();
+    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+      {]b4_lac_if([[
+        if (!yy_lac_establish_ (yyla.type_get ()))
+           goto yyerrlab;]])[
+        goto yydefault;
+      }
+
+    // Reduce or error.
+    yyn = yytable_[yyn];
+    if (yyn <= 0)
+      {
+        if (yy_table_value_is_error_ (yyn))
+          goto yyerrlab;]b4_lac_if([[
+        if (!yy_lac_establish_ (yyla.type_get ()))
+           goto yyerrlab;
+]])[
+        yyn = -yyn;
+        goto yyreduce;
+      }
+
+    // Count tokens shifted since error; after three, turn off error status.
+    if (yyerrstatus_)
+      --yyerrstatus_;
+
+    // Shift the lookahead token.
+    yypush_ ("Shifting", static_cast<state_type> (yyn), YY_MOVE (yyla));]b4_lac_if([[
+    yy_lac_discard_ ("shift");]])[
+    goto yynewstate;
+
+
+  /*-----------------------------------------------------------.
+  | yydefault -- do the default action for the current state.  |
+  `-----------------------------------------------------------*/
+  yydefault:
+    yyn = yydefact_[yystack_[0].state];
+    if (yyn == 0)
+      goto yyerrlab;
+    goto yyreduce;
+
+
+  /*-----------------------------.
+  | yyreduce -- do a reduction.  |
+  `-----------------------------*/
+  yyreduce:
+    yylen = yyr2_[yyn];
+    {
+      stack_symbol_type yylhs;
+      yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
+      /* Variants are always initialized to an empty instance of the
+         correct type. The default '$$ = $1' action is NOT applied
+         when using variants.  */
+      b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [emplace])], [
+      /* If YYLEN is nonzero, implement the default value of the
+         action: '$$ = $1'.  Otherwise, use the top of the stack.
+
+         Otherwise, the following line sets YYLHS.VALUE to garbage.
+         This behavior is undocumented and Bison users should not rely
+         upon it.  */
+      if (yylen)
+        yylhs.value = yystack_@{yylen - 1@}.value;
+      else
+        yylhs.value = yystack_@{0@}.value;])[
+]b4_locations_if([dnl
+[
+      // Default location.
+      {
+        stack_type::slice range (yystack_, yylen);
+        YYLLOC_DEFAULT (yylhs.location, range, yylen);
+        yyerror_range[1].location = yylhs.location;
+      }]])[
+
+      // Perform the reduction.
+      YY_REDUCE_PRINT (yyn);
+#if YY_EXCEPTIONS
+      try
+#endif // YY_EXCEPTIONS
+        {
+          switch (yyn)
+            {
+]b4_user_actions[
+            default:
+              break;
+            }
+        }
+#if YY_EXCEPTIONS
+      catch (const syntax_error& yyexc)
+        {
+          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
+          error (yyexc);
+          YYERROR;
+        }
+#endif // YY_EXCEPTIONS
+      YY_SYMBOL_PRINT ("-> $$ =", yylhs);
+      yypop_ (yylen);
+      yylen = 0;
+      YY_STACK_PRINT ();
+
+      // Shift the result of the reduction.
+      yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
+    }
+    goto yynewstate;
+
+
+  /*--------------------------------------.
+  | yyerrlab -- here on detecting error.  |
+  `--------------------------------------*/
+  yyerrlab:
+    // If not already recovering from an error, report this error.
+    if (!yyerrstatus_)
+      {
+        ++yynerrs_;
+        error (]b4_join(b4_locations_if([yyla.location]),
+                        [[yysyntax_error_ (yystack_[0].state, yyla)]])[);
+      }
+
+]b4_locations_if([[
+    yyerror_range[1].location = yyla.location;]])[
+    if (yyerrstatus_ == 3)
+      {
+        /* If just tried and failed to reuse lookahead token after an
+           error, discard it.  */
+
+        // Return failure if at end of input.
+        if (yyla.type_get () == yyeof_)
+          YYABORT;
+        else if (!yyla.empty ())
+          {
+            yy_destroy_ ("Error: discarding", yyla);
+            yyla.clear ();
+          }
+      }
+
+    // Else will try to reuse lookahead token after shifting the error token.
+    goto yyerrlab1;
+
+
+  /*---------------------------------------------------.
+  | yyerrorlab -- error raised explicitly by YYERROR.  |
+  `---------------------------------------------------*/
+  yyerrorlab:
+    /* Pacify compilers when the user code never invokes YYERROR and
+       the label yyerrorlab therefore never appears in user code.  */
+    if (false)
+      YYERROR;
+
+    /* Do not reclaim the symbols of the rule whose action triggered
+       this YYERROR.  */
+    yypop_ (yylen);
+    yylen = 0;
+    goto yyerrlab1;
+
+
+  /*-------------------------------------------------------------.
+  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+  `-------------------------------------------------------------*/
+  yyerrlab1:
+    yyerrstatus_ = 3;   // Each real token shifted decrements this.
+    {
+      stack_symbol_type error_token;
+      for (;;)
+        {
+          yyn = yypact_[yystack_[0].state];
+          if (!yy_pact_value_is_default_ (yyn))
+            {
+              yyn += yy_error_token_;
+              if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
+                {
+                  yyn = yytable_[yyn];
+                  if (0 < yyn)
+                    break;
+                }
+            }
+
+          // Pop the current state because it cannot handle the error token.
+          if (yystack_.size () == 1)
+            YYABORT;
+]b4_locations_if([[
+          yyerror_range[1].location = yystack_[0].location;]])[
+          yy_destroy_ ("Error: popping", yystack_[0]);
+          yypop_ ();
+          YY_STACK_PRINT ();
+        }
+]b4_locations_if([[
+      yyerror_range[2].location = yyla.location;
+      YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
+
+      // Shift the error token.]b4_lac_if([[
+      yy_lac_discard_ ("error recovery");]])[
+      error_token.state = static_cast<state_type> (yyn);
+      yypush_ ("Shifting", YY_MOVE (error_token));
+    }
+    goto yynewstate;
+
+
+  /*-------------------------------------.
+  | yyacceptlab -- YYACCEPT comes here.  |
+  `-------------------------------------*/
+  yyacceptlab:
+    yyresult = 0;
+    goto yyreturn;
+
+
+  /*-----------------------------------.
+  | yyabortlab -- YYABORT comes here.  |
+  `-----------------------------------*/
+  yyabortlab:
+    yyresult = 1;
+    goto yyreturn;
+
+
+  /*-----------------------------------------------------.
+  | yyreturn -- parsing is finished, return the result.  |
+  `-----------------------------------------------------*/
+  yyreturn:
+    if (!yyla.empty ())
+      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
+
+    /* Do not reclaim the symbols of the rule whose action triggered
+       this YYABORT or YYACCEPT.  */
+    yypop_ (yylen);
+    while (1 < yystack_.size ())
+      {
+        yy_destroy_ ("Cleanup: popping", yystack_[0]);
+        yypop_ ();
+      }
+
+    return yyresult;
+  }
+#if YY_EXCEPTIONS
+    catch (...)
+      {
+        YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
+        // Do not try to display the values of the reclaimed symbols,
+        // as their printers might throw an exception.
+        if (!yyla.empty ())
+          yy_destroy_ (YY_NULLPTR, yyla);
+
+        while (1 < yystack_.size ())
+          {
+            yy_destroy_ (YY_NULLPTR, yystack_[0]);
+            yypop_ ();
+          }
+        throw;
+      }
+#endif // YY_EXCEPTIONS
+  }
+
+  void
+  ]b4_parser_class[::error (const syntax_error& yyexc)
+  {
+    error (]b4_join(b4_locations_if([yyexc.location]),
+                    [[yyexc.what ()]])[);
+  }]b4_lac_if([[
+
+  bool
+  ]b4_parser_class[::yy_lac_check_ (int yytoken) const
+  {
+    // Logically, the yylac_stack's lifetime is confined to this function.
+    // Clear it, to get rid of potential left-overs from previous call.
+    yylac_stack_.clear ();
+    // Reduce until we encounter a shift and thereby accept the token.
+#if ]b4_api_PREFIX[DEBUG
+    YYCDEBUG << "LAC: checking lookahead " << yytname_[yytoken] << ':';
+#endif
+    std::ptrdiff_t lac_top = 0;
+    while (true)
+      {
+        state_type top_state = (yylac_stack_.empty ()
+                                ? yystack_[lac_top].state
+                                : yylac_stack_.back ());
+        int yyrule = yypact_[top_state];
+        if (yy_pact_value_is_default_ (yyrule)
+            || (yyrule += yytoken) < 0 || yylast_ < yyrule
+            || yycheck_[yyrule] != yytoken)
+          {
+            // Use the default action.
+            yyrule = yydefact_[top_state];
+            if (yyrule == 0)
+              {
+                YYCDEBUG << " Err\n";
+                return false;
+              }
+          }
+        else
+          {
+            // Use the action from yytable.
+            yyrule = yytable_[yyrule];
+            if (yy_table_value_is_error_ (yyrule))
+              {
+                YYCDEBUG << " Err\n";
+                return false;
+              }
+            if (0 < yyrule)
+              {
+                YYCDEBUG << " S" << yyrule << '\n';
+                return true;
+              }
+            yyrule = -yyrule;
+          }
+        // By now we know we have to simulate a reduce.
+        YYCDEBUG << " R" << yyrule - 1;
+        // Pop the corresponding number of values from the stack.
+        {
+          std::ptrdiff_t yylen = yyr2_[yyrule];
+          // First pop from the LAC stack as many tokens as possible.
+          std::ptrdiff_t lac_size = std::ptrdiff_t (yylac_stack_.size ());
+          if (yylen < lac_size)
+            {
+              yylac_stack_.resize (std::size_t (lac_size - yylen));
+              yylen = 0;
+            }
+          else if (lac_size)
+            {
+              yylac_stack_.clear ();
+              yylen -= lac_size;
+            }
+          // Only afterwards look at the main stack.
+          // We simulate popping elements by incrementing lac_top.
+          lac_top += yylen;
+        }
+        // Keep top_state in sync with the updated stack.
+        top_state = (yylac_stack_.empty ()
+                     ? yystack_[lac_top].state
+                     : yylac_stack_.back ());
+        // Push the resulting state of the reduction.
+        state_type state = yy_lr_goto_state_ (top_state, yyr1_[yyrule]);
+        YYCDEBUG << " G" << state;
+        yylac_stack_.push_back (state);
+      }
+  }
+
+  // Establish the initial context if no initial context currently exists.
+  bool
+  ]b4_parser_class[::yy_lac_establish_ (int yytoken)
+  {
+    /* 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).
+
+       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.  */
+    if (!yy_lac_established_)
+      {
+#if ]b4_api_PREFIX[DEBUG
+        YYCDEBUG << "LAC: initial context established for "
+                 << yytname_[yytoken] << '\n';
+#endif
+        yy_lac_established_ = true;
+        return yy_lac_check_ (yytoken);
+      }
+    return true;
+  }
+
+  // Discard any previous initial lookahead context.
+  void
+  ]b4_parser_class[::yy_lac_discard_ (const char* evt)
+  {
+   /* 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 (yy_lac_established_)
+      {
+        YYCDEBUG << "LAC: initial context discarded due to "
+                 << evt << '\n';
+        yy_lac_established_ = false;
+      }
+  }]])[
+
+  // Generate an error message.
+  std::string
+  ]b4_parser_class[::yysyntax_error_ (]dnl
+b4_error_verbose_if([state_type yystate, const symbol_type& yyla],
+                    [state_type, const symbol_type&])[) const
+  {]b4_error_verbose_if([[
+    // Number of reported tokens (one for the "unexpected", one per
+    // "expected").
+    std::ptrdiff_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 yyla) 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
+         yyla.  (However, yyla is currently not documented for users.)]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_check 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 (!yyla.empty ())
+      {
+        symbol_number_type yytoken = yyla.type_get ();
+        yyarg[yycount++] = yytname_[yytoken];]b4_lac_if([[
+
+#if ]b4_api_PREFIX[DEBUG
+        // Execute LAC once. We don't care if it is succesful, we
+        // only do it for the sake of debugging output.
+        if (!yy_lac_established_)
+          yy_lac_check_ (yytoken);
+#endif]])[
+
+        int yyn = yypact_[yystate];
+        if (!yy_pact_value_is_default_ (yyn))
+          {]b4_lac_if([[
+            for (int yyx = 0; yyx < yyntokens_; ++yyx)
+              if (yyx != yy_error_token_ && yyx != yy_undef_token_
+                  && yy_lac_check_ (yyx))
+                {]], [[
+            /* 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 != yy_error_token_
+                  && !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_NULLPTR;
+    switch (yycount)
+      {
+#define YYCASE_(N, S)                         \
+        case N:                               \
+          yyformat = S;                       \
+        break
+      default: // Avoid compiler warnings.
+        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_
+      }
+
+    std::string yyres;
+    // Argument number.
+    std::ptrdiff_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");]])[
+  }
+
+
+  const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class::yypact_ninf_ = b4_pact_ninf[;
+
+  const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class::yytable_ninf_ = b4_table_ninf[;
+
+]b4_parser_tables_define[
+
+]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*
+  const ]b4_parser_class[::yytname_[] =
+  {
+  ]b4_tname[
+  };
+
+]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
+]b4_integral_parser_table_define([rline], [b4_rline])[
+
+  // Print the state stack on the debug stream.
+  void
+  ]b4_parser_class[::yystack_print_ ()
+  {
+    *yycdebug_ << "Stack now";
+    for (stack_type::const_iterator
+           i = yystack_.begin (),
+           i_end = yystack_.end ();
+         i != i_end; ++i)
+      *yycdebug_ << ' ' << int (i->state);
+    *yycdebug_ << '\n';
+  }
+
+  // Report on the debug stream that the rule \a yyrule is going to be reduced.
+  void
+  ]b4_parser_class[::yy_reduce_print_ (int yyrule)
+  {
+    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 << "):\n";
+    // The symbols being reduced.
+    for (int yyi = 0; yyi < yynrhs; yyi++)
+      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
+                       ]b4_rhs_data(yynrhs, yyi + 1)[);
+  }
+#endif // ]b4_api_PREFIX[DEBUG
+
+]b4_token_ctor_if([], [b4_yytranslate_define([cc])])[
+]b4_namespace_close[
+]b4_epilogue[]dnl
+b4_output_end
+
+
+m4_popdef([b4_copyright_years])dnl
diff --git a/data/skeletons/lalr1.d b/data/skeletons/lalr1.d
new file mode 100644
index 0000000..5aa2fb6
--- /dev/null
+++ b/data/skeletons/lalr1.d
@@ -0,0 +1,895 @@
+# D skeleton for Bison -*- autoconf -*-
+
+# Copyright (C) 2007-2012, 2019 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_skeletonsdir/[d.m4])
+
+
+b4_output_begin([b4_parser_file_name])
+b4_copyright([Skeleton implementation for Bison LALR(1) parsers in D],
+             [2007-2012, 2019])[
+
+]b4_percent_define_ifdef([package], [module b4_percent_define_get([package]);
+])[
+version(D_Version2) {
+} else {
+  static assert(false, "need compiler for D Version 2");
+}
+
+]b4_user_pre_prologue[
+]b4_user_post_prologue[
+]b4_percent_code_get([[imports]])[
+import std.format;
+
+/**
+ * A Bison parser, automatically generated from <tt>]m4_bpatsubst(b4_file_name, [^"\(.*\)"$], [\1])[</tt>.
+ *
+ * @@author LALR (1) parser skeleton written by Paolo Bonzini.
+ * Port to D language was done by Oliver Mangold.
+ */
+
+/**
+ * Communication interface between the scanner and the Bison-generated
+ * parser <tt>]b4_parser_class[</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.  */
+  @@property ]b4_position_type[ startPos ();
+
+  /**
+   * Method to retrieve the ending position of the last scanned token.
+   * @@return the first position beyond the last scanned token.  */
+  @@property ]b4_position_type[ endPos ();
+
+]])[
+  /**
+   * Method to retrieve the semantic value of the last scanned token.
+   * @@return the semantic value of the last scanned token.  */
+  @@property ]b4_yystype[ semanticVal ();
+
+  /**
+   * 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 ();
+
+  /**
+   * 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_locations_if([b4_position_type_if([[
+static assert(__traits(compiles,
+              (new ]b4_position_type[[1])[0]=(new ]b4_position_type[[1])[0]),
+              "struct/class ]b4_position_type[ must be default-constructible "
+              "and assignable");
+static assert(__traits(compiles, (new string[1])[0]=(new ]b4_position_type[).toString()),
+              "error: struct/class ]b4_position_type[ must have toString method");
+]], [[
+  /**
+   * A struct denoting a point in the input.*/
+public struct ]b4_position_type[ {
+
+  /** The column index within the line of input.  */
+  public int column = 1;
+  /** The line number within an input file.  */
+  public int line = 1;
+  /** The name of the input file.  */
+  public string filename = null;
+
+  /**
+   * A string representation of the position. */
+  public string toString() const {
+    if (filename)
+      return format("%s:%d.%d", filename, line, column);
+    else
+      return format("%d.%d", line, column);
+  }
+}
+]])b4_location_type_if([[
+static assert(__traits(compiles, (new ]b4_location_type[((new ]b4_position_type[[1])[0]))) &&
+              __traits(compiles, (new ]b4_location_type[((new ]b4_position_type[[1])[0], (new ]b4_position_type[[1])[0]))),
+              "error: struct/class ]b4_location_type[ must have "
+              "default constructor and constructors this(]b4_position_type[) and this(]b4_position_type[, ]b4_position_type[).");
+static assert(__traits(compiles, (new ]b4_location_type[[1])[0].begin=(new ]b4_location_type[[1])[0].begin) &&
+              __traits(compiles, (new ]b4_location_type[[1])[0].begin=(new ]b4_location_type[[1])[0].end) &&
+              __traits(compiles, (new ]b4_location_type[[1])[0].end=(new ]b4_location_type[[1])[0].begin) &&
+              __traits(compiles, (new ]b4_location_type[[1])[0].end=(new ]b4_location_type[[1])[0].end),
+              "error: struct/class ]b4_location_type[ must have assignment-compatible "
+              "members/properties 'begin' and 'end'.");
+static assert(__traits(compiles, (new string[1])[0]=(new ]b4_location_type[[1])[0].toString()),
+              "error: struct/class ]b4_location_type[ must have toString method.");
+
+private immutable bool yy_location_is_class = !__traits(compiles, *(new ]b4_location_type[((new ]b4_position_type[[1])[0])));]], [[
+/**
+ * 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 this (]b4_position_type[ loc) {
+    this.begin = this.end = loc;
+  }
+
+  public this () {
+  }
+
+  /**
+   * 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 this (]b4_position_type[ begin, ]b4_position_type[ end)
+  {
+    this.begin = begin;
+    this.end = end;
+  }
+
+  /**
+   * A representation of the location. For this to be correct,
+   * <code>]b4_position_type[</code> should override the <code>toString</code>
+   * method.  */
+  public override string toString () const {
+    auto end_col = 0 < end.column ? end.column - 1 : 0;
+    auto res = begin.toString ();
+    if (end.filename && begin.filename != end.filename)
+      res ~= "-" ~ format("%s:%d.%d", end.filename, end.line, end_col);
+    else if (begin.line < end.line)
+      res ~= "-" ~ format("%d.%d", end.line, end_col);
+    else if (begin.column < end_col)
+      res ~= "-" ~ format("%d", end_col);
+    return res;
+  }
+}
+
+private immutable bool yy_location_is_class = true;
+
+]])])m4_ifdef([b4_user_union_members], [private union YYSemanticType
+{
+b4_user_union_members
+};],
+[m4_if(b4_tag_seen_flag, 0,
+[[private alias int YYSemanticType;]])])[
+]b4_token_enums(b4_tokens)[
+]b4_parser_class_declaration[
+{
+  ]b4_identification[
+
+]b4_locations_if([[
+  private final ]b4_location_type[ yylloc_from_stack (ref YYStack rhs, int n)
+  {
+    static if (yy_location_is_class) {
+      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);
+    } else {
+      if (n > 0)
+        return ]b4_location_type[ (rhs.locationAt (n-1).begin, rhs.locationAt (0).end);
+      else
+        return ]b4_location_type[ (rhs.locationAt (0).end);
+    }
+  }]])[
+
+]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([[
+  /**
+   * Instantiate the Bison-generated parser.
+   */
+  public this] (b4_parse_param_decl([b4_lex_param_decl])[) {
+    this (new YYLexer(]b4_lex_param_call[));
+  }
+]])[
+
+  /**
+   * Instantiate the Bison-generated parser.
+   * @@param yylexer The scanner that will supply tokens to the parser.
+   */
+  ]b4_lexer_if([[protected]], [[public]]) [this (]b4_parse_param_decl([[Lexer yylexer]])[) {
+    this.yylexer = yylexer;]b4_parse_trace_if([[
+    this.yyDebugStream = stderr;]])[
+]b4_parse_param_cons[
+  }
+]b4_parse_trace_if([[
+  private File yyDebugStream;
+
+  /**
+   * The <tt>File</tt> on which the debugging output is
+   * printed.
+   */
+  public File getDebugStream () { return yyDebugStream; }
+
+  /**
+   * Set the <tt>std.File</tt> on which the debug output is printed.
+   * @@param s The stream that is used for debugging output.
+   */
+  public final void setDebugStream(File 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; }
+
+  protected final void yycdebug (string s) {
+    if (0 < yydebug)
+      yyDebugStream.writeln (s);
+  }
+]])[
+  private final int yylex () {
+    return yylexer.yylex ();
+  }
+
+  protected final void yyerror (]b4_locations_if(ref [b4_location_type[ loc, ]])[string s) {
+    yylexer.yyerror (]b4_locations_if([loc, ])[s);
+  }
+
+  /**
+   * Returned by a Bison action in order to stop the parsing process and
+   * return success (<tt>true</tt>).  */
+  public static immutable int YYACCEPT = 0;
+
+  /**
+   * Returned by a Bison action in order to stop the parsing process and
+   * return failure (<tt>false</tt>).  */
+  public static immutable int YYABORT = 1;
+
+  /**
+   * Returned by a Bison action in order to start error recovery without
+   * printing an error message.  */
+  public static immutable int YYERROR = 2;
+
+  // Internal return codes that are not supported for user semantic
+  // actions.
+  private static immutable int YYERRLAB = 3;
+  private static immutable int YYNEWSTATE = 4;
+  private static immutable int YYDEFAULT = 5;
+  private static immutable int YYREDUCE = 6;
+  private static immutable int YYERRLAB1 = 7;
+  private static immutable int YYRETURN = 8;
+]b4_locations_if([
+  private static immutable YYSemanticType yy_semantic_null;])[
+  private int yyerrstatus_ = 0;
+
+  /**
+   * 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 bool recovering ()
+  {
+    return yyerrstatus_ == 0;
+  }
+
+  private int yyaction (int yyn, ref YYStack yystack, int yylen)
+  {
+    ]b4_yystype[ yyval;]b4_locations_if([[
+    ]b4_location_type[ yyloc = yylloc_from_stack (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);
+
+]b4_parse_trace_if([[
+    yy_reduce_print (yyn, yystack);]])[
+
+    switch (yyn)
+    {
+]b4_user_actions[
+      default: break;
+    }
+
+]b4_parse_trace_if([[
+    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[0] == '"')
+      {
+        string yyr;
+      strip_quotes:
+        for (int i = 1; i < yystr.length; i++)
+          switch (yystr[i])
+            {
+            case '\'':
+            case ',':
+              break strip_quotes;
+
+            case '\\':
+              if (yystr[++i] != '\\')
+                break strip_quotes;
+              goto default;
+            default:
+              yyr ~= yystr[i];
+              break;
+
+            case '"':
+              return yyr;
+            }
+      }
+    else if (yystr == "$end")
+      return "end of input";
+
+    return yystr;
+  }
+]b4_parse_trace_if([[
+  /*--------------------------------.
+  | Print this symbol on YYOUTPUT.  |
+  `--------------------------------*/
+
+  private final void yy_symbol_print (string s, int yytype,
+    ref ]b4_yystype[ yyvaluep]dnl
+b4_locations_if([, ref ]b4_location_type[ yylocationp])[)
+  {
+    if (0 < yydebug)
+    {
+      string message = s ~ (yytype < yyntokens_ ? " token " : " nterm ")
+              ~ yytname_[yytype] ~ " ("]b4_locations_if([
+              ~ yylocationp.toString() ~ ": "])[;
+      static if (__traits(compiles, message ~= yyvaluep.toString ()))
+              message ~= yyvaluep.toString ();
+      else
+              message ~= format ("%s", &yyvaluep);
+      message ~= ")";
+      yycdebug (message);
+    }
+  }
+]])[
+  /**
+   * 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 bool parse ()
+  {
+    /// Lookahead and lookahead in internal form.
+    int yychar = yyempty_;
+    int yytoken = 0;
+
+    /* State.  */
+    int yyn = 0;
+    int yylen = 0;
+    int yystate = 0;
+
+    YYStack 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;
+
+    /// @@$.
+    ]b4_location_type[ yyloc;]])[
+
+    /// Semantic value of the lookahead.
+    ]b4_yystype[ yylval;
+
+    int yyresult;]b4_parse_trace_if([[
+
+    yycdebug ("Starting parse\n");]])[
+    yyerrstatus_ = 0;
+
+]m4_ifdef([b4_initial_action], [
+m4_pushdef([b4_at_dollar],     [yylloc])dnl
+m4_pushdef([b4_dollar_dollar], [yylval])dnl
+    /* User initialization code.  */
+    b4_user_initial_action
+m4_popdef([b4_dollar_dollar])dnl
+m4_popdef([b4_at_dollar])])dnl
+
+  [  /* Initialize the stack.  */
+    yystack.push (yystate, yylval]b4_locations_if([, yylloc])[);
+
+    int label = YYNEWSTATE;
+    for (;;)
+      final switch (label)
+      {
+        /* New state.  Unlike in the C/C++ skeletons, the state is already
+           pushed when we come here.  */
+      case YYNEWSTATE:]b4_parse_trace_if([[
+        yycdebug (format("Entering state %d\n", yystate));
+        if (0 < yydebug)
+          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_)
+        {]b4_parse_trace_if([[
+          yycdebug ("Reading a token: ");]])[
+          yychar = yylex ();]b4_locations_if([[
+          static if (yy_location_is_class) {
+            yylloc = new ]b4_location_type[(yylexer.startPos, yylexer.endPos);
+          } else {
+            yylloc = ]b4_location_type[(yylexer.startPos, yylexer.endPos);
+          }]])
+          yylval = yylexer.semanticVal;[
+        }
+
+        /* Convert token to internal form.  */
+        yytoken = yytranslate_ (yychar);]b4_parse_trace_if([[
+        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.  */]b4_parse_trace_if([[
+          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 <= YYTokenType.EOF)
+          {
+            /* Return failure if at end of input.  */
+            if (yychar == YYTokenType.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 += yy_error_token_;
+            if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
+            {
+              yyn = yytable_[yyn];
+              if (0 < yyn)
+                break;
+                  }
+          }
+
+          /* Pop the current state because it cannot handle the error token.  */
+          if (yystack.height == 1)
+            return false;
+
+]b4_locations_if([          yyerrloc = yystack.locationAt (0);])[
+          yystack.pop ();
+          yystate = yystack.stateAt (0);]b4_parse_trace_if([[
+          if (0 < yydebug)
+            yystack.print (yyDebugStream);]])[
+        }
+
+]b4_locations_if([
+        /* Muck with the stack to setup for yylloc.  */
+        yystack.push (0, yy_semantic_null, yylloc);
+        yystack.push (0, yy_semantic_null, yyerrloc);
+        yyloc = yylloc_from_stack (yystack, 2);
+        yystack.pop (2);])[
+
+        /* Shift the error token.  */]b4_parse_trace_if([[
+        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 final string yysyntax_error (int yystate, int tok)
+  {]b4_error_verbose_if([[
+    /* 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.
+      string res = "syntax error, unexpected ";
+      res ~= 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 != yy_error_token_
+              && !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 != yy_error_token_
+                   && !yy_table_value_is_error_ (yytable_[x + yyn]))
+               {
+                  res ~= count++ == 0 ? ", expecting " : " or ";
+                  res ~= yytnamerr_ (yytname_[x]);
+               }
+          }
+      }
+      return res;
+    }]])[
+    return "syntax error";
+  }
+
+  /**
+   * Whether the given <code>yypact_</code> value indicates a defaulted state.
+   * @@param yyvalue   the value to check
+   */
+  private static bool 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 bool 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 immutable ]b4_int_type_for([b4_pact])[ yypact_ninf_ = ]b4_pact_ninf[;
+
+  /* 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 immutable ]b4_int_type_for([b4_table])[ yytable_ninf_ = ]b4_table_ninf[;
+
+  ]b4_parser_tables_define[
+
+  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
+  private static immutable string[] yytname_ =
+  @{
+  ]b4_tname[
+  @};
+
+]b4_parse_trace_if([[
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+  private static immutable ]b4_int_type_for([b4_rline])[[] yyrline_ =
+  @{
+  ]b4_rline[
+  @};
+
+  // Report on the debug stream that the rule yyrule is going to be reduced.
+  private final void yy_reduce_print (int yyrule, ref YYStack yystack)
+  {
+    if (yydebug == 0)
+      return;
+
+    int yylno = yyrline_[yyrule];
+    int yynrhs = yyr2_[yyrule];
+    /* Print the symbols being reduced, and their result.  */
+    yycdebug (format("Reducing stack by rule %d (line %d), ",
+              yyrule - 1, yylno));
+
+    /* The symbols being reduced.  */
+    for (int yyi = 0; yyi < yynrhs; yyi++)
+      yy_symbol_print (format("   $%d =", yyi + 1),
+                       yystos_[yystack.stateAt(yynrhs - (yyi + 1))],
+                       ]b4_rhs_value(yynrhs, yyi + 1)b4_locations_if([,
+                       b4_rhs_location(yynrhs, yyi + 1)])[);
+  }
+]])[
+
+  private static token_number_type yytranslate_ (int t)
+  {
+]b4_api_token_raw_if(
+[[    import std.conv : to;
+    return to!byte (t);]],
+[[    /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+    immutable token_number_type[] translate_table =
+    @{
+  ]b4_translate[
+    @};
+
+    immutable int user_token_number_max_ = ]b4_user_token_number_max[;
+    immutable token_number_type undef_token_ = ]b4_undef_token_number[;
+
+    if (t <= 0)
+      return YYTokenType.EOF;
+    else if (t <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return undef_token_;]])[
+  }
+
+  alias ]b4_int_type_for([b4_translate])[ token_number_type;
+
+  private static immutable token_number_type yy_error_token_ = 1;
+
+  private static immutable int yylast_ = ]b4_last[;
+  private static immutable int yynnts_ = ]b4_nterms_number[;
+  private static immutable int yyempty_ = -2;
+  private static immutable int yyfinal_ = ]b4_final_state_number[;
+  private static immutable int yyntokens_ = ]b4_tokens_number[;
+
+  private final struct YYStackElement {
+    int state;
+    ]b4_yystype[ value;]b4_locations_if(
+    b4_location_type[[] location;])[
+  }
+
+  private final struct YYStack {
+    private YYStackElement[] stack = [];
+
+    public final @@property ulong height()
+    {
+      return stack.length;
+    }
+
+    public final void push (int state, ]b4_yystype[ value]dnl
+  b4_locations_if([, ref ]b4_location_type[ loc])[)
+    {
+      stack ~= YYStackElement(state, value]b4_locations_if([, loc])[);
+    }
+
+    public final void pop ()
+    {
+      pop (1);
+    }
+
+    public final void pop (int num)
+    {
+      stack.length -= num;
+    }
+
+    public final int stateAt (int i)
+    {
+      return stack[$-i-1].state;
+    }
+
+]b4_locations_if([[
+    public final ref ]b4_location_type[ locationAt (int i)
+    {
+      return stack[$-i-1].location;
+    }]])[
+
+    public final ref ]b4_yystype[ valueAt (int i)
+    {
+      return stack[$-i-1].value;
+    }
+]b4_parse_trace_if([[
+    // Print the state stack on the debug stream.
+    public final void print (File stream)
+    {
+      stream.write ("Stack now");
+      for (int i = 0; i < stack.length; i++)
+        stream.write (" ", stack[i].state);
+      stream.writeln ();
+    }]])[
+  }
+
+  /* User implementation code.  */
+]b4_percent_code_get[
+}
+]b4_epilogue[]dnl
+b4_output_end
diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java
new file mode 100644
index 0000000..9ec0806
--- /dev/null
+++ b/data/skeletons/lalr1.java
@@ -0,0 +1,1045 @@
+# Java skeleton for Bison                           -*- autoconf -*-
+
+# Copyright (C) 2007-2015, 2018-2019 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_skeletonsdir/[java.m4])
+
+b4_defines_if([b4_complain([%defines does not make sense in Java])])
+
+m4_define([b4_symbol_no_destructor_assert],
+[b4_symbol_if([$1], [has_destructor],
+              [b4_complain_at(m4_unquote(b4_symbol([$1], [destructor_loc])),
+                              [%destructor does not make sense in Java])])])
+b4_symbol_foreach([b4_symbol_no_destructor_assert])
+
+# Setup some macros for api.push-pull.
+b4_percent_define_default([[api.push-pull]], [[pull]])
+b4_percent_define_check_values([[[[api.push-pull]],
+                                 [[pull]], [[push]], [[both]]]])
+
+# Define m4 conditional macros that encode the value
+# of the api.push-pull flag.
+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]])])
+
+# Define a macro to be true when api.push-pull has the value "both".
+m4_define([b4_both_if],[b4_push_if([b4_pull_if([$1],[$2])],[$2])])
+
+# 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]])])])
+
+# Define a macro to encapsulate the parse state variables.
+# This allows them to be defined either in parse() when doing
+# pull parsing, or as class instance variable when doing push parsing.
+m4_define([b4_define_state],[[
+    /* 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 ();
+    int label = YYNEWSTATE;
+
+    /* Error handling.  */
+    int yynerrs_ = 0;
+    ]b4_locations_if([[/* The location where the error started.  */
+    ]b4_location_type[ yyerrloc = null;
+
+    /* Location. */
+    ]b4_location_type[ yylloc = new ]b4_location_type[ (null, null);]])[
+
+    /* Semantic value of the lookahead.  */
+    ]b4_yystype[ yylval = null;
+]])[
+
+]b4_output_begin([b4_parser_file_name])[
+]b4_copyright([Skeleton implementation for Bison LALR(1) parsers in Java],
+              [2007-2015, 2018-2019])[
+]b4_percent_define_ifdef([package], [package b4_percent_define_get([package]);[
+]])[
+]b4_user_pre_prologue[
+]b4_user_post_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_parser_class_declaration[
+{
+  ]b4_identification[
+]b4_error_verbose_if([[
+  /**
+   * True if verbose error messages are enabled.
+   */
+  private boolean yyErrorVerbose = true;
+
+  /**
+   * Whether verbose error messages are enabled.
+   */
+  public final boolean getErrorVerbose() { return yyErrorVerbose; }
+
+  /**
+   * Set the verbosity of error messages.
+   * @@param verbose True to request verbose error messages.
+   */
+  public final void setErrorVerbose(boolean verbose)
+  { yyErrorVerbose = 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 ();
+    }
+  }
+
+]])[
+
+]b4_locations_if([[
+  private ]b4_location_type[ yylloc (YYStack rhs, int n)
+  {
+    if (0 < n)
+      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[</tt>.
+   */
+  public interface Lexer {
+    /** Token returned by the scanner to signal the end of its input.  */
+    public static final int EOF = 0;
+
+]b4_token_enums[
+
+    ]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 msg The string for the error message.
+     */
+     void yyerror (]b4_locations_if([b4_location_type[ loc, ]])[String msg);
+  }
+
+]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 (b4_parse_param_decl([b4_lex_param_decl])[) ]b4_maybe_throws([b4_init_throws])[
+  {
+    ]b4_percent_code_get([[init]])[
+    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[ (]b4_parse_param_decl([[Lexer yylexer]])[) ]b4_maybe_throws([b4_init_throws])[
+  {
+    ]b4_percent_code_get([[init]])[
+    this.yylexer = yylexer;
+    ]b4_parse_param_cons[
+  }
+
+]b4_parse_trace_if([[
+  private java.io.PrintStream yyDebugStream = System.err;
+
+  /**
+   * 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; }
+]])[
+
+  /**
+   * Print an error message via the lexer.
+   *]b4_locations_if([[ Use a <code>null</code> location.]])[
+   * @@param msg The error message.
+   */
+  public final void yyerror (String msg)
+  {
+    yylexer.yyerror (]b4_locations_if([[(]b4_location_type[)null, ]])[msg);
+  }
+]b4_locations_if([[
+  /**
+   * Print an error message via the lexer.
+   * @@param loc The location associated with the message.
+   * @@param msg The error message.
+   */
+  public final void yyerror (]b4_location_type[ loc, String msg)
+  {
+    yylexer.yyerror (loc, msg);
+  }
+
+  /**
+   * Print an error message via the lexer.
+   * @@param pos The position associated with the message.
+   * @@param msg The error message.
+   */
+  public final void yyerror (]b4_position_type[ pos, String msg)
+  {
+    yylexer.yyerror (new ]b4_location_type[ (pos), msg);
+  }]])[
+]b4_parse_trace_if([[
+  protected final void yycdebug (String s) {
+    if (0 < yydebug)
+      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 (0 < num) {
+        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;
+
+]b4_push_if([
+  /**
+   * Returned by a Bison action in order to request a new token.
+   */
+  public static final int YYPUSH_MORE = 4;])[
+
+  /**
+   * 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;
+]b4_push_if([[  private static final int YYGETTOKEN = 9; /* Signify that a new token is expected when doing push-parsing.  */]])[
+
+  private int yyerrstatus_ = 0;
+
+]b4_push_if([b4_define_state])[
+  /**
+   * 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;
+  }
+
+  /** Compute post-reduction state.
+   * @@param yystate   the current state
+   * @@param yysym     the nonterminal to push on the stack
+   */
+  private int yyLRGotoState (int yystate, int yysym)
+  {
+    int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
+      return yytable_[yyr];
+    else
+      return yydefgoto_[yysym - yyntokens_];
+  }
+
+  private int yyaction (int yyn, YYStack yystack, int yylen) ]b4_maybe_throws([b4_throws])[
+  {
+    /* 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.  */
+    ]b4_yystype[ yyval = (0 < yylen) ? yystack.valueAt (yylen - 1) : yystack.valueAt (0);
+    ]b4_locations_if([b4_location_type[ yyloc = yylloc (yystack, yylen);]])[]b4_parse_trace_if([[
+
+    yyReducePrint (yyn, yystack);]])[
+
+    switch (yyn)
+      {
+        ]b4_user_actions[
+        default: break;
+      }]b4_parse_trace_if([[
+
+    yySymbolPrint ("-> $$ =", yyr1_[yyn], yyval]b4_locations_if([, yyloc])[);]])[
+
+    yystack.pop (yylen);
+    yylen = 0;
+
+    /* Shift the result of the reduction.  */
+    int yystate = yyLRGotoState (yystack.stateAt (0), yyr1_[yyn]);
+    yystack.push (yystate, yyval]b4_locations_if([, yyloc])[);
+    return YYNEWSTATE;
+  }
+
+]b4_error_verbose_if([[
+  /* 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;
+  }
+]])[
+]b4_parse_trace_if([[
+  /*--------------------------------.
+  | Print this symbol on YYOUTPUT.  |
+  `--------------------------------*/
+
+  private void yySymbolPrint (String s, int yytype,
+                             ]b4_yystype[ yyvaluep]dnl
+                              b4_locations_if([, Object yylocationp])[)
+  {
+    yycdebug (s + (yytype < yyntokens_ ? " token " : " nterm ")
+              + yytname_[yytype] + " ("]b4_locations_if([
+              + yylocationp + ": "])[
+              + (yyvaluep == null ? "(null)" : yyvaluep.toString ()) + ")");
+  }]])[
+
+]b4_push_if([],[[
+  /**
+   * 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])])[]])[
+]b4_push_if([
+  /**
+   * Push Parse input from external lexer
+   *
+   * @@param yylextoken current token
+   * @@param yylexval current lval
+]b4_locations_if([   * @@param yylexloc current position])[
+   *
+   * @@return <tt>YYACCEPT, YYABORT, YYPUSH_MORE</tt>
+   */
+  public int push_parse (int yylextoken, b4_yystype yylexval[]b4_locations_if([, b4_location_type yylexloc]))
+      b4_maybe_throws([b4_list2([b4_lex_throws], [b4_throws])])])[
+  {
+    ]b4_locations_if([/* @@$.  */
+    b4_location_type yyloc;])[
+]b4_push_if([],[[
+]b4_define_state[]b4_parse_trace_if([[
+    yycdebug ("Starting parse\n");]])[
+    yyerrstatus_ = 0;
+
+    /* Initialize the stack.  */
+    yystack.push (yystate, yylval ]b4_locations_if([, yylloc])[);
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([yylval], [], [], [yylloc])dnl
+    b4_user_initial_action
+b4_dollar_popdef[]dnl
+])[
+]])[
+]b4_push_if([[
+    if (!this.push_parse_initialized)
+      {
+        push_parse_initialize ();
+]m4_ifdef([b4_initial_action], [
+b4_dollar_pushdef([yylval], [], [], [yylloc])dnl
+    b4_user_initial_action
+b4_dollar_popdef[]dnl
+])[]b4_parse_trace_if([[
+        yycdebug ("Starting parse\n");]])[
+        yyerrstatus_ = 0;
+      } else
+        label = YYGETTOKEN;
+
+    boolean push_token_consumed = true;
+]])[
+    for (;;)
+      switch (label)
+      {
+        /* New state.  Unlike in the C/C++ skeletons, the state is already
+           pushed when we come here.  */
+      case YYNEWSTATE:]b4_parse_trace_if([[
+        yycdebug ("Entering state " + yystate + "\n");
+        if (0 < yydebug)
+          yystack.print (yyDebugStream);]])[
+
+        /* Accept?  */
+        if (yystate == yyfinal_)
+          ]b4_push_if([{label = YYACCEPT; break;}],
+                      [return true;])[
+
+        /* Take a decision.  First try without lookahead.  */
+        yyn = yypact_[yystate];
+        if (yyPactValueIsDefault (yyn))
+          {
+            label = YYDEFAULT;
+            break;
+          }
+]b4_push_if([        /* Fall Through */
+
+      case YYGETTOKEN:])[
+        /* Read a lookahead token.  */
+        if (yychar == yyempty_)
+          {
+]b4_push_if([[
+            if (!push_token_consumed)
+              return YYPUSH_MORE;]b4_parse_trace_if([[
+            yycdebug ("Reading a token: ");]])[
+            yychar = yylextoken;
+            yylval = yylexval;]b4_locations_if([
+            yylloc = yylexloc;])[
+            push_token_consumed = false;]], [b4_parse_trace_if([[
+            yycdebug ("Reading a token: ");]])[
+            yychar = yylexer.yylex ();
+            yylval = yylexer.getLVal ();]b4_locations_if([
+            yylloc = new b4_location_type (yylexer.getStartPos (),
+                            yylexer.getEndPos ());])[
+]])[
+          }
+
+        /* Convert token to internal form.  */
+        yytoken = yytranslate_ (yychar);]b4_parse_trace_if([[
+        yySymbolPrint ("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 (yyTableValueIsError (yyn))
+              label = YYERRLAB;
+            else
+              {
+                yyn = -yyn;
+                label = YYREDUCE;
+              }
+          }
+
+        else
+          {
+            /* Shift the lookahead token.  */]b4_parse_trace_if([[
+            yySymbolPrint ("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 <= Lexer.EOF)
+              {
+                /* Return failure if at end of input.  */
+                if (yychar == Lexer.EOF)
+                  ]b4_push_if([{label = YYABORT; break;}], [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 (!yyPactValueIsDefault (yyn))
+              {
+                yyn += yy_error_token_;
+                if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
+                  {
+                    yyn = yytable_[yyn];
+                    if (0 < yyn)
+                      break;
+                  }
+              }
+
+            /* Pop the current state because it cannot handle the
+             * error token.  */
+            if (yystack.height == 0)
+              ]b4_push_if([{label = YYABORT; break;}],[return false;])[
+
+            ]b4_locations_if([yyerrloc = yystack.locationAt (0);])[
+            yystack.pop ();
+            yystate = yystack.stateAt (0);]b4_parse_trace_if([[
+            if (0 < yydebug)
+              yystack.print (yyDebugStream);]])[
+          }
+
+        if (label == YYABORT)
+            /* Leave the switch.  */
+            break;
+
+]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.  */]b4_parse_trace_if([[
+        yySymbolPrint ("Shifting", yystos_[yyn],
+                       yylval]b4_locations_if([, yyloc])[);]])[
+
+        yystate = yyn;
+        yystack.push (yyn, yylval]b4_locations_if([, yyloc])[);
+        label = YYNEWSTATE;
+        break;
+
+        /* Accept.  */
+      case YYACCEPT:
+        ]b4_push_if([this.push_parse_initialized = false; return YYACCEPT;],
+                    [return true;])[
+
+        /* Abort.  */
+      case YYABORT:
+        ]b4_push_if([this.push_parse_initialized = false; return YYABORT;],
+                    [return false;])[
+      }
+}
+]b4_push_if([[
+  boolean push_parse_initialized = false;
+
+    /**
+     * (Re-)Initialize the state of the push parser.
+     */
+  public void push_parse_initialize()
+  {
+    /* Lookahead and lookahead in internal form.  */
+    this.yychar = yyempty_;
+    this.yytoken = 0;
+
+    /* State.  */
+    this.yyn = 0;
+    this.yylen = 0;
+    this.yystate = 0;
+    this.yystack = new YYStack ();
+    this.label = YYNEWSTATE;
+
+    /* Error handling.  */
+    this.yynerrs_ = 0;
+    ]b4_locations_if([/* The location where the error started.  */
+    this.yyerrloc = null;
+    this.yylloc = new b4_location_type (null, null);])[
+
+    /* Semantic value of the lookahead.  */
+    this.yylval = null;
+
+    yystack.push (this.yystate, this.yylval]b4_locations_if([, this.yylloc])[);
+
+    this.push_parse_initialized = true;
+
+  }
+]b4_locations_if([
+  /**
+   * Push parse given input from an external lexer.
+   *
+   * @@param yylextoken current token
+   * @@param yylexval current lval
+   * @@param yyylexpos current position
+   *
+   * @@return <tt>YYACCEPT, YYABORT, YYPUSH_MORE</tt>
+   */
+  public int push_parse (int yylextoken, b4_yystype yylexval, b4_position_type yylexpos)
+      b4_maybe_throws([b4_list2([b4_lex_throws], [b4_throws])])
+  {
+    return push_parse (yylextoken, yylexval, new b4_location_type (yylexpos));
+  }
+])[]])[
+
+]b4_both_if([[
+  /**
+   * Parse input from the scanner that was specified at object construction
+   * time.  Return whether the end of the input was reached successfully.
+   * This version of parse () is defined only when api.push-push=both.
+   *
+   * @@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])])[
+  {
+    if (yylexer == null)
+      throw new NullPointerException("Null Lexer");
+    int status;
+    do {
+      int token = yylexer.yylex();
+      ]b4_yystype[ lval = yylexer.getLVal();
+]b4_locations_if([dnl
+      b4_location_type yyloc = new b4_location_type (yylexer.getStartPos (),
+                                            yylexer.getEndPos ());])[
+      ]b4_locations_if([status = push_parse(token,lval,yyloc);],[
+      status = push_parse(token,lval);])[
+    } while (status == YYPUSH_MORE);
+    return (status == YYACCEPT);
+  }
+]])[
+
+  // Generate an error message.
+  private String yysyntax_error (int yystate, int tok)
+  {]b4_error_verbose_if([[
+    if (yyErrorVerbose)
+      {
+        /* 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 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 (!yyPactValueIsDefault (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 != yy_error_token_
+                      && !yyTableValueIsError (yytable_[x + yyn]))
+                    ++count;
+                if (count < 5)
+                  {
+                    count = 0;
+                    for (int x = yyxbegin; x < yyxend; ++x)
+                      if (yycheck_[x + yyn] == x && x != yy_error_token_
+                          && !yyTableValueIsError (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 yyPactValueIsDefault (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 yyTableValueIsError (int yyvalue)
+  {
+    return yyvalue == yytable_ninf_;
+  }
+
+  private static final ]b4_int_type_for([b4_pact])[ yypact_ninf_ = ]b4_pact_ninf[;
+  private static final ]b4_int_type_for([b4_table])[ yytable_ninf_ = ]b4_table_ninf[;
+
+  ]b4_parser_tables_define[
+
+  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
+  ]b4_typed_parser_table_define([String], [tname], [b4_tname])[
+
+]b4_parse_trace_if([[
+  ]b4_integral_parser_table_define([rline], [b4_rline],
+  [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
+
+
+  // Report on the debug stream that the rule yyrule is going to be reduced.
+  private void yyReducePrint (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++)
+      yySymbolPrint ("   $" + (yyi + 1) + " =",
+                     yystos_[yystack.stateAt(yynrhs - (yyi + 1))],
+                     ]b4_rhs_data(yynrhs, yyi + 1)b4_locations_if([,
+                     b4_rhs_location(yynrhs, yyi + 1)])[);
+  }]])[
+
+  /* YYTRANSLATE_(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+     as returned by yylex, with out-of-bounds checking.  */
+  private static final ]b4_int_type_for([b4_translate])[ yytranslate_ (int t)
+]b4_api_token_raw_if(dnl
+[[  {
+    return t;
+  }
+]],
+[[  {
+    int user_token_number_max_ = ]b4_user_token_number_max[;
+    ]b4_int_type_for([b4_translate])[ undef_token_ = ]b4_undef_token_number[;
+
+    if (t <= 0)
+      return Lexer.EOF;
+    else if (t <= user_token_number_max_)
+      return yytranslate_table_[t];
+    else
+      return undef_token_;
+  }
+  ]b4_integral_parser_table_define([translate_table], [b4_translate])[
+]])[
+
+  private static final ]b4_int_type_for([b4_translate])[ yy_error_token_ = 1;
+
+  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 yyntokens_ = ]b4_tokens_number[;
+
+/* User implementation code.  */
+]b4_percent_code_get[]dnl
+
+}
+
+b4_epilogue[]dnl
+b4_output_end
diff --git a/data/skeletons/location.cc b/data/skeletons/location.cc
new file mode 100644
index 0000000..0258379
--- /dev/null
+++ b/data/skeletons/location.cc
@@ -0,0 +1,373 @@
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2015, 2018-2019 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-2015, 2018-2019])
+
+
+# b4_position_file
+# ----------------
+# Name of the file containing the position class, if we want this file.
+b4_defines_if([b4_required_version_if([302], [],
+                                      [m4_define([b4_position_file], [position.hh])])])])
+
+
+# b4_location_file
+# ----------------
+# Name of the file containing the position/location class,
+# if we want this file.
+b4_percent_define_check_file([b4_location_file],
+                             [[api.location.file]],
+                             b4_defines_if([[location.hh]]))
+
+# b4_location_include
+# -------------------
+# If location.hh is to be generated, the name under which should it be
+# included.
+#
+# b4_location_path
+# ----------------
+# The path to use for the CPP guard.
+m4_ifdef([b4_location_file],
+[m4_define([b4_location_include],
+           [b4_percent_define_get([[api.location.include]],
+                                  ["b4_location_file"])])
+ m4_define([b4_location_path],
+           b4_percent_define_get([[api.location.include]],
+                                 ["b4_dir_prefix[]b4_location_file"]))
+ m4_define([b4_location_path],
+           m4_substr(m4_defn([b4_location_path]), 1, m4_eval(m4_len(m4_defn([b4_location_path])) - 2)))
+ ])
+
+
+
+# b4_location_define
+# ------------------
+# Define the position and location classes.
+m4_define([b4_location_define],
+[[  /// A point in a source file.
+  class position
+  {
+  public:
+    /// Type for line and column numbers.
+    typedef int counter_type;
+]m4_ifdef([b4_location_constructors], [[
+    /// Construct a position.
+    explicit position (]b4_percent_define_get([[filename_type]])[* f = YY_NULLPTR,
+                       counter_type l = ]b4_location_initial_line[,
+                       counter_type c = ]b4_location_initial_column[)
+      : filename (f)
+      , line (l)
+      , column (c)
+    {}
+
+]])[
+    /// Initialization.
+    void initialize (]b4_percent_define_get([[filename_type]])[* fn = YY_NULLPTR,
+                     counter_type l = ]b4_location_initial_line[,
+                     counter_type c = ]b4_location_initial_column[)
+    {
+      filename = fn;
+      line = l;
+      column = c;
+    }
+
+    /** \name Line and Column related manipulators
+     ** \{ */
+    /// (line related) Advance to the COUNT next lines.
+    void lines (counter_type count = 1)
+    {
+      if (count)
+        {
+          column = ]b4_location_initial_column[;
+          line = add_ (line, count, ]b4_location_initial_line[);
+        }
+    }
+
+    /// (column related) Advance to the COUNT next columns.
+    void columns (counter_type count = 1)
+    {
+      column = add_ (column, count, ]b4_location_initial_column[);
+    }
+    /** \} */
+
+    /// File name to which this position refers.
+    ]b4_percent_define_get([[filename_type]])[* filename;
+    /// Current line number.
+    counter_type line;
+    /// Current column number.
+    counter_type column;
+
+  private:
+    /// Compute max (min, lhs+rhs).
+    static counter_type add_ (counter_type lhs, counter_type rhs, counter_type min)
+    {
+      return lhs + rhs < min ? min : lhs + rhs;
+    }
+  };
+
+  /// Add \a width columns, in place.
+  inline position&
+  operator+= (position& res, position::counter_type width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /// Add \a width columns.
+  inline position
+  operator+ (position res, position::counter_type width)
+  {
+    return res += width;
+  }
+
+  /// Subtract \a width columns, in place.
+  inline position&
+  operator-= (position& res, position::counter_type width)
+  {
+    return res += -width;
+  }
+
+  /// Subtract \a width columns.
+  inline position
+  operator- (position res, position::counter_type width)
+  {
+    return res -= 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
+   */
+  template <typename YYChar>
+  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;
+  }
+
+  /// Two points in a source file.
+  class location
+  {
+  public:
+    /// Type for line and column numbers.
+    typedef position::counter_type counter_type;
+]m4_ifdef([b4_location_constructors], [
+    /// 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,
+                       counter_type l = ]b4_location_initial_line[,
+                       counter_type c = ]b4_location_initial_column[)
+      : begin (f, l, c)
+      , end (f, l, c)
+    {}
+
+])[
+    /// Initialization.
+    void initialize (]b4_percent_define_get([[filename_type]])[* f = YY_NULLPTR,
+                     counter_type l = ]b4_location_initial_line[,
+                     counter_type c = ]b4_location_initial_column[)
+    {
+      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 (counter_type count = 1)
+    {
+      end += count;
+    }
+
+    /// Extend the current location to the COUNT next lines.
+    void lines (counter_type count = 1)
+    {
+      end.lines (count);
+    }
+    /** \} */
+
+
+  public:
+    /// Beginning of the located region.
+    position begin;
+    /// End of the located region.
+    position end;
+  };
+
+  /// Join two locations, in place.
+  inline location&
+  operator+= (location& res, const location& end)
+  {
+    res.end = end.end;
+    return res;
+  }
+
+  /// Join two locations.
+  inline location
+  operator+ (location res, const location& end)
+  {
+    return res += end;
+  }
+
+  /// Add \a width columns to the end position, in place.
+  inline location&
+  operator+= (location& res, location::counter_type width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /// Add \a width columns to the end position.
+  inline location
+  operator+ (location res, location::counter_type width)
+  {
+    return res += width;
+  }
+
+  /// Subtract \a width columns to the end position, in place.
+  inline location&
+  operator-= (location& res, location::counter_type width)
+  {
+    return res += -width;
+  }
+
+  /// Subtract \a width columns to the end position.
+  inline location
+  operator- (location res, location::counter_type width)
+  {
+    return res -= width;
+  }
+]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.
+   */
+  template <typename YYChar>
+  std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
+  {
+    location::counter_type end_col
+      = 0 < loc.end.column ? loc.end.column - 1 : 0;
+    ostr << loc.begin;
+    if (loc.end.filename
+        && (!loc.begin.filename
+            || *loc.begin.filename != *loc.end.filename))
+      ostr << '-' << loc.end.filename << ':' << loc.end.line << '.' << end_col;
+    else if (loc.begin.line < loc.end.line)
+      ostr << '-' << loc.end.line << '.' << end_col;
+    else if (loc.begin.column < end_col)
+      ostr << '-' << end_col;
+    return ostr;
+  }
+]])
+
+
+m4_ifdef([b4_position_file], [[
+]b4_output_begin([b4_dir_prefix], [b4_position_file])[
+]b4_generated_by[
+// Starting with Bison 3.2, this file is useless: the structure it
+// used to define is now defined in "]b4_location_file[".
+//
+// To get rid of this file:
+// 1. add '%require "3.2"' (or newer) to your grammar file
+// 2. remove references to this file from your build system
+// 3. if you used to include it, include "]b4_location_file[" instead.
+
+#include ]b4_location_include[
+]b4_output_end[
+]])
+
+
+m4_ifdef([b4_location_file], [[
+]b4_output_begin([b4_dir_prefix], [b4_location_file])[
+]b4_copyright([Locations for Bison parsers in C++])[
+/**
+ ** \file ]b4_location_path[
+ ** Define the ]b4_namespace_ref[::location class.
+ */
+
+]b4_cpp_guard_open([b4_location_path])[
+
+# include <iostream>
+# include <string>
+
+]b4_null_define[
+
+]b4_namespace_open[
+]b4_location_define[
+]b4_namespace_close[
+]b4_cpp_guard_close([b4_location_path])[
+]b4_output_end[
+]])
+
+
+m4_popdef([b4_copyright_years])
diff --git a/data/skeletons/stack.hh b/data/skeletons/stack.hh
new file mode 100644
index 0000000..cb52bcc
--- /dev/null
+++ b/data/skeletons/stack.hh
@@ -0,0 +1,152 @@
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2015, 2018-2019 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_stack_file
+# -------------
+# Name of the file containing the stack class, if we want this file.
+b4_defines_if([b4_required_version_if([302], [],
+                                      [m4_define([b4_stack_file], [stack.hh])])])
+
+
+# b4_stack_define
+# ---------------
+m4_define([b4_stack_define],
+[[    /// A stack with random access from its top.
+    template <typename T, typename S = std::vector<T> >
+    class stack
+    {
+    public:
+      // Hide our reversed order.
+      typedef typename S::reverse_iterator iterator;
+      typedef typename S::const_reverse_iterator const_iterator;
+      typedef typename S::size_type size_type;
+      typedef typename std::ptrdiff_t index_type;
+
+      stack (size_type n = 200)
+        : seq_ (n)
+      {}
+
+      /// Random access.
+      ///
+      /// Index 0 returns the topmost element.
+      const T&
+      operator[] (index_type i) const
+      {
+        return seq_[size_type (size () - 1 - i)];
+      }
+
+      /// Random access.
+      ///
+      /// Index 0 returns the topmost element.
+      T&
+      operator[] (index_type i)
+      {
+        return seq_[size_type (size () - 1 - i)];
+      }
+
+      /// Steal the contents of \a t.
+      ///
+      /// Close to move-semantics.
+      void
+      push (YY_MOVE_REF (T) t)
+      {
+        seq_.push_back (T ());
+        operator[] (0).move (t);
+      }
+
+      /// Pop elements from the stack.
+      void
+      pop (std::ptrdiff_t n = 1) YY_NOEXCEPT
+      {
+        for (; 0 < n; --n)
+          seq_.pop_back ();
+      }
+
+      /// Pop all elements from the stack.
+      void
+      clear () YY_NOEXCEPT
+      {
+        seq_.clear ();
+      }
+
+      /// Number of elements on the stack.
+      index_type
+      size () const YY_NOEXCEPT
+      {
+        return index_type (seq_.size ());
+      }
+
+      std::ptrdiff_t
+      ssize () const YY_NOEXCEPT
+      {
+        return std::ptrdiff_t (size ());
+      }
+
+      /// Iterator on top of the stack (going downwards).
+      const_iterator
+      begin () const YY_NOEXCEPT
+      {
+        return seq_.rbegin ();
+      }
+
+      /// Bottom of the stack.
+      const_iterator
+      end () const YY_NOEXCEPT
+      {
+        return seq_.rend ();
+      }
+
+      /// Present a slice of the top of a stack.
+      class slice
+      {
+      public:
+        slice (const stack& stack, index_type range)
+          : stack_ (stack)
+          , range_ (range)
+        {}
+
+        const T&
+        operator[] (index_type i) const
+        {
+          return stack_[range_ - i];
+        }
+
+      private:
+        const stack& stack_;
+        index_type range_;
+      };
+
+    private:
+      stack (const stack&);
+      stack& operator= (const stack&);
+      /// The wrapped container.
+      S seq_;
+    };
+]])
+
+m4_ifdef([b4_stack_file],
+[b4_output_begin([b4_dir_prefix], [b4_stack_file])[
+]b4_generated_by[
+// Starting with Bison 3.2, this file is useless: the structure it
+// used to define is now defined with the parser itself.
+//
+// To get rid of this file:
+// 1. add '%require "3.2"' (or newer) to your grammar file
+// 2. remove references to this file from your build system.
+]b4_output_end[
+]])
diff --git a/data/skeletons/variant.hh b/data/skeletons/variant.hh
new file mode 100644
index 0000000..be4a3ce
--- /dev/null
+++ b/data/skeletons/variant.hh
@@ -0,0 +1,453 @@
+# C++ skeleton for Bison
+
+# Copyright (C) 2002-2015, 2018-2019 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/>.
+
+
+## --------- ##
+## variant.  ##
+## --------- ##
+
+# b4_symbol_variant(YYTYPE, YYVAL, ACTION, [ARGS])
+# ------------------------------------------------
+# Run some ACTION ("build", or "destroy") on YYVAL of symbol type
+# YYTYPE.
+m4_define([b4_symbol_variant],
+[m4_pushdef([b4_dollar_dollar],
+            [$2.$3< $][3 > (m4_shift3($@))])dnl
+switch ($1)
+    {
+b4_type_foreach([_b4_type_action])[]dnl
+      default:
+        break;
+    }
+m4_popdef([b4_dollar_dollar])dnl
+])
+
+
+# _b4_char_sizeof_counter
+# -----------------------
+# A counter used by _b4_char_sizeof_dummy to create fresh symbols.
+m4_define([_b4_char_sizeof_counter],
+[0])
+
+# _b4_char_sizeof_dummy
+# ---------------------
+# At each call return a new C++ identifier.
+m4_define([_b4_char_sizeof_dummy],
+[m4_define([_b4_char_sizeof_counter], m4_incr(_b4_char_sizeof_counter))dnl
+dummy[]_b4_char_sizeof_counter])
+
+
+# b4_char_sizeof(SYMBOL-NUMS)
+# ---------------------------
+# To be mapped on the list of type names to produce:
+#
+#    char dummy1[sizeof (type_name_1)];
+#    char dummy2[sizeof (type_name_2)];
+#
+# for defined type names.
+m4_define([b4_char_sizeof],
+[b4_symbol_if([$1], [has_type],
+[
+m4_map([      b4_symbol_tag_comment], [$@])dnl
+      char _b4_char_sizeof_dummy@{sizeof (b4_symbol([$1], [type]))@};
+])])
+
+
+# b4_variant_includes
+# -------------------
+# The needed includes for variants support.
+m4_define([b4_variant_includes],
+[b4_parse_assert_if([[#include <typeinfo>]])[
+#ifndef YY_ASSERT
+# include <cassert>
+# define YY_ASSERT assert
+#endif
+]])
+
+
+
+## -------------------------- ##
+## Adjustments for variants.  ##
+## -------------------------- ##
+
+
+# b4_value_type_declare
+# ---------------------
+# Define semantic_type.
+m4_define([b4_value_type_declare],
+[[  /// A buffer to store and retrieve objects.
+  ///
+  /// Sort of a variant, but does not keep track of the nature
+  /// of the stored data, since that knowledge is available
+  /// via the current parser state.
+  class semantic_type
+  {
+  public:
+    /// Type of *this.
+    typedef semantic_type self_type;
+
+    /// Empty construction.
+    semantic_type () YY_NOEXCEPT
+      : yybuffer_ ()]b4_parse_assert_if([
+      , yytypeid_ (YY_NULLPTR)])[
+    {}
+
+    /// Construct and fill.
+    template <typename T>
+    semantic_type (YY_RVREF (T) t)]b4_parse_assert_if([
+      : yytypeid_ (&typeid (T))])[
+    {
+      YY_ASSERT (sizeof (T) <= size);
+      new (yyas_<T> ()) T (YY_MOVE (t));
+    }
+
+    /// Destruction, allowed only if empty.
+    ~semantic_type () YY_NOEXCEPT
+    {]b4_parse_assert_if([
+      YY_ASSERT (!yytypeid_);
+    ])[}
+
+# if 201103L <= YY_CPLUSPLUS
+    /// Instantiate a \a T in here from \a t.
+    template <typename T, typename... U>
+    T&
+    emplace (U&&... u)
+    {]b4_parse_assert_if([
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
+      yytypeid_ = & typeid (T);])[
+      return *new (yyas_<T> ()) T (std::forward <U>(u)...);
+    }
+# else
+    /// Instantiate an empty \a T in here.
+    template <typename T>
+    T&
+    emplace ()
+    {]b4_parse_assert_if([
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
+      yytypeid_ = & typeid (T);])[
+      return *new (yyas_<T> ()) T ();
+    }
+
+    /// Instantiate a \a T in here from \a t.
+    template <typename T>
+    T&
+    emplace (const T& t)
+    {]b4_parse_assert_if([
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
+      yytypeid_ = & typeid (T);])[
+      return *new (yyas_<T> ()) T (t);
+    }
+# endif
+
+    /// Instantiate an empty \a T in here.
+    /// Obsolete, use emplace.
+    template <typename T>
+    T&
+    build ()
+    {
+      return emplace<T> ();
+    }
+
+    /// Instantiate a \a T in here from \a t.
+    /// Obsolete, use emplace.
+    template <typename T>
+    T&
+    build (const T& t)
+    {
+      return emplace<T> (t);
+    }
+
+    /// Accessor to a built \a T.
+    template <typename T>
+    T&
+    as () YY_NOEXCEPT
+    {]b4_parse_assert_if([
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == typeid (T));
+      YY_ASSERT (sizeof (T) <= size);])[
+      return *yyas_<T> ();
+    }
+
+    /// Const accessor to a built \a T (for %printer).
+    template <typename T>
+    const T&
+    as () const YY_NOEXCEPT
+    {]b4_parse_assert_if([
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == typeid (T));
+      YY_ASSERT (sizeof (T) <= size);])[
+      return *yyas_<T> ();
+    }
+
+    /// Swap the content with \a that, of same type.
+    ///
+    /// Both variants must be built beforehand, because swapping the actual
+    /// data requires reading it (with as()), and this is not possible on
+    /// unconstructed variants: it would require some dynamic testing, which
+    /// should not be the variant's responsibility.
+    /// Swapping between built and (possibly) non-built is done with
+    /// self_type::move ().
+    template <typename T>
+    void
+    swap (self_type& that) YY_NOEXCEPT
+    {]b4_parse_assert_if([
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == *that.yytypeid_);])[
+      std::swap (as<T> (), that.as<T> ());
+    }
+
+    /// Move the content of \a that to this.
+    ///
+    /// Destroys \a that.
+    template <typename T>
+    void
+    move (self_type& that)
+    {
+# if 201103L <= YY_CPLUSPLUS
+      emplace<T> (std::move (that.as<T> ()));
+# else
+      emplace<T> ();
+      swap<T> (that);
+# endif
+      that.destroy<T> ();
+    }
+
+# if 201103L <= YY_CPLUSPLUS
+    /// Move the content of \a that to this.
+    template <typename T>
+    void
+    move (self_type&& that)
+    {
+      emplace<T> (std::move (that.as<T> ()));
+      that.destroy<T> ();
+    }
+#endif
+
+    /// Copy the content of \a that to this.
+    template <typename T>
+    void
+    copy (const self_type& that)
+    {
+      emplace<T> (that.as<T> ());
+    }
+
+    /// Destroy the stored \a T.
+    template <typename T>
+    void
+    destroy ()
+    {
+      as<T> ().~T ();]b4_parse_assert_if([
+      yytypeid_ = YY_NULLPTR;])[
+    }
+
+  private:
+    /// Prohibit blind copies.
+    self_type& operator= (const self_type&);
+    semantic_type (const self_type&);
+
+    /// Accessor to raw memory as \a T.
+    template <typename T>
+    T*
+    yyas_ () YY_NOEXCEPT
+    {
+      void *yyp = yybuffer_.yyraw;
+      return static_cast<T*> (yyp);
+     }
+
+    /// Const accessor to raw memory as \a T.
+    template <typename T>
+    const T*
+    yyas_ () const YY_NOEXCEPT
+    {
+      const void *yyp = yybuffer_.yyraw;
+      return static_cast<const T*> (yyp);
+     }
+
+    /// An auxiliary type to compute the largest semantic type.
+    union union_type
+    {]b4_type_foreach([b4_char_sizeof])[    };
+
+    /// The size of the largest semantic type.
+    enum { size = sizeof (union_type) };
+
+    /// A buffer to store semantic values.
+    union
+    {
+      /// Strongest alignment constraints.
+      long double yyalign_me;
+      /// A buffer large enough to store any of the semantic values.
+      char yyraw[size];
+    } yybuffer_;]b4_parse_assert_if([
+
+    /// Whether the content is built: if defined, the name of the stored type.
+    const std::type_info *yytypeid_;])[
+  };
+]])
+
+
+# How the semantic value is extracted when using variants.
+
+# b4_symbol_value(VAL, SYMBOL-NUM, [TYPE])
+# ----------------------------------------
+# See README.
+m4_define([b4_symbol_value],
+[m4_ifval([$3],
+          [$1.as< $3 > ()],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [$1.as < b4_symbol([$2], [type]) > ()],
+                                  [$1])],
+                    [$1])])])
+
+# b4_symbol_value_template(VAL, SYMBOL-NUM, [TYPE])
+# -------------------------------------------------
+# Same as b4_symbol_value, but used in a template method.
+m4_define([b4_symbol_value_template],
+[m4_ifval([$3],
+          [$1.template as< $3 > ()],
+          [m4_ifval([$2],
+                    [b4_symbol_if([$2], [has_type],
+                                  [$1.template as < b4_symbol([$2], [type]) > ()],
+                                  [$1])],
+                    [$1])])])
+
+
+
+## ------------- ##
+## make_SYMBOL.  ##
+## ------------- ##
+
+
+# _b4_includes_tokens(SYMBOL-NUM...)
+# ----------------------------------
+# Expands to non-empty iff one of the SYMBOL-NUM denotes
+# a token.
+m4_define([_b4_is_token],
+          [b4_symbol_if([$1], [is_token], [1])])
+m4_define([_b4_includes_tokens],
+          [m4_map([_b4_is_token], [$@])])
+
+
+# _b4_token_maker_define(SYMBOL-NUM)
+# ----------------------------------
+# Declare make_SYMBOL for SYMBOL-NUM.  Use at class-level.
+m4_define([_b4_token_maker_define],
+[b4_token_visible_if([$1],
+[#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_[]_b4_symbol([$1], [id]) (b4_join(
+                 b4_symbol_if([$1], [has_type],
+                 [b4_symbol([$1], [type]) v]),
+                 b4_locations_if([location_type l])))
+      {
+        return symbol_type (b4_join([token::b4_symbol([$1], [id])],
+                                    b4_symbol_if([$1], [has_type], [std::move (v)]),
+                                    b4_locations_if([std::move (l)])));
+      }
+#else
+      static
+      symbol_type
+      make_[]_b4_symbol([$1], [id]) (b4_join(
+                 b4_symbol_if([$1], [has_type],
+                 [const b4_symbol([$1], [type])& v]),
+                 b4_locations_if([const location_type& l])))
+      {
+        return symbol_type (b4_join([token::b4_symbol([$1], [id])],
+                                    b4_symbol_if([$1], [has_type], [v]),
+                                    b4_locations_if([l])));
+      }
+#endif
+])])
+
+
+m4_define([_b4_type_clause],
+[b4_symbol_if([$1], [is_token],
+              [b4_symbol_if([$1], [has_id],
+                            [tok == token::b4_symbol([$1], [id])],
+                            [tok == b4_symbol([$1], [user_number])])])])
+
+
+# _b4_token_constructor_define(SYMBOL-NUM...)
+# -------------------------------------------
+# Define a unique make_symbol for all the SYMBOL-NUM (they
+# have the same type).  Use at class-level.
+m4_define([_b4_token_constructor_define],
+[m4_ifval(_b4_includes_tokens($@),
+[[#if 201103L <= YY_CPLUSPLUS
+      symbol_type (]b4_join(
+          [int tok],
+          b4_symbol_if([$1], [has_type],
+                       [b4_symbol([$1], [type]) v]),
+          b4_locations_if([location_type l]))[)
+        : super_type(]b4_join([token_type (tok)],
+                              b4_symbol_if([$1], [has_type], [std::move (v)]),
+                              b4_locations_if([std::move (l)]))[)
+      {
+        YY_ASSERT (]m4_join([ || ], m4_map_sep([_b4_type_clause], [, ], [$@]))[);
+      }
+#else
+      symbol_type (]b4_join(
+          [int tok],
+          b4_symbol_if([$1], [has_type],
+                       [const b4_symbol([$1], [type])& v]),
+          b4_locations_if([const location_type& l]))[)
+        : super_type(]b4_join([token_type (tok)],
+                              b4_symbol_if([$1], [has_type], [v]),
+                              b4_locations_if([l]))[)
+      {
+        YY_ASSERT (]m4_join([ || ], m4_map_sep([_b4_type_clause], [, ], [$@]))[);
+      }
+#endif
+]])])
+
+
+# b4_basic_symbol_constructor_define(SYMBOL-NUM)
+# ----------------------------------------------
+# Generate a constructor for basic_symbol from given type.
+m4_define([b4_basic_symbol_constructor_define],
+[[#if 201103L <= YY_CPLUSPLUS
+      basic_symbol (]b4_join(
+          [typename Base::kind_type t],
+          b4_symbol_if([$1], [has_type], [b4_symbol([$1], [type])&& v]),
+          b4_locations_if([location_type&& l]))[)
+        : Base (t)]b4_symbol_if([$1], [has_type], [
+        , value (std::move (v))])[]b4_locations_if([
+        , location (std::move (l))])[
+      {}
+#else
+      basic_symbol (]b4_join(
+          [typename Base::kind_type t],
+          b4_symbol_if([$1], [has_type], [const b4_symbol([$1], [type])& v]),
+          b4_locations_if([const location_type& l]))[)
+        : Base (t)]b4_symbol_if([$1], [has_type], [
+        , value (v)])[]b4_locations_if([
+        , location (l)])[
+      {}
+#endif
+]])
+
+
+# b4_token_constructor_define
+# ---------------------------
+# Define the overloaded versions of make_symbol for all the value types.
+m4_define([b4_token_constructor_define],
+[    // Implementation of make_symbol for each symbol type.
+b4_symbol_foreach([_b4_token_maker_define])])
diff --git a/data/yacc.c b/data/skeletons/yacc.c
similarity index 67%
rename from data/yacc.c
rename to data/skeletons/yacc.c
index 0f881d8..2830c1d 100644
--- a/data/yacc.c
+++ b/data/skeletons/yacc.c
@@ -1,9 +1,11 @@
-                                                             -*- C -*-
-
+#                                                            -*- C -*-
 # Yacc compatible skeleton for Bison
 
-# Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation,
-# Inc.
+# Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software
+# Foundation, Inc.
+
+m4_pushdef([b4_copyright_years],
+           [1984, 1989-1990, 2000-2015, 2018-2019])
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -18,51 +20,11 @@
 # You should have received a copy of the GNU General Public License
 # 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]])])
+m4_include(b4_skeletonsdir/[c.m4])
 
-# 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])
-
-## ---------------- ##
-## Default values.  ##
-## ---------------- ##
-
-# Stack parameters.
-m4_define_default([b4_stack_depth_max], [10000])
-m4_define_default([b4_stack_depth_init],  [200])
-
-
-## ------------------------ ##
-## Pure/impure interfaces.  ##
-## ------------------------ ##
+## ---------- ##
+## api.pure.  ##
+## ---------- ##
 
 b4_percent_define_default([[api.pure]], [[false]])
 b4_percent_define_check_values([[[[api.pure]],
@@ -82,6 +44,51 @@
          [2], [$1])])
          [m4_fatal([invalid api.pure value: ]$1)])])
 
+## --------------- ##
+## 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]])])])
+
+## ----------- ##
+## parse.lac.  ##
+## ----------- ##
+
+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]])])
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+# Stack parameters.
+m4_define_default([b4_stack_depth_max], [10000])
+m4_define_default([b4_stack_depth_init],  [200])
+
+
 # b4_yyerror_arg_loc_if(ARG)
 # --------------------------
 # Expand ARG iff yyerror is to be given a location as argument.
@@ -95,60 +102,27 @@
 # Arguments passed to yyerror: user args plus yylloc.
 m4_define([b4_yyerror_args],
 [b4_yyerror_arg_loc_if([&yylloc, ])dnl
-m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
+m4_ifset([b4_parse_param], [b4_args(b4_parse_param), ])])
 
 
-# b4_lex_param
-# ------------
-# Accumulate in b4_lex_param all the yylex arguments.
-# b4_lex_param arrives quoted twice, but we want to keep only one level.
-m4_define([b4_lex_param],
-m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
-b4_locations_if([, [[YYLTYPE *], [&yylloc]]])m4_ifdef([b4_lex_param], [, ])])dnl
-m4_ifdef([b4_lex_param], b4_lex_param)))
-
-
-## ------------ ##
-## Data Types.  ##
-## ------------ ##
-
-# b4_int_type(MIN, MAX)
-# ---------------------
-# Return the smallest int type able to handle numbers ranging from
-# MIN to MAX (included).  Overwrite the version from c.m4, which
-# uses only C89 types, so that the user can override the shorter
-# types, and so that pre-C89 compilers are handled correctly.
-m4_define([b4_int_type],
-[m4_if(b4_ints_in($@,      [0],   [255]), [1], [yytype_uint8],
-       b4_ints_in($@,   [-128],   [127]), [1], [yytype_int8],
-
-       b4_ints_in($@,      [0], [65535]), [1], [yytype_uint16],
-       b4_ints_in($@, [-32768], [32767]), [1], [yytype_int16],
-
-       m4_eval([0 <= $1]),                [1], [unsigned int],
-
-					       [int])])
-
 
 ## ----------------- ##
 ## Semantic Values.  ##
 ## ----------------- ##
 
 
-# b4_lhs_value([TYPE])
-# --------------------
-# Expansion of $<TYPE>$.
+# b4_lhs_value(SYMBOL-NUM, [TYPE])
+# --------------------------------
+# See README.
 m4_define([b4_lhs_value],
-[(yyval[]m4_ifval([$1], [.$1]))])
+[b4_symbol_value(yyval, [$1], [$2])])
 
 
-# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
-# --------------------------------------
-# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
-# symbols on RHS.
+# b4_rhs_value(RULE-LENGTH, POS, [SYMBOL-NUM], [TYPE])
+# ----------------------------------------------------
+# See README.
 m4_define([b4_rhs_value],
-[(yyvsp@{($2) - ($1)@}m4_ifval([$3], [.$3]))])
-
+[b4_symbol_value([yyvsp@{b4_subtract([$2], [$1])@}], [$3], [$4])])
 
 
 ## ----------- ##
@@ -162,12 +136,12 @@
 [(yyloc)])
 
 
-# b4_rhs_location(RULE-LENGTH, NUM)
+# b4_rhs_location(RULE-LENGTH, POS)
 # ---------------------------------
-# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
+# Expansion of @POS, where the current rule has RULE-LENGTH symbols
 # on RHS.
 m4_define([b4_rhs_location],
-[(yylsp@{($2) - ($1)@})])
+[(yylsp@{b4_subtract([$2], [$1])@})])
 
 
 ## -------------- ##
@@ -183,36 +157,19 @@
 int yychar;
 
 ]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
+/* The semantic value of the lookahead symbol.  */
 /* 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([[
+YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
+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([], [[
-
+static YYLTYPE yyloc_default]b4_yyloc_default[;
+YYLTYPE yylloc = yyloc_default;]])],
+[[/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;]b4_locations_if([[
+/* Location data for the lookahead symbol.  */
+YYLTYPE yylloc]b4_yyloc_default[;]])[
 /* Number of syntax errors so far.  */
 int yynerrs;]])])
 
@@ -225,22 +182,22 @@
     /* Number of syntax errors so far.  */
     int yynerrs;
 ]])[
-    int yystate;
+    yy_state_fast_t 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.]])[
+       '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;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
@@ -255,18 +212,18 @@
     /* The locations where the error started and ended.  */
     YYLTYPE yyerror_range[3];]])[
 
-    YYSIZE_T yystacksize;]b4_lac_if([[
+    YYPTRDIFF_T yystacksize;]b4_lac_if([[
 
-    yytype_int16 yyesa@{]b4_percent_define_get([[parse.lac.es-capacity-initial]])[@};
-    yytype_int16 *yyes;
-    YYSIZE_T yyes_capacity;]])])
+    yy_state_t yyesa@{]b4_percent_define_get([[parse.lac.es-capacity-initial]])[@};
+    yy_state_t *yyes;
+    YYPTRDIFF_T yyes_capacity;]])])
 
 
-# b4_declare_yyparse_push_
+# _b4_declare_yyparse_push
 # ------------------------
 # Declaration of yyparse (and dependencies) when using the push parser
 # (including in pull mode).
-m4_define([b4_declare_yyparse_push_],
+m4_define([_b4_declare_yyparse_push],
 [[#ifndef YYPUSH_MORE_DEFINED
 # define YYPUSH_MORE_DEFINED
 enum { YYPUSH_MORE = 4 };
@@ -274,40 +231,34 @@
 
 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_pull_if([b4_function_declare([b4_prefix[parse]], [[int]], b4_parse_param)
+])b4_function_declare([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_pull_if([b4_function_declare([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 *]],
+b4_function_declare([b4_prefix[pstate_new]], [b4_prefix[pstate *]],
                     [[[void]], []])
-b4_c_function_decl([b4_prefix[pstate_delete]], [[void]],
+b4_function_declare([b4_prefix[pstate_delete]], [[void]],
                    [[b4_prefix[pstate *ps]], [[ps]]])dnl
 ])
 
-# b4_declare_yyparse_
+# _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
-])
+m4_define([_b4_declare_yyparse],
+[b4_function_declare(b4_prefix[parse], [int], b4_parse_param)])
 
 
 # b4_declare_yyparse
 # ------------------
 m4_define([b4_declare_yyparse],
-[b4_push_if([b4_declare_yyparse_push_],
-            [b4_declare_yyparse_])[]dnl
+[b4_push_if([_b4_declare_yyparse_push],
+            [_b4_declare_yyparse])[]dnl
 ])
 
 
@@ -316,25 +267,50 @@
 # 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_cpp_guard_open([b4_spec_header_file])[
 ]b4_declare_yydebug[
 ]b4_percent_code_get([[requires]])[
-]b4_token_enums_defines(b4_tokens)[
+]b4_token_enums_defines[
 ]b4_declare_yylstype[
 ]b4_declare_yyparse[
 ]b4_percent_code_get([[provides]])[
-]b4_cpp_guard_close([b4_spec_defines_file])[]dnl
+]b4_cpp_guard_close([b4_spec_header_file])[]dnl
 ])
 
 
+# b4_header_include_if(IF-TRUE, IF-FALSE)
+# ---------------------------------------
+# Run IF-TRUE if we generate an output file and api.header.include
+# is defined.
+m4_define([b4_header_include_if],
+[m4_ifval(m4_quote(b4_spec_header_file),
+          [b4_percent_define_ifdef([[api.header.include]],
+                                   [$1],
+                                   [$2])],
+          [$2])])
+
+m4_if(b4_spec_header_file, [[y.tab.h]],
+      [b4_percent_define_default([[api.header.include]],
+                                 [["@basename(]b4_spec_header_file[@)"]])])
+
+
+
+
 ## -------------- ##
 ## Output files.  ##
 ## -------------- ##
 
-b4_output_begin([b4_parser_file_name])
-b4_copyright([Bison implementation for Yacc-like parsers in C],
-             [1984, 1989-1990, 2000-2012])[
 
+b4_defines_if([[
+]b4_output_begin([b4_spec_header_file])[
+]b4_copyright([Bison interface for Yacc-like parsers in C])[
+]b4_disclaimer[
+]b4_shared_declarations[
+]b4_output_end[
+]])# b4_defines_if
+
+b4_output_begin([b4_parser_file_name])[
+]b4_copyright([Bison implementation for Yacc-like parsers in C])[
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
@@ -345,8 +321,9 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-]b4_identification
-b4_percent_code_get([[top]])[]dnl
+]b4_disclaimer[
+]b4_identification[
+]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([[
@@ -361,15 +338,14 @@
 #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]])])[
+#define yynerrs         ]b4_prefix[nerrs]]b4_pure_if([], [[
+#define yylval          ]b4_prefix[lval
+#define yychar          ]b4_prefix[char]b4_locations_if([[
+#define yylloc          ]b4_prefix[lloc]])]))[
 
-/* Copy the first part of user declarations.  */
 ]b4_user_pre_prologue[
-
+]b4_cast_define[
 ]b4_null_define[
 
 /* Enabling verbose error messages.  */
@@ -377,47 +353,38 @@
 # undef YYERROR_VERBOSE
 # define YYERROR_VERBOSE 1
 #else
-# define YYERROR_VERBOSE ]b4_error_verbose_flag[
+# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
 #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[
+]b4_header_include_if([[#include ]b4_percent_define_get([[api.header.include]])],
+                      [m4_ifval(m4_quote(b4_spec_header_file),
+                                [/* Use api.header.include to #include this header
+   instead of duplicating it here.  */
+])b4_shared_declarations])[
 
-/* Copy the second part of user declarations.  */
-]b4_user_post_prologue
-b4_percent_code_get[]dnl
+]b4_user_post_prologue[
+]b4_percent_code_get[]dnl
 
 [#ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
+]b4_c99_int_type_define[
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif ]b4_c_modern[
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -425,15 +392,27 @@
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && ]b4_c_modern[
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+/* Stored state numbers (used for stacks). */
+typedef ]b4_int_type(0, m4_eval(b4_states_number - 1))[ yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -447,22 +426,16 @@
 # endif
 #endif
 
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
-#else
-# define YYUSE(E) /* empty */
-#endif
+]b4_attribute_define[
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
+]b4_parse_assert_if([[#ifdef NDEBUG
+# define YY_ASSERT(E) ((void) (0 && (E)))
 #else
-]b4_c_function_def([YYID], [static int], [[int yyi], [yyi]])[
-{
-  return yyi;
-}
+# include <assert.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_ASSERT(E) assert (E)
 #endif
+]],
+[[#define YY_ASSERT(E) ((void) (0 && (E)))]])[
 
 #if ]b4_lac_if([[1]], [[! defined yyoverflow || YYERROR_VERBOSE]])[
 
@@ -482,7 +455,7 @@
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && ]b4_c_modern[
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -494,8 +467,8 @@
 # endif]])])[
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -511,7 +484,7 @@
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
+             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -519,13 +492,13 @@
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && ]b4_c_modern[
+#   if ! defined malloc && ! defined EXIT_SUCCESS
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && ]b4_c_modern[
+#   if ! defined free && ! defined EXIT_SUCCESS
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -536,28 +509,29 @@
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (]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)))
+         || (]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_alloc;
+  yy_state_t 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)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 ]b4_locations_if(
 [# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
+             + YYSIZEOF (YYLTYPE)) \
       + 2 * YYSTACK_GAP_MAXIMUM)],
 [# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)])[
 
 # define YYCOPY_NEEDED 1
@@ -567,16 +541,16 @@
    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_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
+      }                                                                 \
+    while (0)
 
 #endif
 
@@ -586,16 +560,16 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (YYID (0))
+      while (0)
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -611,41 +585,30 @@
 #define YYNNTS  ]b4_nterms_number[
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  ]b4_rules_number[
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  ]b4_states_number[
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  ]b4_undef_token_number[
 #define YYMAXUTOK   ]b4_user_token_number_max[
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+]b4_api_token_raw_if(dnl
+[[#define YYTRANSLATE(YYX) (YYX)]],
+[[#define YYTRANSLATE(YYX)                                                \
+  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex.  */
 static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
 {
   ]b4_translate[
-};
+};]])[
 
 #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[] =
-{
-  ]b4_prhs[
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
-{
-  ]b4_rhs[
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const ]b4_int_type_for([b4_rline])[ yyrline[] =
-{
-  ]b4_rline[
-};
+]b4_integral_parser_table_define([rline], [b4_rline],
+     [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
 #endif
 
 #if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
@@ -658,142 +621,64 @@
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const ]b4_int_type_for([b4_toknum])[ yytoknum[] =
 {
   ]b4_toknum[
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const ]b4_int_type_for([b4_r1])[ yyr1[] =
-{
-  ]b4_r1[
-};
+#define YYPACT_NINF (]b4_pact_ninf[)
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const ]b4_int_type_for([b4_r2])[ yyr2[] =
-{
-  ]b4_r2[
-};
+#define yypact_value_is_default(Yyn) \
+  ]b4_table_value_equals([[pact]], [[Yyn]], [b4_pact_ninf], [YYPACT_NINF])[
 
-/* 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[] =
-{
-  ]b4_defact[
-};
+#define YYTABLE_NINF (]b4_table_ninf[)
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
-{
-  ]b4_defgoto[
-};
+#define yytable_value_is_error(Yyn) \
+  ]b4_table_value_equals([[table]], [[Yyn]], [b4_table_ninf], [YYTABLE_NINF])[
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF ]b4_pact_ninf[
-static const ]b4_int_type_for([b4_pact])[ yypact[] =
-{
-  ]b4_pact[
-};
+]b4_parser_tables_define[
 
-/* YYPGOTO[NTERM-NUM].  */
-static const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
-{
-  ]b4_pgoto[
-};
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
 
-/* 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.  */
-#define YYTABLE_NINF ]b4_table_ninf[
-static const ]b4_int_type_for([b4_table])[ yytable[] =
-{
-  ]b4_table[
-};
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
 
-#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[
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const ]b4_int_type_for([b4_stos])[ yystos[] =
-{
-  ]b4_stos[
-};
-
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
-
-/* 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.  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)                                        \
-    {                                                           \
-      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))
+#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 (0)
 
 /* Error token number */
-#define YYTERROR	1
-#define YYERRCODE	256
+#define YYTERROR        1
+#define YYERRCODE       256
 
 ]b4_locations_if([[
 ]b4_yylloc_default_define[
 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
 ]])[
-]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
-# define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
-#endif
 
 /* Enable debugging if requested.  */
 #if ]b4_api_PREFIX[DEBUG
@@ -803,33 +688,35 @@
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
-# 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");						  \
-    }									  \
-} while (YYID (0))
+]b4_yy_location_print_define[
 
-]b4_yy_symbol_print_generate([b4_c_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");                                           \
+    }                                                                     \
+} while (0)
+
+]b4_yy_symbol_print_define[
 
 /*------------------------------------------------------------------.
 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-]b4_c_function_def([yy_stack_print], [static void],
-		   [[yytype_int16 *yybottom], [yybottom]],
-		   [[yytype_int16 *yytop],    [yytop]])[
+]b4_function_define([yy_stack_print], [static void],
+                   [[yy_state_t *yybottom], [yybottom]],
+                   [[yy_state_t *yytop],    [yytop]])[
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -840,45 +727,47 @@
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-]b4_c_function_def([yy_reduce_print], [static void],
-		   [[YYSTYPE *yyvsp], [yyvsp]],
+]b4_function_define([yy_reduce_print], [static void],
+                   [[yy_state_t *yyssp], [yyssp]],
+                   [[YYSTYPE *yyvsp], [yyvsp]],
     b4_locations_if([[[YYLTYPE *yylsp], [yylsp]],
-		   ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [,
-		   b4_parse_param]))[
+                   ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [,
+                   b4_parse_param]))[
 {
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       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[);
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &]b4_rhs_value(yynrhs, yyi + 1)[
+                       ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
+                       b4_user_args[);
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, ]b4_locations_if([yylsp, ])[Rule]b4_user_args[); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, ]b4_locations_if([yylsp, ])[Rule]b4_user_args[); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -892,7 +781,7 @@
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH ]b4_stack_depth_init[
 #endif
 
@@ -918,22 +807,22 @@
    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,
+yy_lac_stack_realloc (YYPTRDIFF_T *yycapacity, YYPTRDIFF_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)
+                      yy_state_t **yybottom,
+                      yy_state_t *yybottom_no_free,
+                      yy_state_t **yytop, yy_state_t *yytop_empty)
 {
-  YYSIZE_T yysize_old =
+  YYPTRDIFF_T yysize_old =
     *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
-  YYSIZE_T yysize_new = yysize_old + yyadd;
+  YYPTRDIFF_T yysize_new = yysize_old + yyadd;
   if (*yycapacity < yysize_new)
     {
-      YYSIZE_T yyalloc = 2 * yysize_new;
-      yytype_int16 *yybottom_new;
+      YYPTRDIFF_T yyalloc = 2 * yysize_new;
+      yy_state_t *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.  */
@@ -946,7 +835,9 @@
       if (YYMAXDEPTH < yyalloc)
         yyalloc = YYMAXDEPTH;
       yybottom_new =
-        (yytype_int16*) YYSTACK_ALLOC (yyalloc * sizeof *yybottom_new);
+        YY_CAST (yy_state_t *,
+                 YYSTACK_ALLOC (YY_CAST (YYSIZE_T,
+                                         yyalloc * YYSIZEOF (*yybottom_new))));
       if (!yybottom_new)
         {
           YYDPRINTF ((stderr, "%srealloc failed%s", yydebug_prefix,
@@ -963,8 +854,10 @@
       *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));]])[
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "%srealloc to %ld%s", yydebug_prefix,
+                  YY_CAST (long, yyalloc), yydebug_suffix));
+      YY_IGNORE_USELESS_CAST_END]])[
     }
   return 0;
 }
@@ -1012,7 +905,7 @@
           goto yyerrlab;                                         \
       }                                                          \
     }                                                            \
-} while (YYID (0))
+} while (0)
 
 /* Discard any previous initial lookahead context because of Event,
    which may be a lookahead change or an invalidation of the currently
@@ -1035,7 +928,7 @@
                    Event "\n");                                          \
       yy_lac_established = 0;                                            \
     }                                                                    \
-} while (YYID (0))
+} while (0)
 #else
 # define YY_LAC_DISCARD(Event) yy_lac_established = 0
 #endif
@@ -1049,11 +942,11 @@
    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)
+yy_lac (yy_state_t *yyesa, yy_state_t **yyes,
+        YYPTRDIFF_T *yyes_capacity, yy_state_t *yyssp, int yytoken)
 {
-  yytype_int16 *yyes_prev = yyssp;
-  yytype_int16 *yyesp = yyes_prev;
+  yy_state_t *yyes_prev = yyssp;
+  yy_state_t *yyesp = yyes_prev;
   YYDPRINTF ((stderr, "LAC: checking lookahead %s:", yytname[yytoken]));
   if (yytoken == YYUNDEFTOK)
     {
@@ -1090,11 +983,11 @@
           yyrule = -yyrule;
         }
       {
-        YYSIZE_T yylen = yyr2[yyrule];
+        YYPTRDIFF_T yylen = yyr2[yyrule];
         YYDPRINTF ((stderr, " R%d", yyrule - 1));
         if (yyesp != yyes_prev)
           {
-            YYSIZE_T yysize = yyesp - *yyes + 1;
+            YYPTRDIFF_T yysize = yyesp - *yyes + 1;
             if (yylen < yysize)
               {
                 yyesp -= yylen;
@@ -1110,20 +1003,20 @@
           yyesp = yyes_prev -= yylen;
       }
       {
-        int yystate;
+        yy_state_fast_t 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];
+          const int yylhs = yyr1[yyrule] - YYNTOKENS;
+          const int yyi = yypgoto[yylhs] + *yyesp;
+          yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyesp
+                     ? yytable[yyi]
+                     : yydefgoto[yylhs]);
         }
         if (yyesp == yyes_prev)
           {
             yyesp = *yyes;
-            *yyesp = yystate;
+            YY_IGNORE_USELESS_CAST_BEGIN
+            *yyesp = YY_CAST (yy_state_t, yystate);
+            YY_IGNORE_USELESS_CAST_END
           }
         else
           {
@@ -1136,7 +1029,9 @@
                 YYDPRINTF ((stderr, "\n"));
                 return 2;
               }
-            *++yyesp = yystate;
+            YY_IGNORE_USELESS_CAST_BEGIN
+            *++yyesp = YY_CAST (yy_state_t, yystate);
+            YY_IGNORE_USELESS_CAST_END
           }
         YYDPRINTF ((stderr, " G%d", yystate));
       }
@@ -1148,13 +1043,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
+#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
 /* Return the length of YYSTR.  */
-]b4_c_function_def([yystrlen], [static YYSIZE_T],
+]b4_function_define([yystrlen], [static YYPTRDIFF_T],
    [[const char *yystr], [yystr]])[
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -1168,7 +1063,7 @@
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-]b4_c_function_def([yystpcpy], [static char *],
+]b4_function_define([yystpcpy], [static char *],
    [[char *yydest], [yydest]], [[const char *yysrc], [yysrc]])[
 {
   char *yyd = yydest;
@@ -1190,46 +1085,46 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       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.  */
-#ifdef __cplusplus
-	    [[fallthrough]];
-#endif
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            else
+              goto append;
 
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+          append:
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -1244,26 +1139,22 @@
    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)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                ]b4_lac_if([[yy_state_t *yyesa, yy_state_t **yyes,
+                YYPTRDIFF_T *yyes_capacity, ]])[yy_state_t *yyssp, int yytoken)
 {
-  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. */
+  const char *yyformat = YY_NULLPTR;
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* Actual size of YYARG. */
   int yycount = 0;
+  /* Cumulated lengths of YYARG.  */
+  YYPTRDIFF_T yysize = 0;
 
   /* 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
@@ -1293,19 +1184,14 @@
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[*yyssp];]b4_lac_if([[
+      int yyn = yypact[*yyssp];
+      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+      yysize = yysize0;]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([[
+        {]b4_lac_if([[
+          int yyx;
 
           for (yyx = 0; yyx < YYNTOKENS; ++yyx)
             if (yyx != YYTERROR && yyx != YYUNDEFTOK)
@@ -1318,6 +1204,14 @@
                   if (yy_lac_status == 1)
                     continue;
                 }]], [[
+          /* 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
@@ -1331,11 +1225,12 @@
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  YYPTRDIFF_T yysize1
+                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
                     return 2;
-                  yysize = yysize1;
                 }
               }
         }]b4_lac_if([[
@@ -1351,6 +1246,7 @@
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1361,10 +1257,13 @@
     }
 
   {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    /* Don't count the "%s"s in the final size, but reserve room for
+       the terminator.  */
+    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+      yysize = yysize1;
+    else
       return 2;
-    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -1390,15 +1289,15 @@
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
 }
 #endif /* YYERROR_VERBOSE */
 
-]b4_yydestruct_generate([b4_c_function_def])[
+]b4_yydestruct_define[
 
 ]b4_pure_if([], [
 
@@ -1413,22 +1312,19 @@
 
 static char yypstate_allocated = 0;]])b4_pull_if([
 
-b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[
+b4_function_define([[yyparse]], [[int]], b4_parse_param)[
 {
-  return yypull_parse (YY_NULL]m4_ifset([b4_parse_param],
-                                  [[, ]b4_c_args(b4_parse_param)])[);
+  return yypull_parse (YY_NULLPTR]m4_ifset([b4_parse_param],
+                                  [[, ]b4_args(b4_parse_param)])[);
 }
 
-]b4_c_function_def([[yypull_parse]], [[int]],
+]b4_function_define([[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([[
+{]b4_pure_if([b4_locations_if([[
   static YYLTYPE yyloc_default][]b4_yyloc_default[;
   YYLTYPE yylloc = yyloc_default;]])])[
+  yypstate *yyps_local;
   if (yyps)
     yyps_local = yyps;
   else
@@ -1442,10 +1338,12 @@
           return 2;
         }
     }
-  do {
-    yychar = YYLEX;
+  int yystatus;
+  do {]b4_pure_if([[
+    YYSTYPE yylval;
+    int ]])[yychar = ]b4_lex[;
     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)])[);
+      yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_args(b4_parse_param)])[);
   } while (yystatus == YYPUSH_MORE);
   if (!yyps)
     yypstate_delete (yyps_local);
@@ -1453,32 +1351,35 @@
 }]])[
 
 /* Initialize the parser data structure.  */
-]b4_c_function_def([[yypstate_new]], [[yypstate *]])[
+]b4_function_define([[yypstate_new]], [[yypstate *]])[
 {
   yypstate *yyps;]b4_pure_if([], [[
   if (yypstate_allocated)
-    return YY_NULL;]])[
-  yyps = (yypstate *) malloc (sizeof *yyps);
+    return YY_NULLPTR;]])[
+  yyps = YY_CAST (yypstate *, malloc (sizeof *yyps));
   if (!yyps)
-    return YY_NULL;
+    return YY_NULLPTR;
   yyps->yynew = 1;]b4_pure_if([], [[
   yypstate_allocated = 1;]])[
   return yyps;
 }
 
-]b4_c_function_def([[yypstate_delete]], [[void]],
+]b4_function_define([[yypstate_delete]], [[void]],
                    [[[yypstate *yyps]], [[yyps]]])[
 {
+  if (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);
+      /* 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;]])[
+      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]])[
@@ -1504,7 +1405,7 @@
 | yypush_parse.  |
 `---------------*/
 
-]b4_c_function_def([[yypush_parse]], [[int]],
+]b4_function_define([[yypush_parse]], [[int]],
   [[[yypstate *yyps]], [[yyps]]]b4_pure_if([,
   [[[int yypushed_char]], [[yypushed_char]]],
   [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
@@ -1516,12 +1417,7 @@
 | yyparse.  |
 `----------*/
 
-#ifdef 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_function_define([yyparse], [int], b4_parse_param)])[
 {]b4_pure_if([b4_declare_scanner_communication_variables
 ])b4_push_if([b4_pure_if([], [[
   int yypushed_char = yychar;
@@ -1544,7 +1440,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp -= (N)])[)
@@ -1565,7 +1461,7 @@
   yystacksize = YYINITDEPTH;]b4_lac_if([[
 
   yyes = yyesa;
-  yyes_capacity = sizeof yyesa / sizeof *yyes;
+  yyes_capacity = ]b4_percent_define_get([[parse.lac.es-capacity-initial]])[;
   if (YYMAXDEPTH < yyes_capacity)
     yyes_capacity = YYMAXDEPTH;]])[
 
@@ -1576,9 +1472,8 @@
   yynerrs = 0;
   yychar = YYEMPTY; /* Cause a token to be read.  */
 ]m4_ifdef([b4_initial_action], [
-b4_dollar_pushdef([m4_define([b4_dollar_dollar_used])yylval], [],
+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;
@@ -1587,95 +1482,104 @@
 ]])dnl
 [  goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   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;])[
+        /* Give user a chance to reallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;]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
-	   conditional around just the two extra args, but that might
-	   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),])[
-		    &yystacksize);
-]b4_locations_if([
-	yyls = yyls1;])[
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),]b4_locations_if([
+                    &yyls1, yysize * YYSIZEOF (*yylsp),])[
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;]b4_locations_if([
+        yyls = yyls1;])[
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	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);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        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);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + 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));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -1709,7 +1613,7 @@
         yylval = *yypushed_val;]b4_locations_if([[
       if (yypushed_loc)
         yylloc = *yypushed_loc;]])])], [[
-      yychar = YYLEX;]])[
+      yychar = ]b4_lex[;]])[
     }
 
   if (yychar <= YYEOF)
@@ -1749,16 +1653,15 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+  yystate = yyn;
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  *++yyvsp = yylval;
+  YY_IGNORE_MAYBE_UNINITIALIZED_END]b4_locations_if([
+  *++yylsp = yylloc;])[
 
   /* 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;
 
 
@@ -1773,14 +1676,14 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -1790,14 +1693,15 @@
   yyval = yyvsp[1-yylen];
 
 ]b4_locations_if(
-[[  /* Default location.  */
-  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);]])[
+[[  /* Default location. */
+  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+  yyerror_range[1] = yyloc;]])[
   YY_REDUCE_PRINT (yyn);]b4_lac_if([[
   {
     int yychar_backup = yychar;
     switch (yyn)
       {
-        ]b4_user_actions[
+]b4_user_actions[
         default: break;
       }
     if (yychar_backup != yychar)
@@ -1805,7 +1709,7 @@
   }]], [[
   switch (yyn)
     {
-      ]b4_user_actions[
+]b4_user_actions[
       default: break;
     }]])[
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1828,24 +1732,23 @@
   *++yyvsp = yyval;]b4_locations_if([
   *++yylsp = yyloc;])[
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -1873,7 +1776,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -1899,20 +1802,20 @@
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -1924,15 +1827,12 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-]b4_locations_if([[  yyerror_range[1] = yylsp[1-yylen];
-]])[  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -1945,29 +1845,29 @@
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+        {
+          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 (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 ]b4_locations_if([[      yyerror_range[1] = *yylsp;]])[
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
+                  yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -2001,6 +1901,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -2008,6 +1909,7 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if ]b4_lac_if([[1]], [[!defined yyoverflow || YYERROR_VERBOSE]])[
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -2018,6 +1920,10 @@
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -2027,14 +1933,14 @@
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
     }
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
+                  yystos[*yyssp], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -2045,24 +1951,16 @@
     YYSTACK_FREE (yyes);]])b4_push_if([[
   yyps->yynew = 1;
 
+
+/*-----------------------------------------.
+| yypushreturn -- ask for the next token.  |
+`-----------------------------------------*/
 yypushreturn:]])[
 #if YYERROR_VERBOSE
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
 ]b4_epilogue[]dnl
-b4_output_end()
-
-b4_defines_if(
-[b4_output_begin([b4_spec_defines_file])[
-]b4_copyright([Bison interface for Yacc-like parsers in C],
-              [1984, 1989-1990, 2000-2012])[
-
-]b4_shared_declarations[
-]b4_output_end()
-])
+b4_output_end
diff --git a/data/stack.hh b/data/stack.hh
deleted file mode 100644
index ab1049c..0000000
--- a/data/stack.hh
+++ /dev/null
@@ -1,121 +0,0 @@
-# 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
index 40575ef..5c1a358 100644
--- a/data/xslt/bison.xsl
+++ b/data/xslt/bison.xsl
@@ -3,7 +3,7 @@
 <!--
     bison.xsl - common templates for Bison XSLT.
 
-    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+    Copyright (C) 2007-2015, 2018-2019 Free Software Foundation, Inc.
 
     This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/data/xslt/xml2dot.xsl b/data/xslt/xml2dot.xsl
index dceb8e1..0a7419f 100644
--- a/data/xslt/xml2dot.xsl
+++ b/data/xslt/xml2dot.xsl
@@ -3,7 +3,7 @@
 <!--
     xml2dot.xsl - transform Bison XML Report into DOT.
 
-    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+    Copyright (C) 2007-2015, 2018-2019 Free Software Foundation, Inc.
 
     This file is part of Bison, the GNU Compiler Compiler.
 
@@ -83,7 +83,7 @@
   <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. -->
+         referred to directly in XPath expressions. -->
     <xsl:variable name="rul">
       <xsl:value-of select="@rule"/>
     </xsl:variable>
@@ -95,7 +95,7 @@
     <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
+          <!-- The acceptation state is referred to as 'accept' in the XML, but
                just as '0' in the DOT. -->
           <xsl:when test="@rule='accept'">
             <xsl:text>0</xsl:text>
@@ -201,6 +201,8 @@
   <xsl:if test="$point = 0">
     <xsl:text> .</xsl:text>
   </xsl:if>
+
+  <!-- RHS -->
   <xsl:for-each select="rhs/symbol|rhs/empty">
     <xsl:apply-templates select="."/>
     <xsl:if test="$point = position()">
@@ -214,7 +216,9 @@
   <xsl:value-of select="."/>
 </xsl:template>
 
-<xsl:template match="empty"/>
+<xsl:template match="empty">
+  <xsl:text> %empty</xsl:text>
+</xsl:template>
 
 <xsl:template match="lookaheads">
   <xsl:text>  [</xsl:text>
@@ -279,20 +283,20 @@
     <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: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:value-of select="@symbol"/>
       </xsl:if>
     </xsl:with-param>
   </xsl:call-template>
diff --git a/data/xslt/xml2text.xsl b/data/xslt/xml2text.xsl
index 8b3f5ae..72b56e7 100644
--- a/data/xslt/xml2text.xsl
+++ b/data/xslt/xml2text.xsl
@@ -3,7 +3,7 @@
 <!--
     xml2text.xsl - transform Bison XML Report into plain text.
 
-    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+    Copyright (C) 2007-2015, 2018-2019 Free Software Foundation, Inc.
 
     This file is part of Bison, the GNU Compiler Compiler.
 
@@ -253,9 +253,9 @@
     <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: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>
@@ -266,9 +266,9 @@
     <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:call-template name="max-width-symbol">
+          <xsl:with-param name="node" select="error"/>
+        </xsl:call-template>
       </xsl:with-param>
     </xsl:apply-templates>
   </xsl:if>
@@ -279,9 +279,9 @@
     <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:call-template name="max-width-symbol">
+          <xsl:with-param name="node" select="reduction"/>
+        </xsl:call-template>
       </xsl:with-param>
     </xsl:apply-templates>
   </xsl:if>
@@ -290,7 +290,7 @@
 <xsl:template match="item">
   <xsl:param name="pad"/>
   <xsl:param name="prev-rule-number"
-	     select="preceding-sibling::item[1]/@rule-number"/>
+             select="preceding-sibling::item[1]/@rule-number"/>
   <xsl:apply-templates
     select="key('bison:ruleByNumber', current()/@rule-number)"
   >
@@ -329,14 +329,14 @@
   <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: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:with-param name="str" select="'|'"/>
+        <xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/>
       </xsl:call-template>
     </xsl:when>
     <xsl:otherwise>
@@ -350,12 +350,7 @@
     <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:apply-templates select="."/>
     <xsl:if test="position() = last() and position() = $point">
       <xsl:text> .</xsl:text>
     </xsl:if>
@@ -373,7 +368,7 @@
 </xsl:template>
 
 <xsl:template match="empty">
-  <xsl:text> /* empty */</xsl:text>
+  <xsl:text> %empty</xsl:text>
 </xsl:template>
 
 <xsl:template match="lookaheads">
@@ -442,7 +437,7 @@
       <xsl:value-of select="@rule"/>
       <xsl:text> (</xsl:text>
       <xsl:value-of
-	  select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"/>
+          select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"/>
       <xsl:text>)</xsl:text>
     </xsl:otherwise>
   </xsl:choose>
@@ -479,9 +474,9 @@
   <xsl:variable name="longest">
     <xsl:for-each select="$node">
       <xsl:sort data-type="number" select="string-length(@symbol)"
-		order="descending"/>
+                order="descending"/>
       <xsl:if test="position() = 1">
-	<xsl:value-of select="string-length(@symbol)"/>
+        <xsl:value-of select="string-length(@symbol)"/>
       </xsl:if>
     </xsl:for-each>
   </xsl:variable>
@@ -498,7 +493,7 @@
     </xsl:when>
     <xsl:otherwise>
       <xsl:call-template name="space">
-	<xsl:with-param name="repeat" select="$diff"/>
+        <xsl:with-param name="repeat" select="$diff"/>
       </xsl:call-template>
       <xsl:value-of select="$str"/>
     </xsl:otherwise>
@@ -516,7 +511,7 @@
     <xsl:otherwise>
       <xsl:value-of select="$str"/>
       <xsl:call-template name="space">
-	<xsl:with-param name="repeat" select="$diff"/>
+        <xsl:with-param name="repeat" select="$diff"/>
       </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
diff --git a/data/xslt/xml2xhtml.xsl b/data/xslt/xml2xhtml.xsl
index f8126cf..087b035 100644
--- a/data/xslt/xml2xhtml.xsl
+++ b/data/xslt/xml2xhtml.xsl
@@ -3,7 +3,7 @@
 <!--
     xml2html.xsl - transform Bison XML Report into XHTML.
 
-    Copyright (C) 2007-2012 Free Software Foundation, Inc.
+    Copyright (C) 2007-2015, 2018-2019 Free Software Foundation, Inc.
 
     This file is part of Bison, the GNU Compiler Compiler.
 
@@ -31,32 +31,33 @@
 <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"/>
+            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>
+      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
       <title>
-	<xsl:value-of select="bison-xml-report/filename"/>
-	<xsl:text> - GNU Bison XML Automaton Report</xsl:text>
+        <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;
+        font-size: 9pt;
       }
       a:link {
-	color: #1f00ff;
-	text-decoration: none;
+        color: #1f00ff;
+        text-decoration: none;
       }
       a:visited {
-	color: #1f00ff;
-	text-decoration: none;
+        color: #1f00ff;
+        text-decoration: none;
       }
       a:hover {
-	color: red;
+        color: red;
       }
       #menu a {
         text-decoration: underline;
@@ -109,21 +110,21 @@
     <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>
+        <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>
+        <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>
@@ -154,9 +155,9 @@
   <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:text>   </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
       </xsl:for-each>
       <xsl:text>&#10;&#10;</xsl:text>
     </p>
@@ -173,9 +174,9 @@
     <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:text>   </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
       </xsl:for-each>
       <xsl:text>&#10;&#10;</xsl:text>
     </p>
@@ -381,7 +382,7 @@
   <h3>
     <a>
       <xsl:attribute name="name">
-	<xsl:value-of select="concat('state_', @number)"/>
+        <xsl:value-of select="concat('state_', @number)"/>
       </xsl:attribute>
     </a>
     <xsl:text>state </xsl:text>
@@ -410,9 +411,9 @@
     <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: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>
@@ -423,9 +424,9 @@
     <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:call-template name="max-width-symbol">
+          <xsl:with-param name="node" select="error"/>
+        </xsl:call-template>
       </xsl:with-param>
     </xsl:apply-templates>
   </xsl:if>
@@ -436,9 +437,9 @@
     <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:call-template name="max-width-symbol">
+          <xsl:with-param name="node" select="reduction"/>
+        </xsl:call-template>
       </xsl:with-param>
     </xsl:apply-templates>
   </xsl:if>
@@ -447,7 +448,7 @@
 <xsl:template match="item">
   <xsl:param name="pad"/>
   <xsl:param name="prev-rule-number"
-	     select="preceding-sibling::item[1]/@rule-number"/>
+             select="preceding-sibling::item[1]/@rule-number"/>
   <xsl:apply-templates
     select="key('bison:ruleByNumber', current()/@rule-number)"
   >
@@ -477,7 +478,7 @@
   <xsl:if test="$itemset != 'true'">
     <a>
       <xsl:attribute name="name">
-	<xsl:value-of select="concat('rule_', @number)"/>
+        <xsl:value-of select="concat('rule_', @number)"/>
       </xsl:attribute>
     </a>
   </xsl:if>
@@ -486,19 +487,19 @@
   <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>
+        <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:with-param name="str" select="string(@number)"/>
+        <xsl:with-param name="pad" select="number($pad)"/>
       </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
@@ -508,19 +509,19 @@
   <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: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: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"/>
+        <xsl:value-of select="lhs"/>
       </span>
       <xsl:text> &#8594;</xsl:text>
     </xsl:otherwise>
@@ -532,12 +533,7 @@
       <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:apply-templates select="."/>
     <xsl:if test="position() = last() and position() = $point">
       <xsl:text> </xsl:text>
       <span class="point">.</span>
@@ -563,7 +559,7 @@
 </xsl:template>
 
 <xsl:template match="empty">
-  <xsl:text> &#949;</xsl:text>
+  <xsl:text> %empty</xsl:text>
 </xsl:template>
 
 <xsl:template match="lookaheads">
@@ -589,18 +585,18 @@
   <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)"/>
+        <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)"/>
+        <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>
@@ -637,10 +633,10 @@
     </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)"/>
+        <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
@@ -687,9 +683,9 @@
   <xsl:variable name="longest">
     <xsl:for-each select="$node">
       <xsl:sort data-type="number" select="string-length(@symbol)"
-		order="descending"/>
+                order="descending"/>
       <xsl:if test="position() = 1">
-	<xsl:value-of select="string-length(@symbol)"/>
+        <xsl:value-of select="string-length(@symbol)"/>
       </xsl:if>
     </xsl:for-each>
   </xsl:variable>
@@ -706,7 +702,7 @@
     </xsl:when>
     <xsl:otherwise>
       <xsl:call-template name="space">
-	<xsl:with-param name="repeat" select="$diff"/>
+        <xsl:with-param name="repeat" select="$diff"/>
       </xsl:call-template>
       <xsl:value-of select="$str"/>
     </xsl:otherwise>
@@ -724,7 +720,7 @@
     <xsl:otherwise>
       <xsl:value-of select="$str"/>
       <xsl:call-template name="space">
-	<xsl:with-param name="repeat" select="$diff"/>
+        <xsl:with-param name="repeat" select="$diff"/>
       </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
diff --git a/djgpp/Makefile.maint b/djgpp/Makefile.maint
deleted file mode 100644
index fe6b987..0000000
--- a/djgpp/Makefile.maint
+++ /dev/null
@@ -1,37 +0,0 @@
-# DJGPP Maintainer's Makefile                                    -*-Makefile-*-
-# Requires GNU sed
-
-## 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/>.
-
-top_srcdir = ..
-srcdir = .
-
-SHELL = /bin/sh
-
-all: README
-
-README: README.in $(top_srcdir)/configure
-	PACKAGE=`grep "^[	 ]*PACKAGE=" $(top_srcdir)/configure | sed -e 's/^[	 ]*PACKAGE=//' -e s/[\"\']//g`; \
-	VERSION=`grep "^[	 ]*VERSION=" $(top_srcdir)/configure | sed -e 's/^[	 ]*VERSION=//' -e s/[\"\']//g`; \
-	package_version=`echo "$${VERSION}" | sed 's/\.//g'`; \
-	tree_version=`echo "$${VERSION}" | sed 's/\.//2g'`; \
-	sed \
-	    -e "s/@V@/$${PACKAGE}-$${VERSION}/g" \
-	    -e "s/@VERSION@/$${VERSION}/g" \
-	    -e "s/@PACKAGE_VERSION@/$$package_version/g" \
-	    -e "s/@TREE_VERSION@/$$tree_version/g" \
-	  $(srcdir)/README.in > t-$@
-	mv t-$@ $@
diff --git a/djgpp/README.in b/djgpp/README.in
deleted file mode 100644
index 60fd952..0000000
--- a/djgpp/README.in
+++ /dev/null
@@ -1,195 +0,0 @@
-This is a port of GNU Bison @VERSION@ to MSDOS/DJGPP.
-
-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/>.
-
-
-1.:     DJGPP specific changes.
-	=======================
-
-	The DJGPP port of Bison offers LFN and SFN support depending on which
-	OS it is running. If LFN support is available or not is determinated at
-	run time.  If LFN support is available (DOS session under Win9X, Win2K,
-	WinXP, etc.) the standard posix file name extensions will be used.
-	These are: y.tab.c, y.tab.c++, y.tab.h, y.output, etc.  If only SFN
-	support is available (plain DOS), then the standard MSDOS short file
-	names will be used. These are: y_tab.c, y_tab.h, y.out, etc.
-	It should be noticed that this bison version needs the m4 program as
-	back end to generate the parser file (y.tab.c etc.) from the skeleton
-	files.  This implies that m4 must always be installed to get bison
-	working.  m4 will use a couple of m4 scripts that will be installed in
-	/dev/env/DJDIR/share/bison and shall not be removed.
-	It should also be noticed that the skeleton files bison.simple and
-	bison.hairy are no longer supported.  This applies also to the environ-
-	ment variables BISON_HAIRY and BISON_SIMPLE.  Those variables are *no*
-	longer honored at all.
-	The kind of skeleton file bison.hairy is no longer supported at all.
-	The skeleton file bison.simple is now called yacc.c and is an m4 script.
-	The other two skeleton files supported by this bison version are glr.c
-	and lalr1.cc.  The first one is a generalized LR C parser based on
-	Bison's LALR(1) tables and the second one is a experimental C++ parser
-	class.
-	As has been told before, bison uses m4 to generate the parser file.
-	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.
-	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.
-
-
-2.:     Installing the binary package.
-	==============================
-
-2.1.:   Copy the binary distribution into the top DJGPP installation directory,
-	just unzip it preserving the directory structure running *ONE* of the
-	following commands:
-	  unzip32 bsn@PACKAGE_VERSION@b.zip      or
-	  djtarx bsn@PACKAGE_VERSION@b.zip       or
-	  pkunzip -d bsn@PACKAGE_VERSION@b.zip
-
-
-
-3.:     Building the binaries from sources.
-	===================================
-
-3.1.:   Create a temporary directory and copy the source package into the
-	directory.  If you download the source distribution from one of the
-	DJGPP sites, just unzip it preserving the directory structure
-	running *ONE* of the following commands:
-	  unzip32 bsn@PACKAGE_VERSION@s.zip      or
-	  djtarx bsn@PACKAGE_VERSION@s.zip       or
-	  pkunzip -d bsn@PACKAGE_VERSION@s.zip
-	and proceed to the paragraph 3.3, below.
-
-3.2.:   Source distributions downloaded from one of the GNU FTP sites need
-	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 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
-	problems on the various platforms supported by DJGPP.
-	`djunpack' invokes the `djtar' program (that is part of the basic DJGPP
-	development kit) to rename these files on the fly given a file with
-	name mappings; the distribution includes a file `djgpp/fnchange.lst'
-	with the necessary mappings.  So you need first to retrieve that batch
-	file, and then invoke it to unpack the distribution.  Here's how:
-
-	  djtar -x -p -o bison-@VERSION@/djgpp/djunpack.bat bison-@VERSION@.tar.gz > djunpack.bat
-	  djunpack bison-@VERSION@.tar.gz
-
-	(The name of the distribution archive and the leading directory of the
-	path to `djunpack.bat' in the distribution will be different for
-	versions of Bison other than @VERSION@.)
-
-	If the argument to `djunpack.bat' include leading directories, it MUST
-	be given with the DOS-style backslashes; Unix-style forward slashes
-	will NOT work.
-
-	If the distribution comes as a .tar.bz2 archive, and your version of
-	`djtar' doesn't support bzip2 decompression, you need to unpack it as
-	follows:
-
-	  bnzip2 bison-@VERSION@.tar.bz2
-	  djtar -x -p -o bison-@VERSION@/djgpp/djunpack.bat bison-@VERSION@.tar > djunpack.bat
-	  djunpack bison-@VERSION@.tar
-
-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)
-          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:
-	  difNNNb.zip
-
-	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.
-
-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:
-	  del djgpp\config.cache
-	  make clean
-	  djgpp\config
-
-	Please note that you *MUST* delete the config.cache file in the djgpp
-	subdir or you will not really reconfigure the sources because the
-	configuration informations will be read from the cache file instead
-	of being newly computed.
-	To build the programs in a directory other than where the sources are,
-	you must add the parameter that specifies the source directory,
-	e.g:
-	  x:\src\gnu\bison-@TREE_VERSION@\djgpp\config x:/src/gnu/bison-@TREE_VERSION@
-
-	Lets assume you want to build the binaries in a directory placed on a
-	different drive (z:\build in this case) from where the sources are,
-	then you will run the following commands:
-	  z:
-	  md \build
-	  cd \build
-	  x:\src\gnu\bison-@TREE_VERSION@\djgpp\config x:/src/gnu/bison-@TREE_VERSION@
-
-	The order of the options and the srcdir option does not matter.  You
-	*MUST* use forward slashes to specify the source directory.
-
-	The batch file will set same environment variables, make MSDOS specific
-	modifications to the Makefile.in's and supply all other needed options
-	to the configure script.
-
-3.5.:   To compile the package run from the top srcdir the command:
-	  make
-
-3.6.:   Now you can run the tests if you like.  From the top srcdir run the
-	command:
-	  make check
-
-	No test should fail but the tests #131 (Doxygen Public Documentation)
-	and #132 (Doxygen Private Documentation) will be skipped.  Please note
-	that the testsuite only works with LFN available.  On plain DOS, most
-	of the tests will fail due to invalid DOS names.
-
-3.7.:   To install the binaries, header, library, catalogs, and info docs
-	run the following command from the top srcdir:
-	  make install
-
-	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 appropriate
-	value:
-	  make install prefix=z:/some/other/place
-
-
-
-	Send GNU bison specific bug reports to <bug-bison@gnu.org>.
-	Send suggestions and bug reports concerning the DJGPP port to
-	comp.os.msdos.djgpp or <djgpp@delorie.com>.
-
-
-Enjoy.
-
-	Guerrero, Juan Manuel <juan.guerrero@gmx.de>
diff --git a/djgpp/config.bat b/djgpp/config.bat
deleted file mode 100644
index ab566d7..0000000
--- a/djgpp/config.bat
+++ /dev/null
@@ -1,547 +0,0 @@
-@echo off

-Rem Configure Bison for DJGPP.

-

-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-2012 Free Software Foundation, Inc.

-

-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 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, see <http://www.gnu.org/licenses/>.

-

-echo Configuring Bison for DJGPP v2.x...

-

-Rem The SmallEnv tests protect against fixed and too small size

-Rem of the environment in stock DOS shell.

-

-Rem Find out if NLS is wanted or not,

-Rem if dependency-tracking is wanted or not,

-Rem if caching is wanted or not

-Rem and where the sources are.

-Rem We always default to NLS support,

-Rem no dependency tracking

-Rem and to in place configuration.

-set ARGS=

-set NLS=enabled

-if not "%NLS%" == "enabled" goto SmallEnv

-set CACHING=enabled

-if not "%CACHING%" == "enabled" goto SmallEnv

-set DEPENDENCY_TRACKING=disabled

-if not "%DEPENDENCY_TRACKING%" == "disabled" goto SmallEnv

-set LIBICONV_PREFIX=disabled

-if not "%LIBICONV_PREFIX%" == "disabled" goto SmallEnv

-set LIBINTL_PREFIX=disabled

-if not "%LIBINTL_PREFIX%" == "disabled" goto SmallEnv

-set HTML=enabled

-if not "%HTML%" == "enabled" goto SmallEnv

-set XSRC=.

-if not "%XSRC%" == "." goto SmallEnv

-

-Rem Loop over all arguments.

-Rem Special arguments are: NLS, XSRC, CACHE, STATIC_LIBS, LIBICONV_PREFIX, LIBINTL_PREFIX and DEPS.

-Rem All other arguments are stored into ARGS.

-:ArgLoop

-if "%1" == "nls" goto NextArgument

-if "%1" == "NLS" goto NextArgument

-if "%1" == "no-nls" goto NoNLS

-if "%1" == "no-NLS" goto NoNLS

-if "%1" == "NO-NLS" goto NoNLS

-goto CachingOption

-:NoNLS

-if "%1" == "no-nls" set NLS=disabled

-if "%1" == "no-NLS" set NLS=disabled

-if "%1" == "NO-NLS" set NLS=disabled

-if not "%NLS%" == "disabled" goto SmallEnv

-goto NextArgument

-:CachingOption

-if "%1" == "cache" goto NextArgument

-if "%1" == "CACHE" goto NextArgument

-if "%1" == "no-cache" goto NoCaching

-if "%1" == "no-CACHE" goto NoCaching

-if "%1" == "NO-CACHE" goto NoCaching

-goto DependencyOption

-:NoCaching

-if "%1" == "no-cache" set CACHING=disabled

-if "%1" == "no-CACHE" set CACHING=disabled

-if "%1" == "NO-CACHE" set CACHING=disabled

-if not "%CACHING%" == "disabled" goto SmallEnv

-goto NextArgument

-:DependencyOption

-if "%1" == "no-dep" goto NextArgument

-if "%1" == "no-DEP" goto NextArgument

-if "%1" == "NO-DEP" goto NextArgument

-if "%1" == "dep" goto DependecyTraking

-if "%1" == "DEP" goto DependecyTraking

-goto LibiconvPrefixOption

-:DependecyTraking

-if "%1" == "dep" set DEPENDENCY_TRACKING=enabled

-if "%1" == "DEP" set DEPENDENCY_TRACKING=enabled

-if not "%DEPENDENCY_TRACKING%" == "enabled" goto SmallEnv

-goto NextArgument

-:LibiconvPrefixOption

-if "%1" == "no-libiconvprefix" goto NextArgument

-if "%1" == "no-LIBICONVPREFIX" goto NextArgument

-if "%1" == "NO-LIBICONVPREFIX" goto NextArgument

-if "%1" == "libiconvprefix" goto WithLibiconvPrefix

-if "%1" == "LIBICONVPREFIX" goto WithLibiconvPrefix

-goto LibintlPrefixOption

-:WithLibiconvPrefix

-if "%1" == "libiconvprefix" set LIBICONV_PREFIX=enabled

-if "%1" == "LIBICONVPREFIX" set LIBICONV_PREFIX=enabled

-if not "%LIBICONV_PREFIX%" == "enabled" goto SmallEnv

-goto NextArgument

-:LibintlPrefixOption

-if "%1" == "no-libiconvprefix" goto NextArgument

-if "%1" == "no-LIBICONVPREFIX" goto NextArgument

-if "%1" == "NO-LIBICONVPREFIX" goto NextArgument

-if "%1" == "libintlprefix" goto _WithLibintlPrefix

-if "%1" == "LIBINTLPREFIX" goto _WithLibintlPrefix

-goto HTMLOption

-:_WithLibintlPrefix

-if "%1" == "libintlprefix" set LIBINTL_PREFIX=enabled

-if "%1" == "LIBINTLPREFIX" set LIBINTL_PREFIX=enabled

-if not "%LIBINTL_PREFIX%" == "enabled" goto SmallEnv

-:HTMLOption

-if "%1" == "withhtml" goto NextArgument

-if "%1" == "withHTML" goto NextArgument

-if "%1" == "WITHHTML" goto NextArgument

-if "%1" == "withouthtml" goto _WithoutHTML

-if "%1" == "withoutHTML" goto _WithoutHTML

-if "%1" == "WITHOUTHTML" goto _WithoutHTML

-goto SrcDirOption

-:_WithoutHTML

-if "%1" == "withouthtml" set HTML=disabled

-if "%1" == "withoutHTML" set HTML=disabled

-if "%1" == "WITHOUTHTML" set HTML=disabled

-if not "%HTML%" == "disabled" goto SmallEnv

-goto NextArgument

-:SrcDirOption

-echo %1 | grep -q "/"

-if errorlevel 1 goto CollectArgument

-set XSRC=%1

-if not "%XSRC%" == "%1" goto SmallEnv

-goto NextArgument

-:CollectArgument

-set _ARGS=%ARGS% %1

-if not "%_ARGS%" == "%ARGS% %1" if not "%_ARGS%" == "%ARGS%%1" goto SmallEnv

-echo %_ARGS% | grep -q "[^ ]"

-if not errorlevel 0 set ARGS=%_ARGS%

-set _ARGS=

-:NextArgument

-shift

-if not "%1" == "" goto ArgLoop

-

-Rem Create an arguments file for the configure script.

-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=

-set LIBICONV_PREFIX=

-set LIBINTL_PREFIX=

-set HTML=

-

-if "%XSRC%" == "." goto InPlace

-

-:NotInPlace

-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.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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-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

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

-if not errorlevel 1 mv -f %XSRC%/src/scan-gram-c.c %XSRC%/src/c-scan-gram.c

-:scan_skel_c_Test

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

-if not errorlevel 1 goto FixFiles

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

-if not errorlevel 1 mv -f %XSRC%/src/scan-skel-c.c %XSRC%/src/c-scan-skel.c

-

-:FixFiles

-Rem Fix data/lalr1.cc and data/location.cc to reflect the renaming of c++.m4

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

-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

-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

-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%/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%/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

-test -d %XSRC%/examples/calcxx

-if errorlevel 1 mv -f %XSRC%/examples/calcpp %XSRC%/examples/calcxx

-test -f %XSRC%/examples/calcxx/calc++-scanner.cc

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

-test -f %XSRC%/examples/calcxx/calcxx-scanner.cc

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-scanner.cc %XSRC%/examples/calcxx/calcxx-scanner.cc

-test -f %XSRC%/examples/calcxx/calc++-scanner.ll

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

-test -f %XSRC%/examples/calcxx/calcxx-scanner.ll

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-scanner.ll %XSRC%/examples/calcxx/calcxx-scanner.ll

-test -f %XSRC%/examples/calcxx/calc++-driver.cc

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

-test -f %XSRC%/examples/calcxx/calcxx-driver.cc

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-driver.cc %XSRC%/examples/calcxx/calcxx-driver.cc

-test -f %XSRC%/examples/calcxx/calc++-driver.hh

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

-test -f %XSRC%/examples/calcxx/calcxx-driver.hh

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-driver.hh %XSRC%/examples/calcxx/calcxx-driver.hh

-test -f %XSRC%/examples/calcxx/calc++-parser.cc

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

-test -f %XSRC%/examples/calcxx/calcxx-parser.cc

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-parser.cc %XSRC%/examples/calcxx/calcxx-parser.cc

-test -f %XSRC%/examples/calcxx/calc++-parser.hh

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

-test -f %XSRC%/examples/calcxx/calcxx-parser.hh

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-parser.hh %XSRC%/examples/calcxx/calcxx-parser.hh

-test -f %XSRC%/examples/calcxx/calc++-parser.stamp

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

-test -f %XSRC%/examples/calcxx/calcxx-parser.stamp

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-parser.stamp %XSRC%/examples/calcxx/calcxx-parser.stamp

-test -f %XSRC%/examples/calcxx/calc++-parser.yy

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

-test -f %XSRC%/examples/calcxx/calcxx-parser.yy

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp-parser.yy %XSRC%/examples/calcxx/calcxx-parser.yy

-test -f %XSRC%/examples/calcxx/calc++.cc

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

-test -f %XSRC%/examples/calcxx/calcxx.cc

-if errorlevel 1 mv -f %XSRC%/examples/calcxx/calcpp.cc %XSRC%/examples/calcxx/calcxx.cc

-

-Rem Fixing #include lines in calcxx files.

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx.cc > calcxx.cc

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx.cc %XSRC%/examples/calcxx/calcxx.cc

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-driver.cc > calcxx-driver.cc

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx-driver.cc %XSRC%/examples/calcxx/calcxx-driver.cc

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-driver.hh > calcxx-driver.hh

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx-driver.hh %XSRC%/examples/calcxx/calcxx-driver.hh

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-parser.cc > calcxx-parser.cc

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx-parser.cc %XSRC%/examples/calcxx/calcxx-parser.cc

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-parser.hh > calcxx-parser.hh

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx-parser.hh %XSRC%/examples/calcxx/calcxx-parser.hh

-:sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-parser.yy > calcxx-parser.yy

-:if errorlevel 1 goto calcxxFileError

-:mv ./calcxx-parser.yy %XSRC%/examples/calcxx/calcxx-parser.yy

-sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-scanner.cc > calcxx-scanner.cc

-if errorlevel 1 goto calcxxFileError

-mv ./calcxx-scanner.cc %XSRC%/examples/calcxx/calcxx-scanner.cc

-:sed "/#[	 ]*include/s/++/xx/" %XSRC%/examples/calcxx/calcxx-scanner.ll > calcxx-scanner.ll

-:if errorlevel 1 goto calcxxFileError

-:mv ./calcxx-scanner.ll %XSRC%/examples/calcxx/calcxx-scanner.ll

-sed "s/calc++/calcxx/" %XSRC%/examples/calcxx/test > test

-if errorlevel 1 goto calcxxFileError

-mv ./test %XSRC%/examples/calcxx/test

-

-

-Rem Fixing the scanner files to make file names 8.3 valid.

-Rem Use only if you want to change the scan-gram.l and scan-skel.l files.

-: sed "/outfile=/s/\.yy/yy/" %XSRC%/src/scan-gram.l > scan-gram.l

-: if errorlevel 1 goto ScannerFileError

-: mv ./scan-gram.l %XSRC%/src/scan-gram.l

-: sed "/outfile=/s/\.yy/yy/" %XSRC%/src/scan-skel.l > scan-skel.l

-: if errorlevel 1 goto ScannerFileError

-: mv ./scan-skel.l %XSRC%/src/scan-skel.l

-

-

-Rem This is required because DOS/Windows are case-insensitive

-Rem to file names, and "make install" will do nothing if Make

-Rem finds a file called `install'.

-if exist INSTALL ren INSTALL INSTALL.txt

-

-Rem Set SHELL to a sane default or some configure tests stop working

-Rem if the package is configured across partitions.

-if not "%SHELL%" == "" goto HomeName

-set SHELL=/bin/sh

-if not "%SHELL%" == "/bin/sh" goto SmallEnv

-echo No SHELL found in the environment, using default value

-

-:HomeName

-Rem Set HOME to a sane default so configure stops complaining.

-if not "%HOME%" == "" goto HostName

-set HOME=%XSRC%/djgpp

-if not "%HOME%" == "%XSRC%/djgpp" goto SmallEnv

-echo No HOME found in the environment, using default value

-

-:HostName

-Rem Set HOSTNAME so it shows in config.status

-if not "%HOSTNAME%" == "" goto hostdone

-if "%windir%" == "" goto msdos

-set OS=MS-Windows

-if not "%OS%" == "MS-Windows" goto SmallEnv

-goto haveos

-:msdos

-set OS=MS-DOS

-if not "%OS%" == "MS-DOS" goto SmallEnv

-:haveos

-if not "%USERNAME%" == "" goto haveuname

-if not "%USER%" == "" goto haveuser

-echo No USERNAME and no USER found in the environment, using default values

-set HOSTNAME=Unknown PC

-if not "%HOSTNAME%" == "Unknown PC" goto SmallEnv

-goto userdone

-:haveuser

-set HOSTNAME=%USER%'s PC

-if not "%HOSTNAME%" == "%USER%'s PC" goto SmallEnv

-goto userdone

-:haveuname

-set HOSTNAME=%USERNAME%'s PC

-if not "%HOSTNAME%" == "%USERNAME%'s PC" goto SmallEnv

-:userdone

-set _HOSTNAME=%HOSTNAME%, %OS%

-if not "%_HOSTNAME%" == "%HOSTNAME%, %OS%" goto SmallEnv

-set HOSTNAME=%_HOSTNAME%

-:hostdone

-set _HOSTNAME=

-set OS=

-

-Rem install-sh is required by the configure script but clashes with the

-Rem various Makefile install-foo targets, so we MUST have it before the

-Rem script runs and rename it afterwards

-test -f %XSRC%/install-sh

-if not errorlevel 1 goto NoRen0

-test -f %XSRC%/install-sh.sh

-if not errorlevel 1 mv -f %XSRC%/install-sh.sh %XSRC%/install-sh

-:NoRen0

-

-if "%NLS%" == "disabled" goto WithoutNLS

-

-:WithNLS

-Rem Check for the needed libraries and binaries.

-test -x /dev/env/DJDIR/bin/msgfmt.exe

-if errorlevel 1 goto MissingNLSTools

-test -x /dev/env/DJDIR/bin/xgettext.exe

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/include/libcharset.h

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/lib/libcharset.a

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/include/iconv.h

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/lib/libiconv.a

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/include/libintl.h

-if errorlevel 1 goto MissingNLSTools

-test -f /dev/env/DJDIR/lib/libintl.a

-if errorlevel 1 goto MissingNLSTools

-

-Rem Recreate the files in the %XSRC%/po subdir with our ported tools.

-redir -e /dev/null rm %XSRC%/po/*.gmo

-redir -e /dev/null rm %XSRC%/po/bison.pot

-redir -e /dev/null rm %XSRC%/po/cat-id-tbl.c

-redir -e /dev/null rm %XSRC%/po/stamp-cat-id

-

-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 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 >> args

-

-:ConfigurePackage

-echo Running the ./configure script...

-sh ./configure @args

-if errorlevel 1 goto CfgError

-rm args

-echo Done.

-goto End

-

-:lalr1_ccFileError

-echo ./data/lalr1.cc file editing failed!

-goto End

-

-:glr_ccFileError

-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

-

-:calcxxFileError

-echo ./examples/calcxx file editing failed!

-goto End

-

-:ScannerFileError

-echo ./scanner file editing failed!

-goto End

-

-:SedError

-echo ./configure script editing failed!

-goto End

-

-:SedError2

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

-goto End

-

-:SedError3

-echo ./tests/testsuite editing failed!

-goto End

-

-:CfgError

-echo ./configure script exited abnormally!

-goto End

-

-:SmallEnv

-echo Your environment size is too small.  Enlarge it and run me again.

-echo Configuration NOT done!

-

-:End

-test -f %XSRC%/install-sh.sh

-if not errorlevel 1 goto NoRen1

-test -f %XSRC%/install-sh

-if not errorlevel 1 mv -f %XSRC%/install-sh %XSRC%/install-sh.sh

-:NoRen1

-if "%SHELL%" == "/bin/sh" set SHELL=

-if "%HOME%" == "%XSRC%/djgpp" set HOME=

-set CONFIG_SITE=

-set HOSTNAME=

-set NLS=

-set XSRC=

diff --git a/djgpp/config.sed b/djgpp/config.sed
deleted file mode 100644
index d5a5807..0000000
--- a/djgpp/config.sed
+++ /dev/null
@@ -1,190 +0,0 @@
-# DJGPP specific configuration file.
-# Sed script for additional DJGPP specific editing
-# of the configure script generated by autoconf 2.62.
-
-# 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/>.
-
-
-# Additional editing of Makefiles
-/^eval sed.*ac_file_inputs.*tmp\/out \\$/ {
-:loop
-n
-/^$/!b loop
-a\
-cat > "$tmp/subs-djgpp.sed" << eof_djgpp\
-# DJGPP specific Makefile changes.\
-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\\\\\
-	\\$(COMPILE) -c \\$<\
-/^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/\
-/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=/ {
-  /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=/ {
-  /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).
-/^rmdir[	 ]*\.tst/ i\
-am__leading_dot=_
-
-# Replace (command) > /dev/null with `command > /dev/null`, since
-# parenthesized commands always return zero status in the ported Bash,
-# even if the named command doesn't exist
-/if ([^|;`]*null/{
-  s,(,`,
-  s,),,
-  /null[	 ]*2>&1/ s,2>&1,&`,
-  /null.*null/ s,null.*null,&`,
-  /null.*null/ !{
-    /null[	 ]*2>&1/ !s,null,&`,
-  }
-}
-
-# DOS-style absolute file names should be supported as well
-/\*) top_srcdir=/s,/\*,[\\\\/]* | ?:[\\\\/]*,
-
-# The following two items are changes needed for configuring
-# and compiling across partitions.
-# 1) The given srcdir value is always translated from the
-#    "x:" syntax into "/dev/x" syntax while we run configure.
-/^[	 ]*-srcdir=\*.*$/ a\
-    ac_optarg=`echo "$ac_optarg" | sed "s,^\\([A-Za-z]\\):,/dev/\\1,"`
-/set X `ls -Lt \$srcdir/ i\
-   if `echo $srcdir | grep "^/dev/" - > /dev/null`; then\
-     srcdir=`echo "$srcdir" | sed -e "s%^/dev/%%" -e "s%/%:/%"`\
-   fi
-
-# Autoconf 2.52e generated configure scripts
-# write absolute paths into Makefiles and bison.in
-# making them useless for DJGPP installations for
-# 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-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-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}
-#/^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))/
-
-# We need makeinfo to make the html formated docs.
-/\$am_missing_run[	 ]*makeinfo/ s,\$am_missing_run,,
-
-# The path to the FORTRAN compiler and libraries
-# shall contain no absolute path reference so it
-# will be good for all djgpp installations.
-/^FLIBS="\$ac_cv_flibs"/ i\
-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
deleted file mode 100644
index 7ca4107..0000000
--- a/djgpp/config.site
+++ /dev/null
@@ -1,85 +0,0 @@
-#! /bin/sh
-
-# This is the config.site file for configuring GNU packages
-# which are to be built with DJGPP tools.
-
-# 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/>.
-
-
-# Include the djgpp subdirectory in PATH, so that getconf is found
-PATH="$srcdir/djgpp:$PATH"
-
-# These two variables are required, otherwise looking for
-# programs along the PATH will not work.
-PATH_SEPARATOR=:
-PATH_EXPAND=y
-
-# This is required in for "test -f foo" to find foo.exe
-export TEST_FINDS_EXE=y
-
-# The root of the DJGPP tree serves as the default prefix
-test "x$prefix" = xNONE && prefix='/dev/env/DJDIR'
-
-# This is required for config.status script to be run, since
-# ./configure runs it by invoking ${CONFIG_SHELL-/bin/sh}
-CONFIG_SHELL=${CONFIG_SHELL='sh'}
-
-# These are set here so the generated Makefile's will be good
-# for every DJGPP installation, not only the one where the
-# package was configured.
-# $INSTALL must be an absolute path name, otherwise config.status
-# will try to prepend ./ and ../ to it when it goes into subdirs.
-INSTALL=${INSTALL='/dev/env/DJDIR/bin/ginstall -c'}
-RANLIB=${RANLIB='ranlib'}
-GMSGFMT=${GMSGFMT='/dev/env/DJDIR/bin/msgfmt'}
-MSGFMT=${MSGFMT='/dev/env/DJDIR/bin/msgfmt'}
-XGETTEXT=${XGETTEXT='/dev/env/DJDIR/bin/xgettext'}
-AWK=${AWK='gawk'}
-
-# A sane default for emacs.
-ac_cv_path_EMACS=${EMACS='/dev/env/DJDIR/gnu/emacs/bin/emacs'}
-
-# A sane default for m4.
-ac_cv_path_M4=${M4='/dev/env/DJDIR/bin/m4'}
-
-# A sane default for grep.
-ac_cv_path_GREP=${GREP='/dev/env/DJDIR/bin/grep'}
-
-# A sane default for egrep.
-ac_cv_path_EGREP=${EGREP='/dev/env/DJDIR/bin/egrep'}
-
-# A sane default for fgrep.
-ac_cv_path_FGREP=${FGREP='/dev/env/DJDIR/bin/fgrep'}
-
-# 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.
-NM=${NM='nm'}
-LD=${LD='ld'}
-
-# Force the test for 'ln -s' to report 'cp -pf'.
-ac_cv_prog_LN_S='cp -pf'
-
-# There is no fork and vfork functionality.
-ac_cv_func_fork=no
-ac_cv_func_vfork=no
-ac_cv_func_pipe=no
diff --git a/djgpp/config_h.sed b/djgpp/config_h.sed
deleted file mode 100644
index f616abc..0000000
--- a/djgpp/config_h.sed
+++ /dev/null
@@ -1,28 +0,0 @@
-# sed script for DJGPP specific editing of config.hin
-
-# 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/>.
-
-
-$ a\
-\
-\
-/* DJGPP specific defines.  */\
-\
-#include <unistd.h>\
-#define TAB_EXT     ((pathconf(NULL, _PC_NAME_MAX) > 12) ? ".tab" : "_tab")\
-#define OUTPUT_EXT  ((pathconf(NULL, _PC_NAME_MAX) > 12) ? ".output" : ".out")\
-\
-#define DEFAULT_TMPDIR  "/dev/env/DJDIR/tmp"
diff --git a/djgpp/djunpack.bat b/djgpp/djunpack.bat
deleted file mode 100644
index b4de3ac..0000000
--- a/djgpp/djunpack.bat
+++ /dev/null
@@ -1,87 +0,0 @@
-@echo off

-Rem

-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

-Rem This batch file unpacks the Bison distribution while simultaneously

-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-2012 Free Software Foundation, Inc.

-Rem

-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 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, see <http://www.gnu.org/licenses/>.

-Rem

-Rem

-Rem Invoke like this:

-Rem

-Rem     djunpack bison-XYZ.tar.gz

-Rem or

-Rem     djunpack bison-XYZ.tar.bz2

-Rem

-Rem where XYZ is the version number.  If the argument includes leading

-Rem directories, it MUST use backslashes, not forward slashes.

-Rem

-

-set ENVIRONMENT_SIZE_TEST_STRING=ENVIRONMENT_SIZE_TEST_STRING

-if "%ENVIRONMENT_SIZE_TEST_STRING%"=="ENVIRONMENT_SIZE_TEST_STRING" GoTo EnvOk

-Rem If their environment space is too small, re-exec with a larger one

-command.com /e:4096 /c %0 %1

-GoTo End

-

-:EnvOk

-set ENVIRONMENT_SIZE_TEST_STRING=

-if "%1" == "" GoTo NoArgument

-if not exist %1 GoTo NoArchive

-Rem Extract top src dir from archive file.

-djtar -t %1 > top_src.dir

-Rem The following uses a feature of COPY whereby it does not copy

-Rem empty files.  We need that because the previous line will create

-Rem an empty fnchange.tmp even if the command failed for some reason.

-copy top_src.dir junk.tmp > nul

-if not exist junk.tmp GoTo NoDjTar

-del junk.tmp

-sed "1{s/^.*bison-/djtar -x -p -o bison-/;s|$|djgpp/fnchange.lst %%1 > fnchange.tmp|};2,$d" top_src.dir > ext_list.bat

-Rem See the comment above about the reason for using COPY.

-copy ext_list.bat junk.tmp > nul

-if not exist junk.tmp GoTo NoSed

-del junk.tmp

-Rem Extract fnchange.lst from archive.

-call ext_list.bat %1

-del ext_list.bat

-sed "1{s|^.*bison-|s/@V@/bison-|;s|$|g|};2,$d" top_src.dir > version.sed

-sed -f version.sed < fnchange.tmp > fnchange.lst

-del version.sed

-del fnchange.tmp

-del top_src.dir

-Rem unpack the source distribution

-djtar -x -n fnchange.lst %1

-del fnchange.lst

-GoTo End

-

-:NoSed

-del junk.tmp

-echo FAIL: Sed is not available.

-GoTo End

-:NoDjTar

-del junk.tmp

-echo FAIL: DJTAR is not available or no fnchange.lst file in %1.

-GoTo End

-:NoArchive

-echo FAIL: the file %1 does not seem to exist.

-echo Remember that %1 cannot use forward slashes, only backslashes.

-GoTo End

-:NoArgument

-echo FAIL: no archive file has been specified.

-echo Remember that the file name cannot use forward slashes, only backslashes.

-:End

diff --git a/djgpp/fnchange.lst b/djgpp/fnchange.lst
deleted file mode 100644
index 1b43d9b..0000000
--- a/djgpp/fnchange.lst
+++ /dev/null
@@ -1,27 +0,0 @@
-@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
deleted file mode 100644
index f85e8f9..0000000
--- a/djgpp/subpipe.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/* Subprocesses with pipes.
-
-   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/>.  */
-
-/* Written by Juan Manuel Guerrero <juan.guerrero@gmx.de>. */
-
-
-#include <config.h>
-
-#include "subpipe.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <process.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "xalloc.h"
-
-
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO 1
-#endif
-
-
-#include "error.h"
-
-#include "gettext.h"
-#define _(Msgid)  gettext (Msgid)
-
-
-/* Initialize this module. */
-
-
-static int old_stdin;
-static int old_stdout;
-static char **arguments;
-static char tmp_file_name[2][L_tmpnam];
-
-#define remove_tmp_file(fd, name)                                     \
-  do {                                                                \
-    close ((fd));                                                     \
-    if (unlink ((name)))                                              \
-      error (EXIT_FAILURE, 0, _("removing of '%s' failed"), (name));  \
-  } while (0)
-
-
-void
-init_subpipe(void)
-{
-  char *tmpdir;
-  int fd;
-
-  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], 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"));
-  close (fd);
-}
-
-
-/* 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.
-
-   Because DOS has neither fork nor pipe functionality to run the subprocess
-   as a filter, the filter is reproduced using temporary files. First bison's
-   stdout is redirected to a temporary file. After bison has produced all of
-   is output, this file is closed and connected to m4's stdin. All m4's output
-   is redirected from m4's stdout to a second temporary file and reopened as
-   bison's stdin. */
-
-pid_t
-create_subpipe(char const *const *argv, int fd[2])
-{
-  int argc;
-  int from_in_fd;  /* pipe from bison to m4. */
-  pid_t pid;
-
-
-  pid = getpid();
-
-  /*
-   *  Save original stdin and stdout
-   *  for later restauration.
-   */
-  old_stdin = dup(STDIN_FILENO);
-  if (old_stdin < 0)
-    error(EXIT_FAILURE, 0, _("saving stdin failed"));
-
-  old_stdout = dup(STDOUT_FILENO);
-  if (old_stdout < 0)
-    error(EXIT_FAILURE, 0, _("saving stdout failed"));
-
-  /*
-   *  Save argv for later use.
-   */
-  for (argc = 0; argv[argc]; argc++)
-    ;
-  argc++;
-  arguments = xmalloc(argc * sizeof(arguments[0]));
-  for (argc = 0; argv[argc]; argc++)
-  {
-    arguments[argc] = xmalloc((strlen(argv[argc]) + 1) * sizeof(arguments[0][0]));
-    strcpy(arguments[argc], argv[argc]);
-  }
-  arguments[argc] = NULL;
-
-  /*
-   *  All bison's output will be gathered in this temporary file
-   *  and will be redirected to m4's stdin.
-   */
-  from_in_fd = open(tmp_file_name[0], O_WRONLY | O_CREAT | O_TRUNC, S_IWUSR);
-  if (from_in_fd < 0)
-    error(EXIT_FAILURE, 0, _("opening of tmpfile failed"));
-  if (dup2(from_in_fd, STDOUT_FILENO) < 0)
-  {
-    remove_tmp_file(from_in_fd, tmp_file_name[0]);
-    error(EXIT_FAILURE, 0, _("redirecting bison's stdout to the temporary file failed"));
-  }
-  close(from_in_fd);
-
-
-  fd[0] = STDOUT_FILENO;
-  return pid;
-}
-
-
-/* A signal handler that just records that a signal has happened. */
-static int child_interrupted;
-
-static void
-signal_catcher(int signo)
-{
-  child_interrupted++;
-}
-
-
-void
-end_of_output_subpipe(pid_t pid, int fd[2])
-{
-  char *program;
-  int from_out_fd = open(tmp_file_name[0], O_RDONLY, S_IRUSR);                   /* pipe from bison to m4. */
-  int to_in_fd = open(tmp_file_name[1], O_WRONLY | O_CREAT | O_TRUNC, S_IWUSR);  /* pipe from m4 to bison. */
-  int status;
-  void (*previous_handler)(int);
-
-
-  program = strrchr(arguments[0], '/');
-  if (program)
-    program++;
-  else
-    program = arguments[0];
-
-  /*
-   *  Redirect bison's output to m4's stdin.
-   */
-  if (from_out_fd < 0)
-    error(EXIT_FAILURE, 0, _("opening of tmpfile failed"));
-  if (dup2(from_out_fd, STDIN_FILENO) < 0)
-  {
-    remove_tmp_file(from_out_fd, tmp_file_name[0]);
-    error(EXIT_FAILURE, 0, _("redirecting m4's stdin from the temporary file failed"));
-  }
-  close(from_out_fd);
-
-  /*
-   *  All m4's output will be gathered in this temporary file
-   *  and will be redirected to bison's stdin.
-   */
-  if (to_in_fd < 0)
-  {
-    remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
-    error(EXIT_FAILURE, 0, _("opening of a temporary file failed"));
-  }
-  if (dup2(to_in_fd, STDOUT_FILENO) < 0)
-  {
-    remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
-    remove_tmp_file(to_in_fd, tmp_file_name[1]);
-    error(EXIT_FAILURE, 0, _("redirecting m4's stdout to a temporary file failed"));
-  }
-  close(to_in_fd);
-
-  /*
-   *  Run m4.
-   */
-  child_interrupted = 0;
-  errno = 0;
-  previous_handler = signal(SIGINT, signal_catcher);
-  status = spawnvp(P_WAIT, program, arguments);
-  signal(SIGINT, previous_handler);
-  if (child_interrupted)
-  {
-    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);
-  }
-  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"
-			     : status < 1
-			     ? "subsidiary program '%s' failed"
-			     : "subsidiary program '%s' failed (status=%i, errno=%i)"), program, status, errno);
-  }
-
-
-  /*
-   *  Redirect m4's output to bison's stdin.
-   */
-  if (dup2(old_stdout, STDOUT_FILENO) < 0)
-    error(EXIT_FAILURE, 0, "restore of bison's stdout failed");
-  close(old_stdout);
-  to_in_fd = open(tmp_file_name[1], O_RDONLY, S_IRUSR);  /* pipe from m4 to bison. */
-  if (to_in_fd < 0)
-  {
-    remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
-    error(EXIT_FAILURE, 0, _("opening of tmpfile failed"));
-  }
-  if (dup2(to_in_fd, STDIN_FILENO) < 0)
-  {
-    remove_tmp_file(STDIN_FILENO, tmp_file_name[0]);
-    remove_tmp_file(to_in_fd, tmp_file_name[1]);
-    error(EXIT_FAILURE, -1, "dup2");
-    error(EXIT_FAILURE, 0, _("redirecting bison's stdin from the temporary file failed"));
-  }
-  close(to_in_fd);
-
-
-  fd[1] = STDIN_FILENO;
-}
-
-
-/* Free resources, unlink temporary files and restore stdin and stdout. */
-
-void
-reap_subpipe(pid_t pid, char const *program)
-{
-  int argc;
-
-  for (argc = 0; arguments[argc]; argc++)
-    free(arguments[argc]);
-  free(arguments);
-
-  if (unlink(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]);
-
-  if (dup2(old_stdin, STDIN_FILENO) < 0)
-    error(EXIT_FAILURE, 0, "restore of bison's stdin failed");
-  close(old_stdin);
-}
diff --git a/djgpp/subpipe.h b/djgpp/subpipe.h
deleted file mode 100644
index d7a30dc..0000000
--- a/djgpp/subpipe.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Subprocesses with pipes.
-
-   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/>.  */
-
-/* Written by Juan Manuel Guerrero <juan.guerrero@gmx.de>. */
-
-#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/djgpp/testsuite.sed b/djgpp/testsuite.sed
deleted file mode 100644
index 4d551b3..0000000
--- a/djgpp/testsuite.sed
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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
index e36a1ce..c646c4d 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -1,837 +1,1893 @@
-# Doxyfile 1.3.4		-*- Makefile -*-
+# Doxyfile 1.8.7
 
 # This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
 #
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single 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 (" ")
+# 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.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My 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.
+# 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.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
 
-OUTPUT_DIRECTORY       = .
+PROJECT_BRIEF          = "Generate a deterministic LR or generalized LR (GLR) parser employing LALR(1), IELR(1), or canonical LR(1) parser tables."
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. 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       = @top_builddir@/doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
 
 # 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.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
 
 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.
+# If the BRIEF_MEMBER_DESC tag is set to YES 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.
+# The default value is: YES.
 
 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
+# If the REPEAT_BRIEF tag is set to YES 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.
+# The default value is: YES.
 
 REPEAT_BRIEF           = YES
 
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       =
+
 # 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
+# doxygen will generate a detailed section even if there is only a brief
 # description.
+# The default value is: NO.
 
 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.
+# 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.
+# The default value is: NO.
 
 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.
+# If the FULL_PATH_NAMES tag is set to YES 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
+# The default value is: YES.
 
 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.
+# 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. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
 
 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.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_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.
+# The default value is: NO.
 
 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.
+# 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-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
 
 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.
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_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 behavior. 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 behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
 
 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.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
 
 INHERIT_DOCS           = YES
 
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = 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.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that act 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                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# 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.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = 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.
+# The default value is: NO.
 
 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.
+# Set the SUBGROUPING tag to YES 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.
+# The default value is: YES.
 
 SUBGROUPING            = YES
 
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
 #---------------------------------------------------------------------------
 # 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
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
 
 EXTRACT_ALL            = YES
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
 
 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.
+# 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. Does not have any effect
+# for Java sources.
+# The default value is: YES.
 
 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.
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO 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.
+# The default value is: NO.
 
 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.
+# 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 these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
 
 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.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
 
 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.
+# 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 these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
 
 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.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
 
 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
+# 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.
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
 
 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.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
 
 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.
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
 
 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.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
 
 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.
+# If the SORT_MEMBER_DOCS tag is set to YES 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.
+# The default value is: YES.
 
 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.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# 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.
+# The default value is: YES.
 
 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.
+# 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.
+# The default value is: YES.
 
 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.
+# 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.
+# The default value is: YES.
 
 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.
+# 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.
+# The default value is: YES.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
 
 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.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
 
 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.
+# 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.
+# The default value is: YES.
 
 SHOW_USED_FILES        = YES
 
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. Do not use file names with spaces, bibtex cannot handle them. See
+# also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
 #---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# 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.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
 
 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.
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
 
 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.
+# If the WARN_IF_UNDOCUMENTED tag 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.
+# The default value is: YES.
 
 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.
+# If the WARN_IF_DOC_ERROR tag 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.
+# The default value is: YES.
 
 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.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# 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. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $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.
+# 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 standard
+# error (stderr).
 
 WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
-# configuration options related to the input files
+# 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.
+# The INPUT tag is 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.
+# Note: If this tag is empty the current directory is searched.
 
 INPUT                  = @top_srcdir@/src \
-			 @top_builddir@/src
+                         @top_builddir@/src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
 
 # 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 tag to specify one or more wildcard patterns (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, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
 
 FILE_PATTERNS          = *.c \
                          *.h \
-	                 *.l \
-			 *.y
+                         *.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.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
 
 RECURSIVE              = YES
 
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# The EXCLUDE tag can be used to specify files and/or directories that should be
 # 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.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
 
-EXCLUDE                = @top_srcdir@/src/scan-gram.c \
-	                 @top_srcdir@/src/scan-skel.c \
-	                 @top_builddir@/src/parse-*.[ch]
+EXCLUDE                = @top_builddir@/src/scan-gram.c \
+                         @top_builddir@/src/scan-skel.c \
+                         @top_srcdir@/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.
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
 
 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.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
 
 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).
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# 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 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.
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
 
 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).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be 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.
+# 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. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
 
 INPUT_FILTER           =
 
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
 # 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).
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
 
 FILTER_SOURCE_FILES    = NO
 
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
 #---------------------------------------------------------------------------
-# configuration options related to source browsing
+# 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.
+# 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.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
 
 SOURCE_BROWSER         = NO
 
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
 
 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.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
 
 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.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
 
 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.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
 
 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.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES 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.
+# See also: Section \class.
+# The default value is: YES.
 
 VERBATIM_HEADERS       = YES
 
 #---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# 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.
+# 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.
+# The default value is: YES.
 
 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])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 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.
+# 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 a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
 
 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.
+# 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.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
 # standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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
+# 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 left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+# defined cascading style sheet that is included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet file to the output directory. For an example
+# see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
-HTML_ALIGN_MEMBERS     = YES
+HTML_EXTRA_STYLESHEET  =
 
-# 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.
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# 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 directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 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.
+# 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.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 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).
+# 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).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 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.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# 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. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 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.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 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.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value 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
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 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.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# 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.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 TREEVIEW_WIDTH         = 250
 
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
 #---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
 
 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.
+# 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.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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!
+# 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. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+# replace them by respectively the title of the page, the current date and time,
+# only the current date, the version number of doxygen, the project name (see
+# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). 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.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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
+# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
 # higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 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.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HIDE_INDICES     = NO
 
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# 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.
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
 
 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.
+# 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.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 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.
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 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.
+# 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 some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 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.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_EXTENSIONS_FILE    =
 
 #---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
 
 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.
+# 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. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 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)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 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.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# 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 value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_LINKS              = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the XML output
+# 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.
+# 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.
+# The default value is: NO.
 
 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.
+# 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.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
 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.
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
-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                =
+XML_PROGRAMLISTING     = YES
 
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options related to the DOCBOOK 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.
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://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.
+# The default value is: NO.
 
 GENERATE_AUTOGEN_DEF   = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# 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.
+# 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.
+# The default value is: NO.
 
 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.
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 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.
+# 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.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 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.
+# 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.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_MAKEVAR_PREFIX =
 
@@ -839,106 +1895,130 @@
 # 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.
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
 
 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.
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set 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.
+# 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_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 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.
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 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.
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
 
-INCLUDE_PATH           =
+INCLUDE_PATH           = @top_srcdir@ \
+                         @top_srcdir@/lib \
+                         @top_builddir@/lib
 
 # 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.
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 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.
+# 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 e.g.
+# 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. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 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.
+# 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 that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 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.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to 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.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::addtions related to external references
+# Configuration options 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 ...
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. 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 = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: 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.
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
 
 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.
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
 
 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.
+# 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.
+# The default value is: YES.
 
 EXTERNAL_GROUPS        = YES
 
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
 # The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
 
 PERL_PATH              = @PERL@
 
@@ -946,142 +2026,293 @@
 # 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.
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
 
 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.
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# 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.
+# The default value is: YES.
 
 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)
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), 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 value is: NO.
 
 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.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font n the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the COLLABORATION_GRAPH tag is 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 COLLABORATION_GRAPH    = YES
 
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = 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.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 UML_LOOK               = NO
 
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the CALL_GRAPH tag is 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.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# 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 caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GRAPHICAL_HIERARCHY    = YES
 
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = 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.
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag 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 in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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).
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
 
-MAX_DOT_GRAPH_WIDTH    = 1024
+MSCFILE_DIRS           =
 
-# 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.
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
 
-MAX_DOT_GRAPH_HEIGHT   = 1024
+DIAFILE_DIRS           =
 
-# 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.
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# 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 the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 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.am b/doc/Makefile.am
deleted file mode 100644
index 80c7285..0000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1,155 +0,0 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-
-## 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 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# 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.texi
-bison_TEXINFOS = $(srcdir)/cross-options.texi gpl-3.0.texi fdl.texi
-
-CLEANFILES = bison.fns
-CLEANDIRS = *.t2d
-clean-local:
-	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
-	$(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
deleted file mode 100644
index 43585ef..0000000
--- a/doc/Makefile.in
+++ /dev/null
@@ -1,2023 +0,0 @@
-# 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 = doc
-DIST_COMMON = $(bison_TEXINFOS) $(dist_man_MANS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/stamp-vti \
-	$(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/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 = 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
-DVIS = bison.dvi
-PDFS = bison.pdf
-PSS = bison.ps
-HTMLS = bison.html
-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 = $(dist_man_MANS) $(nodist_man_MANS)
-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@
-AM_MAKEINFOFLAGS = --no-split
-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: .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 ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	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 \
-	  *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):
-yacc.1: $(top_builddir)/config.status $(srcdir)/yacc.1.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-
-.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 \
-	    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; \
-	  $(am__cd) $(srcdir); \
-	else \
-	  rc=$$?; \
-	  $(am__cd) $(srcdir) && \
-	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
-	fi; \
-	rm -rf $$backupdir; exit $$rc
-
-.texi.dvi:
-	$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2DVI) $(AM_V_texinfo) --clean $< $(AM_V_texidevnull)
-
-.texi.pdf:
-	$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
-	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-	$(TEXI2PDF) $(AM_V_texinfo) --clean $< $(AM_V_texidevnull)
-
-.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 $@; \
-	  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.texi $(srcdir)/version.texi $(bison_TEXINFOS)
-$(srcdir)/version.texi:  $(srcdir)/stamp-vti
-$(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)"; \
-	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:
-	$(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 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'"; \
-	    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)
-	@list='$(INFO_DEPS)'; \
-	for file in $$list; do \
-	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
-	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
-	  (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)'; \
-	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; \
-	  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
-
-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 \
-	  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: $(dist_man_MANS) $(nodist_man_MANS)
-	@$(NORMAL_INSTALL)
-	@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 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=''; 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)
-	@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; \
-	  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
-	$(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:
-	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-aminfo 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) html-local
-
-info: info-am
-
-info-am: $(INFO_DEPS)
-
-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)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-	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/||"`;; \
-	  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 \
-	      echo "$$ifile"; \
-	    else : ; fi; \
-	  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 $(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'";\
-	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
-	  done; \
-	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
-	-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-dvi-am uninstall-html-am uninstall-info-am \
-	uninstall-man uninstall-pdf-am uninstall-ps-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 $(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
-	$(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 6309975..0537cfc 100644
--- a/doc/bison.1
+++ b/doc/bison.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.40.10.
-.TH BISON "1" "December 2012" "bison 2.7" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.11.
+.TH BISON "1" "December 2019" "bison 3.5" "User Commands"
 .SH NAME
 bison \- GNU Project parser generator (yacc replacement)
 .SH SYNOPSIS
 .B bison
-[\fIOPTION\fR]... \fIFILE\fR
+[\fI\,OPTION\/\fR]... \fI\,FILE\/\fR
 .SH DESCRIPTION
 .I Bison
 is a parser generator in the style of
@@ -43,7 +43,7 @@
 is adapted from the node
 .B Invocation
 in the
-.B bison.texinfo
+.B bison.texi
 manual, which should be taken as authoritative.
 .PP
 .I Bison
@@ -59,12 +59,11 @@
 .BR = .
 .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.
+LALR(1), IELR(1), or canonical LR(1) parser tables.
 .PP
 Mandatory arguments to long options are mandatory for short options too.
 The same is true for optional arguments.
-.SS "Operation modes:"
+.SS "Operation Modes:"
 .TP
 \fB\-h\fR, \fB\-\-help\fR
 display this help and exit
@@ -74,136 +73,173 @@
 .TP
 \fB\-\-print\-localedir\fR
 output directory containing locale\-dependent data
+and exit
 .TP
 \fB\-\-print\-datadir\fR
 output directory containing skeletons and XSLT
+and exit
 .TP
-\fB\-y\fR, \fB\-\-yacc\fR
-emulate POSIX Yacc
+\fB\-u\fR, \fB\-\-update\fR
+apply fixes to the source grammar file and exit
 .TP
-\fB\-W\fR, \fB\-\-warnings\fR[=\fICATEGORY\fR]
+\fB\-f\fR, \fB\-\-feature\fR[=\fI\,FEATURES\/\fR]
+activate miscellaneous features
+.SS "FEATURES is a list of comma separated words that can include:"
+.TP
+caret, diagnostics\-show\-caret
+show errors with carets
+.TP
+fixit, diagnostics\-parseable\-fixits
+show machine\-readable fixes
+.TP
+syntax\-only
+do not generate any file
+.TP
+all
+all of the above
+.TP
+none
+disable all of the above
+.SS "Diagnostics:"
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR[=\fI\,CATEGORY\/\fR]
 report the warnings falling in CATEGORY
 .TP
-\fB\-f\fR, \fB\-\-feature\fR[=\fIFEATURE\fR]
-activate miscellaneous features
-.SS "Parser:"
+\fB\-\-color\fR[=\fI\,WHEN\/\fR]
+whether to colorize the diagnostics
 .TP
-\fB\-L\fR, \fB\-\-language\fR=\fILANGUAGE\fR
+\fB\-\-style\fR=\fI\,FILE\/\fR
+specify the CSS FILE for colorizer diagnostics
+.SS "Warning categories include:"
+.TP
+conflicts\-sr
+S/R conflicts (enabled by default)
+.TP
+conflicts\-rr
+R/R conflicts (enabled by default)
+.TP
+dangling\-alias
+string aliases not attached to a symbol
+.TP
+deprecated
+obsolete constructs
+.TP
+empty\-rule
+empty rules without %empty
+.TP
+midrule\-values
+unset or unused midrule values
+.TP
+precedence
+useless precedence and associativity
+.TP
+yacc
+incompatibilities with POSIX Yacc
+.TP
+other
+all other warnings (enabled by default)
+.TP
+all
+all the warnings except 'dangling\-alias' and 'yacc'
+.TP
+no\-CATEGORY
+turn off warnings in CATEGORY
+.TP
+none
+turn off all the warnings
+.TP
+error[=CATEGORY]
+treat warnings as errors
+.SS "WHEN can be one of the following:"
+.TP
+always, yes
+colorize the output
+.TP
+never, no
+don't colorize the output
+.TP
+auto, tty
+colorize if the output device is a tty
+.SS "Tuning the Parser:"
+.TP
+\fB\-L\fR, \fB\-\-language\fR=\fI\,LANGUAGE\/\fR
 specify the output programming language
 .TP
-\fB\-S\fR, \fB\-\-skeleton\fR=\fIFILE\fR
+\fB\-S\fR, \fB\-\-skeleton\fR=\fI\,FILE\/\fR
 specify the skeleton to use
 .TP
 \fB\-t\fR, \fB\-\-debug\fR
-instrument the parser for debugging
+instrument the parser for tracing
+same as '\-Dparse.trace'
 .TP
 \fB\-\-locations\fR
 enable location support
 .TP
-\fB\-D\fR, \fB\-\-define=NAME\fR[=\fIVALUE\fR]
-similar to '%define NAME "VALUE"'
+\fB\-D\fR, \fB\-\-define=NAME\fR[=\fI\,VALUE\/\fR]
+similar to '%define NAME VALUE'
 .TP
-\fB\-F\fR, \fB\-\-force\-define=NAME\fR[=\fIVALUE\fR]
-override '%define NAME "VALUE"'
+\fB\-F\fR, \fB\-\-force\-define=NAME\fR[=\fI\,VALUE\/\fR]
+override '%define NAME VALUE'
 .TP
-\fB\-p\fR, \fB\-\-name\-prefix\fR=\fIPREFIX\fR
+\fB\-p\fR, \fB\-\-name\-prefix\fR=\fI\,PREFIX\/\fR
 prepend PREFIX to the external symbols
-deprecated by '\-Dapi.prefix=PREFIX'
+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]
+\fB\-y\fR, \fB\-\-yacc\fR
+emulate POSIX Yacc
+.SS "Output Files:"
+.TP
+\fB\-\-defines\fR[=\fI\,FILE\/\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
+\fB\-r\fR, \fB\-\-report\fR=\fI\,THINGS\/\fR
 also produce details on the automaton
 .TP
-\fB\-\-report\-file\fR=\fIFILE\fR
+\fB\-\-report\-file\fR=\fI\,FILE\/\fR
 write report to FILE
 .TP
 \fB\-v\fR, \fB\-\-verbose\fR
-same as `\-\-report=state'
+same as '\-\-report=state'
 .TP
-\fB\-b\fR, \fB\-\-file\-prefix\fR=\fIPREFIX\fR
+\fB\-b\fR, \fB\-\-file\-prefix\fR=\fI\,PREFIX\/\fR
 specify a PREFIX for output files
 .TP
-\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
+\fB\-o\fR, \fB\-\-output\fR=\fI\,FILE\/\fR
 leave output to FILE
 .TP
-\fB\-g\fR, \fB\-\-graph\fR[=\fIFILE\fR]
+\fB\-g\fR, \fB\-\-graph\fR[=\fI\,FILE\/\fR]
 also output a graph of the automaton
 .TP
-\fB\-x\fR, \fB\-\-xml\fR[=\fIFILE\fR]
+\fB\-x\fR, \fB\-\-xml\fR[=\fI\,FILE\/\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'
+states
 describe the states
 .TP
-`itemset'
+itemsets
 complete the core item sets with their closure
 .TP
-`lookahead'
+lookaheads
 explicitly associate lookahead tokens to items
 .TP
-`solved'
+solved
 describe shift/reduce conflicts solving
 .TP
-`all'
+all
 include all the above information
 .TP
-`none'
+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"
@@ -212,13 +248,10 @@
 GNU Bison home page: <http://www.gnu.org/software/bison/>.
 .br
 General help using GNU software: <http://www.gnu.org/gethelp/>.
-.PP
-.br
-Report translation bugs to <http://translationproject.org/team/>.
 .br
 For complete documentation, run: info bison.
 .SH COPYRIGHT
-Copyright \(co 2012 Free Software Foundation, Inc.
+Copyright \(co 2019 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.
diff --git a/doc/bison.help b/doc/bison.help
new file mode 100644
index 0000000..d163329
--- /dev/null
+++ b/doc/bison.help
@@ -0,0 +1,94 @@
+bison (GNU Bison) 3.5
+Written by Robert Corbett and Richard Stallman.
+
+Copyright (C) 2019 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.
+Usage: bison [OPTION]... FILE
+Generate a deterministic LR or generalized LR (GLR) parser employing
+LALR(1), IELR(1), or canonical LR(1) parser tables.
+
+Mandatory arguments to long options are mandatory for short options too.
+The same is true for optional arguments.
+
+Operation Modes:
+  -h, --help                 display this help and exit
+  -V, --version              output version information and exit
+      --print-localedir      output directory containing locale-dependent data
+                             and exit
+      --print-datadir        output directory containing skeletons and XSLT
+                             and exit
+  -u, --update               apply fixes to the source grammar file and exit
+  -f, --feature[=FEATURES]   activate miscellaneous features
+
+FEATURES is a list of comma separated words that can include:
+  caret, diagnostics-show-caret
+                    show errors with carets
+  fixit, diagnostics-parseable-fixits
+                    show machine-readable fixes
+  syntax-only       do not generate any file
+  all               all of the above
+  none              disable all of the above
+
+Diagnostics:
+  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY
+      --color[=WHEN]         whether to colorize the diagnostics
+      --style=FILE           specify the CSS FILE for colorizer diagnostics
+
+Warning categories include:
+  conflicts-sr      S/R conflicts (enabled by default)
+  conflicts-rr      R/R conflicts (enabled by default)
+  dangling-alias    string aliases not attached to a symbol
+  deprecated        obsolete constructs
+  empty-rule        empty rules without %empty
+  midrule-values    unset or unused midrule values
+  precedence        useless precedence and associativity
+  yacc              incompatibilities with POSIX Yacc
+  other             all other warnings (enabled by default)
+  all               all the warnings except 'dangling-alias' and 'yacc'
+  no-CATEGORY       turn off warnings in CATEGORY
+  none              turn off all the warnings
+  error[=CATEGORY]  treat warnings as errors
+
+WHEN can be one of the following:
+  always, yes  colorize the output
+  never, no    don't colorize the output
+  auto, tty    colorize if the output device is a tty
+
+Tuning the Parser:
+  -L, --language=LANGUAGE          specify the output programming language
+  -S, --skeleton=FILE              specify the skeleton to use
+  -t, --debug                      instrument the parser for tracing
+                                   same as '-Dparse.trace'
+      --locations                  enable location support
+  -D, --define=NAME[=VALUE]        similar to '%define NAME VALUE'
+  -F, --force-define=NAME[=VALUE]  override '%define NAME VALUE'
+  -p, --name-prefix=PREFIX         prepend PREFIX to the external symbols
+                                   deprecated by '-Dapi.prefix={PREFIX}'
+  -l, --no-lines                   don't generate '#line' directives
+  -k, --token-table                include a table of token names
+  -y, --yacc                       emulate POSIX Yacc
+
+Output Files:
+      --defines[=FILE]       also produce a header file
+  -d                         likewise but cannot specify FILE (for POSIX Yacc)
+  -r, --report=THINGS        also produce details on the automaton
+      --report-file=FILE     write report to FILE
+  -v, --verbose              same as '--report=state'
+  -b, --file-prefix=PREFIX   specify a PREFIX for output files
+  -o, --output=FILE          leave output to FILE
+  -g, --graph[=FILE]         also output a graph of the automaton
+  -x, --xml[=FILE]           also output an XML report of the automaton
+
+THINGS is a list of comma separated words that can include:
+  states      describe the states
+  itemsets    complete the core item sets with their closure
+  lookaheads  explicitly associate lookahead tokens to items
+  solved      describe shift/reduce conflicts solving
+  all         include all the above information
+  none        disable the report
+
+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/>.
+For complete documentation, run: info bison.
diff --git a/doc/bison.info b/doc/bison.info
index 9cdf453..989f1dd 100644
--- a/doc/bison.info
+++ b/doc/bison.info
Binary files differ
diff --git a/doc/bison.info.bak b/doc/bison.info.bak
new file mode 100644
index 0000000..5ce9611
--- /dev/null
+++ b/doc/bison.info.bak
Binary files differ
diff --git a/doc/bison.texi b/doc/bison.texi
index a508b9c..60cd0ab 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -1,9 +1,54 @@
 \input texinfo @c -*-texinfo-*-
 @comment %**start of header
 @setfilename bison.info
+@documentencoding UTF-8
 @include version.texi
 @settitle Bison @value{VERSION}
-@setchapternewpage odd
+
+@tex
+\gdef\rgbWarning{0.50 0 0.50}
+\gdef\colorWarning{%
+ \setcolor{\rgbWarning}%
+}
+\gdef\rgbError{0.80 0 0}
+\gdef\colorError{%
+ \setcolor{\rgbError}%
+}
+\gdef\rgbNotice{0 0 0.80}
+\gdef\colorNotice{%
+ \setcolor{\rgbNotice}%
+}
+\gdef\colorOff{%
+ \setcolor{\maincolor}%
+}
+@end tex
+
+@ifnottex
+@macro colorWarning
+@inlineraw{html, <b style="color:darkviolet">}
+@end macro
+@macro colorError
+@inlineraw{html, <b style="color:red">}
+@end macro
+@macro colorNotice
+@inlineraw{html, <b style="color:darkcyan">}
+@end macro
+@macro colorOff
+@inlineraw{html, </b>}
+@end macro
+@end ifnottex
+
+@macro dwarning{text}
+@colorWarning{}\text\@colorOff{}
+@end macro
+
+@macro derror{text}
+@colorError{}\text\@colorOff{}
+@end macro
+
+@macro dnotice{text}
+@colorNotice{}\text\@colorOff{}
+@end macro
 
 @finalout
 
@@ -11,6 +56,7 @@
 @c This edition has been formatted so that you can format and print it in
 @c the smallbook format.
 @c @smallbook
+@c @setchapternewpage odd
 
 @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.
@@ -30,25 +76,23 @@
 
 @copying
 
-This manual (@value{UPDATED}) is for GNU Bison (version
-@value{VERSION}), the GNU parser generator.
+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.
+Copyright @copyright{} 1988-1993, 1995, 1998-2015, 2018-2019 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.''
+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.''
+(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
 
@@ -86,8 +130,8 @@
 @end ifnottex
 
 @menu
-* Introduction::
-* Conditions::
+* Introduction::        What GNU Bison is.
+* Conditions::          Conditions for using Bison and its output.
 * Copying::             The GNU General Public License says
                           how you can copy and share Bison.
 
@@ -105,10 +149,11 @@
 * Debugging::           Understanding or debugging Bison parsers.
 * Invocation::          How to run Bison (to produce the parser implementation).
 * Other Languages::     Creating C++ and Java parsers.
+* History::             How Bison came to be
 * 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.
+* GNU Free Documentation License:: Copying and sharing this manual
 * Bibliography::        Publications cited in this manual.
 * Index of Terms::      Cross-references to the text.
 
@@ -135,12 +180,13 @@
 
 * 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.
+* GLR Semantic Actions::   Considerations for semantic values and deferred actions.
+* Semantic Predicates::    Controlling a parse with arbitrary computations.
+* Compiler Requirements for GLR::  GLR parsers require a modern C compiler.
 
 Examples
 
-* RPN Calc::               Reverse polish notation calculator;
+* RPN Calc::               Reverse Polish Notation Calculator;
                              a first example with no operator precedence.
 * Infix Calc::             Infix (algebraic) notation calculator.
                              Operator precedence is introduced.
@@ -162,9 +208,9 @@
 
 Grammar Rules for @code{rpcalc}
 
-* Rpcalc Input::
-* Rpcalc Line::
-* Rpcalc Expr::
+* Rpcalc Input::            Explanation of the @code{input} nonterminal
+* Rpcalc Line::             Explanation of the @code{line} nonterminal
+* Rpcalc Expr::             Explanation of the @code{expr} nonterminal
 
 Location Tracking Calculator: @code{ltcalc}
 
@@ -177,13 +223,14 @@
 * Mfcalc Declarations::    Bison declarations for multi-function calculator.
 * Mfcalc Rules::           Grammar rules for the calculator.
 * Mfcalc Symbol Table::    Symbol table management subroutines.
+* Mfcalc Lexer::           The lexical analyzer.
+* Mfcalc Main::            The controlling function.
 
 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.
@@ -198,21 +245,32 @@
 * Grammar Rules::         Syntax and usage of the grammar rules section.
 * Epilogue::              Syntax and usage of the epilogue.
 
+Grammar Rules
+
+* Rules Syntax::   Syntax of the rules.
+* Empty Rules::    Symbols that can match the empty string.
+* Recursion::      Writing recursive rules.
+
+
 Defining Language Semantics
 
 * Value Type::        Specifying one data type for all semantic values.
 * Multiple Types::    Specifying several alternative data types.
+* Type Generation::   Generating the semantic value type.
+* Union Decl::        Declaring the set of all semantic value types.
+* Structured Value Type::  Providing a structured semantic value type.
 * 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.
+* Midrule 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
+Actions in Midrule
 
-* 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.
+* Using Midrule Actions::       Putting an action in the middle of a rule.
+* Typed Midrule Actions::       Specifying the semantic type of their values.
+* Midrule Action Translation::  How midrule actions are actually processed.
+* Midrule Conflicts::           Midrule actions can cause conflicts.
 
 Tracking Locations
 
@@ -225,8 +283,8 @@
 * 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.
+* Symbol Decls::      Summary of the Syntax of Symbol Declarations.
 * Initial Action Decl::  Code run before parsing starts.
 * Destructor Decl::   Declaring how symbols are freed.
 * Printer Decl::      Declaring how symbol values are displayed.
@@ -255,6 +313,7 @@
 The Lexical Analyzer Function @code{yylex}
 
 * Calling Convention::  How @code{yyparse} calls @code{yylex}.
+* Tokens from Literals:: Finding token types from string aliases.
 * 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
@@ -279,7 +338,8 @@
 Operator Precedence
 
 * Why Precedence::    An example showing why precedence is needed.
-* Using Precedence::  How to specify precedence in Bison grammars.
+* Using Precedence::  How to specify precedence and associativity.
+* Precedence Only::   How to specify precedence only.
 * Precedence Examples::  How these features are used in the previous example.
 * How Precedence::    How they work.
 * Non Operators::     Using precedence for general conflicts.
@@ -307,9 +367,9 @@
 
 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
+* 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
 
@@ -318,6 +378,13 @@
 * Option Cross Key::  Alphabetical list of long options.
 * Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
 
+Bison Options
+
+* Operation Modes::    Options controlling the global behavior of @command{bison}
+* Diagnostics::        Options controlling the diagnostics
+* Tuning the Parser::  Options changing the generated parsers
+* Output Files::       Options controlling the output
+
 Parsers Written In Other Languages
 
 * C++ Parsers::                 The interface to generate C++ parser classes
@@ -325,18 +392,21 @@
 
 C++ Parsers
 
+* A Simple C++ Example::        A short introduction to C++ parsers
 * C++ Bison Interface::         Asking for C++ parser generation
+* C++ Parser Interface::        Instantiating and running the parser
 * 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
+* C++ position::                  One point in the source file
+* C++ location::                  Two points in the source file
+* Exposing the Location Classes:: Using the Bison location class in your
+                                  project
+* User Defined Location Type::    Required interface for locations
 
 A Complete C++ Example
 
@@ -349,14 +419,23 @@
 Java Parsers
 
 * Java Bison Interface::        Asking for Java parser generation
-* Java Semantic Values::        %type and %token vs. Java
+* Java Semantic Values::        %token and %nterm 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 Push Parser Interface::  Instantiating and running the a push parser
 * Java Differences::            Differences between C/C++ and Java Grammars
 * Java Declarations Summary::   List of Bison declarations used with Java
 
+A Brief History of the Greater Ungulates
+
+* Yacc::                        The original Yacc
+* yacchack::                    An obscure early implementation of reentrancy
+* Byacc::                       Berkeley Yacc
+* Bison::                       This program
+* Other Ungulates::             Similar programs
+
 Frequently Asked Questions
 
 * Memory Exhausted::            Breaking the Stack Limits
@@ -364,6 +443,7 @@
 * Strings are Destroyed::       @code{yylval} Loses Track of Strings
 * Implementing Gotos/Loops::    Control Flow in the Calculator
 * Multiple start-symbols::      Factoring closely related grammars
+* Enabling Relocatability::     Moving Bison/using it through network shares
 * Secure?  Conform?::           Is Bison POSIX safe?
 * I can't build Bison::         Troubleshooting
 * Where can I find help?::      Troubleshouting
@@ -374,7 +454,7 @@
 
 Copying This Manual
 
-* Copying This Manual::         License for copying this manual.
+* GNU Free Documentation License:: Copying and sharing this manual
 
 @end detailmenu
 @end menu
@@ -383,20 +463,17 @@
 @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.
+@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), 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.
+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, C++
+or Java 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
@@ -417,39 +494,37 @@
 @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 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 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.
+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.
+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.
+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
@@ -458,9 +533,9 @@
 @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.
+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,
@@ -510,10 +585,9 @@
 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.
+@xref{Mysterious Conflicts}, for more information on this.  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
@@ -746,41 +820,39 @@
 (@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.
+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.
+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.
+* GLR Semantic Actions::   Considerations for semantic values and deferred actions.
+* Semantic Predicates::    Controlling a parse with arbitrary computations.
+* Compiler Requirements for GLR::  GLR parsers require a modern C compiler.
 @end menu
 
 @node Simple GLR Parsers
@@ -807,13 +879,11 @@
 @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:
+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;
@@ -828,62 +898,55 @@
 @end example
 
 @noindent
-(These declarations are contrived, but they are syntactically
-valid, and more-complicated cases can come up in practical programs.)
+(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.
+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.
+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.
+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.
+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.
+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.
+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.
@@ -897,10 +960,7 @@
 @end group
 
 %%
-
-@group
 type_decl: TYPE ID '=' type ';' ;
-@end group
 
 @group
 type:
@@ -949,32 +1009,29 @@
 @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.
+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
+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.
+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.
+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
@@ -1005,7 +1062,7 @@
 %%
 
 prog:
-  /* Nothing.  */
+  %empty
 | prog stmt   @{ printf ("\n"); @}
 ;
 
@@ -1147,6 +1204,10 @@
 @node GLR Semantic Actions
 @subsection GLR Semantic Actions
 
+The nature of GLR parsing and the structure of the generated
+parsers give rise to certain restrictions on semantic values and actions.
+
+@subsubsection Deferred semantic actions
 @cindex deferred semantic actions
 By definition, a deferred semantic action is not performed at the same time as
 the associated reduction.
@@ -1159,14 +1220,13 @@
 @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}.
+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}
@@ -1180,6 +1240,7 @@
 to invoke @code{yyclearin} (@pxref{Action Features}) or to attempt to free
 memory referenced by @code{yylval}.
 
+@subsubsection YYERROR
 @findex YYERROR
 @cindex GLR parsers and @code{YYERROR}
 Another Bison feature requiring special consideration is @code{YYERROR}
@@ -1187,13 +1248,79 @@
 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.
+The effect in a deferred action is similar, but the precise point of the
+error is undefined;  instead, the parser reverts to deterministic operation,
+selecting an unspecified stack on which to continue with a syntax error.
+In a semantic predicate (see @ref{Semantic Predicates}) during nondeterministic
+parsing, @code{YYERROR} silently prunes
+the parse that invoked the test.
 
-Also, see @ref{Location Default Action, ,Default Action for Locations}, which
-describes a special usage of @code{YYLLOC_DEFAULT} in GLR parsers.
+@subsubsection Restrictions on semantic values and locations
+GLR parsers require that you use POD (Plain Old Data) types for
+semantic values and location types when using the generated parsers as
+C++ code.
 
-@node Compiler Requirements
+@node Semantic Predicates
+@subsection Controlling a Parse with Arbitrary Predicates
+@findex %?
+@cindex Semantic predicates in GLR parsers
+
+In addition to the @code{%dprec} and @code{%merge} directives,
+GLR parsers
+allow you to reject parses on the basis of arbitrary computations executed
+in user code, without having Bison treat this rejection as an error
+if there are alternative parses.  For example,
+
+@example
+widget:
+  %?@{  new_syntax @} "widget" id new_args  @{ $$ = f($3, $4); @}
+| %?@{ !new_syntax @} "widget" id old_args  @{ $$ = f($3, $4); @}
+;
+@end example
+
+@noindent
+is one way to allow the same parser to handle two different syntaxes for
+widgets.  The clause preceded by @code{%?} is treated like an ordinary
+action, except that its text is treated as an expression and is always
+evaluated immediately (even when in nondeterministic mode).  If the
+expression yields 0 (false), the clause is treated as a syntax error,
+which, in a nondeterministic parser, causes the stack in which it is reduced
+to die.  In a deterministic parser, it acts like YYERROR.
+
+As the example shows, predicates otherwise look like semantic actions, and
+therefore you must be take them into account when determining the numbers
+to use for denoting the semantic values of right-hand side symbols.
+Predicate actions, however, have no defined value, and may not be given
+labels.
+
+There is a subtle difference between semantic predicates and ordinary
+actions in nondeterministic mode, since the latter are deferred.
+For example, we could try to rewrite the previous example as
+
+@example
+widget:
+  @{ if (!new_syntax) YYERROR; @}
+    "widget" id new_args  @{ $$ = f($3, $4); @}
+|  @{ if (new_syntax) YYERROR; @}
+    "widget" id old_args   @{ $$ = f($3, $4); @}
+;
+@end example
+
+@noindent
+(reversing the sense of the predicate tests to cause an error when they are
+false).  However, this
+does @emph{not} have the same effect if @code{new_args} and @code{old_args}
+have overlapping syntax.
+Since the midrule actions testing @code{new_syntax} are deferred,
+a GLR parser first encounters the unresolved ambiguous reduction
+for cases where @code{new_args} and @code{old_args} recognize the same string
+@emph{before} performing the tests of @code{new_syntax}.  It therefore
+reports an error.
+
+Finally, be careful in writing predicates: deferred actions have not been
+evaluated, so that using them in a predicate will have undefined effects.
+
+@node Compiler Requirements for GLR
 @subsection Considerations when Compiling GLR Parsers
 @cindex @code{inline}
 @cindex GLR parsers and @code{inline}
@@ -1306,13 +1433,13 @@
 
 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.
+reserved by those headers.  On some non-GNU hosts, @code{<limits.h>},
+@code{<stddef.h>}, @code{<stdint.h>} (if available), and @code{<stdlib.h>}
+are included to declare memory allocators and integer types and constants.
 @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}).
+if you define @code{YYDEBUG} (@pxref{Tracing, ,Tracing Your Parser}) or
+@code{YYSTACK_USE_ALLOCA} (@pxref{Table of Symbols}) to a nonzero value.
 
 @node Stages
 @section Stages in Using Bison
@@ -1408,7 +1535,7 @@
 @cindex examples, simple
 
 Now we show and explain several sample programs written using Bison: a
-reverse polish notation calculator, an algebraic (infix) notation
+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.
@@ -1418,7 +1545,7 @@
 source file to try them.
 
 @menu
-* RPN Calc::               Reverse polish notation calculator;
+* RPN Calc::               Reverse Polish Notation Calculator;
                              a first example with no operator precedence.
 * Infix Calc::             Infix (algebraic) notation calculator.
                              Operator precedence is introduced.
@@ -1431,13 +1558,12 @@
 
 @node RPN Calc
 @section Reverse Polish Notation Calculator
-@cindex reverse polish notation
-@cindex polish notation calculator
+@cindex Reverse Polish Notation
 @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
+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.
 
@@ -1457,35 +1583,32 @@
 @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{}*/}.
+Here are the C and Bison declarations for the Reverse Polish Notation
+calculator.  As in C, comments are placed between @samp{/*@dots{}*/} or
+after @samp{//}.
 
+@comment file: rpcalc.y
 @example
-/* Reverse polish notation calculator.  */
+/* Reverse Polish Notation calculator. */
 
+@group
 %@{
-  #define YYSTYPE double
+  #include <stdio.h>
   #include <math.h>
   int yylex (void);
   void yyerror (char const *);
 %@}
+@end group
 
+%define api.value.type @{double@}
 %token NUM
 
-%% /* Grammar rules and actions follow.  */
+%% /* 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}.
 
@@ -1495,24 +1618,35 @@
 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.
+The second section, Bison declarations, provides information to Bison about
+the tokens and their types (@pxref{Bison Declarations, ,The Bison
+Declarations Section}).
+
+The @code{%define} directive defines the variable @code{api.value.type},
+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{api.value.type} is defined as; if you
+don't define it, @code{int} is the default.  Because we specify
+@samp{@{double@}}, each token and each expression has an associated value,
+which is a floating point number.  C code can use @code{YYSTYPE} to refer to
+the value @code{api.value.type}.
+
+Each terminal symbol that is not a single-character literal must be
+declared.  (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.
+Here are the grammar rules for the Reverse Polish Notation calculator.
 
+@comment file: rpcalc.y
 @example
 @group
 input:
-  /* empty */
+  %empty
 | input line
 ;
 @end group
@@ -1526,13 +1660,13 @@
 
 @group
 exp:
-  NUM           @{ $$ = $1;           @}
+  NUM
 | 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    */
+| exp 'n'       @{ $$ = -$1;          @}  /* Unary minus   */
 ;
 @end group
 %%
@@ -1557,9 +1691,9 @@
 rule are referred to as @code{$1}, @code{$2}, and so on.
 
 @menu
-* Rpcalc Input::
-* Rpcalc Line::
-* Rpcalc Expr::
+* Rpcalc Input::            Explanation of the @code{input} nonterminal
+* Rpcalc Line::             Explanation of the @code{line} nonterminal
+* Rpcalc Expr::             Explanation of the @code{expr} nonterminal
 @end menu
 
 @node Rpcalc Input
@@ -1569,7 +1703,7 @@
 
 @example
 input:
-  /* empty */
+  %empty
 | input line
 ;
 @end example
@@ -1584,8 +1718,9 @@
 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.
+It's conventional to put an empty alternative first and to use the
+(optional) @code{%empty} directive, or to write the comment @samp{/* empty
+*/} in it (@pxref{Empty Rules}).
 
 The second alternate rule (@code{input line}) handles all nontrivial input.
 It means, ``After reading any number of lines, read one more line if
@@ -1627,9 +1762,10 @@
 @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.
+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:
@@ -1644,9 +1780,9 @@
 equally well have written them separately:
 
 @example
-exp: NUM ;
-exp: exp exp '+'     @{ $$ = $1 + $2; @};
-exp: exp exp '-'     @{ $$ = $1 - $2; @};
+exp: NUM;
+exp: exp exp '+'  @{ $$ = $1 + $2; @};
+exp: exp exp '-'  @{ $$ = $1 - $2; @};
 @dots{}
 @end example
 
@@ -1655,17 +1791,21 @@
 @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}.
+@code{$3}.  The first rule relies on the implicit default action: @samp{@{
+$$ = $1; @}}.
 
-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:
+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{} ;
@@ -1712,23 +1852,24 @@
 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}}.)
+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}, whose value was defined
+at the beginning of the grammar via @samp{%define api.value.type
+@{double@}}; @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:
 
+@comment file: rpcalc.y
 @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.  */
+   and tabs, and returns 0 for end-of-input. */
 
 #include <ctype.h>
 @end group
@@ -1737,14 +1878,13 @@
 int
 yylex (void)
 @{
-  int c;
-
-  /* Skip white space.  */
-  while ((c = getchar ()) == ' ' || c == '\t')
-    continue;
+  int c = getchar ();
+  /* Skip white space. */
+  while (c == ' ' || c == '\t')
+    c = getchar ();
 @end group
 @group
-  /* Process numbers.  */
+  /* Process numbers. */
   if (c == '.' || isdigit (c))
     @{
       ungetc (c, stdin);
@@ -1753,11 +1893,12 @@
     @}
 @end group
 @group
-  /* Return end-of-input.  */
-  if (c == EOF)
+  /* Return end-of-input. */
+  else if (c == EOF)
     return 0;
-  /* Return a single char.  */
-  return c;
+  /* Return a single char. */
+  else
+    return c;
 @}
 @end group
 @end example
@@ -1771,6 +1912,7 @@
 kept to the bare minimum.  The only requirement is that it call
 @code{yyparse} to start the process of parsing.
 
+@comment file: rpcalc.y
 @example
 @group
 int
@@ -1791,13 +1933,12 @@
 @code{yyerror} (@pxref{Interface, ,Parser C-Language Interface}), so
 here is the definition we will use:
 
+@comment file: rpcalc.y
 @example
-@group
 #include <stdio.h>
-@end group
 
 @group
-/* Called by yyparse on error.  */
+/* Called by yyparse on error. */
 void
 yyerror (char const *s)
 @{
@@ -1831,7 +1972,7 @@
 to convert it into a parser implementation file:
 
 @example
-bison @var{file}.y
+$ @kbd{bison @var{file}.y}
 @end example
 
 @noindent
@@ -1875,15 +2016,15 @@
 @example
 $ @kbd{rpcalc}
 @kbd{4 9 +}
-13
+@result{} 13
 @kbd{3 7 + 3 4 5 *+-}
--13
+@result{} -13
 @kbd{3 7 + 3 4 5 * + - n}              @r{Note the unary minus, @samp{n}}
-13
+@result{} 13
 @kbd{5 6 / 4 n +}
--3.166666667
+@result{} -3.166666667
 @kbd{3 4 ^}                            @r{Exponentiation}
-81
+@result{} 81
 @kbd{^D}                               @r{End-of-file indicator}
 $
 @end example
@@ -1900,11 +2041,10 @@
 @file{calc.y}, an infix desk-top calculator.
 
 @example
-/* Infix notation calculator.  */
+/* Infix notation calculator. */
 
 @group
 %@{
-  #define YYSTYPE double
   #include <math.h>
   #include <stdio.h>
   int yylex (void);
@@ -1913,18 +2053,19 @@
 @end group
 
 @group
-/* Bison declarations.  */
+/* Bison declarations. */
+%define api.value.type @{double@}
 %token NUM
 %left '-' '+'
 %left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation */
+%precedence NEG   /* negation--unary minus */
+%right '^'        /* exponentiation */
 @end group
 
-%% /* The grammar follows.  */
+%% /* The grammar follows. */
 @group
 input:
-  /* empty */
+  %empty
 | input line
 ;
 @end group
@@ -1938,7 +2079,7 @@
 
 @group
 exp:
-  NUM                @{ $$ = $1;           @}
+  NUM
 | exp '+' exp        @{ $$ = $1 + $3;      @}
 | exp '-' exp        @{ $$ = $1 - $3;      @}
 | exp '*' exp        @{ $$ = $1 * $3;      @}
@@ -1961,15 +2102,16 @@
 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
+associativity/precedence.  (These tokens are single-character literals, which
 ordinarily don't need to be declared.  We declare them here to specify
-the associativity.)
+the associativity/precedence.)
 
 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
+by @samp{*} and @samp{/}, and so on.  Unary minus is not associative,
+only precedence matters (@code{%precedence}. @xref{Precedence, ,Operator
 Precedence}.
 
 The other important new feature is the @code{%prec} in the grammar
@@ -2059,24 +2201,24 @@
 the same as the declarations for the infix notation calculator.
 
 @example
-/* Location tracking calculator.  */
+/* Location tracking calculator. */
 
 %@{
-  #define YYSTYPE int
   #include <math.h>
   int yylex (void);
   void yyerror (char const *);
 %@}
 
-/* Bison declarations.  */
+/* Bison declarations. */
+%define api.value.type @{int@}
 %token NUM
 
 %left '-' '+'
 %left '*' '/'
-%left NEG
+%precedence NEG
 %right '^'
 
-%% /* The grammar follows.  */
+%% /* The grammar follows. */
 @end example
 
 @noindent
@@ -2103,7 +2245,7 @@
 @example
 @group
 input:
-  /* empty */
+  %empty
 | input line
 ;
 @end group
@@ -2117,7 +2259,7 @@
 
 @group
 exp:
-  NUM           @{ $$ = $1; @}
+  NUM
 | exp '+' exp   @{ $$ = $1 + $3; @}
 | exp '-' exp   @{ $$ = $1 - $3; @}
 | exp '*' exp   @{ $$ = $1 * $3; @}
@@ -2175,19 +2317,19 @@
 @end group
 
 @group
-  /* Skip white space.  */
+  /* Skip white space. */
   while ((c = getchar ()) == ' ' || c == '\t')
     ++yylloc.last_column;
 @end group
 
 @group
-  /* Step.  */
+  /* Step. */
   yylloc.first_line = yylloc.last_line;
   yylloc.first_column = yylloc.last_column;
 @end group
 
 @group
-  /* Process numbers.  */
+  /* Process numbers. */
   if (isdigit (c))
     @{
       yylval = c - '0';
@@ -2202,12 +2344,12 @@
     @}
 @end group
 
-  /* Return end-of-input.  */
+  /* Return end-of-input. */
   if (c == EOF)
     return 0;
 
 @group
-  /* Return a single char, and update location.  */
+  /* Return a single char, and update location. */
   if (c == '\n')
     @{
       ++yylloc.last_line;
@@ -2274,19 +2416,23 @@
 Here is a sample session with the multi-function calculator:
 
 @example
+@group
 $ @kbd{mfcalc}
 @kbd{pi = 3.141592653589}
-3.1415926536
+@result{} 3.1415926536
+@end group
+@group
 @kbd{sin(pi)}
-0.0000000000
+@result{} 0.0000000000
+@end group
 @kbd{alpha = beta1 = 2.3}
-2.3000000000
+@result{} 2.3000000000
 @kbd{alpha}
-2.3000000000
+@result{} 2.3000000000
 @kbd{ln(alpha)}
-0.8329091229
+@result{} 0.8329091229
 @kbd{exp(ln(beta1))}
-2.3000000000
+@result{} 2.3000000000
 $
 @end example
 
@@ -2296,6 +2442,8 @@
 * Mfcalc Declarations::    Bison declarations for multi-function calculator.
 * Mfcalc Rules::           Grammar rules for the calculator.
 * Mfcalc Symbol Table::    Symbol table management subroutines.
+* Mfcalc Lexer::           The lexical analyzer.
+* Mfcalc Main::            The controlling function.
 @end menu
 
 @node Mfcalc Declarations
@@ -2307,29 +2455,25 @@
 @example
 @group
 %@{
-  #include <math.h>  /* For math functions, cos(), sin(), etc.  */
-  #include "calc.h"  /* Contains definition of `symrec'.  */
+  #include <stdio.h>  /* For printf, etc. */
+  #include <math.h>   /* For pow, used in the grammar. */
+  #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
+%define api.value.type union /* Generate YYSTYPE from these types: */
+%token <double>  NUM     /* Double precision number. */
+%token <symrec*> VAR FUN /* Symbol table pointer: variable/function. */
+%nterm <double>  exp
 
 @group
-%right '='
+%precedence '='
 %left '-' '+'
 %left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation */
+%precedence NEG /* negation--unary minus */
+%right '^'      /* exponentiation */
 @end group
 @end example
 
@@ -2337,37 +2481,37 @@
 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}.
+The special @code{union} value assigned to the @code{%define} variable
+@code{api.value.type} specifies that the symbols are defined with their data
+types.  Bison will generate an appropriate definition of @code{YYSTYPE} to
+store these values.
 
-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).
+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{FUN}, and @code{exp}.  Their declarations are
+augmented with their data type (placed between angle brackets).  For
+instance, values of @code{NUM} are stored in @code{double}.
 
-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}.
+The Bison construct @code{%nterm} is used for declaring nonterminal symbols,
+just as @code{%token} is used for declaring token types.  Previously we did
+not use @code{%nterm} 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.
+those which mention @code{VAR} or @code{FUN}, are new.
 
 @comment file: mfcalc.y: 3
 @example
-%% /* The grammar follows.  */
+%% /* The grammar follows. */
 @group
 input:
-  /* empty */
+  %empty
 | input line
 ;
 @end group
@@ -2382,10 +2526,10 @@
 
 @group
 exp:
-  NUM                @{ $$ = $1;                         @}
+  NUM
 | VAR                @{ $$ = $1->value.var;              @}
 | VAR '=' exp        @{ $$ = $3; $1->value.var = $3;     @}
-| FNCT '(' exp ')'   @{ $$ = (*($1->value.fnctptr))($3); @}
+| FUN '(' exp ')'    @{ $$ = $1->value.fun ($3);         @}
 | exp '+' exp        @{ $$ = $1 + $3;                    @}
 | exp '-' exp        @{ $$ = $1 - $3;                    @}
 | exp '*' exp        @{ $$ = $1 * $3;                    @}
@@ -2395,7 +2539,7 @@
 | '(' exp ')'        @{ $$ = $2;                         @}
 ;
 @end group
-/* End of grammar.  */
+/* End of grammar. */
 %%
 @end example
 
@@ -2415,20 +2559,20 @@
 @comment file: calc.h
 @example
 @group
-/* Function type.  */
-typedef double (*func_t) (double);
+/* Function type. */
+typedef double (func_t) (double);
 @end group
 
 @group
-/* Data type for links in the chain of symbols.  */
+/* 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 */
+  int type;    /* type of symbol: either VAR or FUN */
   union
   @{
-    double var;      /* value of a VAR */
-    func_t fnctptr;  /* value of a FNCT */
+    double var;    /* value of a VAR */
+    func_t *fun;   /* value of a FUN */
   @} value;
   struct symrec *next;  /* link field */
 @};
@@ -2437,77 +2581,57 @@
 @group
 typedef struct symrec symrec;
 
-/* The symbol table: a chain of `struct symrec'.  */
+/* The symbol table: a chain of 'struct symrec'. */
 extern symrec *sym_table;
 
-symrec *putsym (char const *, int);
-symrec *getsym (char const *);
+symrec *putsym (char const *name, int sym_type);
+symrec *getsym (char const *name);
 @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:
+The new version of @code{main} will call @code{init_table} to initialize
+the symbol table:
 
 @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);
+  char const *name;
+  func_t *fun;
 @};
 @end group
 
 @group
-struct init const arith_fncts[] =
+struct init const arith_funs[] =
 @{
-  "sin",  sin,
-  "cos",  cos,
-  "atan", atan,
-  "ln",   log,
-  "exp",  exp,
-  "sqrt", sqrt,
-  0, 0
+  @{ "atan", atan @},
+  @{ "cos",  cos  @},
+  @{ "exp",  exp  @},
+  @{ "ln",   log  @},
+  @{ "sin",  sin  @},
+  @{ "sqrt", sqrt @},
+  @{ 0, 0 @},
 @};
 @end group
 
 @group
-/* The symbol table: a chain of `struct symrec'.  */
+/* The symbol table: a chain of 'struct symrec'. */
 symrec *sym_table;
 @end group
 
 @group
-/* Put arithmetic functions in table.  */
-void
+/* Put arithmetic functions in table. */
+static 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 ();
+  for (int i = 0; arith_funs[i].name; i++)
+    @{
+      symrec *ptr = putsym (arith_funs[i].name, FUN);
+      ptr->value.fun = arith_funs[i].fun;
+    @}
 @}
 @end group
 @end example
@@ -2517,45 +2641,51 @@
 
 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
+(@code{VAR} or @code{FUN}) 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. */
+@group
+/* The mfcalc code assumes that malloc and realloc
+   always succeed, and that integer calculations
+   never overflow.  Production-quality code should
+   not make these assumptions.  */
+#include <stdlib.h> /* malloc, realloc. */
 #include <string.h> /* strlen. */
+@end group
 
 @group
 symrec *
-putsym (char const *sym_name, int sym_type)
+putsym (char const *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;
+  symrec *res = (symrec *) malloc (sizeof (symrec));
+  res->name = strdup (name);
+  res->type = sym_type;
+  res->value.var = 0; /* Set value to 0 even if fun. */
+  res->next = sym_table;
+  sym_table = res;
+  return res;
 @}
 @end group
 
 @group
 symrec *
-getsym (char const *sym_name)
+getsym (char const *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;
+  for (symrec *p = sym_table; p; p = p->next)
+    if (strcmp (p->name, name) == 0)
+      return p;
+  return NULL;
 @}
 @end group
 @end example
 
+@node Mfcalc Lexer
+@subsection The @code{mfcalc} Lexer
+
 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
@@ -2563,7 +2693,7 @@
 
 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
+(@code{VAR} or @code{FUN}) 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}.
@@ -2573,62 +2703,60 @@
 
 @comment file: mfcalc.y: 3
 @example
-@group
 #include <ctype.h>
-@end group
+#include <stddef.h>
 
 @group
 int
 yylex (void)
 @{
-  int c;
+  int c = getchar ();
 
-  /* Ignore white space, get first nonwhite character.  */
-  while ((c = getchar ()) == ' ' || c == '\t')
-    continue;
+  /* Ignore white space, get first nonwhite character. */
+  while (c == ' ' || c == '\t')
+    c = getchar ();
 
   if (c == EOF)
     return 0;
 @end group
 
 @group
-  /* Char starts a number => parse the number.         */
+  /* Char starts a number => parse the number. */
   if (c == '.' || isdigit (c))
     @{
       ungetc (c, stdin);
-      scanf ("%lf", &yylval.val);
+      scanf ("%lf", &yylval.NUM);
       return NUM;
     @}
 @end group
+@end example
 
+@noindent
+Bison generated a definition of @code{YYSTYPE} with a member named
+@code{NUM} to store value of @code{NUM} symbols.
+
+@comment file: mfcalc.y: 3
+@example
 @group
-  /* Char starts an identifier => read the name.       */
+  /* 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 ptrdiff_t bufsize = 0;
       static char *symbuf = 0;
-      symrec *s;
-      int i;
 @end group
-
-      if (!symbuf)
-        symbuf = (char *) malloc (length + 1);
-
-      i = 0;
+      ptrdiff_t i = 0;
       do
 @group
         @{
-          /* If buffer is full, make it bigger.        */
-          if (i == length)
+          /* If buffer is full, make it bigger. */
+          if (bufsize <= i)
             @{
-              length *= 2;
-              symbuf = (char *) realloc (symbuf, length + 1);
+              bufsize = 2 * bufsize + 40;
+              symbuf = realloc (symbuf, bufsize);
             @}
-          /* Add this character to the buffer.         */
+          /* Add this character to the buffer. */
           symbuf[i++] = c;
-          /* Get another character.                    */
+          /* Get another character. */
           c = getchar ();
         @}
 @end group
@@ -2640,19 +2768,22 @@
 @end group
 
 @group
-      s = getsym (symbuf);
-      if (s == 0)
+      symrec *s = getsym (symbuf);
+      if (!s)
         s = putsym (symbuf, VAR);
-      yylval.tptr = s;
+      yylval.VAR = s; /* or yylval.FUN = s. */
       return s->type;
     @}
 
-  /* Any other character is a token by itself.        */
+  /* Any other character is a token by itself. */
   return c;
 @}
 @end group
 @end example
 
+@node Mfcalc Main
+@subsection The @code{mfcalc} Main
+
 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):
@@ -2660,23 +2791,23 @@
 @comment file: mfcalc.y: 3
 @example
 @group
-/* Called by yyparse on error.  */
-void
-yyerror (char const *s)
+/* 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 main (int argc, char const* argv[])
+@end group
+@group
 @{
-  int i;
-  /* Enable parse traces on option -p.  */
-  for (i = 1; i < argc; ++i)
-    if (!strcmp(argv[i], "-p"))
-      yydebug = 1;
+  /* Enable parse traces on option -p. */
+  if (argc == 2 && strcmp(argv[1], "-p") == 0)
+    yydebug = 1;
+@end group
+@group
   init_table ();
   return yyparse ();
 @}
@@ -2718,7 +2849,6 @@
 * 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.
@@ -2767,52 +2897,56 @@
 @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 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.
+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.
+@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
+@group
 %@{
   #define _GNU_SOURCE
   #include <stdio.h>
   #include "ptypes.h"
 %@}
+@end group
 
+@group
 %union @{
-  long int n;
+  long n;
   tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
 @}
+@end group
 
+@group
 %@{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void print_token (enum yytokentype token, YYSTYPE val);
 %@}
+@end group
 
 @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.
+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
@@ -2824,61 +2958,64 @@
 @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}.
+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
+@group
 %@{
   #define _GNU_SOURCE
   #include <stdio.h>
   #include "ptypes.h"
 %@}
+@end group
 
+@group
 %union @{
-  long int n;
+  long n;
   tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
 @}
+@end group
 
+@group
 %@{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void print_token (enum yytokentype token, YYSTYPE val);
 %@}
+@end group
 
 @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.
+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.
+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:
+@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 @{
@@ -2886,7 +3023,7 @@
   #include <stdio.h>
 
   /* WARNING: The following code really belongs
-   * in a `%code requires'; see below.  */
+   * in a '%code requires'; see below. */
 
   #include "ptypes.h"
   #define YYLTYPE YYLTYPE
@@ -2900,36 +3037,38 @@
   @} YYLTYPE;
 @}
 
+@group
 %union @{
-  long int n;
+  long n;
   tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
 @}
+@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 print_token (enum yytokentype token, YYSTYPE val);
   static void trace_token (enum yytokentype token, YYLTYPE loc);
 @}
+@end group
 
 @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}.
+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.
+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}
@@ -2951,7 +3090,7 @@
 @end group
 @group
 %union @{
-  long int n;
+  long n;
   tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
 @}
 @end group
@@ -2972,8 +3111,7 @@
 
 @group
 %code @{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void print_token (enum yytokentype token, YYSTYPE val);
   static void trace_token (enum yytokentype token, YYLTYPE loc);
 @}
 @end group
@@ -2982,36 +3120,33 @@
 @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}.)
+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}
+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}:
+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
@@ -3028,7 +3163,7 @@
 @end group
 @group
 %union @{
-  long int n;
+  long n;
   tree t;  /* @r{@code{tree} is defined in @file{ptypes.h}.} */
 @}
 @end group
@@ -3055,8 +3190,7 @@
 
 @group
 %code @{
-  static void print_token_value (FILE *, int, YYSTYPE);
-  #define YYPRINT(F, N, L) print_token_value (F, N, L)
+  static void print_token (FILE *file, int token, YYSTYPE val);
 @}
 @end group
 
@@ -3064,18 +3198,16 @@
 @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}.
+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.
+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.
@@ -3092,14 +3224,14 @@
 %code requires @{ #include "type1.h" @}
 %union @{ type1 field1; @}
 %destructor @{ type1_free ($$); @} <field1>
-%printer @{ type1_print (yyoutput, $$); @} <field1>
+%printer @{ type1_print (yyo, $$); @} <field1>
 @end group
 
 @group
 %code requires @{ #include "type2.h" @}
 %union @{ type2 field2; @}
 %destructor @{ type2_free ($$); @} <field2>
-%printer @{ type2_print (yyoutput, $$); @} <field2>
+%printer @{ type2_print (yyo, $$); @} <field2>
 @end group
 @end example
 
@@ -3320,7 +3452,18 @@
 one of your tokens with a @code{%token} declaration.
 
 @node Rules
-@section Syntax of Grammar Rules
+@section Grammar Rules
+
+A Bison grammar is a list of rules.
+
+@menu
+* Rules Syntax::   Syntax of the rules.
+* Empty Rules::    Symbols that can match the empty string.
+* Recursion::      Writing recursive rules.
+@end menu
+
+@node Rules Syntax
+@subsection Syntax of Grammar Rules
 @cindex rule syntax
 @cindex grammar rule syntax
 @cindex syntax of grammar rules
@@ -3328,9 +3471,7 @@
 A Bison grammar rule has the following general form:
 
 @example
-@group
 @var{result}: @var{components}@dots{};
-@end group
 @end example
 
 @noindent
@@ -3341,9 +3482,7 @@
 For example,
 
 @example
-@group
 exp: exp '+' exp;
-@end group
 @end example
 
 @noindent
@@ -3398,33 +3537,58 @@
 @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:
+@node Empty Rules
+@subsection Empty Rules
+@cindex empty rule
+@cindex rule, empty
+@findex %empty
+
+A rule is said to be @dfn{empty} if its right-hand side (@var{components})
+is empty.  It means that @var{result} in the previous example can match the
+empty string.  As another example, here is how to define an optional
+semicolon:
+
+@example
+semicolon.opt: | ";";
+@end example
+
+@noindent
+It is easy not to see an empty rule, especially when @code{|} is used.  The
+@code{%empty} directive allows to make explicit that a rule is empty on
+purpose:
 
 @example
 @group
-expseq:
-  /* empty */
-| expseq1
-;
-@end group
-
-@group
-expseq1:
-  exp
-| expseq1 ',' exp
+semicolon.opt:
+  %empty
+| ";"
 ;
 @end group
 @end example
 
-@noindent
-It is customary to write a comment @samp{/* empty */} in each rule
-with no components.
+Flagging a non-empty rule with @code{%empty} is an error.  If run with
+@option{-Wempty-rule}, @command{bison} will report empty rules without
+@code{%empty}.  Using @code{%empty} enables this warning, unless
+@option{-Wno-empty-rule} was specified.
+
+The @code{%empty} directive is a Bison extension, it does not work with
+Yacc.  To remain compatible with POSIX Yacc, it is customary to write a
+comment @samp{/* empty */} in each rule with no components:
+
+@example
+@group
+semicolon.opt:
+  /* empty */
+| ";"
+;
+@end group
+@end example
+
 
 @node Recursion
-@section Recursive Rules
+@subsection Recursive Rules
 @cindex recursive rule
+@cindex rule, recursive
 
 A rule is called @dfn{recursive} when its @var{result} nonterminal
 appears also on its right hand side.  Nearly all Bison grammars need to
@@ -3512,9 +3676,12 @@
 @menu
 * Value Type::        Specifying one data type for all semantic values.
 * Multiple Types::    Specifying several alternative data types.
+* Type Generation::   Generating the semantic value type.
+* Union Decl::        Declaring the set of all semantic value types.
+* Structured Value Type::  Providing a structured semantic value type.
 * 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.
+* Midrule 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
@@ -3533,24 +3700,45 @@
 
 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:
+specify some other type, define the @code{%define} variable
+@code{api.value.type} like this:
+
+@example
+%define api.value.type @{double@}
+@end example
+
+@noindent
+or
+
+@example
+%define api.value.type @{struct semantic_type@}
+@end example
+
+The value of @code{api.value.type} should be a type name that does not
+contain parentheses or square brackets.
+
+Alternatively, instead of relying of Bison's @code{%define} support, you may
+rely on the C/C++ preprocessor and 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}).
+(@pxref{Grammar Outline, ,Outline of a Bison Grammar}).  If compatibility
+with POSIX Yacc matters to you, use this.  Note however that Bison cannot
+know @code{YYSTYPE}'s value, not even whether it is defined, so there are
+services it cannot provide.  Besides this works only for languages that have
+a preprocessor.
 
 @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{int} or @code{long}, while a string constant needs type
 @code{char *}, and an identifier might need a pointer to an entry in the
 symbol table.
 
@@ -3559,20 +3747,191 @@
 
 @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.
+Specify the entire collection of possible data types.  There are several
+options:
+@itemize @bullet
+@item
+let Bison compute the union type from the tags you assign to symbols;
+
+@item
+use the @code{%union} Bison declaration (@pxref{Union Decl, ,The Union
+Declaration});
+
+@item
+define the @code{%define} variable @code{api.value.type} to be a union type
+whose members are the type tags (@pxref{Structured Value Type,, Providing a
+Structured Semantic Value Type});
+
+@item
+use a @code{typedef} or a @code{#define} to define @code{YYSTYPE} to be a
+union type whose member names are the type tags.
+@end itemize
 
 @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}).
+@code{%token} Bison declaration (@pxref{Token Decl, ,Token Type Names}) and
+for groupings with the @code{%nterm}/@code{%type} Bison declarations
+(@pxref{Type Decl, ,Nonterminal Symbols}).
 @end itemize
 
+@node Type Generation
+@subsection Generating the Semantic Value Type
+@cindex declaring value types
+@cindex value types, declaring
+@findex %define api.value.type union
+
+The special value @code{union} of the @code{%define} variable
+@code{api.value.type} instructs Bison that the type tags (used with the
+@code{%token}, @code{%nterm} and @code{%type} directives) are genuine types,
+not names of members of @code{YYSTYPE}.
+
+For example:
+
+@example
+%define api.value.type union
+%token <int> INT "integer"
+%token <int> 'n'
+%nterm <int> expr
+%token <char const *> ID "identifier"
+@end example
+
+@noindent
+generates an appropriate value of @code{YYSTYPE} to support each symbol
+type.  The name of the member of @code{YYSTYPE} for tokens than have a
+declared identifier @var{id} (such as @code{INT} and @code{ID} above, but
+not @code{'n'}) is @code{@var{id}}.  The other symbols have unspecified
+names on which you should not depend; instead, relying on C casts to access
+the semantic value with the appropriate type:
+
+@example
+/* For an "integer". */
+yylval.INT = 42;
+return INT;
+
+/* For an 'n', also declared as int. */
+*((int*)&yylval) = 42;
+return 'n';
+
+/* For an "identifier". */
+yylval.ID = "42";
+return ID;
+@end example
+
+If the @code{%define} variable @code{api.token.prefix} is defined
+(@pxref{%define Summary,,api.token.prefix}), then it is also used to prefix
+the union member names.  For instance, with @samp{%define api.token.prefix
+@{TOK_@}}:
+
+@example
+/* For an "integer". */
+yylval.TOK_INT = 42;
+return TOK_INT;
+@end example
+
+This Bison extension cannot work if @code{%yacc} (or
+@option{-y}/@option{--yacc}) is enabled, as POSIX mandates that Yacc
+generate tokens as macros (e.g., @samp{#define INT 258}, or @samp{#define
+TOK_INT 258}).
+
+A similar feature is provided for C++ that in addition overcomes C++
+limitations (that forbid non-trivial objects to be part of a @code{union}):
+@samp{%define api.value.type variant}, see @ref{C++ Variants}.
+
+@node Union Decl
+@subsection The Union Declaration
+@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}, @code{%nterm} 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} (@pxref{%define Summary,,api.value.union.name}).
+
+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.
+
+@node Structured Value Type
+@subsection Providing a Structured Semantic Value Type
+@cindex declaring value types
+@cindex value types, declaring
+@findex %union
+
+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;
+@};
+@end group
+@end example
+
+@noindent
+and then your grammar can use the following instead of @code{%union}:
+
+@example
+@group
+%@{
+#include "parser.h"
+%@}
+%define api.value.type @{union YYSTYPE@}
+%nterm <val> expr
+%token <tptr> ID
+@end group
+@end example
+
+Actually, you may also provide a @code{struct} rather that a @code{union},
+which may be handy if you want to track information for every symbol (such
+as preceding comments).
+
+The type you provide may even be structured and include pointers, in which
+case the type tags you provide may be composite, with @samp{.} and @samp{->}
+operators.
+
 @node Actions
 @subsection Actions
 @cindex action
@@ -3590,8 +3949,8 @@
 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}).
+a rule are tricky and used only for special purposes (@pxref{Midrule
+Actions, ,Actions in Midrule}).
 
 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}},
@@ -3647,9 +4006,7 @@
 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
@@ -3676,7 +4033,7 @@
 
 @group
 bar:
-  /* empty */    @{ previous_expr = $0; @}
+  %empty    @{ previous_expr = $0; @}
 ;
 @end group
 @end example
@@ -3736,42 +4093,43 @@
 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
+@node Midrule Actions
+@subsection Actions in Midrule
+@cindex actions in midrule
+@cindex midrule 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.
+* Using Midrule Actions::       Putting an action in the middle of a rule.
+* Typed Midrule Actions::       Specifying the semantic type of their values.
+* Midrule Action Translation::  How midrule actions are actually processed.
+* Midrule Conflicts::           Midrule actions can cause conflicts.
 @end menu
 
-@node Using Mid-Rule Actions
-@subsubsection Using Mid-Rule Actions
+@node Using Midrule Actions
+@subsubsection Using Midrule Actions
 
-A mid-rule action may refer to the components preceding it using
+A midrule 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.
+The midrule 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
+The midrule 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
+There is no way to set the value of the entire rule with a midrule
 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.
@@ -3808,7 +4166,7 @@
 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
+Note that the midrule 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}):
 
@@ -3834,60 +4192,86 @@
 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.
 
+Because the types of the semantic values of midrule actions are unknown to
+Bison, type-based features (e.g., @samp{%printer}, @samp{%destructor}) do
+not work, which could result in memory leaks.  They also forbid the use of
+the @code{variant} implementation of the @code{api.value.type} in C++
+(@pxref{C++ Variants}).
+
+@xref{Typed Midrule Actions}, for one way to address this issue, and
+@ref{Midrule Action Translation}, for another: turning mid-action actions
+into regular actions.
+
+
+@node Typed Midrule Actions
+@subsubsection Typed Midrule Actions
+
 @findex %destructor
-@cindex discarded symbols, mid-rule actions
-@cindex error recovery, mid-rule actions
+@cindex discarded symbols, midrule actions
+@cindex error recovery, midrule 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.
+restoring it.  Thus, @code{$<context>5} needs a destructor
+(@pxref{Destructor Decl, , Freeing Discarded Symbols}), and Bison needs the
+type of the semantic value (@code{context}) to select the right destructor.
 
-One solution is to bury the mid-rule action inside a nonterminal symbol and to
-declare a destructor for that symbol:
+As an extension to Yacc's midrule actions, Bison offers a means to type
+their semantic value: specify its type tag (@samp{<...>} before the midrule
+action.
+
+Consider the previous example, with an untyped midrule action:
 
 @example
 @group
-%type <context> let
-%destructor @{ pop_context ($$); @} let
-
-%%
-
 stmt:
-  let stmt
-    @{
-      $$ = $2;
-      pop_context ($let);
-    @};
-
-let:
   "let" '(' var ')'
     @{
-      $let = push_context ();
+      $<context>$ = push_context (); // ***
       declare_variable ($3);
-    @};
-
+    @}
+  stmt
+    @{
+      $$ = $6;
+      pop_context ($<context>5);     // ***
+    @}
 @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.
+If instead you write:
 
-@node Mid-Rule Action Translation
-@subsubsection Mid-Rule Action Translation
+@example
+@group
+stmt:
+  "let" '(' var ')'
+    <context>@{                       // ***
+      $$ = push_context ();          // ***
+      declare_variable ($3);
+    @}
+  stmt
+    @{
+      $$ = $6;
+      pop_context ($5);              // ***
+    @}
+@end group
+@end example
+
+@noindent
+then @code{%printer} and @code{%destructor} work properly (no more leaks!),
+C++ @code{variant}s can be used, and redundancy is reduced (@code{<context>}
+is specified once).
+
+
+@node Midrule Action Translation
+@subsubsection Midrule 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:
+Midrule 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(); @};
@@ -3897,17 +4281,17 @@
 is translated into:
 
 @example
-$@@1: /* empty */ @{ a(); @};
-$@@2: /* empty */ @{ c(); @};
-$@@3: /* empty */ @{ d(); @};
+$@@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
+A midrule action is expected to generate a value if it uses @code{$$}, or
+the (final) action uses @code{$@var{n}} where @var{n} denote the midrule
 action.  In that case its nonterminal is rather named @code{@@@var{n}}:
 
 @example
@@ -3918,39 +4302,78 @@
 is translated into
 
 @example
-@@1: /* empty */ @{ a(); @};
-@@2: /* empty */ @{ $$ = c(); @};
-$@@3: /* empty */ @{ d(); @};
+@@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
+There are probably two errors in the above example: the first midrule 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
+$ @kbd{bison -Wmidrule-value mid.y}
 @group
-mid.y:2.6-13: warning: unset value: $$
- exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
-      ^^^^^^^^
+mid.y:2.6-13: @dwarning{warning}: unset value: $$
+    2 | exp: @dwarning{@{ a(); @}} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
+      |      @dwarning{^~~~~~~~}
 @end group
 @group
-mid.y:2.19-31: warning: unused value: $3
- exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
-                   ^^^^^^^^^^^^^
+mid.y:2.19-31: @dwarning{warning}: unused value: $3
+    2 | exp: @{ a(); @} "b" @dwarning{@{ $$ = c(); @}} @{ d(); @} "e" @{ f = $1; @};
+      |                   @dwarning{^~~~~~~~~~~~~}
+@end group
+@end example
+
+@sp 1
+
+It is sometimes useful to turn midrule actions into regular actions, e.g.,
+to factor them, or to escape from their limitations.  For instance, as an
+alternative to @emph{typed} midrule action, you may bury the midrule action
+inside a nonterminal symbol and to declare a printer and a destructor for
+that symbol:
+
+@example
+@group
+%nterm <context> let
+%destructor @{ pop_context ($$); @} let
+%printer @{ print_context (yyo, $$); @} let
+@end group
+
+%%
+
+@group
+stmt:
+  let stmt
+    @{
+      $$ = $2;
+      pop_context ($let);
+    @};
+@end group
+
+@group
+let:
+  "let" '(' var ')'
+    @{
+      $let = push_context ();
+      declare_variable ($var);
+    @};
+
 @end group
 @end example
 
 
-@node Mid-Rule Conflicts
-@subsubsection Conflicts due to Mid-Rule Actions
+
+
+@node Midrule Conflicts
+@subsubsection Conflicts due to Midrule 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,
+action.  For example, the following two rules, without midrule 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:
@@ -3965,7 +4388,7 @@
 @end example
 
 @noindent
-But when we add a mid-rule action as follows, the rules become nonfunctional:
+But when we add a midrule action as follows, the rules become nonfunctional:
 
 @example
 @group
@@ -3980,7 +4403,7 @@
 @end example
 
 @noindent
-Now the parser is forced to decide whether to run the mid-rule action
+Now the parser is forced to decide whether to run the midrule 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
@@ -4029,7 +4452,7 @@
 @example
 @group
 subroutine:
-  /* empty */  @{ prepare_for_local_variables (); @}
+  %empty  @{ prepare_for_local_variables (); @}
 ;
 @end group
 
@@ -4136,8 +4559,7 @@
       else
         @{
           $$ = 1;
-          fprintf (stderr,
-                   "Division by zero, l%d,c%d-l%d,c%d",
+          fprintf (stderr, "%d.%d-%d.%d: division by zero",
                    @@3.first_line, @@3.first_column,
                    @@3.last_line, @@3.last_column);
         @}
@@ -4164,8 +4586,7 @@
       else
         @{
           $$ = 1;
-          fprintf (stderr,
-                   "Division by zero, l%d,c%d-l%d,c%d",
+          fprintf (stderr, "%d.%d-%d.%d: division by zero",
                    @@3.first_line, @@3.first_column,
                    @@3.last_line, @@3.last_column);
         @}
@@ -4318,9 +4739,9 @@
 @end example
 
 @noindent
-In order to access a semantic value generated by a mid-rule action, an
+In order to access a semantic value generated by a midrule action, an
 explicit name may also be declared by putting a bracketed name after the
-closing brace of the mid-rule action code:
+closing brace of the midrule action code:
 @example
 @group
 exp[res]: exp[x] '+' @{$left = $x;@}[left] exp[right]
@@ -4347,9 +4768,6 @@
 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
@@ -4373,8 +4791,8 @@
 * 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.
+* Symbol Decls::      Summary of the Syntax of Symbol Declarations.
 * Initial Action Decl::  Code run before parsing starts.
 * Destructor Decl::   Declaring how symbols are freed.
 * Printer Decl::      Declaring how symbol values are displayed.
@@ -4401,6 +4819,20 @@
 %require "@var{version}"
 @end example
 
+Some deprecated behaviors are disabled for some required @var{version}:
+@table @asis
+@item @code{"3.2"} (or better)
+The C++ deprecated files @file{position.hh} and @file{stack.hh} are no
+longer generated.
+
+@item @code{"3.4"} (or better)
+To comply with the
+@uref{https://marc.info/?l=graphviz-devel&m=129418103126092, recommendations
+of the Graphviz team}, use the @code{.gv} extension instead of @code{.dot}
+for the name of the generated DOT file.  @xref{Graphviz}.
+@end table
+
+
 @node Token Decl
 @subsection Token Type Names
 @cindex declaring token type names
@@ -4414,17 +4846,16 @@
 %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.
+Bison will convert this into a definition 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}.
+Alternatively, you can use @code{%left}, @code{%right}, @code{%precedence},
+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
+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
@@ -4433,14 +4864,14 @@
 @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.
+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}).
+alternative delimited by angle-brackets (@pxref{Multiple Types, ,More Than
+One Value Type}).
 
 For example:
 
@@ -4454,12 +4885,12 @@
 @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:
+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 "=>"
+%token ARROW "=>"
 @end example
 
 @noindent
@@ -4475,14 +4906,14 @@
 @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.
+@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'':
+allows for nicer error messages referring to ``end of file'' instead of
+``$end'':
 
 @example
 %token END 0 "end of file"
@@ -4494,11 +4925,11 @@
 @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.
+Use the @code{%left}, @code{%right}, @code{%nonassoc}, or @code{%precedence}
+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
@@ -4520,121 +4951,43 @@
 
 @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.
+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.
+
+@code{%precedence} gives only precedence to the @var{symbols}, and defines
+no associativity at all.  Use this to define precedence only, and leave any
+potential conflict due to associativity enabled.
 
 @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.
+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:
+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 %nterm
 @findex %type
 
 @noindent
@@ -4647,25 +5000,54 @@
 @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.
+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 Union Declaration}).  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}>}.
+While POSIX Yacc allows @code{%type} only for nonterminals, Bison accepts
+that this directive be also applied to terminal symbols.  To declare
+exclusively nonterminal symbols, use the safer @code{%nterm}:
+
+@example
+%nterm <@var{type}> @var{nonterminal}@dots{}
+@end example
+
+
+@node Symbol Decls
+@subsection Syntax of Symbol Declarations
+@findex %left
+@findex %nterm
+@findex %token
+@findex %type
+
+The syntax of the various directives to declare symbols is as follows.
+
+@example
+%token @var{tag}? ( @var{id} @var{number}? @var{string}? )+ ( @var{tag} ( @var{id} @var{number}? @var{string}? )+ )*
+%left  @var{tag}? ( @var{id} @var{number}?)+ ( @var{tag} ( @var{id} @var{number}? )+ )*
+%type  @var{tag}? ( @var{id} | @var{char} | @var{string} )+ ( @var{tag} ( @var{id} | @var{char} | @var{string} )+ )*
+%nterm @var{tag}? @var{id}+ ( @var{tag} @var{id}+ )*
+@end example
+
+@noindent
+where @var{tag} denotes a type tag such as @samp{<ival>}, @var{id} denotes
+an identifier such as @samp{NUM}, @var{number} a decimal or hexadecimal
+integer such as @samp{300} or @samp{0x12d}, @var{char} a character literal
+such as @samp{'+'}, and @var{string} a string literal such as
+@samp{"number"}.  The postfix quantifiers are @samp{?} (zero or one),
+@samp{*} (zero or more) and @samp{+} (one or more).
+
+The directives @code{%precedence}, @code{%right} and @code{%nonassoc} behave
+like @code{%left}.
 
 @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.
+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
@@ -4725,17 +5107,15 @@
 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).
+symbol for which you have formally declared a semantic type tag (@code{%token},
+@code{%nterm}, and @code{%type}
+count 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
@@ -4745,13 +5125,11 @@
 
 @example
 %union @{ char *string; @}
-%token <string> STRING1
-%token <string> STRING2
-%type  <string> string1
-%type  <string> string2
+%token <string> STRING1 STRING2
+%nterm <string> string1 string2
 %union @{ char character; @}
 %token <character> CHR
-%type  <character> chr
+%nterm <character> chr
 %token TAGLESS
 
 %destructor @{ @} <character>
@@ -4764,10 +5142,9 @@
 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.
+However, when the parser discards a @code{STRING1} or a @code{string1},
+it uses the third @code{%destructor}, which frees it and
+prints its line number to @code{stdout} (@code{free} is invoked only once).
 Finally, the parser merely prints a message whenever it discards any symbol,
 such as @code{TAGLESS}, that has no semantic type tag.
 
@@ -4787,16 +5164,16 @@
 %token END 0
 @end example
 
-@cindex actions in mid-rule
-@cindex mid-rule actions
+@cindex actions in midrule
+@cindex midrule 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
+midrule semantic value (@pxref{Midrule Actions,,Actions in Midrule}).
+That is, Bison does not consider a midrule to have a semantic value if you
+do not reference @code{$$} in the midrule's action or @code{$@var{n}}
+(where @var{n} is the right-hand side symbol position of the midrule) 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.
+it discards the midrule symbol.
 
 @ignore
 @noindent
@@ -4852,11 +5229,11 @@
 
 @deffn {Directive} %printer @{ @var{code} @} @var{symbols}
 @findex %printer
-@vindex yyoutput
+@vindex yyo
 @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
+@var{symbols}.  Within @var{code}, @code{yyo} 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
@@ -4874,19 +5251,17 @@
 
 @example
 %union @{ char *string; @}
-%token <string> STRING1
-%token <string> STRING2
-%type  <string> string1
-%type  <string> string2
+%token <string> STRING1 STRING2
+%nterm <string> string1 string2
 %union @{ char character; @}
 %token <character> CHR
-%type  <character> chr
+%nterm <character> chr
 %token TAGLESS
 
-%printer @{ fprintf (yyoutput, "'%c'", $$); @} <character>
-%printer @{ fprintf (yyoutput, "&%p", $$); @} <*>
-%printer @{ fprintf (yyoutput, "\"%s\"", $$); @} STRING1 string1
-%printer @{ fprintf (yyoutput, "<>"); @} <>
+%printer @{ fprintf (yyo, "'%c'", $$); @} <character>
+%printer @{ fprintf (yyo, "&%p", $$); @} <*>
+%printer @{ fprintf (yyo, "\"%s\"", $$); @} STRING1 string1
+%printer @{ fprintf (yyo, "<>"); @} <>
 @end example
 
 @noindent
@@ -4896,7 +5271,9 @@
 @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
+that has no semantic type tag.  @xref{Mfcalc Traces, ,Enabling Debug Traces
+for @code{mfcalc}}, for a complete example.
+
 
 
 @node Expect Decl
@@ -4938,6 +5315,53 @@
 %expect-rr @var{n}
 @end example
 
+You may wish to be more specific in your
+specification of expected conflicts.  To this end, you can also attach
+@code{%expect} and @code{%expect-rr} modifiers to individual rules.
+The interpretation of these modifiers differs from their use as
+declarations.  When attached to rules, they indicate the number of states
+in which the rule is involved in a conflict.  You will need to consult the
+output resulting from @samp{-v} to determine appropriate numbers to use.
+For example, for the following grammar fragment, the first rule for
+@code{empty_dims} appears in two states in which the @samp{[} token is a
+lookahead.  Having determined that, you can document this fact with an
+@code{%expect} modifier as follows:
+
+@example
+dims:
+  empty_dims
+| '[' expr ']' dims
+;
+
+empty_dims:
+  %empty   %expect 2
+| empty_dims '[' ']'
+;
+@end example
+
+Mid-rule actions generate implicit rules that are also subject to conflicts
+(@pxref{Midrule Conflicts,, Conflicts due to Midrule Actions}). To attach
+an @code{%expect} or @code{%expect-rr} annotation to an implicit
+mid-rule action's rule, put it before the action.  For example,
+
+@example
+%glr-parser
+%expect-rr 1
+
+%%
+
+clause:
+  "condition" %expect-rr 1 @{ value_mode(); @} '(' exprs ')'
+| "condition" %expect-rr 1 @{ class_mode(); @} '(' types ')'
+;
+@end example
+
+@noindent
+Here, the appropriate mid-rule action will not be determined until after
+the @samp{(} token is shifted.  Thus,
+the two actions will clash with each other, and we should expect one
+reduce/reduce conflict for each.
+
 In general, using @code{%expect} involves these steps:
 
 @itemize @bullet
@@ -4953,8 +5377,17 @@
 
 @item
 Add an @code{%expect} declaration, copying the number @var{n} from the
-number which Bison printed.  With GLR parsers, add an
+number that Bison printed.  With GLR parsers, add an
 @code{%expect-rr} declaration as well.
+
+@item
+Optionally, count up the number of states in which one or more
+conflicted reductions for particular rules appear and add these numbers
+to the affected rules as @code{%expect-rr} or @code{%expect} modifiers
+as appropriate.  Rules that are in conflict appear in the output listing
+surrounded by square brackets or, in the case of reduce/reduce conflicts,
+as reductions having the same lookahead symbol as a square-bracketed
+reduction in the same state.
 @end itemize
 
 Now Bison will report an error if you introduce an unexpected conflict,
@@ -4995,7 +5428,7 @@
 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
+declaration @samp{%define api.pure} says that you want the parser to be
 reentrant.  It looks like this:
 
 @example
@@ -5008,7 +5441,7 @@
 @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
+of @code{yypstate} in push mode.  (@pxref{Error Reporting, ,The Error
 Reporting Function @code{yyerror}}).  The convention for calling
 @code{yyparse} itself is unchanged.
 
@@ -5022,9 +5455,6 @@
 @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.
@@ -5099,14 +5529,14 @@
 
 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
+you should replace the @samp{%define api.push-pull push} declaration with the
+@samp{%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
+@samp{%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
@@ -5122,9 +5552,9 @@
 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}.
+Adding the @samp{%define api.pure} declaration does exactly the same thing to
+the generated parser with @samp{%define api.push-pull both} as it did for
+@samp{%define api.push-pull push}.
 
 @node Decl Summary
 @subsection Bison Declaration Summary
@@ -5136,7 +5566,7 @@
 
 @deffn {Directive} %union
 Declare the collection of data types that semantic values may have
-(@pxref{Union Decl, ,The Collection of Value Types}).
+(@pxref{Union Decl, ,The Union Declaration}).
 @end deffn
 
 @deffn {Directive} %token
@@ -5167,9 +5597,14 @@
 @end deffn
 @end ifset
 
+@deffn {Directive} %nterm
+Declare the type of semantic values for a nonterminal symbol (@pxref{Type
+Decl, ,Nonterminal Symbols}).
+@end deffn
+
 @deffn {Directive} %type
-Declare the type of semantic values for a nonterminal symbol
-(@pxref{Type Decl, ,Nonterminal Symbols}).
+Declare the type of semantic values for a symbol (@pxref{Type Decl,
+,Nonterminal Symbols}).
 @end deffn
 
 @deffn {Directive} %start
@@ -5178,7 +5613,14 @@
 @end deffn
 
 @deffn {Directive} %expect
-Declare the expected number of shift-reduce conflicts
+Declare the expected number of shift-reduce conflicts, either overall or
+for a given rule
+(@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
+@end deffn
+
+@deffn {Directive} %expect-rr
+Declare the expected number of reduce-reduce conflicts, either overall or
+for a given rule
 (@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
 @end deffn
 
@@ -5197,15 +5639,14 @@
 @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.
+Instrument the parser for traces.  Obsoleted by @samp{%define
+parse.trace}.
 @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}@}
 @deffnx {Directive} %define @var{variable} "@var{value}"
 Define a variable to adjust Bison's behavior.  @xref{%define Summary}.
 @end deffn
@@ -5255,7 +5696,7 @@
 uppercase, with each series of non alphanumerical characters converted to a
 single underscore.
 
-For instance with @samp{%define api.prefix "calc"} and @samp{%defines
+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
@@ -5266,7 +5707,7 @@
 @end deffn
 
 @deffn {Directive} %defines @var{defines-file}
-Same as above, but save in the file @var{defines-file}.
+Same as above, but save in the file @file{@var{defines-file}}.
 @end deffn
 
 @deffn {Directive} %destructor
@@ -5281,43 +5722,59 @@
 
 @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.
-
+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.
+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}"
+Obsoleted by @samp{%define api.prefix @{@var{prefix}@}}.  @xref{Multiple
+Parsers, ,Multiple Parsers in the Same Program}.  For C++ parsers, see the
+@samp{%define api.namespace} documentation in this section.
+
+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}.  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.
+
+Contrary to defining @code{api.prefix}, some symbols are @emph{not} renamed
+by @code{%name-prefix}, for instance @code{YYDEBUG}, @code{YYTOKENTYPE},
+@code{yytokentype}, @code{YYSTYPE}, @code{YYLTYPE}.
 @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}).
+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.
+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.
+Generate the parser implementation in @file{@var{file}}.
 @end deffn
 
 @deffn {Directive} %pure-parser
-Deprecated version of @code{%define api.pure} (@pxref{%define
+Deprecated version of @samp{%define api.pure} (@pxref{%define
 Summary,,api.pure}), for which Bison is more careful to warn about
 unreasonable usage.
 @end deffn
@@ -5377,15 +5834,14 @@
 @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.
+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.
+Pretend the option @option{--yacc} was given, i.e., imitate Yacc, including
+its naming conventions.  @xref{Tuning the Parser}, for more.
 @end deffn
 
 
@@ -5393,33 +5849,32 @@
 @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:
+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}@}
 @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{""}.
+The type of the values depend on the syntax.  Braces denote value in the
+target language (e.g., a namespace, a type, etc.).  Keyword values (no
+delimiters) denote finite choice (e.g., a variation of a feature).  String
+values denote remaining cases (e.g., a file name).
 
-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}]}.
+It is an error if a @var{variable} is defined by @code{%define} multiple
+times, but see @ref{Tuning the Parser,,@option{-D @var{name}[=@var{value}]}}.
 @end deffn
 
-The rest of this section summarizes variables and values that
-@code{%define} accepts.
+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:
+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}
@@ -5434,19 +5889,119 @@
 @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:
+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 described below.
+
+
+@c ================================================== api.namespace
+@deffn Directive {%define api.namespace} @{@var{namespace}@}
+@itemize
+@item Languages(s): C++
+
+@item Purpose: Specify the namespace for the parser class.
+For example, if you specify:
+
+@example
+%define api.namespace @{foo::bar@}
+@end example
+
+Bison uses @code{foo::bar} verbatim in references such as:
+
+@example
+foo::bar::parser::semantic_type
+@end example
+
+However, to open a namespace, Bison removes any leading @code{::} and then
+splits on any remaining occurrences:
+
+@example
+namespace foo @{ namespace bar @{
+  class position;
+  class location;
+@} @}
+@end example
+
+@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:
+@code{yy}, unless you used the obsolete @samp{%name-prefix "@var{prefix}"}
+directive.
+@end itemize
+@end deffn
+@c api.namespace
+
+
+@c ================================================== api.location.file
+@deffn {Directive} {%define api.location.file} "@var{file}"
+@deffnx {Directive} {%define api.location.file} @code{none}
 
 @itemize @bullet
+@item Language(s): C++
+
+@item Purpose:
+Define the name of the file in which Bison's default location and position
+types are generated. @xref{Exposing the Location Classes}.
+
+@item Accepted Values:
+@table @asis
+@item @code{none}
+If locations are enabled, generate the definition of the @code{position} and
+@code{location} classes in the header file if @code{%defines}, otherwise in
+the parser implementation.
+
+@item "@var{file}"
+Generate the definition of the @code{position} and @code{location} classes
+in @var{file}.  This file name can be relative (to where the parser file is
+output) or absolute.
+@end table
+
+@item Default Value:
+Not applicable if locations are not enabled, or if a user location type is
+specified (see @code{api.location.type}).  Otherwise, Bison's
+@code{location} is generated in @file{location.hh} (@pxref{C++ location}).
+
+@item History:
+Introduced in Bison 3.2.
+@end itemize
+@end deffn
+
+
+@c ================================================== api.location.file
+@deffn {Directive} {%define api.location.include} @{"@var{file}"@}
+@deffnx {Directive} {%define api.location.include} @{<@var{file}>@}
+
+@itemize @bullet
+@item Language(s): C++
+
+@item Purpose:
+Specify how the generated file that defines the @code{position} and
+@code{location} classes is included.  This makes sense when the
+@code{location} class is exposed to the rest of your application/library in
+another directory.  @xref{Exposing the Location Classes}.
+
+@item Accepted Values: Argument for @code{#include}.
+
+@item Default Value:
+@samp{"@var{dir}/location.hh"} where @var{dir} is the directory part of the
+output.  For instance @file{src/parse} if
+@option{--output=src/parse/parser.cc} was given.
+
+@item History:
+Introduced in Bison 3.2.
+@end itemize
+
+@end deffn
+
+
 @c ================================================== api.location.type
-@item @code{api.location.type}
-@findex %define api.location.type
+@deffn {Directive} {%define api.location.type} @{@var{type}@}
 
 @itemize @bullet
-@item Language(s): C++, Java
+@item Language(s): C, C++, Java
 
 @item Purpose: Define the location type.
 @xref{User Defined Location Type}.
@@ -5455,12 +6010,37 @@
 
 @item Default Value: none
 
-@item History: introduced in Bison 2.7
+@item History:
+Introduced in Bison 2.7 for C++ and Java, in Bison 3.4 for C.
 @end itemize
+@end deffn
+
+
+@c ================================================== api.parser.class
+@deffn Directive {%define api.parser.class} @{@var{name}@}
+@itemize @bullet
+@item Language(s):
+C++, Java
+
+@item Purpose:
+The name of the parser class.
+
+@item Accepted Values:
+Any valid identifier.
+
+@item Default Value:
+In C++, @code{parser}.  In Java, @code{YYParser} or
+@code{@var{api.prefix}Parser} (@pxref{Java Bison Interface}).
+
+@item History:
+Introduced in Bison 3.3 to replace @code{parser_class_name}.
+@end itemize
+@end deffn
+@c api.parser.class
+
 
 @c ================================================== api.prefix
-@item @code{api.prefix}
-@findex %define api.prefix
+@deffn {Directive} {%define api.prefix} @{@var{prefix}@}
 
 @itemize @bullet
 @item Language(s): All
@@ -5470,14 +6050,15 @@
 
 @item Accepted Values: String
 
-@item Default Value: @code{yy}
+@item Default Value: @code{YY} for Java, @code{yy} otherwise.
 
 @item History: introduced in Bison 2.6
 @end itemize
+@end deffn
+
 
 @c ================================================== api.pure
-@item @code{api.pure}
-@findex %define api.pure
+@deffn Directive {%define api.pure} @var{purity}
 
 @itemize @bullet
 @item Language(s): C
@@ -5519,39 +6100,331 @@
 
 @item Default Value: @code{false}
 
-@item History: the @code{full} value was introduced in Bison 2.7
+@item History:
+the @code{full} value was introduced in Bison 2.7
 @end itemize
+@end deffn
+@c api.pure
+
+
 
 @c ================================================== api.push-pull
-
-@item @code{api.push-pull}
-@findex %define api.push-pull
+@deffn Directive {%define api.push-pull} @var{kind}
 
 @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
+@end deffn
+@c api.push-pull
 
-@c ================================================== lr.default-reductions
 
-@item @code{lr.default-reductions}
-@findex %define lr.default-reductions
+
+@c ================================================== api.token.constructor
+@deffn Directive {%define api.token.constructor}
+
+@itemize @bullet
+@item Language(s):
+C++
+
+@item Purpose:
+When variant-based semantic values are enabled (@pxref{C++ Variants}),
+request that symbols be handled as a whole (type, value, and possibly
+location) in the scanner.  @xref{Complete Symbols}, for details.
+
+@item Accepted Values:
+Boolean.
+
+@item Default Value:
+@code{false}
+@item History:
+introduced in Bison 3.0
+@end itemize
+@end deffn
+@c api.token.constructor
+
+
+@c ================================================== api.token.prefix
+@deffn Directive {%define api.token.prefix} @{@var{prefix}@}
+
+@itemize
+@item Languages(s): all
+
+@item Purpose:
+Add a prefix to the token names when generating their definition in the
+target language.  For instance
+
+@example
+%token FILE for ERROR
+%define api.token.prefix @{TOK_@}
+%%
+start: FILE for ERROR;
+@end example
+
+@noindent
+generates the definition of the symbols @code{TOK_FILE}, @code{TOK_for}, and
+@code{TOK_ERROR} in the generated source files.  In particular, the scanner
+must use these prefixed token names, while the grammar itself may still use
+the short names (as in the sample rule given above).  The generated
+informational files (@file{*.output}, @file{*.xml}, @file{*.gv}) are not
+modified by this prefix.
+
+Bison also prefixes the generated member names of the semantic value union.
+@xref{Type Generation,, Generating the Semantic Value Type}, for more
+details.
+
+See @ref{Calc++ Parser} and @ref{Calc++ Scanner}, for a complete example.
+
+@item Accepted Values:
+Any string.  Should be a valid identifier prefix in the target language,
+in other words, it should typically be an identifier itself (sequence of
+letters, underscores, and ---not at the beginning--- digits).
+
+@item Default Value:
+empty
+@item History:
+introduced in Bison 3.0
+@end itemize
+@end deffn
+@c api.token.prefix
+
+
+@c ================================================== api.token.raw
+@deffn Directive {%define api.token.raw}
+
+@itemize @bullet
+@item Language(s):
+all
+
+@item Purpose:
+The output files normally define the tokens with Yacc-compatible token
+numbers: sequential numbers starting at 257 except for single character
+tokens which stand for themselves (e.g., in ASCII, @samp{'a'} is numbered
+65).  The parser however uses symbol numbers assigned sequentially starting
+at 3.  Therefore each time the scanner returns an (external) token number,
+it must be mapped to the (internal) symbol number.
+
+When @code{api.token.raw} is set, tokens are assigned their internal number,
+which saves one table lookup per token to map them from the external to the
+internal number, and also saves the generation of the mapping table.  The
+gain is typically moderate, but in extreme cases (very simple user actions),
+a 10% improvement can be observed.
+
+When @code{api.token.raw} is set, the grammar cannot use character literals
+(such as @samp{'a'}).
+
+@item Accepted Values: Boolean.
+
+@item Default Value:
+@code{false}
+@item History:
+introduced in Bison 3.5.  Was initially introduced in Bison 1.25 as
+@samp{%raw}, but never worked and was removed in Bison 1.29.
+@end itemize
+@end deffn
+@c api.token.raw
+
+
+@c ================================================== api.value.automove
+@deffn Directive {%define api.value.automove}
+
+@itemize @bullet
+@item Language(s):
+C++
+
+@item Purpose:
+Let occurrences of semantic values of the right-hand sides of a rule be
+implicitly turned in rvalues.  When enabled, a grammar such as:
+
+@example
+exp:
+  "number"     @{ $$ = make_number ($1); @}
+| exp "+" exp  @{ $$ = make_binary (add, $1, $3); @}
+| "(" exp ")"  @{ $$ = $2; @}
+@end example
+
+@noindent
+is actually compiled as if you had written:
+
+@example
+exp:
+  "number"     @{ $$ = make_number (std::move ($1)); @}
+| exp "+" exp  @{ $$ = make_binary (add,
+                                   std::move ($1),
+                                   std::move ($3)); @}
+| "(" exp ")"  @{ $$ = std::move ($2); @}
+@end example
+
+Using a value several times with automove enabled is typically an error.
+For instance, instead of:
+
+@example
+exp: "twice" exp  @{ $$ = make_binary (add, $2, $2); @}
+@end example
+
+@noindent
+write:
+
+@example
+exp: "twice" exp @{ auto v = $2; $$ = make_binary (add, v, v); @}
+@end example
+
+@noindent
+It is tempting to use @code{std::move} on one of the @code{v}, but the
+argument evaluation order in C++ is unspecified.
+
+@item Accepted Values:
+Boolean.
+
+@item Default Value:
+@code{false}
+@item History:
+introduced in Bison 3.2
+@end itemize
+@end deffn
+@c api.value.automove
+
+
+@c ================================================== api.value.type
+@deffn Directive {%define api.value.type} @var{support}
+@deffnx Directive {%define api.value.type} @{@var{type}@}
+@itemize @bullet
+@item Language(s):
+all
+
+@item Purpose:
+The type for semantic values.
+
+@item Accepted Values:
+@table @asis
+@item @samp{@{@}}
+This grammar has no semantic value at all.  This is not properly supported
+yet.
+@item @samp{union-directive} (C, C++)
+The type is defined thanks to the @code{%union} directive.  You don't have
+to define @code{api.value.type} in that case, using @code{%union} suffices.
+@xref{Union Decl, ,The Union Declaration}.
+For instance:
+@example
+%define api.value.type union-directive
+%union
+@{
+  int ival;
+  char *sval;
+@}
+%token <ival> INT "integer"
+%token <sval> STR "string"
+@end example
+
+@item @samp{union} (C, C++)
+The symbols are defined with type names, from which Bison will generate a
+@code{union}.  For instance:
+@example
+%define api.value.type union
+%token <int> INT "integer"
+%token <char *> STR "string"
+@end example
+Most C++ objects cannot be stored in a @code{union}, use @samp{variant}
+instead.
+
+@item @samp{variant} (C++)
+This is similar to @code{union}, but special storage techniques are used to
+allow any kind of C++ object to be used. For instance:
+@example
+%define api.value.type variant
+%token <int> INT "integer"
+%token <std::string> STR "string"
+@end example
+@xref{C++ Variants}.
+
+@item @samp{@{@var{type}@}}
+Use this @var{type} as semantic value.
+@example
+%code requires
+@{
+  struct my_value
+  @{
+    enum
+    @{
+      is_int, is_str
+    @} kind;
+    union
+    @{
+      int ival;
+      char *sval;
+    @} u;
+  @};
+@}
+%define api.value.type @{struct my_value@}
+%token <u.ival> INT "integer"
+%token <u.sval> STR "string"
+@end example
+@end table
+
+@item Default Value:
+@itemize @minus
+@item
+@code{union-directive} if @code{%union} is used, otherwise @dots{}
+@item
+@code{int} if type tags are used (i.e., @samp{%token <@var{type}>@dots{}} or
+@samp{%nterm <@var{type}>@dots{}} is used), otherwise @dots{}
+@item
+undefined.
+@end itemize
+
+@item History:
+introduced in Bison 3.0.  Was introduced for Java only in 2.3b as
+@code{stype}.
+@end itemize
+@end deffn
+@c api.value.type
+
+
+@c ================================================== api.value.union.name
+@deffn Directive {%define api.value.union.name} @var{name}
+@itemize @bullet
+@item Language(s):
+C
+
+@item Purpose:
+The tag of the generated @code{union} (@emph{not} the name of the
+@code{typedef}).  This variable is set to @code{@var{id}} when @samp{%union
+@var{id}} is used.  There is no clear reason to give this union a name.
+
+@item Accepted Values:
+Any valid identifier.
+
+@item Default Value:
+@code{YYSTYPE}.
+
+@item History:
+Introduced in Bison 3.0.3.
+@end itemize
+@end deffn
+@c api.value.type
+
+
+@c ================================================== location_type
+@deffn Directive {%define location_type}
+Obsoleted by @code{api.location.type} since Bison 2.7.
+@end deffn
+
+
+@c ================================================== lr.default-reduction
+
+@deffn Directive {%define lr.default-reduction} @var{when}
 
 @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.)
+contain default reductions.  @xref{Default Reductions}.
 
 @item Accepted Values: @code{most}, @code{consistent}, @code{accepting}
 @item Default Value:
@@ -5559,12 +6432,16 @@
 @item @code{accepting} if @code{lr.type} is @code{canonical-lr}.
 @item @code{most} otherwise.
 @end itemize
+@item History:
+introduced as @code{lr.default-reductions} in 2.5, renamed as
+@code{lr.default-reduction} in 3.0.
 @end itemize
+@end deffn
 
-@c ============================================ lr.keep-unreachable-states
 
-@item @code{lr.keep-unreachable-states}
-@findex %define lr.keep-unreachable-states
+@c ============================================ lr.keep-unreachable-state
+
+@deffn Directive {%define lr.keep-unreachable-state}
 
 @itemize @bullet
 @item Language(s): all
@@ -5572,82 +6449,89 @@
 remain in the parser tables.  @xref{Unreachable States}.
 @item Accepted Values: Boolean
 @item Default Value: @code{false}
+@item History:
+introduced as @code{lr.keep_unreachable_states} in 2.3b, renamed as
+@code{lr.keep-unreachable-states} in 2.5, and as
+@code{lr.keep-unreachable-state} in 3.0.
 @end itemize
+@end deffn
+@c lr.keep-unreachable-state
+
 
 @c ================================================== lr.type
 
-@item @code{lr.type}
-@findex %define lr.type
+@deffn Directive {%define lr.type} @var{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.)
+LR(1) family.  @xref{LR Table Construction}.
 
 @item Accepted Values: @code{lalr}, @code{ielr}, @code{canonical-lr}
 
 @item Default Value: @code{lalr}
 @end itemize
+@end deffn
+
 
 @c ================================================== namespace
+@deffn Directive %define namespace @{@var{namespace}@}
+Obsoleted by @code{api.namespace}
+@end deffn
+@c namespace
 
-@item @code{namespace}
-@findex %define namespace
+
+@c ================================================== parse.assert
+@deffn Directive {%define parse.assert}
 
 @itemize
-@item Languages(s): C++
+@item Languages(s): C, C++
 
-@item Purpose: Specify the namespace for the parser class.
-For example, if you specify:
+@item Purpose: Issue runtime assertions to catch invalid uses.
+In C, some important invariants in the implementation of the parser are
+checked when this option is enabled.
 
-@smallexample
-%define namespace "foo::bar"
-@end smallexample
+In C++, when variants are used (@pxref{C++ Variants}), symbols must be
+constructed and destroyed properly.  This option checks these constraints.
 
-Bison uses @code{foo::bar} verbatim in references such as:
+@item Accepted Values: Boolean
 
-@smallexample
-foo::bar::parser::semantic_type
-@end smallexample
+@item Default Value: @code{false}
+@end itemize
+@end deffn
+@c parse.assert
 
-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}.
+@c ================================================== parse.error
+@deffn Directive {%define parse.error} @var{verbosity}
+@itemize
+@item Languages(s):
+all
+@item Purpose:
+Control the kind of error messages passed to the error reporting
+function.  @xref{Error Reporting, ,The Error Reporting Function
+@code{yyerror}}.
+@item Accepted Values:
+@itemize
+@item @code{simple}
+Error messages passed to @code{yyerror} are simply @w{@code{"syntax
+error"}}.
+@item @code{verbose}
+Error messages report the unexpected token, and possibly the expected ones.
+However, this report can often be incorrect when LAC is not enabled
+(@pxref{LAC}).
 @end itemize
 
+@item Default Value:
+@code{simple}
+@end itemize
+@end deffn
+@c parse.error
+
+
 @c ================================================== parse.lac
-@item @code{parse.lac}
-@findex %define parse.lac
+@deffn Directive {%define parse.lac} @var{when}
 
 @itemize
 @item Languages(s): C (deterministic parsers only)
@@ -5657,7 +6541,42 @@
 @item Accepted Values: @code{none}, @code{full}
 @item Default Value: @code{none}
 @end itemize
+@end deffn
+@c parse.lac
+
+
+@c ================================================== parse.trace
+@deffn Directive {%define parse.trace}
+
+@itemize
+@item Languages(s): C, C++, Java
+
+@item Purpose: Require parser instrumentation for tracing.
+@xref{Tracing, ,Tracing Your Parser}.
+
+In C/C++, 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 in the parser implementation
+file if it is not already defined, so that the debugging facilities are
+compiled.
+
+@item Accepted Values: Boolean
+
+@item Default Value: @code{false}
 @end itemize
+@end deffn
+@c parse.trace
+
+
+@c ================================================== parser_class_name
+@deffn Directive %define parser_class_name @{@var{name}@}
+Obsoleted by @code{api.parser.class}
+@end deffn
+@c parser_class_name
+
+
+
+
 
 
 @node %code Summary
@@ -5703,7 +6622,7 @@
 Not all qualifiers are accepted for all target languages.  Unaccepted
 qualifiers produce an error.  Some of the accepted qualifiers are:
 
-@itemize @bullet
+@table @code
 @item requires
 @findex %code requires
 
@@ -5711,10 +6630,11 @@
 @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.
+@code{YYSTYPE} and @code{YYLTYPE}.  In other words, it's the best place to
+define types referenced in @code{%union} directives.  If you use
+@code{#define} to override Bison's default @code{YYSTYPE} and @code{YYLTYPE}
+definitions, then it is also the best place.  However you should rather
+@code{%define} @code{api.value.type} and @code{api.location.type}.
 
 @item Location(s): The parser header file and the parser implementation file
 before the Bison-generated @code{YYSTYPE} and @code{YYLTYPE}
@@ -5767,7 +6687,7 @@
 @item Location(s): The parser Java file after any Java package directive and
 before any class definitions.
 @end itemize
-@end itemize
+@end table
 
 Though we say the insertion locations are language-dependent, they are
 technically skeleton-dependent.  Writers of non-standard skeletons
@@ -5790,7 +6710,7 @@
 @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
+@{@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}
@@ -5804,10 +6724,32 @@
 @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
+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.
 
+Users of Flex must update the signature of the generated @code{yylex}
+function.  Since the Flex scanner usually includes the generated header of
+the parser (to get the definitions of the tokens, etc.), the most convenient
+way is to insert the declaration of @code{yylex} in the @code{provides}
+section:
+
+@example
+%define api.prefix @{c@}
+// Emitted in the header file, after the definition of YYSTYPE.
+%code provides
+@{
+  // Tell Flex the expected prototype of yylex.
+  #define YY_DECL                             \
+    int clex (CSTYPE *yylval, CLTYPE *yylloc)
+
+  // Declare the scanner.
+  YY_DECL;
+@}
+@end example
+
+@sp 1
+
 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
@@ -5839,7 +6781,7 @@
 @code{YYDEBUG} (not renamed) is used as a default value:
 
 @example
-/* Enabling traces.  */
+/* Debug traces. */
 #ifndef CDEBUG
 # if defined YYDEBUG
 #  if YYDEBUG
@@ -5860,7 +6802,7 @@
 
 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}).
+Symbols}) and the option @option{--name-prefix} (@pxref{Output Files}).
 
 @node Interface
 @chapter Parser C-Language Interface
@@ -5901,7 +6843,7 @@
 without reading further.
 
 
-@deftypefun int yyparse (void)
+@deftypefun int yyparse (@code{void})
 The value returned by @code{yyparse} is 0 if parsing was successful (return
 is due to end-of-input).
 
@@ -5929,10 +6871,10 @@
 parameter information to it in a reentrant way.  To do so, use the
 declaration @code{%parse-param}:
 
-@deffn {Directive} %parse-param @{@var{argument-declaration}@}
+@deffn {Directive} %parse-param @{@var{argument-declaration}@} @dots{}
 @findex %parse-param
-Declare that an argument declared by the braced-code
-@var{argument-declaration} is an additional @code{yyparse} argument.
+Declare that one or more
+@var{argument-declaration} are additional @code{yyparse} arguments.
 The @var{argument-declaration} is used when declaring
 functions or prototypes.  The last identifier in
 @var{argument-declaration} must be the argument name.
@@ -5941,8 +6883,7 @@
 Here's an example.  Write this in the parser:
 
 @example
-%parse-param @{int *nastiness@}
-%parse-param @{int *randomness@}
+%parse-param @{int *nastiness@} @{int *randomness@}
 @end example
 
 @noindent
@@ -5951,7 +6892,7 @@
 @example
 @{
   int nastiness, randomness;
-  @dots{}  /* @r{Store proper data in @code{nastiness} and @code{randomness}.}  */
+  @dots{}  /* @r{Store proper data in @code{nastiness} and @code{randomness}.} */
   value = yyparse (&nastiness, &randomness);
   @dots{}
 @}
@@ -5989,49 +6930,50 @@
 @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.
+function is available if either the @samp{%define api.push-pull push} or
+@samp{%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
+@deftypefun int yypush_parse (@code{yypstate *}@var{yyps})
+The value returned by @code{yypush_parse} is the same as for @code{yyparse}
+with the following exception: it returns @code{YYPUSH_MORE} if more input is
 required to finish parsing the grammar.
+
+After @code{yypush_parse} returns a status other than @code{YYPUSH_MORE},
+the parser instance @code{yyps} may be reused for a new parse.
 @end deftypefun
 
+The fact that the parser state is reusable even after an error simplifies
+reuse.  For example, a calculator application which parses each input line
+as an expression can just keep reusing the same @code{yyps} even if an input
+was invalid.
+
 @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}
+stream.  This function is available if the @samp{%define api.push-pull both}
 declaration is used.
 @xref{Push Decl, ,A Push Parser}.
 
-@deftypefun int yypull_parse (yypstate *yyps)
+@deftypefun int yypull_parse (@code{yypstate *}@var{yyps})
 The value returned by @code{yypull_parse} is the same as for @code{yyparse}.
+
+The parser instance @code{yyps} may be reused for new parses.
 @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.
+This function is available if either the @samp{%define api.push-pull push} or
+@samp{%define api.push-pull both} declaration is used.
 @xref{Push Decl, ,A Push Parser}.
 
-@deftypefun {yypstate*} yypstate_new (void)
+@deftypefun {yypstate*} yypstate_new (@code{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
@@ -6042,15 +6984,12 @@
 @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.
+function is available if either the @samp{%define api.push-pull push} or
+@samp{%define api.push-pull both} declaration is used.
 @xref{Push Decl, ,A Push Parser}.
 
-@deftypefun void yypstate_delete (yypstate *yyps)
+@deftypefun void yypstate_delete (@code{yypstate *}@var{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
@@ -6076,6 +7015,7 @@
 
 @menu
 * Calling Convention::  How @code{yyparse} calls @code{yylex}.
+* Tokens from Literals:: Finding token types from string aliases.
 * 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
@@ -6088,21 +7028,20 @@
 @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.
+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 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.
+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:
 
@@ -6111,13 +7050,13 @@
 yylex (void)
 @{
   @dots{}
-  if (c == EOF)    /* Detect end-of-input.  */
+  if (c == EOF)    /* Detect end-of-input. */
     return 0;
   @dots{}
   if (c == '+' || c == '-')
-    return c;      /* Assume token type for `+' is '+'.  */
+    return c;      /* Assume token type for '+' is '+'. */
   @dots{}
-  return INT;      /* Return the type of the token.  */
+  return INT;      /* Return the type of the token. */
   @dots{}
 @}
 @end example
@@ -6126,33 +7065,43 @@
 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}.
 
+
+@node Tokens from Literals
+@subsection Finding Tokens by String Literals
+
 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}.
+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}.
+
+This is the preferred approach.
 
 @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.
+@code{yylex} can search for the multicharacter token in the @code{yytname}
+table.  This method is discouraged: the primary purpose of string aliases is
+forging good error messages, not describing the spelling of keywords.  In
+addition, looking for the token type at runtime incurs a (small but
+noticeable) cost.
+
+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.
+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++)
+for (int i = 0; i < YYNTOKENS; i++)
   @{
-    if (yytname[i] != 0
+    if (yytname[i]
         && yytname[i][0] == '"'
         && ! strncmp (yytname[i] + 1, token_buffer,
                       strlen (token_buffer))
@@ -6166,6 +7115,7 @@
 @code{%token-table} declaration.  @xref{Decl Summary}.
 @end itemize
 
+
 @node Token Values
 @subsection Semantic Values of Tokens
 
@@ -6179,15 +7129,15 @@
 @example
 @group
   @dots{}
-  yylval = value;  /* Put value onto Bison stack.  */
-  return INT;      /* Return the type of the token.  */
+  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
+Union Declaration}).  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:
 
@@ -6207,8 +7157,8 @@
 @example
 @group
   @dots{}
-  yylval.intval = value; /* Put value onto Bison stack.  */
-  return INT;            /* Return the type of the token.  */
+  yylval.intval = value; /* Put value onto Bison stack. */
+  return INT;            /* Return the type of the token. */
   @dots{}
 @end group
 @end example
@@ -6249,8 +7199,8 @@
 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 @{
   @dots{}
-  *lvalp = value;  /* Put value onto Bison stack.  */
-  return INT;      /* Return the type of the token.  */
+  *lvalp = value;  /* Put value onto Bison stack. */
+  return INT;      /* Return the type of the token. */
   @dots{}
 @}
 @end example
@@ -6260,36 +7210,59 @@
 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
+If you wish to pass additional arguments to @code{yylex}, use
 @code{%lex-param} just like @code{%parse-param} (@pxref{Parser
-Function}).
+Function}).  To pass additional arguments to both @code{yylex} and
+@code{yyparse}, use @code{%param}.
 
-@deffn {Directive} lex-param @{@var{argument-declaration}@}
+@deffn {Directive} %lex-param @{@var{argument-declaration}@} @dots{}
 @findex %lex-param
-Declare that the braced-code @var{argument-declaration} is an
-additional @code{yylex} argument declaration.
+Specify that @var{argument-declaration} are additional @code{yylex} argument
+declarations.  You may pass one or more such declarations, which is
+equivalent to repeating @code{%lex-param}.
+@end deffn
+
+@deffn {Directive} %param @{@var{argument-declaration}@} @dots{}
+@findex %param
+Specify that @var{argument-declaration} are additional
+@code{yylex}/@code{yyparse} argument declaration.  This is equivalent to
+@samp{%lex-param @{@var{argument-declaration}@} @dots{} %parse-param
+@{@var{argument-declaration}@} @dots{}}.  You may pass one or more
+declarations, which is equivalent to repeating @code{%param}.
 @end deffn
 
 @noindent
 For instance:
 
 @example
-%lex-param   @{int *nastiness@}
+%lex-param   @{scanner_mode *mode@}
+%parse-param @{parser_mode *mode@}
+%param       @{environment_type *env@}
 @end example
 
 @noindent
-results in the following signature:
+results in the following signatures:
 
 @example
-int yylex (int *nastiness);
+int yylex   (scanner_mode *mode, environment_type *env);
+int yyparse (parser_mode *mode, environment_type *env);
+@end example
+
+If @samp{%define api.pure full} is added:
+
+@example
+int yylex   (YYSTYPE *lvalp, scanner_mode *mode, environment_type *env);
+int yyparse (parser_mode *mode, environment_type *env);
 @end example
 
 @noindent
-If @code{%define api.pure full} (or just @code{%define api.pure}) is added:
+and finally, if both @samp{%define api.pure full} and @code{%locations} are
+used:
 
 @example
-int yylex (YYSTYPE *lvalp, int *nastiness);
+int yylex   (YYSTYPE *lvalp, YYLTYPE *llocp,
+             scanner_mode *mode, environment_type *env);
+int yyparse (parser_mode *mode, environment_type *env);
 @end example
 
 @node Error Reporting
@@ -6299,7 +7272,7 @@
 @cindex parse error
 @cindex syntax error
 
-The Bison parser detects a @dfn{syntax error} or @dfn{parse 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
@@ -6311,8 +7284,8 @@
 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
+@findex %define parse.error
+If you invoke @samp{%define parse.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
@@ -6352,7 +7325,7 @@
 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}.
+preferred over @code{%define api.pure}.
 
 When @code{%locations %define api.pure full} is used, @code{yyerror} has the
 following signature:
@@ -6574,7 +7547,7 @@
 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
+causes @code{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.
@@ -6827,9 +7800,7 @@
 the conflict:
 
 @example
-@group
 %%
-@end group
 @group
 stmt:
   expr
@@ -6861,7 +7832,8 @@
 
 @menu
 * Why Precedence::    An example showing why precedence is needed.
-* Using Precedence::  How to specify precedence in Bison grammars.
+* Using Precedence::  How to specify precedence and associativity.
+* Precedence Only::   How to specify precedence only.
 * Precedence Examples::  How these features are used in the previous example.
 * How Precedence::    How they work.
 * Non Operators::     Using precedence for general conflicts.
@@ -6918,8 +7890,9 @@
 @node Using Precedence
 @subsection Specifying Operator Precedence
 @findex %left
-@findex %right
 @findex %nonassoc
+@findex %precedence
+@findex %right
 
 Bison allows you to specify these choices with the operator precedence
 declarations @code{%left} and @code{%right}.  Each such declaration
@@ -6929,13 +7902,63 @@
 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 last alternative, @code{%precedence}, allows to define only
+precedence and no associativity at all.  As a result, any
+associativity-related conflict that remains will be reported as an
+compile-time error.  The directive @code{%nonassoc} creates run-time
+error: using the operator in a associative way is a syntax error.  The
+directive @code{%precedence} creates compile-time errors: an operator
+@emph{can} be involved in an associativity-related conflict, contrary to
+what expected the grammar author.
 
 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
+order in which they are declared.  The first precedence/associativity
+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 Only
+@subsection Specifying Precedence Only
+@findex %precedence
+
+Since POSIX Yacc defines only @code{%left}, @code{%right}, and
+@code{%nonassoc}, which all defines precedence and associativity, little
+attention is paid to the fact that precedence cannot be defined without
+defining associativity.  Yet, sometimes, when trying to solve a
+conflict, precedence suffices.  In such a case, using @code{%left},
+@code{%right}, or @code{%nonassoc} might hide future (associativity
+related) conflicts that would remain hidden.
+
+The dangling @code{else} ambiguity (@pxref{Shift/Reduce, , Shift/Reduce
+Conflicts}) can be solved explicitly.  This shift/reduce conflicts occurs
+in the following situation, where the period denotes the current parsing
+state:
+
+@example
+if @var{e1} then if  @var{e2} then @var{s1} . else @var{s2}
+@end example
+
+The conflict involves the reduction of the rule @samp{IF expr THEN
+stmt}, which precedence is by default that of its last token
+(@code{THEN}), and the shifting of the token @code{ELSE}.  The usual
+disambiguation (attach the @code{else} to the closest @code{if}),
+shifting must be preferred, i.e., the precedence of @code{ELSE} must be
+higher than that of @code{THEN}.  But neither is expected to be involved
+in an associativity related conflict, which can be specified as follows.
+
+@example
+%precedence THEN
+%precedence ELSE
+@end example
+
+The unary-minus is another typical example where associativity is
+usually over-specified, see @ref{Infix Calc, , Infix Notation
+Calculator - @code{calc}}.  The @code{%left} directive is traditionally
+used to declare the precedence of @code{NEG}, which is more than needed
+since it also defines its associativity.  While this is harmless in the
+traditional example, who knows how @code{NEG} might be used in future
+evolutions of the grammar@dots{}
+
 @node Precedence Examples
 @subsection Precedence Examples
 
@@ -6996,8 +8019,8 @@
 
 @example
 @group
-%nonassoc "then"
-%nonassoc "else"
+%precedence "then"
+%precedence "else"
 @end group
 @end example
 
@@ -7010,7 +8033,7 @@
 @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
+``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}
@@ -7030,8 +8053,8 @@
 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
+The Bison precedence declarations
+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.
@@ -7139,7 +8162,7 @@
 @example
 @group
 sequence:
-  /* empty */    @{ printf ("empty sequence\n"); @}
+  %empty         @{ printf ("empty sequence\n"); @}
 | maybeword
 | sequence word  @{ printf ("added word %s\n", $2); @}
 ;
@@ -7147,8 +8170,8 @@
 
 @group
 maybeword:
-  /* empty */   @{ printf ("empty maybeword\n"); @}
-| word          @{ printf ("single word %s\n", $1); @}
+  %empty    @{ printf ("empty maybeword\n"); @}
+| word      @{ printf ("single word %s\n", $1); @}
 ;
 @end group
 @end example
@@ -7179,7 +8202,7 @@
 @example
 @group
 sequence:
-  /* empty */    @{ printf ("empty sequence\n"); @}
+  %empty         @{ printf ("empty sequence\n"); @}
 | sequence word  @{ printf ("added word %s\n", $2); @}
 ;
 @end group
@@ -7188,9 +8211,9 @@
 Here is another common error that yields a reduce/reduce conflict:
 
 @example
-sequence:
 @group
-  /* empty */
+sequence:
+  %empty
 | sequence words
 | sequence redirects
 ;
@@ -7198,14 +8221,14 @@
 
 @group
 words:
-  /* empty */
+  %empty
 | words word
 ;
 @end group
 
 @group
 redirects:
-  /* empty */
+  %empty
 | redirects redirect
 ;
 @end group
@@ -7228,7 +8251,7 @@
 
 @example
 sequence:
-  /* empty */
+  %empty
 | sequence word
 | sequence redirect
 ;
@@ -7240,7 +8263,7 @@
 @example
 @group
 sequence:
-  /* empty */
+  %empty
 | sequence words
 | sequence redirects
 ;
@@ -7279,12 +8302,12 @@
 rule:
 
 @example
-%nonassoc "word"
-%nonassoc "sequence"
+%precedence "word"
+%precedence "sequence"
 %%
 @group
 sequence:
-  /* empty */
+  %empty
 | sequence word      %prec "sequence"
 | sequence redirect  %prec "sequence"
 ;
@@ -7306,7 +8329,7 @@
 %%
 @group
 sequence:
-  /* empty */
+  %empty
 | sequence word      %prec "word"
 | sequence redirect  %prec "redirect"
 ;
@@ -7329,15 +8352,16 @@
 | name_list ':' type
 ;
 @end group
+
 @group
 return_spec:
   type
 | name ':' type
 ;
 @end group
-@group
+
 type: "id";
-@end group
+
 @group
 name: "id";
 name_list:
@@ -7376,8 +8400,7 @@
 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.)
+details.
 
 If you instead wish to work around LALR(1)'s limitations, you
 can often fix a mysterious conflict by identifying the two parser states
@@ -7391,7 +8414,7 @@
 return_spec:
   type
 | name ':' type
-| "id" "bogus"       /* This rule is never used.  */
+| "id" "bogus"       /* This rule is never used. */
 ;
 @end group
 @end example
@@ -7411,14 +8434,19 @@
 rather than the one for @code{name}.
 
 @example
+@group
 param_spec:
   type
 | name_list ':' type
 ;
+@end group
+
+@group
 return_spec:
   type
 | "id" ':' type
 ;
+@end group
 @end example
 
 For a more detailed exposition of LALR(1) parsers and parser
@@ -7431,18 +8459,15 @@
 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.
+Another example is Bison's @code{%define parse.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.
@@ -7484,9 +8509,6 @@
 @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
@@ -7523,7 +8545,8 @@
 
 @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
+conflicts statically (for example, with @code{%left} or @code{%precedence}),
+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
@@ -7580,7 +8603,7 @@
 @node Default Reductions
 @subsection Default Reductions
 @cindex default reductions
-@findex %define lr.default-reductions
+@findex %define lr.default-reduction
 @findex %nonassoc
 
 After parser table construction, Bison identifies the reduction with the
@@ -7662,9 +8685,9 @@
 split the parse instead.
 
 To adjust which states have default reductions enabled, use the
-@code{%define lr.default-reductions} directive.
+@code{%define lr.default-reduction} directive.
 
-@deffn {Directive} {%define lr.default-reductions} @var{where}
+@deffn {Directive} {%define lr.default-reduction} @var{where}
 Specify the kind of states that are permitted to contain default reductions.
 The accepted values of @var{where} are:
 @itemize
@@ -7672,9 +8695,6 @@
 @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
@@ -7710,9 +8730,7 @@
 @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.)
+This feature is currently only available for deterministic parsers in C and C++.
 @end deffn
 
 Conceptually, the LAC mechanism is straight-forward.  Whenever the parser
@@ -7787,7 +8805,7 @@
 
 @node Unreachable States
 @subsection Unreachable States
-@findex %define lr.keep-unreachable-states
+@findex %define lr.keep-unreachable-state
 @cindex unreachable states
 
 If there exists no sequence of transitions from the parser's start state to
@@ -7800,7 +8818,7 @@
 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}
+@deffn {Directive} {%define lr.keep-unreachable-state} @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
@@ -7957,12 +8975,14 @@
 
 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.
+You can generate a deterministic parser containing C++ user code from
+the default (C) skeleton, as well as from the C++ skeleton
+(@pxref{C++ Parsers}).  However, if you do use the default skeleton
+and want to allow the parsing stack to grow,
+be careful not to use semantic types or location types that require
+non-trivial copy constructors.
+The C skeleton bypasses these constructors when copying data to
+new, larger stacks.
 
 @node Error Recovery
 @chapter Error Recovery
@@ -7994,7 +9014,7 @@
 
 @example
 stmts:
-  /* empty string */
+  %empty
 | stmts '\n'
 | stmts exp '\n'
 | stmts error '\n'
@@ -8029,7 +9049,7 @@
 the current input line or current statement if an error is detected:
 
 @example
-stmt: error ';'  /* On error, skip until ';' is read.  */
+stmt: error ';'  /* On error, skip until ';' is read. */
 @end example
 
 It is also useful to recover to the matching close-delimiter of an
@@ -8304,7 +9324,7 @@
 
 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.
+chapter explains how to 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
@@ -8351,7 +9371,21 @@
 The following grammar file, @file{calc.y}, will be used in the sequel:
 
 @example
-%token NUM STR
+@group
+%union
+@{
+  int ival;
+  const char *sval;
+@}
+@end group
+@group
+%token <ival> NUM
+%nterm <ival> exp
+@end group
+@group
+%token <sval> STR
+%nterm <sval> useless
+@end group
 @group
 %left '+' '-'
 %left '*'
@@ -8373,11 +9407,12 @@
 @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
+calc.y: @dwarning{warning}: 1 nonterminal useless in grammar [@dwarning{-Wother}]
+calc.y: @dwarning{warning}: 1 rule useless in grammar [@dwarning{-Wother}]
+calc.y:19.1-7: @dwarning{warning}: nonterminal useless in grammar: useless [@dwarning{-Wother}]
+   19 | @dwarning{useless: STR;}
+      | @dwarning{^~~~~~~}
+calc.y: @dwarning{warning}: 7 shift/reduce conflicts [@dwarning{-Wconflicts-sr}]
 @end example
 
 When given @option{--report=state}, in addition to @file{calc.tab.c}, it
@@ -8446,8 +9481,8 @@
 '-' (45) 2
 '/' (47) 4
 error (256)
-NUM (258) 5
-STR (259)
+NUM <ival> (258) 5
+STR <sval> (259)
 @end group
 
 @group
@@ -8455,7 +9490,7 @@
 
 $accept (9)
     on left: 0
-exp (10)
+exp <ival> (10)
     on left: 1 2 3 4 5, on right: 0 1 2 3 4
 @end group
 @end example
@@ -8767,8 +9802,8 @@
 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
+adding @samp{.gv} instead.  If the grammar file is @file{foo.y}, the
+Graphviz output file is called @file{foo.gv}.  A DOT file may also be
 produced via an XML file and XSLT processing (@pxref{Xml,,Visualizing your
 parser in multiple formats}).
 
@@ -8790,11 +9825,11 @@
 @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.
+Parser}, for a detailed analysis of the textual report.
 
 @ifnotinfo
 @float Figure,fig:graph
-@image{figs/example, 430pt}
+@center @image{figs/example, 430pt,,,.svg}
 @caption{A graphical rendering of the parser.}
 @end float
 @end ifnotinfo
@@ -8817,7 +9852,7 @@
 
 @subheading Graphical Representation of Shifts
 
-Shifts are shown as solid arrows, labelled with the lookahead token for that
+Shifts are shown as solid arrows, labeled with the lookahead token for that
 shift. The following describes a reduction in the @file{rr.output} file:
 
 @example
@@ -8832,12 +9867,12 @@
 
 A Graphviz rendering of this portion of the graph could be:
 
-@center @image{figs/example-shift, 100pt}
+@center @image{figs/example-shift, 100pt,,,.svg}
 
 @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
+bearing the number of the reduction rule. The arrow is labeled with the
 appropriate comma separated lookahead tokens. If the reduction is the default
 action for the given state, there is no such label.
 
@@ -8854,7 +9889,7 @@
 
 A Graphviz rendering of this portion of the graph could be:
 
-@center @image{figs/example-reduce, 120pt}
+@center @image{figs/example-reduce, 120pt,,,.svg}
 
 When unresolved conflicts are present, because in deterministic parsing
 a single decision can be made, Bison can arbitrarily choose to disable a
@@ -8863,9 +9898,9 @@
 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''.
+state. It is shown as a blue diamond, labeled ``Acc''.
 
-@subheading Graphical representation of go tos
+@subheading Graphical Representation of Gotos
 
 The @samp{go to} jump transitions are represented as dotted lines bearing
 the name of the rule being jumped to.
@@ -8909,12 +9944,12 @@
 
 Sample usage (requires @command{xsltproc}):
 @example
-$ bison -x gr.y
+$ @kbd{bison -x gr.y}
 @group
-$ bison --print-datadir
+$ @kbd{bison --print-datadir}
 /usr/local/share/bison
 @end group
-$ xsltproc /usr/local/share/bison/xslt/xml2xhtml.xsl gr.xml >gr.html
+$ @kbd{xsltproc /usr/local/share/bison/xslt/xml2xhtml.xsl gr.xml >gr.html}
 @end example
 
 @c ================================================= Tracing
@@ -8956,18 +9991,25 @@
 @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,
+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.
+Summary}).  This Bison extension is maintained for backward
+compatibility with previous versions of Bison.
+
+@item the variable @samp{parse.trace}
+@findex %define parse.trace
+Add the @samp{%define parse.trace} directive (@pxref{%define
+Summary,,parse.trace}), or pass the @option{-Dparse.trace} option
+(@pxref{Tuning the Parser}).  This is a Bison extension, which is 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
+We suggest that you always enable the trace option so that debugging is
 always possible.
 
 @findex YYFPRINTF
@@ -9022,9 +10064,7 @@
 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.
+Semantic Values}.
 
 As a demonstration of @code{%printer}, consider the multi-function
 calculator, @code{mfcalc} (@pxref{Multi-function Calc}).  To enable run-time
@@ -9033,15 +10073,15 @@
 
 @comment file: mfcalc.y: 2
 @example
-/* Generate the parser description file.  */
+/* Generate the parser description file. */
 %verbose
-/* Enable run-time traces (yydebug).  */
+/* 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>;
+/* Formatting semantic values. */
+%printer @{ fprintf (yyo, "%s", $$->name); @} VAR;
+%printer @{ fprintf (yyo, "%s()", $$->name); @} FUN;
+%printer @{ fprintf (yyo, "%g", $$); @} <double>;
 @end example
 
 The @code{%define} directive instructs Bison to generate run-time trace
@@ -9053,9 +10093,9 @@
 
 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.
+either on the symbol type (e.g., @code{VAR} or @code{FUN}), or on the type
+tag: since @code{<double>} 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.
@@ -9074,17 +10114,17 @@
 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}).
+a valueless (@samp{()}) @code{input} nonterminal (@code{nterm}).
 
 Then the parser calls the scanner.
 @example
-Reading a token: Next token is token FNCT (sin())
-Shifting token FNCT (sin())
+Reading a token: Next token is token FUN (sin())
+Shifting token FUN (sin())
 Entering state 6
 @end example
 
 @noindent
-That token (@code{token}) is a function (@code{FNCT}) whose value is
+That token (@code{token}) is a function (@code{FUN}) 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.
@@ -9105,7 +10145,7 @@
 
 @noindent
 The previous reduction demonstrates the @code{%printer} directive for
-@code{<val>}: both the token @code{NUM} and the resulting nonterminal
+@code{<double>}: both the token @code{NUM} and the resulting nonterminal
 @code{exp} have @samp{1} as value.
 
 @example
@@ -9139,7 +10179,7 @@
 Shifting token ')' ()
 Entering state 31
 Reducing stack by rule 9 (line 47):
-   $1 = token FNCT (sin())
+   $1 = token FUN (sin())
    $2 = token '(' ()
    $3 = nterm exp (0.000000)
    $4 = token ')' ()
@@ -9187,14 +10227,16 @@
 
 @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.
+
+The @code{%printer} directive was introduced in Bison 1.50 (Novembre 2002).
+Before then, @code{YYPRINT} provided a similar feature, but only for
+terminal symbols and only with the @file{yacc.c} skeleton.
 
 @deffn {Macro} YYPRINT (@var{stream}, @var{token}, @var{value});
 @findex YYPRINT
+Deprecated, will be removed eventually.
+
 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}).
@@ -9207,7 +10249,7 @@
 
 @example
 %@{
-  static void print_token_value (FILE *, int, YYSTYPE);
+  static void print_token_value (FILE *file, int type, YYSTYPE value);
   #define YYPRINT(File, Type, Value)            \
     print_token_value (File, Type, Value)
 %@}
@@ -9224,6 +10266,9 @@
 @}
 @end example
 
+@xref{Mfcalc Traces, ,Enabling Debug Traces for @code{mfcalc}}, for the
+proper use of @code{%printer}.
+
 @c ================================================= Invoking Bison
 
 @node Invocation
@@ -9235,38 +10280,37 @@
 The usual way to invoke Bison is as follows:
 
 @example
-bison @var{infile}
+$ @kbd{bison @var{file}}
 @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}.
+Here @var{file} 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 :
+For example:
 
 @example
-bison -d @var{infile.yxx}
+$ @kbd{bison -d @var{file.yxx}}
 @end example
 @noindent
-will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}, and
+will produce @file{file.tab.cxx} and @file{file.tab.hxx}, and
 
 @example
-bison -d -o @var{output.c++} @var{infile.y}
+$ @kbd{bison -d -o @var{output.c++} @var{file.y}}
 @end example
 @noindent
-will produce @file{output.c++} and @file{outfile.h++}.
+will produce @file{output.c++} and @file{output.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.
+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,
@@ -9285,13 +10329,22 @@
 @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.
+Here is a list of options that can be used with Bison.  It is followed by a
+cross key alphabetized by long option.
 
-@c Please, keep this ordered as in `bison --help'.
-@noindent
-Operations modes:
+@menu
+* Operation Modes::    Options controlling the global behavior of @command{bison}
+* Diagnostics::        Options controlling the diagnostics
+* Tuning the Parser::  Options changing the generated parsers
+* Output Files::       Options controlling the output
+@end menu
+
+@node Operation Modes
+@subsection Operation Modes
+
+Options controlling the global behavior of @command{bison}.
+
+@c Please, keep this ordered as in 'bison --help'.
 @table @option
 @item -h
 @itemx --help
@@ -9307,36 +10360,247 @@
 @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:
+@item -u
+@item --update
+Update the grammar file (remove duplicates, update deprecated directives,
+etc.) and exit (i.e., do not generate any of the output files).  Leaves a
+backup of the original file with a @code{~} appended.  For instance:
 
 @example
-#! /bin/sh
-bison -y "$@@"
+@group
+$ @kbd{cat foo.y}
+%error-verbose
+%define parse.error verbose
+%%
+exp:;
+@end group
+@group
+$ @kbd{bison -u foo.y}
+foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
+    1 | @dwarning{%error-verbose}
+      | @dwarning{^~~~~~~~~~~~~~}
+foo.y:2.1-27: @dwarning{warning}: %define variable 'parse.error' redefined [@dwarning{-Wother}]
+    2 | @dwarning{%define parse.error verbose}
+      | @dwarning{^~~~~~~~~~~~~~~~~~~~~~~~~~~}
+foo.y:1.1-14:     previous definition
+    1 | @dnotice{%error-verbose}
+      | @dnotice{^~~~~~~~~~~~~~}
+bison: file 'foo.y' was updated (backup: 'foo.y~')
+@end group
+@group
+$ @kbd{cat foo.y}
+%define parse.error verbose
+%%
+exp:;
+@end group
 @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.
+See the documentation of @option{--feature=fixit} below for more details.
 
+@item -f [@var{feature}]
+@itemx --feature[=@var{feature}]
+Activate miscellaneous @var{feature}s. @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-diagnostics}. 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 (@samp{^}). Here is an example, using the
+following file @file{in.y}:
+
+@example
+%nterm <ival> exp
+%%
+exp: exp '+' exp @{ $exp = $1 + $2; @};
+@end example
+
+When invoked with @option{-fcaret} (or nothing), Bison will report:
+
+@example
+@group
+in.y:3.20-23: @derror{error}: ambiguous reference: '$exp'
+    3 | exp: exp '+' exp @{ @derror{$exp} = $1 + $2; @};
+      |                    @derror{^~~~}
+@end group
+@group
+in.y:3.1-3:       refers to: $exp at $$
+    3 | @dnotice{exp}: exp '+' exp @{ $exp = $1 + $2; @};
+      | @dnotice{^~~}
+@end group
+@group
+in.y:3.6-8:       refers to: $exp at $1
+    3 | exp: @dnotice{exp} '+' exp @{ $exp = $1 + $2; @};
+      |      @dnotice{^~~}
+@end group
+@group
+in.y:3.14-16:     refers to: $exp at $3
+    3 | exp: exp '+' @dnotice{exp} @{ $exp = $1 + $2; @};
+      |              @dnotice{^~~}
+@end group
+@group
+in.y:3.32-33: @derror{error}: $2 of 'exp' has no declared type
+    3 | exp: exp '+' exp @{ $exp = $1 + @derror{$2}; @};
+      |                                @derror{^~}
+@end group
+@end example
+
+Whereas, when invoked with @option{-fno-caret}, Bison will only report:
+
+@example
+@group
+in.y:3.20-23: @derror{error}: ambiguous reference: '$exp'
+in.y:3.1-3:       refers to: $exp at $$
+in.y:3.6-8:       refers to: $exp at $1
+in.y:3.14-16:     refers to: $exp at $3
+in.y:3.32-33: @derror{error}: $2 of 'exp' has no declared type
+@end group
+@end example
+
+This option is activated by default.
+
+@item fixit
+@itemx diagnostics-parseable-fixits
+Show machine-readable fixes, in a manner similar to GCC's and Clang's
+@option{-fdiagnostics-parseable-fixits}.
+
+Fix-its are generated for duplicate directives:
+
+@example
+@group
+$ @kbd{cat foo.y}
+%define api.prefix @{foo@}
+%define api.prefix @{bar@}
+%%
+exp:;
+@end group
+
+@group
+$ @kbd{bison -ffixit foo.y}
+foo.y:2.1-24: @derror{error}: %define variable 'api.prefix' redefined
+    2 | @derror{%define api.prefix @{bar@}}
+      | @derror{^~~~~~~~~~~~~~~~~~~~~~~~}
+foo.y:1.1-24:     previous definition
+    1 | @dnotice{%define api.prefix @{foo@}}
+      | @dnotice{^~~~~~~~~~~~~~~~~~~~~~~~}
+fix-it:"foo.y":@{2:1-2:25@}:""
+foo.y: @dwarning{warning}: fix-its can be applied.  Rerun with option '--update'. [@dwarning{-Wother}]
+@end group
+@end example
+
+They are also generated to update deprecated directives, unless
+@option{-Wno-deprecated} was given:
+
+@example
+@group
+$ @kbd{cat /tmp/foo.yy}
+%error-verbose
+%name-prefix "foo"
+%%
+exp:;
+@end group
+@group
+$ @kbd{bison foo.y}
+foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
+    1 | @dwarning{%error-verbose}
+      | @dwarning{^~~~~~~~~~~~~~}
+foo.y:2.1-18: @dwarning{warning}: deprecated directive, use '%define api.prefix @{foo@}' [@dwarning{-Wdeprecated}]
+    2 | @dwarning{%name-prefix "foo"}
+      | @dwarning{^~~~~~~~~~~~~~~~~~}
+foo.y: @dwarning{warning}: fix-its can be applied.  Rerun with option '--update'. [@dwarning{-Wother}]
+@end group
+@end example
+
+The fix-its are applied by @command{bison} itself when given the option
+@option{-u}/@option{--update}.  See its documentation above.
+
+@item syntax-only
+Do not generate the output files.  The name of this feature is somewhat
+misleading as more than just checking the syntax is done: every stage is run
+(including checking for conflicts for instance), except the generation of
+the output files.
+
+@end table
+@end table
+
+@node Diagnostics
+@subsection Diagnostics
+
+Options controlling the diagnostics.
+
+@c Please, keep this ordered as in 'bison --help'.
+@table @code
 @item -W [@var{category}]
 @itemx --warnings[=@var{category}]
 Output warnings falling in @var{category}.  @var{category} can be one
 of:
 @table @code
+@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 dangling-alias
+Report string literals that are not bound to a token symbol.
+
+String literals, which allow for better error messages, are (too) liberally
+accepted by Bison, which might result in silent errors.  For instance
+
+@example
+%type <exVal> cond "condition"
+@end example
+
+@noindent
+does not define ``condition'' as a string alias to @code{cond}---nonterminal
+symbols do not have string aliases.  It is rather equivalent to
+
+@example
+%nterm <exVal> cond
+%token <exVal> "condition"
+@end example
+
+@noindent
+i.e., it gives the @samp{"condition"} token the type @code{exVal}.
+
+Also, because string aliases do not need to be defined, typos such as
+@samp{"baz"} instead of @samp{"bar"} will be not reported.
+
+The option @option{-Wdangling-alias} catches these situations.  On
+
+@example
+%token BAR "bar"
+%type <ival> foo "foo"
+%%
+foo: "baz" @{@}
+@end example
+
+@noindent
+@command{bison -Wdangling-alias} reports
+
+@example
+@dwarning{warning}: string literal not attached to a symbol
+      | %type <ival> foo @dwarning{"foo"}
+      |                  @dwarning{^~~~~}
+@dwarning{warning}: string literal not attached to a symbol
+      | foo: @dwarning{"baz"} @{@}
+      |      @dwarning{^~~~~}
+@end example
+
+@item deprecated
+Deprecated constructs whose support will be removed in future versions of
+Bison.
+
+@item empty-rule
+Empty rules without @code{%empty}.  @xref{Empty Rules}.  Disabled by
+default, but enabled by uses of @code{%empty}, unless
+@option{-Wno-empty-rule} was specified.
+
 @item midrule-values
-Warn about mid-rule values that are set but not used within any of the actions
+Warn about midrule values that are set but not used within any of the actions
 of the parent rule.
 For example, warn about unused @code{$2} in:
 
@@ -9344,8 +10608,8 @@
 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:
+Also warn about midrule values that are used but not set.
+For example, warn about unset @code{$$} in the midrule action in:
 
 @example
 exp: '1' @{ $1 = 1; @} '+' exp @{ $$ = $2 + $4; @};
@@ -9355,17 +10619,70 @@
 be false alarms in existing grammars employing the Yacc constructs
 @code{$0} or @code{$-@var{n}} (where @var{n} is some positive integer).
 
+@item precedence
+Useless precedence and associativity directives.  Disabled by default.
+
+Consider for instance the following grammar:
+
+@example
+@group
+%nonassoc "="
+%left "+"
+%left "*"
+%precedence "("
+@end group
+%%
+@group
+stmt:
+  exp
+| "var" "=" exp
+;
+@end group
+
+@group
+exp:
+  exp "+" exp
+| exp "*" "num"
+| "(" exp ")"
+| "num"
+;
+@end group
+@end example
+
+Bison reports:
+
+@c cannot leave the location and the [-Wprecedence] for lack of
+@c width in PDF.
+@example
+@group
+@dwarning{warning}: useless precedence and associativity for "="
+      | %nonassoc @dwarning{"="}
+      |           @dwarning{^~~}
+@end group
+@group
+@dwarning{warning}: useless associativity for "*", use %precedence
+      | %left @dwarning{"*"}
+      |       @dwarning{^~~}
+@end group
+@group
+@dwarning{warning}: useless precedence for "("
+      | %precedence @dwarning{"("}
+      |             @dwarning{^~~}
+@end group
+@end example
+
+One would get the exact same parser with the following directives instead:
+
+@example
+@group
+%left "+"
+%precedence "*"
+@end group
+@end example
+
 @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.
 
@@ -9374,104 +10691,118 @@
 categories.
 
 @item all
-All the warnings.
+All the warnings except @code{dangling-alias} and @code{yacc}.
+
 @item none
 Turn off all the warnings.
+
 @item error
-Treat warnings as errors.
+See @option{-Werror}, below.
 @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:
+@item -Werror
+Turn enabled warnings for every @var{category} into errors, unless they are
+explicitly disabled by @option{-Wno-error=@var{category}}.
+
+@item -Werror=@var{category}
+Enable warnings falling in @var{category}, and treat them as errors.
+
+@var{category} is the same as for @option{--warnings}, with the exception that
+it may not be prefixed with @samp{no-} (see above).
+
+Note that the precedence of the @samp{=} and @samp{,} operators is such that
+the following commands are @emph{not} equivalent, as the first will not treat
+S/R conflicts as errors.
+
+@example
+$ @kbd{bison -Werror=yacc,conflicts-sr input.y}
+$ @kbd{bison -Werror=yacc,error=conflicts-sr input.y}
+@end example
+
+@item -Wno-error
+Do not turn enabled warnings for every @var{category} into errors, unless
+they are explicitly enabled by @option{-Werror=@var{category}}.
+
+@item -Wno-error=@var{category}
+Deactivate the error treatment for this @var{category}. However, the warning
+itself won't be disabled, or enabled, by this option.
+
+@item --color
+Equivalent to @option{--color=always}.
+
+@item --color=@var{when}
+Control whether diagnostics are colorized, depending on @var{when}:
 @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}:
+@item always
+@itemx yes
+Enable colorized diagnostics.
 
-@example
-%type <ival> exp
-%%
-exp: exp '+' exp @{ $exp = $1 + $2; @};
-@end example
+@item never
+@itemx no
+Disable colorized diagnostics.
 
-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
+@item auto @r{(default)}
+@itemx tty
+Diagnostics will be colorized if the output device is a tty, i.e. when the
+output goes directly to a text screen or terminal emulator window.
 @end table
 
-@noindent
-Tuning the parser:
+@item --style=@var{file}
+Specifies the CSS style @var{file} to use when colorizing. It has an effect
+only when the @option{--color} option is effective.  The
+@file{bison-default.css} file provide a good example from which to define
+your own style file.  See the documentation of libtextstyle for more
+details.
+@end table
 
+@node Tuning the Parser
+@subsection Tuning the Parser
+
+Options changing the generated parsers.
+
+@c Please, keep this ordered as in 'bison --help'.
 @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}.
+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:
+Each of these is equivalent to @samp{%define @var{name} @var{value}}
+(@pxref{%define Summary}).  Note that the delimiters are part of
+@var{value}: @option{-Dapi.value.type=union},
+@option{-Dapi.value.type=@{union@}} and @option{-Dapi.value.type="union"}
+correspond to @samp{%define api.value.type union}, @samp{%define
+api.value.type @{union@}} and @samp{%define api.value.type "union"}.
+
+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}.
+If that command-line definition is specified by a @option{-D} or
+@option{--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}
+If that command-line definition is specified by a @option{-F} or
+@option{--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
+You should avoid using @option{-F} and @option{--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.
 
@@ -9488,7 +10819,7 @@
 @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
+Summary}).  Obsoleted by @option{-Dapi.prefix=@var{prefix}}.  @xref{Multiple
 Parsers, ,Multiple Parsers in the Same Program}.
 
 @item -l
@@ -9519,11 +10850,37 @@
 @item -k
 @itemx --token-table
 Pretend that @code{%token-table} was specified.  @xref{Decl Summary}.
+
+@item -y
+@itemx --yacc
+Act more like the traditional @command{yacc} command.  This can cause
+different diagnostics to be generated (it implies @option{-Wyacc}), 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 Bison extensions like
+@samp{%glr-parser}, Bison might not be Yacc-compatible even if this option
+is specified.
 @end table
 
-@noindent
-Adjust the output:
+@node Output Files
+@subsection Output Files
 
+Options controlling the output.
+
+@c Please, keep this ordered as in 'bison --help'.
 @table @option
 @item --defines[=@var{file}]
 Pretend that @code{%defines} was specified, i.e., write an extra output
@@ -9531,8 +10888,8 @@
 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
+This is the same as @option{--defines} except @option{-d} does not accept a
+@var{file} argument since POSIX Yacc requires that @option{-d} can be bundled
 with other short options.
 
 @item -b @var{file-prefix}
@@ -9587,12 +10944,12 @@
 
 @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}
+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}.
+@code{@var{file}} is optional.  If omitted and the grammar file is
+@file{foo.y}, the output file will be @file{foo.gv} if the @code{%required}
+version is 3.4 or better, @file{foo.dot} otherwise.
 
 @item -x [@var{file}]
 @itemx --xml[=@var{file}]
@@ -9600,8 +10957,6 @@
 @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
@@ -9618,24 +10973,37 @@
 @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}).
+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:
+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:
+@noindent
+The @code{int} value returned by this @code{yyerror} is ignored.
+
+The implementation of Yacc library's @code{main} function is:
+
+@example
+int main (void)
+@{
+  setlocale (LC_ALL, "");
+  return yyparse ();
+@}
+@end example
+
+@noindent
+so if you use it, the internationalization support is enabled (e.g., error
+messages are translated), and your @code{yyparse} function should have the
+following type signature:
 
 @example
 int yyparse (void);
@@ -9646,6 +11014,10 @@
 @node Other Languages
 @chapter Parsers Written In Other Languages
 
+In addition to C, Bison can generate parsers in C++ and Java.  This chapter
+is devoted to these languages.  The reader is expected to understand how
+Bison works; read the introductory chapters first if you don't.
+
 @menu
 * C++ Parsers::                 The interface to generate C++ parser classes
 * Java Parsers::                The interface to generate Java parser classes
@@ -9654,15 +11026,217 @@
 @node C++ Parsers
 @section C++ Parsers
 
+The Bison parser in C++ is an object, an instance of the class
+@code{yy::parser}.
+
 @menu
+* A Simple C++ Example::        A short introduction to C++ parsers
 * C++ Bison Interface::         Asking for C++ parser generation
+* C++ Parser Interface::        Instantiating and running the parser
 * 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 A Simple C++ Example
+@subsection A Simple C++ Example
+
+This tutorial about C++ parsers is based on a simple, self contained
+example.  The following sections are the reference manual for Bison with
+C++, the last one showing a fully blown example (@pxref{A Complete C++
+Example}).
+
+To look nicer, our example will be in C++14.  It is not required: Bison
+supports the original C++98 standard.
+
+A Bison file has three parts.  In the first part, the prologue, we start by
+making sure we run a version of Bison which is recent enough, and that we
+generate C++.
+
+@comment file: c++/simple.yy: 1
+@example
+%require "3.2"
+%language "c++"
+@end example
+
+Let's dive directly into the middle part: the grammar.  Our input is a
+simple list of strings, that we display once the parsing is done.
+
+@comment file: c++/simple.yy: 2
+@example
+%%
+@group
+result:
+  list  @{ std::cout << $1 << '\n'; @}
+;
+@end group
+
+%nterm <std::vector<std::string>> list;
+@group
+list:
+  %empty     @{ /* Generates an empty string list */ @}
+| list item  @{ $$ = $1; $$.push_back ($2); @}
+;
+@end group
+@end example
+
+We used a vector of strings as a semantic value!  To use genuine C++ objects
+as semantic values---not just PODs---we cannot rely on the union that Bison
+uses by default to store them, we need @emph{variants} (@pxref{C++
+Variants}):
+
+@comment file: c++/simple.yy: 1
+@example
+%define api.value.type variant
+@end example
+
+Obviously, the rule for @code{result} needs to print a vector of strings.
+In the prologue, we add:
+
+@comment file: c++/simple.yy: 1
+@example
+%code
+@{
+  // Print a list of strings.
+  auto
+  operator<< (std::ostream& o, const std::vector<std::string>& ss)
+    -> std::ostream&
+  @{
+    o << '@{';
+    const char *sep = "";
+@group
+    for (const auto& s: ss)
+      @{
+        o << sep << s;
+        sep = ", ";
+      @}
+@end group
+    return o << '@}';
+  @}
+@}
+@end example
+
+@noindent
+You may want to move it into the @code{yy} namespace to avoid leaking it in
+your default namespace.  We recommend that you keep the actions simple, and
+move details into auxiliary functions, as we did with @code{operator<<}.
+
+Our list of strings will be built from two types of items: numbers and
+strings:
+
+@comment file: c++/simple.yy: 2
+@example
+%nterm <std::string> item;
+%token <std::string> TEXT;
+%token <int> NUMBER;
+@group
+item:
+  TEXT
+| NUMBER  @{ $$ = std::to_string ($1); @}
+;
+@end group
+@end example
+
+In the case of @code{TEXT}, the implicit default action applies: @w{@code{$$
+= $1}.}
+
+@sp 1
+
+Our scanner deserves some attention.  The traditional interface of
+@code{yylex} is not type safe: since the token type and the token value are
+not correlated, you may return a @code{NUMBER} with a string as semantic
+value.  To avoid this, we use @emph{token constructors} (@pxref{Complete
+Symbols}).  This directive:
+
+@comment file: c++/simple.yy: 1
+@example
+%define api.token.constructor
+@end example
+
+@noindent
+requests that Bison generates the functions @code{make_TEXT} and
+@code{make_NUMBER}.  As a matter of fact, it is convenient to have also a
+symbol to mark the end of input, say @code{END_OF_FILE}:
+
+@comment file: c++/simple.yy: 1
+@example
+%token END_OF_FILE 0
+@end example
+
+@noindent
+The @code{0} tells Bison this token is special: when it is reached, parsing
+finishes.
+
+Everything is in place for our scanner:
+
+@comment file: c++/simple.yy: 1
+@example
+%code
+@{
+  namespace yy
+  @{
+    // Return the next token.
+    auto yylex () -> parser::symbol_type
+    @{
+      static int count = 0;
+      switch (int stage = count++)
+        @{
+@group
+        case 0:
+          return parser::make_TEXT ("I have three numbers for you.");
+@end group
+@group
+        case 1: case 2: case 3:
+          return parser::make_NUMBER (stage);
+@end group
+@group
+        case 4:
+          return parser::make_TEXT ("And that's all!");
+@end group
+@group
+        default:
+          return parser::make_END_OF_FILE ();
+@end group
+        @}
+    @}
+  @}
+@}
+@end example
+
+In the epilogue, the third part of a Bison grammar file, we leave simple
+details: the error reporting function, and the main function.
+
+@comment file: c++/simple.yy: 3
+@example
+%%
+namespace yy
+@{
+  // Report an error to the user.
+  auto parser::error (const std::string& msg) -> void
+  @{
+    std::cerr << msg << '\n';
+  @}
+@}
+
+int main ()
+@{
+  yy::parser parse;
+  return parse ();
+@}
+@end example
+
+Compile, and run!
+
+@example
+$ @kbd{bison simple.yy -o simple.cc}
+$ @kbd{g++ -std=c++14 simple.cc -o simple}
+@group
+$ @kbd{./simple}
+@{I have three numbers for you., 1, 2, 3, And that's all!@}
+@end group
+@end example
+
 @node C++ Bison Interface
 @subsection C++ Bison Interface
 @c - %skeleton "lalr1.cc"
@@ -9670,41 +11244,125 @@
 @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}.
+@samp{%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:
+@findex %define api.namespace
+Use the @samp{%define api.namespace} directive to change the namespace name,
+see @ref{%define Summary,,api.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}).
+declaration of the C++ parser class and auxiliary types.  By default, this
+file is not generated (@pxref{Decl Summary, ,%defines}).
 
-The header is @emph{mandatory}; you must either pass
-@option{-d}/@option{--defines} to @command{bison}, or use the
-@samp{%defines} directive.
+@item @var{file}.cc
+The implementation of the C++ parser class.  The basename and extension of
+these two files (@file{@var{file}.hh} and @file{@var{file}.cc}) follow the
+same rules as with regular C parsers (@pxref{Invocation}).
+
+@item location.hh
+Generated when both @code{%defines} and @code{%locations} are enabled, this
+file contains the definition of the classes @code{position} and
+@code{location}, used for location tracking.  It is not generated if
+@samp{%define api.location.file none} is specified, or if user defined
+locations are used.  @xref{C++ Location Values}.
+
+@item position.hh
+@itemx stack.hh
+Useless legacy files.  To get rid of then, use @samp{%require "3.2"} or
+newer.
 @end table
 
-All these files are documented using Doxygen; run @command{doxygen}
-for a complete and accurate documentation.
+All these files are documented using Doxygen; run @command{doxygen} for a
+complete and accurate documentation.
+
+@node C++ Parser Interface
+@subsection C++ Parser Interface
+
+The output files @file{@var{file}.hh} and @file{@var{file}.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 api.parser.class
+@{@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}
+The types for semantic values. @xref{C++ Semantic Values}.
+@end defcv
+
+@defcv {Type} {parser} {location_type}
+The type of locations, if location tracking is enabled.  @xref{C++ Location
+Values}.
+@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
+
+@defcv {Type} {parser} {syntax_error}
+This class derives from @code{std::runtime_error}.  Throw instances of it
+from the scanner or from the actions to raise parse errors.  This is
+equivalent with first invoking @code{error} to report the location and
+message of the syntax error, and then to invoke @code{YYERROR} to enter the
+error-recovery mode.  But contrary to @code{YYERROR} which can only be
+invoked from user actions (i.e., written in the action itself), the
+exception can be thrown from functions invoked from the user action.
+@end defcv
+
+@deftypeop {Constructor} {parser} {} parser ()
+@deftypeopx {Constructor} {parser} {} parser (@var{type1} @var{arg1}, ...)
+Build a new parser object.  There are no arguments, unless
+@samp{%parse-param @{@var{type1} @var{arg1}@}} was used.
+@end deftypeop
+
+@deftypeop {Constructor} {syntax_error} {} syntax_error (@code{const location_type&} @var{l}, @code{const std::string&} @var{m})
+@deftypeopx {Constructor}  {syntax_error} {} syntax_error (@code{const std::string&} @var{m})
+Instantiate a syntax-error exception.
+@end deftypeop
+
+@deftypemethod {parser} {int} operator() ()
+@deftypemethodx {parser} {int} parse ()
+Run the syntactic analysis, and return 0 on success, 1 otherwise.  Both
+routines are equivalent, @code{operator()} being more C++ish.
+
+@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.
+
+Exception related code in the generated parser is protected by CPP guards
+(@code{#if}) and disabled when exceptions are not supported (i.e., passing
+@option{-fno-exceptions} to the C++ compiler).
+@end deftypemethod
+
+@deftypemethod {parser} {std::ostream&} debug_stream ()
+@deftypemethodx {parser} {void} set_debug_stream (@code{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_type @var{l})
+Get or set the tracing level (an integral).  Currently its value is either
+0, no trace, or nonzero, full tracing.
+@end deftypemethod
+
+@deftypemethod {parser} {void} error (@code{const location_type&} @var{l}, @code{const std::string&} @var{m})
+@deftypemethodx {parser} {void} error (@code{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}.  If location tracking is not enabled, the second signature is used.
+@end deftypemethod
+
 
 @node C++ Semantic Values
 @subsection C++ Semantic Values
@@ -9712,20 +11370,31 @@
 @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++.
+Bison supports two different means to handle semantic values in C++.  One is
+alike the C interface, and relies on unions.  As C++ practitioners know,
+unions are inconvenient in C++, therefore another approach is provided,
+based on variants.
+
+@menu
+* C++ Unions::             Semantic values cannot be objects
+* C++ Variants::           Using objects as semantic values
+@end menu
+
+@node C++ Unions
+@subsubsection C++ Unions
+
+The @code{%union} directive works as for C, see @ref{Union Decl, ,The Union
+Declaration}.  In particular it produces a genuine @code{union}, 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.
+Non POD (Plain Old Data) types cannot be used.  C++98 forbids any instance
+of classes with constructors in unions: only @emph{pointers} to such objects
+are allowed.  C++11 relaxed this constraints, but at the cost of safety.
 @end itemize
 
 Because objects have to be stored via pointers, memory is not
@@ -9733,12 +11402,104 @@
 only means to avoid leaks.  @xref{Destructor Decl, , Freeing Discarded
 Symbols}.
 
+@node C++ Variants
+@subsubsection C++ Variants
+
+Bison provides a @emph{variant} based implementation of semantic values for
+C++.  This alleviates all the limitations reported in the previous section,
+and in particular, object types can be used without pointers.
+
+To enable variant-based semantic values, set the @code{%define} variable
+@code{api.value.type} to @code{variant} (@pxref{%define Summary,,
+@code{api.value.type}}).  Then @code{%union} is ignored; instead of using
+the name of the fields of the @code{%union} to ``type'' the symbols, use
+genuine types.
+
+For instance, instead of:
+
+@example
+%union
+@{
+  int ival;
+  std::string* sval;
+@}
+%token <ival> NUMBER;
+%token <sval> STRING;
+@end example
+
+@noindent
+write:
+
+@example
+%token <int> NUMBER;
+%token <std::string> STRING;
+@end example
+
+@code{STRING} is no longer a pointer, which should fairly simplify the user
+actions in the grammar and in the scanner (in particular the memory
+management).
+
+Since C++ features destructors, and since it is customary to specialize
+@code{operator<<} to support uniform printing of values, variants also
+typically simplify Bison printers and destructors.
+
+Variants are stricter than unions.  When based on unions, you may play any
+dirty game with @code{yylval}, say storing an @code{int}, reading a
+@code{char*}, and then storing a @code{double} in it.  This is no longer
+possible with variants: they must be initialized, then assigned to, and
+eventually, destroyed.  As a matter of fact, Bison variants forbid the use
+of alternative types such as @samp{$<int>2} or @samp{$<std::string>$}, even
+in midrule actions.  It is mandatory to use typed midrule actions
+(@pxref{Typed Midrule Actions}).
+
+@deftypemethod {semantic_type} {T&} {emplace<T>} ()
+@deftypemethodx {semantic_type} {T&} {emplace<T>} (@code{const T&} @var{t})
+Available in C++98/C++03 only.  Default construct/copy-construct from
+@var{t}.  Return a reference to where the actual value may be stored.
+Requires that the variant was not initialized yet.
+@end deftypemethod
+
+@deftypemethod {semantic_type} {T&} {emplace<T, U>} (@code{U&&...} @var{u})
+Available in C++11 and later only.  Build a variant of type @code{T} from
+the variadic forwarding references @var{u...}.
+@end deftypemethod
+
+@strong{Warning}: We do not use Boost.Variant, for two reasons.  First, it
+appeared unacceptable to require Boost on the user's machine (i.e., the
+machine on which the generated parser will be compiled, not the machine on
+which @command{bison} was run).  Second, for each possible semantic value,
+Boost.Variant not only stores the value, but also a tag specifying its
+type.  But the parser already ``knows'' the type of the semantic value, so
+that would be duplicating the information.
+
+We do not use C++17's @code{std::variant} either: we want to support all the
+C++ standards, and of course @code{std::variant} also stores a tag to record
+the current type.
+
+Therefore we developed light-weight variants whose type tag is external (so
+they are really like @code{unions} for C++ actually).  There is a number of
+limitations in (the current implementation of) variants:
+@itemize
+@item
+Alignment must be enforced: values should be aligned in memory according to
+the most demanding type.  Computing the smallest alignment possible requires
+meta-programming techniques that are not currently implemented in Bison, and
+therefore, since, as far as we know, @code{double} is the most demanding
+type on all platforms, alignments are enforced for @code{double} whatever
+types are actually used.  This may waste space in some cases.
+
+@item
+There might be portability issues we are not aware of.
+@end itemize
+
+As far as we know, these limitations @emph{can} be alleviated.  All it takes
+is some time and/or some talented C++ hacker willing to contribute to Bison.
 
 @node C++ Location Values
 @subsection C++ Location Values
 @c - %locations
-@c - class Position
-@c - class Location
+@c - class position
+@c - class location
 @c - %define filename_type "const symbol::Symbol"
 
 When the directive @code{%locations} is used, the C++ parser supports
@@ -9746,69 +11507,73 @@
 
 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.
+@code{position}s (possibly spanning several files).  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.
 
 @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
+* C++ position::         One point in the source file
+* C++ location::         Two points in the source file
+* Exposing the Location Classes:: Using the Bison location class in your
+                                  project
+* 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)
+@defcv {Type} {position} {counter_type}
+The type used to store line and column numbers.  Defined as @code{int}.
+@end defcv
+
+@deftypeop {Constructor} {position} {} position (@code{std::string*} @var{file} = nullptr, @code{counter_type} @var{line} = 1, @code{counter_type} @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)
+@deftypemethod {position} {void} initialize (@code{std::string*} @var{file} = nullptr, @code{counter_type} @var{line} = 1, @code{counter_type} @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}"}.
+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
+@deftypeivar {position} {counter_type} 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.
+@deftypemethod {position} {void} lines (@code{counter_type} @var{height} = 1)
+If @var{height} is not null, advance by @var{height} lines, resetting the
+column number.  The resulting line number cannot be less than 1.
 @end deftypemethod
 
-@deftypeivar {position} {uint} column
+@deftypeivar {position} {counter_type} 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.
+@deftypemethod {position} {void} columns (@code{counter_type} @var{width} = 1)
+Advance by @var{width} columns, without changing the line number. The
+resulting column number cannot be less than 1.
 @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})
+@deftypemethod {position} {position&} operator+= (@code{counter_type} @var{width})
+@deftypemethodx {position} {position} operator+ (@code{counter_type} @var{width})
+@deftypemethodx {position} {position&} operator-= (@code{counter_type} @var{width})
+@deftypemethodx {position} {position} operator- (@code{counter_type} @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})
+@deftypemethod {position} {bool} operator== (@code{const position&} @var{that})
+@deftypemethodx {position} {bool} operator!= (@code{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})
+@deftypefun {std::ostream&} operator<< (@code{std::ostream&} @var{o}, @code{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.
@@ -9817,16 +11582,16 @@
 @node C++ location
 @subsubsection C++ @code{location}
 
-@deftypeop {Constructor} {location} {} location (const position& @var{begin}, const position& @var{end})
+@deftypeop {Constructor} {location} {} location (@code{const position&} @var{begin}, @code{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})
+@deftypeop {Constructor} {location} {} location (@code{const position&} @var{pos} = position())
+@deftypeopx {Constructor} {location} {} location (@code{std::string*} @var{file}, @code{counter_type} @var{line}, @code{counter_type} @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)
+@deftypemethod {location} {void} initialize (@code{std::string*} @var{file} = nullptr, @code{counter_type} @var{line} = 1, @code{counter_type} @var{col} = 1)
 Reset the location to an empty range at the given values.
 @end deftypemethod
 
@@ -9835,32 +11600,88 @@
 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.
+@deftypemethod {location} {void} columns (@code{counter_type} @var{width} = 1)
+@deftypemethodx {location} {void} lines (@code{counter_type} @var{height} = 1)
+Forwarded to 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.
+@deftypemethod  {location} {location} operator+  (@code{counter_type} @var{width})
+@deftypemethodx {location} {location} operator+= (@code{counter_type} @var{width})
+@deftypemethodx {location} {location} operator-  (@code{counter_type} @var{width})
+@deftypemethodx {location} {location} operator-= (@code{counter_type} @var{width})
+Various forms of syntactic sugar for @code{columns}.
+@end deftypemethod
+
+@deftypemethod {location} {location} operator+ (@code{const location&} @var{end})
+@deftypemethodx {location} {location} operator+= (@code{const location&} @var{end})
+Join two locations: starts at the position of the first one, and ends at the
+position of the second.
 @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})
+@deftypemethod {location} {bool} operator== (@code{const location&} @var{that})
+@deftypemethodx {location} {bool} operator!= (@code{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})
+@deftypefun {std::ostream&} operator<< (@code{std::ostream&} @var{o}, @code{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 Exposing the Location Classes
+@subsubsection Exposing the Location Classes
+
+When both @code{%defines} and @code{%locations} are enabled, Bison generates
+an additional file: @file{location.hh}.  If you don't use locations outside
+of the parser, you may avoid its creation with @samp{%define
+api.location.file none}.
+
+However this file is useful if, for instance, your parser builds an abstract
+syntax tree decorated with locations: you may use Bison's @code{location}
+type independently of Bison's parser.  You may name the file differently,
+e.g., @samp{%define api.location.file "include/ast/location.hh"}: this name
+can have directory components, or even be absolute.  The way the location
+file is included is controlled by @code{api.location.include}.
+
+This way it is possible to have several parsers share the same location
+file.
+
+For instance, in @file{src/foo/parser.yy}, generate the
+@file{include/ast/loc.hh} file:
+
+@example
+// src/foo/parser.yy
+%locations
+%define api.namespace @{foo@}
+%define api.location.file "include/ast/loc.hh"
+%define api.location.include @{<ast/loc.hh>@}
+@end example
+
+@noindent
+and use it in @file{src/bar/parser.yy}:
+
+@example
+// src/bar/parser.yy
+%locations
+%define api.namespace @{bar@}
+%code requires @{#include <ast/loc.hh>@}
+%define api.location.type @{bar::location@}
+@end example
+
+Absolute file names are supported; it is safe in your @file{Makefile} to
+pass the flag
+@option{-Dapi.location.file='"$(top_srcdir)/include/ast/loc.hh"'} to
+@command{bison} for @file{src/foo/parser.yy}.  The generated file will not
+have references to this absolute path, thanks to @samp{%define
+api.location.include @{<ast/loc.hh>@}}.  Adding @samp{-I
+$(top_srcdir)/include} to your @code{CPPFLAGS} will suffice for the compiler
+to find @file{ast/loc.hh}.
+
 @node User Defined Location Type
 @subsubsection User Defined Location Type
 @findex %define api.location.type
@@ -9869,7 +11690,7 @@
 @code{api.location.type} to specify your own type:
 
 @example
-%define api.location.type @var{LocationType}
+%define api.location.type @{@var{LocationType}@}
 @end example
 
 The requirements over your @var{LocationType} are:
@@ -9881,8 +11702,8 @@
 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.
+@@$.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;
@@ -9906,7 +11727,7 @@
 @example
 %defines
 %locations
-%define namespace "master::"
+%define api.namespace @{master::@}
 @end example
 
 @noindent
@@ -9914,72 +11735,10 @@
 files, reused by other parsers as follows:
 
 @example
-%define api.location.type "master::location"
+%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
@@ -9989,26 +11748,200 @@
 
 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.
+@samp{%define api.pure} directive.  The actual interface with @code{yylex}
+depends whether you use unions, or variants.
 
-@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
+@menu
+* Split Symbols::         Passing symbols as two/three components
+* Complete Symbols::      Making symbols a whole
+@end menu
+
+@node Split Symbols
+@subsubsection Split Symbols
+
+The generated parser expects @code{yylex} to have the following prototype.
+
+@deftypefun {int} yylex (@code{semantic_type*} @var{yylval}, @code{location_type*} @var{yylloc}, @var{type1} @var{arg1}, @dots{})
+@deftypefunx {int} yylex (@code{semantic_type*} @var{yylval}, @var{type1} @var{arg1}, @dots{})
+Return the next token.  Its type is the return value, its semantic value and
+location (if enabled) being @var{yylval} and @var{yylloc}.  Invocations of
 @samp{%lex-param @{@var{type1} @var{arg1}@}} yield additional arguments.
+@end deftypefun
+
+Note that when using variants, the interface for @code{yylex} is the same,
+but @code{yylval} is handled differently.
+
+Regular union-based code in Lex scanner typically looks like:
+
+@example
+[0-9]+   @{
+           yylval->ival = text_to_int (yytext);
+           return yy::parser::token::INTEGER;
+         @}
+[a-z]+   @{
+           yylval->sval = new std::string (yytext);
+           return yy::parser::token::IDENTIFIER;
+         @}
+@end example
+
+Using variants, @code{yylval} is already constructed, but it is not
+initialized.  So the code would look like:
+
+@example
+[0-9]+   @{
+           yylval->emplace<int> () = text_to_int (yytext);
+           return yy::parser::token::INTEGER;
+         @}
+[a-z]+   @{
+           yylval->emplace<std::string> () = yytext;
+           return yy::parser::token::IDENTIFIER;
+         @}
+@end example
+
+@noindent
+or
+
+@example
+[0-9]+   @{
+           yylval->emplace (text_to_int (yytext));
+           return yy::parser::token::INTEGER;
+         @}
+[a-z]+   @{
+           yylval->emplace (yytext);
+           return yy::parser::token::IDENTIFIER;
+         @}
+@end example
+
+
+@node Complete Symbols
+@subsubsection Complete Symbols
+
+With both @code{%define api.value.type variant} and @code{%define
+api.token.constructor}, the parser defines the type @code{symbol_type}, and
+expects @code{yylex} to have the following prototype.
+
+@deftypefun {parser::symbol_type} yylex ()
+@deftypefunx {parser::symbol_type} yylex (@var{type1} @var{arg1}, @dots{})
+Return a @emph{complete} symbol, aggregating its type (i.e., the traditional
+value returned by @code{yylex}), its semantic value, and possibly its
+location.  Invocations of @samp{%lex-param @{@var{type1} @var{arg1}@}} yield
+additional arguments.
+@end deftypefun
+
+For each token type, Bison generates named constructors as follows.
+
+@deftypeop  {Constructor} {parser::symbol_type} {} {symbol_type} (@code{int} @var{token}, @code{const @var{value_type}&} @var{value}, @code{const location_type&} @var{location})
+@deftypeopx {Constructor} {parser::symbol_type} {} {symbol_type} (@code{int} @var{token}, @code{const location_type&} @var{location})
+@deftypeopx {Constructor} {parser::symbol_type} {} {symbol_type} (@code{int} @var{token}, @code{const @var{value_type}&} @var{value})
+@deftypeopx {Constructor} {parser::symbol_type} {} {symbol_type} (@code{int} @var{token})
+Build a complete terminal symbol for the token type @var{token} (including
+the @code{api.token.prefix}), whose semantic value, if it has one, is
+@var{value} of adequate @var{value_type}.  Pass the @var{location} iff
+location tracking is enabled.
+
+Consistency between @var{token} and @var{value_type} is checked via an
+@code{assert}.
+@end deftypeop
+
+For instance, given the following declarations:
+
+@example
+%define api.token.prefix @{TOK_@}
+%token <std::string> IDENTIFIER;
+%token <int> INTEGER;
+%token ':';
+@end example
+
+@noindent
+you may use these constructors:
+
+@example
+symbol_type (int token, const std::string&, const location_type&);
+symbol_type (int token, const int&, const location_type&);
+symbol_type (int token, const location_type&);
+@end example
+
+Correct matching between token types and value types is checked via
+@code{assert}; for instance, @samp{symbol_type (ID, 42)} would abort.  Named
+constructors are preferable (see below), as they offer better type safety
+(for instance @samp{make_ID (42)} would not even compile), but symbol_type
+constructors may help when token types are discovered at run-time, e.g.,
+
+@example
+@group
+[a-z]+   @{
+           if (auto i = lookup_keyword (yytext))
+             return yy::parser::symbol_type (i, loc);
+           else
+             return yy::parser::make_ID (yytext, loc);
+         @}
+@end group
+@end example
+
+@sp 1
+
+Note that it is possible to generate and compile type incorrect code
+(e.g. @samp{symbol_type (':', yytext, loc)}).  It will fail at run time,
+provided the assertions are enabled (i.e., @option{-DNDEBUG} was not passed
+to the compiler).  Bison supports an alternative that guarantees that type
+incorrect code will not even compile.  Indeed, it generates @emph{named
+constructors} as follows.
+
+@deftypemethod {parser} {symbol_type} {make_@var{token}} (@code{const @var{value_type}&} @var{value}, @code{const location_type&} @var{location})
+@deftypemethodx {parser} {symbol_type} {make_@var{token}} (@code{const location_type&} @var{location})
+@deftypemethodx {parser} {symbol_type} {make_@var{token}} (@code{const @var{value_type}&} @var{value})
+@deftypemethodx {parser} {symbol_type} {make_@var{token}} ()
+Build a complete terminal symbol for the token type @var{token} (not
+including the @code{api.token.prefix}), whose semantic value, if it has one,
+is @var{value} of adequate @var{value_type}.  Pass the @var{location} iff
+location tracking is enabled.
 @end deftypemethod
 
+For instance, given the following declarations:
+
+@example
+%define api.token.prefix @{TOK_@}
+%token <std::string> IDENTIFIER;
+%token <int> INTEGER;
+%token COLON;
+%token EOF 0;
+@end example
+
+@noindent
+Bison generates:
+
+@example
+symbol_type make_IDENTIFIER (const std::string&, const location_type&);
+symbol_type make_INTEGER (const int&, const location_type&);
+symbol_type make_COLON (const location_type&);
+symbol_type make_EOF (const location_type&);
+@end example
+
+@noindent
+which should be used in a scanner as follows.
+
+@example
+[a-z]+   return yy::parser::make_IDENTIFIER (yytext, loc);
+[0-9]+   return yy::parser::make_INTEGER (text_to_int (yytext), loc);
+":"      return yy::parser::make_COLON (loc);
+<<EOF>>  return yy::parser::make_EOF (loc);
+@end example
+
+Tokens that do not have an identifier are not accessible: you cannot simply
+use characters such as @code{':'}, they must be declared with @code{%token},
+including the end-of-file token.
+
 
 @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.
+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{.../share/doc/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
+interactions.  A hand-written scanner is actually easier to interface with.
 
 @menu
 * Calc++ --- C++ Calculator::   The specifications
@@ -10021,11 +11954,10 @@
 @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.
+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
@@ -10039,59 +11971,51 @@
 @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.
+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 scanning,
+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.
+The declaration of this driver class, in @file{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
+@comment file: calc++/driver.hh
 @example
-#ifndef CALCXX_DRIVER_HH
-# define CALCXX_DRIVER_HH
+#ifndef DRIVER_HH
+# define DRIVER_HH
 # include <string>
 # include <map>
-# include "calc++-parser.hh"
+# include "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.
+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
+@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)
+// Give Flex the prototype of yylex we want ...
+# define YY_DECL \
+  yy::parser::symbol_type yylex (driver& drv)
 // ... 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.
+The @code{driver} class is then declared with its most obvious members.
 
-@comment file: calc++-driver.hh
+@comment file: calc++/driver.hh
 @example
 // Conducting the whole scanning and parsing of Calc++.
-class calcxx_driver
+class driver
 @{
 public:
-  calcxx_driver ();
-  virtual ~calcxx_driver ();
+  driver ();
 
   std::map<std::string, int> variables;
 
@@ -10099,122 +12023,120 @@
 @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.
+The main routine is of course calling the parser.
 
-@comment file: calc++-driver.hh
+@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.
+  // Run the parser on file F.  Return 0 on success.
   int parse (const std::string& f);
+  // The name of the file being parsed.
   std::string file;
+  // Whether to generate parser debug traces.
   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.
+To encapsulate the coordination with the Flex scanner, it is useful to have
+member functions to open and close the scanning phase.
 
-@comment file: calc++-driver.hh
+@comment file: calc++/driver.hh
 @example
-  // Error handling.
-  void error (const yy::location& l, const std::string& m);
-  void error (const std::string& m);
+  // Handling the scanner.
+  void scan_begin ();
+  void scan_end ();
+  // Whether to generate scanner debug traces.
+  bool trace_scanning;
+  // The token's location used by the scanner.
+  yy::location location;
 @};
-#endif // ! CALCXX_DRIVER_HH
+#endif // ! 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.
+The implementation of the driver (@file{driver.cc}) is straightforward.
 
-@comment file: calc++-driver.cc
+@comment file: calc++/driver.cc
 @example
-#include "calc++-driver.hh"
-#include "calc++-parser.hh"
+#include "driver.hh"
+#include "parser.hh"
 
-calcxx_driver::calcxx_driver ()
-  : trace_scanning (false), trace_parsing (false)
+@group
+driver::driver ()
+  : trace_parsing (false), trace_scanning (false)
 @{
   variables["one"] = 1;
   variables["two"] = 2;
 @}
+@end group
+@end example
 
-calcxx_driver::~calcxx_driver ()
-@{
-@}
+The @code{parse} member function deserves some attention.
 
+@comment file: calc++/driver.cc
+@example
+@group
 int
-calcxx_driver::parse (const std::string &f)
+driver::parse (const std::string &f)
 @{
   file = f;
+  location.initialize (&file);
   scan_begin ();
-  yy::calcxx_parser parser (*this);
-  parser.set_debug_level (trace_parsing);
-  int res = parser.parse ();
+  yy::parser parse (*this);
+  parse.set_debug_level (trace_parsing);
+  int res = 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 group
 @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.
+The grammar file @file{parser.yy} starts by asking for the C++ deterministic
+parser skeleton, the creation of the parser header file.  Because the C++
+skeleton changed several times, it is safer to require the version you
+designed the grammar for.
 
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
 @example
 %skeleton "lalr1.cc" /* -*- C++ -*- */
 %require "@value{VERSION}"
 %defines
-%define parser_class_name "calcxx_parser"
+@end example
+
+@noindent
+@findex %define api.token.constructor
+@findex %define api.value.type variant
+This example will use genuine C++ objects as semantic values, therefore, we
+require the variant-based interface.  To make sure we properly use it, we
+enable assertions.  To fully benefit from type-safety and more natural
+definition of ``symbol'', we enable @code{api.token.constructor}.
+
+@comment file: calc++/parser.yy
+@example
+%define api.token.constructor
+%define api.value.type variant
+%define parse.assert
 @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
+Then come the declarations/inclusions needed by the semantic values.
+Because the parser uses the parsing driver and reciprocally, both would like
+to include the header of the other, which is, of course, insane.  This
+mutual dependency will be broken using forward declarations.  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}.
+particular its inner types), it is the parser's header which will use a
+forward declaration of the driver.  @xref{%code Summary}.
 
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
 @example
+@group
 %code requires @{
-# include <string>
-class calcxx_driver;
+  # include <string>
+  class driver;
 @}
+@end group
 @end example
 
 @noindent
@@ -10222,267 +12144,343 @@
 This provides a simple but effective pure interface, not relying on
 global variables.
 
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
 @example
 // The parsing context.
-%parse-param @{ calcxx_driver& driver @}
-%lex-param   @{ calcxx_driver& driver @}
+%param @{ driver& drv @}
 @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.
+Then we request location tracking.
 
-@comment file: calc++-parser.yy
+@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
+Use the following two directives to enable parser tracing and verbose error
 messages.  However, verbose error messages can contain incorrect information
 (@pxref{LAC}).
 
-@comment file: calc++-parser.yy
+@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;
-@};
+%define parse.trace
+%define parse.error verbose
 @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.
+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
+@comment file: calc++/parser.yy
 @example
+@group
 %code @{
-# include "calc++-driver.hh"
+# include "driver.hh"
 @}
+@end group
 @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.
+allows for nicer error messages referring to ``end of file'' instead of
+``$end''.  Similarly user friendly names are provided for each symbol.  To
+avoid name clashes in the generated files (@pxref{Calc++ Scanner}), prefix
+tokens with @code{TOK_} (@pxref{%define Summary,,api.token.prefix}).
 
-@comment file: calc++-parser.yy
+@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
+%define api.token.prefix @{TOK_@}
+%token
+  END  0  "end of file"
+  ASSIGN  ":="
+  MINUS   "-"
+  PLUS    "+"
+  STAR    "*"
+  SLASH   "/"
+  LPAREN  "("
+  RPAREN  ")"
+;
 @end example
 
 @noindent
-To enable memory deallocation during error recovery, use
-@code{%destructor}.
+Since we use variant-based semantic values, @code{%union} is not used, and
+@code{%token}, @code{%nterm} and @code{%type} expect genuine types, not type
+tags.
 
-@c FIXME: Document %printer, and mention that it takes a braced-code operand.
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
 @example
-%printer    @{ yyoutput << *$$; @} "identifier"
-%destructor @{ delete $$; @} "identifier"
-
-%printer    @{ yyoutput << $$; @} <ival>
+%token <std::string> IDENTIFIER "identifier"
+%token <int> NUMBER "number"
+%nterm <int> exp
 @end example
 
 @noindent
-The grammar itself is straightforward.
+No @code{%destructor} is needed to enable memory deallocation during error
+recovery; the memory, for strings for instance, will be reclaimed by the
+regular destructors.  All the values are printed using their
+@code{operator<<} (@pxref{Printer Decl, , Printing Semantic Values}).
 
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
+@example
+%printer @{ yyo << $$; @} <*>;
+@end example
+
+@noindent
+The grammar itself is straightforward (@pxref{Location Tracking Calc, ,
+Location Tracking Calculator - @code{ltcalc}}).
+
+@comment file: calc++/parser.yy
 @example
 %%
 %start unit;
-unit: assignments exp  @{ driver.result = $2; @};
+unit: assignments exp  @{ drv.result = $2; @};
 
 assignments:
-  /* Nothing.  */        @{@}
+  %empty                 @{@}
 | assignments assignment @{@};
 
 assignment:
-     "identifier" ":=" exp
-       @{ driver.variables[*$1] = $3; delete $1; @};
+  "identifier" ":=" exp @{ drv.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]; delete $1; @}
-   | "number"      @{ $$ = $1; @};
+%left "+" "-";
+%left "*" "/";
+exp:
+  "number"
+| "identifier"  @{ $$ = drv.variables[$1]; @}
+| exp "+" exp   @{ $$ = $1 + $3; @}
+| exp "-" exp   @{ $$ = $1 - $3; @}
+| exp "*" exp   @{ $$ = $1 * $3; @}
+| exp "/" exp   @{ $$ = $1 / $3; @}
+| "(" exp ")"   @{ $$ = $2; @}
 %%
 @end example
 
 @noindent
-Finally the @code{error} member function registers the errors to the
-driver.
+Finally the @code{error} member function reports the errors.
 
-@comment file: calc++-parser.yy
+@comment file: calc++/parser.yy
 @example
 void
-yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
-                          const std::string& m)
+yy::parser::error (const location_type& l, const std::string& m)
 @{
-  driver.error (l, m);
+  std::cerr << l << ": " << m << '\n';
 @}
 @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.
+In addition to standard headers, the Flex scanner includes the driver's,
+then the parser's to get the set of defined tokens.
 
-@comment file: calc++-scanner.ll
+@comment file: calc++/scanner.ll
 @example
 %@{ /* -*- C++ -*- */
-# include <cstdlib>
 # include <cerrno>
 # include <climits>
+# include <cstdlib>
+# include <cstring> // strerror
 # 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
+# include "driver.hh"
+# include "parser.hh"
 %@}
 @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
+@ignore
+@comment file: calc++/scanner.ll
 @example
-%option noyywrap nounput batch debug
+%@{
+#if defined __clang__
+# define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
+#endif
+
+// Clang and ICC like to pretend they are GCC.
+#if defined __GNUC__ && !defined __clang__ && !defined __ICC
+# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#endif
+
+// Pacify warnings in yy_init_buffer (observed with Flex 2.6.4)
+// and GCC 6.4.0, 7.3.0 with -O3.
+#if defined GCC_VERSION && 600 <= GCC_VERSION
+# pragma GCC diagnostic ignored "-Wnull-dereference"
+#endif
+
+// This example uses Flex's C backend, yet compiles it as C++.
+// So expect warnings about C style casts and NULL.
+#if defined CLANG_VERSION && 500 <= CLANG_VERSION
+# pragma clang diagnostic ignored "-Wold-style-cast"
+# pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#elif defined GCC_VERSION && 407 <= GCC_VERSION
+# pragma GCC diagnostic ignored "-Wold-style-cast"
+# pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+
+#define FLEX_VERSION (YY_FLEX_MAJOR_VERSION * 100 + YY_FLEX_MINOR_VERSION)
+
+// Old versions of Flex (2.5.35) generate an incomplete documentation comment.
+//
+//  In file included from src/scan-code-c.c:3:
+//  src/scan-code.c:2198:21: error: empty paragraph passed to '@param' command
+//        [-Werror,-Wdocumentation]
+//   * @param line_number
+//     ~~~~~~~~~~~~~~~~~^
+//  1 error generated.
+#if FLEX_VERSION < 206 && defined CLANG_VERSION
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+
+// Old versions of Flex (2.5.35) use 'register'.  Warnings introduced in
+// GCC 7 and Clang 6.
+#if FLEX_VERSION < 206
+# if defined CLANG_VERSION && 600 <= CLANG_VERSION
+#  pragma clang diagnostic ignored "-Wdeprecated-register"
+# elif defined GCC_VERSION && 700 <= GCC_VERSION
+#  pragma GCC diagnostic ignored "-Wregister"
+# endif
+#endif
+
+#if FLEX_VERSION < 206
+# if defined CLANG_VERSION
+#  pragma clang diagnostic ignored "-Wconversion"
+#  pragma clang diagnostic ignored "-Wdocumentation"
+#  pragma clang diagnostic ignored "-Wshorten-64-to-32"
+#  pragma clang diagnostic ignored "-Wsign-conversion"
+# elif defined GCC_VERSION
+#  pragma GCC diagnostic ignored "-Wconversion"
+#  pragma GCC diagnostic ignored "-Wsign-conversion"
+# endif
+#endif
+%@}
+@end example
+@end ignore
+
+@noindent
+Since our calculator has no @code{#include}-like feature, we don't need
+@code{yywrap}.  We don't need the @code{unput} and @code{input} functions
+either, and we parse an actual file, this is not an interactive session with
+the user.  Finally, we enable scanner tracing.
+
+@comment file: calc++/scanner.ll
+@example
+%option noyywrap nounput noinput batch debug
+@end example
+
+@noindent
+The following function will be handy to convert a string denoting a number
+into a number token.
+
+@comment file: calc++/scanner.ll
+@example
+%@{
+  // A number symbol corresponding to the value in S.
+  yy::parser::symbol_type
+  make_NUMBER (const std::string &s, const yy::parser::location_type& loc);
+%@}
 @end example
 
 @noindent
 Abbreviations allow for more readable rules.
 
-@comment file: calc++-scanner.ll
+@comment file: calc++/scanner.ll
 @example
 id    [a-zA-Z][a-zA-Z_0-9]*
 int   [0-9]+
-blank [ \t]
+blank [ \t\r]
 @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.
+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, its width is added to the end column.  When
+matching 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
+@comment file: calc++/scanner.ll
 @example
 @group
 %@{
-# define YY_USER_ACTION  yylloc->columns (yyleng);
+  // Code run each time a pattern is matched.
+  # define YY_USER_ACTION  loc.columns (yyleng);
 %@}
 @end group
 %%
+@group
 %@{
-  yylloc->step ();
+  // A handy shortcut to the location held by the driver.
+  yy::location& loc = drv.location;
+  // Code run each time yylex is called.
+  loc.step ();
 %@}
-@{blank@}+   yylloc->step ();
-[\n]+      yylloc->lines (yyleng); yylloc->step ();
+@end group
+@{blank@}+   loc.step ();
+\n+        loc.lines (yyleng); loc.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.
+The rules are simple.  The driver is used to report errors.
 
-@comment file: calc++-scanner.ll
+@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 yy::parser::make_MINUS  (loc);
+"+"        return yy::parser::make_PLUS   (loc);
+"*"        return yy::parser::make_STAR   (loc);
+"/"        return yy::parser::make_SLASH  (loc);
+"("        return yy::parser::make_LPAREN (loc);
+")"        return yy::parser::make_RPAREN (loc);
+":="       return yy::parser::make_ASSIGN (loc);
 
-":="     return token::ASSIGN;
-
+@{int@}      return make_NUMBER (yytext, loc);
+@{id@}       return yy::parser::make_IDENTIFIER (yytext, loc);
 @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;
-         @}
+.          @{
+             throw yy::parser::syntax_error
+               (loc, "invalid character: " + std::string(yytext));
+@}
 @end group
-
-@group
-@{id@}     @{
-           yylval->sval = new std::string (yytext);
-           return token::IDENTIFIER;
-         @}
-@end group
-
-.        driver.error (*yylloc, "invalid character");
+<<EOF>>    return yy::parser::make_END (loc);
 %%
 @end example
 
 @noindent
-Finally, because the scanner related driver's member function depend
+You should keep your rules simple, both in the parser and in the scanner.
+Throwing from the auxiliary functions is then very handy to report errors.
+
+@comment file: scanner.ll
+@example
+@group
+yy::parser::symbol_type
+make_NUMBER (const std::string &s, const yy::parser::location_type& loc)
+@{
+  errno = 0;
+  long n = strtol (s.c_str(), NULL, 10);
+  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+    throw yy::parser::syntax_error (loc, "integer is out of range: " + s);
+  return yy::parser::make_NUMBER ((int) n, loc);
+@}
+@end group
+@end example
+
+@noindent
+Finally, because the scanner-related driver's member-functions depend
 on the scanner's data, it is simpler to implement them in this file.
 
-@comment file: calc++-scanner.ll
+@comment file: calc++/scanner.ll
 @example
 @group
 void
-calcxx_driver::scan_begin ()
+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));
+      std::cerr << "cannot open " << file << ": " << strerror(errno) << '\n';
       exit (EXIT_FAILURE);
     @}
 @}
@@ -10490,7 +12488,7 @@
 
 @group
 void
-calcxx_driver::scan_end ()
+driver::scan_end ()
 @{
   fclose (yyin);
 @}
@@ -10505,20 +12503,24 @@
 @comment file: calc++.cc
 @example
 #include <iostream>
-#include "calc++-driver.hh"
+#include "driver.hh"
 
 @group
 int
 main (int argc, char *argv[])
 @{
-  calcxx_driver driver;
+  int res = 0;
+  driver drv;
   for (int i = 1; i < argc; ++i)
     if (argv[i] == std::string ("-p"))
-      driver.trace_parsing = true;
+      drv.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;
+      drv.trace_scanning = true;
+    else if (!drv.parse (argv[i]))
+      std::cout << drv.result << '\n';
+    else
+      res = 1;
+  return res;
 @}
 @end group
 @end example
@@ -10528,11 +12530,12 @@
 
 @menu
 * Java Bison Interface::        Asking for Java parser generation
-* Java Semantic Values::        %type and %token vs. Java
+* Java Semantic Values::        %token and %nterm 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 Push Parser Interface::  Instantiating and running the a push parser
 * Java Differences::            Differences between C/C++ and Java Grammars
 * Java Declarations Summary::   List of Bison declarations used with Java
 @end menu
@@ -10541,30 +12544,26 @@
 @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.
+When generating a Java parser, @samp{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{-b}/@option{--file-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.
+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{%define api.pure}
+directive does nothing when used in Java.
 
 Push parsers are currently unsupported in Java and @code{%define
 api.push-pull} have no effect.
@@ -10576,43 +12575,51 @@
 @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
+Currently, support for tracing is always compiled
+in.  Thus the @samp{%define parse.trace} and @samp{%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
+unused code in the generated parser, so use @samp{%define parse.trace}
+explicitly
+if needed.  Also, in the future the
 @code{%token-table} directive might enable a public interface to
 access the token names and codes.
 
+Getting a ``code too large'' error from the Java compiler means the code
+hit the 64KB bytecode per method limitation of the Java class file.
+Try reducing the amount of code in actions and static initializers;
+otherwise, report a bug so that the parser skeleton will be improved.
+
+
 @node Java Semantic Values
 @subsection Java Semantic Values
-@c - No %union, specify type in %type/%token.
+@c - No %union, specify type in %nterm/%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:
+There is no @code{%union} directive in Java parsers.  Instead, the semantic
+values' types (class names) should be specified in the @code{%nterm} or
+@code{%token} directive:
 
 @example
-%type <Expression> expr assignment_expr term factor
-%type <Integer> number
+%nterm <Expression> expr assignment_expr term factor
+%nterm <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}
+superclass of all the semantic values using the @samp{%define api.value.type}
 directive.  For example, after the following declaration:
 
 @example
-%define stype "ASTNode"
+%define api.value.type @{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.
+any @code{%token}, @code{%nterm} or @code{%type} specifying a semantic type
+which is not a subclass of @code{ASTNode}, will cause a compile-time error.
 
 @c FIXME: Documented bug.
 Types used in the directives may be qualified with a package name.
@@ -10642,11 +12649,11 @@
 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}"}.
+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
+with @code{%define api.position.type @{@var{class-name}@}}.  This class must
 be supplied by the user.
 
 
@@ -10655,11 +12662,11 @@
 The first, inclusive, position of the range, and the first beyond.
 @end deftypeivar
 
-@deftypeop {Constructor} {Location} {} Location (Position @var{loc})
+@deftypeop {Constructor} {Location} {} Location (@code{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})
+@deftypeop {Constructor} {Location} {} Location (@code{Position} @var{begin}, @code{Position} @var{end})
 Create a @code{Location} from the endpoints of the range.
 @end deftypeop
 
@@ -10672,29 +12679,26 @@
 
 @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.
+@code{YY} prefix may be changed using the @samp{%define api.prefix}.
+Alternatively, use @samp{%define api.parser.class @{@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.
+@samp{%define api.parser.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{api.parser.abstract}, @code{api.parser.final}
+and @code{api.parser.strictfp} with the @code{%define} declaration to add
+other modifiers to the parser class.  A single @samp{%define
+api.parser.annotations @{@var{annotations}@}} directive can be used to add
+any number of annotations 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
+@samp{%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.
+api.parser.extends} and @samp{%define api.parser.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
@@ -10703,30 +12707,33 @@
 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.
+no parameters, unless @code{%param}s and/or @code{%parse-param}s and/or
+@code{%lex-param}s are used.
+
+Use @code{%code init} for code added to the start of the constructor
+body. This is especially useful to initialize superclasses. Use
+@samp{%define init_throws} to specify any uncaught exceptions.
 @end deftypeop
 
-@deftypeop {Constructor} {YYParser} {} YYParser (Lexer @var{lexer}, @var{parse_param}, @dots{})
+@deftypeop {Constructor} {YYParser} {} YYParser (@code{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.
+additional parameters unless @code{%param}s and/or @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.
+created with the correct @code{%param}s and/or @code{%lex-param}s.
+
+Use @code{%code init} for code added to the start of the constructor
+body. This is especially useful to initialize superclasses. Use
+@samp{%define init_throws} to specify any uncaught exceptions.
 @end deftypeop
 
 @deftypemethod {YYParser} {boolean} parse ()
@@ -10734,6 +12741,21 @@
 @code{false} otherwise.
 @end deftypemethod
 
+@deftypemethod {YYParser} {boolean} getErrorVerbose ()
+@deftypemethodx {YYParser} {void} setErrorVerbose (boolean @var{verbose})
+Get or set the option to produce verbose error messages.  These are only
+available with @samp{%define parse.error verbose}, which also turns on
+verbose error messages.
+@end deftypemethod
+
+@deftypemethod {YYParser} {void} yyerror (@code{String} @var{msg})
+@deftypemethodx {YYParser} {void} yyerror (@code{Position} @var{pos}, @code{String} @var{msg})
+@deftypemethodx {YYParser} {void} yyerror (@code{Location} @var{loc}, @code{String} @var{msg})
+Print an error message using the @code{yyerror} method of the scanner
+instance in use. The @code{Location} and @code{Position} parameters are
+available only if location tracking is active.
+@end deftypemethod
+
 @deftypemethod {YYParser} {boolean} recovering ()
 During the syntactic analysis, return @code{true} if recovering
 from a syntax error.
@@ -10741,17 +12763,22 @@
 @end deftypemethod
 
 @deftypemethod {YYParser} {java.io.PrintStream} getDebugStream ()
-@deftypemethodx {YYParser} {void} setDebugStream (java.io.printStream @var{o})
+@deftypemethodx {YYParser} {void} setDebugStream (@code{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})
+@deftypemethodx {YYParser} {void} setDebugLevel (@code{int} @var{l})
 Get or set the tracing level.  Currently its value is either 0, no trace,
 or nonzero, full tracing.
 @end deftypemethod
 
+@deftypecv {Constant} {YYParser} {String} {bisonVersion}
+@deftypecvx {Constant} {YYParser} {String} {bisonSkeleton}
+Identify the Bison version and skeleton used to generate this parser.
+@end deftypecv
+
 
 @node Java Scanner Interface
 @subsection Java Scanner Interface
@@ -10762,7 +12789,9 @@
 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.
+@code{Lexer} inner interface of the parser class.  This interface also
+contain constants for all user-defined token names and the predefined
+@code{EOF} token.
 
 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
@@ -10778,10 +12807,10 @@
 
 In both cases, the scanner has to implement the following methods.
 
-@deftypemethod {Lexer} {void} yyerror (Location @var{loc}, String @var{msg})
+@deftypemethod {Lexer} {void} yyerror (@code{Location} @var{loc}, @code{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}".}
+changed using @code{%define api.location.type @{@var{class-name}@}}.
 @end deftypemethod
 
 @deftypemethod {Lexer} {int} yylex ()
@@ -10789,7 +12818,7 @@
 value and location are saved and returned by the their methods in the
 interface.
 
-Use @code{%define lex_throws} to specify any uncaught exceptions.
+Use @samp{%define lex_throws} to specify any uncaught exceptions.
 Default is @code{java.io.IOException}.
 @end deftypemethod
 
@@ -10800,24 +12829,23 @@
 methods are not needed unless location tracking is active.
 
 The return type can be changed using @code{%define api.position.type
-"@var{class-name}".}
+@{@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}".}
+The return type can be changed using @samp{%define api.value.type
+@{@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
+Use @samp{%define throws} to specify any uncaught exceptions from parser
 actions, and initial actions specified by @code{%initial-action}.
 
 @defvar $@var{n}
@@ -10834,7 +12862,7 @@
 @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
+@samp{%define api.value.type}) 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}.
@@ -10881,13 +12909,78 @@
 @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)
+@deftypefn  {Function} {void} yyerror (@code{String} @var{msg})
+@deftypefnx {Function} {void} yyerror (@code{Position} @var{loc}, @code{String} @var{msg})
+@deftypefnx {Function} {void} yyerror (@code{Location} @var{loc}, @code{String} @var{msg})
 Print an error message using the @code{yyerror} method of the scanner
-instance in use.
+instance in use. The @code{Location} and @code{Position} parameters are
+available only if location tracking is active.
 @end deftypefn
 
+@node Java Push Parser Interface
+@subsection Java Push Parser Interface
+@c - define push_parse
+@findex %define api.push-pull
+
+Normally, Bison generates a pull parser for Java.
+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
+
+Most of the discussion about the Java pull Parser Interface, (@pxref{Java
+Parser Interface}) applies to the push parser interface as well.
+
+When generating a push parser, the method @code{push_parse} is created with
+the following signature (depending on if locations are enabled).
+
+@deftypemethod {YYParser} {void} push_parse (@code{int} @var{token}, @code{Object} @var{yylval})
+@deftypemethodx {YYParser} {void} push_parse (@code{int} @var{token}, @code{Object} @var{yylval}, @code{Location} @var{yyloc})
+@deftypemethodx {YYParser} {void} push_parse (@code{int} @var{token}, @code{Object} @var{yylval}, @code{Position} @var{yypos})
+@end deftypemethod
+
+The primary difference with respect to a pull parser is that the parser
+method @code{push_parse} is invoked repeatedly to parse each token.  This
+function is available if either the "%define api.push-pull push" or "%define
+api.push-pull both" declaration is used (@pxref{%define
+Summary,,api.push-pull}).  The @code{Location} and @code{Position}
+parameters are available only if location tracking is active.
+
+The value returned by the @code{push_parse} method is one of the following
+four constants: @code{YYABORT}, @code{YYACCEPT}, @code{YYERROR}, or
+@code{YYPUSH_MORE}.  This new value, @code{YYPUSH_MORE}, may be returned if
+more input is required to finish parsing the grammar.
+
+If api.push-pull is declared as @code{both}, then the generated parser class
+will also implement the @code{parse} method. This method's body is a loop
+that repeatedly invokes the scanner and then passes the values obtained from
+the scanner to the @code{push_parse} method.
+
+There is one additional complication.  Technically, the push parser does not
+need to know about the scanner (i.e. an object implementing the
+@code{YYParser.Lexer} interface), but it does need access to the
+@code{yyerror} method.  Currently, the @code{yyerror} method is defined in
+the @code{YYParser.Lexer} interface. Hence, an implementation of that
+interface is still required in order to provide an implementation of
+@code{yyerror}.  The current approach (and subject to change) is to require
+the @code{YYParser} constructor to be given an object implementing the
+@code{YYParser.Lexer} interface. This object need only implement the
+@code{yyerror} method; the other methods can be stubbed since they will
+never be invoked.  The simplest way to do this is to add a trivial scanner
+implementation to your grammar file using whatever implementation of
+@code{yyerror} is desired. The following code sample shows a simple way to
+accomplish this.
+
+@example
+%code lexer
+@{
+  public Object getLVal () @{return null;@}
+  public int yylex () @{return 0;@}
+  public void yyerror (String s) @{System.err.println(s);@}
+@}
+@end example
 
 @node Java Differences
 @subsection Differences between C/C++ and Java Grammars
@@ -10915,7 +13008,7 @@
 @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},
+@samp{%define api.value.type}.  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.
@@ -10929,7 +13022,7 @@
 @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.
+suggested to use @samp{%define package} instead.
 
 @item unqualified @code{%code}
 blocks are placed inside the parser class.
@@ -10968,12 +13061,6 @@
 @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.
@@ -10985,7 +13072,7 @@
 @xref{Java Semantic Values}.
 @end deffn
 
-@deffn {Directive} %type <@var{type}> @var{nonterminal} @dots{}
+@deffn {Directive} %nterm <@var{type}> @var{nonterminal} @dots{}
 Declare the type of nonterminals.  Note that the angle brackets enclose
 a Java @emph{type}.
 @xref{Java Semantic Values}.
@@ -11001,6 +13088,11 @@
 @xref{Java Differences}.
 @end deffn
 
+@deffn {Directive} {%code init} @{ @var{code} @dots{} @}
+Code inserted at the beginning of the parser constructor body.
+@xref{Java Parser Interface}.
+@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}.
@@ -11013,38 +13105,70 @@
 @end deffn
 
 @deffn {Directive} %@{ @var{code} @dots{} %@}
-Not supported.  Use @code{%code import} instead.
+Not supported.  Use @code{%code imports} instead.
 @xref{Java Differences}.
 @end deffn
 
-@deffn {Directive} {%define abstract}
+@deffn {Directive} {%define api.prefix} @{@var{prefix}@}
+The prefix of the parser class name @code{@var{prefix}Parser} if
+@samp{%define api.parser.class} is not used.  Default is @code{YY}.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.parser.abstract}
 Whether the parser class is declared @code{abstract}.  Default is false.
 @xref{Java Bison Interface}.
 @end deffn
 
-@deffn {Directive} {%define extends} "@var{superclass}"
+@deffn {Directive} {%define api.parser.annotations} @{@var{annotations}@}
+The Java annotations for the parser class.  Default is none.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.parser.class} @{@var{name}@}
+The name of the parser class.  Default is @code{YYParser} or
+@code{@var{api.prefix}Parser}.  @xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.parser.extends} @{@var{superclass}@}
 The superclass of the parser class.  Default is none.
 @xref{Java Bison Interface}.
 @end deffn
 
-@deffn {Directive} {%define final}
+@deffn {Directive} {%define api.parser.final}
 Whether the parser class is declared @code{final}.  Default is false.
 @xref{Java Bison Interface}.
 @end deffn
 
-@deffn {Directive} {%define implements} "@var{interfaces}"
+@deffn {Directive} {%define api.parser.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}"
+@deffn {Directive} {%define api.parser.public}
+Whether the parser class is declared @code{public}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define api.parser.strictfp}
+Whether the parser class is declared @code{strictfp}.  Default is false.
+@xref{Java Bison Interface}.
+@end deffn
+
+@deffn {Directive} {%define init_throws} @{@var{exceptions}@}
+The exceptions thrown by @code{%code init} from the parser class
+constructor.  Default is none.
+@xref{Java Parser 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}"
+@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}.
@@ -11052,45 +13176,162 @@
 @xref{Java Location Values}.
 @end deffn
 
-@deffn {Directive} {%define package} "@var{package}"
+@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}"
+@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}"
+@deffn {Directive} {%define api.value.type} @{@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}"
+@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 ================================================= History
+
+@node History
+@chapter A Brief History of the Greater Ungulates
+@cindex history
+@cindex ungulates
+
+@menu
+* Yacc::                        The original Yacc
+* yacchack::                    An obscure early implementation of reentrancy
+* Byacc::                       Berkeley Yacc
+* Bison::                       This program
+* Other Ungulates::             Similar programs
+@end menu
+
+@node Yacc
+@section The ancestral Yacc
+
+Bison originated as a workalike of a program called Yacc --- Yet Another
+Compiler Compiler.@footnote{Because of the acronym, the name is sometimes
+given as ``YACC'', but Johnson used ``Yacc'' in the descriptive paper
+included in the
+@url{https://s3.amazonaws.com/plan9-bell-labs/7thEdMan/v7vol2b.pdf, Version
+7 Unix Manual}.} Yacc was written at Bell Labs as part of the very early
+development of Unix; one of its first uses was to develop the original
+Portable C Compiler, pcc. The same person, Steven C. Johnson, wrote Yacc and
+the original pcc.
+
+According to the author
+@footnote{@url{https://lists.gnu.org/archive/html/bison-patches/2019-02/msg00061.html}},
+Yacc was first invented in 1971 and reached a form recognizably similar to
+the C version in 1973.  Johnson published @cite{A Portable Compiler: Theory
+and Practice} (@pxref{Bibliography,,Johnson 1978}).
+
+Yacc was not itself originally written in C but in its predecessor language,
+B.  This goes far to explain its odd interface, which exposes a large number
+of global variables rather than bundling them into a C struct.  All other
+Yacc-like programs are descended from the C port of Yacc.
+
+Yacc, through both its deployment in pcc and as a standalone tool for
+generating other parsers, helped drive the early spread of Unix.  Yacc
+itself, however, passed out of use after around 1990 when workalikes
+with less restrictive licenses and more features became available.
+
+Original Yacc became generally available when Caldera released the sources
+of old versions of Unix up to V7 and 32V in 2002.  By that time it had been
+long superseded in practical use by Bison even on Yacc's native Unix
+variants.
+
+@node yacchack
+@section yacchack
+@cindex yacchack
+
+One of the deficiencies of original Yacc was its inability to produce
+reentrant parsers.  This was first remedied by a set of drop-in
+modifications called ``yacchack'', published by Eric S. Raymond on USENET
+around 1983.  This code was quickly forgotten when zoo and Berkeley Yacc
+became available a few years later.
+
+@node Byacc
+@section Berkeley Yacc
+@cindex byacc
+
+Berkeley Yacc was originated in 1985 by Robert Corbett
+(@pxref{Bibliography,,Corbett 1984}).  It was originally named ``zoo'', but
+by October 1989 it became known as Berkeley Yacc or byacc.
+
+Berkeley Yacc had three advantages over the ancestral Yacc: it generated
+faster parsers, it could generate reentrant parsers, and the source code
+was released to the public domain rather than being under an AT&T
+proprietary license.  The better performance came from implementing
+techniques from DeRemer and Penello's seminal paper on LALR parsing
+(@pxref{Bibliography,,DeRemer 1982}).
+
+Use of byacc spread rapidly due to its public domain license. However, once
+Bison became available, byacc itself passed out of general use.
+
+@node Bison
+@section Bison
+@cindex zoo
+
+Robert Corbett actually wrote two (closely related) LALR parsers in 1985,
+both using the DeRemer/Penello techniques. One was ``zoo'', the other was
+``Byson''. In 1987 Richard Stallman began working on Byson; the name changed
+to Bison and the interface became Yacc-compatible.
+
+The main visible difference between Yacc and Byson/Bison at the time of
+Byson's first release is that Byson supported the @code{@@@var{n}} construct
+(giving access to the starting and ending line number and character number
+associated with any of the symbols in the current rule).
+
+There was also the command @samp{%expect @var{n}} which said not to mention the
+conflicts if there are @var{n} shift/reduce conflicts and no reduce/reduce
+conflicts.  In more recent versions of Bison, @code{%expect} and its
+@code{%expect-rr} variant for reduce-reduce conflicts can be applied to
+individual rules.
+
+Later versions of Bison added many more new features.
+
+Bison error reporting has been improved in various ways. Notably. ancestral
+Yacc and Byson did not have carets in error messages.
+
+Compared to Yacc Bison uses a faster but less space-efficient encoding for
+the parse tables (@pxref{Bibliography,,Corbett 1984}), and more modern
+techniques for generating the lookahead sets (@pxref{Bibliography,,DeRemer
+1982}).  This approach is the standard one since then.
+
+(It has also been plausibly alleged the differences in the algorithms stem
+mainly from the horrible kludges that Johnson had to perpetrate to make
+the original Yacc fit in a PDP-11.)
+
+Named references, semantic predicates, @code{%locations},
+@code{%glr-parser}, @code{%printer}, %destructor, dumps to DOT,
+@code{%parse-param}, @code{%lex-param}, and dumps to XSLT, LAC, and IELR(1)
+generation are new in Bison.
+
+Bison also has many features to support C++ that were not present in the
+ancestral Yacc or Byson.
+
+Bison obsolesced all previous Yacc variants and workalikes generating C by
+1995.
+
+@node Other Ungulates
+@section Other Ungulates
+
+The Yacc concept has frequently been ported to other languages. Some of the
+early ports are extinct along with the languages that hosted them; others
+have been superseded by parser skeletons shipped with Bison.
+
+However, independent implementations persist. One of the best-known
+still in use is David Beazley's ``PLY'' (Python Lex-Yacc) for
+Python. Another is goyacc, supporting the Go language. An ``ocamlyacc''
+is shipped as part of the Ocaml compiler suite.
 
 @c ================================================= FAQ
 
@@ -11109,6 +13350,7 @@
 * Implementing Gotos/Loops::    Control Flow in the Calculator
 * Multiple start-symbols::      Factoring closely related grammars
 * Secure?  Conform?::           Is Bison POSIX safe?
+* Enabling Relocatability::     Moving Bison/using it through network shares
 * I can't build Bison::         Troubleshooting
 * Where can I find help?::      Troubleshouting
 * Bug Reports::                 Troublereporting
@@ -11144,9 +13386,9 @@
 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}.
+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
@@ -11177,7 +13419,7 @@
     @}
 @end group
 @group
-  /* One token only.  */
+  /* One token only. */
   yylex ();
   if (fclose (yyin) != 0)
     @{
@@ -11256,14 +13498,14 @@
 @group
 %%
 .*    yylval = yytext; return 1;
-\n    /* IGNORE */
+\n    continue;
 %%
 @end group
 @group
 int
 main ()
 @{
-  /* Similar to using $1, $2 in a Bison action.  */
+  /* Similar to using $1, $2 in a Bison action. */
   char *fst = (yylex (), yylval);
   char *snd = (yylex (), yylval);
   printf ("\"%s\", \"%s\"\n", fst, snd);
@@ -11364,7 +13606,7 @@
 @code{%lex-param} etc.), and use the following:
 
 @example
-  /* @r{Prologue.}  */
+  /* @r{Prologue.} */
 %%
 %@{
   if (start_token)
@@ -11374,7 +13616,7 @@
       return t;
     @}
 %@}
-  /* @r{The rules.}  */
+  /* @r{The rules.} */
 @end example
 
 
@@ -11387,8 +13629,10 @@
 
 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.
+POSIX specification for Yacc.  If you run into problems, please send us a
+bug report.
+
+@include relocatable.texi
 
 @node I can't build Bison
 @section I can't build Bison
@@ -11404,9 +13648,20 @@
 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
+gettext from @url{https://ftp.gnu.org/gnu/gettext/} and re-configure
 Bison.  See the file @file{ABOUT-NLS} for more information.
 
+@quotation
+I can't build Bison because my C compiler is too old.
+@end quotation
+
+Except for GLR parsers (@pxref{Compiler Requirements for GLR}), the C
+code that Bison generates requires only C89 or later.  However, Bison
+itself requires common C99 features such as declarations after
+statements.  Bison's @code{configure} script attempts to enable C99 (or
+later) support on compilers that default to pre-C99.  If your compiler
+lacks these C99 features entirely, GCC may well be a better choice; or
+you can try upgrading to your compiler's latest version.
 
 @node Where can I find help?
 @section Where can I find help?
@@ -11432,8 +13687,8 @@
 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
+Before sending a bug report, make sure you are using the latest
+version.  Check @url{https://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.
@@ -11448,8 +13703,8 @@
 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').
+@code{configure}.  Depending on the nature of the bug, you may be asked to
+send additional files as well (such as @file{config.h} or @file{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.
@@ -11513,8 +13768,8 @@
 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}.
+In a grammar, the Bison-generated nonterminal symbol for a midrule action
+with a semantic value.  @xref{Midrule Action Translation}.
 @end deffn
 
 @deffn {Variable} @@@var{name}
@@ -11524,8 +13779,8 @@
 @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}.
+In a grammar, the Bison-generated nonterminal symbol for a midrule action
+with no semantics value.  @xref{Midrule Action Translation}.
 @end deffn
 
 @deffn {Variable} $$
@@ -11558,6 +13813,15 @@
 Grammar}.
 @end deffn
 
+@deffn {Directive} %?@{@var{expression}@}
+Predicate actions.  This is a type of action clause that may appear in
+rules. The expression is evaluated, and if false, causes a syntax error.  In
+GLR parsers during nondeterministic operation,
+this silently causes an alternative parse to die.  During deterministic
+operation, it is the same as the effect of YYERROR.
+@xref{Semantic Predicates}.
+@end deffn
+
 @deffn {Construct} /* @dots{} */
 @deffnx {Construct} // @dots{}
 Comments, as in C/C++.
@@ -11581,10 +13845,6 @@
 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
 
@@ -11592,10 +13852,6 @@
 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
 
@@ -11626,6 +13882,7 @@
 
 @deffn {Directive} %define @var{variable}
 @deffnx {Directive} %define @var{variable} @var{value}
+@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
@@ -11651,6 +13908,11 @@
 GLR Parsers}.
 @end deffn
 
+@deffn {Directive} %empty
+Bison declaration to declare make explicit that a rule has an empty
+right-hand side.  @xref{Empty Rules}.
+@end deffn
+
 @deffn {Symbol} $end
 The predefined token marking the end of the token stream.  It cannot be
 used in the grammar.
@@ -11668,8 +13930,8 @@
 @end deffn
 
 @deffn {Directive} %error-verbose
-Bison declaration to request verbose, specific error message strings
-when @code{yyerror} is called.  @xref{Error Reporting}.
+An obsolete directive standing for @samp{%define parse.error verbose}
+(@pxref{Error Reporting, ,The Error Reporting Function @code{yyerror}}).
 @end deffn
 
 @deffn {Directive} %file-prefix "@var{prefix}"
@@ -11692,12 +13954,12 @@
 @end deffn
 
 @deffn {Directive} %left
-Bison declaration to assign left associativity to token(s).
+Bison declaration to assign precedence and 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
+@deffn {Directive} %lex-param @{@var{argument-declaration}@} @dots{}
+Bison declaration to specifying additional arguments that
 @code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
 for Pure Parsers}.
 @end deffn
@@ -11724,7 +13986,7 @@
 @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.
+@code{%define api.namespace} documentation in this section.
 @end deffn
 
 
@@ -11742,19 +14004,29 @@
 @end deffn
 
 @deffn {Directive} %nonassoc
-Bison declaration to assign nonassociativity to token(s).
+Bison declaration to assign precedence and nonassociativity to token(s).
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
+@deffn {Directive} %nterm
+Bison declaration to declare nonterminals.  @xref{Type Decl, ,Nonterminal
+Symbols}.
+@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}}.
+@deffn {Directive} %param @{@var{argument-declaration}@} @dots{}
+Bison declaration to specify additional arguments that both
+@code{yylex} and @code{yyparse} should accept.  @xref{Parser Function,, The
+Parser Function @code{yyparse}}.
+@end deffn
+
+@deffn {Directive} %parse-param @{@var{argument-declaration}@} @dots{}
+Bison declaration to specify additional arguments that @code{yyparse}
+should accept.  @xref{Parser Function,, The Parser Function @code{yyparse}}.
 @end deffn
 
 @deffn {Directive} %prec
@@ -11762,8 +14034,13 @@
 @xref{Contextual Precedence, ,Context-Dependent Precedence}.
 @end deffn
 
+@deffn {Directive} %precedence
+Bison declaration to assign precedence to token(s), but no associativity
+@xref{Precedence Decl, ,Operator Precedence}.
+@end deffn
+
 @deffn {Directive} %pure-parser
-Deprecated version of @code{%define api.pure} (@pxref{%define
+Deprecated version of @samp{%define api.pure} (@pxref{%define
 Summary,,api.pure}), for which Bison is more careful to warn about
 unreasonable usage.
 @end deffn
@@ -11774,7 +14051,7 @@
 @end deffn
 
 @deffn {Directive} %right
-Bison declaration to assign right associativity to token(s).
+Bison declaration to assign precedence and right associativity to token(s).
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
@@ -11799,7 +14076,7 @@
 @end deffn
 
 @deffn {Directive} %type
-Bison declaration to declare nonterminals.  @xref{Type Decl,
+Bison declaration to declare symbol value types.  @xref{Type Decl,
 ,Nonterminal Symbols}.
 @end deffn
 
@@ -11811,7 +14088,7 @@
 
 @deffn {Directive} %union
 Bison declaration to specify several possible data types for semantic
-values.  @xref{Union Decl, ,The Collection of Value Types}.
+values.  @xref{Union Decl, ,The Union Declaration}.
 @end deffn
 
 @deffn {Macro} YYABORT
@@ -11879,17 +14156,16 @@
 
 @deffn {Function} yyerror
 User-supplied function to be called by @code{yyparse} on error.
-@xref{Error Reporting, ,The Error
-Reporting Function @code{yyerror}}.
+@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}.
+An obsolete macro used in the @file{yacc.c} skeleton, 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 @samp{%define parse.error verbose} is preferred
+(@pxref{Error Reporting, ,The Error Reporting Function @code{yyerror}}).
 @end deffn
 
 @deffn {Macro} YYFPRINTF
@@ -11908,13 +14184,6 @@
 @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
@@ -11950,7 +14219,7 @@
 @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.)
+pure push parser, it is a member of @code{yypstate}.)
 @xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
 @end deffn
 
@@ -11961,7 +14230,8 @@
 
 @deffn {Macro} YYPRINT
 Macro used to output token semantic values.  For @file{yacc.c} only.
-Obsoleted by @code{%printer}.
+Deprecated, use @code{%printer} instead (@pxref{Printer Decl, , Printing
+Semantic Values}).
 @xref{The YYPRINT Macro, , The @code{YYPRINT} Macro}.
 @end deffn
 
@@ -11969,9 +14239,7 @@
 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.)
+@code{yypstate_delete}}.  Does nothing when called with a null pointer.
 @end deffn
 
 @deffn {Function} yypstate_new
@@ -11979,8 +14247,6 @@
 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
@@ -11988,23 +14254,12 @@
 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
@@ -12016,7 +14271,8 @@
 @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
+the parser will use @code{malloc} to extend its stacks and memory exhaustion
+occurs if @code{malloc} fails (@pxref{Memory Management}).  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.
@@ -12031,6 +14287,7 @@
 @end deffn
 
 @deffn {Type} YYSTYPE
+Deprecated in favor of the @code{%define} variable @code{api.value.type}.
 Data type of semantic values; @code{int} by default.
 @xref{Value Type, ,Data Types of Semantic Values}.
 @end deffn
@@ -12194,7 +14451,7 @@
 number of times in parallel, without interference between the various
 invocations.  @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
 
-@item Reverse polish notation
+@item Reverse Polish Notation
 A language in which all operators are postfix operators.
 
 @item Right recursion
@@ -12248,14 +14505,32 @@
 resolution.  @xref{Unreachable States}.
 @end table
 
-@node Copying This Manual
-@appendix Copying This Manual
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
 @include fdl.texi
 
 @node Bibliography
 @unnumbered Bibliography
 
+@c Please follow the following canvas to add more references.
+
 @table @asis
+@item [Corbett 1984]
+@c author
+Robert Paul Corbett,
+@c title
+Static Semantics in Compiler Error Recovery
+@c in
+Ph.D. Dissertation, Report No. UCB/CSD 85/251,
+@c where
+Department of Electrical Engineering and Computer Science, Compute Science
+Division, University of California, Berkeley, California
+@c when
+(June 1985).
+@c url
+@uref{http://xtf.lib.berkeley.edu/reports/TRWebData/accessPages/CSD-85-251.html}
+
 @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
@@ -12280,6 +14555,14 @@
 Systems}, Vol.@: 4, No.@: 4 (October 1982), pp.@:
 615--649. @uref{http://dx.doi.org/10.1145/69622.357187}
 
+@item [Johnson 1978]
+Steven C. Johnson,
+A portable compiler: theory and practice,
+in @cite{Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on
+Principles of programming languages} (POPL '78),
+pp.@: 97--104.
+@uref{https://dx.doi.org/10.1145/512760.512771}.
+
 @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.@:
@@ -12312,8 +14595,8 @@
 @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: symrec val tptr FUN func struct sym enum IEC syntaxes Byacc
+@c LocalWords: fun putsym getsym arith funs atan ptr malloc sizeof Lex pcc
 @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
@@ -12322,9 +14605,9 @@
 @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: YYINITDEPTH stmts ref initdcl maybeasm notype Lookahead
 @c LocalWords: hexflag STR exdent itemset asis DYYDEBUG YYFPRINTF args Autoconf
-@c LocalWords: infile ypp yxx outfile itemx tex leaderfill Troubleshouting sqrt
+@c LocalWords: ypp yxx itemx tex leaderfill Troubleshouting sqrt Graphviz
 @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
@@ -12338,7 +14621,7 @@
 @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: multitable headitem hh basename Doxygen fno filename gdef
 @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
@@ -12348,15 +14631,28 @@
 @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: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos
 @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: clval CDEBUG cdebug deftypeopx yyterminate LocationType yyo
+@c LocalWords: parsers parser's documentencoding documentlanguage Wempty ss
 @c LocalWords: associativity subclasses precedences unresolvable runnable
-@c LocalWords: allocators subunit initializations unreferenced untyped
-@c LocalWords: errorVerbose subtype subtypes
+@c LocalWords: allocators subunit initializations unreferenced untyped dir
+@c LocalWords: errorVerbose subtype subtypes Wmidrule midrule's src rvalues
+@c LocalWords: automove evolutions Wother Wconflicts PNG lookaheads Acc sep
+@c LocalWords: xsltproc XSL xsl xhtml html num Wprecedence Werror fcaret gv
+@c LocalWords: fdiagnostics setlocale nullptr ast srcdir iff drv rgbWarning
+@c LocalWords: deftypefunx pragma Wnull dereference Wdocumentation elif ish
+@c LocalWords: Wdeprecated Wregister noinput yyloc yypos PODs sstream Wsign
+@c LocalWords: typename emplace Wconversion Wshorten yacchack reentrancy
+@c LocalWords: Relocatability exprs fixit Wyacc parseable fixits ffixit svg
+@c LocalWords: DNDEBUG cstring Wzero workalike POPL workalikes byacc UCB
+@c LocalWords: Penello's Penello Byson Byson's Corbett's CSD TOPLAS PDP
+@c LocalWords: Beazley's goyacc ocamlyacc SIGACT SIGPLAN colorWarning
+@c LocalWords: setcolor rgbError colorError rgbNotice colorNotice derror
+@c LocalWords: colorOff maincolor inlineraw darkviolet darkcyan dwarning
+@c LocalWords: dnotice copyable stdint ptrdiff bufsize
 
 @c Local Variables:
 @c ispell-dictionary: "american"
diff --git a/doc/bison.x b/doc/bison.x
index 1eaa9fd..edaebe8 100644
--- a/doc/bison.x
+++ b/doc/bison.x
@@ -39,7 +39,7 @@
 is adapted from the node
 .B Invocation
 in the
-.B bison.texinfo
+.B bison.texi
 manual, which should be taken as authoritative.
 .PP
 .I Bison
@@ -53,3 +53,8 @@
 .BR \-\-file-prefix ,
 connect the option name and the argument with
 .BR = .
+
+[see also]
+.BR lex (1),
+.BR flex (1),
+.BR yacc (1).
diff --git a/doc/common.x b/doc/common.x
deleted file mode 100644
index 60224c3..0000000
--- a/doc/common.x
+++ /dev/null
@@ -1,4 +0,0 @@
-[see also]
-.BR lex (1),
-.BR flex (1),
-.BR yacc (1).
diff --git a/doc/cross-options.texi b/doc/cross-options.texi
index 4b71d31..9afdf15 100644
--- a/doc/cross-options.texi
+++ b/doc/cross-options.texi
@@ -1,95 +1,27 @@
-@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}
+@item @option{--color[=@var{when}]}                    @tab                                      @tab
+@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{features}]}              @tab @option{-f [@var{features}]}         @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{--style=@var{file}}                      @tab                                      @tab
+@item @option{--token-table}                           @tab @option{-k}                          @tab @code{%token-table}
+@item @option{--update}                                @tab @option{-u}                          @tab
+@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 cb71f05..542edaa 100644
--- a/doc/fdl.texi
+++ b/doc/fdl.texi
@@ -6,7 +6,7 @@
 
 @display
 Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
-@uref{http://fsf.org/}
+@uref{https://fsf.org/}
 
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.
@@ -97,7 +97,7 @@
 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
+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,
@@ -414,7 +414,7 @@
 of the GNU Free Documentation 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.  See
-@uref{http://www.gnu.org/copyleft/}.
+@uref{https://www.gnu.org/copyleft/}.
 
 Each version of the License is given a distinguishing version number.
 If the Document specifies that a particular numbered version of this
diff --git a/doc/figs/example-reduce.eps b/doc/figs/example-reduce.eps
index f1db207..43c0745 100644
--- a/doc/figs/example-reduce.eps
+++ b/doc/figs/example-reduce.eps
@@ -1,8 +1,8 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Creator: graphviz version 2.40.1 (20161225.0304)
 %%Title: reduce.y
 %%Pages: 1
-%%BoundingBox: 0 0 180 150
+%%BoundingBox: 0 0 184 148
 %%EndComments
 save
 %%BeginProlog
@@ -163,7 +163,6 @@
 %%EndProlog
 %%BeginSetup
 14 default-font-family set_font
-1 setmiterlimit
 % /arrowlength 10 def
 % /arrowwidth 5 def
 
@@ -179,115 +178,115 @@
 %%EndSetup
 setupLatin1
 %%Page: 1 1
-%%PageBoundingBox: 0 0 180 150
+%%PageBoundingBox: 0 0 184 148
 %%PageOrientation: Portrait
 0 0 1 beginpage
 gsave
-0 0 180 150 boxprim clip newpath
-1 1 set_scale 0 rotate 4 5 translate
+0 0 184 148 boxprim clip newpath
+1 1 set_scale 0 rotate 4 4 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
+newpath 176 140 moveto
+0 140 lineto
+0 87 lineto
+176 87 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-57 126.3 moveto 58 (State 1) alignedtext
+58.5 124.8 moveto 59 (State 1) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 111.3 moveto 157 (  3 a: "0" .  ["."]) alignedtext
+8 109.8 moveto 160 (  3 a: "0" .  ["."]) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 96.3 moveto 157 (  4 b: "0" .  [";"]) alignedtext
+8 94.8 moveto 160 (  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
+newpath 49 36 moveto
+18.8347 18 lineto
+49 0 lineto
+79.1653 18 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 47 36 moveto
-17 18 lineto
-47 0 lineto
-77 18 lineto
+newpath 49 36 moveto
+18.8347 18 lineto
+49 0 lineto
+79.1653 18 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-38.5 14.3 moveto 17 (R3) alignedtext
+40.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
+newpath 77.1363 86.8979 moveto
+71.4249 72.9122 64.4748 55.8933 58.9111 42.2696 curveto
 stroke
 0 0 0 edgecolor
-newpath 59.74 40.81 moveto
-52.7 32.89 lineto
-53.26 43.47 lineto
+newpath 61.9913 40.5543 moveto
+54.9704 32.6197 lineto
+55.5109 43.2008 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
+newpath 61.9913 40.5543 moveto
+54.9704 32.6197 lineto
+55.5109 43.2008 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
+newpath 128 36 moveto
+97.8347 18 lineto
+128 0 lineto
+158.1653 18 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 126 36 moveto
-96 18 lineto
-126 0 lineto
-156 18 lineto
+newpath 128 36 moveto
+97.8347 18 lineto
+128 0 lineto
+158.1653 18 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-117.5 14.3 moveto 17 (R4) alignedtext
+119.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
+newpath 99.1422 86.8979 moveto
+105.0575 72.7751 112.2683 55.5593 118.0021 41.8699 curveto
 stroke
 0 0 0 edgecolor
-newpath 119.61 43.2 moveto
-120.26 32.62 lineto
-113.16 40.48 lineto
+newpath 121.2415 43.1955 moveto
+121.8765 32.6197 lineto
+114.7849 40.4912 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
+newpath 121.2415 43.1955 moveto
+121.8765 32.6197 lineto
+114.7849 40.4912 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-111 58.3 moveto 42 ([";"]) alignedtext
+112 57.8 moveto 43 ([";"]) alignedtext
 grestore
 endpage
 showpage
diff --git a/doc/figs/example-reduce.dot b/doc/figs/example-reduce.gv
similarity index 100%
rename from doc/figs/example-reduce.dot
rename to doc/figs/example-reduce.gv
diff --git a/doc/figs/example-reduce.pdf b/doc/figs/example-reduce.pdf
index e7b2d13..58c1934 100644
--- a/doc/figs/example-reduce.pdf
+++ b/doc/figs/example-reduce.pdf
Binary files differ
diff --git a/doc/figs/example-reduce.png b/doc/figs/example-reduce.png
deleted file mode 100644
index 80106ac..0000000
--- a/doc/figs/example-reduce.png
+++ /dev/null
Binary files differ
diff --git a/doc/figs/example-reduce.svg b/doc/figs/example-reduce.svg
new file mode 100644
index 0000000..149590d
--- /dev/null
+++ b/doc/figs/example-reduce.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: reduce.y Pages: 1 -->
+<svg width="184pt" height="148pt"
+ viewBox="0.00 0.00 184.00 148.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 144)">
+<title>reduce.y</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-144 180,-144 180,4 -4,4"/>
+<!-- 1 -->
+<g id="node1" class="node">
+<title>1</title>
+<polygon fill="none" stroke="#000000" points="176,-140 0,-140 0,-87 176,-87 176,-140"/>
+<text text-anchor="middle" x="88" y="-124.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 1</text>
+<text text-anchor="start" x="8" y="-109.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;3 a: &quot;0&quot; . &#160;[&quot;.&quot;]</text>
+<text text-anchor="start" x="8" y="-94.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;4 b: &quot;0&quot; . &#160;[&quot;;&quot;]</text>
+</g>
+<!-- 1R3 -->
+<g id="node2" class="node">
+<title>1R3</title>
+<polygon fill="#9acd32" stroke="#000000" points="49,-36 18.8347,-18 49,0 79.1653,-18 49,-36"/>
+<text text-anchor="middle" x="49" y="-14.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R3</text>
+</g>
+<!-- 1&#45;&gt;1R3 -->
+<g id="edge1" class="edge">
+<title>1&#45;&gt;1R3</title>
+<path fill="none" stroke="#000000" d="M77.1363,-86.8979C71.4249,-72.9122 64.4748,-55.8933 58.9111,-42.2696"/>
+<polygon fill="#000000" stroke="#000000" points="61.9913,-40.5543 54.9704,-32.6197 55.5109,-43.2008 61.9913,-40.5543"/>
+</g>
+<!-- 1R4 -->
+<g id="node3" class="node">
+<title>1R4</title>
+<polygon fill="#9acd32" stroke="#000000" points="128,-36 97.8347,-18 128,0 158.1653,-18 128,-36"/>
+<text text-anchor="middle" x="128" y="-14.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R4</text>
+</g>
+<!-- 1&#45;&gt;1R4 -->
+<g id="edge2" class="edge">
+<title>1&#45;&gt;1R4</title>
+<path fill="none" stroke="#000000" d="M99.1422,-86.8979C105.0575,-72.7751 112.2683,-55.5593 118.0021,-41.8699"/>
+<polygon fill="#000000" stroke="#000000" points="121.2415,-43.1955 121.8765,-32.6197 114.7849,-40.4912 121.2415,-43.1955"/>
+<text text-anchor="middle" x="133.5" y="-57.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">[&quot;;&quot;]</text>
+</g>
+</g>
+</svg>
diff --git a/doc/figs/example-reduce.txt b/doc/figs/example-reduce.txt
new file mode 100644
index 0000000..d4e8219
--- /dev/null
+++ b/doc/figs/example-reduce.txt
@@ -0,0 +1,13 @@
+       .------------------.
+       |     State 1      |
+       | 3 a: "0" . [";"] |
+       | 4 b: "0" . ["."] |
+       `------------------'
+             /     \
+            /       \ ["."]
+           /         \
+          v           v
+         / \         / \
+        / R \       / R \
+(green) \ 3 /       \ 4 / (green)
+         \ /         \ /
diff --git a/doc/figs/example-shift.eps b/doc/figs/example-shift.eps
index ed7ebcc..fdb6f9b 100644
--- a/doc/figs/example-shift.eps
+++ b/doc/figs/example-shift.eps
@@ -1,8 +1,8 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Creator: graphviz version 2.40.1 (20161225.0304)
 %%Title: shift.y
 %%Pages: 1
-%%BoundingBox: 0 0 156 136
+%%BoundingBox: 0 0 159 135
 %%EndComments
 save
 %%BeginProlog
@@ -163,7 +163,6 @@
 %%EndProlog
 %%BeginSetup
 14 default-font-family set_font
-1 setmiterlimit
 % /arrowlength 10 def
 % /arrowwidth 5 def
 
@@ -179,67 +178,67 @@
 %%EndSetup
 setupLatin1
 %%Page: 1 1
-%%PageBoundingBox: 0 0 156 136
+%%PageBoundingBox: 0 0 159 135
 %%PageOrientation: Portrait
 0 0 1 beginpage
 gsave
-0 0 156 136 boxprim clip newpath
-1 1 set_scale 0 rotate 4 5 translate
+0 0 159 135 boxprim clip newpath
+1 1 set_scale 0 rotate 4 4 translate
 % 3
 gsave
 1 setlinewidth
 0 0 0 nodecolor
-newpath 148.25 128 moveto
--.25 128 lineto
--.25 90 lineto
-148.25 90 lineto
+newpath 151 127 moveto
+0 127 lineto
+0 89 lineto
+151 89 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-45 112.8 moveto 58 (State 3) alignedtext
+46 111.8 moveto 59 (State 3) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 97.8 moveto 133 (  1 exp: a . ".") alignedtext
+8 96.8 moveto 135 (  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
+newpath 151 38 moveto
+0 38 lineto
+0 0 lineto
+151 0 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-45 22.8 moveto 58 (State 6) alignedtext
+46 22.8 moveto 59 (State 6) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 7.8 moveto 133 (  1 exp: a "." .) alignedtext
+8 7.8 moveto 135 (  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
+newpath 75.5 88.6883 moveto
+75.5 76.909 75.5 61.6187 75.5 48.3628 curveto
 stroke
 0 0 0 edgecolor
-newpath 77.5 48.21 moveto
-74 38.21 lineto
-70.5 48.21 lineto
+newpath 79.0001 48.274 moveto
+75.5 38.274 lineto
+72.0001 48.274 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
+newpath 79.0001 48.274 moveto
+75.5 38.274 lineto
+72.0001 48.274 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-74 60.3 moveto 25 (".") alignedtext
+75.5 59.8 moveto 26 (".") alignedtext
 grestore
 endpage
 showpage
diff --git a/doc/figs/example-shift.dot b/doc/figs/example-shift.gv
similarity index 100%
rename from doc/figs/example-shift.dot
rename to doc/figs/example-shift.gv
diff --git a/doc/figs/example-shift.pdf b/doc/figs/example-shift.pdf
index ff185e4..374907f 100644
--- a/doc/figs/example-shift.pdf
+++ b/doc/figs/example-shift.pdf
Binary files differ
diff --git a/doc/figs/example-shift.png b/doc/figs/example-shift.png
deleted file mode 100644
index 28fff65..0000000
--- a/doc/figs/example-shift.png
+++ /dev/null
Binary files differ
diff --git a/doc/figs/example-shift.svg b/doc/figs/example-shift.svg
new file mode 100644
index 0000000..bd9c236
--- /dev/null
+++ b/doc/figs/example-shift.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: shift.y Pages: 1 -->
+<svg width="159pt" height="135pt"
+ viewBox="0.00 0.00 159.00 135.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 131)">
+<title>shift.y</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-131 155,-131 155,4 -4,4"/>
+<!-- 3 -->
+<g id="node1" class="node">
+<title>3</title>
+<polygon fill="none" stroke="#000000" points="151,-127 0,-127 0,-89 151,-89 151,-127"/>
+<text text-anchor="middle" x="75.5" y="-111.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 3</text>
+<text text-anchor="start" x="8" y="-96.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;1 exp: a . &quot;.&quot;</text>
+</g>
+<!-- 6 -->
+<g id="node2" class="node">
+<title>6</title>
+<polygon fill="none" stroke="#000000" points="151,-38 0,-38 0,0 151,0 151,-38"/>
+<text text-anchor="middle" x="75.5" y="-22.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 6</text>
+<text text-anchor="start" x="8" y="-7.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;1 exp: a &quot;.&quot; .</text>
+</g>
+<!-- 3&#45;&gt;6 -->
+<g id="edge1" class="edge">
+<title>3&#45;&gt;6</title>
+<path fill="none" stroke="#000000" d="M75.5,-88.6883C75.5,-76.909 75.5,-61.6187 75.5,-48.3628"/>
+<polygon fill="#000000" stroke="#000000" points="79.0001,-48.274 75.5,-38.274 72.0001,-48.274 79.0001,-48.274"/>
+<text text-anchor="middle" x="88.5" y="-59.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">&quot;.&quot;</text>
+</g>
+</g>
+</svg>
diff --git a/doc/figs/example-shift.txt b/doc/figs/example-shift.txt
new file mode 100644
index 0000000..43b1412
--- /dev/null
+++ b/doc/figs/example-shift.txt
@@ -0,0 +1,12 @@
+.----------------.
+|    State 3     |
+| 1 exp: a . ";" |
+`----------------'
+        |
+        | ";"
+        |
+        v
+.----------------.
+|    State 6     |
+| 1 exp: a ";" . |
+`----------------'
diff --git a/doc/figs/example.eps b/doc/figs/example.eps
index 33031ba..0ecb490 100644
--- a/doc/figs/example.eps
+++ b/doc/figs/example.eps
@@ -1,8 +1,8 @@
 %!PS-Adobe-3.0 EPSF-3.0
-%%Creator: graphviz version 2.29.20121022.0445 (20121022.0445)
+%%Creator: graphviz version 2.40.1 (20161225.0304)
 %%Title: /tmp/fo.y
 %%Pages: 1
-%%BoundingBox: 0 0 739 424
+%%BoundingBox: 0 0 751 420
 %%EndComments
 save
 %%BeginProlog
@@ -163,7 +163,6 @@
 %%EndProlog
 %%BeginSetup
 14 default-font-family set_font
-1 setmiterlimit
 % /arrowlength 10 def
 % /arrowwidth 5 def
 
@@ -179,529 +178,529 @@
 %%EndSetup
 setupLatin1
 %%Page: 1 1
-%%PageBoundingBox: 0 0 739 424
+%%PageBoundingBox: 0 0 751 420
 %%PageOrientation: Portrait
 0 0 1 beginpage
 gsave
-0 0 739 424 boxprim clip newpath
-1 1 set_scale 0 rotate 4 5 translate
+0 0 751 420 boxprim clip newpath
+1 1 set_scale 0 rotate 4 4 translate
 % 0
 gsave
 1 setlinewidth
 0 0 0 nodecolor
-newpath 495 416 moveto
-289 416 lineto
-289 302 lineto
-495 302 lineto
+newpath 465 412 moveto
+255 412 lineto
+255 298 lineto
+465 298 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-363 400.8 moveto 58 (State 0) alignedtext
+330.5 396.8 moveto 59 (State 0) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-297 369.8 moveto 190 (  0 $accept: . exp $end) alignedtext
+263 365.8 moveto 194 (  0 $accept: . exp $end) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-297 354.8 moveto 133 (  1 exp: . a ";") alignedtext
+263 350.8 moveto 135 (  1 exp: . a ";") alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-297 339.8 moveto 133 (  2    | . b ".") alignedtext
+263 335.8 moveto 135 (  2    | . b ".") alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-297 324.8 moveto 100 (  3 a: . "0") alignedtext
+263 320.8 moveto 101 (  3 a: . "0") alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-297 309.8 moveto 100 (  4 b: . "0") alignedtext
+263 305.8 moveto 101 (  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
+newpath 176 247 moveto
+0 247 lineto
+0 178 lineto
+176 178 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-57 234.3 moveto 58 (State 1) alignedtext
+58.5 231.8 moveto 59 (State 1) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 203.3 moveto 157 (  3 a: "0" .  [";"]) alignedtext
+8 200.8 moveto 160 (  3 a: "0" .  [";"]) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-7.5 188.3 moveto 157 (  4 b: "0" .  ["."]) alignedtext
+8 185.8 moveto 160 (  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
+newpath 254.8377 299.9058 moveto
+224.2166 283.8635 191.3938 266.6677 163.0319 251.809 curveto
 stroke
 0 0 0 edgecolor
-newpath 168.86 250.59 moveto
-158.32 249.56 lineto
-165.92 256.94 lineto
+newpath 164.471 248.6117 moveto
+153.9887 247.0713 lineto
+161.2224 254.8123 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
+newpath 164.471 248.6117 moveto
+153.9887 247.0713 lineto
+161.2224 254.8123 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-230 272.3 moveto 25 ("0") alignedtext
+216 268.8 moveto 26 ("0") alignedtext
 grestore
 % 2
 gsave
 1 setlinewidth
 0 0 0 nodecolor
-newpath 397 242 moveto
-191 242 lineto
-191 188 lineto
-397 188 lineto
+newpath 404 239.5 moveto
+194 239.5 lineto
+194 185.5 lineto
+404 185.5 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-265 226.8 moveto 58 (State 2) alignedtext
+269.5 224.3 moveto 59 (State 2) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-199 195.8 moveto 190 (  0 $accept: exp . $end) alignedtext
+202 193.3 moveto 194 (  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
+newpath 335.5404 297.8609 moveto
+328.4711 281.3463 320.9507 263.7782 314.5817 248.8999 curveto
 stroke
 0 0 0 edgecolor
-newpath 320.6 248.39 moveto
-312.04 242.14 lineto
-314.84 252.36 lineto
+newpath 317.732 247.3651 moveto
+310.579 239.5493 lineto
+311.2968 250.1198 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
+newpath 317.732 247.3651 moveto
+310.579 239.5493 lineto
+311.2968 250.1198 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-341 272.3 moveto 25 (exp) alignedtext
+328 268.8 moveto 26 (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
+newpath 573.5 239.5 moveto
+422.5 239.5 lineto
+422.5 185.5 lineto
+573.5 185.5 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-461 226.8 moveto 58 (State 3) alignedtext
+468.5 224.3 moveto 59 (State 3) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-423.5 195.8 moveto 133 (  1 exp: a . ";") alignedtext
+430.5 193.3 moveto 135 (  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
+newpath 415.3347 297.8609 moveto
+432.0893 280.5599 449.9638 262.1026 464.7898 246.7932 curveto
 stroke
 0 0 0 edgecolor
-newpath 469.16 252.36 moveto
-471.96 242.14 lineto
-463.4 248.39 lineto
+newpath 467.3623 249.1678 moveto
+471.8048 239.5493 lineto
+462.3338 244.2981 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
+newpath 467.3623 249.1678 moveto
+471.8048 239.5493 lineto
+462.3338 244.2981 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-453 272.3 moveto 9 (a) alignedtext
+446 268.8 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
+newpath 742.5 239.5 moveto
+591.5 239.5 lineto
+591.5 185.5 lineto
+742.5 185.5 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-628 226.8 moveto 58 (State 4) alignedtext
+637.5 224.3 moveto 59 (State 4) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-590.5 195.8 moveto 133 (  2 exp: b . ".") alignedtext
+599.5 193.3 moveto 135 (  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
+newpath 465.2225 306.1589 moveto
+509.5736 285.5725 559.9111 262.2074 599.2142 243.9641 curveto
 stroke
 0 0 0 edgecolor
-newpath 601.17 249.89 moveto
-608.33 242.08 lineto
-597.86 243.72 lineto
+newpath 600.8484 247.0643 moveto
+608.4453 239.6793 lineto
+597.9012 240.7149 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
+newpath 600.8484 247.0643 moveto
+608.4453 239.6793 lineto
+597.9012 240.7149 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-557 272.3 moveto 9 (b) alignedtext
+551 268.8 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
+newpath 38 118 moveto
+7.8347 100 lineto
+38 82 lineto
+68.1653 100 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 36 119 moveto
-6 101 lineto
-36 83 lineto
-66 101 lineto
+newpath 38 118 moveto
+7.8347 100 lineto
+38 82 lineto
+68.1653 100 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-27.5 97.3 moveto 17 (R3) alignedtext
+29.5 96.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
+newpath 72.5904 177.8283 moveto
+64.8229 160.3515 55.5996 139.599 48.6312 123.9201 curveto
 stroke
 0 0 0 edgecolor
-newpath 49.28 123.17 moveto
-42.01 115.46 lineto
-42.89 126.02 lineto
+newpath 51.6753 122.1516 moveto
+44.4155 114.435 lineto
+45.2786 124.9946 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
+newpath 51.6753 122.1516 moveto
+44.4155 114.435 lineto
+45.2786 124.9946 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
+newpath 117 118 moveto
+86.8347 100 lineto
+117 82 lineto
+147.1653 100 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 115 119 moveto
-85 101 lineto
-115 83 lineto
-145 101 lineto
+newpath 117 118 moveto
+86.8347 100 lineto
+117 82 lineto
+147.1653 100 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-106.5 97.3 moveto 17 (R4) alignedtext
+108.5 96.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
+newpath 96.9376 177.8283 moveto
+101.2916 160.9376 106.4344 140.9872 110.423 125.5143 curveto
 stroke
 0 0 0 edgecolor
-newpath 112.02 127.47 moveto
-111.14 116.91 lineto
-105.24 125.71 lineto
+newpath 113.869 126.1674 moveto
+112.976 115.6103 lineto
+107.0906 124.4201 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
+newpath 113.869 126.1674 moveto
+112.976 115.6103 lineto
+107.0906 124.4201 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-104 150.3 moveto 42 (["."]) alignedtext
+106 148.8 moveto 43 (["."]) alignedtext
 grestore
 % 5
 gsave
 1 setlinewidth
 0 0 0 nodecolor
-newpath 397 128 moveto
-191 128 lineto
-191 74 lineto
-397 74 lineto
+newpath 404 127 moveto
+194 127 lineto
+194 73 lineto
+404 73 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-265 112.8 moveto 58 (State 5) alignedtext
+269.5 111.8 moveto 59 (State 5) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-199 81.8 moveto 190 (  0 $accept: exp $end .) alignedtext
+202 80.8 moveto 194 (  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
+newpath 299 185.2669 moveto
+299 171.0012 299 153.3067 299 137.7405 curveto
 stroke
 0 0 0 edgecolor
-newpath 297.5 138.09 moveto
-294 128.09 lineto
-290.5 138.09 lineto
+newpath 302.5001 137.3722 moveto
+299 127.3722 lineto
+295.5001 137.3723 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
+newpath 302.5001 137.3722 moveto
+299 127.3722 lineto
+295.5001 137.3723 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-294 150.3 moveto 34 ($end) alignedtext
+299 148.8 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
+newpath 573.5 127 moveto
+422.5 127 lineto
+422.5 73 lineto
+573.5 73 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-461 112.8 moveto 58 (State 6) alignedtext
+468.5 111.8 moveto 59 (State 6) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-423.5 81.8 moveto 133 (  1 exp: a ";" .) alignedtext
+430.5 80.8 moveto 135 (  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
+newpath 498 185.2669 moveto
+498 171.0012 498 153.3067 498 137.7405 curveto
 stroke
 0 0 0 edgecolor
-newpath 493.5 138.09 moveto
-490 128.09 lineto
-486.5 138.09 lineto
+newpath 501.5001 137.3722 moveto
+498 127.3722 lineto
+494.5001 137.3723 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
+newpath 501.5001 137.3722 moveto
+498 127.3722 lineto
+494.5001 137.3723 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-490 150.3 moveto 25 (";") alignedtext
+498 148.8 moveto 26 (";") 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
+newpath 742.5 127 moveto
+591.5 127 lineto
+591.5 73 lineto
+742.5 73 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-628 112.8 moveto 58 (State 7) alignedtext
+637.5 111.8 moveto 59 (State 7) alignedtext
 0 0 0 nodecolor
 14 /courier set_font
-590.5 81.8 moveto 133 (  2 exp: b "." .) alignedtext
+599.5 80.8 moveto 135 (  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
+newpath 667 185.2669 moveto
+667 171.0012 667 153.3067 667 137.7405 curveto
 stroke
 0 0 0 edgecolor
-newpath 660.5 138.09 moveto
-657 128.09 lineto
-653.5 138.09 lineto
+newpath 670.5001 137.3722 moveto
+667 127.3722 lineto
+663.5001 137.3723 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
+newpath 670.5001 137.3722 moveto
+667 127.3722 lineto
+663.5001 137.3723 lineto
 closepath stroke
 0 0 0 edgecolor
 14 /courier set_font
-657 150.3 moveto 25 (".") alignedtext
+667 148.8 moveto 26 (".") 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
+newpath 299 36 moveto
+260.2905 18 lineto
+299 0 lineto
+337.7095 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
+newpath 299 36 moveto
+260.2905 18 lineto
+299 0 lineto
+337.7095 18 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-281.5 14.3 moveto 25 (Acc) alignedtext
+286 14.3 moveto 26 (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
+newpath 299 72.6952 moveto
+299 64.3091 299 55.0593 299 46.5897 curveto
 stroke
 0 0 0 edgecolor
-newpath 297.5 46.09 moveto
-294 36.09 lineto
-290.5 46.09 lineto
+newpath 302.5001 46.4024 moveto
+299 36.4024 lineto
+295.5001 46.4024 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
+newpath 302.5001 46.4024 moveto
+299 36.4024 lineto
+295.5001 46.4024 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
+newpath 498 36 moveto
+467.8347 18 lineto
+498 0 lineto
+528.1653 18 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 490 36 moveto
-460 18 lineto
-490 0 lineto
-520 18 lineto
+newpath 498 36 moveto
+467.8347 18 lineto
+498 0 lineto
+528.1653 18 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-481.5 14.3 moveto 17 (R1) alignedtext
+489.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
+newpath 498 72.6952 moveto
+498 64.3091 498 55.0593 498 46.5897 curveto
 stroke
 0 0 0 edgecolor
-newpath 493.5 46.09 moveto
-490 36.09 lineto
-486.5 46.09 lineto
+newpath 501.5001 46.4024 moveto
+498 36.4024 lineto
+494.5001 46.4024 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
+newpath 501.5001 46.4024 moveto
+498 36.4024 lineto
+494.5001 46.4024 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
+newpath 667 36 moveto
+636.8347 18 lineto
+667 0 lineto
+697.1653 18 lineto
 closepath fill
 1 setlinewidth
 filled
 0 0 0 nodecolor
-newpath 657 36 moveto
-627 18 lineto
-657 0 lineto
-687 18 lineto
+newpath 667 36 moveto
+636.8347 18 lineto
+667 0 lineto
+697.1653 18 lineto
 closepath stroke
 0 0 0 nodecolor
 14 /courier set_font
-648.5 14.3 moveto 17 (R2) alignedtext
+658.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
+newpath 667 72.6952 moveto
+667 64.3091 667 55.0593 667 46.5897 curveto
 stroke
 0 0 0 edgecolor
-newpath 660.5 46.09 moveto
-657 36.09 lineto
-653.5 46.09 lineto
+newpath 670.5001 46.4024 moveto
+667 36.4024 lineto
+663.5001 46.4024 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
+newpath 670.5001 46.4024 moveto
+667 36.4024 lineto
+663.5001 46.4024 lineto
 closepath stroke
 grestore
 endpage
diff --git a/doc/figs/example.dot b/doc/figs/example.gv
similarity index 100%
rename from doc/figs/example.dot
rename to doc/figs/example.gv
diff --git a/doc/figs/example.pdf b/doc/figs/example.pdf
index 15d243f..6c4d336 100644
--- a/doc/figs/example.pdf
+++ b/doc/figs/example.pdf
Binary files differ
diff --git a/doc/figs/example.png b/doc/figs/example.png
deleted file mode 100644
index 69a3eb2..0000000
--- a/doc/figs/example.png
+++ /dev/null
Binary files differ
diff --git a/doc/figs/example.svg b/doc/figs/example.svg
new file mode 100644
index 0000000..d2dad96
--- /dev/null
+++ b/doc/figs/example.svg
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: /tmp/fo.y Pages: 1 -->
+<svg width="751pt" height="420pt"
+ viewBox="0.00 0.00 750.50 420.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 416)">
+<title>/tmp/fo.y</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-416 746.5,-416 746.5,4 -4,4"/>
+<!-- 0 -->
+<g id="node1" class="node">
+<title>0</title>
+<polygon fill="none" stroke="#000000" points="465,-412 255,-412 255,-298 465,-298 465,-412"/>
+<text text-anchor="middle" x="360" y="-396.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 0</text>
+<text text-anchor="start" x="263" y="-365.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;0 $accept: . exp $end</text>
+<text text-anchor="start" x="263" y="-350.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;1 exp: . a &quot;;&quot;</text>
+<text text-anchor="start" x="263" y="-335.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;2 &#160;&#160;&#160;| . b &quot;.&quot;</text>
+<text text-anchor="start" x="263" y="-320.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;3 a: . &quot;0&quot;</text>
+<text text-anchor="start" x="263" y="-305.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;4 b: . &quot;0&quot;</text>
+</g>
+<!-- 1 -->
+<g id="node2" class="node">
+<title>1</title>
+<polygon fill="none" stroke="#000000" points="176,-247 0,-247 0,-178 176,-178 176,-247"/>
+<text text-anchor="middle" x="88" y="-231.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 1</text>
+<text text-anchor="start" x="8" y="-200.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;3 a: &quot;0&quot; . &#160;[&quot;;&quot;]</text>
+<text text-anchor="start" x="8" y="-185.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;4 b: &quot;0&quot; . &#160;[&quot;.&quot;]</text>
+</g>
+<!-- 0&#45;&gt;1 -->
+<g id="edge1" class="edge">
+<title>0&#45;&gt;1</title>
+<path fill="none" stroke="#000000" d="M254.8377,-299.9058C224.2166,-283.8635 191.3938,-266.6677 163.0319,-251.809"/>
+<polygon fill="#000000" stroke="#000000" points="164.471,-248.6117 153.9887,-247.0713 161.2224,-254.8123 164.471,-248.6117"/>
+<text text-anchor="middle" x="229" y="-268.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">&quot;0&quot;</text>
+</g>
+<!-- 2 -->
+<g id="node3" class="node">
+<title>2</title>
+<polygon fill="none" stroke="#000000" points="404,-239.5 194,-239.5 194,-185.5 404,-185.5 404,-239.5"/>
+<text text-anchor="middle" x="299" y="-224.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 2</text>
+<text text-anchor="start" x="202" y="-193.3" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;0 $accept: exp . $end</text>
+</g>
+<!-- 0&#45;&gt;2 -->
+<g id="edge2" class="edge">
+<title>0&#45;&gt;2</title>
+<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M335.5404,-297.8609C328.4711,-281.3463 320.9507,-263.7782 314.5817,-248.8999"/>
+<polygon fill="#000000" stroke="#000000" points="317.732,-247.3651 310.579,-239.5493 311.2968,-250.1198 317.732,-247.3651"/>
+<text text-anchor="middle" x="341" y="-268.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">exp</text>
+</g>
+<!-- 3 -->
+<g id="node4" class="node">
+<title>3</title>
+<polygon fill="none" stroke="#000000" points="573.5,-239.5 422.5,-239.5 422.5,-185.5 573.5,-185.5 573.5,-239.5"/>
+<text text-anchor="middle" x="498" y="-224.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 3</text>
+<text text-anchor="start" x="430.5" y="-193.3" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;1 exp: a . &quot;;&quot;</text>
+</g>
+<!-- 0&#45;&gt;3 -->
+<g id="edge3" class="edge">
+<title>0&#45;&gt;3</title>
+<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M415.3347,-297.8609C432.0893,-280.5599 449.9638,-262.1026 464.7898,-246.7932"/>
+<polygon fill="#000000" stroke="#000000" points="467.3623,-249.1678 471.8048,-239.5493 462.3338,-244.2981 467.3623,-249.1678"/>
+<text text-anchor="middle" x="450.5" y="-268.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">a</text>
+</g>
+<!-- 4 -->
+<g id="node5" class="node">
+<title>4</title>
+<polygon fill="none" stroke="#000000" points="742.5,-239.5 591.5,-239.5 591.5,-185.5 742.5,-185.5 742.5,-239.5"/>
+<text text-anchor="middle" x="667" y="-224.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 4</text>
+<text text-anchor="start" x="599.5" y="-193.3" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;2 exp: b . &quot;.&quot;</text>
+</g>
+<!-- 0&#45;&gt;4 -->
+<g id="edge4" class="edge">
+<title>0&#45;&gt;4</title>
+<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M465.2225,-306.1589C509.5736,-285.5725 559.9111,-262.2074 599.2142,-243.9641"/>
+<polygon fill="#000000" stroke="#000000" points="600.8484,-247.0643 608.4453,-239.6793 597.9012,-240.7149 600.8484,-247.0643"/>
+<text text-anchor="middle" x="555.5" y="-268.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">b</text>
+</g>
+<!-- 1R3 -->
+<g id="node6" class="node">
+<title>1R3</title>
+<polygon fill="#b2df8a" stroke="#000000" points="38,-118 7.8347,-100 38,-82 68.1653,-100 38,-118"/>
+<text text-anchor="middle" x="38" y="-96.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R3</text>
+</g>
+<!-- 1&#45;&gt;1R3 -->
+<g id="edge5" class="edge">
+<title>1&#45;&gt;1R3</title>
+<path fill="none" stroke="#000000" d="M72.5904,-177.8283C64.8229,-160.3515 55.5996,-139.599 48.6312,-123.9201"/>
+<polygon fill="#000000" stroke="#000000" points="51.6753,-122.1516 44.4155,-114.435 45.2786,-124.9946 51.6753,-122.1516"/>
+</g>
+<!-- 1R4 -->
+<g id="node7" class="node">
+<title>1R4</title>
+<polygon fill="#b2df8a" stroke="#000000" points="117,-118 86.8347,-100 117,-82 147.1653,-100 117,-118"/>
+<text text-anchor="middle" x="117" y="-96.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R4</text>
+</g>
+<!-- 1&#45;&gt;1R4 -->
+<g id="edge6" class="edge">
+<title>1&#45;&gt;1R4</title>
+<path fill="none" stroke="#000000" d="M96.9376,-177.8283C101.2916,-160.9376 106.4344,-140.9872 110.423,-125.5143"/>
+<polygon fill="#000000" stroke="#000000" points="113.869,-126.1674 112.976,-115.6103 107.0906,-124.4201 113.869,-126.1674"/>
+<text text-anchor="middle" x="127.5" y="-148.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">[&quot;.&quot;]</text>
+</g>
+<!-- 5 -->
+<g id="node8" class="node">
+<title>5</title>
+<polygon fill="none" stroke="#000000" points="404,-127 194,-127 194,-73 404,-73 404,-127"/>
+<text text-anchor="middle" x="299" y="-111.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 5</text>
+<text text-anchor="start" x="202" y="-80.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;0 $accept: exp $end .</text>
+</g>
+<!-- 2&#45;&gt;5 -->
+<g id="edge7" class="edge">
+<title>2&#45;&gt;5</title>
+<path fill="none" stroke="#000000" d="M299,-185.2669C299,-171.0012 299,-153.3067 299,-137.7405"/>
+<polygon fill="#000000" stroke="#000000" points="302.5001,-137.3722 299,-127.3722 295.5001,-137.3723 302.5001,-137.3722"/>
+<text text-anchor="middle" x="316" y="-148.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">$end</text>
+</g>
+<!-- 6 -->
+<g id="node9" class="node">
+<title>6</title>
+<polygon fill="none" stroke="#000000" points="573.5,-127 422.5,-127 422.5,-73 573.5,-73 573.5,-127"/>
+<text text-anchor="middle" x="498" y="-111.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 6</text>
+<text text-anchor="start" x="430.5" y="-80.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;1 exp: a &quot;;&quot; .</text>
+</g>
+<!-- 3&#45;&gt;6 -->
+<g id="edge8" class="edge">
+<title>3&#45;&gt;6</title>
+<path fill="none" stroke="#000000" d="M498,-185.2669C498,-171.0012 498,-153.3067 498,-137.7405"/>
+<polygon fill="#000000" stroke="#000000" points="501.5001,-137.3722 498,-127.3722 494.5001,-137.3723 501.5001,-137.3722"/>
+<text text-anchor="middle" x="511" y="-148.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">&quot;;&quot;</text>
+</g>
+<!-- 7 -->
+<g id="node10" class="node">
+<title>7</title>
+<polygon fill="none" stroke="#000000" points="742.5,-127 591.5,-127 591.5,-73 742.5,-73 742.5,-127"/>
+<text text-anchor="middle" x="667" y="-111.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">State 7</text>
+<text text-anchor="start" x="599.5" y="-80.8" font-family="Courier,monospace" font-size="14.00" fill="#000000"> &#160;2 exp: b &quot;.&quot; .</text>
+</g>
+<!-- 4&#45;&gt;7 -->
+<g id="edge9" class="edge">
+<title>4&#45;&gt;7</title>
+<path fill="none" stroke="#000000" d="M667,-185.2669C667,-171.0012 667,-153.3067 667,-137.7405"/>
+<polygon fill="#000000" stroke="#000000" points="670.5001,-137.3722 667,-127.3722 663.5001,-137.3723 670.5001,-137.3722"/>
+<text text-anchor="middle" x="680" y="-148.8" font-family="Courier,monospace" font-size="14.00" fill="#000000">&quot;.&quot;</text>
+</g>
+<!-- 5R0 -->
+<g id="node11" class="node">
+<title>5R0</title>
+<polygon fill="#a6cee3" stroke="#000000" points="299,-36 260.2905,-18 299,0 337.7095,-18 299,-36"/>
+<text text-anchor="middle" x="299" y="-14.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">Acc</text>
+</g>
+<!-- 5&#45;&gt;5R0 -->
+<g id="edge10" class="edge">
+<title>5&#45;&gt;5R0</title>
+<path fill="none" stroke="#000000" d="M299,-72.6952C299,-64.3091 299,-55.0593 299,-46.5897"/>
+<polygon fill="#000000" stroke="#000000" points="302.5001,-46.4024 299,-36.4024 295.5001,-46.4024 302.5001,-46.4024"/>
+</g>
+<!-- 6R1 -->
+<g id="node12" class="node">
+<title>6R1</title>
+<polygon fill="#b2df8a" stroke="#000000" points="498,-36 467.8347,-18 498,0 528.1653,-18 498,-36"/>
+<text text-anchor="middle" x="498" y="-14.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R1</text>
+</g>
+<!-- 6&#45;&gt;6R1 -->
+<g id="edge11" class="edge">
+<title>6&#45;&gt;6R1</title>
+<path fill="none" stroke="#000000" d="M498,-72.6952C498,-64.3091 498,-55.0593 498,-46.5897"/>
+<polygon fill="#000000" stroke="#000000" points="501.5001,-46.4024 498,-36.4024 494.5001,-46.4024 501.5001,-46.4024"/>
+</g>
+<!-- 7R2 -->
+<g id="node13" class="node">
+<title>7R2</title>
+<polygon fill="#b2df8a" stroke="#000000" points="667,-36 636.8347,-18 667,0 697.1653,-18 667,-36"/>
+<text text-anchor="middle" x="667" y="-14.3" font-family="Courier,monospace" font-size="14.00" fill="#000000">R2</text>
+</g>
+<!-- 7&#45;&gt;7R2 -->
+<g id="edge12" class="edge">
+<title>7&#45;&gt;7R2</title>
+<path fill="none" stroke="#000000" d="M667,-72.6952C667,-64.3091 667,-55.0593 667,-46.5897"/>
+<polygon fill="#000000" stroke="#000000" points="670.5001,-46.4024 667,-36.4024 663.5001,-46.4024 670.5001,-46.4024"/>
+</g>
+</g>
+</svg>
diff --git a/doc/figs/example.txt b/doc/figs/example.txt
new file mode 100644
index 0000000..2fc21ff
--- /dev/null
+++ b/doc/figs/example.txt
@@ -0,0 +1,2 @@
+This file is a stub, not used by the documentation.  If you feel like
+contributing ASCII art for example.gv, please step forward!
diff --git a/doc/figs/example.y b/doc/figs/example.y
deleted file mode 100644
index d084081..0000000
--- a/doc/figs/example.y
+++ /dev/null
@@ -1,4 +0,0 @@
-%%
-exp: a ";" | b ".";
-a: "0";
-b: "0";
diff --git a/doc/gpl-3.0.texi b/doc/gpl-3.0.texi
index 0e2e212..c007dc0 100644
--- a/doc/gpl-3.0.texi
+++ b/doc/gpl-3.0.texi
@@ -5,7 +5,7 @@
 @c hence no sectioning command or @node.
 
 @display
-Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/}
 
 Everyone is permitted to copy and distribute verbatim copies of this
 license document, but changing it is not allowed.
@@ -684,7 +684,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, see @url{http://www.gnu.org/licenses/}.
+along with this program.  If not, see @url{https://www.gnu.org/licenses/}.
 @end smallexample
 
 Also add information on how to contact you by electronic and paper mail.
@@ -707,11 +707,11 @@
 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/}.
+@url{https://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}.
+first, please read @url{https://www.gnu.org/licenses/why-not-lgpl.html}.
diff --git a/doc/local.mk b/doc/local.mk
new file mode 100644
index 0000000..cfd41ac
--- /dev/null
+++ b/doc/local.mk
@@ -0,0 +1,212 @@
+## Copyright (C) 2001-2003, 2005-2015, 2018-2019 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/>.
+
+AM_MAKEINFOFLAGS =                                              \
+  --no-split                                                    \
+  --set-customization-variable=SECTION_NAME_IN_TITLE=true       \
+  --set-customization-variable=AVOID_MENU_REDUNDANCY=true       \
+  --set-customization-variable=ICONS=true
+
+info_TEXINFOS = doc/bison.texi
+doc_bison_TEXINFOS =                            \
+  $(CROSS_OPTIONS_TEXI)                         \
+  doc/fdl.texi                                  \
+  doc/gpl-3.0.texi                              \
+  doc/relocatable.texi
+
+# Cannot express dependencies directly on file names because of Automake.
+# Obfuscate with a variable.
+doc_bison = doc/bison
+$(doc_bison).dvi: $(FIGS_GV:.gv=.eps)
+$(doc_bison).info: $(FIGS_GV:.gv=.txt)
+$(doc_bison).pdf: $(FIGS_GV:.gv=.pdf)
+$(doc_bison).html: $(FIGS_GV:.gv=.svg)
+
+TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc
+CLEANDIRS += doc/bison.t2d
+
+MOSTLYCLEANFILES += $(top_srcdir)/doc/*.tmp
+
+CROSS_OPTIONS_PL = $(top_srcdir)/build-aux/cross-options.pl
+CROSS_OPTIONS_TEXI = $(top_srcdir)/doc/cross-options.texi
+$(CROSS_OPTIONS_TEXI): doc/bison.help $(CROSS_OPTIONS_PL)
+# Create $@~ which is the previous contents.  Don't use 'mv' here so
+# that even if we are interrupted, the file is still available for
+# diff in the next run.  Note that $@ might not exist yet.
+	$(AM_V_GEN){ test ! -f $@ || cat $@; } >$@~
+	$(AM_V_at)test ! -f $@.tmp || rm -f $@.tmp
+	$(AM_V_at)$(PERL) $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l \
+	  <$(top_srcdir)/doc/bison.help >$@.tmp
+	$(AM_V_at)diff -u $@~ $@.tmp || true
+	$(AM_V_at)mv $@.tmp $@
+MAINTAINERCLEANFILES = $(CROSS_OPTIONS_TEXI)
+
+
+# Fix Info's @code in @deftype
+# https://lists.gnu.org/archive/html/help-texinfo/2019-11/msg00004.html
+all: $(srcdir)/$(doc_bison).info.bak
+$(srcdir)/$(doc_bison).info.bak: $(srcdir)/$(doc_bison).info
+	$(AM_V_GEN) $(PERL) -pi.bak -0777	\
+	  -e 's{(^ --.*\n(?: {10}.*\n)*)}'	\
+	  -e '{'				\
+	  -e '  $$def = $$1;'			\
+	  -e '  $$def =~ s/‘|’//g;'		\
+	  -e '  $$def;'				\
+	  -e '}gem;' $(srcdir)/$(doc_bison).info
+	@ touch $@
+EXTRA_DIST += $(srcdir)/$(doc_bison).info.bak
+MAINTAINERCLEANFILES += $(srcdir)/$(doc_bison).info.bak
+
+
+## ---------- ##
+## Ref card.  ##
+## ---------- ##
+
+EXTRA_DIST += doc/refcard.tex
+CLEANFILES += doc/refcard.pdf
+
+doc/refcard.pdf: doc/refcard.tex
+	$(AM_V_GEN) cd doc && pdftex $(abs_top_srcdir)/doc/refcard.tex
+
+
+
+## ---------------- ##
+## doc/bison.help.  ##
+## ---------------- ##
+
+# Some of our targets (cross-options.texi, bison.1) use "bison --help".
+# Since we want to ship the generated file to avoid additional
+# requirements over the user environment, we used to not depend on
+# src/bison itself, but on src/getargs.c and other files.  Yet, we
+# need "bison --help" to work to make help2man happy, so we used to
+# include "make src/bison" in the commands.  Then we may have a
+# problem with concurrent builds, since one make might be aiming one
+# of its jobs at compiling src/bison, and another job at generating
+# the man page.  If the latter is faster than the former, then we have
+# two makes that concurrently try to compile src/bison.  Doomed to
+# failure.
+#
+# As a simple scheme to get our way out, make a stamp file,
+# bison.help, which contains --version then --help.  This file can
+# depend on bison, which ensures its correctness.  But update it
+# *only* if needed (content changes).  This way, we avoid useless
+# compilations of cross-options.texi and bison.1.  At the cost of
+# repeated builds of bison.help.
+
+EXTRA_DIST += $(top_srcdir)/doc/bison.help
+if ! CROSS_COMPILING
+MAINTAINERCLEANFILES += $(top_srcdir)/doc/bison.help
+$(top_srcdir)/doc/bison.help: src/bison$(EXEEXT)
+	$(AM_V_GEN)LC_ALL=C tests/bison --version >doc/bison.help.tmp
+	$(AM_V_at) LC_ALL=C tests/bison --help | \
+## Avoid depending on the path to Bison.
+	  sed -e 's,^Usage: .*/bison \[OPTION\],Usage: bison [OPTION],g' \
+## Avoid variations in the output depending on whether we are
+## on a glibc system.
+	      -e '/translation bugs/d'  >>doc/bison.help.tmp
+	$(AM_V_at)$(top_srcdir)/build-aux/move-if-change doc/bison.help.tmp $@
+endif ! CROSS_COMPILING
+
+
+## ----------- ##
+## Man Pages.  ##
+## ----------- ##
+
+dist_man_MANS = $(top_srcdir)/doc/bison.1
+
+EXTRA_DIST += $(dist_man_MANS:.1=.x)
+MAINTAINERCLEANFILES += $(dist_man_MANS)
+
+# Differences to ignore when comparing the man page (the date).
+remove_time_stamp = \
+  sed 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+
+# Depend on configure to get version number changes.
+if ! CROSS_COMPILING
+MAN_DEPS = doc/bison.help doc/bison.x $(top_srcdir)/configure
+endif
+
+$(top_srcdir)/doc/bison.1: $(MAN_DEPS)
+	$(AM_V_GEN)$(HELP2MAN)			\
+	    --include=$(top_srcdir)/doc/bison.x	\
+	    --output=$@.tmp tests/bison
+	$(AM_V_at)if $(remove_time_stamp) $@ >$@a.tmp 2>/dev/null &&		\
+	   $(remove_time_stamp) $@.tmp | cmp $@a.tmp - >/dev/null 2>&1; then	\
+	  touch $@;								\
+	else									\
+	  mv $@.tmp $@;								\
+	fi
+	$(AM_V_at)rm -f $@*.tmp
+
+if ENABLE_YACC
+nodist_man_MANS = doc/yacc.1
+endif
+
+## ----------------------------- ##
+## Graphviz examples generation. ##
+## ----------------------------- ##
+
+CLEANFILES += $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
+FIGS_GV =                                               \
+  doc/figs/example.gv                                   \
+  doc/figs/example-reduce.gv doc/figs/example-shift.gv
+EXTRA_DIST +=                                                   \
+  $(FIGS_GV) $(FIGS_GV:.gv=.txt)                                \
+  $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
+SUFFIXES += .gv .eps .pdf .svg
+
+.gv.eps:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Teps $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.gv.pdf:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+.gv.svg:
+	$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
+	$(AM_V_at) $(DOT) -Gmargin=0 -Tsvg $< >$@.tmp
+	$(AM_V_at) mv $@.tmp $@
+
+## -------------- ##
+## Doxygenation.  ##
+## -------------- ##
+
+DOXYGEN = doxygen
+
+.PHONY: doc html
+
+doc: html
+
+html-local: doc/Doxyfile
+	$(AM_V_GEN) $(DOXYGEN) doc/Doxyfile
+
+edit = sed -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
+	   -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
+	   -e 's,@PERL\@,$(PERL),g' \
+	   -e 's,@top_builddir\@,$(top_builddir),g' \
+	   -e 's,@top_srcdir\@,$(top_srcdir),g'
+
+EXTRA_DIST += doc/Doxyfile.in
+CLEANFILES += doc/Doxyfile
+# Sed is used to generate Doxyfile from Doxyfile.in instead of
+# configure, because the former is way faster than the latter.
+doc/Doxyfile: $(top_srcdir)/doc/Doxyfile.in
+	$(AM_V_GEN) $(edit) $(top_srcdir)/doc/Doxyfile.in >doc/Doxyfile
+
+CLEANDIRS += doc/html
diff --git a/doc/refcard.tex b/doc/refcard.tex
index caabf7e..b2bcefb 100644
--- a/doc/refcard.tex
+++ b/doc/refcard.tex
@@ -19,7 +19,8 @@
 \def\finalout{\overfullrule=0pt}
 %\finalout
 
-% Copyright (c) 1998, 2001, 2009-2012 Free Software Foundation, Inc.
+% Copyright (c) 1998, 2001, 2009-2015, 2018-2019 Free Software
+% Foundation, Inc.
 %
 % This file is part of Bison.
 %
@@ -357,7 +358,7 @@
 
 In the above, {\it t} is a {\it type} defined in the {\tt \%union}
 definition,  {\it n} is a {\it terminal} symbol name, {\it m} is a
-{\it non-terminal} symbol name, and {\it association} can be one of
+{\it nonterminal} symbol name, and {\it association} can be one of
 {\tt \%left}, {\tt \%right}, or {\tt \%nonassoc}.
 
 \vskip .10truein
@@ -400,16 +401,16 @@
 
 \vskip -\baselineskip
 \beginexample
-     non-terminal : {\it statement} 1
-                  | {\it statement} 2
-                      \vdots
-                  | {\it statement n}
-                  ;
+     nonterminal : {\it statement} 1
+                 | {\it statement} 2
+                     \vdots
+                 | {\it statement n}
+                 ;
 \endexample
 
 Where {\it statements} can be either empty, or contain
 a mixture of C code (enclosed in {\tt \{...\}}), and the
-symbols that make up the non-terminal. For example:
+symbols that make up the nonterminal. For example:
 
 \vskip -\baselineskip
 \beginexample
diff --git a/doc/relocatable.texi b/doc/relocatable.texi
new file mode 100644
index 0000000..fca0ea5
--- /dev/null
+++ b/doc/relocatable.texi
@@ -0,0 +1,62 @@
+@node Enabling Relocatability
+@section Enabling Relocatability
+
+It has been a pain for many users of GNU packages for a long time that
+packages are not relocatable.  It means a user cannot copy a program,
+installed by another user on the same machine, to his home directory,
+and have it work correctly (including i18n).  So many users need to go
+through @code{configure; make; make install} with all its
+dependencies, options, and hurdles.
+
+Red Hat, Debian, and similar package systems solve the ``ease of
+installation'' problem, but they hardwire path names, usually to
+@file{/usr} or @file{/usr/local}.  This means that users need root
+privileges to install a binary package, and prevents installing two
+different versions of the same binary package.
+
+A relocatable program can be moved or copied to a different location
+on the file system.  It is possible to make symlinks to the installed
+and moved programs, and invoke them through the symlink. It is
+possible to do the same thing with a hard link @emph{only} if the hard
+link file is in the same directory as the real program.
+
+To configure a program to be relocatable, add
+@option{--enable-relocatable} to the @command{configure} command line.
+
+On some OSes the executables remember the location of shared libraries
+and prefer them over any other search path.  Therefore, such an
+executable will look for its shared libraries first in the original
+installation directory and only then in the current installation
+directory.  Thus, for reliability, it is best to also give a
+@option{--prefix} option pointing to a directory that does not exist
+now and which never will be created, e.g.@:
+@option{--prefix=/nonexistent}.  You may use
+@code{DESTDIR=@var{dest-dir}} on the @command{make} command line to
+avoid installing into that directory.
+
+We do not recommend using a prefix writable by unprivileged users
+(e.g.@: @file{/tmp/inst$$}) because such a directory can be recreated
+by an unprivileged user after the original directory has been removed.
+We also do not recommend prefixes that might be behind an automounter
+(e.g.@: @file{$HOME/inst$$}) because of the performance impact of
+directory searching.
+
+Here's a sample installation run that takes into account all these
+recommendations:
+
+@example
+./configure --enable-relocatable --prefix=/nonexistent
+make
+make install DESTDIR=/tmp/inst$$
+@end example
+
+Installation with @option{--enable-relocatable} will not work for
+setuid or setgid executables, because such executables search only
+system library paths for security reasons.  Also, installation with
+@option{--enable-relocatable} might not work on OpenBSD, when the
+package contains shared libraries and libtool versions 1.5.xx are used.
+
+The runtime penalty and size penalty are negligible on GNU/Linux (just
+one system call more when an executable is launched), and small on
+other systems (the wrapper program just sets an environment variable
+and executes the real program).
diff --git a/doc/stamp-vti b/doc/stamp-vti
index 545bc9f..7db56a3 100644
--- a/doc/stamp-vti
+++ b/doc/stamp-vti
@@ -1,4 +1,4 @@
-@set UPDATED 9 December 2012
-@set UPDATED-MONTH December 2012
-@set EDITION 2.7
-@set VERSION 2.7
+@set UPDATED 7 December 2019
+@set UPDATED-MONTH December 2019
+@set EDITION 3.5
+@set VERSION 3.5
diff --git a/doc/version.texi b/doc/version.texi
index 545bc9f..7db56a3 100644
--- a/doc/version.texi
+++ b/doc/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED 9 December 2012
-@set UPDATED-MONTH December 2012
-@set EDITION 2.7
-@set VERSION 2.7
+@set UPDATED 7 December 2019
+@set UPDATED-MONTH December 2019
+@set EDITION 3.5
+@set VERSION 3.5
diff --git a/etc/Makefile.in b/etc/Makefile.in
deleted file mode 100644
index bb4c619..0000000
--- a/etc/Makefile.in
+++ /dev/null
@@ -1,1526 +0,0 @@
-# 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
deleted file mode 100644
index e4f2abc..0000000
--- a/etc/README
+++ /dev/null
@@ -1,38 +0,0 @@
-* 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
index 4d480d5..4a239d2 100755
--- a/etc/bench.pl.in
+++ b/etc/bench.pl.in
@@ -1,6 +1,7 @@
 #! /usr/bin/perl -w
 
-# Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008-2015, 2018-2019 Free Software Foundation,
+# Inc.
 #
 # This file is part of Bison, the GNU Compiler Compiler.
 #
@@ -17,23 +18,236 @@
 # 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);
+=head1 NAME
 
-my $bison = $ENV{'BISON'} || '@abs_top_builddir@/tests/bison';
-my $cc = $ENV{'CC'} || 'gcc';
+bench.pl - bench marks for Bison parsers.
+
+=head1 SYNOPSIS
+
+  ./bench.pl [OPTIONS]... DIRECTIVES
+
+=head1 DIRECTIVES
+
+Specify the set of benches to run.  The following grammar defines the
+I<directives>:
+
+   directives ::=
+       directives | directives  -- Alternation
+     | directives & directives  -- Concatenation
+     | [ directives> ]          -- Optional
+     | ( directives> )          -- Parentheses
+     | %b PATH                  -- Use bison at PATH for this bench
+     | #d NAME[=VALUE]          -- %code { #define NAME [VALUE] }
+     | %d NAME[=VALUE]          -- %define NAME ["VALUE"]
+     | %s skeleton              -- %skeleton "skeleton"
+     | directive
+
+Parentheses only group to override precedence.  For instance:
+
+  [ %debug ] & [ %error-verbose ] & [ %define variant ]
+
+will generate eight different cases.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-b>, B<--bench>
+
+Predefined benches, that is, combination between a grammar and a I<directives>
+request.
+
+=over 4
+
+=item I<push>
+
+Test the push parser vs. the pull interface.  Use the C parser.
+
+=item I<variant>
+
+Test the use of variants instead of union in the C++ parser.
+
+=back
+
+=item B<-c>, B<--cflags>=I<flags>
+
+Flags to pass to the C or C++ compiler.  Defaults to -O2.
+
+=item B<-d>, B<--directive>=I<directives>
+
+Add a set of Bison directives to bench against each other.
+
+=item B<-g>, B<--grammar>=I<grammar>
+
+Select the base I<grammar> to use.  Defaults to I<calc>.
+
+=over 4
+
+=item I<calc>
+
+Traditional calculator.
+
+=item I<list>
+
+C++ grammar that uses std::string and std::list.  Can be used with
+or without %define variant.
+
+=item I<triangular>
+
+Artificial grammar with very long rules.
+
+=back
+
+=item B<-h>, B<--help>
+
+Display this message and exit succesfully.  The more verbose, the more
+details.
+
+=item B<-i>, B<--iterations>=I<integer>
+
+Say how many times a single test of the bench must be run.  If
+negative, specify the minimum number of CPU seconds to run.  Defaults
+to -1.
+
+=item B<-q>, B<--quiet>
+
+Decrease the verbosity level (defaults to 1).
+
+=item B<-v>, B<--verbose>
+
+Raise the verbosity level (defaults to 1).
+
+=back
+
+=cut
+
+use strict;
+use IO::File;
 
 ##################################################################
 
-sub triangular_grammar ($$$)
+=head1 VARIABLES
+
+=over 4
+
+=item C<@bench>
+
+The list of benches to run.
+
+=item C<$bison>
+
+The Bison program to use to compile the grammar.
+
+=item C<$cc>
+
+The C compiler.
+
+=item C<$cxx>
+
+The C++ compiler.
+
+=item C<$cflags>
+
+Compiler flags (C or C++).
+
+=item C<@directive>
+
+A list of directive sets to measure against each other.
+
+=item C<$iterations>
+
+The number of times the parser is run for a bench.
+
+=item C<$verbose>
+
+Verbosity level.
+
+=back
+
+=cut
+
+my $bench;
+my $bison = $ENV{'BISON'} || '@abs_top_builddir@/tests/bison';
+my $cc = $ENV{'CC'} || 'gcc';
+my $cxx = $ENV{'CXX'} || 'g++';
+my $cflags = '-O2';
+my @directive = ();
+my $grammar = 'calc';
+my $iterations = -1;
+my $verbose = 1;
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<verbose($level, $message)>
+
+Report the C<$message> is C<$level> E<lt>= C<$verbose>.
+
+=cut
+
+sub verbose($$)
 {
-  my ($base, $max, $directives) = @_;
+  my ($level, $message) = @_;
+  print STDERR $message
+    if $level <= $verbose;
+}
+
+
+######################################################################
+
+=item C<directives($bench, @directive)>
+
+Format the list of directives for Bison for bench named C<$bench>.
+
+=cut
+
+sub directives($@)
+{
+  my ($bench, @directive) = @_;
+  my $res = "/* Directives for bench '$bench'. */\n";
+  $res .= join ("\n", @directive) . "\n";
+  $res .= "/* End of directives for bench '$bench'. */\n";
+  return $res;
+}
+
+######################################################################
+
+=item C<generate_grammar_triangular ($base, $max, @directive)>
+
+Create a large triangular grammar which looks like :
+
+  input:
+    exp        { if ($1 != 0) abort (); $$ = $1; }
+  | input exp  { if ($2 != $1 + 1) abort (); $$ = $2; }
+  ;
+
+  exp:
+    END                         { $$ = 0; }
+  | "1"  END                    { $$ = 1; }
+  | "1" "2"  END                { $$ = 2; }
+  | "1" "2" "3"  END            { $$ = 3; }
+  | "1" "2" "3" "4"  END        { $$ = 4; }
+  | "1" "2" "3" "4" "5"  END    { $$ = 5; }
+  ;
+
+C<$base> is the base name for the file to create (F<$base.y>).
+C<$max> is the number of such rules (here, 5).  You may pass
+additional Bison C<@directive>.
+
+The created parser is self contained: it includes its scanner, and
+source of input.
+=cut
+
+sub generate_grammar_triangular ($$@)
+{
+  my ($base, $max, @directive) = @_;
+  my $directives = directives ($base, @directive);
 
   my $out = new IO::File ">$base.y"
     or die;
   print $out <<EOF;
 %error-verbose
-%debug
 %{
 #include <stdio.h>
 #include <stdlib.h>
@@ -41,6 +255,7 @@
 static int yylex (void);
 static void yyerror (const char *msg);
 %}
+$directives
 %union
 {
   int val;
@@ -71,8 +286,8 @@
   {
     use Text::Wrap;
     print $out wrap ("| ", "   ",
-		     (map { "\"$_\"" } (1 .. $size)),
-		     " END \n"),
+                     (map { "\"$_\"" } (1 .. $size)),
+                     " END \n"),
                "    { \$\$ = $size; }\n";
   };
 print $out ";\n";
@@ -104,7 +319,9 @@
 int
 main (void)
 {
+#if YYDEBUG
   yydebug = !!getenv ("YYDEBUG");
+#endif
   return yyparse ();
 }
 EOF
@@ -112,6 +329,15 @@
 
 ##################################################################
 
+=item C<calc_input ($base, $max)>
+
+Generate the input file F<$base.input> for the calc parser.  The input
+is composed of two expressions.  The first one is using left recursion
+only and consumes no stack.  The second one requires a deep stack.
+These two expressions are repeated C<$max> times in the output file.
+
+=cut
+
 sub calc_input ($$)
 {
   my ($base, $max) = @_;
@@ -126,9 +352,22 @@
 
 ##################################################################
 
-sub calc_grammar ($$$)
+=item C<generate_grammar_calc ($base, $max, @directive)>
+
+Generate a Bison file F<$base.y> for a calculator parser in C.  Pass
+the additional Bison C<@directive>.  C<$max> is ignored, but left to
+have the same interface as C<triangular_grammar>.
+
+=cut
+
+sub generate_grammar_calc ($$@)
 {
-  my ($base, $max, $directives) = @_;
+  my ($base, $max, @directive) = @_;
+  my $directives = directives ($base, @directive);
+
+  # Putting this request here is stupid, since the input will be
+  # generated each time we generate a grammar.
+  calc_input ('calc', 200);
 
   my $out = new IO::File ">$base.y"
     or die;
@@ -148,9 +387,9 @@
 static int global_count = 0;
 %}
 
-/* Exercise %union. */
 $directives
 %error-verbose
+/* Exercise %union. */
 %union
 {
   semantic_value ival;
@@ -174,7 +413,7 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '=' /* comparison	       */
+%nonassoc '=' /* comparison            */
 %left '-' '+'
 %left '*' '/'
 %left NEG     /* negation--unary minus */
@@ -306,6 +545,10 @@
   int count = 0;
   int status;
 
+#if YYDEBUG
+  yydebug = !!getenv ("YYDEBUG");
+#endif
+
   input = fopen ("calc.input", "r");
   if (!input)
     {
@@ -326,44 +569,567 @@
 
 ##################################################################
 
+=item C<generate_grammar_list ($base, $max, @directive)>
+
+Generate a Bison file F<$base.y> for a C++ parser that uses C++
+objects (std::string, std::list).  Tailored for using %define variant.
+
+=cut
+
+sub generate_grammar_list ($$@)
+{
+  my ($base, $max, @directive) = @_;
+  my $directives = directives ($base, @directive);
+  my $variant = grep { /%define "?variant"?/ } @directive;
+  my $token_ctor = grep { /%define "?api.token.constructor"?/ } @directive;
+  my $out = new IO::File ">$base.y"
+    or die;
+  print $out <<EOF;
+%language "C++"
+%defines
+%locations
+$directives
+
+%code requires // *.h
+{
+#include <string>
+}
+
+%code // *.c
+{
+#include <algorithm>
+#include <iostream>
+#include <sstream>
+
+#define STAGE_MAX    ($max * 10) // max = $max
+
+#define USE_TOKEN_CTOR $token_ctor
+#define USE_VARIANTS $variant
+
+  // Prototype of the yylex function providing subsequent tokens.
+  static
+#if USE_TOKEN_CTOR
+  yy::parser::symbol_type yylex();
+#else
+  yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp,
+                               yy::parser::location_type* yyllocp);
+#endif
+
+  // Conversion to string.
+  template <typename T>
+    inline
+    std::string
+    string_cast (const T& t)
+  {
+    std::ostringstream o;
+    o << t;
+    return o.str ();
+  }
+}
+
+%token END_OF_FILE 0
+EOF
+
+  if ($variant)
+    {
+      print $out <<'EOF';
+%token <std::string> TEXT
+%token <int> NUMBER
+%printer { std::cerr << "Number: " << $$; } <int>
+%printer { std::cerr << "Text: " << $$; } <std::string>
+%type <std::string> text result
+
+%%
+result:
+  text                  { /* Throw away the result. */ }
+;
+
+text:
+  /* nothing */         { /* This will generate an empty string */ }
+| text TEXT             { std::swap ($$, $2); }
+| text NUMBER           { $$ = string_cast($2); }
+;
+EOF
+    }
+  else
+    {
+      # Not using Bison variants.
+      print $out <<'EOF';
+%union {int ival; std::string* sval;}
+%token <sval> TEXT
+%token <ival> NUMBER
+%printer { std::cerr << "Number: " << $$; } <ival>
+%printer { std::cerr << "Text: " << *$$; } <sval>
+%type <sval> text result
+
+%%
+result:
+  text                  { delete $1; }
+;
+
+text:
+  /* nothing */         { $$ = new std::string; }
+| text TEXT             { delete $1; $$ = $2; }
+| text NUMBER           { delete $1; $$ = new std::string (string_cast ($2)); }
+;
+EOF
+    }
+
+  print $out <<'EOF';
+%%
+#
+
+static
+#if USE_TOKEN_CTOR
+yy::parser::symbol_type yylex()
+#else
+yy::parser::token_type yylex(yy::parser::semantic_type* yylvalp,
+                             yy::parser::location_type* yyllocp)
+#endif
+{
+  typedef yy::parser::location_type location_type;
+  typedef yy::parser::token token;
+  static int stage = -1;
+  ++stage;
+  if (stage == STAGE_MAX)
+    {
+#if USE_TOKEN_CTOR
+      return yy::parser::make_END_OF_FILE (location_type ());
+#else
+      *yyllocp = location_type ();
+      return token::END_OF_FILE;
+#endif
+    }
+  else if (stage % 2)
+    {
+#if USE_TOKEN_CTOR
+      return yy::parser::make_NUMBER (stage, location_type ());
+#else
+# if defined ONE_STAGE_BUILD
+      yylvalp->build(stage);
+# elif USE_VARIANTS
+      yylvalp->build<int>() = stage;
+# else
+      yylvalp->ival = stage;
+# endif
+      *yyllocp = location_type ();
+      return token::NUMBER;
+#endif
+    }
+  else
+    {
+#if USE_TOKEN_CTOR
+      return yy::parser::make_TEXT ("A string.", location_type ());
+#else
+# if defined ONE_STAGE_BUILD
+      yylvalp->build(std::string("A string."));
+# elif USE_VARIANTS
+      yylvalp->build<std::string>() = std::string("A string.");
+# else
+      yylvalp->sval = new std::string("A string.");
+# endif
+      *yyllocp = location_type ();
+      return token::TEXT;
+#endif
+    }
+  abort();
+}
+
+// Mandatory error function
+void
+yy::parser::error(const yy::parser::location_type& loc, const std::string& msg)
+{
+  std::cerr << loc << ": " << msg << '\n';
+}
+
+int main(int argc, char *argv[])
+{
+  yy::parser p;
+#if YYDEBUG
+  p.set_debug_level(!!getenv("YYDEBUG"));
+#endif
+  p.parse();
+  return 0;
+}
+EOF
+}
+
+##################################################################
+
+=item C<generate_grammar ($name, $base, @directive)>
+
+Generate F<$base.y> by calling C<&generate_grammar_$name>.
+
+=cut
+
+sub generate_grammar ($$@)
+{
+  my ($name, $base, @directive) = @_;
+  verbose 3, "Generating $base.y\n";
+  my %generator =
+    (
+      "calc"       => \&generate_grammar_calc,
+      "list"       => \&generate_grammar_list,
+      "triangular" => \&generate_grammar_triangular,
+    );
+  &{$generator{$name}}($base, 200, @directive);
+}
+
+##################################################################
+
+=item C<run ($command)>
+
+Run, possibly verbosely, the shell C<$command>.
+
+=cut
+
+sub run ($)
+{
+  my ($command) = @_;
+  verbose 3, "$command\n";
+  system ("$command") == 0
+    or die "$command failed";
+}
+
+##################################################################
+
+=item C<compile ($base)>
+
+Compile C<$base.y> to an executable C, Using the C or C++ compiler
+depending on the %language specification in C<$base.y>.
+
+=cut
+
 sub compile ($)
 {
   my ($base) = @_;
-  system ("$bison $base.y -o $base.c") == 0
-    or die;
-  system ("$cc -o $base $base.c") == 0
-    or die;
+  my $language = `sed -ne '/%language "\\(.*\\)"/{s//\\1/;p;q;}' $base.y`;
+  chomp $language;
+
+  my $compiler = $language eq 'C++' ? $cxx : $cc;
+
+  my $my_bison = `sed -ne '/%bison "\\(.*\\)"/{s//\\1/;p;q;}' $base.y`;
+  run ((length $my_bison ? $my_bison : $bison) . " $base.y -o $base.c");
+  run "$compiler -o $base $cflags $base.c";
 }
 
-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',
-    );
+######################################################################
 
+=item C<bench ($grammar, @token)>
+
+Generate benches for the C<$grammar> and the directive specification
+given in the list of C<@token>.
+
+=cut
+
+sub bench ($@)
+{
+  my ($grammar, @token) = @_;
+  use Benchmark qw (:all :hireswallclock);
+
+  my @directive = parse (@token);
+
+  # Set up the benches as expected by timethese.
   my %bench;
-  while (my ($name, $directives) = each %test)
+  # A counter of directive sets.
+  my $count = 1;
+  for my $d (@directive)
     {
-      print STDERR "$name\n";
-      my $generator = "$gram" . "_grammar";
-      &$generator ($name, 200, $directives);
+      $bench{$count} = $d;
+      printf " %2d. %s\n", $count, join (' ', split ("\n", $d));
+      $count++;
+    };
+
+  # For each bench, capture the size.
+  my %size;
+
+  while (my ($name, $directives) = each %bench)
+    {
+      generate_grammar ($grammar, $name, $directives);
+      # Compile the executable.
       compile ($name);
       $bench{$name} = "system ('./$name');";
+      chop($size{$name} = `wc -c <$name`);
     }
 
-  print "$gram:\n";
-  my $res = timethese (50, \%bench, 'nop');
+  # Run the benches.
+  #
+  # STYLE can be any of 'all', 'none', 'noc', 'nop' or 'auto'.  'all'
+  # shows each of the 5 times available ('wallclock' time, user time,
+  # system time, user time of children, and system time of
+  # children). 'noc' shows all except the two children times. 'nop'
+  # shows only wallclock and the two children times.  'auto' (the
+  # default) will act as 'all' unless the children times are both
+  # zero, in which case it acts as 'noc'.  'none' prevents output.
+  verbose 3, "Running the benches for $grammar\n";
+  my $res = timethese ($iterations, \%bench, 'nop');
+
+  # Output the speed result.
   cmpthese ($res, 'nop');
+
+  # Display the sizes.
+  print "Sizes (decreasing):\n";
+  my $width = 10;
+  for my $bench (keys %size)
+    {
+      $width = length $bench
+        if $width < length $bench;
+    }
+  # Benches sorted by decreasing size.
+  my @benches_per_size = sort {$size{$b} <=> $size{$a}} keys %size;
+  for my $bench (@benches_per_size)
+    {
+      printf "%${width}s: %5.2fkB\n", $bench, $size{$bench} / 1024;
+    }
 }
 
-print STDERR "Using $bison, $cc.\n";
-calc_input ('calc', 200);
-bench_grammar ('calc');
+######################################################################
+
+=item C<bench_push_parser ()>
+
+Bench the C push parser against the pull parser, pure and impure
+interfaces.
+
+=cut
+
+sub bench_push_parser ()
+{
+  bench ('calc',
+         qw(
+            [ %d api.pure ]
+            &
+            [ %d api.push-pull=both ]
+         ));
+}
+
+######################################################################
+
+=item C<bench_variant_parser ()>
+
+Bench the C++ lalr1.cc parser using variants or %union.
+
+=cut
+
+sub bench_variant_parser ()
+{
+  bench ('list',
+         qw(
+            [
+              %d variant
+              &
+              [ #d ONE_STAGE_BUILD | %d api.token.constructor ]
+            ]
+         )
+    );
+}
+
+############################################################################
+
+sub help ($)
+{
+  my ($verbose) = @_;
+  use Pod::Usage;
+  # See <URL:http://perldoc.perl.org/pod2man.html#NOTES>.
+  pod2usage( { -message => "Bench Bison parsers",
+               -exitval => 0,
+               -verbose => $verbose,
+               -output  => \*STDOUT });
+}
+
+######################################################################
+
+# The end of the directives to parse.
+my $eod = "end of directives";
+# The list of tokens parsed by the following functions.
+my @token;
+
+# eat ($EXPECTED)
+# ---------------
+# Check that the current token is $EXPECTED, and move to the next.
+sub eat ($)
+{
+  my ($expected) = @_;
+  die "expected $expected, unexpected: $token[0] (@token)\n"
+    unless $token[0] eq $expected;
+  shift @token;
+}
+
+# Parse directive specifications:
+#   expr: term (| term)*
+#   term: fact (& fact)*
+#   fact: ( expr ) | [ expr ] | dirs
+#   dirs: %s SKELETON | #d NAME[=VALUE] | %d NAME[=VALUE] | directive
+sub parse (@)
+{
+  @token = (@_, $eod);
+  verbose 3, "Parsing: @token\n";
+  my @res = parse_expr ();
+  eat ($eod);
+  return @res;
+}
+
+sub parse_expr ()
+{
+  my @res = parse_term ();
+  while ($token[0] eq '|')
+    {
+      eat ('|');
+      # Alternation.
+      push @res, parse_term ();
+    }
+  return @res;
+}
+
+sub parse_term ()
+{
+  my @res = parse_fact ();
+  while ($token[0] eq '&')
+    {
+      eat ('&');
+      # Cartesian product.
+      my @lhs = @res;
+      @res = ();
+      for my $rhs (parse_fact ())
+        {
+          for my $lhs (@lhs)
+            {
+              push @res, $lhs . ($lhs && $rhs ? "\n" : "") . $rhs;
+            }
+        }
+    }
+  return @res;
+}
+
+sub parse_fact ()
+{
+  my @res;
+  die "unexpected end of expression"
+    unless defined $token[0];
+
+  if ($token[0] eq '(')
+    {
+      eat ('(');
+      @res = parse_expr ();
+      eat (')');
+    }
+  elsif ($token[0] eq '[')
+    {
+      eat ('[');
+      @res = (parse_expr (), '');
+      eat (']');
+    }
+  else
+    {
+      @res = parse_dirs ();
+    }
+  return @res;
+}
+
+sub parse_dirs ()
+{
+  my @res;
+  die "unexpected end of expression"
+    unless defined $token[0];
+
+  if ($token[0] eq '#d')
+    {
+      eat ('#d');
+      $token[0] =~ s/(.*?)=(.*)/$1 $2/;
+      @res = ("%code {\n#define $token[0]\n}");
+      shift @token;
+    }
+  elsif ($token[0] eq '%d')
+    {
+      shift @token;
+      $token[0] =~ s/(.*?)=(.*)/$1 "$2"/;
+      @res = ("%define $token[0]");
+      shift @token;
+    }
+  elsif ($token[0] eq '%s')
+    {
+      shift @token;
+      @res = ("%skeleton \"$token[0]\"");
+      shift @token;
+    }
+  elsif ($token[0] eq '%b')
+    {
+      shift @token;
+      @res = ("/*\n%bison \"$token[0]\"\\\n*/");
+      shift @token;
+    }
+  else
+    {
+      @res = $token[0];
+      shift @token;
+    }
+
+  return @res;
+}
+
+######################################################################
+
+sub getopt ()
+{
+  use Getopt::Long;
+  my %option = (
+    "b|bench=s"      => \$bench,
+    "c|cflags=s"     => \$cflags,
+    "d|directive=s"  => \@directive,
+    "g|grammar=s"    => \$grammar,
+    "h|help"         => sub { help ($verbose) },
+    "i|iterations=i" => \$iterations,
+    "q|quiet"        => sub { --$verbose },
+    "v|verbose"      => sub { ++$verbose },
+    );
+  Getopt::Long::Configure ("bundling", "pass_through");
+  GetOptions (%option)
+    or exit 1;
+}
+
+######################################################################
+
+getopt;
+
+# Create the directory we work in.
+mkdir "benches" or die "cannot create benches"
+  unless -d "benches";
+my $count = 1;
+++$count
+  while -d "benches/$count";
+my $dir = "benches/$count";
+mkdir $dir
+  or die "cannot create $dir";
+chdir $dir
+  or die "cannot chdir $dir";
+
+# The following message is tailored to please Emacs' compilation-mode.
+verbose 1, "Entering directory `$dir'\n";
+verbose 1, "Using bison=$bison.\n";
+verbose 2, "Using cc=$cc.\n";
+verbose 2, "Using cxx=$cxx.\n";
+verbose 2, "Using cflags=$cflags.\n";
+verbose 2, "Grammar: $grammar\n";
+
+
+# Support -b: predefined benches.
+my %bench =
+  (
+   "push"     => \&bench_push_parser,
+   "variant"  => \&bench_variant_parser,
+  );
+
+if (defined $bench)
+{
+  die "invalid argument for --bench: $bench"
+    unless defined $bench{$bench};
+  &{$bench{$bench}}();
+  exit 0;
+}
+else
+{
+  # Launch the bench marking.
+  bench ($grammar, @ARGV);
+}
 
 ### Setup "GNU" style for perl-mode and cperl-mode.
 ## Local Variables:
diff --git a/etc/local.mk b/etc/local.mk
new file mode 100644
index 0000000..0dff151
--- /dev/null
+++ b/etc/local.mk
@@ -0,0 +1,17 @@
+## Copyright (C) 2006, 2008-2015, 2018-2019 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 = etc/bench.pl
diff --git a/examples/Makefile.in b/examples/Makefile.in
deleted file mode 100644
index 5070673..0000000
--- a/examples/Makefile.in
+++ /dev/null
@@ -1,1714 +0,0 @@
-# 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 = 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/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 =
-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-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@
-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_CXX_WORKS_TRUE@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 ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	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 \
-	  *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):
-
-# 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) $(RECURSIVE_CLEAN_TARGETS):
-	@fail= 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//`; \
-	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; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(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"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  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)
-	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: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	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 || \
-	      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; 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: ctags-recursive $(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: 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)'; \
-	  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
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(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="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        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:
-	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-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
-
-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
-	-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:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.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.
-.NOEXPORT:
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 0000000..13b5d5a
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,28 @@
+This directory contains examples of Bison grammar files, sorted per
+language.
+
+Several of them come from the documentation, which should be installed
+together with Bison.  The URLs are provided for convenience.
+
+These examples come with a README and a Makefile.  Not only can they be used
+to toy with Bison, they can also be starting points for your own grammars.
+
+Please, be sure to read the C examples before looking at the other
+languages, as these examples are simpler.
+
+<!---
+
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+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 no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
+--->
diff --git a/examples/c++/Makefile b/examples/c++/Makefile
new file mode 100644
index 0000000..47e1fb4
--- /dev/null
+++ b/examples/c++/Makefile
@@ -0,0 +1,21 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BISON = bison
+CXX = g++
+CXXFLAGS =
+PROGS = simple variant variant-11
+
+simple: CXXFLAGS = -std=c++14
+variant-11: CXXFLAGS = -std=c++11
+
+all: $(PROGS)
+
+%.cc %.hh: %.yy
+	$(BISON) $(BISONFLAGS) -o $*.cc $<
+
+%: %.cc
+	$(CXX) $(CXXFLAGS) -o$@ $<
+
+clean:
+	rm -f $(PROGS:=.cc) $(PROGS)
diff --git a/examples/c++/README.md b/examples/c++/README.md
new file mode 100644
index 0000000..5b6d14c
--- /dev/null
+++ b/examples/c++/README.md
@@ -0,0 +1,59 @@
+# Examples in C++
+
+This directory contains examples of Bison grammar files in C++.
+
+You can run `make` to compile these examples.  And `make clean` to tidy
+afterwards.
+
+## simple.yy - Simple example in C++14
+A very simple example in C++, based on variants and symbol constructors.
+Variants allow to use any C++ type as semantic value type, and symbol
+constructors ensure consistency between declared token type and effective
+semantic value.
+
+Run as `./simple`.
+
+Extracted from the documentation: "A Simple C++ Example".
+https://www.gnu.org/software/bison/manual/html_node/A-Simple-C_002b_002b-Example.html
+
+## variant.yy - Self-contained example in C++98
+A variation of simple.yy, in C++98.
+
+Run as `./variant`.
+
+## variant-11.yy - Self-contained example in modern C++
+Another variation of simple.yy, closely related to the previous one, but
+exhibiting support for C++11's move semantics.
+
+Run as `./variant` or `./variant NUMBER`.
+
+## calc++ - A Complete C++ Example
+A fully featured C++ version of the canonical example for parsers: a
+calculator.  Also uses Flex for the scanner.
+
+Don't look at this example first: it is fully featured and can serve as a
+starting point for a clean parser in C++.  The previous examples are better
+introductory examples, and the C examples are also useful introductory
+examples.
+
+Extracted from the documentation: "A Complete C++ Example".
+https://www.gnu.org/software/bison/manual/html_node/A-Complete-C_002b_002b-Example.html
+
+<!---
+
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+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 no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
+
+# LocalWords:  mfcalc calc parsers yy ispell american
+--->
diff --git a/examples/c++/calc++/Makefile b/examples/c++/calc++/Makefile
new file mode 100644
index 0000000..a2d83d7
--- /dev/null
+++ b/examples/c++/calc++/Makefile
@@ -0,0 +1,41 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = calc++
+BISON = bison
+CXX = g++
+FLEX = flex
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.cc %.hh %.xml %.gv: %.yy
+	$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.cc $<
+
+%.cc: %.ll
+	$(FLEX) $(FLEXFLAGS) -o$@ $<
+
+%.o: %.cc
+	$(CXX) $(CXXFLAGS) -c -o$@ $<
+
+$(BASE): $(BASE).o driver.o parser.o scanner.o
+	$(CXX) -o $@ $^
+
+$(BASE).o: parser.hh
+parser.o: parser.hh
+scanner.o: parser.hh
+
+run: $(BASE)
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$< -
+
+html: parser.html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+CLEANFILES =										\
+  $(BASE) *.o										\
+  parser.hh parser.cc parser.output parser.xml parser.html parser.gv location.hh	\
+  scanner.cc
+clean:
+	rm -f $(CLEANFILES)
diff --git a/examples/c++/calc++/README.md b/examples/c++/calc++/README.md
new file mode 100644
index 0000000..6dd0b3d
--- /dev/null
+++ b/examples/c++/calc++/README.md
@@ -0,0 +1,57 @@
+# calc++ - A Flex+Bison calculator
+
+This directory contains calc++, a Bison grammar file in C++.  If you never
+saw the traditional implementation in C, please first read
+examples/c/lexcalc, which can be seen as a C precursor of this example.
+
+Read the corresponding chapter in the documentation: "A Complete C++
+Example".  It is also available on line (maybe with a different version of
+Bison):
+https://www.gnu.org/software/bison/manual/html_node/A-Complete-C_002b_002b-Example.html
+
+To use it, copy this directory into some work directory, and run `make` to
+compile the executable, and try it.  It is a simple calculator which accepts
+several variable definitions, one per line, and then a single expression to
+evaluate.
+
+The program calc++ expects the file to parse as argument; pass `-` to read
+the standard input (and then hit <Ctrl-d>, control-d, to end your input).
+
+```
+$ ./calc++ -
+one := 1
+two := 2
+three := 3
+(one + two * three) * two * three
+<Ctrl-d>
+42
+```
+
+You may pass `-p` to activate the parser debug traces, and `-s` to activate
+the scanner's.
+
+<!---
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 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/>.
+
+# LocalWords:  calc parsers yy MERCHANTABILITY Ctrl ispell american
+--->
diff --git a/examples/c++/calc++/calc++.cc b/examples/c++/calc++/calc++.cc
new file mode 100644
index 0000000..446d0cb
--- /dev/null
+++ b/examples/c++/calc++/calc++.cc
@@ -0,0 +1,19 @@
+#include <iostream>
+#include "driver.hh"
+
+int
+main (int argc, char *argv[])
+{
+  int res = 0;
+  driver drv;
+  for (int i = 1; i < argc; ++i)
+    if (argv[i] == std::string ("-p"))
+      drv.trace_parsing = true;
+    else if (argv[i] == std::string ("-s"))
+      drv.trace_scanning = true;
+    else if (!drv.parse (argv[i]))
+      std::cout << drv.result << '\n';
+    else
+      res = 1;
+  return res;
+}
diff --git a/examples/calc++/test b/examples/c++/calc++/calc++.test
similarity index 63%
copy from examples/calc++/test
copy to examples/c++/calc++/calc++.test
index 8f4d419..8c56266 100755
--- a/examples/calc++/test
+++ b/examples/c++/calc++/calc++.test
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# Copyright (C) 2005-2015, 2018-2019 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
@@ -15,10 +15,13 @@
 # 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
+toto := 1
+toto
+EOF
+run 0 1
+run -noerr 0 1 -s
+
 
 cat >input <<EOF
 a := 1
@@ -27,20 +30,29 @@
 d := a + b * c
 d
 EOF
+run 0 7
+run -noerr 0 7 -p
 
-./calc++ input
-./calc++ -p input
+
+cat >input <<EOF
+a := 1
+b := 2
+c := 3
+d := (a + b) * c
+d
+EOF
+run 0 9
+
 
 cat >input <<EOF
 a := 1
 d := a + b * c
 EOF
-./calc++ input
+run 1 'err: -:3.1: syntax error, unexpected end of file, expecting ( or identifier or number'
+
 
 cat >input <<EOF
-toto := 1
-toto
+a := 072101108108111044032119111114108100033
+a
 EOF
-./calc++ -s input
-
-rm input
+run 1 'err: -:1.6-44: integer is out of range: 072101108108111044032119111114108100033'
diff --git a/examples/c++/calc++/driver.cc b/examples/c++/calc++/driver.cc
new file mode 100644
index 0000000..b52913e
--- /dev/null
+++ b/examples/c++/calc++/driver.cc
@@ -0,0 +1,22 @@
+#include "driver.hh"
+#include "parser.hh"
+
+driver::driver ()
+  : trace_parsing (false), trace_scanning (false)
+{
+  variables["one"] = 1;
+  variables["two"] = 2;
+}
+
+int
+driver::parse (const std::string &f)
+{
+  file = f;
+  location.initialize (&file);
+  scan_begin ();
+  yy::parser parse (*this);
+  parse.set_debug_level (trace_parsing);
+  int res = parse ();
+  scan_end ();
+  return res;
+}
diff --git a/examples/c++/calc++/driver.hh b/examples/c++/calc++/driver.hh
new file mode 100644
index 0000000..1cf47f4
--- /dev/null
+++ b/examples/c++/calc++/driver.hh
@@ -0,0 +1,38 @@
+#ifndef DRIVER_HH
+# define DRIVER_HH
+# include <string>
+# include <map>
+# include "parser.hh"
+
+// Give Flex the prototype of yylex we want ...
+# define YY_DECL \
+  yy::parser::symbol_type yylex (driver& drv)
+// ... and declare it for the parser's sake.
+YY_DECL;
+
+// Conducting the whole scanning and parsing of Calc++.
+class driver
+{
+public:
+  driver ();
+
+  std::map<std::string, int> variables;
+
+  int result;
+
+  // Run the parser on file F.  Return 0 on success.
+  int parse (const std::string& f);
+  // The name of the file being parsed.
+  std::string file;
+  // Whether to generate parser debug traces.
+  bool trace_parsing;
+
+  // Handling the scanner.
+  void scan_begin ();
+  void scan_end ();
+  // Whether to generate scanner debug traces.
+  bool trace_scanning;
+  // The token's location used by the scanner.
+  yy::location location;
+};
+#endif // ! DRIVER_HH
diff --git a/examples/c++/calc++/local.mk b/examples/c++/calc++/local.mk
new file mode 100644
index 0000000..8537389
--- /dev/null
+++ b/examples/c++/calc++/local.mk
@@ -0,0 +1,83 @@
+## Copyright (C) 2005-2006, 2008-2015, 2018-2019 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/>.
+
+## ------------------- ##
+## Parser generation.  ##
+## ------------------- ##
+
+%D%/parser.stamp: $(dependencies)
+SUFFIXES += .yy .stamp
+.yy.stamp:
+	$(AM_V_YACC)rm -f $@
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(YACCCOMPILE) -o $*.cc $<
+	$(AM_V_at)mv -f $@.tmp $@
+
+$(calcxx_sources_generated): %D%/parser.stamp
+	@test -f $@ || rm -f %D%/parser.stamp
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) %D%/parser.stamp
+CLEANFILES +=					\
+  $(calcxx_sources_generated)			\
+  %D%/parser.dot				\
+  %D%/parser.output				\
+  %D%/parser.stamp				\
+  %D%/scanner.cc
+CLEANDIRS += %D%/*.dSYM
+
+## -------------------- ##
+## Building & testing.  ##
+## -------------------- ##
+
+# Avoid using BUILT_SOURCES which is too global.
+$(%C%_calc___OBJECTS): $(calcxx_sources_generated)
+
+calcxx_sources_extracted =			\
+  %D%/driver.cc					\
+  %D%/driver.hh					\
+  %D%/scanner.ll				\
+  %D%/calc++.cc
+calcxx_extracted =                              \
+  $(calcxx_sources_extracted)                   \
+  %D%/parser.yy
+extracted += $(calcxx_extracted)
+calcxx_sources_generated =                      \
+  %D%/parser.cc                                 \
+  %D%/parser.hh                                 \
+  %D%/location.hh
+calcxx_sources =                                \
+  $(calcxx_sources_extracted)                   \
+  $(calcxx_sources_generated)
+
+if FLEX_CXX_WORKS
+if  ENABLE_CXX
+  check_PROGRAMS += %D%/calc++
+  nodist_%C%_calc___SOURCES = $(calcxx_sources)
+  # Don't use gnulib's system headers.
+  %C%_calc___CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+  %C%_calc___CXXFLAGS = $(AM_CXXFLAGS) $(FLEX_SCANNER_CXXFLAGS)
+  TESTS += %D%/calc++.test
+endif  ENABLE_CXX
+endif FLEX_CXX_WORKS
+EXTRA_DIST += %D%/calc++.test
+
+
+## ------------ ##
+## Installing.  ##
+## ------------ ##
+
+calcxxdir = $(docdir)/%D%
+calcxx_DATA = $(calcxx_extracted)
+dist_calcxx_DATA = %D%/README.md %D%/Makefile
diff --git a/examples/c++/calc++/parser.yy b/examples/c++/calc++/parser.yy
new file mode 100644
index 0000000..4d1af8d
--- /dev/null
+++ b/examples/c++/calc++/parser.yy
@@ -0,0 +1,71 @@
+%skeleton "lalr1.cc" /* -*- C++ -*- */
+%require "3.5"
+%defines
+
+%define api.token.constructor
+%define api.value.type variant
+%define parse.assert
+
+%code requires {
+  # include <string>
+  class driver;
+}
+
+// The parsing context.
+%param { driver& drv }
+
+%locations
+
+%define parse.trace
+%define parse.error verbose
+
+%code {
+# include "driver.hh"
+}
+
+%define api.token.prefix {TOK_}
+%token
+  END  0  "end of file"
+  ASSIGN  ":="
+  MINUS   "-"
+  PLUS    "+"
+  STAR    "*"
+  SLASH   "/"
+  LPAREN  "("
+  RPAREN  ")"
+;
+
+%token <std::string> IDENTIFIER "identifier"
+%token <int> NUMBER "number"
+%nterm <int> exp
+
+%printer { yyo << $$; } <*>;
+
+%%
+%start unit;
+unit: assignments exp  { drv.result = $2; };
+
+assignments:
+  %empty                 {}
+| assignments assignment {};
+
+assignment:
+  "identifier" ":=" exp { drv.variables[$1] = $3; };
+
+%left "+" "-";
+%left "*" "/";
+exp:
+  "number"
+| "identifier"  { $$ = drv.variables[$1]; }
+| exp "+" exp   { $$ = $1 + $3; }
+| exp "-" exp   { $$ = $1 - $3; }
+| exp "*" exp   { $$ = $1 * $3; }
+| exp "/" exp   { $$ = $1 / $3; }
+| "(" exp ")"   { $$ = $2; }
+%%
+
+void
+yy::parser::error (const location_type& l, const std::string& m)
+{
+  std::cerr << l << ": " << m << '\n';
+}
diff --git a/examples/c++/calc++/scanner.ll b/examples/c++/calc++/scanner.ll
new file mode 100644
index 0000000..be8f216
--- /dev/null
+++ b/examples/c++/calc++/scanner.ll
@@ -0,0 +1,144 @@
+%{ /* -*- C++ -*- */
+# include <cerrno>
+# include <climits>
+# include <cstdlib>
+# include <cstring> // strerror
+# include <string>
+# include "driver.hh"
+# include "parser.hh"
+%}
+
+%{
+#if defined __clang__
+# define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
+#endif
+
+// Clang and ICC like to pretend they are GCC.
+#if defined __GNUC__ && !defined __clang__ && !defined __ICC
+# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#endif
+
+// Pacify warnings in yy_init_buffer (observed with Flex 2.6.4)
+// and GCC 6.4.0, 7.3.0 with -O3.
+#if defined GCC_VERSION && 600 <= GCC_VERSION
+# pragma GCC diagnostic ignored "-Wnull-dereference"
+#endif
+
+// This example uses Flex's C backend, yet compiles it as C++.
+// So expect warnings about C style casts and NULL.
+#if defined CLANG_VERSION && 500 <= CLANG_VERSION
+# pragma clang diagnostic ignored "-Wold-style-cast"
+# pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#elif defined GCC_VERSION && 407 <= GCC_VERSION
+# pragma GCC diagnostic ignored "-Wold-style-cast"
+# pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+
+#define FLEX_VERSION (YY_FLEX_MAJOR_VERSION * 100 + YY_FLEX_MINOR_VERSION)
+
+// Old versions of Flex (2.5.35) generate an incomplete documentation comment.
+//
+//  In file included from src/scan-code-c.c:3:
+//  src/scan-code.c:2198:21: error: empty paragraph passed to '@param' command
+//        [-Werror,-Wdocumentation]
+//   * @param line_number
+//     ~~~~~~~~~~~~~~~~~^
+//  1 error generated.
+#if FLEX_VERSION < 206 && defined CLANG_VERSION
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+
+// Old versions of Flex (2.5.35) use 'register'.  Warnings introduced in
+// GCC 7 and Clang 6.
+#if FLEX_VERSION < 206
+# if defined CLANG_VERSION && 600 <= CLANG_VERSION
+#  pragma clang diagnostic ignored "-Wdeprecated-register"
+# elif defined GCC_VERSION && 700 <= GCC_VERSION
+#  pragma GCC diagnostic ignored "-Wregister"
+# endif
+#endif
+
+#if FLEX_VERSION < 206
+# if defined CLANG_VERSION
+#  pragma clang diagnostic ignored "-Wconversion"
+#  pragma clang diagnostic ignored "-Wdocumentation"
+#  pragma clang diagnostic ignored "-Wshorten-64-to-32"
+#  pragma clang diagnostic ignored "-Wsign-conversion"
+# elif defined GCC_VERSION
+#  pragma GCC diagnostic ignored "-Wconversion"
+#  pragma GCC diagnostic ignored "-Wsign-conversion"
+# endif
+#endif
+%}
+
+%option noyywrap nounput noinput batch debug
+
+%{
+  // A number symbol corresponding to the value in S.
+  yy::parser::symbol_type
+  make_NUMBER (const std::string &s, const yy::parser::location_type& loc);
+%}
+
+id    [a-zA-Z][a-zA-Z_0-9]*
+int   [0-9]+
+blank [ \t\r]
+
+%{
+  // Code run each time a pattern is matched.
+  # define YY_USER_ACTION  loc.columns (yyleng);
+%}
+%%
+%{
+  // A handy shortcut to the location held by the driver.
+  yy::location& loc = drv.location;
+  // Code run each time yylex is called.
+  loc.step ();
+%}
+{blank}+   loc.step ();
+\n+        loc.lines (yyleng); loc.step ();
+
+"-"        return yy::parser::make_MINUS  (loc);
+"+"        return yy::parser::make_PLUS   (loc);
+"*"        return yy::parser::make_STAR   (loc);
+"/"        return yy::parser::make_SLASH  (loc);
+"("        return yy::parser::make_LPAREN (loc);
+")"        return yy::parser::make_RPAREN (loc);
+":="       return yy::parser::make_ASSIGN (loc);
+
+{int}      return make_NUMBER (yytext, loc);
+{id}       return yy::parser::make_IDENTIFIER (yytext, loc);
+.          {
+             throw yy::parser::syntax_error
+               (loc, "invalid character: " + std::string(yytext));
+}
+<<EOF>>    return yy::parser::make_END (loc);
+%%
+
+yy::parser::symbol_type
+make_NUMBER (const std::string &s, const yy::parser::location_type& loc)
+{
+  errno = 0;
+  long n = strtol (s.c_str(), NULL, 10);
+  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+    throw yy::parser::syntax_error (loc, "integer is out of range: " + s);
+  return yy::parser::make_NUMBER ((int) n, loc);
+}
+
+void
+driver::scan_begin ()
+{
+  yy_flex_debug = trace_scanning;
+  if (file.empty () || file == "-")
+    yyin = stdin;
+  else if (!(yyin = fopen (file.c_str (), "r")))
+    {
+      std::cerr << "cannot open " << file << ": " << strerror(errno) << '\n';
+      exit (EXIT_FAILURE);
+    }
+}
+
+void
+driver::scan_end ()
+{
+  fclose (yyin);
+}
diff --git a/examples/c++/local.mk b/examples/c++/local.mk
new file mode 100644
index 0000000..3bf52dc
--- /dev/null
+++ b/examples/c++/local.mk
@@ -0,0 +1,73 @@
+## Copyright (C) 2018-2019 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/>.
+
+cxxdir = $(docdir)/%D%
+include %D%/calc++/local.mk
+
+## -------- ##
+## Simple.  ##
+## -------- ##
+
+BUILT_SOURCES += $(simple_sources)
+CLEANFILES +=  %D%/simple.[ch] %D%/simple.output
+CLEANDIRS += %D%/*.dSYM
+cxx_DATA = $(simple_extracted)
+
+simple_extracted = %D%/simple.yy
+simple_sources = $(simple_extracted)
+extracted += $(simple_extracted)
+
+if ENABLE_CXX14
+  check_PROGRAMS += %D%/simple
+  nodist_%C%_simple_SOURCES = $(simple_sources)
+
+  %C%_simple_CXXFLAGS = $(CXX11_CXXFLAGS) $(WARN_CXXFLAGS_TEST)
+  # Don't use gnulib's system headers.
+  %C%_simple_CPPFLAGS = -I$(top_builddir)
+  TESTS += %D%/simple.test
+  %D%/simple.cc: $(dependencies)
+endif
+EXTRA_DIST += %D%/simple.test
+
+
+## ---------- ##
+## Variants.  ##
+## ---------- ##
+
+if ENABLE_CXX
+  check_PROGRAMS += %D%/variant
+  nodist_%C%_variant_SOURCES = %D%/variant.yy
+  # Don't use gnulib's system headers.
+  %C%_variant_CPPFLAGS = -I$(top_builddir)
+  TESTS += %D%/variant.test
+  %D%/variant.cc: $(dependencies)
+endif
+EXTRA_DIST += %D%/variant.test
+
+if ENABLE_CXX11
+  check_PROGRAMS += %D%/variant-11
+  nodist_%C%_variant_11_SOURCES = %D%/variant-11.yy
+  %C%_variant_11_CXXFLAGS = $(CXX11_CXXFLAGS) $(WARN_CXXFLAGS_TEST)
+  # Don't use gnulib's system headers.
+  %C%_variant_11_CPPFLAGS = -I$(top_builddir)
+  TESTS += %D%/variant-11.test
+  %D%/variant-11.cc: $(dependencies)
+endif
+EXTRA_DIST += %D%/variant-11.test
+
+dist_cxx_DATA = %D%/README.md %D%/Makefile %D%/variant.yy %D%/variant-11.yy
+CLEANFILES +=                                                   \
+  %D%/simple.output %D%/variant.output %D%/variant-11.output    \
+  %D%/simple.hh %D%/variant.hh %D%/variant-11.hh
diff --git a/examples/c++/simple.test b/examples/c++/simple.test
new file mode 100644
index 0000000..8300c9d
--- /dev/null
+++ b/examples/c++/simple.test
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+: >input
+run 0 "{I have three numbers for you., 1, 2, 3, And that's all!}"
diff --git a/examples/c++/simple.yy b/examples/c++/simple.yy
new file mode 100644
index 0000000..169f3b9
--- /dev/null
+++ b/examples/c++/simple.yy
@@ -0,0 +1,82 @@
+%require "3.2"
+%language "c++"
+
+%define api.value.type variant
+
+%code
+{
+  // Print a list of strings.
+  auto
+  operator<< (std::ostream& o, const std::vector<std::string>& ss)
+    -> std::ostream&
+  {
+    o << '{';
+    const char *sep = "";
+    for (const auto& s: ss)
+      {
+        o << sep << s;
+        sep = ", ";
+      }
+    return o << '}';
+  }
+}
+
+%define api.token.constructor
+
+%token END_OF_FILE 0
+
+%code
+{
+  namespace yy
+  {
+    // Return the next token.
+    auto yylex () -> parser::symbol_type
+    {
+      static int count = 0;
+      switch (int stage = count++)
+        {
+        case 0:
+          return parser::make_TEXT ("I have three numbers for you.");
+        case 1: case 2: case 3:
+          return parser::make_NUMBER (stage);
+        case 4:
+          return parser::make_TEXT ("And that's all!");
+        default:
+          return parser::make_END_OF_FILE ();
+        }
+    }
+  }
+}
+%%
+result:
+  list  { std::cout << $1 << '\n'; }
+;
+
+%nterm <std::vector<std::string>> list;
+list:
+  %empty     { /* Generates an empty string list */ }
+| list item  { $$ = $1; $$.push_back ($2); }
+;
+
+%nterm <std::string> item;
+%token <std::string> TEXT;
+%token <int> NUMBER;
+item:
+  TEXT
+| NUMBER  { $$ = std::to_string ($1); }
+;
+%%
+namespace yy
+{
+  // Report an error to the user.
+  auto parser::error (const std::string& msg) -> void
+  {
+    std::cerr << msg << '\n';
+  }
+}
+
+int main ()
+{
+  yy::parser parse;
+  return parse ();
+}
diff --git a/examples/c++/variant-11.test b/examples/c++/variant-11.test
new file mode 100644
index 0000000..d03c193
--- /dev/null
+++ b/examples/c++/variant-11.test
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+# Copyright (C) 2018-2019 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/>.
+
+: >input
+run 0 "{I have numbers for you., 1, 2, 3, And that's all!}" 4
+
+run 0 "{I have numbers for you., 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, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 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, 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, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 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, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, And that's all!}" 1000
diff --git a/examples/c++/variant-11.yy b/examples/c++/variant-11.yy
new file mode 100644
index 0000000..72687af
--- /dev/null
+++ b/examples/c++/variant-11.yy
@@ -0,0 +1,154 @@
+/*
+  Copyright (C) 2008-2015, 2018-2019 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/>.
+*/
+
+%require "3.2"
+%debug
+%language "c++"
+%define api.token.constructor
+%define api.value.type variant
+%define api.value.automove
+%define api.location.file none
+%define parse.assert
+%locations
+
+%code requires // *.hh
+{
+#include <memory> // std::unique_ptr
+#include <string>
+#include <vector>
+
+  using string_uptr = std::unique_ptr<std::string>;
+  using string_uptrs = std::vector<string_uptr>;
+}
+
+%code // *.cc
+{
+#include <climits>  // INT_MIN, INT_MAX
+#include <iostream>
+#include <sstream>
+
+  namespace yy
+  {
+    // Prototype of the yylex function providing subsequent tokens.
+    static parser::symbol_type yylex ();
+
+    // Print a vector of strings.
+    std::ostream&
+    operator<< (std::ostream& o, const string_uptrs& ss)
+    {
+      o << '{';
+      const char *sep = "";
+      for (const auto& s: ss)
+        {
+          o << sep << *s;
+          sep = ", ";
+        }
+      return o << '}';
+    }
+  }
+
+  template <typename... Args>
+  string_uptr
+  make_string_uptr (Args&&... args)
+  {
+    // std::make_unique is C++14.
+    return string_uptr (new std::string{std::forward<Args> (args)...});
+  }
+}
+
+%token <string_uptr> TEXT;
+%token <int> NUMBER;
+%printer { yyo << '(' << &$$ << ") " << $$; } <*>;
+%printer { yyo << *$$; } <string_uptr>;
+%token END_OF_FILE 0;
+
+%type <string_uptr> item;
+%type <string_uptrs> list;
+
+%%
+
+result:
+  list  { std::cout << $1 << '\n'; }
+;
+
+list:
+  %empty     { /* Generates an empty string list */ }
+| list item  { $$ = $1; $$.emplace_back ($2); }
+;
+
+item:
+  TEXT
+| NUMBER  { $$ = make_string_uptr (std::to_string ($1)); }
+;
+%%
+
+// The last number return by the scanner is max - 1.
+int max = 4;
+
+namespace yy
+{
+  // The yylex function providing subsequent tokens:
+  // TEXT         "I have three numbers for you."
+  // NUMBER       1
+  // NUMBER       2
+  // NUMBER       ...
+  // NUMBER       max - 1
+  // TEXT         "And that's all!"
+  // END_OF_FILE
+
+  static
+  parser::symbol_type
+  yylex ()
+  {
+    static int count = 0;
+    const int stage = count;
+    ++count;
+    auto loc = parser::location_type{nullptr, stage + 1, stage + 1};
+    if (stage == 0)
+      return parser::make_TEXT (make_string_uptr ("I have numbers for you."), std::move (loc));
+    else if (stage < max)
+      return parser::make_NUMBER (stage, std::move (loc));
+    else if (stage == max)
+      return parser::make_TEXT (make_string_uptr ("And that's all!"), std::move (loc));
+    else
+      return parser::make_END_OF_FILE (std::move (loc));
+  }
+
+  // Mandatory error function
+  void
+  parser::error (const parser::location_type& loc, const std::string& msg)
+  {
+    std::cerr << loc << ": " << msg << '\n';
+  }
+}
+
+int
+main (int argc, const char *argv[])
+{
+  if (2 <= argc && isdigit (*argv[1]))
+    {
+      auto maxl = strtol (argv[1], nullptr, 10);
+      max = INT_MIN <= maxl && maxl <= INT_MAX ? int(maxl) : 4;
+    }
+  auto&& p = yy::parser{};
+  p.set_debug_level (!!getenv ("YYDEBUG"));
+  return p.parse ();
+}
+
+// Local Variables:
+// mode: C++
+// End:
diff --git a/etc/Makefile.am b/examples/c++/variant.test
similarity index 80%
rename from etc/Makefile.am
rename to examples/c++/variant.test
index 0261546..65e686c 100644
--- a/etc/Makefile.am
+++ b/examples/c++/variant.test
@@ -1,5 +1,7 @@
-## Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+#! /bin/sh
 
+# Copyright (C) 2018-2019 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
@@ -13,4 +15,5 @@
 # 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
+: >input
+run 0 "{I have three numbers for you., 1, 2, 3, And that's all!}"
diff --git a/examples/c++/variant.yy b/examples/c++/variant.yy
new file mode 100644
index 0000000..df955ce
--- /dev/null
+++ b/examples/c++/variant.yy
@@ -0,0 +1,154 @@
+/*
+  Copyright (C) 2008-2015, 2018-2019 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/>.
+*/
+
+%require "3.2"
+%debug
+%language "c++"
+%define api.token.constructor
+%define api.value.type variant
+%define api.location.file none
+%define parse.assert
+%locations
+
+%code requires // *.hh
+{
+#include <string>
+#include <vector>
+typedef std::vector<std::string> strings_type;
+}
+
+%code // *.cc
+{
+#include <iostream>
+#include <sstream>
+
+  namespace yy
+  {
+    // Prototype of the yylex function providing subsequent tokens.
+    static parser::symbol_type yylex ();
+
+    // Print a vector of strings.
+    std::ostream&
+    operator<< (std::ostream& o, const strings_type& ss)
+    {
+      o << '{';
+      const char *sep = "";
+      for (strings_type::const_iterator i = ss.begin (), end = ss.end ();
+           i != end; ++i)
+        {
+          o << sep << *i;
+          sep = ", ";
+        }
+      return o << '}';
+    }
+  }
+
+  // Convert to string.
+  template <typename T>
+    std::string
+    to_string (const T& t)
+  {
+    std::ostringstream o;
+    o << t;
+    return o.str ();
+  }
+}
+
+%token <::std::string> TEXT;
+%token <int> NUMBER;
+%printer { yyo << '(' << &$$ << ") " << $$; } <*>;
+%token END_OF_FILE 0;
+
+%type <::std::string> item;
+%type <::std::vector<std::string>> list;
+
+%%
+
+result:
+  list  { std::cout << $1 << '\n'; }
+;
+
+list:
+  %empty     { /* Generates an empty string list */ }
+| list item  { std::swap ($$, $1); $$.push_back ($2); }
+;
+
+item:
+  TEXT
+| NUMBER  { $$ = to_string ($1); }
+;
+%%
+
+namespace yy
+{
+  // Use nullptr with pre-C++11.
+#if !defined __cplusplus || __cplusplus < 201103L
+# define NULLPTR 0
+#else
+# define NULLPTR nullptr
+#endif
+
+  // The yylex function providing subsequent tokens:
+  // TEXT         "I have three numbers for you."
+  // NUMBER       1
+  // NUMBER       2
+  // NUMBER       3
+  // TEXT         "And that's all!"
+  // END_OF_FILE
+
+  static
+  parser::symbol_type
+  yylex ()
+  {
+    static int count = 0;
+    const int stage = count;
+    ++count;
+    parser::location_type loc (NULLPTR, stage + 1, stage + 1);
+    switch (stage)
+      {
+      case 0:
+        return parser::make_TEXT ("I have three numbers for you.", loc);
+      case 1:
+      case 2:
+      case 3:
+        return parser::make_NUMBER (stage, loc);
+      case 4:
+        return parser::make_TEXT ("And that's all!", loc);
+      default:
+        return parser::make_END_OF_FILE (loc);
+      }
+  }
+
+  // Mandatory error function
+  void
+  parser::error (const parser::location_type& loc, const std::string& msg)
+  {
+    std::cerr << loc << ": " << msg << '\n';
+  }
+}
+
+int
+main ()
+{
+  yy::parser p;
+  p.set_debug_level (!!getenv ("YYDEBUG"));
+  return p.parse ();
+}
+
+// Local Variables:
+// mode: C++
+// End:
diff --git a/examples/c/README.md b/examples/c/README.md
new file mode 100644
index 0000000..46f4563
--- /dev/null
+++ b/examples/c/README.md
@@ -0,0 +1,59 @@
+# Examples in C
+
+This directory contains simple examples of Bison grammar files in C.
+
+Some of them come from the documentation, which should be installed together
+with Bison.  The URLs are provided for convenience.
+
+## rpcalc - Reverse Polish Notation Calculator
+The first example is that of a simple double-precision Reverse Polish
+Notation calculator (a calculator using postfix operators). This example
+provides a good starting point, since operator precedence is not an issue.
+
+Extracted from the documentation: "Reverse Polish Notation Calculator"
+https://www.gnu.org/software/bison/manual/html_node/RPN-Calc.html
+
+## calc - Simple Calculator
+This example is slightly more complex than rpcalc: it features infix
+operators (`1 + 2`, instead of `1 2 +` in rpcalc), but it does so using a
+unambiguous grammar of the arithmetic instead of using precedence
+directives (%left, etc.).
+
+## mfcalc - Multi-Function Calculator
+A more complete C example: a multi-function calculator.  More complex than
+the previous example.  Using precedence directives to support infix
+operators.
+
+Extracted from the documentation: "Multi-Function Calculator: mfcalc".
+https://www.gnu.org/software/bison/manual/html_node/Multi_002dfunction-Calc.html
+
+## lexcalc - calculator with Flex and Bison
+The calculator, redux.  This time using a scanner generated by Flex.
+
+## reccalc - recursive calculator with Flex and Bison
+The example builds on top of the previous one to provide a reentrant parser.
+Such parsers can be called concurrently in different threads, or even
+recursively.  To demonstrate this feature, expressions in parentheses are
+tokenized as strings, and then recursively parsed from the parser.  So
+`(((1)+(2))*((3)+(4)))` uses eight parsers, with a depth of four.
+
+
+<!---
+
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+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 no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
+
+# LocalWords:  mfcalc calc parsers yy rpcalc lexcalc redux reccalc ispell
+# LocalWords:  reentrant tokenized american postfix
+--->
diff --git a/examples/c/calc/Makefile b/examples/c/calc/Makefile
new file mode 100644
index 0000000..6221ca9
--- /dev/null
+++ b/examples/c/calc/Makefile
@@ -0,0 +1,28 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = calc
+BISON = bison
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.c %.h %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --defines --xml --graph=$*.gv -o $*.c $<
+
+$(BASE): $(BASE).o
+	$(CC) $(CFLAGS) -o $@ $^
+
+run: $(BASE)
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$<
+
+html: $(BASE).html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+CLEANFILES =									\
+  $(BASE) *.o $(BASE).[ch] $(BASE).output $(BASE).xml $(BASE).html $(BASE).gv
+
+clean:
+	rm -f $(CLEANFILES)
diff --git a/examples/c/calc/README.md b/examples/c/calc/README.md
new file mode 100644
index 0000000..ee39dd8
--- /dev/null
+++ b/examples/c/calc/README.md
@@ -0,0 +1,28 @@
+# calc - calculator with Bison
+
+This directory contains calc, the traditional example of using Bison to
+build a simple calculator.
+
+<!---
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2019 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/examples/Makefile.am b/examples/c/calc/calc.test
similarity index 72%
copy from examples/Makefile.am
copy to examples/c/calc/calc.test
index 60a79ad..c1f1b07 100644
--- a/examples/Makefile.am
+++ b/examples/c/calc/calc.test
@@ -1,6 +1,7 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+#! /bin/sh
 
+# Copyright (C) 2019 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
@@ -14,8 +15,23 @@
 # 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++
-endif
+cat >input <<EOF
+1+2*3
+EOF
+run 0 7
 
-dist_noinst_SCRIPTS = extexi
+cat >input <<EOF
+1 - 2 - 3
+EOF
+run 0 -4
+
+cat >input <<EOF
+8 / 2 / 2
+EOF
+run 0 2
+
+cat >input <<EOF
+(1+2) * 3
+EOF
+run 0 9
+run -noerr 0 9 -p
diff --git a/examples/c/calc/calc.y b/examples/c/calc/calc.y
new file mode 100644
index 0000000..a9896e4
--- /dev/null
+++ b/examples/c/calc/calc.y
@@ -0,0 +1,93 @@
+%code top {
+  #include <ctype.h>  /* isdigit. */
+  #include <stdio.h>  /* For printf, etc. */
+  #include <string.h> /* strcmp. */
+
+  int yylex (void);
+  void yyerror (char const *);
+}
+
+%define api.header.include {"calc.h"}
+%define api.value.type union /* Generate YYSTYPE from these types:  */
+%token <double> NUM "number"
+%type  <double> expr term fact
+
+/* Generate the parser description file.  */
+%verbose
+/* Enable run-time traces (yydebug).  */
+%define parse.trace
+
+/* Formatting semantic values.  */
+%printer { fprintf (yyo, "%g", $$); } <double>;
+
+%% /* The grammar follows.  */
+input:
+  %empty
+| input line
+;
+
+line:
+  '\n'
+| expr '\n'  { printf ("%.10g\n", $1); }
+| error '\n' { yyerrok; }
+;
+
+expr:
+  expr '+' term { $$ = $1 + $3; }
+| expr '-' term { $$ = $1 - $3; }
+| term
+;
+
+term:
+  term '*' fact { $$ = $1 * $3; }
+| term '/' fact { $$ = $1 / $3; }
+| fact
+;
+
+fact:
+  "number"
+| '(' expr ')' { $$ = $2; }
+;
+
+%%
+
+int
+yylex (void)
+{
+  int c;
+
+  /* Ignore white space, get first nonwhite character.  */
+  while ((c = getchar ()) == ' ' || c == '\t')
+    continue;
+
+  if (c == EOF)
+    return 0;
+
+  /* Char starts a number => parse the number.         */
+  if (c == '.' || isdigit (c))
+    {
+      ungetc (c, stdin);
+      scanf ("%lf", &yylval.NUM);
+      return NUM;
+    }
+
+  /* Any other character is a token by itself.        */
+  return c;
+}
+
+/* Called by yyparse on error.  */
+void
+yyerror (char const *s)
+{
+  fprintf (stderr, "%s\n", s);
+}
+
+int
+main (int argc, char const* argv[])
+{
+  /* Enable parse traces on option -p.  */
+  for (int i = 1; i < argc; ++i)
+    if (!strcmp (argv[i], "-p"))
+      yydebug = 1;
+  return yyparse ();
+}
diff --git a/examples/c/calc/local.mk b/examples/c/calc/local.mk
new file mode 100644
index 0000000..3a4c494
--- /dev/null
+++ b/examples/c/calc/local.mk
@@ -0,0 +1,33 @@
+## Copyright (C) 2019 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/>.
+
+calcdir = $(docdir)/%D%
+
+## ------ ##
+## Calc.  ##
+## ------ ##
+
+check_PROGRAMS += %D%/calc
+TESTS += %D%/calc.test
+EXTRA_DIST += %D%/calc.test
+nodist_%C%_calc_SOURCES = %D%/calc.y
+%D%/calc.c: $(dependencies)
+
+# Don't use gnulib's system headers.
+%C%_calc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+
+dist_calc_DATA = %D%/calc.y %D%/Makefile %D%/README.md
+CLEANFILES += %D%/calc.[ch] %D%/calc.output %D%/scan.c
+CLEANDIRS += %D%/*.dSYM
diff --git a/examples/c/lexcalc/Makefile b/examples/c/lexcalc/Makefile
new file mode 100644
index 0000000..eccc876
--- /dev/null
+++ b/examples/c/lexcalc/Makefile
@@ -0,0 +1,34 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = lexcalc
+BISON = bison
+FLEX = flex
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.c %.h %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --defines --xml --graph=$*.gv -o $*.c $<
+
+%.c: %.l
+	$(FLEX) $(FLEXFLAGS) -o$@ $<
+
+scan.o: parse.h
+$(BASE): parse.o scan.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+run: $(BASE)
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$<
+
+html: parse.html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+CLEANFILES =						\
+  $(BASE) *.o						\
+  parse.[ch] parse.output parse.xml parse.html parse.gv	\
+  scan.c
+clean:
+	rm -f $(CLEANFILES)
diff --git a/examples/c/lexcalc/README.md b/examples/c/lexcalc/README.md
new file mode 100644
index 0000000..31ef276
--- /dev/null
+++ b/examples/c/lexcalc/README.md
@@ -0,0 +1,28 @@
+# lexcalc - calculator with Flex and Bison
+
+This directory contains lexcalc, the traditional example of using Flex and
+Bison to build a simple calculator.
+
+<!---
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 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/examples/calc++/test b/examples/c/lexcalc/lexcalc.test
old mode 100755
new mode 100644
similarity index 72%
rename from examples/calc++/test
rename to examples/c/lexcalc/lexcalc.test
index 8f4d419..6d1ecde
--- a/examples/calc++/test
+++ b/examples/c/lexcalc/lexcalc.test
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# Copyright (C) 2018-2019 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
@@ -15,32 +15,18 @@
 # 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
+1+2*3
+EOF
+run 0 7
 
 cat >input <<EOF
-a := 1
-b := 2
-c := 3
-d := a + b * c
-d
+(1+2) * 3
 EOF
-
-./calc++ input
-./calc++ -p input
+run 0 9
+run -noerr 0 9 -p
 
 cat >input <<EOF
-a := 1
-d := a + b * c
+(1+2) *
 EOF
-./calc++ input
-
-cat >input <<EOF
-toto := 1
-toto
-EOF
-./calc++ -s input
-
-rm input
+run 1 'err: syntax error, unexpected end-of-line, expecting ( or number'
diff --git a/examples/c/lexcalc/local.mk b/examples/c/lexcalc/local.mk
new file mode 100644
index 0000000..dc81eca
--- /dev/null
+++ b/examples/c/lexcalc/local.mk
@@ -0,0 +1,35 @@
+## Copyright (C) 2018-2019 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/>.
+
+lexcalcdir = $(docdir)/%D%
+
+## --------- ##
+## LexCalc.  ##
+## --------- ##
+
+if FLEX_WORKS
+  check_PROGRAMS += %D%/lexcalc
+  TESTS += %D%/lexcalc.test
+  nodist_%C%_lexcalc_SOURCES = %D%/parse.y %D%/parse.h %D%/scan.l
+  # Don't use gnulib's system headers.
+  %C%_lexcalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+endif FLEX_WORKS
+
+%D%/parse.c: $(dependencies)
+
+EXTRA_DIST += %D%/lexcalc.test
+dist_lexcalc_DATA = %D%/parse.y %D%/scan.l %D%/Makefile %D%/README.md
+CLEANFILES += %D%/parse.[ch] %D%/scan.c %D%/parse.output
+CLEANDIRS += %D%/*.dSYM
diff --git a/examples/c/lexcalc/parse.y b/examples/c/lexcalc/parse.y
new file mode 100644
index 0000000..68b1b17
--- /dev/null
+++ b/examples/c/lexcalc/parse.y
@@ -0,0 +1,94 @@
+// Prologue (directives).
+%expect 0
+
+// Emitted in the header file, after the definition of YYSTYPE.
+%code provides
+{
+  // Tell Flex the expected prototype of yylex.
+#define YY_DECL                                 \
+  enum yytokentype yylex (YYSTYPE* yylval, int *nerrs)
+  YY_DECL;
+
+  void yyerror (int *nerrs, const char *msg);
+}
+
+// Emitted on top of the implementation file.
+%code top
+{
+#include <stdio.h>  // printf.
+#include <stdlib.h> // getenv.
+}
+
+%define api.pure full
+%define api.token.prefix {TOK_}
+%define api.value.type union
+%define parse.error verbose
+%define parse.trace
+ // Error count, exchanged between main, yyparse and yylex.
+%param {int *nerrs}
+
+%token
+  PLUS   "+"
+  MINUS  "-"
+  STAR   "*"
+  SLASH  "/"
+  LPAREN "("
+  RPAREN ")"
+  EOL    "end-of-line"
+  EOF 0  "end-of-file"
+;
+
+%token <int> NUM "number"
+%type <int> exp
+%printer { fprintf (yyo, "%d", $$); } <int>
+
+// Precedence (from lowest to highest) and associativity.
+%left "+" "-"
+%left "*" "/"
+
+%%
+// Rules.
+input:
+  %empty
+| input line
+;
+
+line:
+  exp EOL   { printf ("%d\n", $exp); }
+| error EOL { yyerrok; }
+;
+
+exp:
+  exp "+" exp   { $$ = $1 + $3; }
+| exp "-" exp   { $$ = $1 - $3; }
+| exp "*" exp   { $$ = $1 * $3; }
+| exp "/" exp
+  {
+    if ($3 == 0)
+      {
+        yyerror (nerrs, "invalid division by zero");
+        YYERROR;
+      }
+    else
+      $$ = $1 / $3;
+  }
+| "(" exp ")"   { $$ = $2; }
+| NUM           { $$ = $1; }
+;
+%%
+// Epilogue (C code).
+void yyerror (int *nerrs, const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+  ++*nerrs;
+}
+
+int main (void)
+{
+  int nerrs = 0;
+  // Possibly enable parser runtime debugging.
+  yydebug = !!getenv ("YYDEBUG");
+  yyparse (&nerrs);
+  // Exit on failure if there were errors.
+  return !!nerrs;
+}
diff --git a/examples/c/lexcalc/scan.l b/examples/c/lexcalc/scan.l
new file mode 100644
index 0000000..815f778
--- /dev/null
+++ b/examples/c/lexcalc/scan.l
@@ -0,0 +1,44 @@
+/* Prologue (directives).   -*- C++ -*- */
+
+/* Disable Flex features we don't need, to avoid warnings. */
+%option nodefault noinput nounput noyywrap
+
+%{
+#include <errno.h> /* errno, ERANGE */
+#include <limits.h> /* INT_MIN */
+#include <stdlib.h> /* strtol */
+
+#include "parse.h"
+%}
+
+%%
+ /* Rules.  */
+
+"+"      return TOK_PLUS;
+"-"      return TOK_MINUS;
+"*"      return TOK_STAR;
+"/"      return TOK_SLASH;
+
+"("      return TOK_LPAREN;
+")"      return TOK_RPAREN;
+
+ /* Scan an integer.  */
+[0-9]+   {
+  errno = 0;
+  long n = strtol (yytext, NULL, 10);
+  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+    yyerror (nerrs, "integer is out of range");
+  yylval->TOK_NUM = (int) n;
+  return TOK_NUM;
+}
+
+ /* Ignore white spaces. */
+[ \t]+   continue;
+
+"\n"     return TOK_EOL;
+
+.        yyerror (nerrs, "syntax error, invalid character");
+
+<<EOF>>  return TOK_EOF;
+%%
+/* Epilogue (C code). */
diff --git a/examples/c/local.mk b/examples/c/local.mk
new file mode 100644
index 0000000..11071f1
--- /dev/null
+++ b/examples/c/local.mk
@@ -0,0 +1,23 @@
+## Copyright (C) 2018-2019 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/>.
+
+cdir = $(docdir)/%D%
+dist_c_DATA = %D%/README.md
+
+include %D%/calc/local.mk
+include %D%/lexcalc/local.mk
+include %D%/mfcalc/local.mk
+include %D%/reccalc/local.mk
+include %D%/rpcalc/local.mk
diff --git a/examples/c/mfcalc/Makefile b/examples/c/mfcalc/Makefile
new file mode 100644
index 0000000..b951808
--- /dev/null
+++ b/examples/c/mfcalc/Makefile
@@ -0,0 +1,25 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = mfcalc
+BISON = bison
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.c %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.c $<
+
+%: %.c
+	$(CC) $(CFLAGS) -o $@ $<
+
+run: $(BASE)
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$<
+
+html: $(BASE).html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+clean:
+	rm -f $(BASE) $(BASE).c $(BASE).html $(BASE).xml $(BASE).gv $(BASE).output
diff --git a/examples/c/mfcalc/calc.h b/examples/c/mfcalc/calc.h
new file mode 100644
index 0000000..d672e8e
--- /dev/null
+++ b/examples/c/mfcalc/calc.h
@@ -0,0 +1,23 @@
+/* Function type. */
+typedef double (func_t) (double);
+
+/* Data type for links in the chain of symbols. */
+struct symrec
+{
+  char *name;  /* name of symbol */
+  int type;    /* type of symbol: either VAR or FUN */
+  union
+  {
+    double var;    /* value of a VAR */
+    func_t *fun;   /* value of a FUN */
+  } value;
+  struct symrec *next;  /* link field */
+};
+
+typedef struct symrec symrec;
+
+/* The symbol table: a chain of 'struct symrec'. */
+extern symrec *sym_table;
+
+symrec *putsym (char const *name, int sym_type);
+symrec *getsym (char const *name);
diff --git a/examples/c/mfcalc/local.mk b/examples/c/mfcalc/local.mk
new file mode 100644
index 0000000..0beb8df
--- /dev/null
+++ b/examples/c/mfcalc/local.mk
@@ -0,0 +1,44 @@
+## Copyright (C) 2005-2006, 2008-2015, 2018-2019 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/>.
+
+## -------------------- ##
+## Building & testing.  ##
+## -------------------- ##
+
+BUILT_SOURCES += $(mfcalc_sources)
+CLEANFILES +=  %D%/mfcalc.[ch] %D%/mfcalc.output
+CLEANDIRS += %D%/*.dSYM
+
+mfcalc_extracted = %D%/calc.h %D%/mfcalc.y
+mfcalc_sources = $(mfcalc_extracted)
+extracted += $(mfcalc_extracted)
+
+check_PROGRAMS += %D%/mfcalc
+nodist_%C%_mfcalc_SOURCES = $(mfcalc_sources)
+%D%/mfcalc.c: $(dependencies)
+# Don't use gnulib's system headers.
+%C%_mfcalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+%C%_mfcalc_LDADD = -lm
+
+dist_TESTS += %D%/mfcalc.test
+
+## ------------ ##
+## Installing.  ##
+## ------------ ##
+
+mfcalcdir = $(docdir)/%D%
+mfcalc_DATA = $(mfcalc_extracted)
+dist_mfcalc_DATA = %D%/Makefile
diff --git a/etc/Makefile.am b/examples/c/mfcalc/mfcalc.test
old mode 100644
new mode 100755
similarity index 77%
copy from etc/Makefile.am
copy to examples/c/mfcalc/mfcalc.test
index 0261546..838dff1
--- a/etc/Makefile.am
+++ b/examples/c/mfcalc/mfcalc.test
@@ -1,5 +1,7 @@
-## Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+#! /bin/sh
 
+# Copyright (C) 2005-2015, 2018-2019 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
@@ -13,4 +15,13 @@
 # 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
+cat >input <<EOF
+1+2*3
+EOF
+run 0 7
+
+cat >input <<EOF
+(1+2) * 3
+EOF
+run 0 9
+run -noerr 0 9 -p
diff --git a/examples/c/mfcalc/mfcalc.y b/examples/c/mfcalc/mfcalc.y
new file mode 100644
index 0000000..4b6ba4c
--- /dev/null
+++ b/examples/c/mfcalc/mfcalc.y
@@ -0,0 +1,186 @@
+%{
+  #include <stdio.h>  /* For printf, etc. */
+  #include <math.h>   /* For pow, used in the grammar. */
+  #include "calc.h"   /* Contains definition of 'symrec'. */
+  int yylex (void);
+  void yyerror (char const *);
+%}
+
+%define api.value.type union /* Generate YYSTYPE from these types: */
+%token <double>  NUM     /* Double precision number. */
+%token <symrec*> VAR FUN /* Symbol table pointer: variable/function. */
+%nterm <double>  exp
+
+%precedence '='
+%left '-' '+'
+%left '*' '/'
+%precedence NEG /* negation--unary minus */
+%right '^'      /* exponentiation */
+/* Generate the parser description file. */
+%verbose
+/* Enable run-time traces (yydebug). */
+%define parse.trace
+
+/* Formatting semantic values. */
+%printer { fprintf (yyo, "%s", $$->name); } VAR;
+%printer { fprintf (yyo, "%s()", $$->name); } FUN;
+%printer { fprintf (yyo, "%g", $$); } <double>;
+%% /* The grammar follows. */
+input:
+  %empty
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'   { printf ("%.10g\n", $1); }
+| error '\n' { yyerrok;                }
+;
+
+exp:
+  NUM
+| VAR                { $$ = $1->value.var;              }
+| VAR '=' exp        { $$ = $3; $1->value.var = $3;     }
+| FUN '(' exp ')'    { $$ = $1->value.fun ($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 of grammar. */
+%%
+
+struct init
+{
+  char const *name;
+  func_t *fun;
+};
+
+struct init const arith_funs[] =
+{
+  { "atan", atan },
+  { "cos",  cos  },
+  { "exp",  exp  },
+  { "ln",   log  },
+  { "sin",  sin  },
+  { "sqrt", sqrt },
+  { 0, 0 },
+};
+
+/* The symbol table: a chain of 'struct symrec'. */
+symrec *sym_table;
+
+/* Put arithmetic functions in table. */
+static void
+init_table (void)
+{
+  for (int i = 0; arith_funs[i].name; i++)
+    {
+      symrec *ptr = putsym (arith_funs[i].name, FUN);
+      ptr->value.fun = arith_funs[i].fun;
+    }
+}
+
+/* The mfcalc code assumes that malloc and realloc
+   always succeed, and that integer calculations
+   never overflow.  Production-quality code should
+   not make these assumptions.  */
+#include <stdlib.h> /* malloc, realloc. */
+#include <string.h> /* strlen. */
+
+symrec *
+putsym (char const *name, int sym_type)
+{
+  symrec *res = (symrec *) malloc (sizeof (symrec));
+  res->name = strdup (name);
+  res->type = sym_type;
+  res->value.var = 0; /* Set value to 0 even if fun. */
+  res->next = sym_table;
+  sym_table = res;
+  return res;
+}
+
+symrec *
+getsym (char const *name)
+{
+  for (symrec *p = sym_table; p; p = p->next)
+    if (strcmp (p->name, name) == 0)
+      return p;
+  return NULL;
+}
+
+#include <ctype.h>
+#include <stddef.h>
+
+int
+yylex (void)
+{
+  int c = getchar ();
+
+  /* Ignore white space, get first nonwhite character. */
+  while (c == ' ' || c == '\t')
+    c = getchar ();
+
+  if (c == EOF)
+    return 0;
+
+  /* Char starts a number => parse the number. */
+  if (c == '.' || isdigit (c))
+    {
+      ungetc (c, stdin);
+      scanf ("%lf", &yylval.NUM);
+      return NUM;
+    }
+
+  /* Char starts an identifier => read the name. */
+  if (isalpha (c))
+    {
+      static ptrdiff_t bufsize = 0;
+      static char *symbuf = 0;
+      ptrdiff_t i = 0;
+      do
+        {
+          /* If buffer is full, make it bigger. */
+          if (bufsize <= i)
+            {
+              bufsize = 2 * bufsize + 40;
+              symbuf = realloc (symbuf, bufsize);
+            }
+          /* Add this character to the buffer. */
+          symbuf[i++] = c;
+          /* Get another character. */
+          c = getchar ();
+        }
+      while (isalnum (c));
+
+      ungetc (c, stdin);
+      symbuf[i] = '\0';
+
+      symrec *s = getsym (symbuf);
+      if (!s)
+        s = putsym (symbuf, VAR);
+      yylval.VAR = s; /* or yylval.FUN = s. */
+      return s->type;
+    }
+
+  /* Any other character is a token by itself. */
+  return c;
+}
+
+/* Called by yyparse on error. */
+void yyerror (char const *s)
+{
+  fprintf (stderr, "%s\n", s);
+}
+
+int main (int argc, char const* argv[])
+{
+  /* Enable parse traces on option -p. */
+  if (argc == 2 && strcmp(argv[1], "-p") == 0)
+    yydebug = 1;
+  init_table ();
+  return yyparse ();
+}
diff --git a/examples/c/reccalc/Makefile b/examples/c/reccalc/Makefile
new file mode 100644
index 0000000..84fbd3e
--- /dev/null
+++ b/examples/c/reccalc/Makefile
@@ -0,0 +1,35 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = reccalc
+BISON = bison
+FLEX = flex
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.c %.h %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --defines --xml --graph=$*.gv -o $*.c $<
+
+%.c %.h: %.l
+	$(FLEX) $(FLEXFLAGS) -o$*.c --header-file=$*.h $<
+
+scan.o: parse.h
+parse.o: scan.h
+$(BASE): parse.o scan.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+run: $(BASE)
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$<
+
+html: parse.html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+CLEANFILES =						\
+  $(BASE) *.o						\
+  parse.[ch] parse.output parse.xml parse.html parse.gv	\
+  scan.[ch]
+clean:
+	rm -f $(CLEANFILES)
diff --git a/examples/c/reccalc/README.md b/examples/c/reccalc/README.md
new file mode 100644
index 0000000..01ba6d3
--- /dev/null
+++ b/examples/c/reccalc/README.md
@@ -0,0 +1,45 @@
+# reccalc - recursive calculator with Flex and Bison
+
+In this example the generated parser is pure and reentrant: it can be used
+concurrently in different threads, or recursively.  As a proof of this
+reentrancy, expressions in parenthesis are tokenized as strings, and then
+recursively parsed from the parser:
+
+```
+exp: STR
+  {
+    result r = parse_string ($1);
+    free ($1);
+    if (r.nerrs)
+      {
+        res->nerrs += r.nerrs;
+        YYERROR;
+      }
+    else
+      $$ = r.value;
+  }
+```
+
+<!---
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 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/examples/c/reccalc/local.mk b/examples/c/reccalc/local.mk
new file mode 100644
index 0000000..0ff5abe
--- /dev/null
+++ b/examples/c/reccalc/local.mk
@@ -0,0 +1,79 @@
+## Copyright (C) 2019 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/>.
+
+reccalcdir = $(docdir)/%D%
+
+## --------- ##
+## RecCalc.  ##
+## --------- ##
+
+if FLEX_WORKS
+  check_PROGRAMS += %D%/reccalc
+  TESTS += %D%/reccalc.test
+  nodist_%C%_reccalc_SOURCES = %D%/parse.y %D%/scan.h %D%/scan.c
+  BUILT_SOURCES += $(nodist_%C%_reccalc_SOURCES)
+  # Don't use gnulib's system headers.
+  %C%_reccalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+endif FLEX_WORKS
+
+%D%/parse.c: $(dependencies)
+
+# Tell Make that parse.o depends on scan.h, so that scan.h is built
+# before parse.o.  Obfuscate the name of the target, otherwise
+# Automake removes its recipe for parse.o and leaves only our
+# additional dependency.
+DASH = -
+%D%/reccalc$(DASH)parse.o: %D%/scan.h
+# Tell Make scan.o depends on parse.h, except that Make sees only
+# parse.c, not parse.h.  We can't use BUILT_SOURCES to this end, since
+# we use the built bison.
+%D%/reccalc$(DASH)scan.o: %D%/parse.c
+
+# Likewise, but for Automake before 1.16.
+%D%/examples_c_reccalc_reccalc$(DASH)parse.o: %D%/scan.h
+%D%/examples_c_reccalc_reccalc$(DASH)scan.o: %D%/parse.c
+
+## See "info automake 'Multiple Outputs'" for this rule.
+%D%/scan.c %D%/scan.h: %D%/scan.stamp
+## Recover from the removal of $@
+	@if test -f $@; then :; else \
+	  trap 'rm -rf %D%/scan.lock %D%/scan.stamp' 1 2 13 15; \
+## mkdir is a portable test-and-set
+	  if mkdir %D%/scan.lock 2>/dev/null; then \
+## This code is being executed by the first process.
+	    rm -f %D%/scan.stamp; \
+	    $(MAKE) $(AM_MAKEFLAGS) %D%/scan.stamp; \
+	    result=$$?; rm -rf %D%/scan.lock; exit $$result; \
+	  else \
+## This code is being executed by the follower processes.
+## Wait until the first process is done.
+	    while test -d %D%/scan.lock; do sleep 1; done; \
+## Succeed if and only if the first process succeeded.
+	    test -f %D%/scan.stamp; \
+	  fi; \
+	fi
+
+%D%/scan.stamp: %D%/scan.l
+	$(AM_V_LEX)rm -f $@ $@.tmp
+	$(AM_V_at)$(MKDIR_P) %D%
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(LEX) $(AM_LFLAGS) $(LFLAGS) -o%D%/scan.c --header-file=%D%/scan.h $(srcdir)/%D%/scan.l
+	$(AM_V_at)mv $@.tmp $@
+
+
+EXTRA_DIST += %D%/reccalc.test %D%/scan.l
+dist_reccalc_DATA = %D%/parse.y %D%/scan.l %D%/Makefile %D%/README.md
+CLEANFILES += %D%/parse.[ch] %D%/parse.output %D%/scan.[ch] %D%/*.stamp
+CLEANDIRS += %D%/*.dSYM
diff --git a/examples/c/reccalc/parse.y b/examples/c/reccalc/parse.y
new file mode 100644
index 0000000..6d64529
--- /dev/null
+++ b/examples/c/reccalc/parse.y
@@ -0,0 +1,183 @@
+// Prologue (directives).
+%expect 0
+
+// Emitted in the header file, before the definition of YYSTYPE.
+%code requires
+{
+  typedef void* yyscan_t;
+  typedef struct
+  {
+    // Whether to print the intermediate results.
+    int verbose;
+    // Value of the last computation.
+    int value;
+    // Number of errors.
+    int nerrs;
+  } result;
+}
+
+// Emitted in the header file, after the definition of YYSTYPE.
+%code provides
+{
+  // Tell Flex the expected prototype of yylex.
+  // The scanner argument must be named yyscanner.
+#define YY_DECL                                                         \
+  enum yytokentype yylex (YYSTYPE* yylval, yyscan_t yyscanner, result *res)
+  YY_DECL;
+
+  void yyerror (yyscan_t scanner, result *res, const char *msg, ...);
+}
+
+// Emitted on top of the implementation file.
+%code top
+{
+#include <stdarg.h> // va_list.
+#include <stdio.h>  // printf.
+#include <stdlib.h> // getenv.
+}
+
+%code
+{
+  result parse_string (const char* cp);
+  result parse (void);
+}
+
+%define api.pure full
+%define api.token.prefix {TOK_}
+%define api.value.type union
+%define parse.error verbose
+%define parse.trace
+%verbose
+
+ // Scanner and error count are exchanged between main, yyparse and yylex.
+%param {yyscan_t scanner}{result *res}
+
+%token
+  PLUS   "+"
+  MINUS  "-"
+  STAR   "*"
+  SLASH  "/"
+  EOL    "end-of-line"
+  EOF 0  "end-of-file"
+;
+
+%token <int> NUM "number"
+%type <int> exp
+%printer { fprintf (yyo, "%d", $$); } <int>
+
+%token <char*> STR "string"
+%printer { fprintf (yyo, "\"%s\"", $$); } <char*>
+%destructor { free ($$); } <char*>
+
+// Precedence (from lowest to highest) and associativity.
+%left "+" "-"
+%left "*" "/"
+%precedence UNARY
+
+%%
+// Rules.
+input:
+  line
+| input line
+;
+
+line:
+  exp eol
+    {
+      res->value = $exp;
+      if (res->verbose)
+        printf ("%d\n", $exp);
+    }
+| error eol
+    {
+      yyerrok;
+    }
+;
+
+eol:
+  EOF
+| EOL
+;
+
+exp:
+  NUM           { $$ = $1; }
+| exp "+" exp   { $$ = $1 + $3; }
+| exp "-" exp   { $$ = $1 - $3; }
+| exp "*" exp   { $$ = $1 * $3; }
+| exp "/" exp
+  {
+    if ($3 == 0)
+      {
+        yyerror (scanner, res, "invalid division by zero");
+        YYERROR;
+      }
+    else
+      $$ = $1 / $3;
+  }
+| "+" exp %prec UNARY  { $$ = + $2; }
+| "-" exp %prec UNARY  { $$ = - $2; }
+| STR
+  {
+    result r = parse_string ($1);
+    free ($1);
+    if (r.nerrs)
+      {
+        res->nerrs += r.nerrs;
+        YYERROR;
+      }
+    else
+      $$ = r.value;
+  }
+;
+
+%%
+// Epilogue (C code).
+
+#include "scan.h"
+
+result
+parse (void)
+{
+  yyscan_t scanner;
+  yylex_init (&scanner);
+  result res = {1, 0, 0};
+  yyparse (scanner, &res);
+  yylex_destroy (scanner);
+  return res;
+}
+
+result
+parse_string (const char *str)
+{
+  yyscan_t scanner;
+  yylex_init (&scanner);
+  YY_BUFFER_STATE buf = yy_scan_string (str ? str : "", scanner);
+  result res = {0, 0, 0};
+  yyparse (scanner, &res);
+  yy_delete_buffer (buf, scanner);
+  yylex_destroy (scanner);
+  return res;
+}
+
+void
+yyerror (yyscan_t scanner, result *res,
+         const char *msg, ...)
+{
+  (void) scanner;
+  va_list args;
+  va_start (args, msg);
+  vfprintf (stderr, msg, args);
+  va_end (args);
+  fputc ('\n', stderr);
+  res->nerrs += 1;
+}
+
+int
+main (void)
+{
+  // Possibly enable parser runtime debugging.
+  yydebug = !!getenv ("YYDEBUG");
+  result res = parse ();
+  // Exit on failure if there were errors.
+  return !!res.nerrs;
+}
diff --git a/examples/c/reccalc/reccalc.test b/examples/c/reccalc/reccalc.test
new file mode 100644
index 0000000..5d95b4e
--- /dev/null
+++ b/examples/c/reccalc/reccalc.test
@@ -0,0 +1,57 @@
+#! /bin/sh
+
+# Copyright (C) 2018-2019 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/>.
+
+cat >input <<EOF
+1+2*3
+EOF
+run 0 '7'
+
+cat >input <<EOF
+(1+2) * 3
+EOF
+run 0 '9'
+run -noerr 0 '9' -p
+
+cat >input <<EOF
+(((1)+(2))*((3)+(4)))
+EOF
+run 0 '21'
+
+# Some really deep computation.
+# for 4, gives 4 + (3 + (2 + (1 + (- (4 * (4 + 1)) / 2)))).
+n=100
+for i in $(seq 0 $n)
+do
+    if [ "$i" -eq 0 ]; then
+        input="- ($n * ($n + 1)) / 2"
+    else
+        input="$i + ($input)"
+    fi
+done
+echo "$input" > input
+run 0 '0'
+
+cat >input <<EOF
+() + ()
+EOF
+run 1 'err: syntax error, unexpected end-of-file, expecting + or - or number or string'
+
+cat >input <<EOF
+1 + $
+EOF
+run 1 'err: syntax error, invalid character: $
+err: syntax error, unexpected end-of-line, expecting + or - or number or string'
diff --git a/examples/c/reccalc/scan.l b/examples/c/reccalc/scan.l
new file mode 100644
index 0000000..fbb781a
--- /dev/null
+++ b/examples/c/reccalc/scan.l
@@ -0,0 +1,85 @@
+/* Prologue (directives).   -*- C++ -*- */
+
+/* Disable Flex features we don't need, to avoid warnings. */
+%option nodefault noinput nounput noyywrap
+
+%option reentrant
+
+%{
+#include <assert.h>
+#include <limits.h> /* INT_MIN */
+#include <stdlib.h> /* strtol */
+
+#include "parse.h"
+%}
+
+%x SC_STRING
+
+%%
+%{
+  int nesting = 0;
+  char *str = NULL;
+  int size = 0;
+  int capacity = 0;
+#define STR_APPEND()                                    \
+  do {                                                  \
+    if (capacity < size + yyleng + 1)                   \
+      {                                                 \
+        do                                              \
+          capacity = capacity ? 2 * capacity : 128;     \
+        while (capacity < size + yyleng + 1);           \
+        str = realloc (str, capacity);                  \
+      }                                                 \
+    memcpy (str + size, yytext, yyleng);                \
+    size += yyleng;                                     \
+    assert (size < capacity);                           \
+  } while (0)
+%}
+
+ // Rules.
+
+"+"      return TOK_PLUS;
+"-"      return TOK_MINUS;
+"*"      return TOK_STAR;
+"/"      return TOK_SLASH;
+
+"("      nesting += 1; BEGIN SC_STRING;
+
+ /* Scan an integer.  */
+[0-9]+   {
+  errno = 0;
+  long n = strtol (yytext, NULL, 10);
+  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+    yyerror (yyscanner, res, "integer is out of range");
+  yylval->TOK_NUM = (int) n;
+  return TOK_NUM;
+}
+
+ /* Ignore white spaces. */
+[ \t]+   continue;
+
+"\n"     return TOK_EOL;
+
+.        yyerror (yyscanner, res, "syntax error, invalid character: %c", yytext[0]);
+
+<SC_STRING>
+{
+  "("+   nesting += yyleng; STR_APPEND ();
+  ")"    {
+    if (!--nesting)
+      {
+        BEGIN INITIAL;
+        if (str)
+          str[size] = 0;
+        yylval->TOK_STR = str;
+        return TOK_STR;
+      }
+    else
+      STR_APPEND ();
+  }
+  [^()]+  STR_APPEND ();
+}
+
+<<EOF>>  return TOK_EOF;
+%%
+/* Epilogue (C code). */
diff --git a/examples/c/rpcalc/Makefile b/examples/c/rpcalc/Makefile
new file mode 100644
index 0000000..624f247
--- /dev/null
+++ b/examples/c/rpcalc/Makefile
@@ -0,0 +1,25 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BASE = rpcalc
+BISON = bison
+XSLTPROC = xsltproc
+
+all: $(BASE)
+
+%.c %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.c $<
+
+%: %.c
+	$(CC) $(CFLAGS) -o $@ $<
+
+run: $(BASE)
+	@echo "Type arithmetic expressions in Reverse Polish Notation.  Quit with ctrl-d."
+	./$<
+
+html: $(BASE).html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+clean:
+	rm -f $(BASE) $(BASE).c $(BASE).html $(BASE).xml $(BASE).gv
diff --git a/examples/c/rpcalc/local.mk b/examples/c/rpcalc/local.mk
new file mode 100644
index 0000000..bda0ba6
--- /dev/null
+++ b/examples/c/rpcalc/local.mk
@@ -0,0 +1,44 @@
+## Copyright (C) 2005-2006, 2008-2015, 2018-2019 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/>.
+
+## -------------------- ##
+## Building & testing.  ##
+## -------------------- ##
+
+BUILT_SOURCES += $(rpcalc_sources)
+CLEANFILES +=  %D%/rpcalc.[ch] %D%/rpcalc.output
+CLEANDIRS += %D%/*.dSYM
+
+rpcalc_extracted = %D%/rpcalc.y
+rpcalc_sources = $(rpcalc_extracted)
+extracted += $(rpcalc_extracted)
+
+check_PROGRAMS += %D%/rpcalc
+nodist_%C%_rpcalc_SOURCES = $(rpcalc_sources)
+%D%/rpcalc.c: $(dependencies)
+# Don't use gnulib's system headers.
+%C%_rpcalc_CPPFLAGS = -I$(top_builddir)/%D%
+%C%_rpcalc_LDADD = -lm
+
+dist_TESTS += %D%/rpcalc.test
+
+## ------------ ##
+## Installing.  ##
+## ------------ ##
+
+rpcalcdir = $(docdir)/%D%
+rpcalc_DATA = $(rpcalc_extracted)
+dist_rpcalc_DATA = %D%/Makefile
diff --git a/examples/calc++/test b/examples/c/rpcalc/rpcalc.test
similarity index 71%
copy from examples/calc++/test
copy to examples/c/rpcalc/rpcalc.test
index 8f4d419..2c55fc8 100755
--- a/examples/calc++/test
+++ b/examples/c/rpcalc/rpcalc.test
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# Copyright (C) 2005-2015, 2018-2019 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
@@ -15,32 +15,32 @@
 # 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
+1 2 3 * +
+EOF
+run 0 7
 
 cat >input <<EOF
-a := 1
-b := 2
-c := 3
-d := a + b * c
-d
+1.1 2.2 3.3 * +
 EOF
-
-./calc++ input
-./calc++ -p input
+run 0 8.36
 
 cat >input <<EOF
-a := 1
-d := a + b * c
+1 2 + 3 *
 EOF
-./calc++ input
+run 0 9
 
 cat >input <<EOF
-toto := 1
-toto
+1 2 3 4 5 6 7 8 9 * * * * * * * *
 EOF
-./calc++ -s input
+run 0 362880
 
-rm input
+cat >input <<EOF
+3 7 + 3 4 5 * + - n
+EOF
+run 0 13
+
+cat >input <<EOF
+3 4 ^
+EOF
+run 0 81
diff --git a/examples/c/rpcalc/rpcalc.y b/examples/c/rpcalc/rpcalc.y
new file mode 100644
index 0000000..eb514dc
--- /dev/null
+++ b/examples/c/rpcalc/rpcalc.y
@@ -0,0 +1,78 @@
+/* Reverse Polish Notation calculator. */
+
+%{
+  #include <stdio.h>
+  #include <math.h>
+  int yylex (void);
+  void yyerror (char const *);
+%}
+
+%define api.value.type {double}
+%token NUM
+
+%% /* Grammar rules and actions follow. */
+
+input:
+  %empty
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'      { printf ("%.10g\n", $1); }
+;
+
+exp:
+  NUM
+| 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   */
+;
+%%
+
+/* 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>
+
+int
+yylex (void)
+{
+  int c = getchar ();
+  /* Skip white space. */
+  while (c == ' ' || c == '\t')
+    c = getchar ();
+  /* Process numbers. */
+  if (c == '.' || isdigit (c))
+    {
+      ungetc (c, stdin);
+      scanf ("%lf", &yylval);
+      return NUM;
+    }
+  /* Return end-of-input. */
+  else if (c == EOF)
+    return 0;
+  /* Return a single char. */
+  else
+    return c;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
+
+#include <stdio.h>
+
+/* Called by yyparse on error. */
+void
+yyerror (char const *s)
+{
+  fprintf (stderr, "%s\n", s);
+}
diff --git a/examples/calc++/Makefile.am b/examples/calc++/Makefile.am
deleted file mode 100644
index e8bbbac..0000000
--- a/examples/calc++/Makefile.am
+++ /dev/null
@@ -1,93 +0,0 @@
-## 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
deleted file mode 100644
index fdfb030..0000000
--- a/examples/calc++/Makefile.in
+++ /dev/null
@@ -1,1873 +0,0 @@
-# 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
deleted file mode 100644
index 4b40e93..0000000
--- a/examples/calc++/calc++-driver.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-#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
deleted file mode 100644
index e0ac6ee..0000000
--- a/examples/calc++/calc++-driver.hh
+++ /dev/null
@@ -1,42 +0,0 @@
-#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
deleted file mode 100644
index f916b59..0000000
--- a/examples/calc++/calc++-parser.cc
+++ /dev/null
@@ -1,1079 +0,0 @@
-/* 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
deleted file mode 100644
index aa7b471..0000000
--- a/examples/calc++/calc++-parser.hh
+++ /dev/null
@@ -1,283 +0,0 @@
-/* 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
deleted file mode 100644
index e69de29..0000000
--- a/examples/calc++/calc++-parser.stamp
+++ /dev/null
diff --git a/examples/calc++/calc++-parser.yy b/examples/calc++/calc++-parser.yy
deleted file mode 100644
index 19132f5..0000000
--- a/examples/calc++/calc++-parser.yy
+++ /dev/null
@@ -1,75 +0,0 @@
-#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
deleted file mode 100644
index c9d9349..0000000
--- a/examples/calc++/calc++-scanner.cc
+++ /dev/null
@@ -1,2086 +0,0 @@
-
-#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
deleted file mode 100644
index 05e7fea..0000000
--- a/examples/calc++/calc++-scanner.ll
+++ /dev/null
@@ -1,90 +0,0 @@
-%{ /* -*- 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
deleted file mode 100644
index 7b0f8fc..0000000
--- a/examples/calc++/calc++.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-#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++/location.hh b/examples/calc++/location.hh
deleted file mode 100644
index 6dd5bc6..0000000
--- a/examples/calc++/location.hh
+++ /dev/null
@@ -1,181 +0,0 @@
-/* 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
deleted file mode 100644
index 68ed4cf..0000000
--- a/examples/calc++/position.hh
+++ /dev/null
@@ -1,172 +0,0 @@
-/* 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
deleted file mode 100644
index e9d51c5..0000000
--- a/examples/calc++/stack.hh
+++ /dev/null
@@ -1,133 +0,0 @@
-/* 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/d/Makefile b/examples/d/Makefile
new file mode 100644
index 0000000..45ae628
--- /dev/null
+++ b/examples/d/Makefile
@@ -0,0 +1,25 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BISON = bison
+DC = dmd
+XSLTPROC = xsltproc
+
+all: calc
+
+%.d %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.d $<
+
+%: %.d
+	$(DC) $(DCFLAGS) $<
+
+run: calc
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	./$<
+
+html: calc.html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+clean:
+	rm -f calc calc.d calc.xml calc.gv calc.html *.o
diff --git a/examples/d/README.md b/examples/d/README.md
new file mode 100644
index 0000000..13ebe74
--- /dev/null
+++ b/examples/d/README.md
@@ -0,0 +1,28 @@
+# Examples in D
+
+This directory contains examples of Bison grammar files in D.
+
+You can run `make` to compile these examples.  And `make clean` to tidy
+afterwards.
+
+## d/calc.y
+The usual calculator.
+
+<!---
+
+Local Variables:
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+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 no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
+
+# LocalWords:  mfcalc calc parsers yy
+--->
diff --git a/examples/Makefile.am b/examples/d/calc.test
similarity index 74%
rename from examples/Makefile.am
rename to examples/d/calc.test
index 60a79ad..3073609 100644
--- a/examples/Makefile.am
+++ b/examples/d/calc.test
@@ -1,6 +1,7 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+#! /bin/sh
 
+# Copyright (C) 2018-2019 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
@@ -14,8 +15,12 @@
 # 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++
-endif
+cat >input <<EOF
+1 + 2 * 3
+EOF
+run 0 7
 
-dist_noinst_SCRIPTS = extexi
+cat >input <<EOF
+1 + 2 * * 3
+EOF
+run 1 "err: syntax error, unexpected *, expecting + or - or ( or number"
diff --git a/examples/d/calc.y b/examples/d/calc.y
new file mode 100644
index 0000000..7e0c5f1
--- /dev/null
+++ b/examples/d/calc.y
@@ -0,0 +1,139 @@
+%language "D"
+
+%define api.parser.class {Calc}
+%define parse.error verbose
+
+%union {
+  int ival;
+}
+
+/* Bison Declarations */
+%token EQ     "="
+       PLUS   "+"
+       MINUS  "-"
+       STAR   "*"
+       SLASH  "/"
+       LPAR   "("
+       RPAR   ")"
+       EOL    "end of line"
+%token <ival> NUM "number"
+%type  <ival> exp
+
+%left "-" "+"
+%left "*" "/"
+%precedence UNARY   /* unary operators */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  EOL
+| exp EOL           { writeln ($exp); }
+| error EOL
+;
+
+exp:
+  NUM                  { $$ = $1; }
+| exp "+" exp          { $$ = $1 + $3; }
+| exp "-" exp          { $$ = $1 - $3; }
+| exp "*" exp          { $$ = $1 * $3; }
+| exp "/" exp          { $$ = $1 / $3; }
+| "+" exp  %prec UNARY { $$ = -$2; }
+| "-" exp  %prec UNARY { $$ = -$2; }
+| "(" exp ")"          { $$ = $2; }
+;
+
+%%
+import std.range.primitives;
+import std.stdio;
+
+auto calcLexer(R)(R range)
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  return new CalcLexer!R(range);
+}
+
+auto calcLexer (File f)
+{
+  import std.algorithm : map, joiner;
+  import std.utf : byDchar;
+
+  return f.byChunk(1024)        // avoid making a syscall roundtrip per char
+          .map!(chunk => cast(char[]) chunk) // because byChunk returns ubyte[]
+          .joiner               // combine chunks into a single virtual range of char
+          .calcLexer;           // forward to other overload
+}
+
+class CalcLexer(R) : Lexer
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  R input;
+
+  this(R r) { input = r; }
+
+  // Should be a local in main, shared with %parse-param.
+  int exit_status = 0;
+
+  public void yyerror (string s)
+  {
+    exit_status = 1;
+    stderr.writeln (s);
+  }
+
+  YYSemanticType semanticVal_;
+
+  public final @property YYSemanticType semanticVal ()
+  {
+    return semanticVal_;
+  }
+
+  int yylex ()
+  {
+    import std.uni : isWhite, isNumber;
+
+    // Skip initial spaces
+    while (!input.empty && input.front != '\n' && isWhite (input.front))
+      input.popFront;
+
+    // Handle EOF.
+    if (input.empty)
+      return YYTokenType.EOF;
+
+    // Numbers.
+    if (input.front.isNumber)
+      {
+        import std.conv : parse;
+        semanticVal_.ival = input.parse!int;
+        return YYTokenType.NUM;
+      }
+
+    // Individual characters
+    auto ch = input.front;
+    input.popFront;
+    switch (ch)
+      {
+      case EOF: return YYTokenType.EOF;
+      case '=': return YYTokenType.EQ;
+      case '+': return YYTokenType.PLUS;
+      case '-': return YYTokenType.MINUS;
+      case '*': return YYTokenType.STAR;
+      case '/': return YYTokenType.SLASH;
+      case '(': return YYTokenType.LPAR;
+      case ')': return YYTokenType.RPAR;
+      case '\n': return YYTokenType.EOL;
+      default:  assert(0);
+      }
+  }
+}
+
+int main ()
+{
+  auto l = calcLexer (stdin);
+  auto p = new Calc (l);
+  p.parse ();
+  return l.exit_status;
+}
diff --git a/examples/d/local.mk b/examples/d/local.mk
new file mode 100644
index 0000000..e5b59a4
--- /dev/null
+++ b/examples/d/local.mk
@@ -0,0 +1,36 @@
+## Copyright (C) 2018-2019 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/>.
+
+ddir = $(docdir)/%D%
+
+## ------ ##
+## Calc.  ##
+## ------ ##
+
+if ENABLE_D
+  check_SCRIPTS += %D%/calc
+  TESTS += %D%/calc.test
+endif
+EXTRA_DIST += %D%/calc.test
+
+%D%/calc.d: %D%/calc.y $(dependencies)
+	$(AM_V_GEN)$(MKDIR_P) %D%
+	$(AM_V_at)$(BISON) $(srcdir)/%D%/calc.y -o $@
+
+%D%/calc: %D%/calc.d
+	$(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ %D%/calc.d
+
+dist_d_DATA = %D%/calc.y %D%/Makefile %D%/README.md
+CLEANFILES += %D%/calc %D%/calc.[do]
diff --git a/examples/extexi b/examples/extexi
old mode 100644
new mode 100755
index 01f6cf2..3b7d907
--- a/examples/extexi
+++ b/examples/extexi
@@ -1,9 +1,10 @@
-# Extract all examples from the manual source.            -*- AWK -*-
+#! /usr/bin/perl -w
+# Extract all examples from the manual source.
 
 # This file is part of GNU Bison
 
-# Copyright (C) 1992, 2000-2001, 2005-2006, 2009-2012 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992, 2000-2001, 2005-2006, 2009-2015, 2018-2019 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
@@ -18,122 +19,194 @@
 # 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 for use with any Awk that conforms to POSIX.
-# It was derived from a similar script tests/generate.awk in GNU m4.
+# Usage: extexi [OPTION...] input-file.texi ... -- [FILES to extract]
+
+# Look for @example environments preceded with lines such as:
 #
-# Usage: extexi input-file.texi ... -- [FILES to extract]
-BEGIN {
-  if (!output_dir)
-    output_dir = ".";
-  for (argc = 1; argc < ARGC; ++argc)
-    if (ARGV[argc] == "--")
-      break;
-  for (i = argc + 1; i < ARGC; ++i)
-    file_wanted[ARGV[i]] = 1;
-  ARGC = argc;
+#      @comment file calc.y
+# or
+#      @comment file calc.y: 3
+#
+# and output their content in that file (calc.y).  When numbers are
+# provided, use them to decide the output order (block numbered 1 is
+# output before block 2, even if the latter appears before).  The same
+# number may be used several time, in which case the order of
+# appearance is used.
+#
+# Use @ignore for code to extract that must not be part of the
+# documentation.  For instance:
+#
+#      @ignore
+#      @comment file: calc++/scanner.ll
+#      @example
+#      // Work around an incompatibility in Flex.
+#      # undef yywrap
+#      # define yywrap() 1
+#      @end example
+#      @end ignore
+
+use strict;
+
+use File::Basename qw(dirname);
+use File::Path qw(make_path);
+
+# Whether we generate synclines.
+my $synclines = 0;
+
+# normalize($block)
+# -----------------
+# Remove Texinfo mark up.
+sub normalize($)
+{
+  local ($_) = @_;
+
+  # If we just remove this lines, then the compiler's tracking of
+  # #lines is broken.  Leave lines that that accepted by all our tools
+  # (including flex, hence the leading space), and that will be easy
+  # to remove (see the Make examples-unline recipe).
+  s{^\@(c |comment|dots|end (ignore|group)|ignore|group).*}{ /**/}mg;
+  s/\@value\{VERSION\}/$ENV{VERSION}/g;
+  s/^\@(error|result)\{\}//mg;
+  s/\@([{}@])/$1/g;
+  s/\@comment.*//;
+  $_;
 }
 
-/^@node / {
-  if (seq > 0)
-    print "AT_CLEANUP";
-
-  split ($0, tmp, ",");
-  node = substr(tmp[1], 7);
-  seq = 0;
+# Print messages only once.
+my %msg;
+sub message($)
+{
+  my ($msg) = @_;
+  if (! $msg{$msg})
+    {
+      print STDERR "extexi: $msg\n";
+      $msg{$msg} = 1;
+    }
 }
 
-/^@comment file: / {
-  if (!file_wanted[$3])
-    message("ignoring " $3);
+# The list of files we should extract.
+my @file_wanted;
+
+# Whether we should extract that file, and then under which path.
+sub file_wanted ($)
+{
+  my ($f) = @_;
+  for my $file (@file_wanted)
+    {
+      # No endswith in Perl 5...
+      return $file if $f eq substr($file, -length($f));
+    }
+  undef
+}
+
+# process ($in)
+# -------------
+# Read input file $in, and generate the outputs.
+sub process ($)
+{
+  my ($in) = @_;
+  use IO::File;
+  my $f = new IO::File($in)
+    or die "$in: cannot open: $?";
+  # FILE-NAME => { BLOCK-NUM => CODE }
+  my %file;
+
+  # The latest "@comment file: FILE [BLOCK-NUM]" arguments.
+  my $file;
+  my $block;
+  # The @example block currently read.
+  my $input;
+  local $_;
+  while (<$f>)
+    {
+      if (/^\@comment file: ([^:\n]+)(?::\s*(\d+))?$/)
+        {
+          my $f = $1;
+          $block = $2 || 1;
+          if (file_wanted($f))
+            {
+              $file = file_wanted($f);
+              message(" GEN $file");
+            }
+          else
+            {
+              message("SKIP $f");
+            }
+        }
+      elsif ($file && /^\@(small)?example$/ .. /^\@end (small)?example$/)
+        {
+          if (/^\@(small)?example$/)
+            {
+              # Bison supports synclines, but not Flex.
+              $input .= sprintf ("#line %s \"$in\"\n", $. + 1)
+                if $synclines && $file =~ /\.[chy]*$/;
+            }
+          elsif (/^\@end (small)?example$/)
+            {
+              die "no contents: $file"
+                if $input eq "";
+
+              $file{$file}{$block} .= "\n" if defined $file{$file}{$block};
+              $file{$file}{$block} .= normalize($input);
+              $file = $input = undef;
+              ++$block;
+            }
+          else
+            {
+              $input .= $_;
+            }
+        }
+    }
+
+  # Output the files.
+  for my $file (keys %file)
+    {
+      make_path (dirname ($file));
+      my $o = new IO::File(">$file")
+        or die "$file: cannot create: $?";
+      print $o $file{$file}{$_}
+        for sort keys %{$file{$file}};
+    }
+}
+
+my @input;
+my $seen_dash = 0;
+for my $arg (@ARGV)
+{
+  if ($seen_dash)
+    {
+      push @file_wanted, $arg;
+    }
+  elsif ($arg eq '--')
+    {
+      $seen_dash = 1;
+    }
+  elsif ($arg eq '--synclines')
+    {
+      $synclines = 1;
+    }
   else
     {
-      message("extracting " $3);
-      file = $3;
+      push @input, $arg;
     }
 }
-
-/^@example$/, /^@end example$/ {
-  if (!file)
-    next;
-
-  if ($0 ~ /^@example$/)
-    {
-      input = files_output[file] ? "\n" : "";
-
-      # FNR is starting at 0 instead of 1, and
-      # #line report the line number of the *next* line.
-      # => + 2.
-      # Note that recent Bison support it, but not Flex.
-      if (file ~ /\.[chy]*$/)
-	input = "#line " (FNR + 1) " \"" FILENAME "\"\n";
-      next;
-    }
-
-  if ($0 ~ /^@end example$/)
-    {
-      if (input == "")
-	fatal("no contents: " file);
-
-      input = normalize(input);
-      # No spurious end of line: use printf.
-      if (files_output[file])
-	# The parens around the output file seem to be required
-        # by awk on Mac OS X Tiger (darwin 8.4.6).
-        printf ("%s", input) >> (output_dir "/" file);
-      else
-	printf ("%s", input) > (output_dir "/" file);
-      close (output_dir "/" file);
-      files_output[file] = 1;
-
-      file = input = "";
-      next;
-    }
-
-  input = input $0 "\n";
-}
+process $_
+  foreach @input;
 
 
-# We have to handle CONTENTS line per line, since anchors in AWK are
-# referring to the whole string, not the lines.
-function normalize(contents,    i, lines, n, line, res) {
-  # Remove the Texinfo tags.
-  n = split (contents, lines, "\n");
-  # We don't want the last field which empty: it's behind the last \n.
-  for (i = 1; i < n; ++i)
-    {
-      line = lines[i];
-
-      # Whole line commands.
-      if (line ~ /^@(c |comment|dots|end (ignore|group)|ignore|group)/)
-	# Gperf accepts empty lines as valid input!!!
-	if (file ~ /\.gperf$/)
-	  continue;
-	else
-	  line = "";
-
-      gsub (/"@value\{VERSION\}"/, "\"" VERSION "\"", line)
-      gsub (/^@result\{\}/, "", line);
-      gsub (/^@error\{\}/,  "", line);
-      gsub ("@[{]", "{", line);
-      gsub ("@}", "}", line);
-      gsub ("@@", "@", line);
-      gsub ("@comment.*", "", line);
-
-      res = res line "\n";
-    }
-  return res;
-}
-
-
-function message(msg) {
-  if (! message_printed[msg])
-    {
-      print "extexi: " msg > "/dev/stderr";
-      message_printed[msg] = 1;
-    }
-}
-
-function fatal(msg) {
-  message(msg);
-  exit 1
-}
+### 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/calc++/calc.stamp b/examples/extracted.stamp
similarity index 100%
rename from examples/calc++/calc.stamp
rename to examples/extracted.stamp
diff --git a/examples/Makefile.am b/examples/java/Calc.test
similarity index 73%
copy from examples/Makefile.am
copy to examples/java/Calc.test
index 60a79ad..d4fc41f 100644
--- a/examples/Makefile.am
+++ b/examples/java/Calc.test
@@ -1,6 +1,7 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-## Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+#! /bin/sh
 
+# Copyright (C) 2018-2019 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
@@ -14,8 +15,12 @@
 # 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++
-endif
+cat >input <<EOF
+1 + 2 * 3
+EOF
+run 0 7
 
-dist_noinst_SCRIPTS = extexi
+cat >input <<EOF
+1 + 2 * * 3
+EOF
+run 0 "err: 1.5: syntax error, unexpected '*', expecting number or '-' or '(' or '!'"
diff --git a/examples/java/Calc.y b/examples/java/Calc.y
new file mode 100644
index 0000000..b69241b
--- /dev/null
+++ b/examples/java/Calc.y
@@ -0,0 +1,168 @@
+%language "Java"
+
+%define api.parser.class {Calc}
+%define api.parser.public
+
+%define parse.error verbose
+%locations
+
+%code imports {
+  import java.io.IOException;
+  import java.io.InputStream;
+  import java.io.InputStreamReader;
+  import java.io.Reader;
+  import java.io.StreamTokenizer;
+}
+
+%code {
+  public static void main (String args[]) throws IOException
+  {
+    CalcLexer l = new CalcLexer (System.in);
+    Calc p = new Calc (l);
+    p.parse ();
+  }
+}
+
+/* Bison Declarations */
+%token <Integer> NUM "number"
+%type  <Integer> exp
+
+%nonassoc '='       /* comparison            */
+%left '-' '+'
+%left '*' '/'
+%precedence NEG     /* negation--unary minus */
+%right '^'          /* exponentiation        */
+
+/* Grammar follows */
+%%
+input:
+  line
+| input line
+;
+
+line:
+  '\n'
+| exp '\n'           { System.out.println ($exp); }
+| 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 ('\t', '\t');
+    st.whitespaceChars (' ', ' ');
+    st.wordChars ('0', '9');
+  }
+
+
+  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 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 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;
+  }
+}
diff --git a/examples/java/Makefile b/examples/java/Makefile
new file mode 100644
index 0000000..5a16520
--- /dev/null
+++ b/examples/java/Makefile
@@ -0,0 +1,26 @@
+# This Makefile is designed to be simple and readable.  It does not
+# aim at portability.  It requires GNU Make.
+
+BISON = bison
+JAVAC = javac
+JAVA = java
+XSLTPROC = xsltproc
+
+all: Calc.class
+
+%.java %.xml %.gv: %.y
+	$(BISON) $(BISONFLAGS) --xml --graph=$*.gv -o $*.java $<
+
+%.class: %.java
+	$(JAVAC) $(JAVACFLAGS) $<
+
+run: Calc.class
+	@echo "Type arithmetic expressions.  Quit with ctrl-d."
+	$(JAVA) $(JAVAFLAGS) Calc
+
+html: Calc.html
+%.html: %.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) -o $@ $$($(BISON) --print-datadir)/xslt/xml2xhtml.xsl $<
+
+clean:
+	rm -f *.class Calc.java Calc.html Calc.xml Calc.gv
diff --git a/examples/java/README.md b/examples/java/README.md
new file mode 100644
index 0000000..9a6b99a
--- /dev/null
+++ b/examples/java/README.md
@@ -0,0 +1,27 @@
+# Examples in Java
+
+This directory contains examples of Bison grammar files in Java.
+
+You can run `make` to compile these examples.  And `make clean` to tidy
+afterwards.
+
+## java/Calc.y
+The usual calculator.
+
+<!---
+
+Local Variables:
+mode: markdown
+fill-column: 76
+ispell-dictionary: "american"
+End:
+
+Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+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 no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
+--->
diff --git a/examples/java/local.mk b/examples/java/local.mk
new file mode 100644
index 0000000..d165f33
--- /dev/null
+++ b/examples/java/local.mk
@@ -0,0 +1,36 @@
+## Copyright (C) 2018-2019 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/>.
+
+javadir = $(docdir)/%D%
+
+## ------ ##
+## Calc.  ##
+## ------ ##
+
+if ENABLE_JAVA
+  check_SCRIPTS += %D%/Calc.class
+  TESTS += %D%/Calc.test
+endif
+EXTRA_DIST += %D%/Calc.test
+
+%D%/Calc.java: %D%/Calc.y $(dependencies)
+	$(AM_V_GEN)$(MKDIR_P) %D%
+	$(AM_V_at)$(BISON) $(srcdir)/%D%/Calc.y -o $@
+
+%D%/Calc.class: %D%/Calc.java
+	$(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh %D%/Calc.java
+
+dist_java_DATA = %D%/Calc.y %D%/Makefile %D%/README.md
+CLEANFILES += %D%/*.class %D%/Calc.java
diff --git a/examples/local.mk b/examples/local.mk
new file mode 100644
index 0000000..db6fe65
--- /dev/null
+++ b/examples/local.mk
@@ -0,0 +1,96 @@
+## Copyright (C) 2005, 2008-2015, 2018-2019 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/>.
+
+
+## Because some of our examples use
+##
+##     %C%_reccalc_SOURCES = %D%/parse.y
+##
+## Automake ships parse.y and parse.c, and possibly parse.h when it
+## "understands" that there is one.  This is not what we want: ship only
+## parser.y.  Yet we still want to use Automake to compile the sources
+## from parser.y.  The easiest seems to use
+##
+##     nodist_%C%_reccalc_SOURCES = %D%/parse.y
+##
+## together with
+##
+##     dist_reccalc_DATA = %D%/parse.y %D%/scan.l %D%/Makefile %D%/README.md
+##
+## which guarantees that parse.y is indeed shipped.
+
+dist_noinst_SCRIPTS = %D%/extexi %D%/test
+TEST_LOG_COMPILER = $(SHELL) $(top_srcdir)/%D%/test
+
+AM_CXXFLAGS =							\
+  $(WARN_CXXFLAGS) $(WARN_CXXFLAGS_TEST) $(WERROR_CXXFLAGS)
+
+## ------------ ##
+## Extracting.  ##
+## ------------ ##
+
+doc = $(top_srcdir)/doc/bison.texi
+extexi = $(top_srcdir)/%D%/extexi
+if ENABLE_GCC_WARNINGS
+  EXTEXIFLAGS = --synclines
+endif
+extract = VERSION="$(VERSION)" $(PERL) $(extexi) $(EXTEXIFLAGS) $(doc) --
+extracted =
+EXTRA_DIST += $(extracted)
+MAINTAINERCLEANFILES += $(extracted) %D%/extracted.stamp
+%D%/extracted.stamp: $(doc) doc/version.texi $(extexi)
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at)$(MKDIR_P) %D%
+	$(AM_V_at)touch $@.tmp
+	$(AM_V_at)$(extract) $(extracted)
+	$(AM_V_at)mv $@.tmp $@
+
+$(extracted): %D%/extracted.stamp
+	@test -f $@ || rm -f %D%/extracted.stamp
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) %D%/extracted.stamp
+
+
+## ------ ##
+## Dist.  ##
+## ------ ##
+
+# Ship the stamp file, otherwise it will be recreated, which is what
+# we want to avoid.
+EXTRA_DIST += %D%/extracted.stamp
+
+# Suppress the #lines from the examples when rolling the tarball, so
+# that regular users have readable examples even before installing
+# Bison.
+dist-hook: examples-unline
+.PHONY: examples-unline
+examples-unline:
+	cd $(distdir) && \
+	  perl -pi -0777 -e 's/#line.*\n//g;s{^ /\*\*/\n}{}mg' $(extracted)
+
+
+## ---------- ##
+## Examples.  ##
+## ---------- ##
+
+examplesdir = $(docdir)/examples
+dist_examples_DATA = %D%/README.md
+
+CLEANDIRS += %D%/*.dSYM
+
+include %D%/c/local.mk
+include %D%/c++/local.mk
+include %D%/d/local.mk
+include %D%/java/local.mk
diff --git a/examples/test b/examples/test
new file mode 100755
index 0000000..d987d09
--- /dev/null
+++ b/examples/test
@@ -0,0 +1,110 @@
+#! /bin/sh
+
+# Copyright (C) 2005-2015, 2018-2019 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/>.
+
+SHELL=/bin/sh
+export SHELL
+
+me=$(basename "$1" .test)
+medir=$(dirname "$1" | sed -e 's,.*examples/,,')
+
+# Number of the current test.
+number=1
+
+# Exit status of this script.
+exit=true
+
+# top_builddir.
+cwd=$(pwd)
+
+# The exercised program.
+for p in "$cwd/examples/$medir/$me"
+do
+    if test -x "$p"; then
+        prog=$p
+        break
+    elif test -f "$p.class"; then
+        pwd
+        prog="$SHELL $cwd/javaexec.sh -cp $(dirname $p) $(basename $p)"
+        break
+    fi
+done
+if test x"$prog" = x; then
+    echo "$me: ERROR: cannot find program to exercise in:"
+    echo "$me: ERROR:   $cwd/examples/$medir/$me"
+    exit 1
+fi
+
+
+# cleanup
+# -------
+cleanup ()
+{
+  status=$?
+  if test -z "$DEBUG"; then
+     cd $cwd
+     rm -rf $$.dir
+  fi
+  exit $status
+}
+trap cleanup 0 1 2 13 15
+mkdir $$.dir
+cd $$.dir
+
+# run [-noerr] EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
+# ------------------------------------------------------------------
+# -noerr: ignore stderr, otherwise merge it into effective output.
+run ()
+{
+  noerr=false
+  case $1 in
+    (-noerr) noerr=true; shift;;
+  esac
+
+  # Expected exit status.
+  sta_exp=$1
+  shift
+  # Expected output.
+  out_exp=$1
+  shift
+  # Effective exit status.
+  sta_eff=0
+  $prog "$@" - <input >out_eff 2>err_eff || sta_eff=$?
+  # Combine effective output and error streams.
+  out_eff=$(cat out_eff && $noerr || sed -e 's/^/err: /g' err_eff)
+  if test $sta_eff -eq $sta_exp; then
+    if test "$out_eff" = "$out_exp"; then
+      echo "$me: PASS: $number"
+    else
+      echo "$me: FAIL: $number (expected output: $out_exp, effective: $out_eff)"
+      cat err_eff
+      exit=false
+    fi
+  else
+    echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
+    cat err_eff
+    exit=false
+  fi
+  number=$(expr $number + 1)
+}
+
+# We have cd'd one level deeper.
+case $1 in
+  /*) . "$1";;
+  *)  . "../$1";;
+esac
+
+$exit
diff --git a/gnulib-po/LINGUAS b/gnulib-po/LINGUAS
new file mode 100644
index 0000000..e79f7f3
--- /dev/null
+++ b/gnulib-po/LINGUAS
@@ -0,0 +1,39 @@
+# Set of available languages.
+af
+be
+bg
+ca
+cs
+da
+de
+el
+eo
+es
+et
+eu
+fi
+fr
+ga
+gl
+hu
+it
+ja
+ko
+ms
+nb
+nl
+pl
+pt
+pt_BR
+ro
+ru
+rw
+sk
+sl
+sr
+sv
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/gnulib-po/Makefile.in.in b/gnulib-po/Makefile.in.in
new file mode 100644
index 0000000..65184f6
--- /dev/null
+++ b/gnulib-po/Makefile.in.in
@@ -0,0 +1,475 @@
+# 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.19
+GETTEXT_MACRO_VERSION = 0.19
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+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@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# 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.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	package_gnu="$(PACKAGE_GNU)"; \
+	test -n "$$package_gnu" || { \
+	  if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+		 LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+			       -size -10000000c -exec grep 'GNU @PACKAGE@' \
+			       /dev/null '{}' ';' 2>/dev/null; \
+	       else \
+		 LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+	       fi; \
+	     } | grep -v 'libtool:' >/dev/null; then \
+	     package_gnu=yes; \
+	   else \
+	     package_gnu=no; \
+	   fi; \
+	}; \
+	if test "$$package_gnu" = "yes"; then \
+	  package_prefix='GNU '; \
+	else \
+	  package_prefix=''; \
+	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_prefix}@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): $(POFILESDEPS)
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
+	  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
+
+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:
+	test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+	@$(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/gnulib-po/Makevars b/gnulib-po/Makevars
new file mode 100644
index 0000000..f6a27a3
--- /dev/null
+++ b/gnulib-po/Makevars
@@ -0,0 +1,68 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2019 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 <https://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.
+
+# Usually the message domain is the same as the package name.
+# But here it has a '-gnulib' suffix.
+DOMAIN = bison-gnulib
+
+# These two variables depend on the location of this directory.
+subdir = gnulib-po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = \
+  --keyword=_ --flag=_:1:pass-c-format \
+  --keyword=N_ --flag=N_:1:pass-c-format \
+  --keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' \
+  --keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' \
+  --flag=error:3:c-format --flag=error_at_line:5:c-format
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  gnulib is copyrighted by the FSF.
+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-gnulib@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 =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
diff --git a/gnulib-po/POTFILES.in b/gnulib-po/POTFILES.in
new file mode 100644
index 0000000..962726f
--- /dev/null
+++ b/gnulib-po/POTFILES.in
@@ -0,0 +1,346 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2019 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 <https://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.
+
+# List of files which contain translatable strings.
+lib/_Noreturn.h
+lib/alignof.h
+lib/alloca.in.h
+lib/allocator.c
+lib/allocator.h
+lib/areadlink.c
+lib/areadlink.h
+lib/arg-nonnull.h
+lib/argmatch.c
+lib/argmatch.h
+lib/asnprintf.c
+lib/asprintf.c
+lib/assure.h
+lib/basename-lgpl.c
+lib/basename.c
+lib/binary-io.c
+lib/binary-io.h
+lib/bitrotate.c
+lib/bitrotate.h
+lib/bitset.c
+lib/bitset.h
+lib/bitset/array.c
+lib/bitset/array.h
+lib/bitset/base.h
+lib/bitset/list.c
+lib/bitset/list.h
+lib/bitset/stats.c
+lib/bitset/stats.h
+lib/bitset/table.c
+lib/bitset/table.h
+lib/bitset/vector.c
+lib/bitset/vector.h
+lib/bitsetv.c
+lib/bitsetv.h
+lib/c++defs.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/canonicalize-lgpl.c
+lib/careadlinkat.c
+lib/careadlinkat.h
+lib/cdefs.h
+lib/cloexec.c
+lib/cloexec.h
+lib/close-stream.c
+lib/close-stream.h
+lib/close.c
+lib/closeout.c
+lib/closeout.h
+lib/concat-filename.c
+lib/concat-filename.h
+lib/diffseq.h
+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/filename.h
+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/fstrcmp.c
+lib/fstrcmp.h
+lib/fsync.c
+lib/getdtablesize.c
+lib/gethrxtime.c
+lib/gethrxtime.h
+lib/getopt-cdefs.in.h
+lib/getopt-core.h
+lib/getopt-ext.h
+lib/getopt-pfx-core.h
+lib/getopt-pfx-ext.h
+lib/getopt.c
+lib/getopt.in.h
+lib/getopt1.c
+lib/getopt_int.h
+lib/getprogname.c
+lib/getprogname.h
+lib/getrusage.c
+lib/gettext.h
+lib/gettime.c
+lib/gettimeofday.c
+lib/gl_array_list.c
+lib/gl_array_list.h
+lib/gl_list.c
+lib/gl_list.h
+lib/gl_xlist.c
+lib/gl_xlist.h
+lib/glthread/lock.c
+lib/glthread/lock.h
+lib/glthread/threadlib.c
+lib/glthread/tls.c
+lib/glthread/tls.h
+lib/hard-locale.c
+lib/hard-locale.h
+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/libc-config.h
+lib/limits.in.h
+lib/localcharset.c
+lib/localcharset.h
+lib/localtime-buffer.c
+lib/localtime-buffer.h
+lib/lstat.c
+lib/malloc.c
+lib/malloca.c
+lib/malloca.h
+lib/math.c
+lib/math.in.h
+lib/mbchar.c
+lib/mbchar.h
+lib/mbfile.c
+lib/mbfile.h
+lib/mbrtowc.c
+lib/mbsinit.c
+lib/mbswidth.c
+lib/mbswidth.h
+lib/memchr.c
+lib/memchr.valgrind
+lib/minmax.h
+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/progreloc.c
+lib/quote.h
+lib/quotearg.c
+lib/quotearg.h
+lib/raise.c
+lib/rawmemchr.c
+lib/rawmemchr.valgrind
+lib/readlink.c
+lib/realloc.c
+lib/relocatable.c
+lib/relocatable.h
+lib/relocwrapper.c
+lib/rename.c
+lib/rmdir.c
+lib/same-inode.h
+lib/sched.in.h
+lib/setenv.c
+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-time.c
+lib/stat-time.h
+lib/stat-w32.c
+lib/stat-w32.h
+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.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/strverscmp.c
+lib/sys_resource.in.h
+lib/sys_stat.in.h
+lib/sys_time.in.h
+lib/sys_times.in.h
+lib/sys_types.in.h
+lib/sys_wait.in.h
+lib/textstyle.in.h
+lib/time.in.h
+lib/timespec.c
+lib/timespec.h
+lib/timevar.c
+lib/timevar.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/unlink.c
+lib/unlocked-io.h
+lib/unsetenv.c
+lib/vasnprintf.c
+lib/vasnprintf.h
+lib/vasprintf.c
+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/warn-on-use.h
+lib/wchar.in.h
+lib/wctype-h.c
+lib/wctype.in.h
+lib/wcwidth.c
+lib/windows-initguard.h
+lib/windows-mutex.c
+lib/windows-mutex.h
+lib/windows-once.c
+lib/windows-once.h
+lib/windows-recmutex.c
+lib/windows-recmutex.h
+lib/windows-rwlock.c
+lib/windows-rwlock.h
+lib/windows-tls.c
+lib/windows-tls.h
+lib/xalloc-die.c
+lib/xalloc-oversized.h
+lib/xalloc.h
+lib/xconcat-filename.c
+lib/xhash.c
+lib/xmalloc.c
+lib/xmemdup0.c
+lib/xmemdup0.h
+lib/xreadlink.c
+lib/xreadlink.h
+lib/xsize.c
+lib/xsize.h
+lib/xstrndup.c
+lib/xstrndup.h
+lib/xtime.c
+lib/xtime.h
diff --git a/gnulib-po/Rules-quot b/gnulib-po/Rules-quot
new file mode 100644
index 0000000..7b92c7e
--- /dev/null
+++ b/gnulib-po/Rules-quot
@@ -0,0 +1,58 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
+# 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-tools"; 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 | \
+	   { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	     '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+	       $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+	       ;; \
+	     *) \
+	       $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+	       ;; \
+	     esac } 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/gnulib-po/af.gmo b/gnulib-po/af.gmo
new file mode 100644
index 0000000..957841b
--- /dev/null
+++ b/gnulib-po/af.gmo
Binary files differ
diff --git a/gnulib-po/af.po b/gnulib-po/af.po
new file mode 100644
index 0000000..4d1663c
--- /dev/null
+++ b/gnulib-po/af.po
@@ -0,0 +1,527 @@
+# coreutils-5.2.1.af.po.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Petri Jooste <rkwjpj@puknet.puk.ac.za>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: coreutils 5.2.1\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2004-03-17 11:58+0200\n"
+"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
+"Language-Team: Afrikaans <i18n@af.org.za>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ongeldige parameter %s vir %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "dubbelsinnige parameter %s vir %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Geldige parameters is soos volg:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "kan nie die skakel %s skep nie"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "kan nie die skakel %s skep nie"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "kan nie %s oopmaak om te lees nie"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "skryffout"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Onbekende stelselfout"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opsie `%s' is dubbelsinnig\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opsie `%s' is dubbelsinnig\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: onbekende opsie `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opsie `%c%s' laat nie 'n parameter toe nie\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opsie `%s' benodig 'n parameter\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ongeldige opsie -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opsie benodig 'n parameter -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "geheue uitgeput"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "kan nie die skakel %s skep nie"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: seek het misluk"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: seek het misluk"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: seek het misluk"
+
+#  TRANSLATORS: %s denotes an author name.
+#  TRANSLATORS: %s denotes an author name.
+#~ msgid "Written by %s.\n"
+#~ msgstr "Geskryf deur %s.\n"
+
+#  TRANSLATORS: Each %s denotes an author name.
+#  TRANSLATORS: Each %s denotes an author name.
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Geskryf deur %s en %s.\n"
+
+#  TRANSLATORS: Each %s denotes an author name.
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Geskryf deur %s, %s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s \n"
+#~ "en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s, %s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s, %s, %s en %s.\n"
+
+#  TRANSLATORS: Each %s denotes an author name.
+#  You can use line breaks, estimating that each author name occupies
+#  ca. 16 screen columns and that a screen line has ca. 80 columns.
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s, %s, %s, %s\n"
+#~ "en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Geskryf deur %s, %s, %s, \n"
+#~ "%s, %s, %s, %s\n"
+#~ "%s, %s en ander.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapporteer foute aan <%s>.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapporteer foute aan <%s>.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Verpligte parameters vir langformaat opsies is ook verpligtend vir "
+#~ "kortformaat opsies.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Gebruik so:  %s [OPSIE]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Probeer `%s --help' vir meer inligting.\n"
+
+#~ msgid "NAME"
+#~ msgstr "NAAM"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "te veel parameters\n"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "leesfout"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "kan nie %s oopmaak om te lees nie"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "fout met die les van %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "fout met die skryf na %s"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "fout met die les van %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "'open' het gefaal"
+
+#~ msgid "regular empty file"
+#~ msgstr "gewone leë lêer"
+
+#~ msgid "regular file"
+#~ msgstr "gewone lêer"
+
+#~ msgid "directory"
+#~ msgstr "lêergids"
+
+#~ msgid "block special file"
+#~ msgstr "spesiale bloklêer"
+
+#~ msgid "character special file"
+#~ msgstr "spesiale karakterlêer"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "simboliese skakel"
+
+#~ msgid "socket"
+#~ msgstr "sok"
+
+#~ msgid "message queue"
+#~ msgstr "boodskapwagtou"
+
+#~ msgid "semaphore"
+#~ msgstr "semafoor"
+
+#~ msgid "shared memory object"
+#~ msgstr "gedeeldegeheue-objek"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "gedeeldegeheue-objek"
+
+#~ msgid "weird file"
+#~ msgstr "vreemde lêer"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fifo-lêers word nie ondersteun nie"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fifo-lêers word nie ondersteun nie"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fifo-lêers word nie ondersteun nie"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "skryffout"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Onbekende stelselfout"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opsie `--%s' laat nie 'n parameter toe nie\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: onbekende opsie `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: onwettige opsie -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: opsie `-W %s' is dubbelsinnig\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opsie `-W %s' laat nie 'n parameter toe nie\n"
+
+#~ msgid "block size"
+#~ msgstr "blokgrootte"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s bestaan maar is nie 'n lêergids nie"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "kan nie die eienaar en/of groep van %s verander nie"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "Kan nie lêergids %s skep nie."
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "kan nie chdir doen om na gids %s te gaan nie"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kan nie toegangsregte van %s verander nie"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "kon nie na aanvanklike werkgids terugkeer nie"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "kon nie na aanvanklike werkgids terugkeer nie"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "magtigings vir %s kon nie behou word nie"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "ongeldige karakterklas `%s'"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "geheue uitgeput"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "fout in soektog met reëlmatige uitdrukking"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "fout in soektog met reëlmatige uitdrukking"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv-funksie onbruikbaar"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv-funksie is nie beskikbaar nie"
+
+#~ msgid "character out of range"
+#~ msgstr "karakter is buite die grense"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "ongeldige gebruiker"
+
+#~ msgid "invalid group"
+#~ msgstr "ongeldige groep "
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "kan nie die aantekengroep van 'n numeriese UID verkry nie"
+
+#~ msgid "string comparison failed"
+#~ msgstr "stringvergelyking het gefaal"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Stel  LC_ALL='C' om die probleem te systap"
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Die stringe wat vergelyk is, is %s en %s."
diff --git a/gnulib-po/be.gmo b/gnulib-po/be.gmo
new file mode 100644
index 0000000..2fed111
--- /dev/null
+++ b/gnulib-po/be.gmo
Binary files differ
diff --git a/gnulib-po/be.po b/gnulib-po/be.po
new file mode 100644
index 0000000..f513091
--- /dev/null
+++ b/gnulib-po/be.po
@@ -0,0 +1,513 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the coreutils package.
+# Ales Nyakhaychyk <nab@mail.by>, 2002, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: coreutils 5.0.91\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2003-10-30 01:10+0200\n"
+"Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
+"Language-Team: Belarusian <i18n@mova.org>\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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: KBabel 1.0.2\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "нерэчаісны довад %s для %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неадназначны довад %s для %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "немагчыма стварыць лучыва %s"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "немагчыма стварыць лучыва %s"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "немагыма адчыніць %s для чытаньня"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "памылка запісу"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Невядомая сыстэмная памылка"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: выбар `%s' неадназначны\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: выбар `%s' неадназначны\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: нераспазнаны выбар `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: выбар `%c%s' не дазваляе довад\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: выбар `%s' патрабуе довад\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: нерэчаісны выбар -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: выбар патрабуе довад -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "немагчыма стварыць лучыва %s"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: збой seek"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: збой seek"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: збой seek"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "Стваральнік %s.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Паведамляйце пра памылкі на <%s>.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Паведамляйце пра памылкі на <%s>.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Довады, абавязковыя для доўгіх выбараў, абавязковыя й для кароткіх.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Выкарыстаньне: %s [ВЫБАР]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Паспрабуйце \"%s --help\" для больш падрабязных зьвестак.\n"
+
+#~ msgid "NAME"
+#~ msgstr "НАЗВА"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "зашмат довадаў\n"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "памылка чытаньня"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "немагыма адчыніць %s для чытаньня"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "памылка чытаньня %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "памылка запісу %s"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "памылка чытаньня %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "памылка адкрыцьця"
+
+#~ 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 "socket"
+
+#~ msgid "message queue"
+#~ msgstr "чарга паведамленьняў"
+
+#~ msgid "semaphore"
+#~ msgstr "сэмафор"
+
+#~ msgid "shared memory object"
+#~ msgstr "абьект з агульнай памяцьцю"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "абьект з агульнай памяцьцю"
+
+#~ msgid "weird file"
+#~ msgstr "лёсавы файл"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fifo файлы непадтрымліваюцца"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fifo файлы непадтрымліваюцца"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fifo файлы непадтрымліваюцца"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "памылка запісу"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Невядомая сыстэмная памылка"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: выбар `--%s' не дазваляе довад\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: нераспазнаны выбар `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: недапушчальны выраб -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: выбар `-W %s' неадназначыны\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: выбар `-W %s' не дазваляе довад\n"
+
+#~ msgid "block size"
+#~ msgstr "памер кавалку"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s існуе, але гэта ня тэчка"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "немагчыма зьмяніць уладальніка й/ці групу %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "немагчыма стварыць тэчку %s"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "немагчыма перайсьці да тэчкі %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "немагчыма зьмяніць правы %s"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "збой пры захаваньні правоў для %s"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: нерэчаісны звычайны выраз: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "нерэчаісны знак %s у радку рэжыму %s"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "памяць вычарпана"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: нерэчаісны звычайны выраз: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "памылка ў пошуку звычайнага выразу"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: нерэчаісны звычайны выраз: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "памылка ў пошуку звычайнага выразу"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[тТ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[нН]"
+
+#~ 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 "cannot get the login group of a numeric UID"
+#~ msgstr "немагчыма атрымаць уліковую групу лічбавага UID"
+
+#~ msgid "string comparison failed"
+#~ msgstr "памылка параўнаньня радку"
+
+#~ 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."
diff --git a/gnulib-po/bg.gmo b/gnulib-po/bg.gmo
new file mode 100644
index 0000000..3d5e0c8
--- /dev/null
+++ b/gnulib-po/bg.gmo
Binary files differ
diff --git a/gnulib-po/bg.po b/gnulib-po/bg.po
new file mode 100644
index 0000000..a57bfe1
--- /dev/null
+++ b/gnulib-po/bg.po
@@ -0,0 +1,936 @@
+# Bulgarian translation of GNU gnulib po-file.
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Alexander Shopov <ash@kambanaria.org>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2412\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-15 07:06+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\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-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "аргументът „%s“ на опцията „%s“ е неправилен"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "аргументът „%s“ на опцията „%s“ не е еднозначен"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Възможните аргументи са:"
+
+#: lib/bitset/stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u побитови заделяния, освободени са %u (%.2f%%).\n"
+
+#: lib/bitset/stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u побитови задавания, кеширани са %u (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u побитови изчиствания, кеширани са %u (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u побитови проби, кеширани са %u (%.2f%%)\n"
+
+#: lib/bitset/stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u побитови извеждания\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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Побитова статистика:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Натрупани изпълнения = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "файлът със статистиките не може да се прочете"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "неправилен размер на файла със статистиките\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "файлът със статистиките не може да се запише"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "файлът със статистиките не може да се отвори за запис"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "грешка при запис"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Неизвестна системна грешка"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: опцията „%s%s“ не е еднозначна\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: опцията „%s%s“ не е еднозначна.  Възможности:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: непозната опция „%s%s“\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: опцията „%s%s“ се използва без аргументи\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: опцията „%s%s“ изисква аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неправилна опция — „%c“\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: опцията изисква аргумент — „%c“\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "“"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "не може да се създаде програмен канал"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "дъщерният процес „%s“ завърши неуспешно"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Време за изпълнение [секунди]"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "потребителско време"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "системно време"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "общо време"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "неуспешно изпълнение на „_open_osfhandle“"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+"файловият дескриптор %d не може да се възстанови: неуспешно изпълнение на "
+"функцията „dup2“"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "дъщерен процес „%s“"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "дъщерният процес „%s“ получи фатален сигнал %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Пакетирано от %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Пакетирано от %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "License GPLv3+: GNU GPL version 3 or later <https://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 ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Лиценз — Общ публичен лиценз на GNU (GNU GPL), както е публикуван от "
+#~ "Фондацията\n"
+#~ "за свободен софтуер — версия 3 на лиценза или (по ваше решение) по-късна "
+#~ "версия.\n"
+#~ "<https://gnu.org/licenses/gpl.html>\n"
+#~ "Тази програма е свободен софтуер. Можете да я разпространявате и/или "
+#~ "променяте.\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"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Докладвайте грешки в програмата на адрес: %s\n"
+#~ "Докладвайте грешки в превода на адрес: <dict@ludost.net>\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Докладвайте грешки в „%s“ на адрес: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Уеб страница на „%s“: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Обща помощ за програмите на GNU: <https://www.gnu.org/gethelp/>\n"
+
+#~ 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: 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 " [ОПЦИЯ…]"
+
+#~ 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"
+#~ "За грешки в българския превод на <dict@fsa-bg.org>.\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 "СЕКУНДИ"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "спиране за толкова СЕКУНДИ (стандартно е 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 file %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 "cannot open backup file %s for writing"
+#~ 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 mono"
+#~ msgstr "Липсва компилатор за C#, инсталирайте „mono“"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Липсва виртуална машина за C#, инсталирайте „mono“"
+
+#~ msgid "unbalanced ["
+#~ msgstr "„[“ без еш"
+
+#~ msgid "invalid character class"
+#~ msgstr "неправилен клас знаци"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "клас знаци се указва чрез „[[:ИМЕ:]]“, а не „[:ИМЕ:]“"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавършена екранираща последователност чрез „\\“"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "неправилно съдържание в „\\{\\}“"
+
+#~ msgid "regular expression too big"
+#~ msgstr "прекалено голям регулярен израз"
+
+#~ msgid "unbalanced ("
+#~ msgstr "„(“ без еш"
+
+#~ msgid "no syntax specified"
+#~ msgstr "не е зададен синтаксис"
+
+#~ msgid "unbalanced )"
+#~ msgstr "„)“ без еш"
+
+#~ msgid "regular empty file"
+#~ msgstr "празен, обикновен файл"
+
+#~ msgid "regular file"
+#~ msgstr "обикновен файл"
+
+#~ msgid "directory"
+#~ msgstr "директория"
+
+#~ msgid "symbolic link"
+#~ msgstr "символна връзка"
+
+#~ msgid "message queue"
+#~ msgstr "опашка за съобщения"
+
+#~ msgid "semaphore"
+#~ msgstr "семафор"
+
+#~ msgid "shared memory object"
+#~ msgstr "споделен обект в паметта"
+
+#~ msgid "typed memory object"
+#~ msgstr "типов обект в паметта"
+
+#~ msgid "block special file"
+#~ msgstr "блоков специален файл"
+
+#~ msgid "character special file"
+#~ msgstr "знаков специален сайт"
+
+#~ msgid "contiguous data"
+#~ msgstr "последователни данни"
+
+#~ msgid "fifo"
+#~ msgstr "програмен канал"
+
+#~ msgid "door"
+#~ msgstr "порта"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "мултиплексиран блоков специален файл"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "мултиплексиран знаков специален файл"
+
+#~ msgid "multiplexed file"
+#~ msgstr "мултиплексиран файл"
+
+#~ msgid "named file"
+#~ msgstr "именован файл"
+
+#~ msgid "network special file"
+#~ msgstr "мрежов специален файл"
+
+#~ msgid "migrated file with data"
+#~ msgstr "мигриран файл с данни"
+
+#~ msgid "migrated file without data"
+#~ msgstr "мигриран файл без данни"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "гнездо"
+
+#~ msgid "whiteout"
+#~ msgstr "припокриващо изтриване"
+
+#~ msgid "weird file"
+#~ msgstr "странен файл"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Този вид адреси за името на хоста не се поддържат"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Временен проблем при намиране на IP-адреса на хост"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Неправилна стойност за „ai_flags“"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Окончателен неуспех при намиране на IP-адреса на хост"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "посочването на вид адреси („ai_family“) не се поддържа"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Неуспешно заделяне на памет"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Няма IP-адрес с посоченото име на хост"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Името или услугата са непознати"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr ""
+#~ "Името на услугата не се поддържа за използвания вид гнездо („ai_socktype“)"
+
+#~ 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 "invalid source_version argument to compile_java_class"
+#~ msgstr ""
+#~ "неправилен аргумент „source_version“ за версията на кода към командата "
+#~ "„compile_java_class“"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr ""
+#~ "неправилен аргумент „target_version“ за версията на целта към командата "
+#~ "„compile_java_class“"
+
+#~ 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“ или задайте такъв с "
+#~ "променливата „JAVAC“"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Липсва виртуална машина за Java, инсталирайте „gcj“ или задайте такава с "
+#~ "променливата „JAVA“"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s: вх./изх. грешка в дъщерен процес"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "не може да се получи информация със „stat“ за „%s“"
+
+#~ 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“"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "неуспешно създаване н нишки"
+
+#~ 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 "Няма предхождащ регулярен израз"
+
+# RECHECK
+#~ msgid "^[yY]"
+#~ msgstr "^[yYдДщЩ]"
+
+# RECHECK
+#~ msgid "^[nN]"
+#~ msgstr "^[nNнНхХ]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "задаване на права на „%s“"
+
+#~ msgid "Hangup"
+#~ msgstr "Прекъсване на връзката"
+
+#~ msgid "Interrupt"
+#~ msgstr "Прекъсване"
+
+#~ msgid "Quit"
+#~ msgstr "Спиране"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Неправилна инструкция"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Прекъсване за трасиране"
+
+#~ msgid "Aborted"
+#~ msgstr "Преустановяване"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Изключение от плаваща запетая"
+
+#~ msgid "Killed"
+#~ msgstr "Убит"
+
+#~ msgid "Bus error"
+#~ msgstr "Грешка в шината"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Грешка в разделянето"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Прекъснат програмен канал"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Аларма"
+
+#~ msgid "Terminated"
+#~ msgstr "Прекратен"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Спешно вх./изх. състояние"
+
+#~ 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 "Възможен вх./изх."
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Надвишаване на процесорното време"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Надвишаване на размера на файл"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Изтекъл виртуален таймер"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Изтекъл профилиращ таймер"
+
+#~ msgid "Window changed"
+#~ msgstr "Преоразмерен прозорец"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Потребителски сигнал 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Потребителски сигнал 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Емулирана инструкция"
+
+#~ 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 "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Уеб страница на „%s“: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "неуспешно задаване на вид на файла като текстов/двоичен"
+
+#~ 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 "string comparison failed"
+#~ msgstr "неуспешно сравнение на низове"
+
+#~ 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 "standard file descriptors"
+#~ 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/gnulib-po/bison-gnulib.pot b/gnulib-po/bison-gnulib.pot
new file mode 100644
index 0000000..a588271
--- /dev/null
+++ b/gnulib-po/bison-gnulib.pot
@@ -0,0 +1,222 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the GNU bison package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU bison 3.5\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+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"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr ""
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr ""
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr ""
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr ""
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr ""
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
diff --git a/gnulib-po/boldquot.sed b/gnulib-po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/gnulib-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/gnulib-po/ca.gmo b/gnulib-po/ca.gmo
new file mode 100644
index 0000000..73eded0
--- /dev/null
+++ b/gnulib-po/ca.gmo
Binary files differ
diff --git a/gnulib-po/ca.po b/gnulib-po/ca.po
new file mode 100644
index 0000000..c662bd3
--- /dev/null
+++ b/gnulib-po/ca.po
@@ -0,0 +1,612 @@
+# GNU Mailutils Catalan translation.
+# Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the mailutils package.
+# Jordi Mallach <jordi@gnu.org>, 2002, 2003, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mailutils 0.6.90\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2005-05-21 04:10+0200\n"
+"Last-Translator: Jordi Mallach <jordi@gnu.org>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+# Usa quote() en els 2 args.  ivb
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "l'argument %s no és vàlid per %s"
+
+# Usa quote() en els 2 args.  ivb
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "l'argument %s és ambigu per %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Els arguments vàlids són:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "No es pot crear la llista"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "No es pot crear la llista"
+
+# Usa quote().  ivb
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "no s'ha pogut obrir %s per a escriure"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "error d'escriptura"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "S'ha produït un error desconegut del sistema"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: l'opció «%s» és ambigua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: l'opció «%s» és ambigua\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: l'opció «%c%s» no es reconeix\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: l'opció «%c%s» no accepta arguments\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: l'opció «%s» requereix un argument\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: l'opció no és vàlida -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: l'opció requereix un argument -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "la memòria s'ha exhaurit"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "No es pot crear la llista"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: ha fallat el desplaçament"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: ha fallat el desplaçament"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: ha fallat el desplaçament"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Escrit per %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Escrit per %s i %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Escrit per %s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s\n"
+#~ "i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s, %s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Escrit per %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s i d'altres.\n"
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Informeu dels errors a %s.\n"
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Informeu dels errors a %s.\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: El paràmetre ARGP_HELP_FMT requereix un valor"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: El paràmetre d'ARGP_HELP_FMT és desconegut"
+
+# pfft, escombraries... jm
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Hi ha escombraries en ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Els arguments necessaris o opcionals per a les opcions llargues també són "
+#~ "necessaris o opcionals per a qualsevol opció curta corresponent."
+
+#~ msgid "Usage:"
+#~ msgstr "Forma d'ús:"
+
+#~ msgid "  or: "
+#~ msgstr "  ó: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPCIÓ...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Proveu «%s --help» o «%s --usage» per a obtindre més informació.\n"
+
+#~ msgid "Give this help list"
+#~ msgstr "Mostra aquesta llista d'ajuda"
+
+#~ msgid "Give a short usage message"
+#~ msgstr "Mostra un curt missatge sobre l'ús"
+
+#~ msgid "NAME"
+#~ msgstr "NOM"
+
+#~ msgid "Set the program name"
+#~ msgstr "Estableix el nom del programa"
+
+#, fuzzy
+#~ msgid "SECS"
+#~ msgstr "SEGONS"
+
+#~ msgid "Hang for SECS seconds (default 3600)"
+#~ msgstr "Penja durant SEGS segons (per defecte 3600)"
+
+#~ msgid "Print program version"
+#~ msgstr "Mostra la versió del programa"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(ERROR DEL PROGRAMA) Cap versió coneguda!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Massa arguments\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(ERROR DEL PROGRAMA) L'opció s'hauria d'haver reconegut!?"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "error de lectura"
+
+# "underflow", bonico el paraulo.. jm
+#, fuzzy
+#~ msgid "stack overflow"
+#~ msgstr "pila buida"
+
+# Usa quote().  ivb
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "no s'ha pogut obrir %s per llegir"
+
+# uniq no usa quote().  ivb
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "error en llegir %s"
+
+# uniq no usa quote().  ivb
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "error en escriure %s"
+
+# uniq no usa quote().  ivb
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "error en llegir %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "no s'ha pogut obrir"
+
+#~ msgid "regular empty file"
+#~ msgstr "fitxer ordinari buit"
+
+#~ msgid "regular file"
+#~ msgstr "fitxer ordinari"
+
+#~ msgid "directory"
+#~ msgstr "directori"
+
+#~ msgid "block special file"
+#~ msgstr "fitxer especial de blocs"
+
+#~ msgid "character special file"
+#~ msgstr "fitxer especial de caràcters"
+
+#~ msgid "fifo"
+#~ msgstr "cua FIFO"
+
+#~ msgid "symbolic link"
+#~ msgstr "enllaç simbòlic"
+
+#~ msgid "socket"
+#~ msgstr "connector"
+
+#~ msgid "message queue"
+#~ msgstr "cua de missatges"
+
+#~ msgid "semaphore"
+#~ msgstr "semàfor"
+
+#~ msgid "shared memory object"
+#~ msgstr "objecte de memòria compartida"
+
+#~ msgid "typed memory object"
+#~ msgstr "objecte de memòria amb tipus"
+
+#~ msgid "weird file"
+#~ msgstr "fitxer estrany"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "els fitxers FIFO no són suportats"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "els fitxers FIFO no són suportats"
+
+#, fuzzy
+#~ msgid "Memory allocation failure"
+#~ msgstr "L'operació ha fallat"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "els fitxers FIFO no són suportats"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "error d'escriptura"
+
+#, fuzzy
+#~ msgid "Request not canceled"
+#~ msgstr "No es troba l'element sol·licitat"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "S'ha produït un error desconegut del sistema"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opció «--%s» no accepta arguments\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: l'opció «--%s» no es reconeix\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: l'opció és il·legal -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: l'opció «-W %s» és ambigua\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opció «-W %s» no accepta arguments\n"
+
+# FIXME: xmalloc.h: _STRTOL_ERROR lacks i18n.  ivb
+# Açò quedarà com «invalid mida de bloc `MIDA'» mentre no ho facen.  ivb
+#~ msgid "block size"
+#~ msgstr "mida de bloc"
+
+# Els 4 usen quote().  ivb
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s existeix però no és un directori"
+
+# Els 3 usen quote().  ivb
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "no s'ha pogut canviar el propietari o grup de %s"
+
+# Els 3 usen quote().  ivb
+#~ msgid "cannot create directory %s"
+#~ msgstr "no s'ha pogut crear el directori %s"
+
+# Usa quote().  ivb
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "no s'ha pogut canviar al directori %s"
+
+# Els 2 usen quote().  ivb
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "no s'han pogut canviar els permisos de %s"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "openat: no s'ha pogut registrar el directori de treball actual"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "no s'ha pogut tornar al directori inicial de treball"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "%s: no s'ha pogut obrir per a escriure"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: l'expressió regular no és vàlida: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "la classe de caràcters «%s» no és vàlida"
+
+#, fuzzy
+#~ msgid "Invalid back reference"
+#~ msgstr "El número no és vàlid"
+
+#, fuzzy
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "L'opció no és vàlida -- %s"
+
+#, fuzzy
+#~ msgid "Invalid range end"
+#~ msgstr "el rang de pàgines no és vàlid: «%s»"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "la memòria s'ha exhaurit"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: l'expressió regular no és vàlida: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "error en la recerca de l'expressió regular"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: l'expressió regular no és vàlida: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "error en la recerca de l'expressió regular"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[sS]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "la funció iconv() no és útil"
+
+#~ msgid "iconv function not available"
+#~ msgstr "la funció iconv() no es troba disponible"
+
+#~ msgid "character out of range"
+#~ msgstr "el caràcter es troba fora del rang"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "l'usuari no és vàlid"
+
+#~ msgid "invalid group"
+#~ msgstr "el grup no és vàlid"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "no s'ha pogut obtenir el grup d'entrada d'un UID numèric"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aquest és programari lliure; podeu redistribuir-lo i/o modificar-lo sota "
+#~ "els\n"
+#~ "termes de la Llicència Pública General GNU tal i com ha estat publicada "
+#~ "per la\n"
+#~ "Free Software Foundation; bé sota la versió 2 de la Llicència o bé (si "
+#~ "ho\n"
+#~ "preferiu) sota qualsevol versió posterior.\n"
+#~ "\n"
+
+#~ msgid "string comparison failed"
+#~ msgstr "ha fallat la comparació de cadenes"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Establiu la variable LC_ALL a «C» per evitar el problema."
+
+# Usa quote() en les 2.  ivb
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Les cadenes comparades eren %s i %s."
diff --git a/gnulib-po/cs.gmo b/gnulib-po/cs.gmo
new file mode 100644
index 0000000..1bdd00c
--- /dev/null
+++ b/gnulib-po/cs.gmo
Binary files differ
diff --git a/gnulib-po/cs.po b/gnulib-po/cs.po
new file mode 100644
index 0000000..329540a
--- /dev/null
+++ b/gnulib-po/cs.po
@@ -0,0 +1,867 @@
+# Czech translations for GNU textutils
+# This file is distributed under the same license as the gnulib package.
+# Copyright (C) 1996 Free Software Foundation, Inc.
+#
+# Vladimir Michl <Vladimir.Michl@seznam.cz>, 1996.
+# Marek Černocký <marek@manet.cz>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-12-04 08:50+0100\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument %s je pro %s neplatný"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument %s je pro %s nejednoznačný"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Platné argumenty jsou:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "nelze vytvořit rouru"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "nelze vytvořit rouru"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "nelze otevřít záložní soubor „%s“ pro zápis"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "chyba při zápisu"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Neznámá chyba systému"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: přepínač „-W %s“ není jednoznačný\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: přepínač „%s“ není jednoznačný; možnosti:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: neznámý přepínač „%c%s“\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: přepínač „%c%s“ musí být zadán bez argumentu\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: přepínač „--%s“ vyžaduje argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neplatný přepínač -- „%c“\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: přepínač vyžaduje argument -- „%c“\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "paměť byla vyčerpána"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "“"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "nelze vytvořit rouru"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "selhal podřízený proces %s"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Alarm od hodin"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "selhala funkce _open_osfhandle"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "nelze obnovit fd %d: selhala funkce dup2"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "podřízený proces %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "podřízený proces %s obdržel kritický signál %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Zabalil %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Zabalil %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl."
+#~ "html>.\n"
+#~ "Jde o svobodný software: můžete jej volně měnit a šířit.\n"
+#~ "Nejsou poskytovány ŽÁDNÉ ZÁRUKY, mimo těch daných zákonem.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Napsal %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Napsali %s a %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Napsali %s, %s a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s\n"
+#~ "a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s, %s a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s, %s, %s a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s a %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Napsali %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s a další.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Chyby hlaste na: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Chyby balíčku %s hlaste na: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Domovská stránka projektu %s: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Obecná nápověda k používání softwaru GNU: <http://www.gnu.org/gethelp/>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: hodnota %s je menší nebo rovna %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: Parametr ARGP_HELP_FMT vyžaduje hodnotu"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: Parametr ARGP_HELP_FMT musí být kladný"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Neznámý parametr ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Nesmysly v ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Povinné či volitelné, argumenty pro dlouhé přepínače jsou povinné či "
+#~ "volitelné, i pro případné odpovídající krátké přepínače."
+
+#~ msgid "Usage:"
+#~ msgstr "Použití:"
+
+#~ msgid "  or: "
+#~ msgstr "  nebo:"
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [PŘEPÍNAČ…]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Více informací získáte příkazem „%s --help“ nebo „%s --usage“.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Chyby hlaste na %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "poskytne tuto přehledovou nápovědu"
+
+#~ msgid "give a short usage message"
+#~ msgstr "poskytne stručnou informaci o používání"
+
+#~ msgid "NAME"
+#~ msgstr "NÁZEV"
+
+#~ msgid "set the program name"
+#~ msgstr "nastavit název programu"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "zastavit na SEK sekund (výchozí je 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "vypsat verzi programu"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(CHYBA PROGRAMU) Neznámá verze!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Příliš mnoho argumentů\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(CHYBA PROGRAMU) Měl by být rozpoznán přepínač!?"
+
+#~ msgid "program error"
+#~ msgstr "chyba programu"
+
+#~ msgid "stack overflow"
+#~ msgstr "přetečení zásobníku"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "nelze najít dočasnou složku, zkusí se nastavit $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "nelze vytvořit dočasnou složku pomocí šablony „%s“"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "nelze odstranit dočasný soubor %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "nelze odstranit dočasnou složku %s"
+
+#~ msgid "error closing file"
+#~ msgstr "chyba při zavírání souboru"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "zachování práv k souboru %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "chyba při otevírání souboru „%s“ pro čtení"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "chyba při čtení souboru „%s“"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "chyba při zápisu do souboru „%s“"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "chyba po přečtení souboru „%s“"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "selhala funkce fdopen()"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "Překladač C# nebyl nalezen, zkuste nainstalovat pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "Virtuální stroj C# nebyl nalezen, zkuste nainstalovat pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "prázdný běžný soubor"
+
+#~ msgid "regular file"
+#~ msgstr "běžný soubor"
+
+#~ msgid "directory"
+#~ msgstr "složka"
+
+#~ msgid "block special file"
+#~ msgstr "speciální soubor blokového zařízení"
+
+#~ msgid "character special file"
+#~ msgstr "speciální soubor znakového zařízení"
+
+#~ msgid "fifo"
+#~ msgstr "fronta fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolický odkaz"
+
+#~ msgid "socket"
+#~ msgstr "soket"
+
+#~ msgid "message queue"
+#~ msgstr "fronta zpráv"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "sdílený paměťový objekt"
+
+#~ msgid "typed memory object"
+#~ msgstr "typový paměťový objekt"
+
+#~ msgid "weird file"
+#~ msgstr "podivný soubor"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Pro název počítače není rodina adres podporována"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Dočasné selhání při překladu názvu"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Špatná hodnota pro příznaky ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Nenapravitelné selhání při překladu názvu"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family není podporována"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Selhalo přidělení paměti"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "K názvu počítače není přiřazena žádná adresa"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Název nebo služba nejsou známy"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Název služby není podporován pro ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype není podporován"
+
+#~ msgid "System error"
+#~ msgstr "Chyba systému"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Vyrovnávací paměť argumentů je příliš malá"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Probíhá zpracování požadavku"
+
+#~ msgid "Request canceled"
+#~ msgstr "Požadavek byl zrušen"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Požadavek nebyl zrušen"
+
+#~ msgid "All requests done"
+#~ msgstr "Všechny požadavky dokončeny"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Přerušeno signálem"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Řetězec s parametry není správně kódován"
+
+#~ msgid "Unknown error"
+#~ msgstr "Neznámá chyba"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: přepínač „--%s“ musí být zadán bez argumentu\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: neznámý přepínač „--%s“\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: přepínač „-W %s“ musí být zadán bez argumentu\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: přepínač „-W %s“ vyžaduje argument\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "neplatný argument source_version pro compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "neplatný argument target_version pro compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "selhalo vytvoření „%s“"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "chyba při zápisu souboru „%s“"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Překladač jazyka Java nebyl nalezen, zkuste nainstalovat gcj nebo "
+#~ "nastavit proměnnou $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Virtuální stroj Java nebyl nalezen, zkuste nainstalovat gij nebo nastavit "
+#~ "proměnnou $JAVAC"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "V/V chyba podřízeného procesu %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "nelze změnit oprávnění k %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "nelze vytvořit složku %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "nelze zaznamenat aktuální pracovní složku"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "selhalo vrácení počáteční pracovní složky"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Selhalo otevření /dev/zero pro čtení"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "vytvoření čtecího vlákna selhalo"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "nelze nastavit neblokující V/V pro podřízený proces %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "komunikace s podřízeným procesem %s selhala"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "zápis do podřízeného procesu %s selhal"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "čtení z podřízeného procesu %s selhalo"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "vytvoření vlákna selhalo"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc, ois Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Úspěch"
+
+#~ msgid "No match"
+#~ msgstr "Žádná shoda"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "neplatný regulární výraz"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "neplatný znak pro porovnávání"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "neplatný název třídy znaku"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Zpětné lomítko na konci"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Neplatný zpětný odkaz"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Chybí odpovídající závorka k [ nebo [^"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Chybí odpovídající závorka k ( nebo \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Chybí odpovídající závorka k \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Neplatný obsah \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Neplatný konec rozsahu"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Paměť byla vyčerpána"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Neplatný předchozí regulární výraz"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Předčasný konec regulárního výrazu"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Regulární výraz je příliš velký"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Chybí odpovídající závorka k ) nebo \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Žádný předchozí regulární výraz"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[aAyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "nastavení oprávnění k %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Zavěsit"
+
+#~ msgid "Interrupt"
+#~ msgstr "Přerušení"
+
+#~ msgid "Quit"
+#~ msgstr "Ukončit"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Neplatná instrukce"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Krokování/bod přerušení"
+
+#~ msgid "Aborted"
+#~ msgstr "Přerušen"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Výjimka ve výpočtu s plovoucí čárkou"
+
+#~ msgid "Killed"
+#~ msgstr "Zabit"
+
+#~ msgid "Bus error"
+#~ msgstr "Chyba sběrnice"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Porušení ochrany paměti"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Porušená roura"
+
+#~ msgid "Terminated"
+#~ msgstr "Ukončen"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Urgentní stav V/V"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Pozastavit (signál)"
+
+#~ msgid "Stopped"
+#~ msgstr "Pozastaven"
+
+#~ msgid "Continued"
+#~ msgstr "Pokračuje"
+
+#~ msgid "Child exited"
+#~ msgstr "Potomek skončil"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Pozastaven (vstup tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Pozastaven (výstup tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Možný V/V"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Překročeno časové omezení procesoru"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Překročeno omezení velikosti souboru"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtuální časovač doběhl"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Profilovací časovač doběhl"
+
+#~ msgid "Window changed"
+#~ msgstr "Změnilo se okno"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Uživatelsky definovaný signál 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Uživatelsky definovaný signál 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Krokování emulátoru (EMT)"
+
+#~ msgid "Bad system call"
+#~ msgstr "Chybné systémové volání"
+
+#~ msgid "Stack fault"
+#~ msgstr "Porušení zásobníku"
+
+#~ msgid "Information request"
+#~ msgstr "Žádost o informace"
+
+#~ msgid "Power failure"
+#~ msgstr "Selhalo napájení"
+
+#~ msgid "Resource lost"
+#~ msgstr "Prostředek přestal být k dispozici"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "chyba zápisu do zavřené roury nebo soketu"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Signál reálného času %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Neznámý signál %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "funkce iconv není použitelná"
+
+#~ msgid "iconv function not available"
+#~ msgstr "funkce iconv není dostupná"
+
+#~ msgid "character out of range"
+#~ msgstr "znak je mimo rozsah"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "znak U+%04X nelze převést do místní znakové sady"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "znak U+%04X nelze převést do místní znakové sady: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "neplatný uživatel"
+
+#~ msgid "invalid group"
+#~ msgstr "neplatná skupina"
+
+#~ msgid "invalid spec"
+#~ msgstr "neplatné zadání"
+
+#~ msgid "unable to display error message"
+#~ msgstr "nelze zobrazit chybovou zprávu"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Domovská stránka projektu %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "standardní vstup"
+
+#~ msgid "stdout"
+#~ msgstr "standardní výstup"
+
+#~ msgid "stderr"
+#~ msgstr "standardní chybový výstup"
+
+#~ msgid "unknown stream"
+#~ msgstr "neznámý proud"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "selhalo opětovné otevření %s v režimu %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "selhalo porovnání řetězců"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Problém obejdete nastavením LC_ALL='C'."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Porovnávané řetězce byly %s a %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "nelze provést formátovaný výstup"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "neplatný argument „%3$s“ pro %1$s%2$s"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "neplatná přípona v argumentu „%3$s“ pro %1$s%2$s"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "argument „%3$s“ pro %1$s%2$s je příliš velký"
diff --git a/gnulib-po/da.gmo b/gnulib-po/da.gmo
new file mode 100644
index 0000000..e70552d
--- /dev/null
+++ b/gnulib-po/da.gmo
Binary files differ
diff --git a/gnulib-po/da.po b/gnulib-po/da.po
new file mode 100644
index 0000000..91f541e
--- /dev/null
+++ b/gnulib-po/da.po
@@ -0,0 +1,871 @@
+# Danish messages for gnulib.
+# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Peter Antman <peter.antman@abc.se>, 1997.
+# Thomas Olsson <cid95tho@lustudat.student.lu.se>, 1997.
+# Daniel Resare <daniel@resare.com>, 1999, 2000.
+# Göran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010.
+# Keld Simonsen <keld@keldix.com>, 2011
+#
+# $Revision: 1.8 $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-01-20 22:11+0100\n"
+"Last-Translator: Keld Simonsen <keld@keldix.com>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "Ugyldigt argument %s til %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "flertydigt argument %s til %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "gyldige argumenter er:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "kan ikke oprette datakanal"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "kan ikke oprette datakanal"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "kan ikke åbne sikkerhedskopifil '%s' for skrivning"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "skrivefejl"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Ukendt systemfejl"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: flaget '%s' er flertydigt\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: flaget '%s' er flertydigt\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: ukendt flag '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: flaget '%c%s' tager intet argument\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: flaget '%s' kræver et argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ugyldig flag -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaget kræver et argument -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "hukommelsen opbrugt"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "'"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "kan ikke oprette datakanal"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s-underproces mislykkedes"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Alarmklokke"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle mislykkedes"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "kan ikke genskabe fb %d: dup2 mislykkedes"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-underproces"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-underproces fik ødelæggende signal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Pakket af %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Pakket af %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/"
+#~ "gpl.html>.\n"
+#~ "Dette er frit programmel: du må ændre og videredistribuere det.\n"
+#~ "Der gives INGEN GARANTI, så vidt lov tillader.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Skrevet af %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Skrevet af %s og %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Skrevet af %s, %s og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s\n"
+#~ "og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s, %s og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s, %s, %s og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s og %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Skrevet af %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s med flere.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapportér fejl til: %s\n"
+#~ "Sende synspunkter på oversættelsen til: tp-sv@listor.tp-sv.se\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Rapportér %s-fejl til: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s hjemmeside: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Almindelig hjælp til at bruge GNU-programmer: <http://www.gnu.org/gethelp/"
+#~ ">\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: værdien på %s er mindre end eller lig med %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT-parameteren kræver en værdi"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT-parameteren skal være positiv"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Ukendt ARGP_HELP_FMT-parameter"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Snavs i ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Obligatoriske eller valgfrie argumenter til lange flag er også "
+#~ "obligatoriske eller valgfrie for tilsvarende korte flag."
+
+#~ msgid "Usage:"
+#~ msgstr "Brug:"
+
+#~ msgid "  or: "
+#~ msgstr "   eller:  "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [FLAG...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Forsøg med '%s --help' eller '%s --usage' for mere information.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "Rapportér fejl til %s.\n"
+#~ "Send synspunkter på oversættelsen til <dansk@dansk-gruppen.dk>\n"
+
+#~ msgid "give this help list"
+#~ msgstr "giv denne hjælpeliste"
+
+#~ msgid "give a short usage message"
+#~ msgstr "giv en kort meddelelse om brug"
+
+#~ msgid "NAME"
+#~ msgstr "NAVN"
+
+#~ msgid "set the program name"
+#~ msgstr "angiv progravnavnet"
+
+#~ msgid "SECS"
+#~ msgstr "S"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "hæng i S sekunder (som standard 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "udskriv programversion"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMFEJL) Ingen version kendt!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: For mange argumenter\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMFEJL) Flaget burde være blevet genkendt!?"
+
+#~ msgid "program error"
+#~ msgstr "programfejl"
+
+#~ msgid "stack overflow"
+#~ msgstr "stakoverløb"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "kan ikke finde et temporært katalog, forsøg at sætte $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "kan ikke oprette et temporært katalog ved brug af skabelonen '%s'"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "kan ikke fjerne temporær fil %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "kan ikke fjerne temporært katalog %s"
+
+#~ msgid "error closing file"
+#~ msgstr "fejl ved lukning af fil"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "bevarer rettigheder på %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "fejl ved åbning af '%s' for læsning"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "fejl ved læsning af '%s'"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "fejl ved skrivning af '%s'"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "fejl efter læsning af '%s'"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() mislykkedes"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "C#-oversætter ikke fundet, forsøg at installere pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "virtuel C#-maskine ikke fundet, forsøg at installere pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "tom normal fil"
+
+#~ msgid "regular file"
+#~ msgstr "normal fil"
+
+#~ msgid "directory"
+#~ msgstr "katalog"
+
+#~ msgid "block special file"
+#~ msgstr "blokspecialfil"
+
+#~ msgid "character special file"
+#~ msgstr "tegnspecialfil"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolsk lænke"
+
+#~ msgid "socket"
+#~ msgstr "sokkel (socket)"
+
+#~ msgid "message queue"
+#~ msgstr "meddelelsekø"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "objekt af delt hukommelse"
+
+#~ msgid "typed memory object"
+#~ msgstr "objekt af typet hukommelse"
+
+#~ msgid "weird file"
+#~ msgstr "mærkelig fil"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Adressefamilien for værtsnavnet understøttes ikke"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Midlertidig fejl i navneopslag"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Fejlagtig værdi for ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Ureparérbar fejl i navneopslag"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family understøttes ikke"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Hukommelsesallokeringsfejl"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Ingen adresse associeret med værtsnavnet"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Navn eller tjeneste ikke kendt"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname understøttes ikke for ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype understøttes ikke"
+
+#~ msgid "System error"
+#~ msgstr "Systemfejl"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumentbufferen for lille"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Bearbejder pågående anmodning"
+
+#~ msgid "Request canceled"
+#~ msgstr "Anmodning annuleret"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Anmodning ikke annuleret"
+
+#~ msgid "All requests done"
+#~ msgstr "Alle anmodninger udført"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Afbrudt af et signal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parameterstreng ikke korrekt kodet"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ukendt fejl"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: flaget '--%s' tager intet argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: ukendt flag '--%s'\n"
+
+#~ msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgstr "%s: flaget '-W %s' er flertydigt\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: flaget '-W %s' tager intet argument\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "ugyldigt source_version-argument til compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "ugyldigt target_version-argument til compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "det gik ikke at oprette '%s'"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "fejl ved skrivning af filen '%s'"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Javaoversætter ikke fundet, forsøg at installere gcj eller sætte $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Virtuel Javamaskine ikke fundet, forsøg at installere gij eller sætte "
+#~ "$JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s-underproces I/O-fejl"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kan ikke ændre rettigheder på %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "kan ikke oprette kataloget %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "kan ikke notere aktuelt arbejdskatalog"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "kunne ikke gå tilbage til det oprindelige arbejdskatalog"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Mislykkedes med at åbne /dev/zero for læsning"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "oprettelse af læsetråd mislykkedes"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "kan ikke opsætte ikke-blokerende I/O til %s-underproces"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "kommunikation med %s-underproces mislykkedes"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "skrivning til %s-underproces mislykkedes"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "læsning fra %s-underproces mislykkedes"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "underproces %s afsluttet med slutstatus %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "oprettelse af tråde mislykkedes"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s-underproces afslutted med slutstatus %d"
+
+#~ msgid "Success"
+#~ msgstr "Lykkedes"
+
+#~ msgid "No match"
+#~ msgstr "Ingen træffer"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Fejlagtigt regulært udtryk"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Ugyldigt sorteringstegn"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Ugyldigt tegnklassenavn"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Afsluttende baglæns skråstreg"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Ugyldig bagudreference"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Ensomt [ eller [^"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Ensomt ( eller \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Ensomt \\\\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Ugyldigt indhold i \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Ugyldigt intervalslut"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Hukommelse opbrugt"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Fejlagtigt foregående regulært udtryk"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "For tidlig afslutning af regulært udtryk"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "For stort regulært udtryk"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Ensomt ) eller \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Intet foregående regulært udtryk"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yYjJ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "ændrer rettigheder på %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Lagt på"
+
+#~ msgid "Interrupt"
+#~ msgstr "Afbrudt"
+
+#~ msgid "Quit"
+#~ msgstr "Afslut"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Utilladt instruktion"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Sporings-/afbrudspunktsfælde"
+
+#~ msgid "Aborted"
+#~ msgstr "Afbrudt (abort)"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Undtagelse ved flydende tal"
+
+#~ msgid "Killed"
+#~ msgstr "Dræbt"
+
+#~ msgid "Bus error"
+#~ msgstr "Busfejl"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Segmenteringsfejl"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Brudt datakanal"
+
+#~ msgid "Terminated"
+#~ msgstr "Afsluttet"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Hastende I/O-situation"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Stoppet (signal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Stoppet"
+
+#~ msgid "Continued"
+#~ msgstr "Genoptaget"
+
+#~ msgid "Child exited"
+#~ msgstr "Barn afsluttede"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Stoppet (terminallæsning)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Stoppet (terminalskrivning)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O muligt"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Grænse på CPU-tid overskredet"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Grænse på filstørrelse overskredet"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Alarmklokke - virtuel tid - udløb"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Profileringsklokke udløb"
+
+#~ msgid "Window changed"
+#~ msgstr "Ændret vindue"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Brugersignal 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Brugersignal 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Emulatorfælde"
+
+#~ msgid "Bad system call"
+#~ msgstr "Fejlagtigt systemkald"
+
+#~ msgid "Stack fault"
+#~ msgstr "Stakfejl"
+
+#~ msgid "Information request"
+#~ msgstr "Informationsanmodning"
+
+#~ msgid "Power failure"
+#~ msgstr "Strømafbrud"
+
+#~ msgid "Resource lost"
+#~ msgstr "Tabt resurse"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "fejl ved skrivning til en lukket datakanal eller sokkel"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Realtidsignal %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Ukendt signal %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv-funktion ikke brugbar"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv-funktion ikke tilgængelig"
+
+#~ msgid "character out of range"
+#~ msgstr "tegn udenfor interval"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsæt"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsæt: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "ugyldig bruger"
+
+#~ msgid "invalid group"
+#~ msgstr "ugyldig gruppe"
+
+#~ msgid "invalid spec"
+#~ msgstr "ugyldig specifikation"
+
+#~ msgid "unable to display error message"
+#~ msgstr "kan ikke vise fejlmeddelelse"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s hjemmeside: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "standard ind"
+
+#~ msgid "stdout"
+#~ msgstr "standard ud"
+
+#~ msgid "stderr"
+#~ msgstr "standard fejl"
+
+#~ msgid "unknown stream"
+#~ msgstr "ukendt strøm"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "kunne ikke genåbne %s i tilstand %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "strengsammenligning mislykkedes"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Sæt LC_ALL='C' for at omgå problemet."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "De sammenlignede strenge var %s og %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "kan ikke udføre formateret udskrift"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "fejlagtigt %s%s-argument '%s'"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "fejlagtigt suffiks i %s%s-argument '%s'"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s argument '%s' er for stort"
diff --git a/gnulib-po/de.gmo b/gnulib-po/de.gmo
new file mode 100644
index 0000000..8112949
--- /dev/null
+++ b/gnulib-po/de.gmo
Binary files differ
diff --git a/gnulib-po/de.po b/gnulib-po/de.po
new file mode 100644
index 0000000..c7cd5c4
--- /dev/null
+++ b/gnulib-po/de.po
@@ -0,0 +1,980 @@
+# German translation of gnulib messages.
+# Copyright © 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Karl Eichwalder <ke@suse.de>, 2001-2002.
+# Lutz Behnke <lutz.behnke@gmx.de>, 1996, 1997, 1998, 1999, 2000, 2001.
+# Michael Schmidt <michael@guug.de>, 1996, 1997, 1998, 1999, 2000.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2001, 2002, 2003, 2009.
+# Kai Wasserbäch <debian@carbon-project.org>, 2009.
+# Arun Persaud <arun@nubati.net>, 2012.
+# Roland Illig <roland.illig@gmx.de>, 2019.
+#
+# TAB: spell it out („Tabulatoren“). -ke-
+# Don't use obscure abbreviations, please.  -ke-
+# No hyphenation, please. -ke-
+#
+# space: Leerzeichen oder Leerschritt
+#
+# Check:
+# idle - untätig
+#   idle: untätig, ruhig, „idle“, Leerlauf
+#   user idle time: Untätigkeitszeit des Benutzers, Ruhezeit, Idle-Time,
+#                   Benutzer im Leerlauf
+# digit - Zahl, Ziffer, Nummer, Stelle
+# logged in - angemeldet, eingeloggt
+# requested - gewünscht?
+#
+# Some comments on translations used in oder to ensure persistence:
+#
+# symbolic links: symbolische Verknüpfungen
+# hard links:     harte Verknüpfungen
+# backup:         Sicherung
+# mount:          einhängen
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU gnulib-4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-22 20:00+0200\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.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: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.3\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ungültiges Argument %s für %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "mehrdeutiges Argument %s für %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 gecacht (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u gecacht (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u gecacht (%.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 "logarithmisches Anzahlhistogramm\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "logarithmisches Größenhistogramm\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "Dichtehistogramm\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitmengen-Statistik:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Aufsummierte Durchläufe = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "Statistikdatei konnte nicht gelesen werden"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "Statistikdatei hat falsche Größe\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "Statistikdatei konnte nicht angelegt werden"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "Statistikdatei konnte nicht zum Schreiben geöffnet werden"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "Fehler beim Schreiben der Datei"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Unbekannter Systemfehler"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: Option »%s%s« ist mehrdeutig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: Option »%s%s« ist mehrdeutig; Möglichkeiten:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: unbekannte Option »%s%s«\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: Option »%s%s« erlaubt kein Argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: Option »%s%s« erfordert ein Argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ungültige Option -- »%c«\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: Option erfordert ein Argument -- »%c«\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "Zu wenig Speicher vorhanden"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "»"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "«"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "Pipe konnte nicht erzeugt werden"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s: Unterprozess fehlgeschlagen"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Ausführungszeiten (in Sekunden)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU Anwendung"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU System"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "Vergangene Zeit"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle fehlgeschlagen"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+"Dateideskriptor %d konnte nicht wiederhergestellt werden: dup2 fehlgeschlagen"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-Unterprozess"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-Unterprozess bekam tödliches Signal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Paket erstellt von %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Paket erstellt von %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Lizenz GPLv3+: GNU GPL Version 3 oder höher <%s>.\n"
+#~ "Dies ist freie Software: Sie können sie ändern und weitergeben.\n"
+#~ "Es gibt keinerlei Garantien, soweit es das Gesetz erlaubt.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Geschrieben von %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Geschrieben von %s und %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Geschrieben von %s, %s und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s\n"
+#~ "und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s, %s und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s, %s, %s und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s und %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Geschrieben von %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s und anderen.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Melden Sie Fehler im Programm (auf Englisch) an »%s«.\n"
+#~ "Melden Sie Fehler in der Übersetzung an <translation-team-de@lists."
+#~ "sourceforge.net>.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Melden Sie %s-Fehler an »%s«\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s-Homepage: %s\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Allgemeine Hilfe zur Benutzung von GNU-Software: %s\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: Der Wert %s ist kleiner oder gleich %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT Parameter benötigt einen Wert"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Unbekannter Parameter für ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Müll in ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Erforderliche oder optionale Argumente für lange Optionen sind auch für "
+#~ "kurze erforderlich bzw. optional."
+
+#~ msgid "Usage:"
+#~ msgstr "Aufruf:"
+
+#~ msgid "  or: "
+#~ msgstr "  oder: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPTION…]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "»%s --help« oder »%s --usage« liefert weitere Informationen.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "diese Hilfeliste anzeigen"
+
+#~ msgid "give a short usage message"
+#~ msgstr "eine Kurzfassung des Aufrufs anzeigen"
+
+#~ msgid "NAME"
+#~ msgstr "NAME"
+
+#~ msgid "set the program name"
+#~ msgstr "den Programmnamen festlegen"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "SEK Sekunden warten (Standardwert 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "Programmversion anzeigen"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMMFEHLER) Keine Version bekannt!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: zu viele Argumente\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMMFEHLER) Option hätte erkannt werden müssen!?"
+
+#~ msgid "program error"
+#~ msgstr "Programmfehler"
+
+#~ msgid "stack overflow"
+#~ msgstr "Stacküberlauf"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "kein temporäres Verzeichnis gefunden, versuchen Sie, $TMPDIR zu setzen"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr ""
+#~ "temporäres Verzeichnis mit der Schablone »%s« konnte nicht angelegt werden"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "temporäre Datei »%s« konnte nicht entfernt werden"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "temporäres Verzeichnis »%s« konnte nicht entfernt werden"
+
+#~ msgid "error closing file"
+#~ msgstr "Fehler beim Schließen der Datei"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "Zugriffsberechtigungen von »%s« werden beibehalten"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "die Datei »%s« konnte nicht zum Lesen geöffnet werden"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "die Sicherungsdatei »%s« konnte nicht zum Schreiben geöffnet werden"
+
+#~ msgid "error reading %s"
+#~ msgstr "Fehler beim Lesen von »%s«"
+
+#~ msgid "error writing %s"
+#~ msgstr "Fehler beim Schreiben von »%s«"
+
+#~ msgid "error after reading %s"
+#~ msgstr "Fehler nach dem Lesen von »%s«"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "Fehler bei fdopen()"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr ""
+#~ "C#-Compiler nicht gefunden, versuchen Sie, das Paket »mono« zu "
+#~ "installieren"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr ""
+#~ "Virtuelle Maschine für C# nicht gefunden, versuchen Sie, das Paket »mono« "
+#~ "zu installieren"
+
+#~ msgid "unbalanced ["
+#~ msgstr "öffnende eckige Klammer »[« ohne Gegenstück"
+
+#~ msgid "invalid character class"
+#~ msgstr "ungültige Zeichenklasse"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "Die Schreibweise für Zeichenklassen ist [[:space:]], nicht [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "unvollendete \\-Escapesequenz"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "Ungültiger Inhalt in \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "der reguläre Ausdruck ist zu groß"
+
+#~ msgid "unbalanced ("
+#~ msgstr "öffnende Klammer »(« ohne Gegenstück"
+
+#~ msgid "no syntax specified"
+#~ msgstr "keine Syntax angegeben"
+
+#~ msgid "unbalanced )"
+#~ msgstr "schließende Klammer »)« ohne Gegenstück"
+
+#~ msgid "regular empty file"
+#~ msgstr "reguläre leere Datei"
+
+#~ msgid "regular file"
+#~ msgstr "reguläre Datei"
+
+#~ msgid "directory"
+#~ msgstr "Verzeichnis"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolische Verknüpfung"
+
+#~ msgid "message queue"
+#~ msgstr "Nachrichtenwarteschlange"
+
+#~ msgid "semaphore"
+#~ msgstr "Semaphor"
+
+#~ msgid "shared memory object"
+#~ msgstr "Objekt gemeinsamen Speichers"
+
+#~ msgid "typed memory object"
+#~ msgstr "Objekt getypten Speichers"
+
+#~ msgid "block special file"
+#~ msgstr "blockorientierte Spezialdatei"
+
+#~ msgid "character special file"
+#~ msgstr "zeichenorientierte Spezialdatei"
+
+#~ msgid "contiguous data"
+#~ msgstr "zusammenhängende Daten"
+
+#~ msgid "fifo"
+#~ msgstr "FIFO"
+
+#~ msgid "door"
+#~ msgstr "Tür"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "gemultiplexte blockorientierte Spezialdatei"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "gemultiplexte zeichenorientierte Spezialdatei"
+
+#~ msgid "multiplexed file"
+#~ msgstr "gemultiplexte Datei"
+
+#~ msgid "named file"
+#~ msgstr "benannte Datei"
+
+#~ msgid "network special file"
+#~ msgstr "netzwerkbezogene Spezialdatei"
+
+#~ msgid "migrated file with data"
+#~ msgstr "migrierte Datei mit Daten"
+
+#~ msgid "migrated file without data"
+#~ msgstr "migrierte Datei ohne Daten"
+
+#~ msgid "port"
+#~ msgstr "Anschluss"
+
+#~ msgid "socket"
+#~ msgstr "Socket"
+
+#~ msgid "whiteout"
+#~ msgstr "Überblendung"
+
+#~ msgid "weird file"
+#~ msgstr "merkwürdige Datei"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Adressfamilie für Hostnamen nicht unterstützt"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Temporäre Störung der Namensauflösung"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Ungültiger Wert für ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Nicht zu umgehende Störung der Namensauflösung"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family nicht unterstützt"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Speicherallokationsfehler"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Keine Adresse mit Hostnamen verbunden"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Name oder Service unbekannt"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname nicht unterstützt für ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype nicht unterstützt"
+
+#~ msgid "System error"
+#~ msgstr "Systemfehler"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumentpuffer zu klein"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Verarbeitungsanfrage in Bearbeitung"
+
+#~ msgid "Request canceled"
+#~ msgstr "Anfrage abgebrochen"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Anfrage nicht abgebrochen"
+
+#~ msgid "All requests done"
+#~ msgstr "Alle Anfragen erledigt"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Durch Signal unterbrochen"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parameterzeichenkette nicht korrekt kodiert"
+
+#~ msgid "Unknown error"
+#~ msgstr "Unbekannter Fehler"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "ungültiges Argument »source_version« für »compile_java_class«"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "ungültiges Argument »target_version« für »compile_java_class«"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "Datei »%s« konnte nicht erzeugt werden"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "Fehler beim Schreiben der Datei »%s«"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Java-Compiler nicht gefunden, versuchen Sie, das Paket »gcj« zu "
+#~ "installieren oder setzen Sie $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Virtuelle Maschine für Java nicht gefunden, versuchen Sie, das Paket "
+#~ "»gij« zu installieren oder setzen Sie $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s-Unterprozess-E/A-Fehler"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "Dateieigenschaften für »%s« konnten nicht bestimmt werden"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "Zugriffsrechte von »%s« konnten nicht geändert werden"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "Verzeichnis »%s« konnte nicht angelegt werden"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "aktuelles Arbeitsverzeichnis konnte nicht bestimmt werden"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr ""
+#~ "es konnte nicht ins ursprüngliche Arbeitsverzeichnis zurückgekehrt werden"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Das Gerät »/dev/zero« konnte nicht zum Lesen geöffnet werden"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "Erstellen des Lese-Threads fehlgeschlagen"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr ""
+#~ "Nicht-blockierendes I/O zu Teilprozess »%s« konnte nicht hergestellt "
+#~ "werden"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "Kommunikation mit Teilprozess »%s« fehlgeschlagen"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "Schreiben zu Teilprozess »%s« fehlgeschlagen"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "Lesen von Teilprozess »%s« fehlgeschlagen"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "Teilprozess »%s« beendet mit Code %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "Erstellen von Threads fehlgeschlagen"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "Teilprozess »%s« wurde mit Code %d beendet"
+
+#~ msgid "Success"
+#~ msgstr "Erfolg"
+
+#~ msgid "No match"
+#~ msgstr "Keine Übereinstimmung"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Ungültiger regulärer Ausdruck"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Ungültiges Sortierungszeichen"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Ungültiger Name für Zeichenklasse"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Unerwarteter Backslash am Ende"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Ungültige Rückreferenz"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "Gegenstück zu [, [^, [:, [. oder [= fehlt"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Gegenstück zu ( oder \\( fehlt"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Gegenstück zu \\{ fehlt"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Ungültiger Inhalt in \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Ungültiges Bereichsende"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Zu wenig Speicher vorhanden"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Ungültiger vorhergehender regulärer Ausdruck"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Vorzeitiges Ende des regulären Ausdrucks"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Der reguläre Ausdruck ist zu groß"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Gegenstück zu ) oder \\) fehlt"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Kein vorhergehender regulärer Ausdruck"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "Zugriffsberechtigungen von »%s« werden festgelegt"
+
+#~ msgid "Hangup"
+#~ msgstr "Aufhängen"
+
+#~ msgid "Interrupt"
+#~ msgstr "Unterbrechung"
+
+#~ msgid "Quit"
+#~ msgstr "Beendet"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Ungültiger Maschinenbefehl"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Trace-/Breakpoint-Falle"
+
+#~ msgid "Aborted"
+#~ msgstr "Abgebrochen"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Gleitkomma-Ausnahme"
+
+#~ msgid "Killed"
+#~ msgstr "Getötet"
+
+#~ msgid "Bus error"
+#~ msgstr "Busfehler"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Speicherzugriffsfehler"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Unterbrochene Weiterleitung"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Wecker"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminiert"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Dringende I/O-Bedingung"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Gestoppt (Signal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Gestoppt"
+
+#~ msgid "Continued"
+#~ msgstr "Fortgesetzt"
+
+#~ msgid "Child exited"
+#~ msgstr "Kindprozess beendet"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Gestoppt (tty-Eingabe)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Gestoppt (tty-Ausgabe)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O möglich"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "CPU-Zeitbegrenzung überschritten"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Dateigrößenbegrenzung überschritten"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtueller Zeitgeber abgelaufen"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Zeitmesser zur Leistungsmessung abgelaufen"
+
+#~ msgid "Window changed"
+#~ msgstr "Fenster geändert"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Benutzerdefiniertes Signal 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Benutzerdefiniertes Signal 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT-Falle"
+
+#~ msgid "Bad system call"
+#~ msgstr "Fehlerhafter Systemaufruf"
+
+#~ msgid "Stack fault"
+#~ msgstr "Stapelfehler"
+
+#~ msgid "Information request"
+#~ msgstr "Informationsanfrage"
+
+#~ msgid "Power failure"
+#~ msgstr "Stromausfall"
+
+#~ msgid "Resource lost"
+#~ msgstr "Ressource verloren"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "Fehler beim Schreiben in geschlossene Pipe oder Socket"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Echtzeitsignal %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Unbekanntes Signal %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv-Funktion nicht benutzbar"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv-Funktion nicht verfügbar"
+
+#~ msgid "character out of range"
+#~ msgstr "Zeichen außerhalb erlaubter Grenzen"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr ""
+#~ "das Zeichen U+%04X konnte nicht in lokalen Zeichensatz konvertiert werden"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr ""
+#~ "das Zeichen U+%04X konnte nicht in lokalen Zeichensatz konvertiert "
+#~ "werden: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "ungültiger Benutzername"
+
+#~ msgid "invalid group"
+#~ msgstr "ungültiger Gruppenname"
+
+#~ msgid "invalid spec"
+#~ msgstr "ungültige Angabe"
+
+#~ msgid "unable to display error message"
+#~ msgstr "Fehlermeldung konnte nicht angezeigt werden"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "Dateideskriptor konnte nicht zwischen Text und Binär umgeschaltet werden"
+
+#~ msgid "stdin"
+#~ msgstr "Standardeingabe (stdin)"
+
+#~ msgid "stdout"
+#~ msgstr "Standardausgabe (stdout)"
+
+#~ msgid "stderr"
+#~ msgstr "Standardfehlerausgabe (stderr)"
+
+#~ msgid "unknown stream"
+#~ msgstr "Unbekannter Datenstrom"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "Erneutes Öffnen von %s mit Modus %s fehlgeschlagen"
+
+#~ msgid "string comparison failed"
+#~ msgstr "Zeichenkettenvergleich fehlgeschlagen"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Setzen Sie »LC_ALL=C«, um das Problem zu umgehen."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Die verglichenen Zeichenketten waren »%s« und »%s«."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "formatierte Ausgabe konnte nicht durchgeführt werden"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "Standarddateideskriptoren"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ungültiges %s%s-Argument »%s«"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "ungültige Endung in %s%s-Argument »%s«"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s-Argument »%s« zu groß"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT Parameter muss positiv sein"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: Option »--%s« erlaubt kein Argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: unbekannte Option »--%s«\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: Option »-W %s« erlaubt kein Argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: Option »-W %s« erfordert ein Argument\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Heimatseite von %s: <http://www.gnu.org/software/%s/>.\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ungültige Option -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
+#~ "Melden Sie Übersetzungsfehler an <translation-team-de@lists.sourceforge."
+#~ "net>\n"
+
+#~ msgid "block size"
+#~ msgstr "Blockgröße"
diff --git a/gnulib-po/el.gmo b/gnulib-po/el.gmo
new file mode 100644
index 0000000..d904d5a
--- /dev/null
+++ b/gnulib-po/el.gmo
Binary files differ
diff --git a/gnulib-po/el.po b/gnulib-po/el.po
new file mode 100644
index 0000000..dcb9540
--- /dev/null
+++ b/gnulib-po/el.po
@@ -0,0 +1,677 @@
+# Greek messages for gnulib
+# Copyright (C) 1999, 2000, 2001, 2002, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Simos Xenitellis <simos.lists@googlemail.com>, 1999, 2000, 2001, 2002, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2012-03-11 11:25+0100\n"
+"Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\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: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "μη έγκυρο όρισμα %s για %s"
+
+#
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "ασαφές όρισμα %s για %s"
+
+#
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "αδυναμία μεταφοράς του `%s' στο `%s'"
+
+#
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "σφάλμα εγγραφής"
+
+#
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Άγνωστο σφάλμα συστήματος"
+
+#
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: η επιλογή `-W %s' είναι ασαφής\n"
+
+#
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: η επιλογή `%s' είναι ασαφής\n"
+
+#
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: μη αναγνωρίσιμη επιλογή `%c%s'\n"
+
+#
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: η επιλογή `%c%s' δεν επιτρέπει ορίσματα\n"
+
+#
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n"
+
+#
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: μη έγκυρη επιλογή -- %c\n"
+
+#
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n"
+
+#
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: μη έγκυρη μορφή"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: μη έγκυρη μορφή"
+
+#
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: μη έγκυρη μορφή"
+
+#
+#~ msgid "Written by %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "Γραμμένο από τον/την %s.\n"
+
+#
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Αναφέρατε σφάλματα στο <%s>.\n"
+
+#
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Αναφέρατε σφάλματα στο <%s>.\n"
+
+#
+#~ msgid " [OPTION...]"
+#~ msgstr " [ΕΠΙΛΟΓΗ...]"
+
+#
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Δοκιμάστε `%s --help' για περισσότερη βοήθεια.\n"
+
+#
+#, fuzzy
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Αναφέρατε σφάλματα στο <%s>.\n"
+
+#
+#, fuzzy
+#~ msgid "print program version"
+#~ msgstr "σφάλμα προγράμματος"
+
+#
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "πάρα πολλά ορίσματα"
+
+#
+#~ msgid "program error"
+#~ msgstr "σφάλμα προγράμματος"
+
+#
+#~ msgid "stack overflow"
+#~ msgstr "υπερχείλιση στοίβας"
+
+#
+#, fuzzy
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "preserving permissions for %s"
+#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "αδυναμία μεταφοράς του `%s' στο `%s'"
+
+#
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "σφάλμα ανάγνωσης %s"
+
+#
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "σφάλμα εγγραφής %s"
+
+#
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "σφάλμα ανάγνωσης %s"
+
+#
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "αποτυχία ανοίγματος"
+
+#
+#~ 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 "φίφο"
+
+#
+#~ msgid "symbolic link"
+#~ msgstr "συμβολικός σύνδεσμος"
+
+#
+#~ msgid "socket"
+#~ msgstr "υποδοχέας"
+
+#
+#~ msgid "message queue"
+#~ msgstr "ουρά μηνυμάτων"
+
+#
+#~ msgid "semaphore"
+#~ msgstr "σημαφόρος"
+
+#
+#~ msgid "weird file"
+#~ msgstr "παράξενο αρχείο"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "αρχεία fifo δεν υποστηρίζονται"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "αρχεία fifo δεν υποστηρίζονται"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "αρχεία fifo δεν υποστηρίζονται"
+
+#
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "σφάλμα εγγραφής"
+
+#
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Άγνωστο σφάλμα συστήματος"
+
+#
+#, fuzzy
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: η επιλογή `--%s' δεν επιτρέπει ορίσματα\n"
+
+#
+#, fuzzy
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: μη αναγνωρίσιμη επιλογή `--%s'\n"
+
+#
+#, fuzzy
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: η επιλογή `-W %s' δεν επιτρέπει ορίσματα\n"
+
+#
+#, fuzzy
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n"
+
+#
+#, fuzzy
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "σφάλμα εγγραφής %s"
+
+#
+#, fuzzy
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s: μη έγκυρη μορφή"
+
+#
+#, fuzzy
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
+
+#
+#, fuzzy
+#~ msgid "cannot create directory %s"
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
+
+#
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
+
+#
+#, fuzzy
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "%s: μη έγκυρη μορφή"
+
+#
+#, fuzzy
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "%s: μη έγκυρη μορφή"
+
+#
+#, fuzzy
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "%s: μη έγκυρη μορφή"
+
+#
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
+
+#
+#, fuzzy
+#~ msgid "Invalid collation character"
+#~ msgstr "μη έγκυρη τάξη χαρακτήρων `%s'"
+
+#
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "μη έγκυρη τάξη χαρακτήρων `%s'"
+
+#
+#, fuzzy
+#~ msgid "Invalid range end"
+#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
+
+#
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "η μνήμη εξαντλήθηκε"
+
+#
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
+
+#
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης"
+
+#
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
+
+#
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης"
+
+#
+#~ msgid "^[yY]"
+#~ msgstr "^[yYνΝ]"
+
+#
+#~ msgid "^[nN]"
+#~ msgstr "^[nNοΟ]"
+
+#
+#, fuzzy
+#~ msgid "setting permissions for %s"
+#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
+
+#
+#, fuzzy
+#~ msgid "Bus error"
+#~ msgstr "σφάλμα εγγραφής"
+
+#
+#, fuzzy
+#~ msgid "character out of range"
+#~ msgstr "%s: αριθμός γραμμής έξω από τα όρια"
+
+#
+#~ msgid "invalid user"
+#~ msgstr "μη έγκυρος χρήστης"
+
+#
+#~ msgid "invalid group"
+#~ msgstr "μη έγκυρη ομάδα"
+
+#
+#, fuzzy
+#~ msgid "invalid spec"
+#~ msgstr "μη έγκυρος χρήστης"
+
+#
+#, fuzzy
+#~ msgid "unknown stream"
+#~ msgstr "Άγνωστο σφάλμα συστήματος"
+
+#
+#, fuzzy
+#~ msgid "string comparison failed"
+#~ msgstr "αποτυχία εγγραφής"
+
+#
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Θέστε LC_ALL='C' για να παρακάμψετε το πρόβλημα."
+
+#, fuzzy
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "δεν είναι δυνατό να δημιουργηθεί το %s `%s' στο `%s'"
+
+#
+#, fuzzy
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "μη έγκυρο όρισμα %s για %s"
+
+#
+#, fuzzy
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "μη έγκυρο όρισμα %s για %s"
+
+#
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: μη αναγνωρίσιμη επιλογή -- %c\n"
+
+#
+#~ msgid "block size"
+#~ msgstr "μέγεθος μπλοκ"
+
+#
+#, fuzzy
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "το `%s' υπάρχει ήδη άλλα δεν είναι κατάλογος"
+
+#
+#, fuzzy
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "δεν είναι δυνατό να παραληφθεί χρήστης και ομάδα"
+
+#
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "αδύνατη η αλλαγή στο κατάλογο %s"
+
+#
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr ""
+#~ "αδύνατη η λήψη της ομάδας εισαγωγής στο σύστημα ενός αριθμητικού UID"
diff --git a/gnulib-po/en@boldquot.header b/gnulib-po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/gnulib-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/gnulib-po/en@quot.header b/gnulib-po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/gnulib-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/gnulib-po/eo.gmo b/gnulib-po/eo.gmo
new file mode 100644
index 0000000..87f6892
--- /dev/null
+++ b/gnulib-po/eo.gmo
Binary files differ
diff --git a/gnulib-po/eo.po b/gnulib-po/eo.po
new file mode 100644
index 0000000..bf4d719
--- /dev/null
+++ b/gnulib-po/eo.po
@@ -0,0 +1,936 @@
+# translation of gnubiff-2.0.2.po to Esperanto
+# Copyright (C) 2013, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Felipe Castro <fefcas@gmail.com>, 2013, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2412\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-01-29 21:44+0100\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.0.7\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "malvalida argumento %s por %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "plursenca argumento %s por %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 liberitaj (%.2f%%).\n"
+
+#: lib/bitset/stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u kaŝmem (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u kaŝmem (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u kaŝmem (%.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 nombro-protokolado\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "histogramo pri grando-protokolado\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "histogramo pri denso\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset statistikoj:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Akumulitaj funkciadoj = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "ne eblas legi dosieron stats"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "malĝusta dosier-grando de stats\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "ne eblas skibi en dosiero stats"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "ne eblas malfermi dosieron stats por skribi"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "skrib-eraro"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Nekonata sistem-eraro"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: la modifilo '%s%s' estas plursenca\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: la modifilo '%s%s' estas plursenca; eblecoj:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: nerekonata modifilo '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: la modifilo '%s%s' ne permesas argumenton\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: la modifilo '%s%s' postulas argumenton\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: malvalida modifilo -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la modifilo postulas argumenton -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoro estas plenigita"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "‘"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "’"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "ne eblas krei dukton"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "subprocezo de %s fiaskis"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Tempo de funkciado (sekundoj)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU uzanto"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU sistemo"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "mur-horloĝo"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle fiaskis"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ne eblas restarigi fd %d: dup2 fiaskis"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "subprocezo %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "subprocezo %s ricevis neripareblan signalon %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Pakigita de %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Pakigita de %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "License GPLv3+: GNU GPL version 3 or later <https://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 ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Permeso GPLv3+: GNU GPL versio 3 aŭ posta <https://gnu.org/licenses/gpl."
+#~ "html>.\n"
+#~ "Tio ĉi estas libera programaro: vi estas libera por ŝanĝi kaj redisdoni "
+#~ "ĝin.\n"
+#~ "Ekzistas NENIU GARANTIO, laŭ plej amplekse permesate de la leĝoj.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Verkita de %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Verkita de %s kaj %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Verkita de %s, %s, kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, %s, kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, %s, %s, kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, kaj %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Verkita de %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, kaj aliaj.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Raportu program-misojn al: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Raportu %s misojn al: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s hejm-paĝo: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Ĝenerala helpo por uzi programaron GNU: <https://www.gnu.org/gethelp/>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: valoro de %s estas malpli aŭ egala al %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: parametro ARGP_HELP_FMT postulas valoron"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Nekonata parametro ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Rubaĵo en ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Devigaj aŭ nedevigaj argumentoj por longaj modifiloj ankaŭ estas devigaj "
+#~ "aŭ nedevigaj por iu ajn korespondanta mallonga modifilo."
+
+#~ msgid "Usage:"
+#~ msgstr "Uzmaniero:"
+
+#~ msgid "  or: "
+#~ msgstr "  aŭ: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [MODIFILO...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "Provu '%s --help' aŭ '%s --usage' por pli da informo.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Raportu program-misojn al %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "montri tiun ĉi help-liston"
+
+#~ msgid "give a short usage message"
+#~ msgstr "montri mallongan mesaĝon pri la uzmaniero"
+
+#~ msgid "NAME"
+#~ msgstr "NOMO"
+
+#~ msgid "set the program name"
+#~ msgstr "difini la program-nomon"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "halti dum SEK sekundoj (apriore 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "montri program-version"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAM-ERARO) Neniu versio estas konata!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: tro da argumentoj\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAM-ERARO) Modifilo devus esti rekonita!?"
+
+#~ msgid "program error"
+#~ msgstr "programeraro"
+
+#~ msgid "stack overflow"
+#~ msgstr "staka troigo"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "ne eblas trovi provizoran dosierujon, provu difini $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "ne eblas krei provizoran dosierujon uzante la ŝablonon \"%s\""
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "ne eblas forigi la provizoran dosieron %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "ne eblas forigi la provizoran dosierujon %s"
+
+#~ msgid "error closing file"
+#~ msgstr "eraro dum fermo de dosiero"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "ni tenas la permesojn por %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "eraro dum malfermo de %s por legi"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "ne eblas malfermi la savdosieron %s por skribi"
+
+#~ msgid "error reading %s"
+#~ msgstr "eraro dum lego de %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "eraro dum skribo de %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "eraro post legi %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() fiaskis"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "Kompililo C# ne estis trovata, ni provas instali mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Virtuala maŝino C# ne estis trovata, ni provas instali mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "nekongruita ["
+
+#~ msgid "invalid character class"
+#~ msgstr "malvalida signa klaso"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "sintakso de signa klaso estas [[:space:]], ne [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "nefinigita eskapo \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "malvalida enhavo de \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "regulesprimo tro grandas"
+
+#~ msgid "unbalanced ("
+#~ msgstr "nekongruita ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "neniu sintakso estas indikita"
+
+#~ msgid "unbalanced )"
+#~ msgstr "nekongruita )"
+
+#~ msgid "regular empty file"
+#~ msgstr "regula malplena dosiero"
+
+#~ msgid "regular file"
+#~ msgstr "regula dosiero"
+
+#~ msgid "directory"
+#~ msgstr "dosierujo"
+
+#~ msgid "symbolic link"
+#~ msgstr "simbola ligo"
+
+#~ msgid "message queue"
+#~ msgstr "mesaĝovico"
+
+#~ msgid "semaphore"
+#~ msgstr "semaforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "komuna memorobjekto"
+
+#~ msgid "typed memory object"
+#~ msgstr "tipita memorbjekto"
+
+#~ msgid "block special file"
+#~ msgstr "bloka speciala dosiero"
+
+#~ msgid "character special file"
+#~ msgstr "bajta speciala dosiero"
+
+#~ msgid "contiguous data"
+#~ msgstr "kontinua datumaro"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "enirejo"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multplektita bloka speciala dosiero"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "bajta multplektita speciala dosiero"
+
+#~ msgid "multiplexed file"
+#~ msgstr "multplektita dosiero"
+
+#~ msgid "named file"
+#~ msgstr "nomigita dosiero"
+
+#~ msgid "network special file"
+#~ msgstr "reta speciala dosiero"
+
+#~ msgid "migrated file with data"
+#~ msgstr "transmetis dosieron kun datumaro"
+
+#~ msgid "migrated file without data"
+#~ msgstr "transmetis dosieron sen datumaro"
+
+#~ msgid "port"
+#~ msgstr "pordo"
+
+#~ msgid "socket"
+#~ msgstr "konektingo"
+
+#~ msgid "whiteout"
+#~ msgstr "'whiteout'"
+
+#~ msgid "weird file"
+#~ msgstr "stranga dosiero"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Adresfamilio por komputilretnomo ne estas subtenata"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Provizora paneo en solvo de retnomo"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Malĝusta valoro por ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Neriparebla paneo en solvo de retnomo"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family ne estas subtenata"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Rezervo de memoro fiaskis"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Neniu adreso estas asociita kun komputilretnomo"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nomo aŭ servo ne estas konata"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname ne estas subtenata por ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype ne estas subtenata"
+
+#~ msgid "System error"
+#~ msgstr "Sistem-eraro"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Bufro por argumentoj tro malgrandas"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Procezado de peto daŭras"
+
+#~ msgid "Request canceled"
+#~ msgstr "Peto estas nuligita"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Peto ne estas nuligita"
+
+#~ msgid "All requests done"
+#~ msgstr "Ĉiuj petoj estas plenumitaj"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interrompita de signalo"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parametra ĉeno ne estas ĝuste enkodita"
+
+#~ msgid "Unknown error"
+#~ msgstr "Nekonata eraro"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "malvalida argumento source_version por compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "malvalida argumento target_version por compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "ni fiaskis krei \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "eraro dum skribo de dosiero \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr "Ĵava kompililo ne estis trovata, provu instali gcj aŭ difinu $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Ĵava virtuala maŝino ne estis trovata, provu instali gij aŭ difinu $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s subproceza eraro de en/eligo"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "ne eblas stat %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "ne eblas ŝanĝi permesojn de %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "ne eblas krei la dosierujon %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "ne eblas registri la aktualan labordosierujon"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "ni fiaskis reveni al la komenca labordosierujo"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Ni fiaskis malfermi /dev/zero por legi"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "kreo de leganta fadeno fiaskis"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "ne eblas difini neblokantan en/eligon al la subprocezo %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "komunikado kun la subprocezo %s fiaskis"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "skribo al la subprocezo %s fiaskis"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "lego el la subprocezo %s fiaskis"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "la subproceso %s ĉesis kun elira kodo %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "kreo de fadenoj fiaskis"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "la subproceso %s ĉesis kun elira kodo %d"
+
+#~ msgid "Success"
+#~ msgstr "Sukceso"
+
+#~ msgid "No match"
+#~ msgstr "Neniu kongruaĵo"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Malvalida regulesprimo"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Malvalida ordodifina signo"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Malvalida signa klasnomo"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Vosta retroklino"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Malvalida retroreferenco"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "Senpara [, [^, [:, [., aŭ [="
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Senpara ( aŭ \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Senpara \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Malvalida enhavo de \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Malvalida intervalofino"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memoro estas plenigita"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Malvalida antaŭa regulesprimo"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Tro frua fino de regulesprimo"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Regulesprimo tro grandas"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Senpara ) aŭ \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Neniu antaŭa regulesprimo"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "agordo de permesoj por %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Malkonekto"
+
+#~ msgid "Interrupt"
+#~ msgstr "Interrompo"
+
+#~ msgid "Quit"
+#~ msgstr "Eliri"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Malvalida instrukcio"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Spursekva/paŭzopunkta kaptilo"
+
+#~ msgid "Aborted"
+#~ msgstr "Ĉesigita"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Glitkoma escepto"
+
+#~ msgid "Killed"
+#~ msgstr "Mortigita"
+
+#~ msgid "Bus error"
+#~ msgstr "Bus-eraro"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Adres-eraro"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Rompita dukto"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Vekhorloĝo"
+
+#~ msgid "Terminated"
+#~ msgstr "Finigita"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Urĝa en/eliga stato"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Haltigita (signalo)"
+
+#~ msgid "Stopped"
+#~ msgstr "Haltigita"
+
+#~ msgid "Continued"
+#~ msgstr "Daŭrigita"
+
+#~ msgid "Child exited"
+#~ msgstr "Ido finis"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Haltigita (enigo tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Haltigita (eligo tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "En/eligo eblas"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Procezila tempolimo estas atingita"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Dosiergranda limo estas atingita"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtuala horloĝo senvalidiĝis"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Profilanta horloĝo senvalidiĝis"
+
+#~ msgid "Window changed"
+#~ msgstr "Fenestro ŝanĝis"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Signalo 1 difinita de uzanto"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Signalo 2 difinita de uzanto"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT-kaptilo"
+
+#~ msgid "Bad system call"
+#~ msgstr "Malĝusta sistemvoko"
+
+#~ msgid "Stack fault"
+#~ msgstr "Stak-eraro"
+
+#~ msgid "Information request"
+#~ msgstr "Informo-peto"
+
+#~ msgid "Power failure"
+#~ msgstr "Elektra paneo"
+
+#~ msgid "Resource lost"
+#~ msgstr "Perdo de rimedo"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "eraro skribante al fermida dukto aŭ konektingo"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Realtempa signalo %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Nekonata signalo %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "funkcio iconv ne uzeblas"
+
+#~ msgid "iconv function not available"
+#~ msgstr "funkcio iconv ne disponeblas"
+
+#~ msgid "character out of range"
+#~ msgstr "signo estas for de intervalo"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "ne eblas konverti U+%04X al loka signaro"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "ne eblas konverti U+%04X al loka signaro: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "malvalida uzanto"
+
+#~ msgid "invalid group"
+#~ msgstr "malvalida grupo"
+
+#~ msgid "invalid spec"
+#~ msgstr "malvalida spec"
+
+#~ msgid "unable to display error message"
+#~ msgstr "ne eblas montri erarmesaĝon"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s hejm-paĝo: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "ni fiaskis difini la dosieran priaĵon teksta/cifereca reĝimo"
+
+#~ msgid "stdin"
+#~ msgstr "ĉefenigujo"
+
+#~ msgid "stdout"
+#~ msgstr "ĉefeligujo"
+
+#~ msgid "stderr"
+#~ msgstr "ĉeferarujo"
+
+#~ msgid "unknown stream"
+#~ msgstr "nekonata fluaĵo"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "ni fiaskis remalfermi %s kun reĝimo %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "ĉena komparo fiaskis"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Agordu LC_ALL='C' por ĉirkauiri la problemon."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "La komparitaj ĉenoj estis %s kaj %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "ne eblas efektivigi formatitan eligon"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "laŭnormaj dosier-priaĵoj"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "malvalida %s%s-argumento '%s'"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "malvalida sufikso en %s%s-argumento '%s'"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s-argumento '%s' tro larĝas"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: parametro ARGP_HELP_FMT devas esti pozitiva"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: la modifilo '--%s' ne permesas argumenton\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: nerekonata modifilo '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: la modifilo '-W %s' ne permesas argumenton\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: la modifilo '-W %s' postulas argumenton\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
diff --git a/gnulib-po/es.gmo b/gnulib-po/es.gmo
new file mode 100644
index 0000000..fa30700
--- /dev/null
+++ b/gnulib-po/es.gmo
Binary files differ
diff --git a/gnulib-po/es.po b/gnulib-po/es.po
new file mode 100644
index 0000000..13669fe
--- /dev/null
+++ b/gnulib-po/es.po
@@ -0,0 +1,947 @@
+# Mensajes en español para gnulib 3.0.0.6062.a6b16.
+# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011.
+#
+# Los mensajes iniciales de esta traducción provienen de la traducción
+# de mailutils.
+#
+# Un agradecimiento especial a Santiago Vila por sus atinados comentarios
+# sobre esta traducción.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-08-24 11:23-0500\n"
+"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento %s inválido para %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambiguo para %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 ""
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "no se puede una tubería"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "no se puede una tubería"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "no se puede abrir el fichero de respaldo \"%s\" para escritura"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "error de escritura"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Error desconocido de sistema"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: la opción '-W %s' es ambigua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: la opción '%s' es ambigua; posibilidades:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: no se reconoce la opción '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: la opción '%c%s' no admite un argumento\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: la opción '--%s' requiere de un argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opción inválida -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la opción requiere de un argumento -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria agotada"
+
+# Vamos a probar con el símbolo de cita tradicional en español,
+# a ver qué tal queda la cosa.
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "no se puede una tubería"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s: falló el subproceso"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Reloj de alarma"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "falló _open_osfhandle"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "no se puede restaurar el df %d: falló dup2"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "subproceso %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "el subproceso %s recibió la señal fatal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Empaquetado por %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Empaquetado por %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Licencia GPLv3+: GPL de GNU versión 3 o posterior\n"
+#~ "<http://gnu.org/licenses/gpl.html>.\n"
+#~ "Esto es software libre: tiene la libertad de cambiarlo y redistribuirlo.\n"
+#~ "No tiene GARANTÍA, en la extensión permitida por la ley.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Escrito por %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Escrito por %s y %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Escrito por %s, %s, y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, y %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, y otros.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Reporte bichos a: %s.\n"
+#~ "Reporte errores de traducción a: es@li.org\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Reporte bichos de %s a: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Página web de %s: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Ayuda general para usar software de GNU: <http://www.gnu.org/gethelp/>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: el valor %s es menor o igual a %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: El parámetro ARGP_HELP_FMT requiere de un valor"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: El parámetro ARGP_HELP_FMT debe ser positivo"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Parámetro de ARGP_HELP_FMT desconocido"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Basura en ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Los argumentos obligatorios u opcionales para las opciones largas también "
+#~ "son obligatorios u opcionales para cualquier opción corta correspondiente."
+
+#~ msgid "Usage:"
+#~ msgstr "Modo de empleo:"
+
+#~ msgid "  or: "
+#~ msgstr "  o:"
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPCIÓN...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Pruebe `%s --help' ó `%s --usage' para más información.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Reporte bichos a %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "da esta lista de ayuda"
+
+#~ msgid "give a short usage message"
+#~ msgstr "da un mensaje corto de modo de empleo"
+
+#~ msgid "NAME"
+#~ msgstr "NOMBRE"
+
+#~ msgid "set the program name"
+#~ msgstr "establece el nombre del programa"
+
+#~ msgid "SECS"
+#~ msgstr "SEGUNDOS"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "espera por SECS segundos (3600 por defecto)"
+
+#~ msgid "print program version"
+#~ msgstr "muestra la versión del programa"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(ERROR DEL PROGRAMA) ¿¡Sin versión conocida!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Demasiados argumentos\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(ERROR DEL PROGRAMA) ¿¡La opción debería reconocerse!?"
+
+#~ msgid "program error"
+#~ msgstr "error del programa"
+
+#~ msgid "stack overflow"
+#~ msgstr "desbordamiento de la pila"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "no se puede encontrar un directorio temporal, pruebe definir $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "no se puede crear un directorio temporal usando la plantilla \"%s\""
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "no se puede borrar el fichero temporal %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "no se puede borrar el directorio temporal %s"
+
+#~ msgid "error closing file"
+#~ msgstr "error al cerrar el fichero"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "se conservan los permisos de %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "error al abrir \"%s\" para lectura"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "error al leer \"%s\""
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "error al escribir en \"%s\""
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "error después de leer \"%s\""
+
+#~ msgid "fdopen() failed"
+#~ msgstr "falló fdopen()"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "No se encontró un compilador de C#, pruebe instalando pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "No se encontró una máquina virtual de C#, pruebe instalando pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "fichero regular vacío"
+
+#~ msgid "regular file"
+#~ msgstr "fichero regular"
+
+#~ msgid "directory"
+#~ msgstr "directorio"
+
+#~ msgid "block special file"
+#~ msgstr "fichero especial de bloques"
+
+#~ msgid "character special file"
+#~ msgstr "fichero especial de caracteres"
+
+#~ msgid "fifo"
+#~ msgstr "`fifo'"
+
+#~ msgid "symbolic link"
+#~ msgstr "enlace simbólico"
+
+#~ msgid "socket"
+#~ msgstr "`socket'"
+
+#~ msgid "message queue"
+#~ msgstr "cola de mensajes"
+
+#~ msgid "semaphore"
+#~ msgstr "semáforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "objeto de memoria compartida"
+
+#~ msgid "typed memory object"
+#~ msgstr "objeto de memoria con tipo"
+
+#~ msgid "weird file"
+#~ msgstr "fichero extraño"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "No se admiten las familias de direcciones para hostname"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Fallo temporal en la resolución del nombre"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Valor erróneo para ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Falla irrecuperable en la resolución del nombre"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "no se admite ai_family"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Falló la llamada al sistema `malloc'"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "No existe una dirección asociada con el nombre de anfitrión"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nombre o servicio desconocido"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "No se admite servname para ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "no se admite ai_socktype"
+
+#~ msgid "System error"
+#~ msgstr "Error del sistema"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Almacenamiento temporal de argumentos demasiado pequeño"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Petición de procesamiento en progreso"
+
+#~ msgid "Request canceled"
+#~ msgstr "Se canceló la petición"
+
+#~ msgid "Request not canceled"
+#~ msgstr "No se canceló la petición"
+
+#~ msgid "All requests done"
+#~ msgstr "Se completaron todas las peticiones"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interrupción por una señal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "La cadena de parámetro no está codificada correctamente"
+
+#~ msgid "Unknown error"
+#~ msgstr "Error desconocido"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: la opción '--%s' no admite un argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: no se reconoce la opción '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: la opción '-W %s' no admite un argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: la opción '-W %s' requiere de un argumento\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "argumento source_version inválido para compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "argumento target_version inválido para compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "no se puede crear \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "error al escribir el fichero \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "No se encontró un compilador de Java, pruebe instalando gcj o definiendo "
+#~ "$JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "No se encontró una máquina virtual de Java, pruebe instalando gij o "
+#~ "definiendo $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s: error de E/S del subproceso"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "no se pueden cambiar los permisos de %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "no se puede crear el directorio %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "no se puede registrar el directorio de trabajo actual"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "no se puede volver al directorio de trabajo inicial"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Falló al abrir /dev/zero para lectura"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "falló la creación del hilo de lectura"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "no se puede establecer E/S sin bloqueo para el subproceso %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "falló la comunicación con el subproceso %s"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "falló la escritura al subproceso %s"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "falló la lectura del subproceso %s"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "el subproceso %s terminó con el código de salida %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "falló la creación de hilos"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "subproceso %s terminado con el código de salida %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Éxito"
+
+#~ msgid "No match"
+#~ msgstr "Sin coincidencia"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Expresión regular inválida"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Carácter de ordenamiento inválido"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Nombre de clase de carácter inválido"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Barra invertida sobrante"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Referencia hacia atrás inválida"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "[ o [^ sin pareja"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( o \\( sin pareja"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ sin pareja"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Contenido inválido de \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Fin de rango inválido"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memoria agotada"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Expresión regular precedente inválida"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Final prematuro de la expresión regular"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Expresión regular demasiado grande"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") o \\) sin pareja"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "No hay una expresión regular previa"
+
+# Esto es para responder "sí" cuando nos pregunte.
+#~ msgid "^[yY]"
+#~ msgstr "^[sS]"
+
+# Y esto es para responder "no" cuando nos pregunte.
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "se cambian los permisos de %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Colgar"
+
+#~ msgid "Interrupt"
+#~ msgstr "Interrumpir"
+
+#~ msgid "Quit"
+#~ msgstr "Salir"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Instrucción ilegal"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Captura de rastreo/punto de quiebre"
+
+#~ msgid "Aborted"
+#~ msgstr "Abortar"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Excepción de coma flotante"
+
+#~ msgid "Killed"
+#~ msgstr "Matar"
+
+#~ msgid "Bus error"
+#~ msgstr "Error de bus"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Falta de segmentación"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Tubería rota"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminar"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Condición de E/S urgente"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Detener (señal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Detener"
+
+#~ msgid "Continued"
+#~ msgstr "Continuar"
+
+#~ msgid "Child exited"
+#~ msgstr "Salió el hijo"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Detener (entrada de tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Detener (salida de tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Posible E/S"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Excede el límite de tiempo de CPU"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Excede el límite de tamaño de fichero"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Expira el temporizador virtual"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Expira el temporizador de análisis de perfil"
+
+#~ msgid "Window changed"
+#~ msgstr "Cambio de ventana"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Señal 1 definida por el usuario"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Señal 2 definida por el usuario"
+
+#~ msgid "EMT trap"
+#~ msgstr "Captura EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Llamada al sistema errónea"
+
+#~ msgid "Stack fault"
+#~ msgstr "Falta en la pila"
+
+#~ msgid "Information request"
+#~ msgstr "Petición de información"
+
+#~ msgid "Power failure"
+#~ msgstr "Falla de energía"
+
+#~ msgid "Resource lost"
+#~ msgstr "Recurso perdido"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "error al escribir a una tubería o socket cerrados"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Señal de tiempo real %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Señal %d desconocida"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "la función iconv no es utilizable"
+
+#~ msgid "iconv function not available"
+#~ msgstr "la función iconv no está disponible"
+
+#~ msgid "character out of range"
+#~ msgstr "carácter fuera de rango"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "no se puede convertir U+%04X al conjunto de caracteres local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "no se puede convertir U+%04X al conjunto de caracteres local: %s"
+
+# Me niego a considerar "inválido" como palabra "políticamente incorrecta".
+# Si algún "impedido físico" lee este mensaje y se molesta por ello, entonces
+# es que además de impedido físico es tonto, pues todo el mundo sabe que,
+# *en el contexto informático*, inválido e ilegal significan
+# "no permitido por la causa que sea".
+# Luego, que unas veces sea inválido y otras ilegal, son matices que el
+# original tiene y creo necesario respetar en la traducción.
+#
+# [ Tomás Bautista sugiere "inexistente", y también para grupo ]
+#
+# FIXME:
+# Eso sí, un día tendré que preguntar a los de GNU en qué se diferencia
+# "invalid" de "not allowed" de "not recognized" y todo eso... sv
+#
+#~ msgid "invalid user"
+#~ msgstr "usuario inválido"
+
+#~ msgid "invalid group"
+#~ msgstr "grupo inválido"
+
+# Me niego a considerar "inválido" como palabra "políticamente incorrecta".
+# Si algún "impedido físico" lee este mensaje y se molesta por ello, entonces
+# es que además de impedido físico es tonto, pues todo el mundo sabe que,
+# *en el contexto informático*, inválido e ilegal significan
+# "no permitido por la causa que sea".
+# Luego, que unas veces sea inválido y otras ilegal, son matices que el
+# original tiene y creo necesario respetar en la traducción.
+#
+# [ Tomás Bautista sugiere "inexistente", y también para grupo ]
+#
+# FIXME:
+# Eso sí, un día tendré que preguntar a los de GNU en qué se diferencia
+# "invalid" de "not allowed" de "not recognized" y todo eso... sv
+#
+#~ msgid "invalid spec"
+#~ msgstr "especificación inválida"
+
+#~ msgid "unable to display error message"
+#~ msgstr "no se puede mostrar el mensaje de error"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Página web de %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "entrada estándard"
+
+#~ msgid "stdout"
+#~ msgstr "salida estándard"
+
+#~ msgid "stderr"
+#~ msgstr "salida de error estándard"
+
+#~ msgid "unknown stream"
+#~ msgstr "flujo desconocido"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "falló al reabrir %s con modo %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "la comparación de cadenas falló"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr ""
+#~ "Establezca LC_ALL='C' para solucionar este problema de forma temporal."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Las cadenas comparadas eran %s y %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "no se puede mostrar la salida con formato"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "argumento `$3%s' inválido para $1%s$2%s"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "sufijo inválido en el argumento `$3%s' para $1%s$2%s"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "el argumento `$3%s' es demasiado grande para $1%s$2%s"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opción ilegal -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Reporte bichos a <%s>.\n"
+
+#~ msgid "block size"
+#~ msgstr "tamaño del bloque"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s existe pero no es un directorio"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "no se puede cambiar el propietario y/o el grupo de %s"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "no se puede cambiar al directorio %s"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "no se puede obtener el grupo de login de un UID numérico"
+
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Este programa es software libre; se pueden redistribuir copias del "
+#~ "mismo \n"
+#~ "bajo los términos de la Licencia Pública General de GNU\n"
+#~ "<http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "NO HAY GARANTÍA, a la extensión permitida por la ley.\n"
+#~ "\n"
diff --git a/gnulib-po/et.gmo b/gnulib-po/et.gmo
new file mode 100644
index 0000000..2840c4d
--- /dev/null
+++ b/gnulib-po/et.gmo
Binary files differ
diff --git a/gnulib-po/et.po b/gnulib-po/et.po
new file mode 100644
index 0000000..c3a7519
--- /dev/null
+++ b/gnulib-po/et.po
@@ -0,0 +1,693 @@
+# This file is distributed under the same license as the gnulib package.
+# Estonian translations for gnulib
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Toomas Soome <Toomas.Soome@microlink.ee>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-05-19 15:10+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "vigane argument %s võtmel `%s'"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "segane argument %s võtmele `%s'"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Lubatud argumendid on:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "ei õnnestu luua toru"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "ei õnnestu luua toru"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Varukoopia faili \"%s\" ei õnnestu kirjutamiseks avada"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "viga kirjutamisel"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Tundmatu süsteemne viga"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: võti '%s' on segane\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: võti '%s' on segane\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: tundmatu võti '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: võti '%c%s' ei luba kasutada argumenti\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: võti '%s' nõuab argumenti\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: vigane võti -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: võti nõuab argumenti -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "mälu on otsas"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "ei õnnestu luua toru"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s: alamprotsess sai vea"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle ebaõnnestus"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "failipidet %d ei õnnestu taastada: dup2 ebaõnnestus"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s alamprotsess"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s alamprotsess sai fataalse signaali %d"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Kirjutanud %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Kirjutanud %s ja %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Kirjutanud %s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s\n"
+#~ "ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s, %s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Kirjutanud %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s ja teised.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Vigadest teatage palun aadressil: %s.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "%s vigadest teatage palun aadressil: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s koduleht: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Üldine abiinfo GNU tarkvara kasutamisest: <http://www.gnu.org/gethelp/>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: %s väärtus on väiksem või võrdne kui %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT parameeter nõuab väärtust"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT parameeter peab olema positiivne"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Tundmatu ARGP_HELP_FMT parameeter"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Prügi ARGP_HELP_FMT sees: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Kohustuslikud argumendid pikkadele võtmetele on kohustuslikud ka "
+#~ "lühikestele."
+
+#~ msgid "Usage:"
+#~ msgstr "Kasutamine:"
+
+#~ msgid "  or: "
+#~ msgstr "  või: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [VÕTI]..."
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Lisainfo saamiseks proovige `%s --help' või `%s --usage'.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Vigadest teatage palun aadressil %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "anna see abiinfo"
+
+#~ msgid "give a short usage message"
+#~ msgstr "anna kasutamise lühikirjeldus"
+
+#~ msgid "NAME"
+#~ msgstr "NIMI"
+
+#~ msgid "set the program name"
+#~ msgstr "sea programmi nimi"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "oota SEK sekundit (vaikimisi 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "väljasta programmi versioon"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMMI VIGA) Versioon ei ole teada!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Liiga palju argumente\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMMI VIGA) Võti pidanuks olema teada!?"
+
+#~ msgid "program error"
+#~ msgstr "programmi viga"
+
+#~ msgid "stack overflow"
+#~ msgstr "pinu ületäitumine"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "ei leia ajutist kataloogi, proovige seada $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "vormiga \"%s\" ei saa ajutist kataloogi luua"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "ajutist faili %s ei õnnestu kustutada"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "ajutist kataloogi %s ei õnnestu kustutada"
+
+#~ msgid "error closing file"
+#~ msgstr "viga faili sulgemisel"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "säilitan %s õiguseid"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "viga \"%s\" lugemiseks avamisel"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "viga \"%s\" lugemisel"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "viga \"%s\" kirjutamisel"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "viga peale \"%s\" lugemist"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() ebaõnnestus"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "C# kompilaatorit pole, proovige paigaldada pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "C# virtuaalmasinat pole, proovige paigaldada pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "tavaline tühi fail"
+
+#~ msgid "regular file"
+#~ msgstr "tavaline fail"
+
+#~ msgid "directory"
+#~ msgstr "Kataloog"
+
+#~ msgid "block special file"
+#~ msgstr "blokkseadme fail"
+
+#~ msgid "character special file"
+#~ msgstr "sümbolseadme fail"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "nimeviide"
+
+#~ msgid "socket"
+#~ msgstr "sokkel"
+
+#~ msgid "message queue"
+#~ msgstr "teadete järjekord"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "jagatud mälu objekt"
+
+#~ msgid "typed memory object"
+#~ msgstr "tüübitud mälu objekt"
+
+#~ msgid "weird file"
+#~ msgstr "veider fail"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Aadressiperekonda või hostinime ei toetata"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Ajutine tõrge nime lahendamisel"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Vigane ai_flags väärtus"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "nime lahendamisl tekkis taastumatu tõrge"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family ei toetata"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Tõrge mälu haaramisel"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Hosti nimega ei ole aadresse seostatud"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nimi või teenus on tundmatu"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "ai_socktype ei toeta teenuse nime"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype ei toetata"
+
+#~ msgid "System error"
+#~ msgstr "Süsteemne viga"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumentide puhver on liiga väike"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Päringu töötlemine käib"
+
+#~ msgid "Request canceled"
+#~ msgstr "Päring katkestati"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Päringut ei katkestatud"
+
+#~ msgid "All requests done"
+#~ msgstr "Kõik päringud täidetud"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Katkestatud signaaliga"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parameetersõne ei ole korrektselt kodeeritud"
+
+#~ msgid "Unknown error"
+#~ msgstr "Tundmatu viga"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: võti '--%s' ei luba kasutada argumenti\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: tundmatu võti '--%s'\n"
+
+#~ msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgstr "%s: võti '-W %s' on segane\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: võti '-W %s' ei luba kasutada argumenti\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "funktsiooni compile_java_class argument source_version on vigane"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "funktsiooni compile_java_class argument target_version on vigane"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "\"%s\" ei õnnestu luua"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "viga faili \"%s\" kirjutamisel"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr "Java kompilaatorit pole, proovige paigaldada gcj või seada $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr "Java virtuaalmasinat pole, proovige paigaldada gcj või seada $JAVAC"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s: alamprotsess sai S/V vea"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "ei õnnestu muuta %s õigusi"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "kataloogi `%s' ei õnnestu luua"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "ei õnnestu registreerida jooksvat töökataloogi"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "esialgsesse töökataloogi ei õnnestu tagasi minna"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Faili /dev/zero saa lugemiseks avada"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "lugemise lõime loomine ebaõnnestus"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "ühendus %s alamprotsessiga ebaõnnestus"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "kirjutamine %s alamprotsessi sai vea"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "lugemine %s alamprotsessist sai vea"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "lõimede loomine ebaõnnestus"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Vigane regulaaravaldis"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Vigane võrdlussümbol"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Vigane sümbolite klassi nimi"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Vigane tagasiviide"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Vigane vahemiku lõpp"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Mälu on otsas"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Vigane eelnev regulaaravaldis"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Enneaegne regulaaravaldise lõpp"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Regulaaravaldis on liiga pikk"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Eelmist regulaaravaldist pole"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[eE]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "ei õnnestu seada %s õigusi"
+
+#~ msgid "Bus error"
+#~ msgstr "Siini viga"
+
+#~ msgid "Power failure"
+#~ msgstr "Toite viga"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv funktsioon ei ole kasutatav"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv funktsioon puudub"
+
+#~ msgid "character out of range"
+#~ msgstr "sümbol on piirkonnast väljas"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "U+%04X ei saa lokaalsesse kooditabelisse teisendada"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "U+%04X ei saa lokaalsesse kooditabelisse teisendada: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "vigane kasutaja"
+
+#~ msgid "invalid group"
+#~ msgstr "vigane grupp"
+
+#~ msgid "invalid spec"
+#~ msgstr "vigane spetsifikatsioon"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s koduleht: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "standardsisend"
+
+#~ msgid "stdout"
+#~ msgstr "standardväljund"
+
+#~ msgid "stderr"
+#~ msgstr "standardvead"
+
+#~ msgid "unknown stream"
+#~ msgstr "undmatu voog"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "reopen %s moodiga %s ebaõnnestus"
+
+#~ msgid "string comparison failed"
+#~ msgstr "sõnede võrdlus ebaõnnestus"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Probleemi lahendamiseks seadke LC_ALL=C."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Võrreldi sõnesid %s ja %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "ei õnnestu luua vormindatud väljundit"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "vigane %s%s argument `%s'"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "vigane sufiks %s%s argument `%s'"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s argument `%s' on liiga suur"
diff --git a/gnulib-po/eu.gmo b/gnulib-po/eu.gmo
new file mode 100644
index 0000000..d58635f
--- /dev/null
+++ b/gnulib-po/eu.gmo
Binary files differ
diff --git a/gnulib-po/eu.po b/gnulib-po/eu.po
new file mode 100644
index 0000000..36674b5
--- /dev/null
+++ b/gnulib-po/eu.po
@@ -0,0 +1,520 @@
+# translation of coreutils-5.2.1.po to Euskara
+# Basque translation of 5.2.1.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the Coreutils-5.2.1 package.
+# Mikel Olasagasti <hey_neken@mundurat.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: coreutils-5.2.1\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2005-01-04 20:27+0100\n"
+"Last-Translator: Mikel Olasagasti <hey_neken@mundurat.net>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%s baliogabeko argumentua da %s-(r)entzat"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%s argumentu anbiguoa da %s-(r)entzat"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Baliozko argumentuak hauek dira:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "ezin da %s esteka sortu"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "ezin da %s esteka sortu"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "errepikatu arte"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "idazketa errorea"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Sistema-errore ezezaguna"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: '%s' aukera anbiguoa da\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: '%s' aukera anbiguoa da\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: '%c%s' aukera ezezaguna\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: '%c%s' aukerak ez du argumenturik onartzen\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: '%s' aukerak argumentu bat behar du\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: -- %c aukera baliogabea\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: aukerak --%c argumentu bat behar du\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria agortuta"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "ezin da %s esteka sortu"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "baliogabea"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "baliogabea"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "baliogabea"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "%s-k idatzia.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "%s-k eta %s-k idatzia.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "%s, %s eta %s-k idatzia.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s,\n"
+#~ "eta %s-k idatzia.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s,\n"
+#~ "%s eta %s-k idatzia.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s,\n"
+#~ "%s, %s eta %s-k idatzia.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s,\n"
+#~ "%s, %s, %s, eta %s-k idatzia.\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"
+#~ "eta %s-k idatzia.\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,%s, eta %s-k idatzia.\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,·eta beste batzuk idatzia.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Programa-erroreen berri emateko idatzi hona: <%s>.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Programa-erroreen berri emateko idatzi hona: <%s>.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Beharrezkoak diren argumentuak aukera luzeetan, beharrezkoak dira aukera "
+#~ "txikietan ere.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Erabilera: %s [AUKERA]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Saiatu `%s --help' erabiltzen informazio gehiagorako.\n"
+
+#~ msgid "NAME"
+#~ msgstr "IZENA"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "e"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "irakurketa errorea"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "errepikatu arte"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "errorea %s irakurtzen"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "errorea %s idazten"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "errorea %s irakurtzen"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "irekitzeak huts egin du"
+
+#~ msgid "regular empty file"
+#~ msgstr "fitxategi erregular hutsa"
+
+#~ msgid "regular file"
+#~ msgstr "Espresio erregularra"
+
+#~ msgid "directory"
+#~ msgstr "direktorioa"
+
+#, fuzzy
+#~ msgid "block special file"
+#~ msgstr "bloke tamainua"
+
+#, fuzzy
+#~ msgid "character special file"
+#~ msgstr "offset karakterea zero da"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "esteka sinbolikoa"
+
+#~ msgid "socket"
+#~ msgstr "socket-a"
+
+#~ msgid "message queue"
+#~ msgstr "Bidali ilara"
+
+#~ msgid "semaphore"
+#~ msgstr "semaforoa"
+
+#~ msgid "shared memory object"
+#~ msgstr "memoria partekatuaren objektua"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "memoria partekatuaren objektua"
+
+#~ msgid "weird file"
+#~ msgstr "fitxategi arraroa"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fifo fitxategiek ez dute euskarririk"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fifo fitxategiek ez dute euskarririk"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fifo fitxategiek ez dute euskarririk"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "idazketa errorea"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Sistema-errore ezezaguna"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: '--%s' aukerak ez du argumenturik onartzen\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: '--%s' aukera ezezaguna\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: -- %c aukera ilegala\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: '-W %s' aukera anbiguoa da\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: '-W.%s' aukerak ez du argumenturik onartzen\n"
+
+#~ msgid "block size"
+#~ msgstr "bloke tamainua"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s badago baina ez da direktorio bat"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "ezin da %s-(r)en jabetza eta/edo taldea aldatu"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "ezin da %s direktorioa sortu"
+
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "ezin da %s direktoriora aldatu"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "ezin da %s-(r)en baimenak aldatu"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "Inprimatu Fitxategi-izena - e e"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "baimenak errepikatu arte"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "baliogabea"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "baliogabea"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "memoria agortuta"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "baliogabea"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "in bilatu"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "baliogabea"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "in bilatu"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[bB]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[eE]"
+
+#~ msgid "character out of range"
+#~ msgstr "karakterea barrutitik kanpora"
+
+#~ msgid "invalid user"
+#~ msgstr "baliogabeko erabiltzailea"
+
+#~ msgid "invalid group"
+#~ msgstr "baliogabeko taldea"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "ezin da UID zenbaki baten saio taldea lortu"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "programa da eta edo - Orokorra Publikoa Lizentzia bider Libre Softwarea "
+#~ "edo e e"
+
+#~ msgid "string comparison failed"
+#~ msgstr "kate konparaketak huts egin du"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Ezarri LC_ALL='C' arazo hau une batez konpontzeko"
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Alderatutako bi kateak %s eta %s izan dira."
diff --git a/gnulib-po/fi.gmo b/gnulib-po/fi.gmo
new file mode 100644
index 0000000..487f22c
--- /dev/null
+++ b/gnulib-po/fi.gmo
Binary files differ
diff --git a/gnulib-po/fi.po b/gnulib-po/fi.po
new file mode 100644
index 0000000..1c13a76
--- /dev/null
+++ b/gnulib-po/fi.po
@@ -0,0 +1,877 @@
+# Finnish messages for gnulib.
+# Copyright © 2002, 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Lauri Nurmi <lanurmi@iki.fi>, 2003, 2004.
+# Matti Koskimies <matti@apulanta.fi>, 2002.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-12-10 19:05+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-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural= ( n!=1) ;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "virheellinen argumentti %s kohteelle %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "moniselitteinen argumentti %s kohteelle %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Kelvolliset argumentit:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "ei voida luoda putkea"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "ei voida luoda putkea"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "ei voida avata varmuuskopiotiedostoa ”%s” kirjoittamista varten"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "kirjoitusvirhe"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Tuntematon järjestelmävirhe"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: tunnistamaton valitsin ’%c%s’\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: valitsin ’--%s’ vaatii argumentin\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: epäkelpo valitsin -- ’%c’\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: valitsin vaatii argumentin -- ’%c’\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "muisti loppui"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "”"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "ei voida luoda putkea"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s-aliprosessi epäonnistui"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Hälytyskello"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle epäonnistui"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ei voi palauttaa fd %d: dup2 epäonnistui"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-aliprosessi"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-aliprosessi sai sammuttavan signaalin %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Pakkaaja: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Pakkaaja: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Lisenssi GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/"
+#~ "licenses/gpl.html>.\n"
+#~ "Tämä on vapaa ohjelmisto: voit vapaasti muuttaa sitä tai jakaa sitä "
+#~ "edelleen.\n"
+#~ "Ohjelmalle EI OLE TAKUUTA siinä laajuudessa mitä laki sen sallii.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Kirjoittanut %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Kirjoittaneet %s ja %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Kirjoittaneet %s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s, %s,\n"
+#~ "%s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s ja %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Kirjoittaneet %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, %s ja muut.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Lähetä ilmoitukset ohjelmistovioista (englanniksi) osoitteeseen %s\n"
+#~ "Lähetä ilmoitukset käännösvirheistä osoitteeseen <translation-team-"
+#~ "fi@lists.sourceforge.net>\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "Lähetä %s ilmoitukset ohjelmistovioista (englanniksi) osoitteeseen %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s kotisivu: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Yleinen opaste GNU-ohjelmiston käyttämiseen: <http://www.gnu.org/gethelp/"
+#~ ">\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: %s arvo on pienempi tai yhtäsuuri kuin %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT parametri vaatii arvon"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT parametrin on oltava positiivinen"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Tuntematon ARGP_HELP_FMT-parametri"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Roskaa kohteessa ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Pitkien valitsimien pakolliset tai valinnaiset argumentit ovat pakollisia "
+#~ "tai valinnaisia myös lyhyille valitsimille."
+
+#~ msgid "Usage:"
+#~ msgstr "Käyttö:"
+
+#~ msgid "  or: "
+#~ msgstr "  tai: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [VALITSIN...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Lisätietoja saa komennolla ”%s --help” tai ”%s --usage”.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Lähetä raportit ohjelmistovioista (englanniksi) osoitteeseen %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "anna tämä opasteluettelo"
+
+#~ msgid "give a short usage message"
+#~ msgstr "anna tämä lyhyt käyttösanoma"
+
+#~ msgid "NAME"
+#~ msgstr "NIMI"
+
+#~ msgid "set the program name"
+#~ msgstr "aseta ohjelman nimi"
+
+#~ msgid "SECS"
+#~ msgstr "SEKUNTIA"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "odota SEKUNTIA sekuntia (oletus 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "tulosta ohjelman versio"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(OHJELMAVIRHE) Versiota ei tiedetä!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Liian monta argumenttia\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(OHJELMAVIRHE) Valitsimen pitäisi olla tunnistettava!?"
+
+#~ msgid "program error"
+#~ msgstr "ohjelmavirhe"
+
+#~ msgid "stack overflow"
+#~ msgstr "pinon ylivuoto"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "ei voi löytää tilapäistä hakemistoa, yritä asettaa $TMPDIR-"
+#~ "ympäristömuuttuja"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "ei voida luoda tilapäistä hakemistoa käyttäen mallinnetta ”%s”"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "ei voida poistaa tilapäistä tiedostoa %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "ei voida poistaa tilapäistä hakemistoa %s"
+
+#~ msgid "error closing file"
+#~ msgstr "virhe suljettaessa tiedostoa"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "säilytetään oikeudet kohteelle %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "virhe avattaessa tiedostoa ”%s” lukemista varten"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "virhe luettaessa tiedostoa ”%s”"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "virhe kirjoitettaessa tiedostoa ”%s”"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "virhe luettaessa tiedostoa ”%s”"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen()-kutsu epäonnistui"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "C#-kääntäjää ei löytynyt, yritä asentaa pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "C#-virtuaalikonetta ei löytynyt, yritä asentaa pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "tavallinen tyhjä tiedosto"
+
+#~ msgid "regular file"
+#~ msgstr "tavallinen tiedosto"
+
+#~ msgid "directory"
+#~ msgstr "hakemisto"
+
+#~ msgid "block special file"
+#~ msgstr "lohkoerikoistiedosto"
+
+#~ msgid "character special file"
+#~ msgstr "merkkierikoistiedosto"
+
+#~ msgid "fifo"
+#~ msgstr "putkitiedosto"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolinen linkki"
+
+#~ msgid "socket"
+#~ msgstr "pistoke"
+
+#~ msgid "message queue"
+#~ msgstr "viestijono"
+
+#~ msgid "semaphore"
+#~ msgstr "semafori"
+
+#~ msgid "shared memory object"
+#~ msgstr "jaettu muistiobjekti"
+
+#~ msgid "typed memory object"
+#~ msgstr "tyypitetty muistiobjekti"
+
+#~ msgid "weird file"
+#~ msgstr "outo tiedosto"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Osoiteperhe tietokonenimelle ei ole tuettu"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Tilapäinen virhe nimiratkaisussa"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Väärä arvo kohteelle ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Korjaamaton virhe nimiratkaisussa"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family ei ole tuettu"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Muistinvarausvirhe"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Tietokonenimeen ei ole liitetty osoitetta"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nimeä tai palvelua ei tunneta"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname ei ole tuettu kohteelle ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype ei ole tuettu"
+
+#~ msgid "System error"
+#~ msgstr "Järjestelmävirhe"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumenttipuskuri on liian suuri"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Prosessointipyyntö käsittelyssä"
+
+#~ msgid "Request canceled"
+#~ msgstr "Pyyntö peruttu"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Pyyntöä ei ole peruttu"
+
+#~ msgid "All requests done"
+#~ msgstr "Kaikki pyynnöt suoritettu"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Signaalin keskeyttämä"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parametrimerkkijono ei ole oikein koodattu"
+
+#~ msgid "Unknown error"
+#~ msgstr "Tuntematon virhe"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: tunnistamaton valitsin ’--%s’\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "virheellinen source_version-argumentti kohteelle compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "virheellinen target_version-argumentti kohteelle compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "kohteen ”%s” luominen epäonnistui"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "virhe kirjoitettaessa tiedostoa ”%s”"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Java-kääntäjää ei löytynyt, yritä asentaa gcj tai aseta $JAVAC-"
+#~ "ympäristömuuttuja"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Java-virtuaalikonetta ei löytynyt, yritä asentaa gij tai aseta $JAVA-"
+#~ "ympäristömuuttuja"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s-aliprosessisiirräntävirhe"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kohteen %s oikeuksien muuttaminen ei onnistu"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "hakemiston %s luominen ei onnistu"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "ei kyetä tallentaman nykyistä työhakemistoa"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "alkuperäiseen työhakemistoon palaaminen epäonnistui"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Kohteen /dev/zero avaaminen lukemista varten epäonnistui"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "lukemissäikeen luominen epäonnistui"
+
+#  nonblocking I/O on synonyymi termille asynchronous I/O
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "ei voi asettaa tahdistamatonta siirräntää aliprosessille %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "viestintä aliprosessin %s kanssa epäonnistui"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "kirjoittaminen aliprosessiin %s epäonnistui"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "lukeminen aliprosessista %s epäonnistui"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "aliprosessi %s päättyi poistumiskoodilla %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "säikeiden luominen epäonnistui"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s-aliprosessi päättyi poistumiskoodilla %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Onnistui"
+
+#~ msgid "No match"
+#~ msgstr "Ei osumaa"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Virheellinen säännöllinen lauseke"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "virheellinen collation-merkkiluokka"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Virheellinen merkkiluokkanimi"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Jälkikenoviiva"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Virheellinen paluuviite"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Pariton [ tai [^"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "pariton ( tai \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Pariton \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Kohteen \\{\\} virheellinen sisältö"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Virheellinen lukualueen loppu"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Muisti loppui"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Virheellinen edeltävä säännöllinen lauseke"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Ennenaikainen säännöllisen lausekkeen loppu"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Säännöllinen lauseke on liian iso"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Pariton ) tai \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Ei edellistä säännöllistä lauseketta"
+
+# Kaikkihan muistavat kääntää nämä ja vastaavat juuri näin. Ei pelkkä kK.
+#~ msgid "^[yY]"
+#~ msgstr "^[kKyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[eEnN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "asetetaan oikeudet kohteelle %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Yhteyden katkaisu"
+
+#~ msgid "Interrupt"
+#~ msgstr "Keskeytys"
+
+#~ msgid "Quit"
+#~ msgstr "Poistu"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Virheellinen käsky"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Jäljitys/keskeytyspistekeskeytys"
+
+#~ msgid "Aborted"
+#~ msgstr "Keskeytetty"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Liukulukupoikkeus"
+
+#~ msgid "Killed"
+#~ msgstr "Sammutettu"
+
+#~ msgid "Bus error"
+#~ msgstr "Väylävirhe"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Osiinjakamisvirhe"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Rikkoutunut putki"
+
+#~ msgid "Terminated"
+#~ msgstr "Päättynyt"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Kiireellinen siirräntätila"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Pysäytetty (signaali)"
+
+#~ msgid "Stopped"
+#~ msgstr "Pysäytetty"
+
+#~ msgid "Continued"
+#~ msgstr "Jatkettu"
+
+#~ msgid "Child exited"
+#~ msgstr "Lapsiprosessi poistunut"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Pysäytetty (tty-syöte)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Pysäytetty (tty-tuloste)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Siirräntä mahdollinen"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Suoritinaikaraja ylitetty"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Tiedostonkokoraja ylitetty"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtuaaliajastin päättynyt"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Profilointiajastin päättynyt"
+
+#~ msgid "Window changed"
+#~ msgstr "Ikkuna vaihtunut"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Käyttäjän määrittelemä signaali 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Käyttäjän määrittelemä signaali 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT-keskeytys"
+
+#~ msgid "Bad system call"
+#~ msgstr "Väärä järjestelmäkutsu"
+
+#~ msgid "Stack fault"
+#~ msgstr "Pinovirhe"
+
+#~ msgid "Information request"
+#~ msgstr "Tietopyyntö"
+
+#~ msgid "Power failure"
+#~ msgstr "Teholähdevika"
+
+#~ msgid "Resource lost"
+#~ msgstr "Resurssi kadonnut"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "virhe kirjoitettaessa suljettuun putkeen tai pistokkeeseen"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Tosiaikasignaali %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Tuntematon signaali %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv-funktio ei ole käyttökelpoinen"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv-funktio ei ole saatavilla"
+
+#~ msgid "character out of range"
+#~ msgstr "merkki sallitun välin ulkopuolella"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "merkin U+%04X muunnos paikalliseen merkistöön ei onnistu"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "merkin U+%04X muunnos paikalliseen merkistöön ei onnistu: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "virheellinen käyttäjä"
+
+#~ msgid "invalid group"
+#~ msgstr "virheellinen ryhmä"
+
+#~ msgid "invalid spec"
+#~ msgstr "virheellinen määrittely"
+
+#~ msgid "unable to display error message"
+#~ msgstr "ei kyetä näyttämään virheilmoitusta"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s kotisivu:  <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "vakiosyöte"
+
+#~ msgid "stdout"
+#~ msgstr "vakiotuloste"
+
+#~ msgid "stderr"
+#~ msgstr "vakiovirhe"
+
+#~ msgid "unknown stream"
+#~ msgstr "tuntematon merkkivirta"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "kohteen %s avaaminen uudelleen tilassa %s epäonnistui"
+
+#~ msgid "string comparison failed"
+#~ msgstr "merkkijonovertailu epäonnistui"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Aseta LC_ALL='C' ongelman kiertämiseksi."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Vertaillut merkkijonot olivat %s ja %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "muotoiltua tulostetta ei voitu suorittaa"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "virheellinen %s%s-argumentti ”%s”"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "virheellinen jälkiliite kohteen %s%s argumentissa ”%s”"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s argumentti ”%s” on liian iso"
diff --git a/gnulib-po/fr.gmo b/gnulib-po/fr.gmo
new file mode 100644
index 0000000..16fad9d
--- /dev/null
+++ b/gnulib-po/fr.gmo
Binary files differ
diff --git a/gnulib-po/fr.po b/gnulib-po/fr.po
new file mode 100644
index 0000000..374b5d3
--- /dev/null
+++ b/gnulib-po/fr.po
@@ -0,0 +1,914 @@
+# Messages français pour GNU concernant gnulib.
+# Copyright © 1996-, 2008, 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-.
+# Nicolas Provost <nprovost@quadriv.com>, 2008.
+# David Prévot <david@tilapin.org>, 2011.
+# Stéphane Aulery <lkppo@free.fr>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib-4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-21 20:15+0200\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 1.2\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument %s non valable pour %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument %s ambigu pour %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Les arguments valables 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 cachés (%.2f%%).\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u cachés (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u cachés (%.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 par comptage\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "histogramme par taille\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "histogramme par densité\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistiques de bitset :\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Lancement cumulés = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "impossible de lire les permissions du fichier"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "taille du fichier de permission erroné\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "impossible d'écrire les permissions du fichier"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "impossible d'ouvrir les permissions du fichier en écriture"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "erreur d'écriture"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Erreur système inconnue"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s : l'option « %s%s » est ambiguë\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s : l'option « %s%s » est ambiguë, possibilités :"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s : option « %s%s » non reconnue\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s : l'option « %s%s » ne prend pas d'argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s : l'option « %s%s » nécessite un argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s : option non valable -- « %c »\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s : l'option nécessite un argument -- « %c »\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "mémoire épuisée"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "« "
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr " »"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "impossible de créer un tube (« pipe »)"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "échec de sous-processus %s"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Temps d'exécution (s)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "Temps utilisateur"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "Temps système"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "horloge murale"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "échec de _open_osfhandle"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+"impossible de restaurer le descripteur de fichier (fd) %d : échec de dup2"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "sous-processus %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "le sous-processus %s a reçu un signal fatal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Empaqueté par %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Empaqueté par %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <%s>\n"
+#~ "Logiciel libre : vous êtes libre de le modifier ou de le redistribuer.\n"
+#~ "Il n'y a AUCUNE GARANTIE, dans les limites permises par la loi.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Écrit par %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Écrit par %s et %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Écrit par %s, %s et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s, %s, et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s, %s, %s, et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s et %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Écrit par %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s et d'autres.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Signalez toute anomalie à : %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Signalez les anomalies de %s à : %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "page d'accueil de %s : <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Aide globale sur les logiciels GNU : <%s>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT : la valeur %s est inférieure ou égale à %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s : le paramètre ARGP_HELP_FMT nécessite une valeur"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s : paramètre ARGP_HELP_FMT inconnu"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Problème dans ARGP_HELP_FMT : %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Les arguments obligatoires pour la forme longue des options le sont aussi "
+#~ "pour les formes courtes associées."
+
+#~ msgid "Usage:"
+#~ msgstr "Utilisation :"
+
+#~ msgid "  or: "
+#~ msgstr "  ou : "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPTION...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "Essayez « %s --help » ou « %s --usage » pour obtenir plus de "
+#~ "renseignements.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Signalez toute anomalie à %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "affiche cette aide"
+
+#~ msgid "give a short usage message"
+#~ msgstr "donne un court message d'utilisation"
+
+#~ msgid "NAME"
+#~ msgstr "NOM"
+
+#~ msgid "set the program name"
+#~ msgstr "définit le nom du programme"
+
+#~ msgid "SECS"
+#~ msgstr "SECS"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "suspension pendant SECS secondes (par défaut 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "affiche la version du programme"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(Erreur du programme) pas de version connue !"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s : trop d'arguments\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(Erreur du programme) l'option aurait dû être reconnue !"
+
+#~ msgid "program error"
+#~ msgstr "erreur du programme"
+
+#~ msgid "stack overflow"
+#~ msgstr "dépassement de pile"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "impossible de trouver un répertoire temporaire, essayez de définir $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr ""
+#~ "impossible de créer un répertoire temporaire en utilisant le modèle "
+#~ "« %s »."
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "impossible de supprimer le ficher temporaire %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "impossible de supprimer le répertoire temporaire %s"
+
+#~ msgid "error closing file"
+#~ msgstr "erreur de fermeture de fichier"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "conservation des permissions de %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "erreur à l'ouverture de %s en lecture"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "impossible d'ouvrir le fichier de sauvegarde %s en écriture"
+
+#~ msgid "error reading %s"
+#~ msgstr "erreur de lecture de %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "erreur d'écriture de %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "erreur après la lecture de %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "échec de fdopen()"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "compilateur C# non trouvé, essayez d'installer mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "machine virtuelle C# non trouvée, essayez d'installer mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ non appairée"
+
+#~ msgid "invalid character class"
+#~ msgstr "nom de classe de caractères non valable"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "la syntaxe de la classe de caractères est [[:space:]], et non [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "espace \\ non terminé"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "le contenu de \\{\\} n'est pas valable"
+
+#~ msgid "regular expression too big"
+#~ msgstr "expression rationnelle trop grande"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( non appairée"
+
+#~ msgid "no syntax specified"
+#~ msgstr "pas de syntaxe spécifiée"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") non appairée"
+
+#~ msgid "regular empty file"
+#~ msgstr "fichier régulier vide"
+
+#~ msgid "regular file"
+#~ msgstr "fichier régulier"
+
+#~ msgid "directory"
+#~ msgstr "répertoire"
+
+#~ msgid "symbolic link"
+#~ msgstr "lien symbolique"
+
+#~ msgid "message queue"
+#~ msgstr "file de messages"
+
+#~ msgid "semaphore"
+#~ msgstr "sémaphore"
+
+#~ msgid "shared memory object"
+#~ msgstr "objet de mémoire partagée"
+
+#~ msgid "typed memory object"
+#~ msgstr "objet mémoire typé"
+
+#~ msgid "block special file"
+#~ msgstr "fichier spécial de blocs"
+
+#~ msgid "character special file"
+#~ msgstr "fichier spécial de caractères"
+
+#~ msgid "contiguous data"
+#~ msgstr "données contiguës"
+
+#~ msgid "fifo"
+#~ msgstr "PEPS (FIFO)"
+
+#~ msgid "door"
+#~ msgstr "porte"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "fichier spécial de blocs multipléxé"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "fichier spécial de caractères mulipléxé"
+
+#~ msgid "multiplexed file"
+#~ msgstr "fichier multipléxé"
+
+#~ msgid "named file"
+#~ msgstr "fichier nommé"
+
+#~ msgid "network special file"
+#~ msgstr "fichier spécial de réseau"
+
+#~ msgid "migrated file with data"
+#~ msgstr "fichier migré avec ses données"
+
+#~ msgid "migrated file without data"
+#~ msgstr "fichier migré sans ses données"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "sans"
+
+#~ msgid "weird file"
+#~ msgstr "fichier bizarre"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Famille d'adresses du nom d'hôte non pris en charge"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Échec temporaire lors de la résolution de noms"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Mauvaise valeur pour ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Échec définitif lors de la résolution de noms"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family non pris en charge"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Échec d'allocation mémoire"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Aucune adresse associée au nom d'hôte"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nom ou service inconnu"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Nom de serveur non pris en charge pour ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype non pris en charge"
+
+#~ msgid "System error"
+#~ msgstr "Erreur système"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Mémoire tampon d'argument trop petite"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Traitement de la requête en cours"
+
+#~ msgid "Request canceled"
+#~ msgstr "Requête annulée"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Requête non annulée"
+
+#~ msgid "All requests done"
+#~ msgstr "Requêtes toutes traitées"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interruption par un signal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Chaîne de paramètre mal encodé"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erreur inconnue"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "argument source_version non valable pour compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "argument target_version non valable pour compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "échec de création de « %s »"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "erreur lors de l'écriture du fichier « %s »"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "compilateur Java non trouvé, essayez d'installer gcj ou de définir $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "machine virtuelle Java non trouvée, essayez d'installer gij ou de définir "
+#~ "$JAVAC"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "erreur d'entrée sortie du sous-processus %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "impossible de lire les permissions de %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "impossible de modifier les permissions de %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "impossible de créer le répertoire %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "impossible de mémoriser le répertoire de travail courant"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "échec de retour au répertoire initial de travail"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Échec d'ouverture de /dev/zero en lecture"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "échec de création du processus de lecture"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr ""
+#~ "impossible de configurer l'entrée sortie non bloquante au sous-processus "
+#~ "%s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "échec de communication avec le sous-processus %s"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "échec d'écriture vers le sous-processus %s"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "échec de lecture depuis le sous-processus %s"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "le sous-processus %s s'est terminé avec le code de retour %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "échec de création de processus"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "le sous-processus de %s s'est terminé avec le code de retour %d"
+
+#~ msgid "Success"
+#~ msgstr "Succès"
+
+#~ msgid "No match"
+#~ msgstr "Pas de correspondance"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Expression rationnelle non valable"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Caractère d'assemblage non valable"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Nom de classe de caractères non valable"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Barre oblique inverse en fin de ligne"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Référence antérieure non valable"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "[, [^, [:, [. ou [= non appairé"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( ou \\( non appairée"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ non appairée"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Le contenu de \\{\\} n'est pas valable"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Borne finale de l'intervalle non valable"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Mémoire épuisée"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Expression rationnelle précédente non valable"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Fin prématurée d'expression rationnelle"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Expression rationnelle trop grande"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") ou \\) non appairée"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Pas d'expression rationnelle précédente"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[oOyY].*"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN].*"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "impossible de définir les permissions de %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Raccrocher"
+
+#~ msgid "Interrupt"
+#~ msgstr "Interrompre"
+
+#~ msgid "Quit"
+#~ msgstr "Quitter"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Instruction illégale"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Piège de trace ou point de d'arrêt "
+
+#~ msgid "Aborted"
+#~ msgstr "Abandonné"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Exception de virgule flottante"
+
+#~ msgid "Killed"
+#~ msgstr "Tué"
+
+#~ msgid "Bus error"
+#~ msgstr "Erreur de bus"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Erreur de segmentation"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Tube rompu"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Réveil"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminé"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Condition d'entrée sortie urgente"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Arrêté (signal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Arrêté"
+
+#~ msgid "Continued"
+#~ msgstr "Continué"
+
+#~ msgid "Child exited"
+#~ msgstr "Fin du processus fils"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Arrêté (entrée de tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Arrêté (sortie de tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Entrée sortie possible"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Temps limite de processeur dépassé"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Taille limite de fichier dépassée"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Temporisation virtuelle dépassée"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Temporisation de profilage dépassée"
+
+#~ msgid "Window changed"
+#~ msgstr "Fenêtre modifiée"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Signal 1 défini par utilisateur"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Signal 2 défini par utilisateur"
+
+#~ msgid "EMT trap"
+#~ msgstr "Piège EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Mauvais appel système"
+
+#~ msgid "Stack fault"
+#~ msgstr "Défaut de pile"
+
+#~ msgid "Information request"
+#~ msgstr "Demande de renseignements"
+
+#~ msgid "Power failure"
+#~ msgstr "Échec d'alimentation"
+
+#~ msgid "Resource lost"
+#~ msgstr "Ressource perdue"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "Erreur d'écriture vers un tube ou un socket fermé"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Signal %d en temps réel"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Signal %d inconnu"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "fonction iconv non utilisable"
+
+#~ msgid "iconv function not available"
+#~ msgstr "fonction iconv non disponible"
+
+#~ msgid "character out of range"
+#~ msgstr "caractère hors limites"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "impossible de convertir U+%04X dans le jeu de caractères local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "impossible de convertir U+%04X dans le jeu de caractères local : %s"
+
+#~ msgid "invalid user"
+#~ msgstr "utilisateur non valable"
+
+#~ msgid "invalid group"
+#~ msgstr "groupe non valable"
+
+#~ msgid "invalid spec"
+#~ msgstr "spécification non valable"
+
+#~ msgid "unable to display error message"
+#~ msgstr "impossible d'afficher le message d'erreur"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "impossible de définir le mode texte/binaire du descripteur de fichier"
+
+#~ msgid "stdin"
+#~ msgstr "entrée standard (stdin)"
+
+#~ msgid "stdout"
+#~ msgstr "sortie standard (stdout)"
+
+#~ msgid "stderr"
+#~ msgstr "sortie d'erreur (stderr)"
+
+#~ msgid "unknown stream"
+#~ msgstr "flux inconnu"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "impossible de rouvrir %s en mode %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "échec de comparaison de chaîne"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Définir LC_ALL='C' pour contourner le problème."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Les chaînes comparées étaient %s et %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "impossible mettre en forme la sortie formatée"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "descripteurs de fichier standards"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "argument %s%s non valable « %s »"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "suffixe non valable dans l'argument %s%s « %s »"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argument %s%s « %s » trop grand"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "page d'accueil de %s : <https://www.gnu.org/software/%s/>\n"
diff --git a/gnulib-po/ga.gmo b/gnulib-po/ga.gmo
new file mode 100644
index 0000000..0e2cba8
--- /dev/null
+++ b/gnulib-po/ga.gmo
Binary files differ
diff --git a/gnulib-po/ga.po b/gnulib-po/ga.po
new file mode 100644
index 0000000..b5a0cc7
--- /dev/null
+++ b/gnulib-po/ga.po
@@ -0,0 +1,742 @@
+# Irish translations for gnulib.
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2005, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 1.1\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2007-07-20 12:24-0600\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=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
+"(n>6 && n<11) ? 3 : 4;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argóint neamhbhailí %s chun %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argóint dhébhríoch %s chun %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 ""
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "ní féidir píopa a chruthú"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "ní féidir píopa a chruthú"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "ní féidir comhad cúltaca \"%s\" a oscailt chun scríobh ann"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "earráid sa scríobh"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Earráid chórais anaithnid"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: Tá an rogha `%s' débhríoch\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: Tá an rogha `%s' débhríoch\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: rogha anaithnid `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `%c%s'\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: tá argóint de dhíth i ndiaidh na rogha `%s'\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: rogha neamhbhailí -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, 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/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "cuimhne ídithe"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "ní féidir píopa a chruthú"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "theip ar fhophróiseas %s"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "fophróiseas %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "fuair fophróiseas %s comhartha marfach %d"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Ceadúnas GPLv3+: GNU GPL leagan 3 nó níos nuaí <http://gnu.org/licenses/"
+#~ "gpl.html>\n"
+#~ "Is saorbhogearra é seo: ceadaítear duit é a athrú agus a athdháileadh.\n"
+#~ "Níl baránta AR BITH ann, an oiread atá ceadaithe de réir dlí.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Le %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Le %s agus %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Le %s, %s, agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, %s, agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, %s, %s, agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, agus %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Le %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, agus daoine eile nach iad.\n"
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Seol tuairiscí fabhtanna chuig %s.\n"
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Seol tuairiscí fabhtanna chuig %s.\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: luach %s níos lú ná nó cothrom le %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: luach de dhíth ar pharaiméadar ARGP_HELP_FMT"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: luach deimhneach de dhíth ar pharaiméadar ARGP_HELP_FMT"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Paraiméadar anaithnid ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Truflais i ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Is riachtanach/roghnach le rogha ghearr aon argóint atá riachtanach/"
+#~ "roghnach leis an rogha fhada."
+
+#~ msgid "Usage:"
+#~ msgstr "Úsáid:"
+
+#~ msgid "  or: "
+#~ msgstr "  nó: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [ROGHA...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "Bain triail as `%s --help' nó `%s --usage' chun tuilleadh eolais a "
+#~ "fháil.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "taispeáin an chabhair seo"
+
+#~ msgid "give a short usage message"
+#~ msgstr "tabhair teachtaireacht bheag úsáide"
+
+#~ msgid "NAME"
+#~ msgstr "AINM"
+
+#~ msgid "set the program name"
+#~ msgstr "socraigh ainm an chláir"
+
+#~ msgid "SECS"
+#~ msgstr "SOIC"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "déan moill SOIC soicind (réamhshocrú: 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "taispeáin leagan an chláir"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(EARRÁID CHLÁIR) Leagan anaithnid!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: An iomarca argóintí\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(EARRÁID CHLÁIR) Ba chóir an rogha a aithint!?"
+
+#~ msgid "program error"
+#~ msgstr "earráid chláir"
+
+#~ msgid "stack overflow"
+#~ msgstr "cruach thar maoil"
+
+#, fuzzy
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "ní féidir comhadlann %s a chruthú"
+
+#, fuzzy
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "ní féidir comhadlann %s a chruthú"
+
+#, fuzzy
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "ní féidir comhadlann %s a chruthú"
+
+#, fuzzy
+#~ msgid "error closing file"
+#~ msgstr "earráid agus comhad \"%s\" á scríobh"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "earráid agus \"%s\" á oscailt chun é a léamh"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "earráid agus \"%s\" á léamh"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "earráid agus \"%s\" á scríobh"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "earráid tar éis \"%s\" á léamh"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "theip ar fdopen()"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "Tiomsaitheoir C# gan aimsiú, bain triail as pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "Meaisín fíorúil C# gan aimsiú, bain triail as pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "gnáthchomhad folamh"
+
+#~ msgid "regular file"
+#~ msgstr "gnáthchomhad"
+
+#~ msgid "directory"
+#~ msgstr "comhadlann"
+
+#~ msgid "block special file"
+#~ msgstr "comhad speisialta den chineál `bloc'"
+
+#~ msgid "character special file"
+#~ msgstr "comhad speisialta den chineál `carachtar'"
+
+# `TITA' ?! -KPS
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "nasc siombalach"
+
+#~ msgid "socket"
+#~ msgstr "soicéad"
+
+#~ msgid "message queue"
+#~ msgstr "ciú teachtaireachta"
+
+#~ msgid "semaphore"
+#~ msgstr "séamafór"
+
+# FARF --KPS
+#~ msgid "shared memory object"
+#~ msgstr "comhad comhchuimhne"
+
+#~ msgid "typed memory object"
+#~ msgstr "comhad cuimhne le cineál"
+
+#~ msgid "weird file"
+#~ msgstr "comhad aisteach"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Aicme sheolta d'óstainm gan tacaíocht"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Teip shealadach ar réiteach na n-ainmneacha"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Luach neamhbhailí do 'ai_flags'"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Teip dhocheartaithe ar réiteach na n-ainmneacha"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ní thacaítear le 'ai_family'"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Theip ar dháil chuimhne"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Níl seoladh ar bith ceangailte leis an óstainm"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Ainm nó seirbhís anaithnid"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Ní thacaítear le hainm freastalaithe do 'ai_socktype'"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ní thacaítear le 'ai_socktype'"
+
+#~ msgid "System error"
+#~ msgstr "Earráid chórais"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Tá an argóint mhaoláin róbheag"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Iarratas próiseála ar siúl"
+
+#~ msgid "Request canceled"
+#~ msgstr "Cealaíodh an t-iarratas"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Níor cealaíodh an t-iarratas"
+
+#~ msgid "All requests done"
+#~ msgstr "Cuireadh gach iarratas i gcrích"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Idirbhriste ag comhartha"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Níl an teaghrán paraiméadair ionchódaithe i gceart"
+
+#~ msgid "Unknown error"
+#~ msgstr "Earráid anaithnid"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `--%s'\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: rogha anaithnid `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: rogha neamhcheadaithe -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: Tá an rogha `-W %s' débhríoch\n"
+
+#~ 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"
+
+#, fuzzy
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "fophróiseas %s"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "argóint neamhbhailí \"source_version\" ar compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "argóint neamhbhailí \"target_version\" ar compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "theip ar chruthú \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "earráid agus comhad \"%s\" á scríobh"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Tiomsaitheoir Java gan aimsiú, bain triail as gcj, nó socraigh $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Meaisín fíorúil Java gan aimsiú, bain triail as gij, nó socraigh $JAVA"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "ní féidir an chomhadlann oibre a thaifead"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "níl aon fháil ar an chéad chomhadlann oibre"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "ní féidir na ceadanna de %s a athrú"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "ní féidir comhadlann %s a chruthú"
+
+#~ msgid "Success"
+#~ msgstr "D'éirigh leis"
+
+#~ msgid "No match"
+#~ msgstr "Gan mheaitseáil"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Slonn ionadaíochta neamhbhailí"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Carachtar neamhbhailí comhordaithe"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Ainm neamhbhailí ar aicme charachtar"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Cúlslais chun deiridh"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Cúltagairt neamhbhailí"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "[ nó [^ corr"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( nó \\( corr"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ corr"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Ábhar neamhbhailí idir \\{ agus \\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Deireadh raoin neamhbhailí"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Cuimhne ídithe"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Is neamhbhailí an slonn ionadaíochta roimhe seo"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Deireadh le slonn ionadaíochta gan choinne"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Slonn ionadaíochta rómhór"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") nó \\) corr"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Níl aon slonn ionadaíochta roimhe seo"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Theip ar oscailt /dev/zero chun é a léamh"
+
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS
+# neither of these letters is near the 'N' on standard keyboard...
+# #-#-#-#-#  sh-utils-2.0.15.ga.po (sh-utils 2.0.15)  #-#-#-#-#
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS
+# neither of these letters is near the 'N' on standard keyboard...
+# #-#-#-#-#  textutils-2.1.ga.po (textutils 2.1)  #-#-#-#-#
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# allow yes, but also 'i' as in 'is sea' or 's' for 'sea' -- KPS
+# neither of these letters is near the 'N' on standard keyboard...
+#~ msgid "^[yY]"
+#~ msgstr "^[yYiIsS]"
+
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# fortunately, 'n' for 'no' or 'ní hea' - KPS
+# #-#-#-#-#  sh-utils-2.0.15.ga.po (sh-utils 2.0.15)  #-#-#-#-#
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# fortunately, 'n' for 'no' or 'ní hea' - KPS
+# #-#-#-#-#  textutils-2.1.ga.po (textutils 2.1)  #-#-#-#-#
+# #-#-#-#-#  findutils-4.1.7.ga.po (findutils 4.1.7)  #-#-#-#-#
+# fortunately, 'n' for 'no' or 'ní hea' - KPS
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "ní féidir an fheidhm iconv a úsáid"
+
+#~ msgid "iconv function not available"
+#~ msgstr "níl an fheidhm iconv ar fáil"
+
+#~ msgid "character out of range"
+#~ msgstr "carachtar as raon"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "ní féidir U+%04X a thiontú chuig an fhoireann carachtar logánta"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "ní féidir U+%04X a thiontú chuig an fhoireann carachtar logánta: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "úsáideoir neamhbhailí"
+
+#~ msgid "invalid group"
+#~ msgstr "grúpa neamhbhailí"
+
+#~ msgid "invalid spec"
+#~ msgstr "sonrú neamhbhailí"
+
+#, fuzzy
+#~ msgid "preserving permissions for %s"
+#~ msgstr "ní féidir na ceadanna de %s a athrú"
+
+#~ msgid "string comparison failed"
+#~ msgstr "theip ar chomparáid idir teaghráin"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Cuir LC_ALL='C' ionas gur féidir an fhadhb seo a sheachaint."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Rinneadh comparáid idir na teaghráin %s agus %s."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr "Seol tuairiscí fabhtanna chuig %s.\n"
+
+#, fuzzy
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "argóint neamhbhailí %s chun %s"
+
+#, fuzzy
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "argóint neamhbhailí %s chun %s"
+
+#, fuzzy
+#~ msgid "setting permissions for %s"
+#~ msgstr "ní féidir na ceadanna de %s a athrú"
+
+#~ msgid "block size"
+#~ msgstr "méid bloc"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "Tá %s ann cheana, ach ní comhadlann é"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "ní féidir an t-úinéir agus/nó an grúpa de %s a athrú"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "ní féidir chdir a dhéanamh go dtí an chomhadlann %s"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "níl aon fháil ar an ghrúpa don UID uimhriúil seo"
+
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Is saorbhogearra é seo.  Is féidir leat cóipeanna a scaipeadh de réir na\n"
+#~ "gcoinníollacha den GNU General Public License\n"
+#~ "<http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "Níl baránta AR BITH ann, an oiread atá ceadaithe de réir dlí.\n"
+#~ "\n"
diff --git a/gnulib-po/gl.gmo b/gnulib-po/gl.gmo
new file mode 100644
index 0000000..e498c6b
--- /dev/null
+++ b/gnulib-po/gl.gmo
Binary files differ
diff --git a/gnulib-po/gl.po b/gnulib-po/gl.po
new file mode 100644
index 0000000..51cf806
--- /dev/null
+++ b/gnulib-po/gl.po
@@ -0,0 +1,741 @@
+# Galician translation of gnulib.
+# This file is distributed under the same license as the gnulib package.
+# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2012 Leandro Regueiro.
+#
+# Jacobo Tarrio <jtarrio@trasno.net>, 2000, 2001, 2002.
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
+#
+# Proxecto Trasno - Adaptación do software libre á lingua galega:  Se desexas
+# colaborar connosco, podes atopar máis información en http://www.trasno.net
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2012-11-11 13:26+0200\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: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento incorrecto %s para %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambiguo para %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Os argumentos válidos son:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "non é posíbel crear a canalización"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "non é posíbel crear a canalización"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr ""
+"non é posíbel abrir o ficheiro de copia de seguridade «%s» para escribir"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "erro de escritura"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Erro do sistema descoñecido"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a opción «-W %s» é ambigua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a opción «%s» é ambigua; as posibilidades son:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opción «%c%s» non recoñecida\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a opción «%c%s» non permite ningún argumento\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a opción «--%s» require un argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opción incorrecta -- «%c»\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a opción require un argumento -- «%c»\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria esgotada"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "non é posíbel crear a canalización"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Reloxo de alarma"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle fallou"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "non foi posíbel restaurar o fd %d: dup2 fallou"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Empaquetado por %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Empaquetado por %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Licenza GPL3v+: GNU GPL versión3  ou posterior <http://gnu.org/licenses/"
+#~ "gpl.html>\n"
+#~ "Isto é software libre: pode modificalo e redistribuílo.\n"
+#~ "Non hai NINGUNHA GARANTÍA, ata onde o permita a lei.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Escrito por %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Escrito por %s e %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Escrito por %s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, e outros.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Envíe os informes de fallo a: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Envíe os informes de fallo en %s a %s.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Páxina web de %s: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Axuda xeral ao usar software GNU: <http://www.gnu.org/gethelp/>\n"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Os argumentos obrigatorios ou opcionais das opcións longas son tamén "
+#~ "obrigatorios ou opcionais para calquera opción curta que se corresponda."
+
+#~ msgid "Usage:"
+#~ msgstr "Uso:"
+
+#~ msgid "  or: "
+#~ msgstr "  ou: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPCIÓN...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Execute «%s --help» ou «%s --usage» para obter máis información.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Envíe os informes de fallo a %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "devolve esta lista de axuda"
+
+#~ msgid "give a short usage message"
+#~ msgstr "devolve unha mensaxe curta sobre o uso"
+
+#~ msgid "NAME"
+#~ msgstr "NOME"
+
+#~ msgid "set the program name"
+#~ msgstr "define o nome do programa"
+
+#~ msgid "SECS"
+#~ msgstr "SECS"
+
+#~ msgid "print program version"
+#~ msgstr "mostra a versión do programa"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Demasiados argumentos\n"
+
+#~ msgid "program error"
+#~ msgstr "erro do programa"
+
+#~ msgid "stack overflow"
+#~ msgstr "desbordamento da pila"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "non é posíbel crear un directorio temporal empregando o patrón «%s»"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "non é posíbel retirar o ficheiro temporal %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "non é posíbel retirar o directorio temporal %s"
+
+#~ msgid "error closing file"
+#~ msgstr "produciuse un erro ao pechar o ficheiro"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "conservando os permisos para %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "produciuse un erro ao abrir «%s» para lectura"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "produciuse un erro ao ler «%s»"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "produciuse un erro ao escribir «%s»"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "produciuse un erro despois de ler «%s»"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() fallou"
+
+#~ msgid "regular empty file"
+#~ msgstr "ficheiro normal baleiro"
+
+#~ msgid "regular file"
+#~ msgstr "ficheiro normal"
+
+#~ msgid "directory"
+#~ msgstr "directorio"
+
+#~ msgid "block special file"
+#~ msgstr "ficheiro especial de bloque"
+
+#~ msgid "character special file"
+#~ msgstr "ficheiro especial de carácter"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "ligazón simbólica"
+
+#~ msgid "message queue"
+#~ msgstr "cola de mensaxes"
+
+#~ msgid "semaphore"
+#~ msgstr "semáforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "obxecto de memoria compartida"
+
+#~ msgid "weird file"
+#~ msgstr "ficheiro estraño"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family non admitido"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nome ou servizo descoñecido"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype non admitido"
+
+#~ msgid "System error"
+#~ msgstr "Erro do sistema"
+
+#~ msgid "Request canceled"
+#~ msgstr "Solicitude cancelada"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Solicitude non cancelada"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erro descoñecido"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opción «--%s» non permite ningún argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opción «--%s» non recoñecida\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opción «-W %s» non permite ningún argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opción «-W %s» require un argumento\n"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "produciuse un erro ao crear «%s»"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "produciuse un erro ao escribir o ficheiro «%s»"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "non foi posíbel cambiar os permisos de %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "non foi posíbel crear o directorio %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "non foi posíbel gravar o directorio de traballo actual"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "non foi posíbel volver ao directorio de traballo inicial"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Produciuse un erro ao abrir /dev/zero para ler"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Éxito"
+
+#~ msgid "No match"
+#~ msgstr "Sen coincidencias"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Expresión regular non válida"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Carácter de ordenación incorrecto"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Nome da clase de caracteres incorrecto"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Barra invertida ao final"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "[ ou [^ sen parella"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( ou \\( sen parella"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ sen parella"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Contido de \\{\\} non válido"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Fin de intervalo non válido"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memoria esgotada"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Expresión regular precedente non válida"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Fin prematura da expresión regular"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Expresión regular grande de máis"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") ou \\) sen parella"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Non hai ningunha expresión regular anterior"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[sSyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "definindo os permisos para %s"
+
+#~ msgid "Quit"
+#~ msgstr "Saír"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Instrución inaceptábel"
+
+#~ msgid "Aborted"
+#~ msgstr "Interrompido"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Excepción de coma flotante"
+
+#~ msgid "Killed"
+#~ msgstr "Matado"
+
+#~ msgid "Bus error"
+#~ msgstr "Erro de bus"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Canalización danada"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminado"
+
+#~ msgid "Stopped"
+#~ msgstr "Detido"
+
+#~ msgid "Continued"
+#~ msgstr "Continuado"
+
+#~ msgid "Child exited"
+#~ msgstr "O proceso fillo saíu"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Detido (entrada pola terminal)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Detido (saída pola terminal)"
+
+#~ msgid "I/O possible"
+#~ msgstr "A E/S é posíbel"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Excedeuse o límite de tempo de CPU"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Excedeuse o límite de tamaño do ficheiro"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Temporizador virtual esgotado"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Sinal 1 definido polo usuario"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Sinal 2 definido polo usuario"
+
+#~ msgid "Bad system call"
+#~ msgstr "Chamada ao sistema errónea"
+
+#~ msgid "Stack fault"
+#~ msgstr "Fallo de pila"
+
+#~ msgid "Information request"
+#~ msgstr "Solicitude de información"
+
+#~ msgid "Power failure"
+#~ msgstr "Fallo de subministración eléctrica"
+
+#~ msgid "Resource lost"
+#~ msgstr "Recurso perdido"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Sinal %d descoñecido"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "a función iconv non é utilizábel"
+
+#~ msgid "iconv function not available"
+#~ msgstr "a función iconv non está dispoñíbel"
+
+#~ msgid "character out of range"
+#~ msgstr "carácter fóra de intervalo"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "non é posíbel converter U+%04X ao xogo de caracteres local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "non é posíbel converter U+%04X ao xogo de caracteres local: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "usuario incorrecto"
+
+#~ msgid "invalid group"
+#~ msgstr "grupo incorrecto"
+
+#~ msgid "unable to display error message"
+#~ msgstr "non é posíbel mostrar a mensaxe de erro"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Páxina web de %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "stdin"
+
+#~ msgid "stdout"
+#~ msgstr "stdout"
+
+#~ msgid "stderr"
+#~ msgstr "stderr"
+
+#~ msgid "unknown stream"
+#~ msgstr "fluxo descoñecido"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "produciuse un erro ao volver abrir %s en modo %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "produciuse un erro ao comparar as cadeas"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Defina LC_ALL='C' para paliar o problema."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "As cadeas que se compararon foron %s e %s."
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "o argumento «%s» de %s%s é incorrecto"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "sufixo incorrecto %s%s no argumento «%s»"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opción incorrecta -- %c\n"
+
+#~ msgid "block size"
+#~ msgstr "tamaño de bloque"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s existe pero non é un directorio"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "non se pode cambia-lo propietario e/ou grupo de %s"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "non se pode cambiar ao directorio %s"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "non se pode obte-lo grupo de login dun UID numérico"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Este programa é software libre; pode redistribuílo e/ou modificalo baixo\n"
+#~ "os termos da Licencia Pública Xeral de GNU tal como a publicou a Free\n"
+#~ "Software Foundation; xa ben a versión 2 ou (á súa elección) calquera\n"
+#~ "versión posterior.\n"
+#~ "\n"
diff --git a/gnulib-po/hu.gmo b/gnulib-po/hu.gmo
new file mode 100644
index 0000000..c12b9f8
--- /dev/null
+++ b/gnulib-po/hu.gmo
Binary files differ
diff --git a/gnulib-po/hu.po b/gnulib-po/hu.po
new file mode 100644
index 0000000..6813d34
--- /dev/null
+++ b/gnulib-po/hu.po
@@ -0,0 +1,874 @@
+# Hungarian translation for gnulib.
+# Copyright (C) 2002, 2003, 2004, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# Emese Kovacs <emese@instantweb.hu>, 2004.
+# Gabor Kelemen <kelemeng@gnome.hu>, 2010.
+# Balázs Úr <urbalazs@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2014-06-25 19:51+0200\n"
+"Last-Translator: Balázs Úr <urbalazs@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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "a(z) „%s” argumentum érvénytelen a következőhöz: %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "a(z) „%s” argumentum nem egyértelmű ehhez: „%s”"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Az érvényes argumentumok a következők:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "nem hozható létre adatcsatorna"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "nem hozható létre adatcsatorna"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "%s mentési fájl megnyitása írásra sikertelen"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "írási hiba"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Ismeretlen rendszerhiba"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a „-W %s” kapcsoló nem egyértelmű\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a(z) „%s” kapcsoló nem egyértelmű; lehetőségek:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: a(z) „%c%s” kapcsoló ismeretlen\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a(z) „%c%s” kapcsoló nem enged meg argumentumot\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a(z) „--%s” kapcsolóhoz egy argumentum szükséges\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: érvénytelen kapcsoló -- „%c”\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a kapcsoló egy argumentumot igényel -- „%c”\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "elfogyott a memória"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "nem hozható létre adatcsatorna"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s alfolyamat sikertelen"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Ébresztőóra"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle sikertelen"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "az fd %d visszaállítása nem sikerült: dup2 sikertelen"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s alfolyamat"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s alfolyamat végzetes %d szignált kapott"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Csomagolta: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Csomagolta: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "A licenc GPLv3+: a GNU GPL 3. vagy újabb változata <http://gnu.org/"
+#~ "licenses/gpl.html>\n"
+#~ "Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.\n"
+#~ "NINCS GARANCIA, a törvény által engedélyezett mértékig.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Írta: %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Írta: %s és %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Írta: %s, %s és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s\n"
+#~ "és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s,\n"
+#~ "%s és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s,\n"
+#~ "%s, %s és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s,\n"
+#~ "%s, %s, %s és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Írta: %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, and %s.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s és %s\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Írta: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s és mások\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "A hibák a(z) %s címen jelenthetők.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "A(z) %s hibái a(z) %s címen jelenthetők.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "A(z) %s honlapja: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Általános segítség a GNU szoftverek használatához: <http://www.gnu.org/"
+#~ "gethelp/>.\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: %s értéke nem nagyobb, mint %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: Az ARGP_HELP_FMT paraméter értéket igényel"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: Az ARGP_HELP_FMT paraméternek pozitívnak kell lennie"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Ismeretlen ARGP_HELP_FMT paraméter"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Szemét az ARGP_HELP_FMT-ben: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Ha egy hosszú kapcsolóhoz kötelező vagy opcionális argumentumot megadni, "
+#~ "akkor ez a megfelelő rövid kapcsolónál is kötelező vagy opcionális."
+
+#~ msgid "Usage:"
+#~ msgstr "Használat:"
+
+#~ msgid "  or: "
+#~ msgstr "  vagy: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [KAPCSOLÓ…]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "További információkért lásd a(z) „%s --help” vagy „%s --usage” "
+#~ "kimenetét.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "A hibák itt jelenthetők: %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "ezen súgószöveg megjelenítése"
+
+#~ msgid "give a short usage message"
+#~ msgstr "rövid használati utasítás megjelenítése"
+
+#~ msgid "NAME"
+#~ msgstr "NÉV"
+
+#~ msgid "set the program name"
+#~ msgstr "a program nevének beállítása"
+
+#~ msgid "SECS"
+#~ msgstr "MÁSODPERC"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "szünet MP másodpercre (alapértelmezetten 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "a programverzió kiírása"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMHIBA) A verzió nem ismert!"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Túl sok argumentum\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMHIBA) A kapcsolót ismerni kellene?"
+
+#~ msgid "program error"
+#~ msgstr "olvasási hiba"
+
+#~ msgid "stack overflow"
+#~ msgstr "veremtúlcsordulás"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "nem található átmeneti könyvtár, próbálja beállítani a $TMPDIR változót"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr ""
+#~ "nem lehet létrehozni átmeneti könyvtárat a(z) „%s” sablon használatával"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "nem lehet eltávolítani a(z) %s átmeneti fájlt"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "nem lehet eltávolítani a(z) %s átmeneti könyvtárat"
+
+#~ msgid "error closing file"
+#~ msgstr "hiba a fájl lezárásakor"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "%s jogosultságainak megőrzése"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "hiba \"%s\" megnyitásakor olvasásra"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "hiba \"%s\" olvasásakor"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "hiba \"%s\" írásakor"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "hiba \"%s\" olvasása után"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "az fdopen() sikertelen"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "a C# fordító nem található, próbálja telepíteni a pnetet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "a C# virtuális gép nem található, próbálja telepíteni a pnetet"
+
+#~ msgid "regular empty file"
+#~ msgstr "szabályos üres fájl"
+
+#~ msgid "regular file"
+#~ msgstr "szabályos fájl"
+
+#~ msgid "directory"
+#~ msgstr "könyvtár"
+
+#~ msgid "block special file"
+#~ msgstr "speciális blokkfájl"
+
+#~ msgid "character special file"
+#~ msgstr "speciális karakterfájl"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "szimbolikus link"
+
+#~ msgid "socket"
+#~ msgstr "foglalat"
+
+#~ msgid "message queue"
+#~ msgstr "üzenetsor"
+
+#~ msgid "semaphore"
+#~ msgstr "szemafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "megosztott memóriaobjektum"
+
+#~ msgid "typed memory object"
+#~ msgstr "típusos memóriaobjektum"
+
+#~ msgid "weird file"
+#~ msgstr "szokatlan fájl"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "A gépnév címcsaládja nem támogatott"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Átmeneti névfeloldási hiba"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Az ai_flags értéke hibás"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Helyrehozhatatlan névfeloldási hiba"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "Az ai_family nem támogatott"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Memóriafoglalási hiba"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "A gépnévhez nem tartozik cím"
+
+#~ msgid "Name or service not known"
+#~ msgstr "A név vagy szolgáltatás ismeretlen"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "A kiszolgálónév nem támogatott az ai_socktype-hoz"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "Az ai_socktype nem támogatott"
+
+#~ msgid "System error"
+#~ msgstr "Rendszerhiba"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "A paraméterpuffer túl kicsi"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Kérés feldolgozása folyamatban"
+
+#~ msgid "Request canceled"
+#~ msgstr "Kérés megszakítva"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Kérés nincs megszakítva"
+
+#~ msgid "All requests done"
+#~ msgstr "Minden kérés kész"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Szignál által megszakítva"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "A paraméter-karakterlánc nem megfelelő kódolású"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ismeretlen hiba"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a(z) „--%s” kapcsoló nem enged meg argumentumot\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: a(z) „--%s” kapcsoló ismeretlen\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a „-W %s” kapcsoló nem enged meg argumentumot\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a „-W %s” kapcsolóhoz egy argumentum szükséges\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "érvénytelen source_version argumentum ehhez: compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "érvénytelen target_version argumentum ehhez: compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "„%s” létrehozása sikertelen"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "hiba a(z) „%s” fájl írásakor"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Java fordító nem található, próbálja meg a gcj telepítését vagy a $JAVAC "
+#~ "beállítását"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Java virtuális gép nem található, próbálja meg a gij telepítését vagy a "
+#~ "$JAVA beállítását"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s alfolyamat I/O hiba"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "nem lehet %s jogosultságait megváltoztatni"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "nem lehet létrehozni a(z) %s könyvtárat"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "az aktuális munkakönyvtár feljegyzése meghiúsult"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "a visszatérés meghiúsult a kiinduló munkakönyvtárba"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "A /dev/zero megnyitása olvasásra sikertelen"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "az olvasási szál létrehozása sikertelen"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "nem sikerült a nem blokkolható I/O beállítása a(z) %s alfolyamathoz"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "a(z) %s alfolyamattal történő kommunikáció sikertelen"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "a(z) %s alfolyamatba való írás sikertelen"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "a(z) %s alfolyamatból való olvasás sikertelen"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "a(z) %s alfolyamat ezzel a hibakóddal fejeződött be: %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "a szálak létrehozása sikertelen"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "a(z) %s alfolyamat ezzel a hibakóddal fejeződött be: %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc,ois Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Sikerült"
+
+#~ msgid "No match"
+#~ msgstr "Nincs találat"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Érvénytelen szabályos kifejezés"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Érvénytelen leválogatási karakter"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Érvénytelen karakterosztálynév"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Záró visszaper"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Érvénytelen visszahivatkozás"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Pár nélküli [ vagy [^"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Pár nélküli ( vagy \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Pár nélküli \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "A \\{\\} tartalma érvénytelen"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Érvénytelen tartományvég"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Elfogyott a memória"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Érvénytelen megelőző szabályos kifejezés"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "A szabályos kifejezés túl korán véget ért"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "A szabályos kifejezés túl nagy"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Pár nélküli ) vagy \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Nincs megelőző szabályos kifejezés"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[iIyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "%s jogosultságainak beállítása"
+
+#~ msgid "Hangup"
+#~ msgstr "Felfüggesztés"
+
+#~ msgid "Interrupt"
+#~ msgstr "Megszakítás"
+
+#~ msgid "Quit"
+#~ msgstr "Kilépés"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Illegális utasítás"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Nyomkövetési/töréspont csapda"
+
+#~ msgid "Aborted"
+#~ msgstr "Megszakítva"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Lebegőpontos kivétel"
+
+#~ msgid "Killed"
+#~ msgstr "Kilőve"
+
+#~ msgid "Bus error"
+#~ msgstr "Buszhiba"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Szegmentálási hiba"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Megszakadt csővezeték"
+
+#~ msgid "Terminated"
+#~ msgstr "Befejeződött"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Sürgős I/O feltétel"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Leállítva (szignál)"
+
+#~ msgid "Stopped"
+#~ msgstr "Leállítva"
+
+#~ msgid "Continued"
+#~ msgstr "Folytatva"
+
+#~ msgid "Child exited"
+#~ msgstr "Gyerekfolyamat kilépett"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Leállítva (tty bemenet)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Leállítva (tty kimenet)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O lehetséges"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "CPU-időkorlát túllépve"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Fájlméret korlátja túllépve"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtuális időzítés lejárt"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "A profilozási időzítő lejárt"
+
+#~ msgid "Window changed"
+#~ msgstr "Ablakméret változott"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Felhasználói szignál 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Felhasználói szignál 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT csapda"
+
+#~ msgid "Bad system call"
+#~ msgstr "Hibás rendszerhívás"
+
+#~ msgid "Stack fault"
+#~ msgstr "Veremhiba"
+
+#~ msgid "Information request"
+#~ msgstr "Információkérés"
+
+#~ msgid "Power failure"
+#~ msgstr "Tápfeszültség-kimaradás"
+
+#~ msgid "Resource lost"
+#~ msgstr "Erőforrás elveszítve"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "hiba egy lezárt cső vagy foglalat írásakor"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Valós idejű szignál %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Ismeretlen szignál %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "az iconv függvény nem használható"
+
+#~ msgid "iconv function not available"
+#~ msgstr "az iconv függvény nem elérhető"
+
+#~ msgid "character out of range"
+#~ msgstr "tartományon kívüli karakter"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "nem lehet helyi karakterkészletbe átalakítani a következőt: U+%04X"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "az U+%04X nem konvertálható a helyi karakterkészletbe:  %s"
+
+#~ msgid "invalid user"
+#~ msgstr "érvénytelen felhasználó"
+
+#~ msgid "invalid group"
+#~ msgstr "érvénytelen csoport"
+
+#~ msgid "invalid spec"
+#~ msgstr "érvénytelen specifikáció"
+
+#~ msgid "unable to display error message"
+#~ msgstr "nem jeleníthető meg hibaüzenet"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "A(z) %s honlapja: <http://www.gnu.org/software/%s/>.\n"
+
+#~ msgid "stdin"
+#~ msgstr "szabványos bemenet"
+
+#~ msgid "stdout"
+#~ msgstr "szabványos kimenet"
+
+#~ msgid "stderr"
+#~ msgstr "szabványos hibakimenet"
+
+#~ msgid "unknown stream"
+#~ msgstr "ismeretlen adatfolyam"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "%s újranyitása %s móddal meghiúsult"
+
+#~ msgid "string comparison failed"
+#~ msgstr "karakterlánc-összehasonlítás sikertelen"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr ""
+#~ "Állítsa be az LC_ALL='C' környezeti változót a probléma megkerüléséhez."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Az összehasonlított karakterláncok: %s és %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "nem lehet végrehajtani formázott kimenetet"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "érvénytelen %s%s argumentum: „%s”"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "érvénytelen utótag a(z) %s%s argumentumban: „%s”"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s: a(z) „%s” argumentum túl nagy"
diff --git a/gnulib-po/insert-header.sin b/gnulib-po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/gnulib-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/gnulib-po/it.gmo b/gnulib-po/it.gmo
new file mode 100644
index 0000000..4cc60d5
--- /dev/null
+++ b/gnulib-po/it.gmo
Binary files differ
diff --git a/gnulib-po/it.po b/gnulib-po/it.po
new file mode 100644
index 0000000..23aec73
--- /dev/null
+++ b/gnulib-po/it.po
@@ -0,0 +1,966 @@
+# Italian translation of gnulib 
+# Copyright (C) 2008, 2009, 2010, 2011, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Marco d'Itri <md@linux.it>, 1998, 1999.
+# Giovanni Bortolozzo <borto@dei.unipd.it>, 1998.
+# Milo Casagrande <milo@milo.name>, 2008, 2009, 2010, 2011, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib-4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-21 14:07+0200\n"
+"Last-Translator: Milo Casagrande <milo@milo.name>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argomento %s non valido per %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argomento %s ambiguo per %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Sono argomenti validi:"
+
+#: lib/bitset/stats.c:177
+#, c-format
+msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+msgstr "%u bitset_allocs, %u liberati (%.2f%%).\n"
+
+#: lib/bitset/stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u nella cache (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u nella cache (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u nella 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 "istogramma registro del conteggio\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "istogramma registro delle dimensioni\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "istogramma densità\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statistiche bitset:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Esecuzioni accumulate = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "impossibile leggere il file delle statistiche"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "dimensione file delle statistiche errata\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "impossibile scrivere il file delle statistiche"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "impossibile aprire il file delle statistiche in scrittura"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "errore di scrittura"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Errore di sistema sconosciuto"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: l'opzione «%s%s» è ambigua\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: l'opzione «%s%s» è ambigua. Possibilità:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opzione «%s%s» non riconosciuta\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione «%s%s» non accetta un argomento\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: l'opzione «%s%s» richiede un argomento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opzione non valida -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: l'opzione richiede un argomento -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria esaurita"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "impossibile creare la pipe"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s: sottoprocesso non riuscito"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Tempi di esecuzione (secondi)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU utente"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU sistema"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "tempo reale"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle non riuscita"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "impossibile ripristinare fd %d: dup2 non riuscita"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "sottoprocesso %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "il sottoprocesso %s ha ricevuto un segnale %d fatale"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Pacchetto creato da %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Pacchetto creato da %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Licenza GPLv3+: GNU GPL versione 3 o successiva <%s>.\n"
+#~ "Questo programma è software libero: siete liberi di modificarlo e "
+#~ "ridistribuirlo.\n"
+#~ "Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Scritto da %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Scritto da %s e %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Scritto da %s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s, %s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Scritto da %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s e altri.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Segnalare i bug a: %s\n"
+#~ "\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Segnalare i bug di %s a: %s.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Sito web di %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Aiuto per l'utilizzo di software GNU: <%s>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: il valore %s è minore o uguale a %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: il parametro ARGP_HELP_FMT richiede un valore"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: parametro ARGP_HELP_FMT sconosciuto"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Spazzatura in ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Gli argomenti obbligatori o facoltativi per le opzioni estese lo sono "
+#~ "anche per le corrispondenti opzioni brevi."
+
+#~ msgid "Usage:"
+#~ msgstr "Uso:"
+
+#~ msgid "  or: "
+#~ msgstr "  o: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPZIONE...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "Provare «%s --help» o «%s --usage» per ulteriori informazioni.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Segnalare i bug a %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "Mostra questo aiuto"
+
+#~ msgid "give a short usage message"
+#~ msgstr "Mostra un breve messaggio sull'uso"
+
+#~ msgid "NAME"
+#~ msgstr "NOME"
+
+#~ msgid "set the program name"
+#~ msgstr "Imposta il nome del programma"
+
+#~ msgid "SECS"
+#~ msgstr "SEC"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "Resta in attesa per SEC secondi (predefinito 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "Stampa la versione del programma"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(ERRORE DEL PROGRAMMA) Nessuna versione conosciuta."
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: troppi argomenti\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr ""
+#~ "(ERRORE DEL PROGRAMMA) L'opzione dovrebbe essere stata riconosciuta."
+
+#~ msgid "program error"
+#~ msgstr "errore del programma"
+
+#~ msgid "stack overflow"
+#~ msgstr "overflow dello stack"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "impossibile trovare una directory temporanea, provare a impostare $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "impossibile creare una directory temporanea usando il modello «%s»"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "impossibile rimuovere il file temporaneo %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "impossibile rimuovere la directory temporanea %s"
+
+#~ msgid "error closing file"
+#~ msgstr "errore nel chiudere il file"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "preservazione dei permessi per %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "errore nell'aprire %s in lettura"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "impossibile aprire il file di backup %s in scrittura"
+
+#~ msgid "error reading %s"
+#~ msgstr "errore nel leggere %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "errore nello scrivere %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "errore dopo la lettura di %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() non riuscita"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "compilatore C# non trovato, provare a installare mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "macchina virtuale C# non trovata, provare a installare mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ non bilanciata"
+
+#~ msgid "invalid character class"
+#~ msgstr "classe carattere non valida"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "la sintassi per la classe carattere è [[:space:]], non [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "escape \\ incompleto"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "contenuto di \\{\\} non valido"
+
+#~ msgid "regular expression too big"
+#~ msgstr "espressione regolare troppo grande"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( non bilanciata"
+
+#~ msgid "no syntax specified"
+#~ msgstr "nessuna sintassi specificata"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") non bilanciata"
+
+#~ msgid "regular empty file"
+#~ msgstr "file normale vuoto"
+
+#~ msgid "regular file"
+#~ msgstr "file normale"
+
+#~ msgid "directory"
+#~ msgstr "directory"
+
+#~ msgid "symbolic link"
+#~ msgstr "collegamento simbolico"
+
+#~ msgid "message queue"
+#~ msgstr "coda di messaggi"
+
+#~ msgid "semaphore"
+#~ msgstr "semaforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "oggetto di memoria condivisa"
+
+# (ndt) sono accettati:
+# - suggerimenti
+# - collegamenti dove si spieghi cosa sia un 'typed memory object'
+# Ma dove si spieghi VERAMENTE e CONCRETAMENTE cos'è.
+#~ msgid "typed memory object"
+#~ msgstr "oggetto di memoria con nome"
+
+#~ msgid "block special file"
+#~ msgstr "file speciale a blocchi"
+
+#~ msgid "character special file"
+#~ msgstr "file speciale a caratteri"
+
+#~ msgid "contiguous data"
+#~ msgstr "dati contigui"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "file speciale a blocchi multiplex"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "file speciale a caratteri multiplex"
+
+#~ msgid "multiplexed file"
+#~ msgstr "file multiplex"
+
+#~ msgid "named file"
+#~ msgstr "file con nome"
+
+#~ msgid "network special file"
+#~ msgstr "file speciale di rete"
+
+#~ msgid "migrated file with data"
+#~ msgstr "file migrato con dati"
+
+#~ msgid "migrated file without data"
+#~ msgstr "file migrato senza dati"
+
+#~ msgid "port"
+#~ msgstr "porta"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "file strano"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Famiglia di indirizzi per il nome host non supportata"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Errore temporaneo nella risoluzione del nome"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Valore per ai_flags errato"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Errore irreversibile nella risoluzione del nome"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family non supportato"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Allocazione memoria non riuscita"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Nessun indirizzo associato col nome host"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nome o servizio sconosciuto"
+
+# (ndt)
+#
+# define EAI_SERVICE  -8 /* SERVICE not supported for `ai_socktype'.  */
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Nome servizio non supportato per ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype non supportato"
+
+#~ msgid "System error"
+#~ msgstr "Errore di sistema"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Buffer argomento troppo piccolo"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Elaborazione richiesta in corso"
+
+#~ msgid "Request canceled"
+#~ msgstr "Richiesta annullata"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Richiesta non annullata"
+
+#~ msgid "All requests done"
+#~ msgstr "Tutte le richieste completate"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interrotto da un segnale"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Stringa del parametro non codificata correttamente"
+
+#~ msgid "Unknown error"
+#~ msgstr "Errore sconosciuto"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "argomento source_version in compile_java_class non valido"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "argomento target_version in compile_java_class non valido"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "creazione di \"%s\" non riuscita"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "errore durante la scrittura del file \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "compilatore Java non trovato, provare a installare gcj o impostare $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "macchina virtuale Java non trovato, provare a installare gij o impostare "
+#~ "$JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "errore di I/O nel sottoprocesso %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "impossibile eseguire stat di %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "impossibile cambiare i permessi di %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "impossibile creare la directory %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "impossibile registrare la directory di lavoro corrente"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "ritorno alla directory di lavoro iniziale non riuscito"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Apertura di /dev/zero in lettura non riuscita"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "creazione del thread di lettura non riuscita"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "impossibile impostare I/O non bloccante sul sottoprocesso di %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "comunicazione col sottoprocesso di %s non riuscita"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "scrittura sul sottoprocesso di %s non riuscita"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "lettura dal sottoprocesso di %s non riuscita"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "sottoprocesso %s terminato con codice d'uscita %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "creazione dei thread non riuscita"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "sottoprocesso di %s terminato con codice d'uscita %d"
+
+#~ msgid "Success"
+#~ msgstr "Successo"
+
+#~ msgid "No match"
+#~ msgstr "Nessuna corrispondenza"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Espressione regolare non valida"
+
+# (ndt) http://en.wikipedia.org/wiki/Collation
+#~ msgid "Invalid collation character"
+#~ msgstr "Carattere di collazione non valido"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Nome classe del carattere non valida"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Backslash finale"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Riferimento all'indietro non valido"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "[, [^, [:, [. o [= senza corrispondenza"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( o \\( senza corrispondenza"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ senza corrispondenza"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Contenuto di \\{\\} non valido"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Fine dell'intervallo non valida"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memoria esaurita"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Espressione regolare precedente non valida"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Fine prematura dell'espressione regolare"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Espressione regolare troppo grande"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") o \\) senza corrispondenza"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Nessuna espressione regolare precedente"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[sSyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "impostazione dei permessi per %s"
+
+# (ndt) ho preferito mettere tra parentesi il vero nome della costante del segnale, sono cose abbastanza tecniche e forse con un riferimento reale più comprensibili
+#
+# http://en.wikipedia.org/wiki/SIGHUP
+#~ msgid "Hangup"
+#~ msgstr "Chiusura"
+
+# http://en.wikipedia.org/wiki/SIGINT_(POSIX)
+#~ msgid "Interrupt"
+#~ msgstr "Interruzione"
+
+# http://en.wikipedia.org/wiki/SIGQUIT
+#~ msgid "Quit"
+#~ msgstr "Uscita (con core dump)"
+
+# http://en.wikipedia.org/wiki/SIGILL
+#~ msgid "Illegal instruction"
+#~ msgstr "Istruzione non consentita"
+
+# http://en.wikipedia.org/wiki/Trap_(computing)
+# http://en.wikipedia.org/wiki/SIGTRAP
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Rilevato trace/breakpoint"
+
+# http://en.wikipedia.org/wiki/SIGABRT
+#~ msgid "Aborted"
+#~ msgstr "Annullato"
+
+# http://en.wikipedia.org/wiki/SIGFPE
+#~ msgid "Floating point exception"
+#~ msgstr "Eccezione in virgola mobile"
+
+#~ msgid "Killed"
+#~ msgstr "Ucciso"
+
+# http://en.wikipedia.org/wiki/Bus_error
+# http://en.wikipedia.org/wiki/SIGBUS
+#~ msgid "Bus error"
+#~ msgstr "Errore di bus"
+
+# http://en.wikipedia.org/wiki/Segmentation_fault
+# http://en.wikipedia.org/wiki/SIGSEGV
+#~ msgid "Segmentation fault"
+#~ msgstr "Errore di segmentazione"
+
+# http://en.wikipedia.org/wiki/SIGPIPE
+#~ msgid "Broken pipe"
+#~ msgstr "Pipe interrotta"
+
+# (ndt) non so se convenga lasciarlo invariato... ma forse anche le altre...
+# http://en.wikipedia.org/wiki/SIGALRM
+#~ msgid "Alarm clock"
+#~ msgstr "Sveglia"
+
+# http://en.wikipedia.org/wiki/SIGTERM
+#~ msgid "Terminated"
+#~ msgstr "Terminato"
+
+# http://en.wikipedia.org/wiki/SIGURG
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Condizione di I/O urgente"
+
+# http://en.wikipedia.org/wiki/SIGSTOP
+#~ msgid "Stopped (signal)"
+#~ msgstr "Fermato"
+
+# http://en.wikipedia.org/wiki/SIGTSTP
+#~ msgid "Stopped"
+#~ msgstr "Fermato (da terminale)"
+
+# http://en.wikipedia.org/wiki/SIGCONT
+#~ msgid "Continued"
+#~ msgstr "Continuato"
+
+# http://en.wikipedia.org/wiki/SIGCHLD
+#~ msgid "Child exited"
+#~ msgstr "Processo figlio uscito"
+
+# http://en.wikipedia.org/wiki/SIGTTIN
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Fermato per input tty"
+
+# http://en.wikipedia.org/wiki/SIGTTOU
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Fermato per output tty"
+
+# (ndt) questa pare non sia posix, wikipedia riporta la stessa di SIGABRT
+#~ msgid "I/O possible"
+#~ msgstr "I/O consentito"
+
+# http://en.wikipedia.org/wiki/SIGXCPU
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Superato il limite di tempo CPU"
+
+# http://en.wikipedia.org/wiki/SIGXFSZ
+#~ msgid "File size limit exceeded"
+#~ msgstr "Superato il limite di dimensione file"
+
+# http://en.wikipedia.org/wiki/SIGVTALRM
+#~ msgid "Virtual timer expired"
+#~ msgstr "Timer virtuale terminato"
+
+# http://en.wikipedia.org/wiki/SIGPROF
+#~ msgid "Profiling timer expired"
+#~ msgstr "Timer di profiling terminato"
+
+# http://en.wikipedia.org/wiki/SIGWINCH
+#~ msgid "Window changed"
+#~ msgstr "Finestra modificata"
+
+# http://en.wikipedia.org/wiki/SIGUSR1
+#~ msgid "User defined signal 1"
+#~ msgstr "Segnale 1 definito dall'utente"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Segnale 2 definito dall'utente"
+
+# http://en.wikipedia.org/wiki/SIGEMT
+#~ msgid "EMT trap"
+#~ msgstr "Rilevato EMT"
+
+# http://en.wikipedia.org/wiki/SIGSYS
+#~ msgid "Bad system call"
+#~ msgstr "Chiamata di sistema errata"
+
+# http://en.wikipedia.org/wiki/SIGSTKFLT
+#~ msgid "Stack fault"
+#~ msgstr "Errore sullo stack"
+
+# http://en.wikipedia.org/wiki/SIGINFO
+#~ msgid "Information request"
+#~ msgstr "Richiesta informazioni"
+
+# http://en.wikipedia.org/wiki/SIGPWR
+#~ msgid "Power failure"
+#~ msgstr "Mancanza alimentazione elettrica"
+
+# http://en.wikipedia.org/wiki/SIGLOST
+#~ msgid "Resource lost"
+#~ msgstr "Risorsa persa"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "errore nello scrivere su una pipe o un socket chiusi"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Segnale real-time %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Segnale %d sconosciuto"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "funzione iconv non utilizzabile"
+
+#~ msgid "iconv function not available"
+#~ msgstr "funzione iconv non disponibile"
+
+#~ msgid "character out of range"
+#~ msgstr "carattere fuori dall'intervallo"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "impossibile convertire U+%04X nel set di caratteri locale"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "impossibile convertire U+%04X nel set di caratteri locale: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "utente non valido"
+
+#~ msgid "invalid group"
+#~ msgstr "gruppo non valido"
+
+# (ndt) evinta da un commento al codice:
+#
+# /* Set U and G to nonzero length strings corresponding to user and
+#    group specifiers or to NULL.  If U is not NULL, it is a newly
+#    allocated string.  */
+#
+#~ msgid "invalid spec"
+#~ msgstr "specificatore non valido"
+
+#~ msgid "unable to display error message"
+#~ msgstr "impossibile visualizzare il messaggio di errore"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "impostazione del descrittore file in modalità testo/binario non riuscita"
+
+#~ msgid "stdin"
+#~ msgstr "stdin"
+
+#~ msgid "stdout"
+#~ msgstr "stdout"
+
+#~ msgid "stderr"
+#~ msgstr "stderr"
+
+#~ msgid "unknown stream"
+#~ msgstr "stream sconosciuto"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "riapertura di %s in modalità %s non riuscita"
+
+#~ msgid "string comparison failed"
+#~ msgstr "confronto delle stringhe non riuscito"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Impostare LC_ALL='C' per aggirare il problema."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Le stringhe confrontate erano %s e %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "impossibile mostrare l'output formattato"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "descrittori file standard"
+
+# (ndt)
+# quello che viene sostituito pare sia:
+#  * il primo, hypens (con valore '--')
+#  * il secondo, option
+#  * il terzo, arg
+# quindi qualche cosa del genere:
+# invalid --option argument 'arg'
+#
+# (altre idee sono benvenute!)
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "l'argomento «%3$s» di %1$s%2$s non è valido"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "il suffisso nell'argomento «%3$s» di %1$s%2$s non è valido"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "l'argomento «%3$s» di %1$s%2$s è troppo grande"
diff --git a/gnulib-po/ja.gmo b/gnulib-po/ja.gmo
new file mode 100644
index 0000000..8bf941d
--- /dev/null
+++ b/gnulib-po/ja.gmo
Binary files differ
diff --git a/gnulib-po/ja.po b/gnulib-po/ja.po
new file mode 100644
index 0000000..d9d0658
--- /dev/null
+++ b/gnulib-po/ja.po
@@ -0,0 +1,907 @@
+# Japanese gnulib messages
+# Copyright (C) 2000, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Masahito Yamaga <yamaga@ipc.chiba-u.ac.jp>, 2002.
+# GOTO Masanori <gotom@debian.or.jp>, 2006.
+#  derived from the version by Yasuyuki Furukawa <yasu@on.cs.keio.ac.jp> 1998.
+#                              Jun Nishii <jun@flatout.org> 1999.
+#                              Daisuke Yamashita <yamad@mb.infoweb.ne.jp> 1999.
+# Yasuaki Taniguchi <yasuakit@gmail.com>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2011-09-02 18:39+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s に対する引数 %1$s が間違っています"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s に対する引数 %1$s が曖昧です"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "パイプを作成できません"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "パイプを作成できません"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "書込み用バックアップファイル\"%s\"を開くことができません"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "書き込みエラー"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "不明なシステムエラー"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: オプション '-W %s' は曖昧です\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: オプション '%s' は曖昧です:次のものが可能です:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: オプション '%c%s' を認識できません\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: オプション '%c%s' は引数を取ることができません\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: オプション '--%s' は引数が必要です\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: 無効なオプション -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: オプションには引数が必要です -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "パイプを作成できません"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s サブプロセスが失敗しました"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Alarm clock"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle に失敗しました"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ファイル記述子 (fd) %d をリストアできません: dup2 に失敗しました"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s 子プロセス"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s 子プロセスが致命的なシグナル %d を受信しました"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "パッケージ作成者: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "パッケージ作成者: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ 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"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "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: <%s>\n"
+#~ msgstr "%s のホームページ: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/"
+#~ ">\n"
+
+#~ 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 file %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' doesn't allow an argument\n"
+#~ msgstr "%s: オプション '--%s' は引数を取ることができません\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: オプション '--%s' を認識できません\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: オプション '-W %s' は引数を取ることができません\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: オプション '-W %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 をインストールするか、または $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 "creation of threads failed"
+#~ msgstr "スレッドの作成に失敗しました"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s 子プロセスが終了コード %d で終了しました"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc,ois Pinard"
+
+#~ 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 "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 "%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 "string comparison failed"
+#~ msgstr "文字列の比較に失敗しました"
+
+#~ 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 が大きすぎます"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: 不正なオプション -- %c\n"
+
+#~ msgid "block size"
+#~ msgstr "ブロックサイズ"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s は存在しますがディレクトリではありません"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "%s のオーナーとグループを変更できません"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "ディレクトリ %s に移動できません"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "数字のUIDのログイングループを取得できません"
+
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "本プログラムはフリーソフトウェアです. GNU一般公有使用許諾\n"
+#~ "<http://www.gnu.org/licenses/gpl.html> で定められた条項の下で本プログラ\n"
+#~ "ムのコピーを再配布できます. 適切な法が認る限りにおいて全くの無保証です.\n"
+#~ "\n"
diff --git a/gnulib-po/ko.gmo b/gnulib-po/ko.gmo
new file mode 100644
index 0000000..fbc524d
--- /dev/null
+++ b/gnulib-po/ko.gmo
Binary files differ
diff --git a/gnulib-po/ko.po b/gnulib-po/ko.po
new file mode 100644
index 0000000..5be000e
--- /dev/null
+++ b/gnulib-po/ko.po
@@ -0,0 +1,525 @@
+# Korean messages for GNU textutils
+# Copyright (C) 1996, 2001, 2002 Free Software Foundation, Inc.
+# Bang Jun-Young <bangjy@nownuri.nowcom.co.kr>, 1996-1997.
+# Changwoo Ryu <cwryu@debian.org>, 2001-2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU textutils 2.0.22\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2002-07-22 20:02+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=EUC-KR\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s¿¡ ´ëÇØ ºÎÀûÀýÇÑ ÀÎÀÚ %1$s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s¿¡ ´ëÇØ ¾Ö¸ÅÇÑ ÀÎÀÚ %1$s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "%s µð·ºÅ丮¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "%s µð·ºÅ丮¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "`%s'¸¦ `%s'·Î À̵¿ÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "¾²±â ¿À·ù"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ ¿À·ù"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: `%s'Àº(´Â) ¸ðÈ£ÇÑ ¿É¼ÇÀÔ´Ï´Ù\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: `%s'Àº(´Â) ¸ðÈ£ÇÑ ¿É¼ÇÀÔ´Ï´Ù\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: ÀνÄÇÒ ¼ö ¾ø´Â ¿É¼Ç `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: `%c%s' ¿É¼ÇÀº Àμö¸¦ Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: `%s' ¿É¼ÇÀº Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ºÎÀûÀýÇÑ ¿É¼Ç -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: ÀÌ ¿É¼ÇÀº Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "%s µð·ºÅ丮¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: ºÎÀûÀýÇÑ ÆÐÅÏ"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: ºÎÀûÀýÇÑ ÆÐÅÏ"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: ºÎÀûÀýÇÑ ÆÐÅÏ"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "%sÀÌ(°¡) ¸¸µé¾ú½À´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "<%s>(À¸)·Î ¹ö±×¸¦ ¾Ë·Á ÁֽʽÿÀ.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "<%s>(À¸)·Î ¹ö±×¸¦ ¾Ë·Á ÁֽʽÿÀ.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr "±ä ¿É¼Ç¿¡¼­ ²À ÇÊ¿äÇÑ Àμö´Â ªÀº ¿É¼Ç¿¡µµ ²À ÇÊ¿äÇÕ´Ï´Ù.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "»ç¿ë¹ý: %s [<¿É¼Ç>] [<ÆÄÀÏ>]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é `%s --help' ÇϽʽÿÀ.\n"
+
+#, fuzzy
+#~ msgid "Print program version"
+#~ msgstr "ÇÁ·Î±×·¥ ¿À·ù"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "Àμö°¡ ³Ê¹« ¸¹À½"
+
+#~ msgid "program error"
+#~ msgstr "ÇÁ·Î±×·¥ ¿À·ù"
+
+#~ msgid "stack overflow"
+#~ msgstr "½ºÅà ¿À¹öÇ÷οì"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "`%s'¸¦ `%s'·Î À̵¿ÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "%sÀ»(¸¦) Àд µµÁß ¿À·ù ¹ß»ý"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "%s¿¡ ¾²´Â µµÁß ¿À·ù ¹ß»ý"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "%sÀ»(¸¦) Àд µµÁß ¿À·ù ¹ß»ý"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "ÆÄÀÏ ¿­±â ½ÇÆÐ"
+
+#~ 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 "°øÀ¯ ¸Þ¸ð¸® ¿ÀºêÁ§Æ®"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "°øÀ¯ ¸Þ¸ð¸® ¿ÀºêÁ§Æ®"
+
+#~ msgid "weird file"
+#~ msgstr "±«»óÇÑ ÆÄÀÏ"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fifoÆÄÀÏÀº Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fifoÆÄÀÏÀº Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fifoÆÄÀÏÀº Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "¾²±â ¿À·ù"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ ¿À·ù"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: `--%s' ¿É¼ÇÀº Àμö¸¦ Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: ÀνÄÇÒ ¼ö ¾ø´Â ¿É¼Ç `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: À߸øµÈ ¿É¼Ç -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: `-W %s'Àº(´Â) ¸ðÈ£ÇÑ ¿É¼ÇÀÔ´Ï´Ù\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: `-W %s' ¿É¼ÇÀº Àμö¸¦ Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù\n"
+
+#~ msgid "block size"
+#~ msgstr "ºí·Ï Å©±â"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%sÀÌ(°¡) Á¸ÀçÇÏÁö¸¸ µð·ºÅ丮°¡ ¾Æ´Õ´Ï´Ù"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "%sÀÇ ¼ÒÀ¯ÀÚ ±×¸®°í/ȤÀº ±×·ìÀ» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "%s µð·ºÅ丮¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "%s µð·ºÅ丮·Î chdirÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "%sÀÇ Çã°¡¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "%s µð·ºÅ丮¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "%sÀÇ Çã°¡¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: ºÎÀûÀýÇÑ Á¤±Ô½Ä: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "ºÎÀûÀýÇÑ ¹®ÀÚ Å¬·¡½º `%s'"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "¸Þ¸ð¸®°¡ ¹Ù´Ú³²"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: ºÎÀûÀýÇÑ Á¤±Ô½Ä: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Á¤±Ô½Ä Ž»ö¿¡ ¿À·ù ¹ß»ý"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: ºÎÀûÀýÇÑ Á¤±Ô½Ä: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "Á¤±Ô½Ä Ž»ö¿¡ ¿À·ù ¹ß»ý"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+# not usable°ú not availableÀÇ Â÷ÀÌ´Â?
+#~ 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 "cannot get the login group of a numeric UID"
+#~ msgstr "UIDÀÇ ·Î±×ÀÎ ±×·ìÀ» ¾Ë¾Æ ³¾ ¼ö ¾ø½À´Ï´Ù"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ÀÌ ÇÁ·Î±×·¥Àº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾îÀÔ´Ï´Ù. ¼ÒÇÁÆ®¿þ¾îÀÇ ÇǾ絵ÀÚ´Â ÀÚÀ¯ \n"
+#~ "¼ÒÇÁÆ®¿þ¾î Àç´ÜÀÌ °øÇ¥ÇÑ GNU General Public License 2ÆÇ (¶Ç´Â ±× ÀÌÈÄ \n"
+#~ "ÆÇÀ» ÀÓÀÇ·Î ¼±ÅÃÇؼ­), ±× ±ÔÁ¤¿¡ µû¶ó ÇÁ·Î±×·¥À» °³ÀÛÇϰųª Àç¹èÆ÷ÇÒ \n"
+#~ "¼ö ÀÖ½À´Ï´Ù.\n"
+#~ "\n"
+
+#~ msgid "string comparison failed"
+#~ msgstr "¹®ÀÚ¿­ ºñ±³°¡ ½ÇÆÐÇß½À´Ï´Ù"
+
+#~ 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ÀÔ´Ï´Ù."
diff --git a/gnulib-po/ms.gmo b/gnulib-po/ms.gmo
new file mode 100644
index 0000000..ea6247b
--- /dev/null
+++ b/gnulib-po/ms.gmo
Binary files differ
diff --git a/gnulib-po/ms.po b/gnulib-po/ms.po
new file mode 100644
index 0000000..e22393d
--- /dev/null
+++ b/gnulib-po/ms.po
@@ -0,0 +1,507 @@
+# Terjemahan coreutils untuk Bahasa Melayu.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Hasbullah Bin Pit <sebol@ikhlas.com>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  coreutils 5.0.90\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2003-08-10 16:00+0800\n"
+"Last-Translator: Hasbullah Bin Pit <sebol@ikhlas.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "hujah tidak sah %s bagi %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "hujah ambiguous %s bagi %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Hujah sah adalah:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "tak boleh mencipta pautan %s"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "tak boleh mencipta pautan %s"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "tak dapat buka %s untuk dibaca"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "ralat menulis"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Ralat sistem yang tidak diketahui"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opsyen `%s' adalah ambiguous\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opsyen `%s' adalah ambiguous\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opensyen tidak dikenali `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opsyen `%c%s' tidak mengizinkan hujah\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opsyen  `%s' memerlukan hujah\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opsyen tidak sah -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opsyen memerlukan hujah -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memori keletihan"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "`"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "tak boleh mencipta pautan %s"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "fail istimewa blok"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "fail istimewa blok"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "fail istimewa blok"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "Ditulis oleh %s.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Lapor pepijat ke <%s>.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Lapor pepijat ke <%s>.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Hujah mandatori kepada opsyen panjang andalah mandatori bagi opsyen "
+#~ "pendek juga.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Pengunaan: %s [OPSYEN]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Cuba `%s --help' untuk maklumat lanjut .\n"
+
+#~ msgid "NAME"
+#~ msgstr "NAMA"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "terlalu banyak hujah"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "ralat membaca"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "tak dapat buka %s untuk dibaca"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "membaca %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "menulis %s"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "membaca %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "pembukaan gagal"
+
+#~ msgid "regular empty file"
+#~ msgstr "fail kosong biasa"
+
+#~ msgid "regular file"
+#~ msgstr "fail biasa"
+
+#~ msgid "directory"
+#~ msgstr "direktori"
+
+#~ msgid "block special file"
+#~ msgstr "fail istimewa blok"
+
+#~ msgid "character special file"
+#~ msgstr "fail istimewa aksara"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "pautan simbolik"
+
+#~ msgid "socket"
+#~ msgstr "soket"
+
+#~ msgid "message queue"
+#~ msgstr "giliran mesej"
+
+#~ msgid "shared memory object"
+#~ msgstr "objek memori terkongsi"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "objek memori terkongsi"
+
+#~ msgid "weird file"
+#~ msgstr "fail pelik"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fail fifo tidak disokong"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fail fifo tidak disokong"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fail fifo tidak disokong"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "ralat menulis"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Ralat sistem yang tidak diketahui"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opsyen `--%s' tidak mengizinkan hujah\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: opensyen tidak dikenali `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opsyen tidak dibenarkan -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: opsyen `-W %s' adalah ambiguous\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opsyen `-W %s' tidak mengizinkan hujan\n"
+
+#~ msgid "block size"
+#~ msgstr "saiz blok"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s wujud tapi ianya bukan direktori"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "tak dapat menukar hakmilik dan/atau kumpulan %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "tak dapat mencipta direktori %s"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "tak dapat chdir ke direktori %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "tak dapat menukar keizinan %s"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "gagal untuk kembali ke direktori kerja pemulaan"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "gagal untuk kembali ke direktori kerja pemulaan"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "gagal mengekalkan  keizinan bagi %s"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "aksara tidak sah pada %s pada rentetan mod %s"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "memori keletihan"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "ralat pada carian ungkapan biasa (regexp)"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: ungkapan biasa (regexp) tidak sah: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "ralat pada carian ungkapan biasa (regexp)"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[tT]"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "fungsi iconv tak boleh digunakan"
+
+#~ msgid "iconv function not available"
+#~ msgstr "fungsi iconv tidak ada"
+
+#~ msgid "character out of range"
+#~ msgstr "aksara di luar julat"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "tak dapat menukar U+%04X ke set aksara lokal"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "tak dapat menukar U+%04X ke set aksara lokal: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "pengguna tidak sah"
+
+#~ msgid "invalid group"
+#~ msgstr "kumpulan tidak sah"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "tak boleh mendapatkan kumpulan logmasuk untuk UID numerik"
+
+#~ msgid "string comparison failed"
+#~ msgstr "perbandingan rentetan gagal"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Tetapkan LC_ALL='C' untuk mengatasi masalah."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Rentetan dibandingkan adalah %s dan %s."
diff --git a/gnulib-po/nb.gmo b/gnulib-po/nb.gmo
new file mode 100644
index 0000000..cb3008b
--- /dev/null
+++ b/gnulib-po/nb.gmo
Binary files differ
diff --git a/gnulib-po/nb.po b/gnulib-po/nb.po
new file mode 100644
index 0000000..0f11d53
--- /dev/null
+++ b/gnulib-po/nb.po
@@ -0,0 +1,507 @@
+# Norwegian messages for GNU textutils (bokmål dialect)
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Eivind Tagseth <eivindt@multinet.no>, 1996, 1997, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU textutils 2.0.20\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2002-01-27 21:35+0100\n"
+"Last-Translator: Eivind Tagseth <eivindt@multinet.no>\n"
+"Language-Team: Norwegian <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: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ugyldig argument %s for %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "flertydig argument %s for %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Gyldige argument er:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "kan ikke opprette katalog %s"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "kan ikke opprette katalog %s"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr ""
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "feil ved skriving"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Ukjent systemfeil"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: flagget «%s» er flertydig\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: flagget «%s» er flertydig\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: ukjent flagg «%c%s»\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: flagget «%c%s» trenger et argument\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: flagget «%s» trenger et argument\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ukjent flagg -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flagget trenger et argument -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "virtuelt minne oppbrukt"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "kan ikke opprette katalog %s"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: ugyldig mønster"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: ugyldig mønster"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: ugyldig mønster"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "Skrevet av %s.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapportér feil til <bug-textutils@gnu.org>."
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapportér feil til <bug-textutils@gnu.org>."
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Obligatoriske argmenter til lange flagg er obligatoriske også for korte.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Bruk: %s [FLAGG] [FIL]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Prøv med «%s --help» for mer informasjon.\n"
+
+#, fuzzy
+#~ msgid "Print program version"
+#~ msgstr "lesefeil"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "for mange argumenter"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "lesefeil"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "feil ved lesing av %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "feil ved skriving til %s"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "feil ved lesing av %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "åpning av fil feilet"
+
+#, fuzzy
+#~ msgid "regular empty file"
+#~ msgstr "feil ved lesing"
+
+#, fuzzy
+#~ msgid "regular file"
+#~ msgstr "feil ved lesing"
+
+#, fuzzy
+#~ msgid "directory"
+#~ msgstr "%s eksisterer men er ikke en katalog"
+
+#, fuzzy
+#~ msgid "block special file"
+#~ msgstr "blokkstørrelse"
+
+#, fuzzy
+#~ msgid "character special file"
+#~ msgstr "tegn-posisjon er null"
+
+#, fuzzy
+#~ msgid "symbolic link"
+#~ msgstr "kan ikke utføre ioctl på «%s»"
+
+#, fuzzy
+#~ msgid "weird file"
+#~ msgstr "feil ved lesing"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "blokkstørrelse"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "blokkstørrelse"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "feil ved skriving"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Ukjent systemfeil"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: flagget «--%s» trenger et argument\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: ukjent flagg «--%s»\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ukjent flagg -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: flagget «-W %s» er flertydig\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: flagget «-W %s» tillater ikke et argument\n"
+
+#~ msgid "block size"
+#~ msgstr "blokkstørrelse"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s eksisterer men er ikke en katalog"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "kan ikke endre eier og/eller gruppe for %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "kan ikke opprette katalog %s"
+
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "kan ikke skifte til katalog, %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kan ikke endre rettigheter til %s"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "kan ikke opprette katalog %s"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "kan ikke endre rettigheter til %s"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: ugyldig regulært uttrykk: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "ugyldig tegn-klasse «%s»"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "virtuelt minne oppbrukt"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: ugyldig regulært uttrykk: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "feil i søk med regulært uttrykk"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: ugyldig regulært uttrykk: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "feil i søk med regulært uttrykk"
+
+#, fuzzy
+#~ msgid "^[yY]"
+#~ msgstr "^[jJ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#, fuzzy
+#~ msgid "iconv function not usable"
+#~ msgstr "kan ikke skrive ut U+%04X: iconv-funksjonen er ikke brukbar"
+
+#, fuzzy
+#~ msgid "iconv function not available"
+#~ msgstr "kan ikke skrive ut U+%04X: iconv-funksjon er ikke tilgjengelig"
+
+#, fuzzy
+#~ msgid "character out of range"
+#~ msgstr "U+%04X: tegn utenfor tillatte verdier"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsett"
+
+#, fuzzy
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsett"
+
+#~ msgid "invalid user"
+#~ msgstr "ugyldig bruker"
+
+#~ msgid "invalid group"
+#~ msgstr "ugyldig gruppe"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "kan ikke finne login-gruppen til en numerisk bruker-ID"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Dette programmet er fri programvare.  Du kan redistribueret det og/eller\n"
+#~ "modifisere det under betingelsene gitt av GNU General Public License som\n"
+#~ "distribuert av Free Software Foundation; enten versjon 2, eller (om du "
+#~ "vil)\n"
+#~ "en hvilken som helst senere versjon.\n"
+
+#~ msgid "string comparison failed"
+#~ msgstr "strengsammenligning feilet"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Sett LC_ALL='C' for å omgå problemet."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Strengene som ble sammenlignet var «%s» og «%s»."
diff --git a/gnulib-po/nl.gmo b/gnulib-po/nl.gmo
new file mode 100644
index 0000000..effe1a1
--- /dev/null
+++ b/gnulib-po/nl.gmo
Binary files differ
diff --git a/gnulib-po/nl.po b/gnulib-po/nl.po
new file mode 100644
index 0000000..63cfbdd
--- /dev/null
+++ b/gnulib-po/nl.po
@@ -0,0 +1,932 @@
+# Dutch translations for gnulib.
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# Erick Branderhorst <branderh@debian.org>, 1996.
+# Ivo Timmermans <ivo@o2w.nl>, 2000.
+# Freek de Kruijf <f.de.kruijf@hetnet.nl>, 2004, 2005.
+# Erwin Poeze <erwin.poeze@gmail.com>, 2009, 2010.
+# Benno Schulenberg <benno@vertaalt.nl>, 2007, 2008, 2010, 2011, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib-4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-29 13:31+0200\n"
+"Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ongeldig argument %s van %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument %s van %s is niet eenduidig"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset-statistieken:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Aantal uitvoeringen = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "kan statistiekenbestand niet lezen"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "statistiekenbestand heeft een verkeerde grootte\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "kan statistiekenbestand niet schrijven"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "kan statistiekenbestand niet openen voor schrijven"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "schrijffout"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Onbekende systeemfout"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: optie '%s%s' is niet eenduidig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: optie '%s%s' is niet eenduidig; mogelijkheden zijn:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: onbekende optie '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: optie '%s%s' staat geen argument toe\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: optie '%s%s' vereist een argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ongeldige optie -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: optie vereist een argument -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "onvoldoende geheugen beschikbaar"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "‘"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "’"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "kan geen pijp aanmaken"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "subproces %s is mislukt"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Uitvoeringstijden (in seconden)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU (gebruiker)"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU (systeem)"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "kloktijd"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle() is mislukt"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "kan bestandsdescriptor %d niet herstellen: dup2() is mislukt"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "subproces %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "subproces %s ontving het fatale signaal %d"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: waarde voor '%s' is kleiner of gelijk aan %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: Parameter in ARGP_HELP_FMT vereist een waarde"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Onbekende parameter in ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Rommel in ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Een argument dat verplicht of optioneel is voor een lange optie, is dat\n"
+#~ "ook voor de overeenkomstige korte optie."
+
+#~ msgid "Usage:"
+#~ msgstr "Gebruik: "
+
+#~ msgid "  or: "
+#~ msgstr "     of: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPTIE...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "Rapporteer gebreken in het programma aan %s;\n"
+#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "deze hulptekst tonen"
+
+#~ msgid "give a short usage message"
+#~ msgstr "een korte gebruikssamenvatting tonen"
+
+#~ msgid "NAME"
+#~ msgstr "NAAM"
+
+#~ msgid "set the program name"
+#~ msgstr "de programmanaam instellen"
+
+#~ msgid "SECS"
+#~ msgstr "SECONDEN"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "dit aantal seconden pauzeren (standaard 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "programmaversie tonen"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "**Interne programmafout**: geen versie bekend!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Te veel argumenten\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "**Interne programmafout**: optie had herkend moeten worden!?"
+
+#~ msgid "program error"
+#~ msgstr "programmafout"
+
+#~ msgid "stack overflow"
+#~ msgstr "stack-overloop"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "kan geen tijdelijke map vinden; zet $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "kan met sjabloon '%s' geen tijdelijke map aanmaken"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "kan tijdelijk bestand '%s' niet verwijderen"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "kan tijdelijke map '%s' niet verwijderen"
+
+#~ msgid "error closing file"
+#~ msgstr "fout bij sluiten van bestand"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "toegangsrechten van '%s' worden behouden"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "fout bij openen van %s voor lezen"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "kan reservekopiebestand %s niet openen voor schrijven"
+
+#~ msgid "error reading %s"
+#~ msgstr "fout bij lezen van %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "fout bij schrijven van %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "fout na lezen van %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() is mislukt"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "C#-compiler is niet gevonden; installeer 'mono'"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "virtuele C#-machine is niet gevonden; installeer 'mono'"
+
+#~ msgid "unbalanced ["
+#~ msgstr "ongepaarde ["
+
+#~ msgid "invalid character class"
+#~ msgstr "ongeldige tekenklasse"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "syntax van tekenklasse is [[:space:]], niet [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "onafgemaakte \\-stuurcode"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "ongeldige inhoud van \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "reguliere expressie is te groot"
+
+#~ msgid "unbalanced ("
+#~ msgstr "ongepaarde ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "geen syntax opgegeven"
+
+#~ msgid "unbalanced )"
+#~ msgstr "ongepaarde )"
+
+#~ msgid "regular empty file"
+#~ msgstr "leeg normaal bestand"
+
+#~ msgid "regular file"
+#~ msgstr "normaal bestand"
+
+#~ msgid "directory"
+#~ msgstr "map"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolische koppeling"
+
+#~ msgid "message queue"
+#~ msgstr "berichtenwachtrij"
+
+#~ msgid "semaphore"
+#~ msgstr "semafoor"
+
+#~ msgid "shared memory object"
+#~ msgstr "gedeeld geheugenobject"
+
+#~ msgid "typed memory object"
+#~ msgstr "zelfstandig geheugenobject"
+
+#~ msgid "block special file"
+#~ msgstr "blok-apparaat"
+
+#~ msgid "character special file"
+#~ msgstr "byte-apparaat"
+
+#~ msgid "contiguous data"
+#~ msgstr "aaneengesloten gegevens"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "gemultiplexed blok-apparaat"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "gemultiplexed byte-apparaat"
+
+#~ msgid "multiplexed file"
+#~ msgstr "gemultiplexed bestand"
+
+#~ msgid "named file"
+#~ msgstr "benoemd bestand"
+
+#~ msgid "network special file"
+#~ msgstr "netwerkapparaat"
+
+#~ msgid "migrated file with data"
+#~ msgstr "gemigreerd bestand met gegevens"
+
+#~ msgid "migrated file without data"
+#~ msgstr "gemigreerd bestand zonder gegevens"
+
+#~ msgid "port"
+#~ msgstr "poort"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "merkwaardig bestand"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Adresfamilie voor hostnaam wordt niet ondersteund"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Tijdelijk probleem in naamsherleiding"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Ongeldige waarde voor 'ai_flags'"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Onherstelbaar probleem in naamsherleiding"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "'ai_family' wordt niet ondersteund"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Onvoldoende geheugen beschikbaar"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Aan hostnaam is geen adres verbonden"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Naam of dienst is niet bekend"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servicenaam wordt niet ondersteund voor 'ai_socktype'"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "'ai_socktype' wordt niet ondersteund"
+
+#~ msgid "System error"
+#~ msgstr "Systeemfout"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumentenbuffer is te klein"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Bezig met verwerken van verzoek"
+
+#~ msgid "Request canceled"
+#~ msgstr "Verzoek is geannuleerd"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Verzoek is niet geannuleerd"
+
+#~ msgid "All requests done"
+#~ msgstr "Alle verzoeken zijn gedaan"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Onderbroken door een signaal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parametertekst is niet juist gecodeerd"
+
+#~ msgid "Unknown error"
+#~ msgstr "Onbekende fout"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "ongeldige waarde voor 'source_version' in compile_java_class()"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "ongeldige waarde voor 'target_version' in compile_java_class()"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "aanmaken van '%s' is mislukt"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "fout bij schrijven van bestand '%s'"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr "Java-compiler is niet gevonden; installeer 'gcj' of zet $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Virtuele Java-machine is niet gevonden; installeer 'gcj' of zet $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "In-/uitvoerfout in subproces %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "kan status van '%s' niet opvragen"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kan de toegangsrechten van %s niet veranderen"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "kan map %s niet aanmaken"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "kan de huidige werkmap niet vastleggen"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "kan niet terugkeren naar de oorspronkelijke werkmap"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Openen van /dev/zero voor lezen is mislukt"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "Het aanmaken van een lees-thread is mislukt"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "kan geen niet-blokkerende in-/uitvoer instellen naar subproces %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "communicatie met subproces %s is mislukt"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "schrijven naar subproces %s is mislukt"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "lezen uit subproces %s is mislukt"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "subproces %s is geëindigd met afsluitwaarde %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "aanmaken van threads is mislukt"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "subproces %s is geëindigd met afsluitwaarde %d"
+
+#~ msgid "Success"
+#~ msgstr "Gelukt"
+
+#~ msgid "No match"
+#~ msgstr "Geen overeenkomsten"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Ongeldige reguliere expressie"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Ongeldig samengesteld teken"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Ongeldige tekenklassenaam"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Backslash aan het eind"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Ongeldige terugverwijzing"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "Ongepaarde [, [^, [:, [., of [="
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Ongepaarde ( of \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Ongepaarde \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Ongeldige inhoud van \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Ongeldig bereikeinde"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Onvoldoende geheugen beschikbaar"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Ongeldige voorafgaande reguliere expressie"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Voortijdig einde van reguliere expressie"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Reguliere expressie is te groot"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Ongepaarde ) of \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Geen eerdere reguliere expressie"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJyY]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "toegangsrechten van %s worden ingesteld"
+
+# Vroeger ging dit over het afsluiten van een modemverbinding,
+# tegenwoordig over het afsluiten van een pseudoterminal.
+#~ msgid "Hangup"
+#~ msgstr "Opgehangen"
+
+#~ msgid "Interrupt"
+#~ msgstr "Onderbroken"
+
+# Verleden tijd, "Afgesloten", net als de andere actiesignaalnamen.
+#~ msgid "Quit"
+#~ msgstr "Afgesloten"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Ongeldige instructie"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Traceer/breekpunt-instructie"
+
+#~ msgid "Aborted"
+#~ msgstr "Afgebroken"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Drijvendekomma-berekeningsfout"
+
+#~ msgid "Killed"
+#~ msgstr "Geëlimineerd"
+
+#~ msgid "Bus error"
+#~ msgstr "Busfout"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Segmentatiefout"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Gebroken pijp"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Wekker"
+
+#~ msgid "Terminated"
+#~ msgstr "Beëindigd"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Urgente in-/uitvoertoestand"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Gepauzeerd (signaal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Gepauzeerd"
+
+#~ msgid "Continued"
+#~ msgstr "Doorgegaan"
+
+#~ msgid "Child exited"
+#~ msgstr "Dochter is afgesloten"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Gepauzeerd (terminalinvoer)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Gepauzeerd (terminaluitvoer)"
+
+#~ msgid "I/O possible"
+#~ msgstr "In-/uitvoer is mogelijk"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Limiet op processortijd is overschreden"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Limiet op bestandsgrootte is overschreden"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Virtuele tijdopnemer is verlopen"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Tijdopnemer voor analyse is verlopen"
+
+#~ msgid "Window changed"
+#~ msgstr "Venster is veranderd"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Gebruikergedefinieerd signaal 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Gebruikergedefinieerd signaal 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "EMT-instructie"
+
+#~ msgid "Bad system call"
+#~ msgstr "Onjuiste systeemaanroep"
+
+#~ msgid "Stack fault"
+#~ msgstr "Stack-fout"
+
+#~ msgid "Information request"
+#~ msgstr "Verzoek om informatie"
+
+#~ msgid "Power failure"
+#~ msgstr "Stroomstoring"
+
+#~ msgid "Resource lost"
+#~ msgstr "Hulpbron verloren"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "fouten bij het schrijven naar een afgesloten 'pipe' of 'socket'"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Realtime-signaal %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Onbekend signaal %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "de functie iconv() is onbruikbaar"
+
+#~ msgid "iconv function not available"
+#~ msgstr "de functie iconv() is niet beschikbaar"
+
+#~ msgid "character out of range"
+#~ msgstr "teken ligt buiten het toegestane bereik"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "kan U+%04X niet converteren naar de lokale tekenset"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "kan U+%04X niet converteren naar de lokale tekenset: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "ongeldige gebruiker"
+
+#~ msgid "invalid group"
+#~ msgstr "ongeldige groep"
+
+#~ msgid "invalid spec"
+#~ msgstr "ongeldige aanduiding"
+
+#~ msgid "unable to display error message"
+#~ msgstr "kan foutmelding niet tonen"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "In pakketvorm gebracht door %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "In pakketvorm gebracht door %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Dit is vrije software: u mag het vrijelijk wijzigen en verder "
+#~ "verspreiden.\n"
+#~ "De precieze licentie is GPL-3+: GNU General Public License versie 3 of "
+#~ "later.\n"
+#~ "Zie <%s> voor de volledige (Engelse) tekst.\n"
+#~ "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Geschreven door %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Geschreven door %s en %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Geschreven door %s, %s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s\n"
+#~ "en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s, %s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s, %s, %s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s en %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Geschreven door %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s en anderen.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Rapporteer gebreken in het programma aan <%s>;\n"
+#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "Rapporteer gebreken in het programma '%s' aan <%s>;\n"
+#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Webpagina van %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Algemene hulp bij gebruik van GNU-software: <%s>\n"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "kan modus van bestandsdescriptor niet instellen op tekst of binair"
+
+#~ msgid "stdin"
+#~ msgstr "standaardinvoer"
+
+#~ msgid "stdout"
+#~ msgstr "standaarduitvoer"
+
+#~ msgid "stderr"
+#~ msgstr "standaardfoutuitvoer"
+
+#~ msgid "unknown stream"
+#~ msgstr "onbekende gegevensstroom"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "opnieuw openen van '%s' met modus %s is mislukt"
+
+#~ msgid "string comparison failed"
+#~ msgstr "vergelijking van tekenreeksen is mislukt"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Zet LC_ALL='C' om het probleem te omzeilen."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "De te vergelijken tekenreeksen waren %s en %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "kan geen opgemaakte uitvoer aanmaken"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "standaard bestandsdescriptors"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ongeldig argument '%3$s' van %1$s%2$s"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "ongeldig achtervoegsel in argument '%3$s' van %1$s%2$s"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argument '%3$s' van %1$s%2$s is te groot"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: onbekende optie '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: optie '-W %s' vereist een argument\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Webpagina van %s: <http://www.gnu.org/software/%s/>\n"
diff --git a/gnulib-po/pl.gmo b/gnulib-po/pl.gmo
new file mode 100644
index 0000000..246436a
--- /dev/null
+++ b/gnulib-po/pl.gmo
Binary files differ
diff --git a/gnulib-po/pl.po b/gnulib-po/pl.po
new file mode 100644
index 0000000..e494051
--- /dev/null
+++ b/gnulib-po/pl.po
@@ -0,0 +1,911 @@
+# Polish messages for gnulib
+# Copyright (C) 2005, 2007, 2009, 2010, 2011, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2019.
+# based on translation for GNU Mailutils by:
+# Sergey Poznyakoff <gray@gnu.org>, 2003,2004,2005.
+# corrections: Wojciech Polak <polak@gnu.org>, 2003 
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-19 20:02+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "błędny argument %s opcji %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "niejednoznaczny argument %s opcji %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 zwolniono (%.2f%%).\n"
+
+#: lib/bitset/stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_sets, %u w pamięci podręcznej (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset_resets, %u w pamięci podręcznej (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset_tests, %u w pamięci podręcznej (%.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 liczników\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "histogram rozmiarów\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "histogram gęstości\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Statystyki operacji bitset:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Uruchomień łącznie = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "nie można odczytać pliku statystyk"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "błędny rozmiar pliku statystyk\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "nie można zapisać pliku statystyk"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "nie można otworzyć pliku statystyk do zapisu"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "błąd zapisu"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Nieznany błąd systemowy"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna; możliwości:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: nieznana opcja '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opcja '%s%s' nie może mieć argumentów\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opcja '%s%s' musi mieć argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: błędna opcja -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcja musi mieć argument -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "pamięć wyczerpana"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "nie można utworzyć potoku"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "podproces %s zawiódł"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Czasy wykonywania (w sekundach)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU użytkownika"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU systemu"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "zegarowo"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle nie powiodło się"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "nie można odtworzyć fd %d: dup2 nie powiodło się"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "podproces %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "podproces %s dostał krytyczny sygnał %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Pakietujący: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Pakietujący: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Licencja GPLv3+: GNU GPL wersja 3 lub późniejsza:\n"
+#~ "<%s>.\n"
+#~ "To jest oprogramowanie wolnodostępne: można je modyfikować i "
+#~ "rozpowszechniać.\n"
+#~ "Nie ma ŻADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Autor: %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Autorzy: %s i %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Autorzy: %s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s\n"
+#~ "i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s, %s, %s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s i %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Autorzy: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s i inni.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Prosimy zgłaszać błędy na adres <%s>.\n"
+#~ "Błędy w tłumaczeniu prosimy zgłaszać na adres <translation-team-pl@lists."
+#~ "sourceforge.net>.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Błędy pakietującego (%s) prosimy zgłaszać na adres <%s>.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Strona domowa pakietu %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Ogólna pomoc przy używaniu oprogramowania GNU: <%s>.\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: wartość %s jest mniejsza lub równa %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: Parametr ARGP_HELP_FMT wymaga podania wartości"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Błędne dane w ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Argumenty obowiązkowe lub opcjonalne dla długich opcji są również "
+#~ "obowiązkowe lub opcjonalne dla odpowiednich krótkich opcji."
+
+#~ msgid "Usage:"
+#~ msgstr "Składnia:"
+
+#~ msgid "  or: "
+#~ msgstr "    lub: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPCJA...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "Polecenie '%s --help' lub '%s --usage' pozwoli uzyskać więcej "
+#~ "informacji.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Prosimy zgłaszać błędy na adres %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "wyświetlenie tego tekstu pomocy"
+
+#~ msgid "give a short usage message"
+#~ msgstr "wyświetlenie krótkiej informacji o składni polecenia"
+
+#~ msgid "NAME"
+#~ msgstr "NAZWA"
+
+#~ msgid "set the program name"
+#~ msgstr "określenie nazwy programu"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "zatrzymanie na SEK sekund (domyślnie 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "wyświetlenie wersji programu"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(BŁĄD PROGRAMU) Nieznana wersja!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Za dużo argumentów\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(BŁĄD PROGRAMU) Opcja powinna zostać rozpoznana!?"
+
+#~ msgid "program error"
+#~ msgstr "błąd programu"
+
+#~ msgid "stack overflow"
+#~ msgstr "przepełnienie stosu"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "nie można odnaleźć katalogu tymczasowego, można spróbować ustawić $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "nie można utworzyć katalogu typczasowego z użyciem szablonu \"%s\""
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "nie można usunąć pliku tymczasowego %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "nie można usunąć katalogu tymczasowego %s"
+
+#~ msgid "error closing file"
+#~ msgstr "błąd podczas zamykania pliku"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "zachowywanie uprawnień do %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "błąd podczas otwierania %s do odczytu"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "nie można otworzyć pliku zapasowego %s do zapisu"
+
+#~ msgid "error reading %s"
+#~ msgstr "błąd odczytu %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "błąd zapisu %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "błąd po odczycie %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() nie powiodło się"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "Nie znaleziono kompilatora C#, proszę spróbować zainstalować mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr ""
+#~ "Nie znaleziono maszyny wirtualnej C#, proszę spróbować zainstalować mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "niesparowany ["
+
+#~ msgid "invalid character class"
+#~ msgstr "błędna klasa znaków"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "składnia klasy znaków to [[:space:]], nie [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "niedokończona sekwencja \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "błędna zawartość \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "wyrażenie regularne zbyt duże"
+
+#~ msgid "unbalanced ("
+#~ msgstr "niesparowany ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "nie określono składni"
+
+#~ msgid "unbalanced )"
+#~ msgstr "niesparowany )"
+
+#~ msgid "regular empty file"
+#~ msgstr "pusty zwykły plik"
+
+#~ msgid "regular file"
+#~ msgstr "zwykły plik"
+
+#~ msgid "directory"
+#~ msgstr "katalog"
+
+#~ msgid "symbolic link"
+#~ msgstr "dowiązanie symboliczne"
+
+#~ msgid "message queue"
+#~ msgstr "kolejka komunikatów"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "obiekt w pamięci współdzielonej"
+
+#~ msgid "typed memory object"
+#~ msgstr "obiekt z typem w pamięci"
+
+#~ msgid "block special file"
+#~ msgstr "blokowy plik specjalny"
+
+#~ msgid "character special file"
+#~ msgstr "znakowy plik specjalny"
+
+#~ msgid "contiguous data"
+#~ msgstr "dane ciągłe"
+
+#~ msgid "fifo"
+#~ msgstr "potok"
+
+#~ msgid "door"
+#~ msgstr "plik door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multipleksowany blokowy plik specjalny"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "multipleksowany znakowy plik specjalny"
+
+#~ msgid "multiplexed file"
+#~ msgstr "plik multipleksowany"
+
+#~ msgid "named file"
+#~ msgstr "plik nazwany"
+
+#~ msgid "network special file"
+#~ msgstr "sieciowy plik specjalny"
+
+#~ msgid "migrated file with data"
+#~ msgstr "zmigrowany plik z danymi"
+
+#~ msgid "migrated file without data"
+#~ msgstr "zmigrowany plik bez danych"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "gniazdo"
+
+#~ msgid "whiteout"
+#~ msgstr "plik whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "dziwny plik"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Rodzina adresów dla podanej nazwy hosta nie jest obsługiwana"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Tymczasowy błąd rozwiązywania nazw"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Błędna wartość ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Nienaprawialny błąd w rozwiązywaniu nazw"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family zawiera nie obsługiwaną rodzinę protokołów"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Błąd przydzielania pamięci"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Brak adresu związanego z nazwą hosta"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nieznana nazwa lub usługa"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Usługa nie obsługiwana dla danego ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype zawiera nie obsługiwany typ gniazda"
+
+#~ msgid "System error"
+#~ msgstr "Błąd systemowy"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Bufor argumentu zbyt mały"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Przetwarzanie żądania jest w toku"
+
+#~ msgid "Request canceled"
+#~ msgstr "Żądanie anulowane"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Żądanie nie anulowane"
+
+#~ msgid "All requests done"
+#~ msgstr "Wszystkie żądania wykonane"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Przerwane przez sygnał"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Łańcuch parametru niepoprawnie zakodowany"
+
+#~ msgid "Unknown error"
+#~ msgstr "Nieznany błąd"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "błędny argument source_version dla compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "błędny argument target_version dla compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "nie udało się utworzyć \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "błąd podczas zapisu pliku \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Nie znaleziono kompilatora Javy, proszę spróbować zainstalować gcj lub "
+#~ "ustawić $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Nie znaleziono maszyny wirtualnej Javy, proszę spróbować zainstalować gij "
+#~ "lub ustawić $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "błąd we/wy podprocesu %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "nie można wykonać stat na %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "nie można zmienić uprawnień do %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "nie można utworzyć katalogu %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "nie udało się zapisać bieżącego katalogu roboczego"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "nie udało się wrócić do początkowego katalogu roboczego"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Nie udało się otworzyć /dev/zero do odczytu"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "tworzenie wątku czytającego nie powiodło sie"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "nie można ustawić nieblokującego we/wy dla podprocesu %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "komunikacja z podprocesem %s nie powiodła się"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "zapis do podprocesu %s nie powiódł się"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "odczyt z podprocesu %s nie powiódł się"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "podproces %s zakończył się z kodem wyjścia %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "tworzenie wątków nie powiodło się"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "podproces %s zakończył się kodem wyjścia %d"
+
+#~ msgid "Success"
+#~ msgstr "Sukces"
+
+#~ msgid "No match"
+#~ msgstr "Nic nie pasuje"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Błędne wyrażenie regularne"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Błędny znak sortowany"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Błędna nazwa klasy znaków"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Kończący znak `\\'"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Błędne odniesienie wstecz"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "Niesparowane [, [^, [:, [. lub [="
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Niesparowane ( lub \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Niesparowane \\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Błędna zawartość \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Błędny koniec zakresu"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Pamięć wyczerpana"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Błędne poprzedzające wyrażenie regularne"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Przedwczesny koniec wyrażenia regularnego"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Wyrażenie regularne zbyt duże"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Niesparowane ) lub \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Brak poprzedniego wyrażenia regularnego"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yYtT]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "ustawianie uprawnień %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Rozłączenie"
+
+#~ msgid "Interrupt"
+#~ msgstr "Przerwanie"
+
+#~ msgid "Quit"
+#~ msgstr "Wyjście"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Niedozwolona instrukcja"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Pułapka debuggera/breakpoint"
+
+#~ msgid "Aborted"
+#~ msgstr "Przerwano"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Błąd w obliczeniach zmiennoprzecinkowych"
+
+#~ msgid "Killed"
+#~ msgstr "Unicestwiono"
+
+#~ msgid "Bus error"
+#~ msgstr "Błąd szyny"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Naruszenie ochrony pamięci"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Przerwany potok"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Budzik"
+
+#~ msgid "Terminated"
+#~ msgstr "Zakończono"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Nagły stan we/wy"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Zatrzymano (sygnał)"
+
+#~ msgid "Stopped"
+#~ msgstr "Zatrzymano"
+
+#~ msgid "Continued"
+#~ msgstr "Kontynuacja"
+
+#~ msgid "Child exited"
+#~ msgstr "Zakończenie procesu potomnego"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Zatrzymano (wejście z tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Zatrzymano (wyjście na tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Możliwa operacja we/wy"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Przekroczony limit czasu procesora"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Przekroczony limit rozmiaru pliku"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Upłynął czas stopera wirtualnego"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Upłynął czas stopera profilującego"
+
+#~ msgid "Window changed"
+#~ msgstr "Okno zmienione"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Sygnał użytkownika 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Sygnał użytkownika 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Pułapka EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Błędne wywołanie systemowe"
+
+#~ msgid "Stack fault"
+#~ msgstr "Błąd stosu"
+
+#~ msgid "Information request"
+#~ msgstr "Żądanie informacji"
+
+#~ msgid "Power failure"
+#~ msgstr "Awaria zasilania"
+
+#~ msgid "Resource lost"
+#~ msgstr "Utrata zasobów"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "błąd zapisu do zamkniętego potoku lub gniazda"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Sygnał czasu rzeczywistego %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Nieznany sygnał %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "nie można użyć funkcji iconv"
+
+#~ msgid "iconv function not available"
+#~ msgstr "funkcja iconv nie jest dostępna"
+
+#~ msgid "character out of range"
+#~ msgstr "znak spoza zakresu"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "nie można przekształcić U+%04X do lokalnego zestawu znaków"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "nie można przekształcić U+%04X do lokalnego zestawu znaków: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "błędny użytkownik"
+
+#~ msgid "invalid group"
+#~ msgstr "błędna grupa"
+
+#~ msgid "invalid spec"
+#~ msgstr "błędna specyfikacja"
+
+#~ msgid "unable to display error message"
+#~ msgstr "nie można wyświetlić komunikatu błędu"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "nie udało się ustawić deskryptora pliku w tryb tekstowy/binarny"
+
+#~ msgid "stdin"
+#~ msgstr "standardowego wejścia"
+
+#~ msgid "stdout"
+#~ msgstr "standardowego wyjścia"
+
+#~ msgid "stderr"
+#~ msgstr "standardowego wyjścia diagnostycznego"
+
+#~ msgid "unknown stream"
+#~ msgstr "nieznanego strumienia"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "nie udało się ponownie otworzyć %s w trybie %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "nie udało się porównanie łańcuchów znaków"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Ustaw LC_ALL='C' żeby obejść problem"
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Porównywane łańcuchy znaków do %s i %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "nie można sformatować wyjścia"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "standardowe deskryptory plików"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "błędny argument opcji %s%s '%s'"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "błędny przyrostek argumentu opcji %s%s '%s'"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argument opcji %s%s '%s' zbyt duży"
diff --git a/gnulib-po/pt.gmo b/gnulib-po/pt.gmo
new file mode 100644
index 0000000..0579c78
--- /dev/null
+++ b/gnulib-po/pt.gmo
Binary files differ
diff --git a/gnulib-po/pt.po b/gnulib-po/pt.po
new file mode 100644
index 0000000..3ff881d
--- /dev/null
+++ b/gnulib-po/pt.po
@@ -0,0 +1,497 @@
+# Translation of gnulib messages to Portuguese
+# Copyright (C) 1996, 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# António João Serras Rendas <arendas@mail.telepac.pt>, 1996.
+# Américo Monteiro <a_monteiro@netcabo.pt>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2014-11-29 14:28-0000\n"
+"Last-Translator: Luís Oliveira <luismbo@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-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.6.10\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr ""
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr ""
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr ""
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "erro de escrita"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Erro de sistema desconhecido"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opção '-W %s' é ambígua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opção '%s' é ambígua; possibilidades:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opção não reconhecida '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opção '%c%s' não permite um argumento\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opção '--%s' requer um argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opção inválida -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opção requer um argumento -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memória esgotada"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr ""
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr ""
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Despertador"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Reporte problemas para: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Reporte problemas com %s para: %s\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: valor %s é menos que ou igual a %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT parâmetro requer um valor"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT parâmetro deve ser positivo"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: ARGP_HELP_FMT parâmetro desconhecido"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Lixo em ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Os argumentos obrigatórios ou opcionais para as opções longas são também "
+#~ "obrigatórios ou opcionais para qualquer opção curta correspondente."
+
+#~ msgid "Usage:"
+#~ msgstr "Utilização:"
+
+#~ msgid "  or: "
+#~ msgstr "  ou: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPÇÃO...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Tente '%s --help' ou '%s --usage' para mais informação.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Reporte bugs para %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "dá esta lista de ajuda"
+
+#~ msgid "give a short usage message"
+#~ msgstr "dá uma mensagem curta de utilização"
+
+#~ msgid "NAME"
+#~ msgstr "NOME"
+
+#~ msgid "set the program name"
+#~ msgstr "define o nome do programa"
+
+#~ msgid "SECS"
+#~ msgstr "SEGS"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "pára por SEGS segundos (predefinição 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "escreve a versão do programa"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(ERRO DO PROGRAMA) Nenhuma versão conhecida!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Demasiados argumentos\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(ERRO DO PROGRAMA) A opção deveria ter sido reconhecida!?"
+
+#~ msgid "program error"
+#~ msgstr "erro de programa"
+
+#~ msgid "System error"
+#~ msgstr "Erro de sistema"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erro desconhecido"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opção '--%s' não permite um argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção não reconhecida '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opção '-W %s' não permite um argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: opção '-W %s' requer um argumento\n"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "incapaz de registar o directório de trabalho actual"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "falha ao regressar ao directório de trabalho inicial"
+
+#~ msgid "Success"
+#~ msgstr "Com sucesso"
+
+#~ msgid "No match"
+#~ msgstr "Nenhuma equivalência"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Expressão regular inválida"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Caractere de colação inválido"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Nome de classe de caracteres inválido"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Backslash de arrasto"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Referência de retorno inválida"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "[ ou [^ não equivalente"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( ou \\( não equivalente"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ não equivalente"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Conteúdo de \\{\\} inválido"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Final de alcance inválido"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memória esgotada"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Expressão regular precedente inválida"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Final prematuro da expressão regular"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Expressão regular muito grande"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") ou \\) não emparelhado"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Nenhuma expressão regular prévia"
+
+#~ msgid "Hangup"
+#~ msgstr "Pendurar"
+
+#~ msgid "Interrupt"
+#~ msgstr "Interromper"
+
+#~ msgid "Quit"
+#~ msgstr "Sair"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Instrução ilegal"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Acompanhar/armadilha de ponto de ruptura"
+
+#~ msgid "Aborted"
+#~ msgstr "Abortado"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Excepção de vírgula flutuante"
+
+#~ msgid "Killed"
+#~ msgstr "Morto"
+
+#~ msgid "Bus error"
+#~ msgstr "Erro do bus"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Falha de segmentação"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Pipe quebrado"
+
+#~ msgid "Terminated"
+#~ msgstr "Terminado"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Condição I/O urgente"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Parado (sinal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Parado"
+
+#~ msgid "Continued"
+#~ msgstr "Continuado"
+
+#~ msgid "Child exited"
+#~ msgstr "Processo filho terminado"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Parado (entrada tty)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Parado (saída tty)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Possível I/O"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Limite de tempo de CPU excedido"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Limite de tamanho de ficheiro excedido"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Temporizador virtual expirado"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Temporizador de perfil expirado"
+
+#~ msgid "Window changed"
+#~ msgstr "Janela alterada"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Sinal 1 definido pelo utilizador"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Sinal 2 definido pelo utilizador"
+
+#~ msgid "EMT trap"
+#~ msgstr "Armadilha EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Má chamada do sistema"
+
+#~ msgid "Stack fault"
+#~ msgstr "Falha do Stack"
+
+#~ msgid "Information request"
+#~ msgstr "Requisito de informação"
+
+#~ msgid "Power failure"
+#~ msgstr "Falha de energia"
+
+#~ msgid "Resource lost"
+#~ msgstr "Recurso perdido"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Sinal de tempo real %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Sinal desconhecido %d"
+
+#~ msgid "unknown stream"
+#~ msgstr "fluxo desconhecido"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opção ilegal -- %c\n"
diff --git a/gnulib-po/pt_BR.gmo b/gnulib-po/pt_BR.gmo
new file mode 100644
index 0000000..ecc9dd8
--- /dev/null
+++ b/gnulib-po/pt_BR.gmo
Binary files differ
diff --git a/gnulib-po/pt_BR.po b/gnulib-po/pt_BR.po
new file mode 100644
index 0000000..7b0c184
--- /dev/null
+++ b/gnulib-po/pt_BR.po
@@ -0,0 +1,1044 @@
+# Brazilian Portuguese translations for gnulib package
+# Traduções em português brasileiro para o pacote gnulib
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Cyro Mendes De Moraes Neto <neto@conectiva.com.br>, 1998.
+# Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br>, 2001.
+# Juan Carlos Castro y Castro <jcastro@vialink.com.br>, 2003.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013, 2017, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-19 09:10-0200\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\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: Virtaal 1.0.0-beta1\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+# , c-format
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento inválido %s para %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento ambíguo %s para %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 contagem\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "histograma de log de tamanho\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "histograma de densidade\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Estatística de bitset:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Execuções acumuladas = %u\n"
+
+# , c-format
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "não foi possível ler o arquivo de estado"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "tamanho inválido de arquivo de estado\n"
+
+# , c-format
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "não foi possível escrever o arquivo de estado"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "não foi possível abrir o arquivo de estado para escrita"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "erro de escrita"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Erro desconhecido de sistema"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a opção \"%s%s\" é ambígua\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:"
+
+# , c-format
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opção desconhecida \"%s%s\"\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a opção \"%s%s\" não permite um argumento\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a opção \"%s%s\" exige um argumento\n"
+
+# , c-format
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opção inválida -- \"%c\"\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a opção exige um argumento -- \"%c\"\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memória esgotada"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+# , c-format
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "não foi possível criar redirecionamento"
+
+# , c-format
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "subprocesso %s falhou"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Tempos de execução (segundos)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU usuário"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU sistema"
+
+# Sinal SIGALRM
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "relógio de parede"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle falhou"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "não foi possível restaurar descritor de arquivo %d: dup2 falhou"
+
+# , c-format
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "subprocesso %s"
+
+# , c-format
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "o subprocesso %s recebeu sinal fatal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Empacotado por %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Empacotado por %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Licença GPLv3+: GNU GPL versão 3 ou posterior <%s>\n"
+#~ "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n"
+#~ "NÃO HÁ QUALQUER GARANTIA, na máxima extensão permitida em lei.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Escrito por %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Escrito por %s e %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Escrito por %s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s e %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Escrito por %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s e outros.\n"
+
+# Adicionado endereço de email da equipe, conforme solicitação do desenvolvedor -- Rafael
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Relate erros para: %s\n"
+#~ "Relate erros de tradução para <http://ldpbr-translation@lists.sourceforge."
+#~ "net>\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Relate erros do %s para: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Página do %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Ajuda para uso de softwares GNU: <%s>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: O valor %s é menor do que ou igual a %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: O parâmetro ARGP_HELP_FMT exige um valor"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Parâmetro ARGP_HELP_FMT desconhecido"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Lixo em ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Argumentos obrigatórios ou opcionais para opções longas também o são para "
+#~ "quaisquer opções curtas correspondentes."
+
+#~ msgid "Usage:"
+#~ msgstr "Uso:"
+
+#~ msgid "  or: "
+#~ msgstr " ou: "
+
+# , c-format
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPÇÃO...]"
+
+# , c-format
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "Tente \"%s --help\" ou \"%s --usage\" para mais informação.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Relate erros para %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "fornece esta lista de ajuda"
+
+#~ msgid "give a short usage message"
+#~ msgstr "fornece uma mensagem de uso curta"
+
+#~ msgid "NAME"
+#~ msgstr "NOME"
+
+#~ msgid "set the program name"
+#~ msgstr "define o nome do programa"
+
+#~ msgid "SECS"
+#~ msgstr "SEGS"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "segura por SEGS segundos (padrão 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "mostra a versão do programa"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(ERRO NO PROGRAMA) Nenhuma versão conhecida!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Número excessivo de argumentos\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(ERRO NO PROGRAMA) A opção deveria ter sido reconhecida!?"
+
+#~ msgid "program error"
+#~ msgstr "erro do programa"
+
+#~ msgid "stack overflow"
+#~ msgstr "estouro de pilha"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "não foi possível localizar um diretório temporário, tente definir $TMPDIR"
+
+# , c-format
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr ""
+#~ "não foi possível criar um diretório temporário usando o modelo \"%s\""
+
+# , c-format
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "não foi possível remover o arquivo temporário %s"
+
+# , c-format
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "não foi possível remover o diretório temporário %s"
+
+#~ msgid "error closing file"
+#~ msgstr "erro ao fechar o arquivo"
+
+# , c-format
+#~ msgid "preserving permissions for %s"
+#~ msgstr "preservando permissões de %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "erro ao abrir %s para leitura"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "não foi possível abrir o arquivo backup %s para escrita"
+
+# , c-format
+#~ msgid "error reading %s"
+#~ msgstr "erro ao ler %s"
+
+# , c-format
+#~ msgid "error writing %s"
+#~ msgstr "erro ao escrever %s"
+
+# , c-format
+#~ msgid "error after reading %s"
+#~ msgstr "erro após leitura de %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() falhou"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "O compilador C# não foi localizado, tente instalar mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "A máquina virtual C# não foi localizada, tente instalar mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "[ não balanceado"
+
+# , c-format
+#~ msgid "invalid character class"
+#~ msgstr "classe de caracteres inválida"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "a sintaxe da classe de caracteres é [[:space:]], não [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "escape \\ não finalizado"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "conteúdo inválido de \\{\\}"
+
+# , c-format
+#~ msgid "regular expression too big"
+#~ msgstr "expressão regular grande demais"
+
+#~ msgid "unbalanced ("
+#~ msgstr "( não balanceado"
+
+#~ msgid "no syntax specified"
+#~ msgstr "nenhuma sintaxe especificada"
+
+#~ msgid "unbalanced )"
+#~ msgstr ") não balanceado"
+
+#~ msgid "regular empty file"
+#~ msgstr "arquivo comum vazio"
+
+#~ msgid "regular file"
+#~ msgstr "arquivo comum"
+
+#~ msgid "directory"
+#~ msgstr "diretório"
+
+#~ msgid "symbolic link"
+#~ msgstr "link simbólico"
+
+#~ msgid "message queue"
+#~ msgstr "fila de mensagem"
+
+#~ msgid "semaphore"
+#~ msgstr "semáforo"
+
+#~ msgid "shared memory object"
+#~ msgstr "objeto de memória compartilhada"
+
+#~ msgid "typed memory object"
+#~ msgstr "objeto de memória tipificada"
+
+#~ msgid "block special file"
+#~ msgstr "arquivo especial de bloco"
+
+#~ msgid "character special file"
+#~ msgstr "arquivo especial de caractere"
+
+#~ msgid "contiguous data"
+#~ msgstr "dados contíguos"
+
+# first-in, first-out; abreviação muito usada no meio computacional em português -- Rafael
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+# https://en.wikipedia.org/wiki/Unix_file_types#Door
+# Não traduzir para porta para evitar confusão com "port"
+#~ msgid "door"
+#~ msgstr "door"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "arquivo multiplexado especial de bloco"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "arquivo multiplexado especial de caractere"
+
+#~ msgid "multiplexed file"
+#~ msgstr "arquivo multiplexado"
+
+#~ msgid "named file"
+#~ msgstr "arquivo nomeado"
+
+#~ msgid "network special file"
+#~ msgstr "arquivo especial de rede"
+
+#~ msgid "migrated file with data"
+#~ msgstr "arquivo migrado com dados"
+
+#~ msgid "migrated file without data"
+#~ msgstr "arquivo migrado sem dados"
+
+#~ msgid "port"
+#~ msgstr "porta"
+
+#~ msgid "socket"
+#~ msgstr "soquete"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "arquivo estranho"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Não há suporte para família de endereços para nome de máquina"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Falha temporária na resolução de nome"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Valor inválido para ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Falha irrecuperável na resolução de nome"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "Não há suporte a ai_family"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Falha na alocação de memória"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Nenhum endereço associado ao nome de máquina"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Nome ou serviço desconhecido"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Sem suporte ao nome de serviço pelo ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "Não há suporte a ai_socktype"
+
+#~ msgid "System error"
+#~ msgstr "Erro de sistema"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Buffer de argumentos é pequeno demais"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Processamento de requisição em andamento"
+
+#~ msgid "Request canceled"
+#~ msgstr "Requisição cancelada"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Requisição não cancelada"
+
+#~ msgid "All requests done"
+#~ msgstr "Todas as requisições foram atendidas"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Interrompido por um sinal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Texto do parâmetro codificado incorretamente"
+
+#~ msgid "Unknown error"
+#~ msgstr "Erro desconhecido"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "argumento source_version inválido para compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "argumento target_version inválido para compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "falha ao criar \"%s\""
+
+# , c-format
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "erro ao escrever o arquivo \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "O compilador de Java não foi localizado, tente instalar gcj ou definir "
+#~ "$JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "A máquina virtual de Java não foi localizada, tente instalar gij ou "
+#~ "definir $JAVA"
+
+# , c-format
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "erro de E/S no subprocesso %s"
+
+# , c-format
+#~ msgid "cannot stat %s"
+#~ msgstr "não foi possível obter estado de %s"
+
+# , c-format
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "não foi possível mudar permissões de %s"
+
+# , c-format
+#~ msgid "cannot create directory %s"
+#~ msgstr "não foi possível criar o diretório %s"
+
+# , c-format
+#~ msgid "unable to record current working directory"
+#~ msgstr "não foi possível registrar o diretório de trabalho atual"
+
+# , c-format
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "falha em retornar ao diretório de trabalho inicial"
+
+# , c-format
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Falha ao abrir /dev/zero para leitura"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "a criação da thread de leitura falhou"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "não foi possível configurar E/S sem bloqueio para o subprocesso %s"
+
+# , c-format
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "a comunicação com o subprocesso %s falhou"
+
+# , c-format
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "escrita no subprocesso %s falhou"
+
+# , c-format
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "leitura do subprocesso %s falhou"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "o subprocesso %s terminou com o código de saída %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "a criação das threads falhou"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "subprocesso %s terminado com código de saída %d"
+
+#~ msgid "Success"
+#~ msgstr "Sucesso"
+
+#~ msgid "No match"
+#~ msgstr "Nenhuma ocorrência do padrão"
+
+# , c-format
+#~ msgid "Invalid regular expression"
+#~ msgstr "Expressão regular inválida"
+
+# , c-format
+#~ msgid "Invalid collation character"
+#~ msgstr "Caractere de combinação inválido"
+
+# , c-format
+#~ msgid "Invalid character class name"
+#~ msgstr "Nome inválido de classe de caracteres"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Barra invertida no final"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Retrorreferência inválida"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "[, [^, [:, [., ou [= sem correspondente"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "( ou \\( sem correspondente"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "\\{ sem correspondente"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Conteúdo inválido de \\{\\}"
+
+# , c-format
+#~ msgid "Invalid range end"
+#~ msgstr "Fim de intervalo inválido"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memória esgotada"
+
+# , c-format
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "A expressão regular precedente é inválida"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Fim prematuro da expressão regular"
+
+# , c-format
+#~ msgid "Regular expression too big"
+#~ msgstr "Expressão regular grande demais"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr ") ou \\) sem correspondente"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Nenhuma expressão regular anterior"
+
+# Valor exato de 'yesexpr', conforme mensagem do desenvolvedor -- Rafael
+#~ msgid "^[yY]"
+#~ msgstr "^[+1SsyY]"
+
+# Valor exato de 'noexpr', conforme mensagem do desenvolvedor -- Rafael
+#~ msgid "^[nN]"
+#~ msgstr "^[-0nN]"
+
+# , c-format
+#~ msgid "setting permissions for %s"
+#~ msgstr "definindo permissões de %s"
+
+# Sinal SIGHUP
+#~ msgid "Hangup"
+#~ msgstr "Desconexão"
+
+# Sinal SIGINT
+#~ msgid "Interrupt"
+#~ msgstr "Interrupção"
+
+# Sinal SIGQUIT
+#~ msgid "Quit"
+#~ msgstr "Desistência"
+
+# Sinal SIGILL
+#~ msgid "Illegal instruction"
+#~ msgstr "Instrução ilegal"
+
+# AFAIK, o termo em inglês muito utilizado. Aceito sugestões -- Rafael
+# Sinal SIGTRAP
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Trap de trace/breakpoint"
+
+# Sinal SIGABRT
+#~ msgid "Aborted"
+#~ msgstr "Abortado"
+
+# Sinal SIGFPE
+#~ msgid "Floating point exception"
+#~ msgstr "Exceção de ponto flutuante"
+
+# Sinal SIGKILL
+#~ msgid "Killed"
+#~ msgstr "Morto"
+
+# Sinal SIGBUS
+#~ msgid "Bus error"
+#~ msgstr "Erro de barramento"
+
+# Sinal SIGSEGV
+#~ msgid "Segmentation fault"
+#~ msgstr "Falha de segmentação"
+
+# Sinal SIGPIPE
+#~ msgid "Broken pipe"
+#~ msgstr "Conexão interrompida"
+
+# Sinal SIGALRM
+#~ msgid "Alarm clock"
+#~ msgstr "Despertador"
+
+# Sinal SIGTERM
+#~ msgid "Terminated"
+#~ msgstr "Terminado"
+
+# Sinal SIGURG
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Condição urgente de E/S"
+
+# Sinal SIGSTP
+#~ msgid "Stopped (signal)"
+#~ msgstr "Suspenso (sinal)"
+
+# Sinal SIGTSTP
+#~ msgid "Stopped"
+#~ msgstr "Suspenso"
+
+# Sinal SIGCONT
+#~ msgid "Continued"
+#~ msgstr "Continuado"
+
+# Sinal SIGCHLD
+#~ msgid "Child exited"
+#~ msgstr "Processo filho saiu"
+
+# Sinal SIGTTIN
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Suspenso (entrada tty)"
+
+# Sinal SIGTTOU
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Suspenso (saída tty)"
+
+# Sinal SIGIO
+#~ msgid "I/O possible"
+#~ msgstr "E/S possível"
+
+# Sinal SIGXCPU
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Tempo na CPU excedido"
+
+# Sinal SIGXFSZ
+#~ msgid "File size limit exceeded"
+#~ msgstr "Tamanho de arquivo excedido"
+
+# Sinal SIGVTALRM
+#~ msgid "Virtual timer expired"
+#~ msgstr "Temporizador virtual expirou"
+
+# Sinal SIGPROF
+#~ msgid "Profiling timer expired"
+#~ msgstr "Temporizador de perfil expirou"
+
+#~ msgid "Window changed"
+#~ msgstr "Janela alterada"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Sinal 1 definido pelo usuário"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Sinal 2 definido pelo usuário"
+
+#~ msgid "EMT trap"
+#~ msgstr "Trap de EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Chamada de sistema inválida"
+
+#~ msgid "Stack fault"
+#~ msgstr "Falha na pilha"
+
+#~ msgid "Information request"
+#~ msgstr "Requisição de informação"
+
+#~ msgid "Power failure"
+#~ msgstr "Falha de energia"
+
+#~ msgid "Resource lost"
+#~ msgstr "Recurso perdido"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "erro de escrita para um redirecionamento (pipe) ou soquete fechado"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Sinal de tempo real %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Sinal desconhecido %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "função iconv não utilizável"
+
+#~ msgid "iconv function not available"
+#~ msgstr "função iconv não disponível"
+
+# , c-format
+#~ msgid "character out of range"
+#~ msgstr "caractere fora do intervalo"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr ""
+#~ "não foi possível converter U+%04X para o conjunto de caracteres local"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr ""
+#~ "não foi possível converter U+%04X para o conjunto de caracteres local: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "usuário inválido"
+
+#~ msgid "invalid group"
+#~ msgstr "grupo inválido"
+
+#~ msgid "invalid spec"
+#~ msgstr "especificação inválida"
+
+#~ msgid "unable to display error message"
+#~ msgstr "não foi possível exibir a mensagem de erro"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "falha ao definir modo texto/binário do descritor de arquivo"
+
+#~ msgid "stdin"
+#~ msgstr "entrada padrão (stdin)"
+
+#~ msgid "stdout"
+#~ msgstr "saída padrão (stdout)"
+
+#~ msgid "stderr"
+#~ msgstr "erro padrão (stderr)"
+
+#~ msgid "unknown stream"
+#~ msgstr "fluxo desconhecido"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "falha ao reabrir %s com modo %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "a comparação de textos falhou"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Defina LC_ALL='C' para contornar o problema."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Os textos comparados foram %s e %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "não foi possível fazer a saída formatada"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "descritores de arquivo padrão"
+
+# %s%s é hífen e opção, `%s' é o argumento da opção
+# , c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "argumento inválido para %s%s: \"%s\""
+
+# %s%s é hífen e opção, `%s' é o argumento da opção
+# , c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "sufixo inválido no argumento para %s%s \"%s\""
+
+# %s%s é hífen e opção, `%s' é o argumento da opção
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argumento para %s%s \"%s\" é grande demais"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Página do %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: O parâmetro ARGP_HELP_FMT deve ser positivo"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n"
+
+# , c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção desconhecida \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+# , c-format
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opção inválida -- %c\n"
+
+#~ msgid "block size"
+#~ msgstr "tamanho do bloco"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s existe, mas não é um diretório"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "não pode substituir dono e/ou grupo de %s"
+
+# , c-format
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "impossível mudar para diretório %s"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "nao foi possivel obter um grupo e login de um UID numerico "
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Este programa é um software livre, você pode redistribuí-lo e/ou modificá-"
+#~ "lo\n"
+#~ "sobre os termos da licença pública geral GNU (GPL - General Public "
+#~ "License)\n"
+#~ "publicada pela Free Software Foundation, versão 2 ou posteriores.\n"
+#~ "\n"
diff --git a/gnulib-po/quot.sed b/gnulib-po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/gnulib-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/gnulib-po/remove-potcdate.sin b/gnulib-po/remove-potcdate.sin
new file mode 100644
index 0000000..8c70dfb
--- /dev/null
+++ b/gnulib-po/remove-potcdate.sin
@@ -0,0 +1,25 @@
+# Sed script that removes the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# Copyright (C) 2002 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 any warranty.
+#
+# 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/gnulib-po/ro.gmo b/gnulib-po/ro.gmo
new file mode 100644
index 0000000..4e75b23
--- /dev/null
+++ b/gnulib-po/ro.gmo
Binary files differ
diff --git a/gnulib-po/ro.po b/gnulib-po/ro.po
new file mode 100644
index 0000000..31d0575
--- /dev/null
+++ b/gnulib-po/ro.po
@@ -0,0 +1,397 @@
+# Mesajele în limba românã pentru pachetul mailutils.
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mailutils 0.4\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2003-12-10 08:55+0200\n"
+"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: lib/argmatch.c:132
+#, fuzzy, c-format
+msgid "invalid argument %s for %s"
+msgstr "nume etichetã(tag) invalid `%s' pentru `%s'"
+
+#: lib/argmatch.c:133
+#, fuzzy, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "lipseºte argumentul pentru %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+#, fuzzy
+msgid "Valid arguments are:"
+msgstr "argumentele if valide sunt: s | r | t"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "nu se poate crea mailerul \"%s\""
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "nu se poate crea mailerul \"%s\""
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "nu se poate deschide fiºierul de ieºire(output) \"%s\": %s"
+
+#: lib/closeout.c:122
+#, fuzzy
+msgid "write error"
+msgstr "eroare regex"
+
+#: lib/error.c:195
+#, fuzzy
+msgid "Unknown system error"
+msgstr "tip de mesaj necunoscut"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opþiunea `%s' este ambiguã\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opþiunea `%s' este ambiguã\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opþiune necunoscutã `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `%c%s' nu permite argumente\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opþiunea `%s' necesitã un argument\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opþiune invalidã -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opþiunea necesitã un argument -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Memorie plinã"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr ""
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "nu se poate crea mailerul \"%s\""
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr ""
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr ""
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr ""
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Raportaþi bug-urile la %s.\n"
+
+#, fuzzy
+#~| msgid "Report bugs to %s.\n"
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Raportaþi bug-urile la %s.\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: parametrul ARGP_HELP_FMT necesitã o valoare"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Parametru ARGP_HELP_FMT necunoscut"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Gunoi(garbage) în ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Argumentele obligatorii sau opþionale pentru opþiunile lungi sunt de "
+#~ "asemenea obligatorii sau opþionale pentru toate opþiunile scurte "
+#~ "corespunzãtoare."
+
+#~ msgid "Usage:"
+#~ msgstr "Folosire:"
+
+#~ msgid "  or: "
+#~ msgstr "  sau: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [OPÞIUNE...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "Încercaþi `%s --help' sau `%s --usage' pentru mai multe informaþii.\n"
+
+#~ msgid "Give this help list"
+#~ msgstr "Afiºeazã aceastã listã de ajutor"
+
+#~ msgid "Give a short usage message"
+#~ msgstr "Afiºeazã un mesaj de folosire scurt"
+
+#~ msgid "NAME"
+#~ msgstr "NUME"
+
+#~ msgid "Set the program name"
+#~ msgstr "Seteazã numele programului"
+
+#, fuzzy
+#~ msgid "SECS"
+#~ msgstr "SECUNDE"
+
+#~ msgid "Hang for SECS seconds (default 3600)"
+#~ msgstr "Întrerupe(hang) pentru SECS secunde (implicit 3600)"
+
+#~ msgid "Print program version"
+#~ msgstr "Afiºeazã versiunea programului"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(EROARE DE PROGRAM) Nici o versiune cunoscutã!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Prea multe argumente\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(EROARE DE PROGRAM) Opþiunea ar fi trebuit recunoscutã!?"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "eroare de interval(range)"
+
+#, fuzzy
+#~ msgid "stack overflow"
+#~ msgstr "subrulare(underflow) a stivei(stack)"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "eroare la cititrea din fiºierul de intrare(input): %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "eroare în scrierea în mailbox: %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "fork eºuat"
+
+#, fuzzy
+#~ msgid "message queue"
+#~ msgstr "%d mesaj"
+
+#, fuzzy
+#~ msgid "Memory allocation failure"
+#~ msgstr "Operaþiune eºuatã"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "eroare regex"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Escape necunoscut %s"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opþiunea `--%s' nu permite argumente\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: opþiune necunoscutã `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opþiune ilegalã -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: opþiune `-W %s' este ambiguã\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opþiune `-W %s' nu permite argumente\n"
+
+#, fuzzy
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "nu se poate trece în uid %lu: %m"
+
+#, fuzzy
+#~ msgid "cannot create directory %s"
+#~ msgstr "nu se poate crea iterator: %s"
+
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "nu se poate crea iterator: %s"
+
+#, fuzzy
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "Permisiuni greºite la %s. Setaþi 0600."
+
+#~ msgid "Success"
+#~ msgstr "Succes"
+
+#, fuzzy
+#~ msgid "Invalid back reference"
+#~ msgstr "Numãr invalid"
+
+#, fuzzy
+#~ msgid "Invalid range end"
+#~ msgstr "Tip de datã invalid"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Memorie plinã"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "Nu existã fiºier anterior"
+
+#, fuzzy
+#~ msgid "invalid user"
+#~ msgstr "Numãr invalid"
+
+#, fuzzy
+#~ msgid "invalid group"
+#~ msgstr "Deschide grup"
+
+#, fuzzy
+#~ msgid "string comparison failed"
+#~ msgstr "Autentificare eºuatã"
diff --git a/gnulib-po/ru.gmo b/gnulib-po/ru.gmo
new file mode 100644
index 0000000..409df53
--- /dev/null
+++ b/gnulib-po/ru.gmo
Binary files differ
diff --git a/gnulib-po/ru.po b/gnulib-po/ru.po
new file mode 100644
index 0000000..ab4a240
--- /dev/null
+++ b/gnulib-po/ru.po
@@ -0,0 +1,923 @@
+# translation of gnulib-2.0.0.3462.e9796.ru.po to Russian
+# Copyright (C) 2005, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# Sergey Poznyakoff <gray@gnu.org>, 2003,2004,2005.
+# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-21 18:46+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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 2.0\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неверный аргумент %s для %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначный аргумент %s для %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Статистика bitset:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Накопленных запусков = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "невозможно прочитать файл stats"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "некорректный размер файла stats\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "невозможно записать файл stats"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "невозможно открыть файл stats для записи"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "ошибка записи"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Неизвестная системная ошибка"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: двусмысленный параметр «%s%s»\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: двусмысленный параметр «%s%s»; возможные варианты:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: нераспознанный параметр «%s%s»\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: для параметра «%s%s» нельзя использовать аргумент\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: для параметра «%s%s» требуется аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неправильный параметр -- «%c»\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: для параметра требуется аргумент -- «%c»\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "»"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "не удалось создать канал"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "подпроцесс %s завершился с ошибкой"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Время выполнения (секунд)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "пользовательское время на ЦП"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "системное время на ЦП"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "настенные часы"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle завершилась неудачно"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "не удалось восстановить fd %d: dup2 завершилась неудачно"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "подпроцесс %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "подпроцесс %s получил сигнал завершения %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Упакован %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Упакован %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Лицензия GPLv3+: GNU GPL версии 3 или новее <%s>.\n"
+#~ "Это свободное ПО: вы можете изменять и распространять его.\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 "Report bugs to: %s\n"
+#~ msgstr "Об ошибках сообщайте по адресу: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Об ошибках в %s сообщайте по адресу: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Домашняя страница %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Справка по работе с программами GNU: <%s>\n"
+
+#~ 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: 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 " [ПАРАМЕТР...]"
+
+#~ 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"
+
+#~ 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 "СЕКУНД"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "остановиться на заданное число СЕКУНД (по умолчанию 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 file %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 "cannot open backup file %s for writing"
+#~ 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 mono"
+#~ msgstr "Не найден компилятор C#, попробуйте установить mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "Не найдена виртуальная машина C#, попробуйте установить mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "несбалансированная ["
+
+#~ msgid "invalid character class"
+#~ msgstr "неправильный класс символов"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "синтаксис класса символов: [[:space:]], а не [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавершённая \\ экранирующая последовательность"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "неправильное содержимое в \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "регулярное выражение слишком большое"
+
+#~ msgid "unbalanced ("
+#~ msgstr "несбалансированная ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "не указан синтаксис"
+
+#~ msgid "unbalanced )"
+#~ msgstr "несбалансированная )"
+
+#~ msgid "regular empty file"
+#~ msgstr "пустой обычный файл"
+
+#~ msgid "regular file"
+#~ msgstr "обычный файл"
+
+#~ msgid "directory"
+#~ msgstr "каталог"
+
+#~ msgid "symbolic link"
+#~ msgstr "символьная ссылка"
+
+#~ msgid "message queue"
+#~ msgstr "очередь сообщений"
+
+#~ msgid "semaphore"
+#~ msgstr "семафор"
+
+#~ msgid "shared memory object"
+#~ msgstr "объект общей памяти"
+
+#~ msgid "typed memory object"
+#~ msgstr "объект типизированной памяти"
+
+#~ msgid "block special file"
+#~ msgstr "блочный специальный файл"
+
+#~ msgid "character special file"
+#~ msgstr "символьный специальный файл"
+
+#~ msgid "contiguous data"
+#~ msgstr "непрерывные данные"
+
+#~ msgid "fifo"
+#~ msgstr "файл-очередь"
+
+#~ msgid "door"
+#~ msgstr "дверь"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "мультиплексный блочный специальный файл"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "мультиплексный символьный специальный файл"
+
+#~ msgid "multiplexed file"
+#~ msgstr "мультиплексный файл"
+
+#~ msgid "named file"
+#~ msgstr "именованный файл"
+
+#~ msgid "network special file"
+#~ msgstr "сетевой специальный файл"
+
+#~ msgid "migrated file with data"
+#~ msgstr "переносной файл с данными"
+
+#~ msgid "migrated file without data"
+#~ msgstr "переносной файл без данных"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "сокет"
+
+#~ msgid "whiteout"
+#~ msgstr "замазка"
+
+#~ msgid "weird file"
+#~ msgstr "странный файл"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Адресное семейство не поддерживается для имени узла"
+
+#~ 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 "Servname не поддерживается для ai_socktype"
+
+#~ 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 "invalid source_version argument to compile_java_class"
+#~ msgstr "неверный аргумент source_version для compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "неверный аргумент target_version для compile_java_class"
+
+#~ 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 или задать $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Не найдена виртуальная машина Java, попробуйте установить gcj или задать "
+#~ "$JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "ошибка вв/вывода подпроцесса %s"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "не удалось выполнить stat для %s"
+
+#~ 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"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "не удалось создать нити"
+
+#~ 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 "Обрыв терминальной линии"
+
+#~ msgid "Interrupt"
+#~ msgstr "Прерывание"
+
+#~ msgid "Quit"
+#~ msgstr "Аварийное прерывание"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Недопустимая инструкция"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Прерывание на контрольной точке"
+
+#~ msgid "Aborted"
+#~ msgstr "Прервано"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Ошибка операции с плавающей точкой"
+
+#~ msgid "Killed"
+#~ msgstr "Уничтожение"
+
+#~ msgid "Bus error"
+#~ msgstr "Ошибка шины"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Нарушение сегментирования"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Обрыв канала"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Сигнал по таймеру"
+
+#~ msgid "Terminated"
+#~ msgstr "Завершение"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Срочная операция ввода-вывода"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Останов (сигнал)"
+
+#~ msgid "Stopped"
+#~ msgstr "Останов"
+
+#~ msgid "Continued"
+#~ msgstr "Возобновление"
+
+#~ msgid "Child exited"
+#~ msgstr "Потомок завершил работу"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Останов (ввод с терминала)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Останов (вывод с терминала)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Возможен ввод-вывод"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Превышен предел по процессорному времени"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Превышен предел размера файла"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Виртуальное время истекло"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Время профилирования истекло"
+
+#~ msgid "Window changed"
+#~ msgstr "Окно изменено"
+
+#~ 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 "неверный spec"
+
+#~ msgid "unable to display error message"
+#~ msgstr "невозможно показать сообщение об ошибке"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "не удалось изменить текстовый/двоичный режим у файлового дескриптора"
+
+#~ msgid "stdin"
+#~ msgstr "stdin"
+
+#~ msgid "stdout"
+#~ msgstr "stdout"
+
+#~ msgid "stderr"
+#~ msgstr "stderr"
+
+#~ msgid "unknown stream"
+#~ msgstr "неизвестный поток"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "не удалось повторно открыть %s в режиме %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "сравнение строк завершилось неудачно"
+
+#~ 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 "standard file descriptors"
+#~ msgstr "стандартные файловые дескрипторы"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "неверный аргумент %s%s в «%s»"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "недопустимый суффикс в аргументе %s%s для «%s»"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "аргумент %s%s слишком велик для «%s»"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Домашняя страница %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: значение параметра ARGP_HELP_FMT должно быть положительным"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: для параметра «--%s» аргумент не разрешён\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: нераспознанный параметр «--%s»\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: у параметра «-W %s» не может быть аргумента\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: для параметра «-W %s» требуется аргумент\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Френсис Пинард (Franc,ois Pinard)"
diff --git a/gnulib-po/rw.gmo b/gnulib-po/rw.gmo
new file mode 100644
index 0000000..fc3508c
--- /dev/null
+++ b/gnulib-po/rw.gmo
Binary files differ
diff --git a/gnulib-po/rw.po b/gnulib-po/rw.po
new file mode 100644
index 0000000..f07929c
--- /dev/null
+++ b/gnulib-po/rw.po
@@ -0,0 +1,641 @@
+# Kinyarwanda translations for mailutils package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the mailutils package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mailutils 0.6\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"Language: rw\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, fuzzy, c-format
+msgid "invalid argument %s for %s"
+msgstr "Sibyo kugirango"
+
+#: lib/argmatch.c:133
+#, fuzzy, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "kugirango"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+#, fuzzy
+msgid "Valid arguments are:"
+msgstr "ingingo"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "Kurema Ihuza"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "Kurema Ihuza"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "Gufungura kugirango"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_WRITE.text
+#: lib/closeout.c:122
+#, fuzzy
+msgid "write error"
+msgstr "Kwandika ikosa"
+
+#: lib/error.c:195
+#, fuzzy
+msgid "Unknown system error"
+msgstr "Sisitemu Ikosa"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s:Ihitamo ni"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s:Ihitamo ni"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s:Ihitamo Kwemerera"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s:Ihitamo"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:Sibyo Ihitamo"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:Ihitamo"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+#, fuzzy
+msgid "memory exhausted"
+msgstr "Ububiko"
+
+# basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+#, fuzzy
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "Kurema Ihuza"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s:Byanze"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s:Byanze"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s:Byanze"
+
+#, fuzzy
+#~ msgid "Written by %s.\n"
+#~ msgstr "ku"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "ku Na"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "ku Na Ibindi"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Kuri"
+
+#, fuzzy
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr ""
+#~ "%.*Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr ""
+#~ "%.*Project- Id- Version: basctl\n"
+#~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+#~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+#~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+#~ "Content- Type: text/ plain; charset= UTF- 8\n"
+#~ "Content- Transfer- Encoding: 8bit\n"
+#~ "X- Generator: KBabel 1. 0\n"
+#~ "."
+
+#, fuzzy
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "in"
+
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Cyangwa Bitari ngombwa ingingo Kuri Amahitamo Cyangwa Bitari ngombwa "
+#~ "kugirango Amahitamo"
+
+#~ msgid "Usage:"
+#~ msgstr "Ikoresha:"
+
+#, fuzzy
+#~ msgid "  or: "
+#~ msgstr "Cyangwa"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Cyangwa kugirango Birenzeho Ibisobanuro"
+
+#, fuzzy
+#~ msgid "Give this help list"
+#~ msgstr "iyi Ifashayobora Urutonde"
+
+#, fuzzy
+#~ msgid "Give a short usage message"
+#~ msgstr "a Ikoresha: Ubutumwa"
+
+#, fuzzy
+#~ msgid "NAME"
+#~ msgstr "Izina"
+
+#, fuzzy
+#~ msgid "Set the program name"
+#~ msgstr "i Porogaramu Izina:"
+
+# offmgr/source\offapp\dialog\optgdlg.src:OFA_TP_MISC.FT_HELPAGENT_TIME_UNIT.text
+#, fuzzy
+#~ msgid "SECS"
+#~ msgstr "amasogonda"
+
+#, fuzzy
+#~ msgid "Hang for SECS seconds (default 3600)"
+#~ msgstr "kugirango amasogonda Mburabuzi"
+
+#, fuzzy
+#~ msgid "Print program version"
+#~ msgstr "Porogaramu Verisiyo"
+
+#, fuzzy
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(Verisiyo"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "ingingo"
+
+#, fuzzy
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(Verisiyo"
+
+# 4952
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "Ikosa ryo mu Isoma"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "Gufungura kugirango"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "Ikosa"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "Gufungura Byanze"
+
+#, fuzzy
+#~ msgid "regular empty file"
+#~ msgstr "Ibisanzwe ubusa IDOSIYE"
+
+#, fuzzy
+#~ msgid "regular file"
+#~ msgstr "Ibisanzwe IDOSIYE"
+
+# svtools/source\dialogs\filedlg2.src:STR_FILEDLG_DIR.text
+#, fuzzy
+#~ msgid "directory"
+#~ msgstr "Ububiko"
+
+#, fuzzy
+#~ msgid "block special file"
+#~ msgstr "Funga Bidasanzwe IDOSIYE"
+
+#, fuzzy
+#~ msgid "character special file"
+#~ msgstr "Inyuguti Bidasanzwe IDOSIYE"
+
+#, fuzzy
+#~ msgid "symbolic link"
+#~ msgstr "Ihuza"
+
+#, fuzzy
+#~ msgid "message queue"
+#~ msgstr "Ubutumwa Umurongo"
+
+#, fuzzy
+#~ msgid "shared memory object"
+#~ msgstr "Ububiko Igikoresho"
+
+#, fuzzy
+#~ msgid "typed memory object"
+#~ msgstr "Ububiko Igikoresho"
+
+#, fuzzy
+#~ msgid "weird file"
+#~ msgstr "IDOSIYE"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Idosiye OYA"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "Idosiye OYA"
+
+#, fuzzy
+#~ msgid "Memory allocation failure"
+#~ msgstr "Byanze"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "Idosiye OYA"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_WRITE.text
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "Kwandika ikosa"
+
+#, fuzzy
+#~ msgid "Request not canceled"
+#~ msgstr "Ikintu OYA Byabonetse"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Sisitemu Ikosa"
+
+#, fuzzy
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s:Ihitamo Kwemerera"
+
+#, fuzzy
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s:Ihitamo"
+
+#, fuzzy
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:Ihitamo"
+
+#, fuzzy
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s:Ihitamo ni"
+
+#, fuzzy
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:Ihitamo Kwemerera"
+
+#, fuzzy
+#~ msgid "block size"
+#~ msgstr "Funga Ingano"
+
+#, fuzzy
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%sni OYA a bushyinguro"
+
+#, fuzzy
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "Guhindura>> Na Cyangwa Itsinda Bya"
+
+#, fuzzy
+#~ msgid "cannot create directory %s"
+#~ msgstr "Kurema bushyinguro"
+
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "Kuri bushyinguro"
+
+#, fuzzy
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "Guhindura>> Uruhushya Bya"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "Kuri Icyabitswe KIGEZWEHO bushyinguro"
+
+#, fuzzy
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "Byanze Kuri Garuka Kuri bushyinguro"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "%s:Byanze Kuri Gufungura kugirango"
+
+#~ msgid "Success"
+#~ msgstr "Ibyatunganye"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s:Sibyo Ibisanzwe imvugo"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "Sibyo Inyuguti ishuri"
+
+#, fuzzy
+#~ msgid "Invalid back reference"
+#~ msgstr "Umubare utari wo"
+
+#, fuzzy
+#~ msgid "Invalid range end"
+#~ msgstr "Ipaji Urutonde"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "Ububiko"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s:Sibyo Ibisanzwe imvugo"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Ikosa in Ibisanzwe imvugo Gushaka"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s:Sibyo Ibisanzwe imvugo"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "Ikosa in Ibisanzwe imvugo Gushaka"
+
+#, fuzzy
+#~ msgid "iconv function not usable"
+#~ msgstr "Umumaro OYA"
+
+#, fuzzy
+#~ msgid "iconv function not available"
+#~ msgstr "Umumaro OYA Bihari"
+
+#, fuzzy
+#~ msgid "character out of range"
+#~ msgstr "Inyuguti Inyuma Bya Urutonde"
+
+#, fuzzy
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "GUHINDURA U Kuri Inyuguti Gushyiraho"
+
+#, fuzzy
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "GUHINDURA U Kuri Inyuguti Gushyiraho"
+
+#, fuzzy
+#~ msgid "invalid user"
+#~ msgstr "Sibyo Ukoresha:"
+
+#, fuzzy
+#~ msgid "invalid group"
+#~ msgstr "Sibyo Itsinda"
+
+#, fuzzy
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "Kubona i Ifashayinjira Itsinda Bya a Bikurikije umubare"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Porogaramu ni Kigenga Na Cyangwa i Bya i Nka Verisiyo 2. Cyangwa ku "
+#~ "Ihitamo Verisiyo"
+
+#, fuzzy
+#~ msgid "string comparison failed"
+#~ msgstr "Ikurikiranyanyuguti Byanze"
+
+#, fuzzy
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Kuri Akazi i"
+
+#, fuzzy
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Ikurikiranyanyuguti Na"
diff --git a/gnulib-po/sk.gmo b/gnulib-po/sk.gmo
new file mode 100644
index 0000000..90b7deb
--- /dev/null
+++ b/gnulib-po/sk.gmo
Binary files differ
diff --git a/gnulib-po/sk.po b/gnulib-po/sk.po
new file mode 100644
index 0000000..75d655f
--- /dev/null
+++ b/gnulib-po/sk.po
@@ -0,0 +1,525 @@
+# Slovak translations for GNU textutils
+# Copyright (C) 1996 Free Software Foundation, Inc.
+# Miroslav Vasko <vasko@debian.cz>, 1999
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: textutils 2.0.14\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2001-06-08 22:10 +02:00\n"
+"Last-Translator: Stanislav Meduna <stano@trillian.eunet.sk>\n"
+"Language-Team: Slovak <sk-i18n@rak.isternet.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:132
+#, fuzzy, c-format
+msgid "invalid argument %s for %s"
+msgstr "chybný argument %s pre `%s'"
+
+#: lib/argmatch.c:133
+#, fuzzy, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "nejednoznaèný argument %s pre `%s'"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Platné argumenty sú:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "nie je mo¾né vytvori» adresár %s"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "nie je mo¾né vytvori» adresár %s"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "nie je mo¾né otvori» %s pre èítanie"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "chyba pri zápise"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Neznáma systémová chyba"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: voµba `%s' nie je jednoznaèná\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: voµba `%s' nie je jednoznaèná\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: neznámy prepínaè `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: prepínaè `%c%s' nepovoµuje argument\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: prepínaè `%s' vy¾aduje argument\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: chybný prepínaè -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: prepínaè vy¾aduje argument -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "vyèerpaná pamä»"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "nie je mo¾né vytvori» adresár %s"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: chybný vzor"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: chybný vzor"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: chybný vzor"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr "Napísal %s.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  Chyby v programe oznamujte na adrese <bug-textutils@gnu.org> (iba\n"
+#~ "anglicky), pripomienky k prekladu zasielajte na adresu <sk@li.org> "
+#~ "(slovensky)."
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  Chyby v programe oznamujte na adrese <bug-textutils@gnu.org> (iba\n"
+#~ "anglicky), pripomienky k prekladu zasielajte na adresu <sk@li.org> "
+#~ "(slovensky)."
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Pou¾itie: %s [PREPÍNAÈ] [SÚBOR]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Viac informácií získate príkazom `%s --help'.\n"
+
+#, fuzzy
+#~ msgid "Print program version"
+#~ msgstr "chyba pri èítaní"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "príli¹ veµa argumentov"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "chyba pri èítaní"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "nie je mo¾né otvori» %s pre èítanie"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "chyba pri èítaní %s"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "chyba pri zápise %s"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "chyba pri èítaní %s"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "zlyhalo otvorenie"
+
+#, fuzzy
+#~ msgid "regular empty file"
+#~ msgstr "zlyhalo èítanie"
+
+#, fuzzy
+#~ msgid "regular file"
+#~ msgstr "zlyhalo èítanie"
+
+#, fuzzy
+#~ msgid "directory"
+#~ msgstr "Adresár: "
+
+#, fuzzy
+#~ msgid "block special file"
+#~ msgstr "veµkos» bloku"
+
+#, fuzzy
+#~ msgid "character special file"
+#~ msgstr "pozícia znaku je nula"
+
+#, fuzzy
+#~ msgid "symbolic link"
+#~ msgstr "ioctl na `%s' nie je mo¾né vykona»"
+
+#, fuzzy
+#~ msgid "weird file"
+#~ msgstr "zlyhalo èítanie"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "tento systém nepodporuje rúry"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "tento systém nepodporuje rúry"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "tento systém nepodporuje rúry"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "chyba pri zápise"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Neznáma systémová chyba"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: prepínaè `--%s' nepovoµuje argument\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: neznámy prepínaè `--%s'\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: nepovolený prepínaè -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: prepínaè `-W %s' nie je jednoznaèný\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: prepínaè `-W %s' nepovoµuje argument\n"
+
+#~ msgid "block size"
+#~ msgstr "veµkos» bloku"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s existuje, ale nie je adresárom"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "nie je mo¾né zmeni» pou¾ívateµa a/alebo skupinu %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "nie je mo¾né vytvori» adresár %s"
+
+#, fuzzy
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "nie je mo¾né vojs» do adresára, %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "nie je mo¾né zmeni» práva %s"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "nie je mo¾né vytvori» adresár %s"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "nie je mo¾né zmeni» práva %s"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: chybný regulárny výraz: %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "chybná trieda znaku `%s'"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "vyèerpaná pamä»"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: chybný regulárny výraz: %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "chyba pri vyhµadávaní pomocou regulárneho výrazu"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: chybný regulárny výraz: %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "chyba pri vyhµadávaní pomocou regulárneho výrazu"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yYaAáÁ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#, fuzzy
+#~ msgid "iconv function not usable"
+#~ msgstr "nie je mo¾né vypísa» U+%04X: funkcia iconv nie je pou¾iteµná"
+
+#, fuzzy
+#~ msgid "iconv function not available"
+#~ msgstr "nie je mo¾né vypísa» U+%04X: funkcia iconv nie je dostupná"
+
+#, fuzzy
+#~ msgid "character out of range"
+#~ msgstr "U+%04X: znak je mimo rozsah"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "nie je mo¾né konvertova» U+%04X do lokálnej znakovej sady"
+
+#, fuzzy
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "nie je mo¾né konvertova» U+%04X do lokálnej znakovej sady"
+
+#~ msgid "invalid user"
+#~ msgstr "neplatný pou¾ívateµ"
+
+#~ msgid "invalid group"
+#~ msgstr "neplatná skupina"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "nie je mo¾né urèi» skupinu èíselného UID"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "  Tento program je voµné programové vybavenie; mô¾ete ho ¹íri» a "
+#~ "modifikova»\n"
+#~ "podµa podmienok V¹eobecnej verejnej licencie GNU, vydávanej Free "
+#~ "Software\n"
+#~ "Foundation; a to buï verzie 2 tejto licencie alebo (podµa vá¹ho "
+#~ "uvá¾enia),\n"
+#~ "ktorejkoµvek neskor¹ej verzie.\n"
+#~ "\n"
+#~ "  Tento program je roz¹irovaný v nádeji, ¾e bude u¾itoèný, av¹ak BEZ "
+#~ "AKEJKO¥VEK\n"
+#~ "ZÁRUKY; neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI "
+#~ "PRE\n"
+#~ "NEJAKÝ KONKRÉTNY ÚÈEL. Ïaµ¹ie podrobnosti nájdete vo V¹eobecnej verejnej\n"
+#~ "licencii GNU.\n"
+#~ "\n"
+#~ "  Kópia V¹eobecnej verejnej licencie GNU mala by» dodaná spolu s týmto\n"
+#~ "programom; pokiaµ sa tak nestalo, napí¹te do Free Software Foundation, "
+#~ "Inc.,\n"
+#~ "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
+
+#, fuzzy
+#~ msgid "string comparison failed"
+#~ msgstr "zlyhal stat"
+
+#, fuzzy
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "nie je mo¾né vytvori» odkaz %s"
diff --git a/gnulib-po/sl.gmo b/gnulib-po/sl.gmo
new file mode 100644
index 0000000..2f7e9f3
--- /dev/null
+++ b/gnulib-po/sl.gmo
Binary files differ
diff --git a/gnulib-po/sl.po b/gnulib-po/sl.po
new file mode 100644
index 0000000..7b3a152
--- /dev/null
+++ b/gnulib-po/sl.po
@@ -0,0 +1,915 @@
+# -*- mode: po; coding: utf-8; -*- Slovenian message catalog for GNUlib.
+# Copyright (C) 2005, 2007, 2009, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Primož Peterlin <primozz.peterlin@gmail.com>, 2005, 2007, 2009, 2012.
+# $Id: gnulib-3.0.0.6062.a6b16.sl.po,v 1.5 2012/05/20 11:08:36 peterlin Exp $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2012-05-20 13:08+0200\n"
+"Last-Translator: Primož Peterlin <primozz.peterlin@gmail.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: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "neveljavni argument %s za %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "dvoumni argument %s za %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Veljavni argumenti so:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "ni mogoče ustvariti cevovoda"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "ni mogoče ustvariti cevovoda"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "varnostne kopije \"%s\" ni mogoče odpreti za pisanje"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "napaka pri pisanju"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Neznana sistemska napaka"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: izbira »-W %s« je dvoumna\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: izbira »%s« je dvoumna; možnosti:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: neprepoznana izbira »%c%s«\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: izbira »%c%s« ne dovoljuje argumenta\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: izbira »--%s« zahteva argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neveljavna izbira -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: izbira zahteva argument -- '%c'\n"
+
+# ! INEXACT
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "zmanjkalo pomnilnika"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "»"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "«"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "ni mogoče ustvariti cevovoda"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "podproces %s ni uspel"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Budilka"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "klic _open_osfhandle ni uspel"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "ni mogoče obnoviti fd %d: klic dup2 ni uspel"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "podproces %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "podproces %s je prejel terminalni signal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Priprava paketa: %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Priprava paketa: %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "GPLv3+: GNU GPL, 3. izdaja ali poznejša <http://www.gnu.org/licenses/gpl."
+#~ "html>\n"
+#~ "To je prosto programje; lahko ga redistribuirate in/ali spreminjate.\n"
+#~ "Za izdelek ni NOBENEGA JAMSTVA, do z zakonom dovoljene meje.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Avtor(ica): %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Avtorja: %s in %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Avtorji: %s, %s in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s\n"
+#~ "in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s, %s in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s, %s, %s in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s in %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Avtorji: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s in drugi.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Poročila o napakah: %s\n"
+#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge."
+#~ "net>.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "Napake v programu %s sporočite na: %s\n"
+#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge."
+#~ "net>.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Domača stran %s: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Splošna pomoč za rabo programja GNU: <http://www.gnu.org/gethelp/>.\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: vrednost %s je manjša ali enaka %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT parameter zahteva vrednost"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: ARGP_HELP_FMT parameter mora biti pozitiven"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Neznan parameter ARGP_HELP_FMT"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Smetje v ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Argumenti, navedeni kot obvezni ali neobvezni pri dolgi obliki izbire, so "
+#~ "obvezni ali neobvezni tudi pri vseh odgovarjajočih kratkih oblikah."
+
+#~ msgid "Usage:"
+#~ msgstr "Uporaba:"
+
+#~ msgid "  or: "
+#~ msgstr " ali: "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [IZBIRA...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Poskusite »%s --help« ali »%s --usage« za izčrpnejša navodila.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Poročila o napakah: %s\n"
+
+#~ msgid "give this help list"
+#~ msgstr "poda ta seznam pomoči"
+
+#~ msgid "give a short usage message"
+#~ msgstr "poda kratka navodila"
+
+#~ msgid "NAME"
+#~ msgstr "IME"
+
+#~ msgid "set the program name"
+#~ msgstr "nastavi ime programa"
+
+#~ msgid "SECS"
+#~ msgstr "SEK"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "zastane za SEK sekund (privzeto 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "izpiše različico programa"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMSKA NAPAKA) Različice ni moč ugotoviti?!"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Preveč argumentov\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMSKA NAPAKA) Izbire bi morali prepoznati?!"
+
+#~ msgid "program error"
+#~ msgstr "napaka v programu"
+
+#~ msgid "stack overflow"
+#~ msgstr "prekoračitev sklada"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "začasnega imenika ni moč najti, poskusite nastaviti $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "začasnega imenika z uporabo šablone \"%s\" ni mogoče ustvariti"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "začasne datoteke v %s ni mogoče odstraniti"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "začasnega imenika %s ni mogoče odstraniti"
+
+#~ msgid "error closing file"
+#~ msgstr "napaka pri zapiranju datoteke"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "ohranjena dovoljenja za %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "napaka pri odpiranju datoteke \"%s\" za branje"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "napaka pri branju \"%s\""
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "napaka pri pisanju na \"%s\""
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "napaka po branju \"%s\""
+
+#~ msgid "fdopen() failed"
+#~ msgstr "klic fdopen() ni uspel"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "prevajalnika za C# ni najti, namestite pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "virtualnega stroja C# ni najti, namestite pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "navadna prazna datoteka"
+
+#~ msgid "regular file"
+#~ msgstr "navadna datoteka"
+
+#~ msgid "directory"
+#~ msgstr "imenik"
+
+#~ msgid "block special file"
+#~ msgstr "bločna enota"
+
+#~ msgid "character special file"
+#~ msgstr "znakovna enota"
+
+#~ msgid "fifo"
+#~ msgstr "FIFO"
+
+# ! INEXACT
+#~ msgid "symbolic link"
+#~ msgstr "simbolna povezava"
+
+#~ msgid "socket"
+#~ msgstr "vtičnica"
+
+#~ msgid "message queue"
+#~ msgstr "vrsta sporočil"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "deljen pomnilniški predmet"
+
+#~ msgid "typed memory object"
+#~ msgstr "tipiziran pomnilniški predmet"
+
+#~ msgid "weird file"
+#~ msgstr "čudna datoteka"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Družina naslovov za ime gostitelja ni podprta"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Razreševanje imena začasno ni uspelo"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Slaba vrednost ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Nepopravljiv neuspeh pri razreševanju imena"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family ni podprt"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Dodelitev pomnilnika ni uspela"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Z imenom gostitelja ni povezan noben naslov"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Ime ali storitev ni poznana"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname ni podprt za ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype ni podprt"
+
+#~ msgid "System error"
+#~ msgstr "Sistemska napaka"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Medpomnilnik za argumente premajhen"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Obdelava zahtevka v teku"
+
+#~ msgid "Request canceled"
+#~ msgstr "Zahtevek preklican"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Zahtevek ni preklican"
+
+#~ msgid "All requests done"
+#~ msgstr "Vsi zahtevki obdelani"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Prekinjeno s signalom"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parametrični niz nepravilno kodiran"
+
+#~ msgid "Unknown error"
+#~ msgstr "Neznana napaka"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: izbira »--%s« ne dovoljuje argumenta\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: neprepoznana izbira »--%s«\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: izbira »-W %s« ne dovoljuje argumenta\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: izbira »-W %s« zahteva argument\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "neveljaven argument source_version za compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "neveljaven argument target_version za compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "ni mogoče ustvariti \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "napaka pri pisanju na datoteko \"%s\""
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr "prevajalnika za Javo ni najti, nastavite $JAVAC ali namestite gcj"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "virtualnega stroja za Javo ni najti, nastavite $JAVA ali namestite gij"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "V/I napaka podprocesa %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "dovoljenj %s ni mogoče spremeniti"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "imenika %s ni mogoče ustvariti"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "ni mogoče zabeležiti trenutnega delovnega imenika"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "vrnitev v začetni delovni imenik ni uspela"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Datoteke /dev/null ni uspelo odpreti za branje"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "niti za pisanje ni bilo mogoče ustvariti"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "neblokiranega V/I za podproces %s ni mogoče nastaviti"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "komunikacija s podprocesom %s ni uspela"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "pisanje na podproces %s ni uspelo"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "branje s podprocesa %s ni uspelo"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "podproces %s se je zaključil z izhodno kodo %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "ustvarjanje niti ni uspelo"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s podproces se je zaključil z izhodno kodo %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "François Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Uspešno"
+
+#~ msgid "No match"
+#~ msgstr "Brez zadetkov"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Neveljaven regularni izraz"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Neveljaven razvrščevalni znak"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Neveljavno ime razreda znakov"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Zaključna obratna poševnica"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Neveljaven povratni sklic"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Uklepaj [ ali [^ brez para"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Uklepaj ( ali \\( brez para"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Uklepaj \\{ brez para"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Neveljavna vsebina \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Neveljaven konec razpona"
+
+# ! INEXACT
+#~ msgid "Memory exhausted"
+#~ msgstr "Pomnilnik izčrpan"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Neveljaven predhodni regularni izraz"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Predčasen zaključek regularnega izraza"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Regularni izraz je preobsežen"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Zaklepaj ) ali \\) brez para"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Prejšnjega regularnega izraza ni"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[jJdD]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "nastavljena dovoljenja za %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Odklop"
+
+#~ msgid "Interrupt"
+#~ msgstr "Prekinitev"
+
+#~ msgid "Quit"
+#~ msgstr "Končanje"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Nedovoljen ukaz"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Past"
+
+#~ msgid "Aborted"
+#~ msgstr "Prekinjen"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Prekoračitev plavajoče vejice"
+
+#~ msgid "Killed"
+#~ msgstr "Pobit"
+
+#~ msgid "Bus error"
+#~ msgstr "Napaka vodila"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Napaka segmentacije"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Prekinjen cevovod"
+
+#~ msgid "Terminated"
+#~ msgstr "Zaključen"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Nujno V/I stanje"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Ustavljen (signal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Ustavljen"
+
+#~ msgid "Continued"
+#~ msgstr "Nadaljevan"
+
+#~ msgid "Child exited"
+#~ msgstr "Izhod nasledniškega procesa"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Ustavljen (vhod TTY)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Ustavljen (izhod TTY)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Mogoč V/I"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Presežena omejitev procesorskega časa"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Presežena omejitev dolžine datoteke"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Iztek virtualne štoparice"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Iztek profilirne štoparice"
+
+#~ msgid "Window changed"
+#~ msgstr "Zamenjano okno"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Uporabniški signal 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Uporabniški signal 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Past EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Slab sistemski klic"
+
+#~ msgid "Stack fault"
+#~ msgstr "Napaka sklada"
+
+#~ msgid "Information request"
+#~ msgstr "Informacijski zahtevek"
+
+#~ msgid "Power failure"
+#~ msgstr "Izpad toka"
+
+#~ msgid "Resource lost"
+#~ msgstr "Vir izgubljen"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "napaka pri pisanju na zaprt cevovod ali vtič"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Realnočasovni signal %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Neznani signal %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "funkcija iconv ne deluje"
+
+#~ msgid "iconv function not available"
+#~ msgstr "funkcija iconv ni na voljo"
+
+#~ msgid "character out of range"
+#~ msgstr "koda znaka izven obsega"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "znaka s kodo U+%04X ni mogoče pretvoriti v lokalni nabor znakov"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "znaka s kodo U+%04X ni moč pretvoriti v lokalni nabor znakov: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "neveljavno uporabniško ime"
+
+#~ msgid "invalid group"
+#~ msgstr "neveljavno ime skupine"
+
+#~ msgid "invalid spec"
+#~ msgstr "neveljavna specifikacija"
+
+#~ msgid "unable to display error message"
+#~ msgstr "sporočila o napaki ni mogoče prikazati"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Spletna stran %s: <http://www.gnu.org/software/%s/>.\n"
+
+#~ msgid "stdin"
+#~ msgstr "standardni vhod"
+
+#~ msgid "stdout"
+#~ msgstr "standardni izhod"
+
+#~ msgid "stderr"
+#~ msgstr "standardna izhod za napake"
+
+#~ msgid "unknown stream"
+#~ msgstr "neznani tok"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "ponovno odpiranje %s v načinu %s ni uspelo"
+
+#~ msgid "string comparison failed"
+#~ msgstr "primerjanje nizov ni uspelo"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Nastavite LC_ALL='C', da bi odpravili težavo."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Primerjana niza sta bila %s in %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "oblikovanega izpisa ni mogoče izvesti"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "neveljavni %s%s argument  »%s«"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "neveljavna pripona pri %s%s argumentu »%s«"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s: argument »%s« je prevelik"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: nedovoljena izbira -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Napake v programu sporočite na %s.\n"
+#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge."
+#~ "net>.\n"
+
+#~ msgid "block size"
+#~ msgstr "velikost bloka"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s obstaja, vendar ni imenik"
+
+# ! INEXACT
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "lastnika in/ali skupine %s ni mogoče spremeniti"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "dostop do imenika %s ni mogoč"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "imena skupine, ki pripada številčnemu UID, ni mogoče ugotoviti"
+
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ta program je prosta programska oprema; lahko ga redistribuirate in/ali\n"
+#~ "spreminjate po pogojih, določenih v »GNU General Public License«, \n"
+#~ "<http://www.gnu.org/licenses/gpl.html>. Za izdelek ni NOBENEGA JAMSTVA, "
+#~ "do\n"
+#~ "z zakonom dovoljene meje.\n"
diff --git a/gnulib-po/sr.gmo b/gnulib-po/sr.gmo
new file mode 100644
index 0000000..55709cc
--- /dev/null
+++ b/gnulib-po/sr.gmo
Binary files differ
diff --git a/gnulib-po/sr.po b/gnulib-po/sr.po
new file mode 100644
index 0000000..3702443
--- /dev/null
+++ b/gnulib-po/sr.po
@@ -0,0 +1,866 @@
+# Serbian translation of gnulib.
+# Copyright (C) 2013 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-11-17 16:47+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неисправан аргумент „%s“ за „%s“"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "нејасан аргумент „%s“ за „%s“"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "не могу да направим спојку"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "не могу да направим спојку"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "не могу да отворим датотеку резерве „%s“ за упис"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "грешка записивања"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Непозната грешка система"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: опција „-W %s“ је нејасна\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: опција „%s“ је нејасна; могућности:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: непозната опција „%c%s“\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: опција „%c%s“ не дозвољава аргумент\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: опција „--%s“ захтева аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неисправна опција -- „%c“\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: опција захтева аргумент -- „%c“\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "“"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "не могу да направим спојку"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s потпроцес није успео"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Будилник"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "„_open_osfhandle“ није успело"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "не могу да повратим фд %d: „dup2“ није успело"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s потпроцес"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s потпроцес је добио кобни сигнал %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Запаковао је %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Запаковао је %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или касније <http://gnu.org/licenses/gpl."
+#~ "html>.\n"
+#~ "Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n"
+#~ "Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\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"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Грешке пријавите на: %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Грешке програма „%s“ пријавите на: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s матична страница: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Општа помоћ користећи ГНУ софтвер: <http://www.gnu.org/gethelp/>\n"
+
+#~ 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 " [ОПЦИЈА...]"
+
+#~ 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"
+
+#~ 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 "СЕКУНДЕ"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "стаје за СЕКУНДЕ секунде (основно је 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 file %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 "нисам нашао Ц# преводиоца, покушајте да инсталирате пнет"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "нисам нашао Ц# виртуелну машину, покушајте да инсталирате пнет"
+
+#~ 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 "пупи"
+
+#~ 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 "Породица адреса за назив домаћина није подржана"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Привремени неуспех одређивања назива"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Неисправна вредност за аи_опције"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Непоправљива грешка при одређивању назива"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "аи_породица није подржана"
+
+#~ 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 "Назив сервера није подржан за аи_врступрикључка"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "аи_врстаприкључка није подржана"
+
+#~ 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' doesn't allow an argument\n"
+#~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: непозната опција „--%s“\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: опција „-W %s“ захтева аргумент\n"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "неисправан аргумент издања_извора за преведи_јава_разред"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "неисправан аргумент издања_мете за преведи_јава_разред"
+
+#~ 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 ""
+#~ "Нисам нашао Јава преводиоца, покушајте да инсталирате гцј или поставите "
+#~ "„$JAVAC“"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Нисам нашао виртуелну машину Јаве, покушајте да инсталирате гиј или да "
+#~ "поставите „$JAVA“"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "У/И грешка %s потпроцеса"
+
+#~ 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"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "стварање нити није успело"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s потпроцес је окончан са излазном шифром %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Франсуа Пинард"
+
+#~ 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 "Обустави"
+
+#~ msgid "Interrupt"
+#~ msgstr "Прекини"
+
+#~ msgid "Quit"
+#~ msgstr "Изађи"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Неисправна инструкција"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Замка праћења/тачке прекида"
+
+#~ msgid "Aborted"
+#~ msgstr "Прекинуто"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Изузетак са покретним зарезом"
+
+#~ msgid "Killed"
+#~ msgstr "Убијено"
+
+#~ msgid "Bus error"
+#~ msgstr "Грешка сабирнице"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Грешка сегментације"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Прекинута спојка"
+
+#~ msgid "Terminated"
+#~ msgstr "Окончан"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Хитни У/И услов"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Заустављен (сигнал)"
+
+#~ msgid "Stopped"
+#~ msgstr "Заустављен"
+
+#~ msgid "Continued"
+#~ msgstr "Настављен"
+
+#~ msgid "Child exited"
+#~ msgstr "Потпроцес је напуштен"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Заустављен (улаз конзоле)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Заустављен (излаз конзоле)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O је могућ"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Прекорачено је временско ограничење процесора"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Прекорачено је ограничење величине датотеке"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Виртуелни одбројавач је истекао"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Одбројавач профилисања је истекао"
+
+#~ msgid "Window changed"
+#~ msgstr "Прозор је измењен"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Кориснички одређени сигнал 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Кориснички одређени сигнал 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "ЕМТ замка"
+
+#~ 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 "иконв функција није употребљива"
+
+#~ msgid "iconv function not available"
+#~ msgstr "иконв функција није доступна"
+
+#~ 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 "%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 "string comparison failed"
+#~ msgstr "није успело поређење ниске"
+
+#~ 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 "неисправан %s%s аргумент „%s“"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "неисправан суфикс у %s%s аргумент „%s“"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s аргумент „%s“ је превелик"
diff --git a/gnulib-po/stamp-po b/gnulib-po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/gnulib-po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/gnulib-po/sv.gmo b/gnulib-po/sv.gmo
new file mode 100644
index 0000000..f95bcd2
--- /dev/null
+++ b/gnulib-po/sv.gmo
Binary files differ
diff --git a/gnulib-po/sv.po b/gnulib-po/sv.po
new file mode 100644
index 0000000..29c9c71
--- /dev/null
+++ b/gnulib-po/sv.po
@@ -0,0 +1,906 @@
+# Swedish messages for gnulib.
+# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Peter Antman <peter.antman@abc.se>, 1997.
+# Thomas Olsson <cid95tho@lustudat.student.lu.se>, 1997.
+# Daniel Resare <daniel@resare.com>, 1999, 2000.
+# Göran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2019.
+#
+# $Revision: 1.14 $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-21 10:41+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "felaktigt argument %s till %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "tvetydigt argument %s till %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 bitset-allokeringar, %u friade (%.2f%%).\n"
+
+#: lib/bitset/stats.c:180
+#, c-format
+msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+msgstr "%u bitset-mängder, %u cachade (%.2f%%)\n"
+
+#: lib/bitset/stats.c:183
+#, c-format
+msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+msgstr "%u bitset-återställningar, %u cachade (%.2f%%)\n"
+
+#: lib/bitset/stats.c:186
+#, c-format
+msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+msgstr "%u bitset-tester, %u cachade (%.2f%%)\n"
+
+#: lib/bitset/stats.c:190
+#, c-format
+msgid "%u bitset_lists\n"
+msgstr "%u bitset-listor\n"
+
+#: lib/bitset/stats.c:192
+msgid "count log histogram\n"
+msgstr "antalsloggshistogram\n"
+
+#: lib/bitset/stats.c:195
+msgid "size log histogram\n"
+msgstr "storleksloggshistogram\n"
+
+#: lib/bitset/stats.c:198
+msgid "density histogram\n"
+msgstr "densitetshistogram\n"
+
+#: lib/bitset/stats.c:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset-statistik:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Ackumulerade körningar = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "kan inte läsa statistikfilen"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "felaktig storlek på statistikfil\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "kan inte skriva statistikfilen"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "kan inte öppna statistikfilen för skrivning"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "skrivfel"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Okänt systemfel"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: flaggan ”%s%s” är tvetydig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: flaggan ”%s%s” är tvetydig: möjligheter:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: okänd flagga ”%s%s”\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: flaggan ”%s%s” tar inget argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: flaggan ”%s%s” kräver ett argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ogiltig flagga -- \"%c\"\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaggan kräver ett argument -- \"%c\"\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "minnet slut"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "”"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "kan inte skapa rör"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s-underprocess misslyckades"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Körtider (sekunder)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU användare"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU system"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "väggklocka"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle misslyckades"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "kan inte återställa fb %d: dup2 misslyckades"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s-underprocess"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s-underprocess fick ödesdiger signal %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Paketerat av %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Paketerat av %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Licens GPLv3+: GNU GPL version 3 eller senare <%s>.\n"
+#~ "Detta är fri programvara: du får lov att ändra och vidaredistribuera "
+#~ "den.\n"
+#~ "Det finns INGEN GARANTI, så långt lagen tillåter.\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Skrivet av %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Skrivet av %s och %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Skrivet av %s, %s och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s\n"
+#~ "och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s, %s och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s, %s, %s och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s, %s, %s, %s\n"
+#~ "och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s och %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Skrivet av %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s med flera.\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "Rapportera fel till: %s\n"
+#~ "Skicka synpunkter på översättningen till: tp-sv@listor.tp-sv.se\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Rapportera %s-fel till: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s hemsida: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "Allmän hjälp med att använda GNU-program: <%s>\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: värdet på %s är mindre än eller lika med %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: ARGP_HELP_FMT parametern kräver ett värde"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Okänd ARGP_HELP_FMT-parameter"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Skräp i ARGP_HELP_FMT: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Obligatoriska eller valfria argument till långa flaggor är obligatoriska "
+#~ "eller valfria även för motsvarande korta flaggor."
+
+#~ msgid "Usage:"
+#~ msgstr "Användning:"
+
+#~ msgid "  or: "
+#~ msgstr "   eller:  "
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [FLAGGA...]"
+
+#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
+#~ msgstr "Försök med ”%s --help” eller ”%s --usage” för mer information.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "Rapportera fel till %s.\n"
+#~ "Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "ge denna hjälplista"
+
+#~ msgid "give a short usage message"
+#~ msgstr "ge ett kort användningsmeddelande"
+
+#~ msgid "NAME"
+#~ msgstr "NAMN"
+
+#~ msgid "set the program name"
+#~ msgstr "ange programnamnet"
+
+#~ msgid "SECS"
+#~ msgstr "S"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "häng i S sekunder (3600 som standard)"
+
+#~ msgid "print program version"
+#~ msgstr "skriv ut programversion"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(PROGRAMFEL) Ingen version känd!?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: För många argument\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(PROGRAMFEL) Flaggan borde ha känts igen!?"
+
+#~ msgid "program error"
+#~ msgstr "programfel"
+
+#~ msgid "stack overflow"
+#~ msgstr "stackspill"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr "kan inte hitta en temporärkatalog, försök sätta $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "kan inte skapa en temporärkatalog med användning av mallen ”%s”"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "kan inte ta bort temporärfil %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "kan inte ta bort temporärkatalog %s"
+
+#~ msgid "error closing file"
+#~ msgstr "fel när fil stängdes"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "bevarar rättigheter på %s"
+
+#~ msgid "error while opening %s for reading"
+#~ msgstr "fel när %s öppnades för läsning"
+
+#~ msgid "cannot open backup file %s for writing"
+#~ msgstr "det går inte att öppna säkerthetskopiefil %s för skrivning"
+
+#~ msgid "error reading %s"
+#~ msgstr "fel vid läsning av %s"
+
+#~ msgid "error writing %s"
+#~ msgstr "fel vid skrivning av %s"
+
+#~ msgid "error after reading %s"
+#~ msgstr "fel efter läsning av %s"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() misslyckades"
+
+#~ msgid "C# compiler not found, try installing mono"
+#~ msgstr "C#-kompilator hittades inte, försök installera mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "virtuell C#-maskinen hittades inte, försök installera mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "obalanserad ["
+
+#~ msgid "invalid character class"
+#~ msgstr "ogiltig teckenklass"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "teckenklassyntaxen är [[:space:]], inte [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "oavslutad \\-sekvens"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "ogiltigt innehåll i \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "för stort reguljärt uttryck"
+
+#~ msgid "unbalanced ("
+#~ msgstr "obalanserad ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "ingen syntax angiven"
+
+#~ msgid "unbalanced )"
+#~ msgstr "obalanserad )"
+
+#~ msgid "regular empty file"
+#~ msgstr "tom normal fil"
+
+#~ msgid "regular file"
+#~ msgstr "normal fil"
+
+#~ msgid "directory"
+#~ msgstr "katalog"
+
+#~ msgid "symbolic link"
+#~ msgstr "symbolisk länk"
+
+#~ msgid "message queue"
+#~ msgstr "meddelandekö"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#~ msgid "shared memory object"
+#~ msgstr "objekt av delat minne"
+
+#~ msgid "typed memory object"
+#~ msgstr "objekt av typat minne"
+
+#~ msgid "block special file"
+#~ msgstr "blockspecialfil"
+
+#~ msgid "character special file"
+#~ msgstr "teckenspecialfil"
+
+#~ msgid "contiguous data"
+#~ msgstr "sammanhängande data"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "dörr"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "multiplexad blockspecialfil"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "multiplexad teckenspecialfil"
+
+#~ msgid "multiplexed file"
+#~ msgstr "multiplexad fil"
+
+#~ msgid "named file"
+#~ msgstr "namngiven fil"
+
+#~ msgid "network special file"
+#~ msgstr "nätverksspecialfil"
+
+#~ msgid "migrated file with data"
+#~ msgstr "migrerad fil med data"
+
+#~ msgid "migrated file without data"
+#~ msgstr "migrerad fil utan data"
+
+#~ msgid "port"
+#~ msgstr "port"
+
+#~ msgid "socket"
+#~ msgstr "uttag (socket)"
+
+#~ msgid "whiteout"
+#~ msgstr "övertäckningsfil"
+
+#~ msgid "weird file"
+#~ msgstr "konstig fil"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Adressfamiljen för värdnamnet stöds inte"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Tillfälligt fel i namnuppslagning"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Felaktigt värde för ai_flags"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Oreparabelt fel i namnuppslagning"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "ai_family stöds inte"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Minnesallokeringsfel"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Ingen adress associerad med värdnamnet"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Namn eller tjänst inte känd"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Servname stöds inte för ai_socktype"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "ai_socktype stöds inte"
+
+#~ msgid "System error"
+#~ msgstr "Systemfel"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Argumentbufferten för liten"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Bearbetar pågående begäran"
+
+#~ msgid "Request canceled"
+#~ msgstr "Begäran annulerad"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Begäran inte annulerad"
+
+#~ msgid "All requests done"
+#~ msgstr "Alla begäran utförda"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "Avbruten av en signal"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Parametersträng inte korrekt kodad"
+
+#~ msgid "Unknown error"
+#~ msgstr "Okänt fel"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr "ogiltigt source_version-argument till compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "ogiltigt target_version-argument till compile_java_class"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "det gick inte att skapa \"%s\""
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "fel vid skrivning av filen ”%s”"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Javakompilator hittades inte, försök installera gcj eller sätta $JAVAC"
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Virtuell Javamaskin hittades inte, försök installera gij eller sätta $JAVA"
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "%s-underprocess I/O-fel"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "kan inte ta status på %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "kan inte ändra rättigheter på %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "kan inte skapa katalogen %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "kan inte notera aktuell arbetskatalog"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "kunde inte återvända till den ursprungliga arbetskatalogen"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Misslyckades att öppna /dev/zero för läsning"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "att skapa lästråd misslyckades"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr ""
+#~ "det gick inte att sätta upp icke blockerande I/O till %s-underprocess"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "kommunikation med %s-underprocess misslyckades"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "skrivning till %s-underprocess misslyckades"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "läsning från %s-underprocess misslyckades"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "underprocess %s avslutad med slutstatus %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "att skapa trådar misslyckades"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "%s-underprocess avslutad med slutstatus %d"
+
+#~ msgid "Success"
+#~ msgstr "Lyckades"
+
+#~ msgid "No match"
+#~ msgstr "Ingen träff"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Felaktigt reguljärt uttryck"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Ogiltigt sorteringstecken"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Ogiltigt teckenklassnamn"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Avslutande bakstreck"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Ogiltig bakåtreferens"
+
+#~ msgid "Unmatched [, [^, [:, [., or [="
+#~ msgstr "Ensam [, [^, [:, [. eller [="
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Ensam ( eller \\("
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Ensam \\\\{"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Ogiltigt innehåll i \\{\\}"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Ogiltigt intervallslut"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Minnet slut"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Felaktigt föregående reguljärt uttryck"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Förtida slut av reguljärt uttryck"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "För stort reguljärt uttryck"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Ensam ) eller \\)"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Inget föregående reguljärt uttryck"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[yYjJ]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[nN]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "ändrar rättigheter på %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Avringd"
+
+#~ msgid "Interrupt"
+#~ msgstr "Avbruten"
+
+#~ msgid "Quit"
+#~ msgstr "Lämnad"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Otillåten instruktion"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Spårnings-/brytpunktsfälla"
+
+#~ msgid "Aborted"
+#~ msgstr "Avbruten (abort)"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Flyttalsundantag"
+
+#~ msgid "Killed"
+#~ msgstr "Dödad"
+
+#~ msgid "Bus error"
+#~ msgstr "Bussfel"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Segmenteringsfel"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Brutet rör"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Alarmklocka"
+
+#~ msgid "Terminated"
+#~ msgstr "Avslutad"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Brådskande I/O-situation"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Stoppad (signal)"
+
+#~ msgid "Stopped"
+#~ msgstr "Stoppad"
+
+#~ msgid "Continued"
+#~ msgstr "Återupptagen"
+
+#~ msgid "Child exited"
+#~ msgstr "Barn avslutade"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Stoppad (terminalläsning)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Stoppad (terminalskrivning)"
+
+#~ msgid "I/O possible"
+#~ msgstr "I/O möjligt"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Begränsning av CPU-tid överskriden"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Begränsning av filstorlek överskriden"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Alarmklocka - virtuell tid"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Profileringsklocka"
+
+#~ msgid "Window changed"
+#~ msgstr "Ändrat fönster"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Användarsignal 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Användarsignal 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Emulatorfälla"
+
+#~ msgid "Bad system call"
+#~ msgstr "Felaktigt systemanrop"
+
+#~ msgid "Stack fault"
+#~ msgstr "Stackfel"
+
+#~ msgid "Information request"
+#~ msgstr "Informationsbegäran"
+
+#~ msgid "Power failure"
+#~ msgstr "Strömavbrott"
+
+#~ msgid "Resource lost"
+#~ msgstr "Förlorad resurs"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "fel vid skrivning till ett stängt rör eller uttag"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Realtidsignal %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Okänd signal %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv-funktion inte användbar"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv-funktion inte tillgänglig"
+
+#~ msgid "character out of range"
+#~ msgstr "tecken utanför intervall"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "kan inte konvertera U+%04X till lokal teckenuppsättning"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "kan inte konvertera U+%04X till lokal teckenuppsättning: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "ogiltig användare"
+
+#~ msgid "invalid group"
+#~ msgstr "ogiltig grupp"
+
+#~ msgid "invalid spec"
+#~ msgstr "ogiltig specifikation"
+
+#~ msgid "unable to display error message"
+#~ msgstr "kan inte visa felmeddelande"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "misslyckades att filbeskrivaren i text-/binärt läge"
+
+#~ msgid "stdin"
+#~ msgstr "standard in"
+
+#~ msgid "stdout"
+#~ msgstr "standard ut"
+
+#~ msgid "stderr"
+#~ msgstr "standard fel"
+
+#~ msgid "unknown stream"
+#~ msgstr "okänd ström"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "det gick inte att öppna om %s i läget %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "strängjämförelse misslyckades"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Sätt LC_ALL='C' för att gå runt problemet."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "De jämförda strängarna var %s och %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "kan inte utföra formaterad utmatning"
+
+#~ msgid "standard file descriptors"
+#~ msgstr "standard filbeskrivare"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "felaktigt %s%s-argument ”%s”"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "felaktigt suffix i %s%s-argument ”%s”"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s-argumentet ”%s” är för stort"
diff --git a/gnulib-po/tr.gmo b/gnulib-po/tr.gmo
new file mode 100644
index 0000000..5d2a150
--- /dev/null
+++ b/gnulib-po/tr.gmo
Binary files differ
diff --git a/gnulib-po/tr.po b/gnulib-po/tr.po
new file mode 100644
index 0000000..7aa426c
--- /dev/null
+++ b/gnulib-po/tr.po
@@ -0,0 +1,557 @@
+# translation of coreutils-5.3.0.tr.po to Turkish
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+# Ali Devin Sezer <Ali_Sezer@brown.edu>, 2002.
+# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, 2002.
+# Onur Tolga ŞEHİTOĞLU <onur@lcsl.metu.edu.tr>, 1998.
+# Deniz Akkus Kanca <deniz@arayan.com>, 2001,2003, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: coreutils 5.3.0\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2005-03-14 04:17+0200\n"
+"Last-Translator: Deniz Akkus Kanca <deniz@arayan.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%s argümanı `%s' için geçersiz"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%s argümanı `%s' için belirsiz"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 ""
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "%s bağı oluşturulamadı"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "%s bağı oluşturulamadı"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "%s yazmak için açılamadı"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "yazma hatası"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Bilinmeyen sistem hatası"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: `%s' seçeneği belirsiz\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: `%s' seçeneği belirsiz\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: `%c%s' seçeneği bilinmiyor\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: seçenek `%c%s' argümansız kullanılır\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: seçenek bir argümanla kullanılır -- %c\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "bellek tükendi"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, fuzzy, c-format
+msgid "cannot create pipe"
+msgstr "%s bağı oluşturulamadı"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, fuzzy, c-format
+msgid "%s subprocess failed"
+msgstr "%s: arama (seek) başarısız"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr ""
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr ""
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr ""
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, fuzzy, c-format
+msgid "%s subprocess"
+msgstr "%s: arama (seek) başarısız"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, fuzzy, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s: arama (seek) başarısız"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "%s tarafından yazıldı.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "%s ve %s tarafından yazıldı.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "%s, %s ve %s tarafından yazıldı.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s \n"
+#~ "ve %s tarafından yazıldı.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s, %s \n"
+#~ "ve %s tarafından yazıldı.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s, %s, \n"
+#~ "%s ve %s tarafından yazıldı.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s, %s, \n"
+#~ "%s, %s ve %s tarafından yazıldı.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "%s, %s, %s, \n"
+#~ "%s, %s, %s, \n"
+#~ "%s ve %s tarafından yazıldı.\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, \n"
+#~ "%s, %s ve %s tarafından yazıldı.\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, \n"
+#~ "%s, %s, %s ve başkaları tarafından yazıldı.\n"
+
+#, fuzzy
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Yazılım hatalarını <%s> adresine,\n"
+#~ "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin.\n"
+
+#, fuzzy
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Yazılım hatalarını <%s> adresine,\n"
+#~ "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildirin.\n"
+
+#
+#, fuzzy
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Uzun seçenekler için zorunlu olan argümanlar kısa seçenekler için de "
+#~ "zorunludur.\n"
+
+#, fuzzy
+#~ msgid " [OPTION...]"
+#~ msgstr "Kullanım: %s [SEÇENEK]...\n"
+
+#, fuzzy
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
+
+#~ msgid "NAME"
+#~ msgstr "İSİM"
+
+#, fuzzy
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: çok fazla sağlama satırı"
+
+#, fuzzy
+#~ msgid "program error"
+#~ msgstr "okuma hatası"
+
+#, fuzzy
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "%s okumak için açılamadı"
+
+#, fuzzy
+#~ msgid "error reading \"%s\""
+#~ msgstr "%s'i okunurken hata"
+
+#, fuzzy
+#~ msgid "error writing \"%s\""
+#~ msgstr "%s'e yazarken hata"
+
+#, fuzzy
+#~ msgid "error after reading \"%s\""
+#~ msgstr "%s'i okunurken hata"
+
+#, fuzzy
+#~ msgid "fdopen() failed"
+#~ msgstr "açma işlemi başarısız"
+
+#
+#~ msgid "regular empty file"
+#~ msgstr "normal boş dosya"
+
+#
+#~ msgid "regular file"
+#~ msgstr "normal dosya"
+
+#~ msgid "directory"
+#~ msgstr "dizin"
+
+#
+#~ msgid "block special file"
+#~ msgstr "blok özel dosyası"
+
+#
+#~ msgid "character special file"
+#~ msgstr "karakter özel dosyası"
+
+#
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "symbolic link"
+#~ msgstr "sembolik bağ"
+
+#~ msgid "socket"
+#~ msgstr "soket"
+
+#~ msgid "message queue"
+#~ msgstr "ileti kuyruğu"
+
+#~ msgid "semaphore"
+#~ msgstr "semafor"
+
+#
+#~ msgid "shared memory object"
+#~ msgstr "paylaşımlı bellek nesnesi"
+
+#
+#~ msgid "typed memory object"
+#~ msgstr "türlenmiş bellek nesnesi"
+
+#
+#~ msgid "weird file"
+#~ msgstr "garip dosya"
+
+#, fuzzy
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "fifo dosyaları desteklenmiyor"
+
+#, fuzzy
+#~ msgid "ai_family not supported"
+#~ msgstr "fifo dosyaları desteklenmiyor"
+
+#, fuzzy
+#~ msgid "ai_socktype not supported"
+#~ msgstr "fifo dosyaları desteklenmiyor"
+
+#, fuzzy
+#~ msgid "System error"
+#~ msgstr "yazma hatası"
+
+#, fuzzy
+#~ msgid "Unknown error"
+#~ msgstr "Bilinmeyen sistem hatası"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: `--%s' seçeneği argümansız kullanılır\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: `--%s' seçeneği bilinmiyor\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: kuraldışı seçenek -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: `-W %s' seçeneği belirsiz\n"
+
+#~ 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"
+
+#~ msgid "block size"
+#~ msgstr "blok uzunluğu"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s var ama bir dizin değil"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "%s'in sahibi ve/veya grubu değiştirilemiyor"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "%s dizini oluşturulamıyor"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "%s dizinine geçilemedi"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "%s'in erişim izinleri değiştirilemiyor"
+
+#, fuzzy
+#~ msgid "unable to record current working directory"
+#~ msgstr "openat: çalışılan dizini kaydedemedi"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "başlangıç çalışma dizinine geri dönülemedi"
+
+#, fuzzy
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "%s: yazmak için açılamadı"
+
+#, fuzzy
+#~ msgid "Invalid regular expression"
+#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s"
+
+#, fuzzy
+#~ msgid "Invalid character class name"
+#~ msgstr "geçersiz karakter sınıfı `%s'"
+
+#, fuzzy
+#~ msgid "Invalid range end"
+#~ msgstr "Geçersiz sayfa aralığı `%s'"
+
+#, fuzzy
+#~ msgid "Memory exhausted"
+#~ msgstr "bellek tükendi"
+
+#, fuzzy
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s"
+
+#, fuzzy
+#~ msgid "Premature end of regular expression"
+#~ msgstr "düzenli ifade (regular expression) aramasında hata oluştu"
+
+#, fuzzy
+#~ msgid "Regular expression too big"
+#~ msgstr "%s: geçersiz düzenli ifade(regular expression): %s"
+
+#, fuzzy
+#~ msgid "No previous regular expression"
+#~ msgstr "düzenli ifade (regular expression) aramasında hata oluştu"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[eE]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[hH]"
+
+#
+#~ msgid "iconv function not usable"
+#~ msgstr "iconv işlevi kullanılabilir değil"
+
+#~ msgid "iconv function not available"
+#~ msgstr "iconv işlevi yok"
+
+#~ msgid "character out of range"
+#~ msgstr "karakter kapsamdışı"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "U+%04X yerel karakter kümesine dönüştürülemiyor"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "U+%04X yerel karakter kümesine dönüştürülemiyor: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "kullanıcı geçersiz"
+
+#~ msgid "invalid group"
+#~ msgstr "grup geçersiz"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "bir sayısal kullanıcı-kimliğin grubu alınamıyor"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bu, bir serbest yazılımdır; Free Software Foundation tarafından "
+#~ "yayınlanan\n"
+#~ "GNU Genel Kamu Lisansı, 2. sürüm (veya sizin seçiminize bağlı olarak) "
+#~ "daha üst \n"
+#~ "sürüm koşulları altında değişiklik yapabilir ve/veya yeniden "
+#~ "dağıtabilirsiniz. \n"
+#~ "\n"
+
+#
+#~ msgid "string comparison failed"
+#~ msgstr "dizge karşılaştırması başarısız"
+
+#
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Problemi devre dışı bırakmak için LC_ALL='C' tanımlayın."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Karşılaştırılan dizgeler %s ve %s idi."
diff --git a/gnulib-po/uk.gmo b/gnulib-po/uk.gmo
new file mode 100644
index 0000000..cfa9b6a
--- /dev/null
+++ b/gnulib-po/uk.gmo
Binary files differ
diff --git a/gnulib-po/uk.po b/gnulib-po/uk.po
new file mode 100644
index 0000000..12c7309
--- /dev/null
+++ b/gnulib-po/uk.po
@@ -0,0 +1,928 @@
+# Ukrainian messages for gnulib
+# This file is distributed under the same license as the gnulib package.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# Sergey Poznyakoff <gray@gnu.org>, 2010.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-19 14:26+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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 19.03.70\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "некоректний аргумент %s для %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначний аргумент %s для %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Статистика наборів бітів:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "Акумульовані запуски = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "не вдалося прочитати файл статистичних даних"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "помилковий розмір файла статистичних даних\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "не вдалося записати файл статистичних даних."
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "не вдалося відкрити файл статистичних даних для запису"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "помилка запису"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Невідома системна помилка"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: параметр «%s%s» не є однозначним\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: неоднозначний параметр «%s%s»; можливі варіанти:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: невідомий параметр «%s%s»\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: додавання аргументів до параметра «%s%s» не передбачено\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: до параметра «%s%s» слід додати аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: Некоректний параметр -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: параметр вимагає аргументу -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "'"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "не вдається створити конвеєр"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "нащадок %s зазнав невдачі"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "Час виконання (у секундах)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "Користувач процесора"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "Система процесора"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "настінний годинник"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "помилка _open_osfhandle"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "не вдається відновити дескриптор %d: помилка dup2"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "нащадок процесу %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "підпроцес %s отримав фатальний сигнал %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "Пакет створив %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Пакет створив %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "Умови ліцензування викладено у GPLv3+: GNU GPL версії 3 або новішій, <"
+#~ "%s>\n"
+#~ "Це вільне програмне забезпечення: ви можете вільно змінювати і поширювати "
+#~ "його.\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 та %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 "Report bugs to: %s\n"
+#~ msgstr "Про помилки звітуйте на %s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "Про помилки у програмі %s звітуйте на %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "домашня сторінка %s: <%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Загальна довідкова інформація щодо використання програмного забезпечення "
+#~ "GNU: <%s>\n"
+
+#~ 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: 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 " [ПАРАМЕТР...]"
+
+#~ 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"
+
+#~ 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 "СЕКУНДИ"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "зачекати вказану кількість секунд (типово 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 file %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 "cannot open backup file %s for writing"
+#~ 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 mono"
+#~ msgstr "не знайдено компілятора C#, спробуйте встановити mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "не знайдено віртуальної машини C#, спробуйте встановити mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "неврівноважена дужка ["
+
+#~ msgid "invalid character class"
+#~ msgstr "некоректний клас символів"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr ""
+#~ "синтаксис класу символів є таким: [[:space:]], — а не таким: [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "незавершене екранування \\"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "некоректний вміст \\{\\}"
+
+#~ msgid "regular expression too big"
+#~ msgstr "занадто об'ємний формальний вираз"
+
+#~ msgid "unbalanced ("
+#~ msgstr "неврівноважена дужка ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "не вказано синтаксису"
+
+#~ msgid "unbalanced )"
+#~ msgstr "неврівноважена дужка )"
+
+#~ msgid "regular empty file"
+#~ msgstr "звичайний порожній файл"
+
+#~ msgid "regular file"
+#~ msgstr "звичайний файл"
+
+#~ msgid "directory"
+#~ msgstr "каталог"
+
+#~ msgid "symbolic link"
+#~ msgstr "символьне посилання"
+
+#~ msgid "message queue"
+#~ msgstr "черга повідомлень"
+
+#~ msgid "semaphore"
+#~ msgstr "семафор"
+
+#~ msgid "shared memory object"
+#~ msgstr "спільний об'єкт пам'яті"
+
+#~ msgid "typed memory object"
+#~ msgstr "типізований об'єкт пам'яті"
+
+#~ msgid "block special file"
+#~ msgstr "спеціальний блоковий файл"
+
+#~ msgid "character special file"
+#~ msgstr "спеціальний символьний файл"
+
+#~ msgid "contiguous data"
+#~ msgstr "неперервні дані"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "двері"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "спеціальний файл ущільненого блокового пристрою"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "спеціальний файл ущільненого символьного пристрою"
+
+#~ msgid "multiplexed file"
+#~ msgstr "ущільнений файл"
+
+#~ msgid "named file"
+#~ msgstr "іменований файл"
+
+#~ msgid "network special file"
+#~ msgstr "спеціальний файл мережі"
+
+#~ msgid "migrated file with data"
+#~ msgstr "перенесений файл з даними"
+
+#~ msgid "migrated file without data"
+#~ msgstr "перенесений файл без даних"
+
+#~ msgid "port"
+#~ msgstr "порт"
+
+#~ msgid "socket"
+#~ msgstr "гніздо"
+
+#~ msgid "whiteout"
+#~ msgstr "забілювання"
+
+#~ msgid "weird file"
+#~ msgstr "дивний файл"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Родина адрес для назви вузла не підтримується"
+
+#~ 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 не передбачено"
+
+#~ 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 "invalid source_version argument to compile_java_class"
+#~ msgstr "недійсне значення аргументу source_version для compile_java_class"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr "недійсне значення аргументу target_version для compile_java_class"
+
+#~ 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 або задати "
+#~ "значення $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"
+
+#~ msgid "cannot stat %s"
+#~ msgstr "не вдалося отримати статистичні дані щодо %s"
+
+#~ 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"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "помилка створення потоків"
+
+#~ 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 "Відбій"
+
+#~ msgid "Interrupt"
+#~ msgstr "Переривання"
+
+#~ msgid "Quit"
+#~ msgstr "Закінчення"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Недійсна інструкція"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Перехоплення трасування/контрольної точки"
+
+#~ msgid "Aborted"
+#~ msgstr "Аварійне завершення"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Виняток операції з рухомою крапкою"
+
+#~ msgid "Killed"
+#~ msgstr "Знищено"
+
+#~ msgid "Bus error"
+#~ msgstr "Помилка шини"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Помилка сегментації"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Розімкнений конвеєр"
+
+#~ msgid "Alarm clock"
+#~ msgstr "Таймер"
+
+#~ msgid "Terminated"
+#~ msgstr "Закінчено"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Екстрена ситуація вводу-виводу"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Припинення (сигнал)"
+
+#~ msgid "Stopped"
+#~ msgstr "Припинення"
+
+#~ msgid "Continued"
+#~ msgstr "Продовження"
+
+#~ msgid "Child exited"
+#~ msgstr "Нащадок завершився"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Припинення (ввід з консолі)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Припинення (вивід на консоль)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Можливий ввід-вивід"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Перевищення ліміту часу ЦП"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Перевищення ліміту розміру файлів"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Відлік віртуального таймера завершено"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Відлік таймера профілювання завершено"
+
+#~ msgid "Window changed"
+#~ msgstr "Вікно змінилося"
+
+#~ 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 "failed to set file descriptor text/binary mode"
+#~ msgstr ""
+#~ "не вдалося встановити текстовий або двійковий режим для дескриптора файла"
+
+#~ msgid "stdin"
+#~ msgstr "stdin"
+
+#~ msgid "stdout"
+#~ msgstr "stdout"
+
+#~ msgid "stderr"
+#~ msgstr "stderr"
+
+#~ msgid "unknown stream"
+#~ msgstr "невідомий потік"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "не вдалося відкрити %s у режимі %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "невдале порівняння рядків"
+
+#~ 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 "standard file descriptors"
+#~ msgstr "стандартні дескриптори файлів"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "некоректний аргумент %s%s — «%s»"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "некоректний суфікс в аргументі %s%s: «%s»"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s, аргумент «%s» є занадто об’ємним"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "Домашня сторінка %s: <https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатнім"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр '--%s' не може мати аргументу\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: невідомий параметр '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр '-W %s' не може мати аргументу\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: для використання параметра «-W %s» слід вказати аргумент\n"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc,ois Pinard"
diff --git a/gnulib-po/vi.gmo b/gnulib-po/vi.gmo
new file mode 100644
index 0000000..d178ae9
--- /dev/null
+++ b/gnulib-po/vi.gmo
Binary files differ
diff --git a/gnulib-po/vi.po b/gnulib-po/vi.po
new file mode 100644
index 0000000..6467e4c
--- /dev/null
+++ b/gnulib-po/vi.po
@@ -0,0 +1,880 @@
+# Vietnamese translation for GNU Lib.
+# Bản dịch Tiếng Việt dành cho GNU Lib.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib-3.0.0.6062.a6b16\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2014-01-13 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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.5.5\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "đối số không hợp lệ %s cho %s"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "đối số chưa rõ ràng %s dành cho %s"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+msgid "Valid arguments are:"
+msgstr "Các đối số hợp lệ:"
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "không thể tạo ống dẫn"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "không thể tạo ống dẫn"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "không thể mở tập tin sao lưu dự phòng “%s” để ghi"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "lỗi ghi"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "Gặp lỗi hệ thống chưa biết"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: tùy chọn “-W %s” chưa rõ ràng\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: tùy chọn “%s” chưa rõ ràng; khả năng là:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: không nhận ra tùy chọn “%c%s”\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%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:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: tùy chọn “--%s” yêu cầu một đối số\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: tùy chọn không hợp lệ -- “%c”\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, 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/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "hết bộ nhớ"
+
+#. 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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "không thể tạo ống dẫn"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "Tiến trình con %s bị lỗi"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "Đồng hồ báo động"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle bị lỗi"
+
+#: lib/w32spawn.h:90
+#, 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” bị lỗi"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "Tiến trình con %s"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, 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 "Packaged by %s (%s)\n"
+#~ msgstr "Gói đóng bởi %s (%s)\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "Gói đóng bởi %s\n"
+
+#~ msgid "(C)"
+#~ msgstr "©"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "GPLv3+: Giấy Phép Công Cộng GNU, phiên bản 3 hay mới hơn <http://gnu.org/"
+#~ "licenses/gpl.html>\n"
+#~ "Đây là phần mềm tự do: bạn có quyền thay đổi và phát hành lại nó.\n"
+#~ "KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n"
+#~ "\n"
+
+#~ msgid "Written by %s.\n"
+#~ msgstr "Tác giả: %s.\n"
+
+#~ msgid "Written by %s and %s.\n"
+#~ msgstr "Tác giả: %s và %s.\n"
+
+#~ msgid "Written by %s, %s, and %s.\n"
+#~ msgstr "Tác giả: %s, %s, và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "%s, và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Tác gia: %s, %s, %s,\n"
+#~ "%s, %s, và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, and %s.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "%s, %s, %s, và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, và %s.\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "Tác giả: %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, và các người khác.\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Hãy thông báo lỗi cho: %s\n"
+#~ "Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr ""
+#~ "Hãy thông báo lỗi %s cho: %s\n"
+#~ "Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "Trang chủ %s: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr ""
+#~ "Trợ giúp chung về cách sử dụng phần mềm GNU: <http://www.gnu.org/gethelp/"
+#~ ">\n"
+
+#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
+#~ msgstr "ARGP_HELP_FMT: giá trị %s nhỏ hơn hoặc bằng %s"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+#~ msgstr "%.*s: tham số “ARGP_HELP_FMT” cần được gán giá trị"
+
+#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
+#~ msgstr "%.*s: tham số “ARGP_HELP_FMT” phải là số dương"
+
+#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+#~ msgstr "%.*s: Không biết tham số “ARGP_HELP_FMT”"
+
+#~ msgid "Garbage in ARGP_HELP_FMT: %s"
+#~ msgstr "Gặp rác trong “ARGP_HELP_FMT”: %s"
+
+#~ msgid ""
+#~ "Mandatory or optional arguments to long options are also mandatory or "
+#~ "optional for any corresponding short options."
+#~ msgstr ""
+#~ "Các đối số là bắt buộc hay chỉ là tùy chọn khi dùng với tùy chọn dài thì "
+#~ "tùy chọn ngắn tương ứng cũng vậy."
+
+#~ msgid "Usage:"
+#~ msgstr "Cách dùng:"
+
+#~ msgid "  or: "
+#~ msgstr "     hoặc:"
+
+#~ msgid " [OPTION...]"
+#~ msgstr " [TÙY_CHỌN...]"
+
+#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
+#~ msgstr ""
+#~ "Hãy chạy “%s --help” (trợ giúp) hay “%s --usage” (cách dùng) để xem thông "
+#~ "tin thêm.\n"
+
+#~ msgid "Report bugs to %s.\n"
+#~ msgstr "Hãy thông báo lỗi cho %s.\n"
+
+#~ msgid "give this help list"
+#~ msgstr "hiển thị trợ giúp này"
+
+#~ msgid "give a short usage message"
+#~ msgstr "hiển thị cách dùng dạng ngắn gọn"
+
+#~ msgid "NAME"
+#~ msgstr "TÊN"
+
+#~ msgid "set the program name"
+#~ msgstr "đặt tên chương trình"
+
+#~ msgid "SECS"
+#~ msgstr "GIÂY"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "treo trong vòng GIÂY giây (mặc định là 3600)"
+
+#~ msgid "print program version"
+#~ msgstr "in ra phiên bản chương trình"
+
+#~ msgid "(PROGRAM ERROR) No version known!?"
+#~ msgstr "(LỖI CHƯƠNG TRÌNH) Không có phiên bản đã biết ?"
+
+#~ msgid "%s: Too many arguments\n"
+#~ msgstr "%s: Quá nhiều đối số\n"
+
+#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
+#~ msgstr "(LỖI CHƯƠNG TRÌNH) Tùy chọn đáng ra nên được nhận diện!?"
+
+#~ msgid "program error"
+#~ msgstr "lỗi chương trình"
+
+#~ msgid "stack overflow"
+#~ msgstr "tràn ngăn xếp"
+
+#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
+#~ msgstr ""
+#~ "không tìm thấy thư mục tạm thời, hãy thử đặt biến môi trường $TMPDIR"
+
+#~ msgid "cannot create a temporary directory using template \"%s\""
+#~ msgstr "không thể tạo một thư mục tạm thời dùng mẫu “%s”"
+
+#~ msgid "cannot remove temporary file %s"
+#~ msgstr "không thể gỡ bỏ tập tin tạm thời %s"
+
+#~ msgid "cannot remove temporary directory %s"
+#~ msgstr "không thể gỡ bỏ thư mục tạm thời %s"
+
+#~ msgid "error closing file"
+#~ msgstr "lỗi đóng tập tin"
+
+#~ msgid "preserving permissions for %s"
+#~ msgstr "đang bảo tồn quyền hạn cho %s"
+
+#~ msgid "error while opening \"%s\" for reading"
+#~ msgstr "gặp lỗi khi mở “%s” để đọc"
+
+#~ msgid "error reading \"%s\""
+#~ msgstr "gặp lỗi khi đọc “%s”"
+
+#~ msgid "error writing \"%s\""
+#~ msgstr "gặp lỗi khi ghi “%s”"
+
+#~ msgid "error after reading \"%s\""
+#~ msgstr "gặp lỗi sau khi đọc “%s”"
+
+#~ msgid "fdopen() failed"
+#~ msgstr "fdopen() bị lỗi"
+
+#~ msgid "C# compiler not found, try installing pnet"
+#~ msgstr "Không tìm thấy trình biên dịch C# nên thử cài đặt pnet"
+
+#~ msgid "C# virtual machine not found, try installing pnet"
+#~ msgstr "Không tìm thấy cơ chế ảo C# nên thử cài đặt pnet"
+
+#~ msgid "regular empty file"
+#~ msgstr "tập tin rỗng kiểu thường"
+
+#~ msgid "regular file"
+#~ msgstr "tập tin thông thường"
+
+#~ msgid "directory"
+#~ msgstr "thư mục"
+
+#~ msgid "block special file"
+#~ msgstr "tập tin đặc biệt khối"
+
+#~ msgid "character special file"
+#~ msgstr "tập tin đặc biệt ký tự"
+
+#~ msgid "fifo"
+#~ msgstr "fifo (vào trước, ra trước)"
+
+#~ msgid "symbolic link"
+#~ msgstr "liên kết mềm"
+
+#~ msgid "socket"
+#~ msgstr "ổ cắm"
+
+#~ msgid "message queue"
+#~ msgstr "hàng đợi thông điệp"
+
+#~ msgid "semaphore"
+#~ msgstr "cờ hiệu"
+
+#~ msgid "shared memory object"
+#~ msgstr "đối tượng bộ nhớ dùng chung"
+
+#~ msgid "typed memory object"
+#~ msgstr "đốí tượng bộ nhớ đánh kiểu"
+
+#~ msgid "weird file"
+#~ msgstr "tập tin kỳ quặc"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "Họ địa chỉ dành cho tên máy không được hỗ trợ"
+
+#~ msgid "Temporary failure in name resolution"
+#~ msgstr "Tạm thời không thể quyết định tên"
+
+#~ msgid "Bad value for ai_flags"
+#~ msgstr "Giá trị sai đối với “ai_flags” (cờ)"
+
+#~ msgid "Non-recoverable failure in name resolution"
+#~ msgstr "Lỗi không thể phục hồi khi phân giải tên"
+
+#~ msgid "ai_family not supported"
+#~ msgstr "Không hỗ trợ “ai_family”"
+
+#~ msgid "Memory allocation failure"
+#~ msgstr "Lỗi cấp phát bộ nhớ"
+
+#~ msgid "No address associated with hostname"
+#~ msgstr "Không có địa chỉ liên quan đến tên máy"
+
+#~ msgid "Name or service not known"
+#~ msgstr "Không nhận ra tên hay dịch vụ"
+
+#~ msgid "Servname not supported for ai_socktype"
+#~ msgstr "Không hỗ trợ tên máy phục vụ đối với “ai_socktype” (kiểu ổ cắm)"
+
+#~ msgid "ai_socktype not supported"
+#~ msgstr "Không hỗ trợ “ai-socktype” (kiểu ổ cắm)"
+
+#~ msgid "System error"
+#~ msgstr "Lỗi hệ thống"
+
+#~ msgid "Argument buffer too small"
+#~ msgstr "Vùng đệm đối số quá ngắn"
+
+#~ msgid "Processing request in progress"
+#~ msgstr "Yêu cầu xử lý đang chạy"
+
+#~ msgid "Request canceled"
+#~ msgstr "Yêu cầu bị hủy bỏ"
+
+#~ msgid "Request not canceled"
+#~ msgstr "Yêu cầu chưa bị hủy bỏ"
+
+#~ msgid "All requests done"
+#~ msgstr "Mọi yêu cầu hoàn tất"
+
+#~ msgid "Interrupted by a signal"
+#~ msgstr "bị tín hiệu gián đoạn"
+
+#~ msgid "Parameter string not correctly encoded"
+#~ msgstr "Chuỗi tham số không phải được mã hóa đúng"
+
+#~ msgid "Unknown error"
+#~ msgstr "Gặp lỗi không rõ"
+
+#~ 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"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: không nhận ra tùy chọn “--%s”\n"
+
+#~ 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"
+
+#~ 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"
+
+#~ msgid "invalid source_version argument to compile_java_class"
+#~ msgstr ""
+#~ "đối số phiên bản nguồn “source_version” không hợp lệ đối với hạn Java "
+#~ "biên dịch “compile_java_class”"
+
+#~ msgid "invalid target_version argument to compile_java_class"
+#~ msgstr ""
+#~ "đối số phiên bản đích “source_version” không hợp lệ đối với hạn Java biên "
+#~ "dịch “compile_java_class”"
+
+#~ msgid "failed to create \"%s\""
+#~ msgstr "gặp lỗi khi tạo “%s”"
+
+#~ msgid "error while writing \"%s\" file"
+#~ msgstr "gặp lỗi khi ghi tập tin “%s”"
+
+#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
+#~ msgstr ""
+#~ "Không tìm thấy trình biên dịch Java nên thử cài đặt trình “gcj” hoặc đặt "
+#~ "biến môi trường “$JAVAC”."
+
+#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
+#~ msgstr ""
+#~ "Không tìm thấy cơ chế ảo Java nên thử cài đặt trình “gcj” hoặc đặt biến "
+#~ "môi trường “$JAVAC”."
+
+#~ msgid "%s subprocess I/O error"
+#~ msgstr "Lỗi V/R tiến trình con %s"
+
+#~ msgid "cannot change permissions of %s"
+#~ msgstr "không thể thay đổi quyền hạn của %s"
+
+#~ msgid "cannot create directory %s"
+#~ msgstr "không thể tạo thư mục %s"
+
+#~ msgid "unable to record current working directory"
+#~ msgstr "không thể ghi lại thư mục làm việc hiện thời"
+
+#~ msgid "failed to return to initial working directory"
+#~ msgstr "gặp lỗi khi quay trở về thư mục làm việc ban đầu"
+
+#~ msgid "Failed to open /dev/zero for read"
+#~ msgstr "Gặp lỗi khi mở thiết bị “/dev/zero” để đọc"
+
+#~ msgid "creation of reading thread failed"
+#~ msgstr "gặp lỗi khi tạo tuyến trình đọc"
+
+#~ msgid "cannot set up nonblocking I/O to %s subprocess"
+#~ msgstr "không thể cài đặt V/R không chặn đối với tiến trình con %s"
+
+#~ msgid "communication with %s subprocess failed"
+#~ msgstr "lỗi liên lạc với tiến trình con %s"
+
+#~ msgid "write to %s subprocess failed"
+#~ msgstr "gặp lỗi khi ghi vào tiến trình con %s"
+
+#~ msgid "read from %s subprocess failed"
+#~ msgstr "gặp lỗi khi đọc từ tiến trình con %s"
+
+#~ msgid "subprocess %s terminated with exit code %d"
+#~ msgstr "tiến trình con %s đã kết thúc với mã thoát %d"
+
+#~ msgid "creation of threads failed"
+#~ msgstr "gặp lỗi khi tạo tuyến trình"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "tiến trình con %s đã kết thúc với mã thoát %d"
+
+#~ msgid "Franc,ois Pinard"
+#~ msgstr "Franc,ois Pinard"
+
+#~ msgid "Success"
+#~ msgstr "Thành công"
+
+#~ msgid "No match"
+#~ msgstr "Không khớp"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "Biểu thức chính quy không hợp lệ"
+
+#~ msgid "Invalid collation character"
+#~ msgstr "Ký tự đối chiếu không hợp lệ"
+
+#~ msgid "Invalid character class name"
+#~ msgstr "Tên loại ký tự không hợp lệ"
+
+#~ msgid "Trailing backslash"
+#~ msgstr "Có xuyệc ngược theo sau"
+
+#~ msgid "Invalid back reference"
+#~ msgstr "Tham chiếu ngược không hợp lệ"
+
+#~ msgid "Unmatched [ or [^"
+#~ msgstr "Chưa khớp ký tự “[” hay “[^”"
+
+#~ msgid "Unmatched ( or \\("
+#~ msgstr "Chưa khớp ký tự “(” hay “\\(”"
+
+#~ msgid "Unmatched \\{"
+#~ msgstr "Chưa khớp ký tự “\\{”"
+
+#~ msgid "Invalid content of \\{\\}"
+#~ msgstr "Nội dung của “\\{\\}” không hợp lệ"
+
+#~ msgid "Invalid range end"
+#~ msgstr "Kết thúc phạm vi không hợp lệ"
+
+#~ msgid "Memory exhausted"
+#~ msgstr "Hết bộ nhớ"
+
+#~ msgid "Invalid preceding regular expression"
+#~ msgstr "Biểu thức chính quy đi trước không hợp lệ"
+
+#~ msgid "Premature end of regular expression"
+#~ msgstr "Biểu thức chính quy kết thúc quá sớm"
+
+#~ msgid "Regular expression too big"
+#~ msgstr "Biểu thức chính quy quá lớn"
+
+#~ msgid "Unmatched ) or \\)"
+#~ msgstr "Chưa khớp ký tự “)” hay “\\)”"
+
+#~ msgid "No previous regular expression"
+#~ msgstr "Không có biểu thức chính quy đi trước"
+
+#~ msgid "^[yY]"
+#~ msgstr "^[cC]"
+
+#~ msgid "^[nN]"
+#~ msgstr "^[kK]"
+
+#~ msgid "setting permissions for %s"
+#~ msgstr "đang đặt quyền hạn cho %s"
+
+#~ msgid "Hangup"
+#~ msgstr "Ngưng"
+
+#~ msgid "Interrupt"
+#~ msgstr "Ngắt"
+
+#~ msgid "Quit"
+#~ msgstr "Thoát"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "Câu lệnh sai"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "Bẫy vết/điểm ngắt"
+
+#~ msgid "Aborted"
+#~ msgstr "Bị hủy bỏ"
+
+#~ msgid "Floating point exception"
+#~ msgstr "Ngoại lệ số thực dấu chấm động"
+
+#~ msgid "Killed"
+#~ msgstr "Bị buộc kết thúc"
+
+#~ msgid "Bus error"
+#~ msgstr "Lỗi bus"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "Lỗi phân đoạn"
+
+#~ msgid "Broken pipe"
+#~ msgstr "Ống dẫn bị hỏng"
+
+#~ msgid "Terminated"
+#~ msgstr "Bị chấm dứt"
+
+#~ msgid "Urgent I/O condition"
+#~ msgstr "Điều kiện V/R khẩn"
+
+#~ msgid "Stopped (signal)"
+#~ msgstr "Bị ngừng (ký hiệu)"
+
+#~ msgid "Stopped"
+#~ msgstr "Bị ngừng"
+
+#~ msgid "Continued"
+#~ msgstr "Đã tiếp tục"
+
+#~ msgid "Child exited"
+#~ msgstr "Tiến trình con đã thoát"
+
+#~ msgid "Stopped (tty input)"
+#~ msgstr "Bị ngừng (đầu vào TTY)"
+
+#~ msgid "Stopped (tty output)"
+#~ msgstr "Bị ngừng (đầu ra TTY)"
+
+#~ msgid "I/O possible"
+#~ msgstr "Có thể V/R"
+
+#~ msgid "CPU time limit exceeded"
+#~ msgstr "Vượt quá thời hạn CPU"
+
+#~ msgid "File size limit exceeded"
+#~ msgstr "Vượt quá giới hạn kích cỡ tập tin"
+
+#~ msgid "Virtual timer expired"
+#~ msgstr "Hàm đếm thời gian ảo đã hết hạn"
+
+#~ msgid "Profiling timer expired"
+#~ msgstr "Hàm đếm thời gian đo hiệu năng sử dụng đã hết hạn"
+
+#~ msgid "Window changed"
+#~ msgstr "Cửa sổ bị thay đổi"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "Tín hiệu do người dùng xác định 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "Tín hiệu do người dùng xác định 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "Bẫy EMT"
+
+#~ msgid "Bad system call"
+#~ msgstr "Cú gọi hệ thống sai"
+
+#~ msgid "Stack fault"
+#~ msgstr "Lỗi ngăn xếp"
+
+#~ msgid "Information request"
+#~ msgstr "Yêu cầu thông tin"
+
+#~ msgid "Power failure"
+#~ msgstr "Bị mất điện đột ngột"
+
+#~ msgid "Resource lost"
+#~ msgstr "Tài nguyên bị mất"
+
+#~ msgid "error writing to a closed pipe or socket"
+#~ msgstr "lỗi ghi vào một đường ống hay ổ cắm bị đóng"
+
+#~ msgid "Real-time signal %d"
+#~ msgstr "Tín hiệu thời gian thật %d"
+
+#~ msgid "Unknown signal %d"
+#~ msgstr "Không rõ tín hiệu %d"
+
+#~ msgid "iconv function not usable"
+#~ msgstr "hàm iconv không khả dụng"
+
+#~ msgid "iconv function not available"
+#~ msgstr "không có hàm iconv"
+
+#~ msgid "character out of range"
+#~ msgstr "Ký tự ở ngoại phạm vi"
+
+#~ msgid "cannot convert U+%04X to local character set"
+#~ msgstr "không thể chuyển đổi U+%04X sang bộ ký tự địa phương"
+
+#~ msgid "cannot convert U+%04X to local character set: %s"
+#~ msgstr "không thể chuyển đổi U+%04X sang bộ ký tự địa phương: %s"
+
+#~ msgid "invalid user"
+#~ msgstr "người dùng không hợp lệ"
+
+#~ msgid "invalid group"
+#~ msgstr "nhóm không hợp lệ"
+
+#~ msgid "invalid spec"
+#~ msgstr "đặc tả không hợp lệ"
+
+#~ msgid "unable to display error message"
+#~ msgstr "không thể hiển thị thông điệp lỗi"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Trang chủ %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "stdin"
+#~ msgstr "đầu vào tiêu chuẩn"
+
+#~ msgid "stdout"
+#~ msgstr "đầu ra tiêu chuẩn"
+
+#~ msgid "stderr"
+#~ msgstr "đầu ra lỗi tiêu chuẩn"
+
+#~ msgid "unknown stream"
+#~ msgstr "không hiểu luồng dữ liệu"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "gặp lỗi khi mở lại %s trong chế độ %s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "gặp lỗi khi so sánh chuỗi"
+
+#~ msgid "Set LC_ALL='C' to work around the problem."
+#~ msgstr "Hãy đặt “LC_ALL='C'” để sửa chữa trục trặc này."
+
+#~ msgid "The strings compared were %s and %s."
+#~ msgstr "Hai chuỗi được so sánh là %s và %s."
+
+#~ msgid "cannot perform formatted output"
+#~ msgstr "không thể thực hiện kết xuất có định dạng"
+
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "đối số %s%s không hợp lệ “%s”"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "hậu tố không hợp lệ trong đối số %s%s “%s”"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "Đối số %s%s “%s” quá lớn"
diff --git a/gnulib-po/zh_CN.gmo b/gnulib-po/zh_CN.gmo
new file mode 100644
index 0000000..23043bf
--- /dev/null
+++ b/gnulib-po/zh_CN.gmo
Binary files differ
diff --git a/gnulib-po/zh_CN.po b/gnulib-po/zh_CN.po
new file mode 100644
index 0000000..2eaacc5
--- /dev/null
+++ b/gnulib-po/zh_CN.po
@@ -0,0 +1,887 @@
+# simplified Chinese translation of gnulib.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+# Yip Chi Lap <clyip@cs.hku.hk>, 1998.
+# Abel Cheung <maddog@linux.org.hk>, 2002.
+# Anthony Fok <anthony@thizlinux.com>, 2002.
+# Funda Wang <fundawang@linux.net.cn>, 2004, 2005.
+# Ji ZhengYu <zhengyuji@gmail.com>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2010-02-26 09:54+0800\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s 的参数 %1$s 无效"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s 的参数 %1$s 有歧义"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr ""
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+#, fuzzy
+msgid "cannot read stats file"
+msgstr "无法创建管道"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr ""
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+#, fuzzy
+msgid "cannot write stats file"
+msgstr "无法创建管道"
+
+#: lib/bitset/stats.c:286
+#, fuzzy
+msgid "cannot open stats file for writing"
+msgstr "无法打开备份文件“%s”写入数据"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "写入错误"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "未知的系统错误"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: 选项\"%s\"歧义\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: 选项\"%s\"歧义\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: 无法识别的选项\"%c%s\"\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: 选项\"%c%s\"不要参数\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: 选项\"%s\"必须带参数\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: 无效选项 -- \"%c\"\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: 选项需要参数 -- \"%c\"\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "”"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "无法创建管道"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s 子进程错误"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr ""
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr ""
+
+#: lib/timevar.c:318
+#, fuzzy
+msgid "wall clock"
+msgstr "时钟警报"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle 失败"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "无法恢复文件描述符 %d: dup2 失败"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s 子进程"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%s 子进程获得终结信号 %d"
+
+#~ msgid "Packaged by %s (%s)\n"
+#~ msgstr "由 %s (%s) 打包\n"
+
+#~ msgid "Packaged by %s\n"
+#~ msgstr "由 %s 打包\n"
+
+#~ msgid "(C)"
+#~ msgstr "(C)"
+
+#, fuzzy
+#~| 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"
+#~ msgid ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "\n"
+#~ "授权协议 GPLv3+: GNU GPL 版本 3 或更新版本 <http://gnu.org/licenses/gpl."
+#~ "html>\n"
+#~ "这是自由软件:您可以自由的更改并重新发布它。\n"
+#~ "在法律允许的范围内,没有任何担保。\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"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Report bugs to: %s\n"
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr ""
+#~ "\n"
+#~ "请向 %s 报告错误。向 <i18n-zh@googlegroups.com> 报告翻译错误。\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "将 %s 错误报告给: %s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s 主页: <%s>\n"
+
+#, fuzzy
+#~| msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "GNU 软件的通用帮助: <http://www.gnu.org/gethelp/>\n"
+
+#~ 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 "[选项...]"
+
+#~ 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"
+
+#~ msgid "give this help list"
+#~ msgstr "显示此帮助列表"
+
+#~ msgid "give a short usage message"
+#~ msgstr "显示一份简洁的用法信息"
+
+#~ msgid "NAME"
+#~ msgstr "NAME"
+
+#~ 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 file %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 "先进先出"
+
+#~ 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 "不支持主机名的地址族"
+
+#~ 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 不支持的服务名"
+
+#~ 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' doesn't allow an argument\n"
+#~ msgstr "%s: 选项\"--%s\"不要参数\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: 无法识别的选项\"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgstr "%s: 选项\"-W %s\"有歧义\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: 选项\"-W %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 或是设置 $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 子进程输入/输出错误"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "线程创建失败"
+
+#~ msgid "%s subprocess terminated with exit code %d"
+#~ msgstr "子进程 %s 由退出码 %d 终止"
+
+#~ msgid "Success"
+#~ msgstr "成功"
+
+#~ msgid "No match"
+#~ msgstr "不匹配"
+
+#~ msgid "Invalid regular expression"
+#~ msgstr "正则表达式无效"
+
+#, fuzzy
+#~ 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 "挂起"
+
+#~ msgid "Interrupt"
+#~ msgstr "中断"
+
+#~ msgid "Quit"
+#~ msgstr "退出"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "非法指令"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "跟踪(断点)"
+
+#~ msgid "Aborted"
+#~ msgstr "取消"
+
+#~ msgid "Floating point exception"
+#~ msgstr "浮点溢出"
+
+#~ msgid "Killed"
+#~ msgstr "强行终止"
+
+#~ msgid "Bus error"
+#~ msgstr "总线错误"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "段错误"
+
+#~ msgid "Broken pipe"
+#~ msgstr "管道断开"
+
+#~ msgid "Terminated"
+#~ msgstr "被终止"
+
+#~ 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 "虚拟计时器过期"
+
+#, fuzzy
+#~ msgid "Profiling timer expired"
+#~ msgstr "数据计时器过期"
+
+#~ msgid "Window changed"
+#~ msgstr "窗口改变"
+
+#~ msgid "User defined signal 1"
+#~ msgstr "用户自定义信号 1"
+
+#~ msgid "User defined signal 2"
+#~ msgstr "用户自定义信号 2"
+
+#~ msgid "EMT trap"
+#~ msgstr "仿真程序陷阱"
+
+#~ 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 "无效的 spec"
+
+#~ msgid "unable to display error message"
+#~ msgstr "无法显示错误信息"
+
+#~ 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 "无法以 %2$s 模式重新打开 %1$s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "字符串比较出现错误"
+
+#~ 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 "%s%s 参数‘%s’无效"
+
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "%s%s 参数‘%s’的后缀无效"
+
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s 参数‘%s’太长"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:非法选项 -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "请向 <%s> 报告错误。\n"
+
+#~ msgid "block size"
+#~ msgstr "块大小"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s 存在但并非目录"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "无法更改 %s 的属主和/或组"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "无法切换到目录 %s"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "无法取得 UID 数值所表示的用户的主组"
diff --git a/gnulib-po/zh_TW.gmo b/gnulib-po/zh_TW.gmo
new file mode 100644
index 0000000..72ec3e5
--- /dev/null
+++ b/gnulib-po/zh_TW.gmo
Binary files differ
diff --git a/gnulib-po/zh_TW.po b/gnulib-po/zh_TW.po
new file mode 100644
index 0000000..1acaafa
--- /dev/null
+++ b/gnulib-po/zh_TW.po
@@ -0,0 +1,947 @@
+# traditional Chinese translation of coreutils.
+# Copyright (C) 1998, 2002, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gnulib package.
+#
+# # Merged from textutils, sh-utils and fileutils translation:
+# # Yip Chi Lap <clyip@cs.hku.hk>, 1998.
+# # Yuan-Chung Cheng <platin@ms.ccafps.khc.edu.tw>, 1998.
+# # Abel Cheung <abelcheung@gmail.com>, 2002.
+# # Pofeng Lee <pofeng@linux.org.tw>, 1998, 2002.
+# Abel Cheung <abelcheung@gmail.com>, 2005.
+# pan93412 <pan93412@gmail.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnulib 4.0.0.2567\n"
+"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-12-06 23:21+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@lists.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.2.1\n"
+
+#: lib/argmatch.c:132
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "傳入 %2$s 之參數 %1$s 無效"
+
+#: lib/argmatch.c:133
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "傳入 %2$s 之參數 %1$s 不明確"
+
+#: lib/argmatch.c:152 lib/argmatch.h:223
+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 ""
+
+#: 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:210
+#, c-format
+msgid ""
+"Bitset statistics:\n"
+"\n"
+msgstr ""
+"Bitset 統計:\n"
+"\n"
+
+#: lib/bitset/stats.c:213
+#, c-format
+msgid "Accumulated runs = %u\n"
+msgstr "累積執行次數 = %u\n"
+
+#: lib/bitset/stats.c:255 lib/bitset/stats.c:260
+msgid "cannot read stats file"
+msgstr "無法讀取統計檔案"
+
+#: lib/bitset/stats.c:257
+#, c-format
+msgid "bad stats file size\n"
+msgstr "統計檔案大小無效\n"
+
+#: lib/bitset/stats.c:281 lib/bitset/stats.c:283
+msgid "cannot write stats file"
+msgstr "無法寫入統計檔案"
+
+#: lib/bitset/stats.c:286
+msgid "cannot open stats file for writing"
+msgstr "無法開啟統計檔案寫入"
+
+#: lib/closeout.c:122
+msgid "write error"
+msgstr "寫入時發生錯誤"
+
+#: lib/error.c:195
+msgid "Unknown system error"
+msgstr "未知系統錯誤"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s:「%s%s」選項不明確\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s:「%s%s」選項不明確;可能是:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s:無法識別「%s%s」選項\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s:「%s%s」選項不接受參數\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s:「%s%s」選項需要參數\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:無效選項 -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:選項需要參數 -- '%c'\n"
+
+#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34
+msgid "memory exhausted"
+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
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:362
+msgid "`"
+msgstr "「"
+
+#: lib/quotearg.c:363
+msgid "'"
+msgstr "」"
+
+#: lib/spawn-pipe.c:141 lib/spawn-pipe.c:144 lib/spawn-pipe.c:265
+#: lib/spawn-pipe.c:268
+#, c-format
+msgid "cannot create pipe"
+msgstr "無法建立管線"
+
+#: lib/spawn-pipe.c:235 lib/spawn-pipe.c:349 lib/wait-process.c:290
+#: lib/wait-process.c:364
+#, c-format
+msgid "%s subprocess failed"
+msgstr "%s 子執行程序執行失敗"
+
+#: lib/timevar.c:316
+msgid "Execution times (seconds)"
+msgstr "執行次數(秒)"
+
+#: lib/timevar.c:318
+msgid "CPU user"
+msgstr "CPU 使用者"
+
+#: lib/timevar.c:318
+msgid "CPU system"
+msgstr "CPU 系統"
+
+#: lib/timevar.c:318
+msgid "wall clock"
+msgstr "掛鐘"
+
+#: lib/w32spawn.h:49
+#, c-format
+msgid "_open_osfhandle failed"
+msgstr "_open_osfhandle 失敗"
+
+#: lib/w32spawn.h:90
+#, c-format
+msgid "cannot restore fd %d: dup2 failed"
+msgstr "無法復原 fd %d:dup2 失敗"
+
+#: lib/wait-process.c:231 lib/wait-process.c:263 lib/wait-process.c:325
+#, c-format
+msgid "%s subprocess"
+msgstr "%s 子執行程序"
+
+#: lib/wait-process.c:282 lib/wait-process.c:354
+#, c-format
+msgid "%s subprocess got fatal signal %d"
+msgstr "%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: 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 " [選項…]"
+
+#~ 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"
+
+#~ 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 "秒"
+
+#~ msgid "hang for SECS seconds (default 3600)"
+#~ msgstr "掛斷秒數(預設 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 file %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 "cannot open backup file %s for writing"
+#~ 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 mono"
+#~ msgstr "未找到 C# 編譯器,嘗試安裝 mono"
+
+#~ msgid "C# virtual machine not found, try installing mono"
+#~ msgstr "未找到 C# 虛擬機,嘗試安裝 mono"
+
+#~ msgid "unbalanced ["
+#~ msgstr "不對稱的 ["
+
+#~ msgid "invalid character class"
+#~ msgstr "字元類型無效"
+
+#~ msgid "character class syntax is [[:space:]], not [:space:]"
+#~ msgstr "字元類型語法為 [[:space:]] 而非 [:space:]"
+
+#~ msgid "unfinished \\ escape"
+#~ msgstr "未完成的 \\ 跳脫字元"
+
+#~ msgid "invalid content of \\{\\}"
+#~ msgstr "\\{\\} 的內容無效"
+
+#~ msgid "regular expression too big"
+#~ msgstr "正規表示式過長"
+
+#~ msgid "unbalanced ("
+#~ msgstr "不對稱的 ("
+
+#~ msgid "no syntax specified"
+#~ msgstr "未指定語法"
+
+#~ msgid "unbalanced )"
+#~ msgstr "不對稱的 )"
+
+#~ msgid "regular empty file"
+#~ msgstr "一般空白檔案"
+
+#~ msgid "regular file"
+#~ msgstr "一般檔案"
+
+#~ msgid "directory"
+#~ msgstr "目錄"
+
+#~ msgid "symbolic link"
+#~ msgstr "符號連結"
+
+#~ msgid "message queue"
+#~ msgstr "訊息佇列"
+
+#~ msgid "semaphore"
+#~ msgstr "旗號"
+
+#~ msgid "shared memory object"
+#~ msgstr "共用記憶體物件"
+
+#~ msgid "typed memory object"
+#~ msgstr "具類型記憶體物件"
+
+#~ msgid "block special file"
+#~ msgstr "區塊特殊檔案"
+
+#~ msgid "character special file"
+#~ msgstr "字元特殊檔案"
+
+#~ msgid "contiguous data"
+#~ msgstr "連續資料"
+
+#~ msgid "fifo"
+#~ msgstr "fifo"
+
+#~ msgid "door"
+#~ msgstr "門 (door)"
+
+#~ msgid "multiplexed block special file"
+#~ msgstr "多工區塊特殊檔"
+
+#~ msgid "multiplexed character special file"
+#~ msgstr "多工字元特殊檔"
+
+#~ msgid "multiplexed file"
+#~ msgstr "多工檔案"
+
+#~ msgid "named file"
+#~ msgstr "命名檔案"
+
+#~ msgid "network special file"
+#~ msgstr "網路特殊檔案"
+
+#~ msgid "migrated file with data"
+#~ msgstr "移轉檔(含資料)"
+
+#~ msgid "migrated file without data"
+#~ msgstr "移轉檔(不含資料)"
+
+#~ msgid "port"
+#~ msgstr "連線埠"
+
+#~ msgid "socket"
+#~ msgstr "socket"
+
+#~ msgid "whiteout"
+#~ msgstr "whiteout"
+
+#~ msgid "weird file"
+#~ msgstr "不正常檔案"
+
+#~ msgid "Address family for hostname not supported"
+#~ msgstr "不支援主機名稱的位址家族"
+
+#~ 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 "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,或設定 $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 stat %s"
+#~ msgstr "無法取得 %s 的資訊"
+
+#~ 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 "creation of threads failed"
+#~ msgstr "建立執行緒失敗"
+
+#~ 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 "掛斷"
+
+#~ msgid "Interrupt"
+#~ msgstr "中止"
+
+#~ msgid "Quit"
+#~ msgstr "結束"
+
+#~ msgid "Illegal instruction"
+#~ msgstr "無效指令"
+
+#~ msgid "Trace/breakpoint trap"
+#~ msgstr "追蹤 / 斷點陷阱"
+
+#~ msgid "Aborted"
+#~ msgstr "取消"
+
+#~ msgid "Floating point exception"
+#~ msgstr "期望浮點數"
+
+#~ msgid "Killed"
+#~ msgstr "強制結束"
+
+#~ msgid "Bus error"
+#~ msgstr "匯流排錯誤"
+
+#~ msgid "Segmentation fault"
+#~ msgstr "程式記憶體區段錯誤"
+
+#~ msgid "Broken pipe"
+#~ msgstr "管線損壞"
+
+#~ msgid "Alarm clock"
+#~ msgstr "鬧鐘"
+
+#~ msgid "Terminated"
+#~ msgstr "終止"
+
+#~ 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 "已變更視窗"
+
+#~ 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 "寫入已關閉管線或 socket 時發生錯誤"
+
+#~ 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 ""
+#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\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"
+#~ msgstr ""
+#~ "GPLv3+ 授權:GNU GPL 第三版或更新版本 <%s>。\n"
+#~ "此為自由軟體:您能自由變更及重散佈。\n"
+#~ "在法律所允許的範圍之內「沒有任何保證」。\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、%s、\n"
+#~ "%s、%s 和 %s 編寫。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "and %s.\n"
+#~ msgstr ""
+#~ "由 %s、%s、%s、%s、\n"
+#~ "%s、%s、%s 和 %s 編寫。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, and %s.\n"
+#~ msgstr ""
+#~ "由 %s、%s、%s、%s、\n"
+#~ "%s、%s、%s、%s\n"
+#~ "和 %s 編寫。\n"
+
+#~ msgid ""
+#~ "Written by %s, %s, %s,\n"
+#~ "%s, %s, %s, %s,\n"
+#~ "%s, %s, and others.\n"
+#~ msgstr ""
+#~ "由 %s、%s、%s、%s、\n"
+#~ "%s、%s、%s、%s\n"
+#~ "和 %s 等人編寫。\n"
+
+#~ msgid "Report bugs to: %s\n"
+#~ msgstr "匯報錯誤至:%s\n"
+
+#~ msgid "Report %s bugs to: %s\n"
+#~ msgstr "請將 %s 的臭蟲匯報至:%s\n"
+
+#~ msgid "%s home page: <%s>\n"
+#~ msgstr "%s 首頁:<%s>\n"
+
+#~ msgid "General help using GNU software: <%s>\n"
+#~ msgstr "使用 GNU 軟體的一般說明:<%s>\n"
+
+#~ msgid "failed to set file descriptor text/binary mode"
+#~ msgstr "無法將檔案描述符設定成文字 / 二進位模式"
+
+#~ msgid "stdin"
+#~ msgstr "標準輸入"
+
+#~ msgid "stdout"
+#~ msgstr "標準輸出"
+
+#~ msgid "stderr"
+#~ msgstr "標準錯誤"
+
+#~ msgid "unknown stream"
+#~ msgstr "未知串流"
+
+#~ msgid "failed to reopen %s with mode %s"
+#~ msgstr "無法使用 %2$s 模式重開啟 %1$s"
+
+#~ msgid "string comparison failed"
+#~ msgstr "比較字串失敗"
+
+#~ 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 "standard file descriptors"
+#~ msgstr "標準檔案描述符"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "%s%s 參數「%s」無效"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "%s%s 參數「%s」有無效後綴"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s 參數「%s」過長"
+
+#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s 首頁:<https://www.gnu.org/software/%s/>\n"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s:選項‘--%s’不可配合參數使用\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s:無法識別的選項‘--%s’\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:不合法的選項 ─ %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s:選項‘-W %s’不明確\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:選項‘-W %s’不可配合參數使用\n"
+
+#, fuzzy
+#~ msgid "block size"
+#~ msgstr "區塊特殊檔案"
+
+#~ msgid "%s exists but is not a directory"
+#~ msgstr "%s已存在但不是目錄"
+
+#~ msgid "cannot change owner and/or group of %s"
+#~ msgstr "無法更改%s的擁有者和/或所屬群組"
+
+#~ msgid "cannot chdir to directory %s"
+#~ msgstr "無法進入%s目錄"
+
+#~ msgid "cannot get the login group of a numeric UID"
+#~ msgstr "無法取得 UID 數值所代表的登入群組"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "This is free software.  You may redistribute copies of it under the terms "
+#~ "of\n"
+#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
+#~ "There is NO WARRANTY, to the extent permitted by law.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "本程式是自由軟體;你可以根據 Free Software Foundation 所公佈的 GNU\n"
+#~ "General Public License 第二版或(自由選擇)較新的版本中的條款去重新\n"
+#~ "散佈及/或修改本軟體。\n"
+#~ "\n"
diff --git a/lib/Makefile.am b/lib/Makefile.am
deleted file mode 100644
index 1abfb75..0000000
--- a/lib/Makefile.am
+++ /dev/null
@@ -1,55 +0,0 @@
-# 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/>.
-
-AM_CFLAGS =
-AM_CPPFLAGS =
-BUILT_SOURCES =
-CLEANFILES =
-EXTRA_DIST =
-MOSTLYCLEANDIRS =
-MOSTLYCLEANFILES =
-SUFFIXES =
-noinst_LIBRARIES =
-
-include gnulib.mk
-
-AM_CFLAGS += $(WARN_CFLAGS)
-
-# 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
-
-# Non-gnulib sources in Bison's internal library.
-libbison_a_SOURCES += \
-  get-errno.h get-errno.c \
-  $(bitsets_sources) $(additional_bitsets_sources) $(timevars_sources)
-
-# 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
deleted file mode 100644
index 1fe885d..0000000
--- a/lib/Makefile.in
+++ /dev/null
@@ -1,3596 +0,0 @@
-# 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@
-
-# 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@
-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@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(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/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 = 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 = 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)"
-LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
-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 =
-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_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)
-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 $@
-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@
-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@
-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
-# -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".
-AM_CPPFLAGS = -I$(top_builddir)/intl
-
-# 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	\
-  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
-
-
-# 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: .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 ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	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 \
-	  *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;
-$(srcdir)/gnulib.mk:
-
-$(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):
-
-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)
-	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	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)'; test -n "$(libdir)" || list=; \
-	for p in $$list; do \
-	  if test -f $$p; then \
-	    $(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)'; 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) $(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)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@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)/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@	$(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@	$(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@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@	$(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; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES) config.in.h $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	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; 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) config.in.h $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	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; 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
-
-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: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LIBRARIES) config.h all-local
-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:
-	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 "$(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)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-local 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-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)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-local
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-libLIBRARIES uninstall-local
-
-.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-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.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.
-@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: 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/_Noreturn.h b/lib/_Noreturn.h
new file mode 100644
index 0000000..7570f82
--- /dev/null
+++ b/lib/_Noreturn.h
@@ -0,0 +1,40 @@
+/* A C macro for declaring that a function does not return.
+   Copyright (C) 2011-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _Noreturn
+# if (defined __cplusplus \
+      && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+          || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+      && 0)
+    /* [[noreturn]] is not practically usable, because with it the syntax
+         extern _Noreturn void func (...);
+       would not be valid; such a declaration would only be valid with 'extern'
+       and '_Noreturn' swapped, or without the 'extern' keyword.  However, some
+       AIX system header files and several gnulib header files use precisely
+       this syntax with 'extern'.  */
+#  define _Noreturn [[noreturn]]
+# elif ((!defined __cplusplus || defined __clang__)                     \
+        && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0)  \
+            || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)))
+   /* _Noreturn works as-is.  */
+# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
diff --git a/lib/alignof.h b/lib/alignof.h
new file mode 100644
index 0000000..46f4ad0
--- /dev/null
+++ b/lib/alignof.h
@@ -0,0 +1,50 @@
+/* Determine alignment of types.
+   Copyright (C) 2003-2004, 2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ALIGNOF_H
+#define _ALIGNOF_H
+
+#include <stddef.h>
+
+/* alignof_slot (TYPE)
+   Determine the alignment of a structure slot (field) of a given type,
+   at compile time.  Note that the result depends on the ABI.
+   This is the same as alignof (TYPE) and _Alignof (TYPE), defined in
+   <stdalign.h> if __alignof_is_defined is 1.
+   Note: The result cannot be used as a value for an 'enum' constant,
+   due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc.  */
+#if defined __cplusplus
+  template <class type> struct alignof_helper { char __slot1; type __slot2; };
+# define alignof_slot(type) offsetof (alignof_helper<type>, __slot2)
+#else
+# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#endif
+
+/* alignof_type (TYPE)
+   Determine the good alignment of an object of the given type at compile time.
+   Note that this is not necessarily the same as alignof_slot(type).
+   For example, with GNU C on x86 platforms: alignof_type(double) = 8, but
+   - when -malign-double is not specified:  alignof_slot(double) = 4,
+   - when -malign-double is specified:      alignof_slot(double) = 8.
+   Note: The result cannot be used as a value for an 'enum' constant,
+   due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc.  */
+#if defined __GNUC__ || defined __IBM__ALIGNOF__
+# define alignof_type __alignof__
+#else
+# define alignof_type alignof_slot
+#endif
+
+#endif /* _ALIGNOF_H */
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
index d20f4b8..a581d58 100644
--- a/lib/alloca.in.h
+++ b/lib/alloca.in.h
@@ -1,6 +1,6 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2012 Free Software Foundation,
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2019 Free Software Foundation,
    Inc.
 
    This program is free software; you can redistribute it and/or modify it
@@ -15,7 +15,7 @@
 
    You should have received a copy of the GNU General Public
    License along with this program; if not, see
-   <http://www.gnu.org/licenses/>.
+   <https://www.gnu.org/licenses/>.
   */
 
 /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
@@ -36,6 +36,12 @@
 
 #ifndef alloca
 # ifdef __GNUC__
+   /* Some version of mingw have an <alloca.h> that causes trouble when
+      included after 'alloca' gets defined as a macro.  As a workaround, include
+      this <alloca.h> first and define 'alloca' as a macro afterwards.  */
+#  if (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@
+#   include_next <alloca.h>
+#  endif
 #  define alloca __builtin_alloca
 # elif defined _AIX
 #  define alloca __alloca
@@ -51,6 +57,8 @@
 void *_alloca (unsigned short);
 #  pragma intrinsic (_alloca)
 #  define alloca _alloca
+# elif defined __MVS__
+#  include <stdlib.h>
 # else
 #  include <stddef.h>
 #  ifdef  __cplusplus
diff --git a/lib/allocator.c b/lib/allocator.c
new file mode 100644
index 0000000..2c1a3da
--- /dev/null
+++ b/lib/allocator.c
@@ -0,0 +1,5 @@
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+#include "allocator.h"
+#include <stdlib.h>
+struct allocator const stdlib_allocator = { malloc, realloc, free, NULL };
diff --git a/lib/allocator.h b/lib/allocator.h
new file mode 100644
index 0000000..5a632ba
--- /dev/null
+++ b/lib/allocator.h
@@ -0,0 +1,58 @@
+/* Memory allocators such as malloc+free.
+
+   Copyright (C) 2011-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef _GL_ALLOCATOR_H
+#define _GL_ALLOCATOR_H
+
+#include <stddef.h>
+
+/* An object describing a memory allocator family.  */
+
+struct allocator
+{
+  /* Do not use GCC attributes such as __attribute__ ((malloc)) with
+     the function types pointed at by these members, because these
+     attributes do not work with pointers to functions.  See
+     <https://lists.gnu.org/r/bug-gnulib/2011-04/msg00007.html>.  */
+
+  /* Call ALLOCATE to allocate memory, like 'malloc'.  On failure ALLOCATE
+     should return NULL, though not necessarily set errno.  When given
+     a zero size it may return NULL even if successful.  */
+  void *(*allocate) (size_t);
+
+  /* If nonnull, call REALLOCATE to reallocate memory, like 'realloc'.
+     On failure REALLOCATE should return NULL, though not necessarily set
+     errno.  When given a zero size it may return NULL even if
+     successful.  */
+  void *(*reallocate) (void *, size_t);
+
+  /* Call FREE to free memory, like 'free'.  */
+  void (*free) (void *);
+
+  /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (...,
+     SIZE) fails.  DIE should not return.  SIZE should equal SIZE_MAX
+     if size_t overflow was detected while calculating sizes to be
+     passed to MALLOC or REALLOC.  */
+  void (*die) (size_t);
+};
+
+/* An allocator using the stdlib functions and a null DIE function.  */
+extern struct allocator const stdlib_allocator;
+
+#endif /* _GL_ALLOCATOR_H */
diff --git a/lib/areadlink.c b/lib/areadlink.c
new file mode 100644
index 0000000..0594356
--- /dev/null
+++ b/lib/areadlink.c
@@ -0,0 +1,56 @@
+/* areadlink.c -- readlink wrapper to return the link name in malloc'd storage
+   Unlike xreadlink and xreadlink_with_size, don't ever call exit.
+
+   Copyright (C) 2001, 2003-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering <jim@meyering.net>
+   and Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "areadlink.h"
+
+#include "careadlinkat.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Get the symbolic link value of FILENAME and put it into BUFFER, with
+   size BUFFER_SIZE.  This function acts like readlink but has
+   readlinkat's signature.  */
+static ssize_t
+careadlinkatcwd (int fd, char const *filename, char *buffer,
+                 size_t buffer_size)
+{
+  /* FD must be AT_FDCWD here, otherwise the caller is using this
+     function in contexts it was not meant for.  */
+  if (fd != AT_FDCWD)
+    abort ();
+  return readlink (filename, buffer, buffer_size);
+}
+
+/* Call readlink to get the symbolic link value of FILENAME.
+   Return a pointer to that NUL-terminated string in malloc'd storage.
+   If readlink fails, return NULL and set errno.
+   If allocation fails, or if the link value is longer than SIZE_MAX :-),
+   return NULL and set errno to ENOMEM.  */
+
+char *
+areadlink (char const *filename)
+{
+  return careadlinkat (AT_FDCWD, filename, NULL, 0, NULL, careadlinkatcwd);
+}
diff --git a/lib/areadlink.h b/lib/areadlink.h
new file mode 100644
index 0000000..ddcd06d
--- /dev/null
+++ b/lib/areadlink.h
@@ -0,0 +1,33 @@
+/* Read symbolic links without size limitation.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering <jim@meyering.net>  */
+
+#include <stddef.h>
+
+extern char *areadlink (char const *filename);
+extern char *areadlink_with_size (char const *filename, size_t size_hint);
+
+#if GNULIB_AREADLINKAT
+extern char *areadlinkat (int fd, char const *filename);
+#endif
+
+#if GNULIB_AREADLINKAT_WITH_SIZE
+extern char *areadlinkat_with_size (int fd, char const *filename,
+                                    size_t size_hint);
+#endif
diff --git a/build-aux/snippet/arg-nonnull.h b/lib/arg-nonnull.h
similarity index 88%
rename from build-aux/snippet/arg-nonnull.h
rename to lib/arg-nonnull.h
index 3a9dd26..ad8c26c 100644
--- a/build-aux/snippet/arg-nonnull.h
+++ b/lib/arg-nonnull.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://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.
diff --git a/lib/argmatch.c b/lib/argmatch.c
index a713364..9eeb451 100644
--- a/lib/argmatch.c
+++ b/lib/argmatch.c
@@ -1,6 +1,6 @@
 /* argmatch.c -- find a match for a string in an array
 
-   Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2012 Free Software
+   Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@ai.mit.edu>
    Modified by Akim Demaille <demaille@inf.enst.fr> */
@@ -29,12 +29,11 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "error.h"
 #include "quotearg.h"
-#include "quote.h"
+#include "getprogname.h"
 
 #if USE_UNLOCKED_IO
 # include "unlocked-io.h"
@@ -81,7 +80,7 @@
 
 ptrdiff_t
 argmatch (const char *arg, const char *const *arglist,
-          const char *vallist, size_t valsize)
+          const void *vallist, size_t valsize)
 {
   size_t i;                     /* Temporary index in ARGLIST.  */
   size_t arglen;                /* Length of ARG.  */
@@ -105,8 +104,8 @@
             {
               /* Second nonexact match found.  */
               if (vallist == NULL
-                  || memcmp (vallist + valsize * matchind,
-                             vallist + valsize * i, valsize))
+                  || memcmp ((char const *) vallist + valsize * matchind,
+                             (char const *) vallist + valsize * i, valsize))
                 {
                   /* There is a real ambiguity, or we could not
                      disambiguate. */
@@ -143,7 +142,7 @@
    VALSIZE is the size of the elements of VALLIST */
 void
 argmatch_valid (const char *const *arglist,
-                const char *vallist, size_t valsize)
+                const void *vallist, size_t valsize)
 {
   size_t i;
   const char *last_val = NULL;
@@ -153,10 +152,10 @@
   fputs (_("Valid arguments are:"), stderr);
   for (i = 0; arglist[i]; i++)
     if ((i == 0)
-        || memcmp (last_val, vallist + valsize * i, valsize))
+        || memcmp (last_val, (char const *) vallist + valsize * i, valsize))
       {
         fprintf (stderr, "\n  - %s", quote (arglist[i]));
-        last_val = vallist + valsize * i;
+        last_val = (char const *) vallist + valsize * i;
       }
     else
       {
@@ -174,7 +173,7 @@
 ptrdiff_t
 __xargmatch_internal (const char *context,
                       const char *arg, const char *const *arglist,
-                      const char *vallist, size_t valsize,
+                      const void *vallist, size_t valsize,
                       argmatch_exit_fn exit_fn)
 {
   ptrdiff_t res = argmatch (arg, arglist, vallist, valsize);
@@ -193,14 +192,14 @@
 /* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
    return the first corresponding argument in ARGLIST */
 const char *
-argmatch_to_argument (const char *value,
+argmatch_to_argument (const void *value,
                       const char *const *arglist,
-                      const char *vallist, size_t valsize)
+                      const void *vallist, size_t valsize)
 {
   size_t i;
 
   for (i = 0; arglist[i]; i++)
-    if (!memcmp (value, vallist + valsize * i, valsize))
+    if (!memcmp (value, (char const *) vallist + valsize * i, valsize))
       return arglist[i];
   return NULL;
 }
@@ -209,7 +208,6 @@
 /*
  * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
  */
-char *program_name;
 
 /* When to make backup files.  */
 enum backup_type
@@ -253,11 +251,9 @@
   const char *cp;
   enum backup_type backup_type = no_backups;
 
-  program_name = (char *) argv[0];
-
   if (argc > 2)
     {
-      fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name);
+      fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", getprogname ());
       exit (1);
     }
 
@@ -266,7 +262,7 @@
                              backup_args, backup_vals);
 
   if (argc == 2)
-    backup_type = XARGMATCH (program_name, argv[1],
+    backup_type = XARGMATCH (getprogname (), argv[1],
                              backup_args, backup_vals);
 
   printf ("The version control is '%s'\n",
diff --git a/lib/argmatch.h b/lib/argmatch.h
index 7e88696..897fa41 100644
--- a/lib/argmatch.h
+++ b/lib/argmatch.h
@@ -1,6 +1,6 @@
 /* argmatch.h -- definitions and prototypes for argmatch.c
 
-   Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2012 Free Software
+   Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@ai.mit.edu>
    Modified by Akim Demaille <demaille@inf.enst.fr> */
@@ -22,10 +22,20 @@
 #ifndef ARGMATCH_H_
 # define ARGMATCH_H_ 1
 
+# include <limits.h>
+# include <stdbool.h>
 # include <stddef.h>
+# include <stdio.h>
+# include <string.h> /* memcmp */
 
+# include "gettext.h"
+# include "quote.h"
 # include "verify.h"
 
+# ifdef  __cplusplus
+extern "C" {
+# endif
+
 # define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
 
 /* Assert there are as many real arguments as there are values
@@ -40,10 +50,10 @@
    to the same values in VALLIST).  */
 
 ptrdiff_t argmatch (char const *arg, char const *const *arglist,
-                    char const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE;
+                    void const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE;
 
 # define ARGMATCH(Arg, Arglist, Vallist) \
-  argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
+  argmatch (Arg, Arglist, (void 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
@@ -66,10 +76,10 @@
 /* Report on stderr the list of possible arguments.  */
 
 void argmatch_valid (char const *const *arglist,
-                     char const *vallist, size_t valsize);
+                     void const *vallist, size_t valsize);
 
 # define ARGMATCH_VALID(Arglist, Vallist) \
-  argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
+  argmatch_valid (Arglist, (void const *) (Vallist), sizeof *(Vallist))
 
 
 
@@ -78,26 +88,244 @@
 
 ptrdiff_t __xargmatch_internal (char const *context,
                                 char const *arg, char const *const *arglist,
-                                char const *vallist, size_t valsize,
+                                void 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),   \
+                                    (void const *) (Vallist),   \
                                     sizeof *(Vallist),          \
                                     argmatch_die)])
 
 /* Convert a value into a corresponding argument. */
 
-char const *argmatch_to_argument (char const *value,
+char const *argmatch_to_argument (void const *value,
                                   char const *const *arglist,
-                                  char const *vallist, size_t valsize)
+                                  void 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))
+                        (void const *) (Vallist), sizeof *(Vallist))
+
+# define ARGMATCH_DEFINE_GROUP(Name, Type)                              \
+  /* The type of the values of this group.  */                          \
+  typedef Type argmatch_##Name##_type;                                  \
+                                                                        \
+  /* The size of the type of the values of this group. */               \
+  enum argmatch_##Name##_size_enum                                      \
+  {                                                                     \
+    argmatch_##Name##_size = sizeof (argmatch_##Name##_type)            \
+  };                                                                    \
+                                                                        \
+  /* Argument mapping of this group.  */                                \
+  typedef struct                                                        \
+  {                                                                     \
+    /* Argument (e.g., "simple").  */                                   \
+    const char *arg;                                                    \
+    /* Value (e.g., simple_backups).  */                                \
+    const argmatch_##Name##_type val;                                   \
+  } argmatch_##Name##_arg;                                              \
+                                                                        \
+  /* Documentation of this group.  */                                   \
+  typedef struct                                                        \
+  {                                                                     \
+    /* Argument (e.g., "simple").  */                                   \
+    const char *arg;                                                    \
+    /* Documentation (e.g., N_("always make simple backups")).  */      \
+    const char *doc;                                                    \
+  } argmatch_##Name##_doc;                                              \
+                                                                        \
+  /* All the features of an argmatch group.  */                         \
+  typedef struct                                                        \
+  {                                                                     \
+    const argmatch_##Name##_arg* args;                                  \
+    const argmatch_##Name##_doc* docs;                                  \
+                                                                        \
+    /* Printed before the usage message.  */                            \
+    const char *doc_pre;                                                \
+    /* Printed after the usage message.  */                             \
+    const char *doc_post;                                               \
+  } argmatch_##Name##_group_type;                                       \
+                                                                        \
+  /* The structure the user must build.  */                             \
+  extern const argmatch_##Name##_group_type argmatch_##Name##_group;    \
+                                                                        \
+  /* Print the documentation of this group.  */                         \
+  void argmatch_##Name##_usage (FILE *out);                             \
+                                                                        \
+  /* If nonnegative, the index I of ARG in ARGS, i.e,                   \
+     ARGS[I] == ARG.                                                    \
+     Return -1 for invalid argument, -2 for ambiguous argument. */      \
+  ptrdiff_t argmatch_##Name##_choice (const char *arg);                 \
+                                                                        \
+  /* A pointer to the corresponding value if it exists, or              \
+     report an error and exit with failure if the argument was          \
+     not recognized. */                                                 \
+  const argmatch_##Name##_type*                                         \
+  argmatch_##Name##_value (const char *context, const char *arg);       \
+                                                                        \
+  /* The first argument in ARGS that matches this value, or NULL.  */   \
+  const char *                                                          \
+  argmatch_##Name##_argument (const argmatch_##Name##_type *val);       \
+                                                                        \
+  ptrdiff_t                                                             \
+  argmatch_##Name##_choice (const char *arg)                            \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    size_t size = argmatch_##Name##_size;                               \
+    ptrdiff_t res = -1;      /* Index of first nonexact match.  */      \
+    bool ambiguous = false;  /* Whether multiple nonexact match(es). */ \
+    size_t arglen = strlen (arg);                                       \
+                                                                        \
+    /* Test all elements for either exact match or abbreviated          \
+       matches.  */                                                     \
+    for (size_t i = 0; g->args[i].arg; i++)                             \
+      if (!strncmp (g->args[i].arg, arg, arglen))                       \
+        {                                                               \
+          if (strlen (g->args[i].arg) == arglen)                        \
+            /* Exact match found.  */                                   \
+            return i;                                                   \
+          else if (res == -1)                                           \
+            /* First nonexact match found.  */                          \
+            res = i;                                                    \
+          else if (memcmp (&g->args[res].val, &g->args[i].val, size))   \
+            /* Second nonexact match found.  */                         \
+            /* There is a real ambiguity, or we could not               \
+               disambiguate. */                                         \
+            ambiguous = true;                                           \
+        }                                                               \
+    return ambiguous ? -2 : res;                                        \
+  }                                                                     \
+                                                                        \
+  const char *                                                          \
+  argmatch_##Name##_argument (const argmatch_##Name##_type *val)        \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    size_t size = argmatch_##Name##_size;                               \
+    for (size_t i = 0; g->args[i].arg; i++)                             \
+      if (!memcmp (val, &g->args[i].val, size))                         \
+        return g->args[i].arg;                                          \
+    return NULL;                                                        \
+  }                                                                     \
+                                                                        \
+  /* List the valid values of this group. */                            \
+  static void                                                           \
+  argmatch_##Name##_valid (FILE *out)                                   \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    size_t size = argmatch_##Name##_size;                               \
+                                                                        \
+    /* Try to put synonyms on the same line.  Synonyms are expected     \
+       to follow each other. */                                         \
+    fputs (gettext ("Valid arguments are:"), out);                      \
+    for (int i = 0; g->args[i].arg; i++)                                \
+      if (i == 0                                                        \
+          || memcmp (&g->args[i-1].val, &g->args[i].val, size))         \
+        fprintf (out, "\n  - %s", quote (g->args[i].arg));              \
+      else                                                              \
+        fprintf (out, ", %s", quote (g->args[i].arg));                  \
+    putc ('\n', out);                                                   \
+  }                                                                     \
+                                                                        \
+  const argmatch_##Name##_type*                                         \
+  argmatch_##Name##_value (const char *context, const char *arg)        \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    ptrdiff_t res = argmatch_##Name##_choice (arg);                     \
+    if (res < 0)                                                        \
+      {                                                                 \
+        argmatch_invalid (context, arg, res);                           \
+        argmatch_##Name##_valid (stderr);                               \
+        argmatch_die ();                                                \
+      }                                                                 \
+    return &g->args[res].val;                                           \
+  }                                                                     \
+                                                                        \
+  /* The column in which the documentation is displayed.                \
+     The leftmost possible, but no more than 20. */                     \
+  static int                                                            \
+  argmatch_##Name##_doc_col (void)                                      \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    size_t size = argmatch_##Name##_size;                               \
+    int res = 0;                                                        \
+    for (int i = 0; g->docs[i].arg; ++i)                                \
+      {                                                                 \
+        int col = 4;                                                    \
+        int ival = argmatch_##Name##_choice (g->docs[i].arg);           \
+        if (ival < 0)                                                   \
+          /* Pseudo argument, display it. */                            \
+          col += strlen (g->docs[i].arg);                               \
+        else                                                            \
+          /* Genuine argument, display it with its synonyms. */         \
+          for (int j = 0; g->args[j].arg; ++j)                          \
+            if (! memcmp (&g->args[ival].val, &g->args[j].val, size))   \
+              col += (col == 4 ? 0 : 2) + strlen (g->args[j].arg);      \
+        if (res <= col)                                                 \
+          res = col <= 20 ? col : 20;                                   \
+      }                                                                 \
+    return res ? res : 20;                                              \
+  }                                                                     \
+                                                                        \
+  void                                                                  \
+  argmatch_##Name##_usage (FILE *out)                                   \
+  {                                                                     \
+    const argmatch_##Name##_group_type *g = &argmatch_##Name##_group;   \
+    size_t size = argmatch_##Name##_size;                               \
+    /* Width of the screen.  Help2man does not seem to support          \
+       arguments on several lines, so in that case pretend a very       \
+       large width. */                                                  \
+    const int screen_width = getenv ("HELP2MAN") ? INT_MAX : 80;        \
+    if (g->doc_pre)                                                     \
+      fprintf (out, "%s\n", gettext (g->doc_pre));                      \
+    int doc_col = argmatch_##Name##_doc_col ();                         \
+    for (int i = 0; g->docs[i].arg; ++i)                                \
+      {                                                                 \
+        int col = 0;                                                    \
+        bool first = true;                                              \
+        int ival = argmatch_##Name##_choice (g->docs[i].arg);           \
+        if (ival < 0)                                                   \
+          /* Pseudo argument, display it. */                            \
+          col += fprintf (out,  "  %s", g->docs[i].arg);                \
+        else                                                            \
+          /* Genuine argument, display it with its synonyms. */         \
+          for (int j = 0; g->args[j].arg; ++j)                          \
+            if (! memcmp (&g->args[ival].val, &g->args[j].val, size))   \
+              {                                                         \
+                if (!first                                              \
+                    && screen_width < col + 2 + strlen (g->args[j].arg)) \
+                  {                                                     \
+                    fprintf (out, ",\n");                               \
+                    col = 0;                                            \
+                    first = true;                                       \
+                  }                                                     \
+                if (first)                                              \
+                  {                                                     \
+                    col += fprintf (out, " ");                          \
+                    first = false;                                      \
+                  }                                                     \
+                else                                                    \
+                  col += fprintf (out, ",");                            \
+                col += fprintf (out,  " %s", g->args[j].arg);           \
+              }                                                         \
+        /* The doc.  Separated by at least two spaces. */               \
+        if (doc_col < col + 2)                                          \
+          {                                                             \
+            fprintf (out, "\n");                                        \
+            col = 0;                                                    \
+          }                                                             \
+        fprintf (out, "%*s%s\n",                                        \
+                 doc_col - col, "", gettext (g->docs[i].doc));          \
+      }                                                                 \
+    if (g->doc_post)                                                    \
+      fprintf (out, "%s\n", gettext (g->doc_post));                     \
+  }
+
+# ifdef  __cplusplus
+}
+# endif
 
 #endif /* ARGMATCH_H_ */
diff --git a/lib/asnprintf.c b/lib/asnprintf.c
index f6f70c9..d2a8c09 100644
--- a/lib/asnprintf.c
+++ b/lib/asnprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 1999, 2002, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002, 2006, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/asprintf.c b/lib/asprintf.c
new file mode 100644
index 0000000..6cbd062
--- /dev/null
+++ b/lib/asprintf.c
@@ -0,0 +1,39 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBASPRINTF
+# include "vasprintf.h"
+#else
+# include <stdio.h>
+#endif
+
+#include <stdarg.h>
+
+int
+asprintf (char **resultp, const char *format, ...)
+{
+  va_list args;
+  int result;
+
+  va_start (args, format);
+  result = vasprintf (resultp, format, args);
+  va_end (args);
+  return result;
+}
diff --git a/lib/assure.h b/lib/assure.h
new file mode 100644
index 0000000..c21b6a6
--- /dev/null
+++ b/lib/assure.h
@@ -0,0 +1,37 @@
+/* Run-time assert-like macros.
+
+   Copyright (C) 2014-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef _GL_ASSURE_H
+#define _GL_ASSURE_H
+
+#include <assert.h>
+
+/* Check E's value at runtime, and report an error and abort if not.
+   However, do nothing if NDEBUG is defined.
+
+   Unlike standard 'assert', this macro always compiles E even when NDEBUG
+   is defined, so as to catch typos and avoid some GCC warnings.  */
+
+#ifdef NDEBUG
+# define assure(E) ((void) (0 && (E)))
+#else
+# define assure(E) assert (E)
+#endif
+
+#endif
diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c
index 43ef8c2..0ae04ee 100644
--- a/lib/basename-lgpl.c
+++ b/lib/basename-lgpl.c
@@ -1,6 +1,6 @@
 /* basename.c -- return the last element in a file name
 
-   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2012 Free Software
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/basename.c b/lib/basename.c
index 5f18ffd..1b6e0ea 100644
--- a/lib/basename.c
+++ b/lib/basename.c
@@ -1,6 +1,6 @@
 /* basename.c -- return the last element in a file name
 
-   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2012 Free Software
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/binary-io.c b/lib/binary-io.c
index 8bbdb44..77490e6 100644
--- a/lib/binary-io.c
+++ b/lib/binary-io.c
@@ -1,3 +1,39 @@
+/* Binary mode I/O.
+   Copyright 2017-2019 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 <https://www.gnu.org/licenses/>.  */
+
 #include <config.h>
+
 #define BINARY_IO_INLINE _GL_EXTERN_INLINE
 #include "binary-io.h"
+
+#if defined __DJGPP__ || defined __EMX__
+# include <unistd.h>
+
+int
+set_binary_mode (int fd, int mode)
+{
+  if (isatty (fd))
+    /* If FD refers to a console (not a pipe, not a regular file),
+       O_TEXT is the only reasonable mode, both on input and on output.
+       Silently ignore the request.  If we were to return -1 here,
+       all programs that use xset_binary_mode would fail when run
+       with console input or console output.  */
+    return O_TEXT;
+  else
+    return __gl_setmode (fd, mode);
+}
+
+#endif
diff --git a/lib/binary-io.h b/lib/binary-io.h
index 0f376e3..8d4133b 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -1,5 +1,5 @@
 /* Binary mode I/O.
-   Copyright (C) 2001, 2003, 2005, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _BINARY_H
 #define _BINARY_H
@@ -25,20 +25,20 @@
    so we include it here first.  */
 #include <stdio.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _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
+#  define __gl_setmode setmode
 # else
-#  define set_binary_mode _setmode
+#  define __gl_setmode _setmode
 #  undef fileno
 #  define fileno _fileno
 # endif
@@ -47,26 +47,31 @@
   /* 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)
+__gl_setmode (int fd _GL_UNUSED, int mode _GL_UNUSED)
 {
-  (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))
+/* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY.
+   Return the old mode if successful, -1 (setting errno) on failure.
+   Ordinarily this function would be called 'setmode', since that is
+   its name on MS-Windows, but it is called 'set_binary_mode' here
+   to avoid colliding with a BSD function of another name.  */
+
+#if defined __DJGPP__ || defined __EMX__
+extern int set_binary_mode (int fd, int mode);
 #else
-# define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
+BINARY_IO_INLINE int
+set_binary_mode (int fd, int mode)
+{
+  return __gl_setmode (fd, mode);
+}
 #endif
 
+/* This macro is obsolescent.  */
+#define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
+
 _GL_INLINE_HEADER_END
 
 #endif /* _BINARY_H */
diff --git a/lib/bitrotate.h b/lib/bitrotate.h
index 8a67558..04b9083 100644
--- a/lib/bitrotate.h
+++ b/lib/bitrotate.h
@@ -1,5 +1,5 @@
 /* bitrotate.h - Rotate bits in integers
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Simon Josefsson <simon@josefsson.org>, 2008. */
 
@@ -23,6 +23,9 @@
 #include <stdint.h>
 #include <sys/types.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef BITROTATE_INLINE
 # define BITROTATE_INLINE _GL_INLINE
@@ -92,7 +95,8 @@
 BITROTATE_INLINE uint16_t
 rotl16 (uint16_t x, int n)
 {
-  return ((x << n) | (x >> (16 - n))) & UINT16_MAX;
+  return (((unsigned int) x << n) | ((unsigned int) x >> (16 - n)))
+         & UINT16_MAX;
 }
 
 /* Given an unsigned 16-bit argument X, return the value corresponding
@@ -103,7 +107,8 @@
 BITROTATE_INLINE uint16_t
 rotr16 (uint16_t x, int n)
 {
-  return ((x >> n) | (x << (16 - n))) & UINT16_MAX;
+  return (((unsigned int) x >> n) | ((unsigned int) x << (16 - n)))
+         & UINT16_MAX;
 }
 
 /* Given an unsigned 8-bit argument X, return the value corresponding
@@ -114,7 +119,7 @@
 BITROTATE_INLINE uint8_t
 rotl8 (uint8_t x, int n)
 {
-  return ((x << n) | (x >> (8 - n))) & UINT8_MAX;
+  return (((unsigned int) x << n) | ((unsigned int) x >> (8 - n))) & UINT8_MAX;
 }
 
 /* Given an unsigned 8-bit argument X, return the value corresponding
@@ -125,7 +130,7 @@
 BITROTATE_INLINE uint8_t
 rotr8 (uint8_t x, int n)
 {
-  return ((x >> n) | (x << (8 - n))) & UINT8_MAX;
+  return (((unsigned int) x >> n) | ((unsigned int) x << (8 - n))) & UINT8_MAX;
 }
 
 _GL_INLINE_HEADER_END
diff --git a/lib/bitset.c b/lib/bitset.c
index d64d5f8..c3fe923 100644
--- a/lib/bitset.c
+++ b/lib/bitset.c
@@ -1,6 +1,6 @@
 /* General bitsets.
 
-   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2006, 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -23,13 +23,15 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include "abitset.h"
-#include "lbitset.h"
-#include "ebitset.h"
-#include "vbitset.h"
-#include "bitset_stats.h"
+
 #include "obstack.h"
 
+#include "bitset/array.h"
+#include "bitset/list.h"
+#include "bitset/stats.h"
+#include "bitset/table.h"
+#include "bitset/vector.h"
+
 const char * const bitset_type_names[] = BITSET_TYPE_NAMES;
 
 
@@ -38,8 +40,6 @@
 size_t
 bitset_bytes (enum bitset_type type, bitset_bindex n_bits)
 {
-  size_t bytes;
-
   if (bitset_stats_enabled)
     return bitset_stats_bytes ();
 
@@ -49,23 +49,17 @@
       abort ();
 
     case BITSET_ARRAY:
-      bytes = abitset_bytes (n_bits);
-      break;
+      return abitset_bytes (n_bits);
 
     case BITSET_LIST:
-      bytes = lbitset_bytes (n_bits);
-      break;
+      return lbitset_bytes (n_bits);
 
     case BITSET_TABLE:
-      bytes = ebitset_bytes (n_bits);
-      break;
+      return tbitset_bytes (n_bits);
 
-    case BITSET_VARRAY:
-      bytes = vbitset_bytes (n_bits);
-      break;
+    case BITSET_VECTOR:
+      return vbitset_bytes (n_bits);
     }
-
-  return bytes;
 }
 
 
@@ -88,9 +82,9 @@
       return lbitset_init (bset, n_bits);
 
     case BITSET_TABLE:
-      return ebitset_init (bset, n_bits);
+      return tbitset_init (bset, n_bits);
 
-    case BITSET_VARRAY:
+    case BITSET_VECTOR:
       return vbitset_init (bset, n_bits);
     }
 }
@@ -100,7 +94,7 @@
    specified by ATTR.  For variable size bitsets, N_BITS is only a
    hint and may be zero.  */
 enum bitset_type
-bitset_type_choose (bitset_bindex n_bits ATTRIBUTE_UNUSED, unsigned int attr)
+bitset_type_choose (bitset_bindex n_bits ATTRIBUTE_UNUSED, unsigned attr)
 {
   /* Check attributes.  */
   if (attr & BITSET_FIXED && attr & BITSET_VARIABLE)
@@ -114,7 +108,7 @@
 
   /* If no attributes selected, choose a good compromise.  */
   if (!attr)
-    return BITSET_VARRAY;
+    return BITSET_VECTOR;
 
   if (attr & BITSET_SPARSE)
     return BITSET_LIST;
@@ -125,7 +119,7 @@
   if (attr & BITSET_GREEDY)
     return BITSET_TABLE;
 
-  return BITSET_VARRAY;
+  return BITSET_VECTOR;
 }
 
 
@@ -133,12 +127,9 @@
 bitset
 bitset_alloc (bitset_bindex n_bits, enum bitset_type type)
 {
-  size_t bytes;
-  bitset bset;
+  size_t bytes = bitset_bytes (type, n_bits);
 
-  bytes = bitset_bytes (type, n_bits);
-
-  bset = xcalloc (1, bytes);
+  bitset bset = xzalloc (bytes);
 
   /* The cache is disabled until some elements are allocated.  If we
      have variable length arrays, then we may need to allocate a dummy
@@ -151,14 +142,11 @@
 /* Create a bitset of N_BITS of type TYPE.  */
 bitset
 bitset_obstack_alloc (struct obstack *bobstack,
-		      bitset_bindex n_bits, enum bitset_type type)
+                      bitset_bindex n_bits, enum bitset_type type)
 {
-  size_t bytes;
-  bitset bset;
+  size_t bytes = bitset_bytes (type, n_bits);
 
-  bytes = bitset_bytes (type, n_bits);
-
-  bset = obstack_alloc (bobstack, bytes);
+  bitset bset = obstack_alloc (bobstack, bytes);
   memset (bset, 0, bytes);
 
   return bitset_init (bset, n_bits, type);
@@ -168,11 +156,9 @@
 /* Create a bitset of N_BITS and with attribute hints specified by
    ATTR.  */
 bitset
-bitset_create (bitset_bindex n_bits, unsigned int attr)
+bitset_create (bitset_bindex n_bits, unsigned attr)
 {
-  enum bitset_type type;
-
-  type = bitset_type_choose (n_bits, attr);
+  enum bitset_type type = bitset_type_choose (n_bits, attr);
 
   return bitset_alloc (n_bits, type);
 }
@@ -182,8 +168,11 @@
 void
 bitset_free (bitset bset)
 {
-  BITSET_FREE_ (bset);
-  free (bset);
+  if (bset)
+    {
+      BITSET_FREE_ (bset);
+      free (bset);
+    }
 }
 
 
@@ -191,7 +180,8 @@
 void
 bitset_obstack_free (bitset bset)
 {
-  BITSET_FREE_ (bset);
+  if (bset)
+    BITSET_FREE_ (bset);
 }
 
 
@@ -199,11 +189,9 @@
 enum bitset_type
 bitset_type_get (bitset bset)
 {
-   enum bitset_type type;
-
-   type = BITSET_TYPE_ (bset);
+   enum bitset_type type = BITSET_TYPE_ (bset);
    if (type != BITSET_STATS)
-      return type;
+     return type;
 
    return bitset_stats_type_get (bset);
 }
@@ -213,9 +201,7 @@
 const char *
 bitset_type_name_get (bitset bset)
 {
-  enum bitset_type type;
-
-  type = bitset_type_get (bset);
+  enum bitset_type type = bitset_type_get (bset);
 
   return bitset_type_names[type];
 }
@@ -226,9 +212,8 @@
 bitset_bindex
 bitset_next (bitset src, bitset_bindex bitno)
 {
-  bitset_bindex val;
   bitset_bindex next = bitno;
-
+  bitset_bindex val;
   if (!bitset_list (src, &val, 1, &next))
     return BITSET_BINDEX_MAX;
   return val;
@@ -239,7 +224,7 @@
 extern bool
 bitset_compatible_p (bitset bset1, bitset bset2)
 {
-    return BITSET_COMPATIBLE_ (bset1, bset2);
+  return BITSET_COMPATIBLE_ (bset1, bset2);
 }
 
 
@@ -248,9 +233,8 @@
 bitset_bindex
 bitset_prev (bitset src, bitset_bindex bitno)
 {
-  bitset_bindex val;
   bitset_bindex next = bitno;
-
+  bitset_bindex val;
   if (!bitset_list_reverse (src, &val, 1, &next))
     return BITSET_BINDEX_MAX;
   return val;
@@ -290,26 +274,24 @@
 static void
 bitset_print (FILE *file, bitset bset, bool verbose)
 {
-  unsigned int pos;
-  bitset_bindex i;
-  bitset_iterator iter;
-
   if (verbose)
     fprintf (file, "n_bits = %lu, set = {",
-	     (unsigned long int) bitset_size (bset));
+             (unsigned long) bitset_size (bset));
 
-  pos = 30;
+  unsigned pos = 30;
+  bitset_bindex i;
+  bitset_iterator iter;
   BITSET_FOR_EACH (iter, bset, i, 0)
   {
     if (pos > 70)
       {
-	fprintf (file, "\n");
-	pos = 0;
+        fprintf (file, "\n");
+        pos = 0;
       }
 
-    fprintf (file, "%lu ", (unsigned long int) i);
+    fprintf (file, "%lu ", (unsigned long) i);
     pos += 1 + (i >= 10) + (i >= 100);
-  };
+  }
 
   if (verbose)
     fprintf (file, "}\n");
@@ -329,7 +311,7 @@
 bitset_release_memory (void)
 {
   lbitset_release_memory ();
-  ebitset_release_memory ();
+  tbitset_release_memory ();
 }
 
 
@@ -356,7 +338,7 @@
 bitset_bindex
 bitset_size_ (bitset src)
 {
-    return BITSET_NBITS_ (src);
+  return BITSET_NBITS_ (src);
 }
 
 
@@ -365,18 +347,18 @@
 bitset_count_ (bitset src)
 {
   bitset_bindex list[BITSET_LIST_SIZE];
-  bitset_bindex next;
-  bitset_bindex num;
-  bitset_bindex count;
+  bitset_bindex count = 0;
 
   /* This could be greatly sped up by adding a count method for each
      bitset implementation that uses a direct technique (based on
      masks) for counting the number of bits set in a word.  */
 
-  next = 0;
-  for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next));
-       count += num)
-    continue;
+  {
+    bitset_bindex next = 0;
+    bitset_bindex num;
+    while ((num = bitset_list (src, list, BITSET_LIST_SIZE, &next)))
+      count += num;
+  }
 
   return count;
 }
@@ -395,9 +377,7 @@
      is large enough to hold the SRC bitset.  */
   bitset_zero (dst);
   BITSET_FOR_EACH (iter, src, i, 0)
-  {
-     bitset_set (dst, i);
-  };
+    bitset_set (dst, i);
 
   return true;
 }
@@ -407,16 +387,14 @@
    four operand operations.  */
 static inline bool
 bitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3,
-		enum bitset_ops op)
+                enum bitset_ops op)
 {
   bool changed = false;
-  bool stats_enabled_save;
-  bitset tmp;
 
   /* Create temporary bitset.  */
-  stats_enabled_save = bitset_stats_enabled;
+  bool stats_enabled_save = bitset_stats_enabled;
   bitset_stats_enabled = false;
-  tmp = bitset_alloc (0, bitset_type_get (dst));
+  bitset tmp = bitset_alloc (0, bitset_type_get (dst));
   bitset_stats_enabled = stats_enabled_save;
 
   switch (op)
diff --git a/lib/bitset.h b/lib/bitset.h
index fbc7b77..ea04916 100644
--- a/lib/bitset.h
+++ b/lib/bitset.h
@@ -1,6 +1,6 @@
 /* Generic bitsets.
 
-   Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2004, 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,31 +15,31 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _BITSET_H
-#define _BITSET_H
+#ifndef _GL_BITSET_H
+#define _GL_BITSET_H
 
 /* This file is the public interface to the bitset abstract data type.
    Only use the functions and macros defined in this file.  */
 
-#include "bbitset.h"
-#include "obstack.h"
 #include <stdio.h>
-
 #if USE_UNLOCKED_IO
 # include "unlocked-io.h"
 #endif
 
+#include "bitset/base.h"
+#include "obstack.h"
+
 /* Attributes used to select a bitset implementation.  */
 enum bitset_attr {BITSET_FIXED = 1,    /* Bitset size fixed.  */
-		  BITSET_VARIABLE = 2, /* Bitset size variable.  */
-		  BITSET_DENSE = 4,    /* Bitset dense.  */
-		  BITSET_SPARSE = 8,   /* Bitset sparse.  */
-		  BITSET_FRUGAL = 16,  /* Prefer most compact.  */
-		  BITSET_GREEDY = 32}; /* Prefer fastest at memory expense.  */
+                  BITSET_VARIABLE = 2, /* Bitset size variable.  */
+                  BITSET_DENSE = 4,    /* Bitset dense.  */
+                  BITSET_SPARSE = 8,   /* Bitset sparse.  */
+                  BITSET_FRUGAL = 16,  /* Prefer most compact.  */
+                  BITSET_GREEDY = 32}; /* Prefer fastest at memory expense.  */
 
-typedef unsigned int bitset_attrs;
+typedef unsigned bitset_attrs;
 
 /* The contents of the union should be considered to be private.
    While I would like to make this union opaque, it needs to be
@@ -49,26 +49,26 @@
 {
   /* This must be the first member of every other structure that is a
      member of this union.  */
-  struct bbitset_struct b;	        /* Base bitset data.  */
+  struct bbitset_struct b;              /* Base bitset data.  */
 
   struct abitset_struct
   {
     struct bbitset_struct b;
-    bitset_word words[1];		/* The array of bits.  */
+    bitset_word words[1];               /* The array of bits.  */
   } a;
 
-  struct ebitset_struct
+  struct tbitset_struct
   {
     struct bbitset_struct b;
-    bitset_windex size;			/* Number of elements.  */
-    struct ebitset_elt_struct **elts;	/* Expanding array of ptrs to elts.  */
+    bitset_windex size;                 /* Number of elements.  */
+    struct tbitset_elt_struct **elts;   /* Expanding array of ptrs to elts.  */
   } e;
 
   struct lbitset_struct
   {
     struct bbitset_struct b;
-    struct lbitset_elt_struct *head;	/* First element in linked list.  */
-    struct lbitset_elt_struct *tail;	/* Last element in linked list.  */
+    struct lbitset_elt_struct *head;    /* First element in linked list.  */
+    struct lbitset_elt_struct *tail;    /* Last element in linked list.  */
   } l;
 
   struct bitset_stats_struct
@@ -80,9 +80,8 @@
   struct vbitset_struct
   {
     struct bbitset_struct b;
-    bitset_windex size;			/* Allocated size of array.  */
+    bitset_windex size;                 /* Allocated size of array.  */
   } v;
-
 };
 
 
@@ -98,37 +97,37 @@
 
 
 /* Return bytes required for bitset of desired type and size.  */
-extern size_t bitset_bytes (enum bitset_type, bitset_bindex);
+size_t bitset_bytes (enum bitset_type, bitset_bindex);
 
 /* Initialise a bitset with desired type and size.  */
-extern bitset bitset_init (bitset, bitset_bindex, enum bitset_type);
+bitset bitset_init (bitset, bitset_bindex, enum bitset_type);
 
 /* Select an implementation type based on the desired bitset size
    and attributes.  */
-extern enum bitset_type bitset_type_choose (bitset_bindex, bitset_attrs);
+enum bitset_type bitset_type_choose (bitset_bindex, bitset_attrs);
 
 /* Create a bitset of desired type and size.  The bitset is zeroed.  */
-extern bitset bitset_alloc (bitset_bindex, enum bitset_type);
+bitset bitset_alloc (bitset_bindex, enum bitset_type);
 
-/* Free bitset.  */
-extern void bitset_free (bitset);
+/* Free bitset.  Do nothing if NULL.  */
+void bitset_free (bitset);
 
 /* Create a bitset of desired type and size using an obstack.  The
    bitset is zeroed.  */
-extern bitset bitset_obstack_alloc (struct obstack *bobstack,
-				    bitset_bindex, enum bitset_type);
+bitset bitset_obstack_alloc (struct obstack *bobstack,
+                             bitset_bindex, enum bitset_type);
 
-/* Free bitset allocated on obstack.  */
-extern void bitset_obstack_free (bitset);
+/* Free bitset allocated on obstack.  Do nothing if NULL.  */
+void bitset_obstack_free (bitset);
 
 /* Create a bitset of desired size and attributes.  The bitset is zeroed.  */
-extern bitset bitset_create (bitset_bindex, bitset_attrs);
+bitset bitset_create (bitset_bindex, bitset_attrs);
 
 /* Return bitset type.  */
-extern enum bitset_type bitset_type_get (bitset);
+enum bitset_type bitset_type_get (bitset);
 
 /* Return bitset type name.  */
-extern const char *bitset_type_name_get (bitset);
+const char *bitset_type_name_get (bitset);
 
 
 /* Set bit BITNO in bitset BSET.  */
@@ -179,8 +178,9 @@
 /* Return size in bits of bitset SRC.  */
 #define bitset_size(SRC) BITSET_SIZE_ (SRC)
 
-/* Change size of bitset.  */
-extern void bitset_resize (bitset, bitset_bindex);
+/* Change size in bits of bitset.  New bits are zeroed.  Return
+   SIZE.  */
+#define bitset_resize(DST, SIZE) BITSET_RESIZE_ (DST, SIZE)
 
 /* Return number of bits set in bitset SRC.  */
 #define bitset_count(SRC) BITSET_COUNT_ (SRC)
@@ -280,25 +280,25 @@
  BITSET_LIST_REVERSE_ (BSET, LIST, NUM, NEXT)
 
 /* Return true if both bitsets are of the same type and size.  */
-extern bool bitset_compatible_p (bitset bset1, bitset bset2);
+bool bitset_compatible_p (bitset bset1, bitset bset2);
 
 /* Find next set bit from the given bit index.  */
-extern bitset_bindex bitset_next (bitset, bitset_bindex);
+bitset_bindex bitset_next (bitset, bitset_bindex);
 
 /* Find previous set bit from the given bit index.  */
-extern bitset_bindex bitset_prev (bitset, bitset_bindex);
+bitset_bindex bitset_prev (bitset, bitset_bindex);
 
 /* Find first set bit.  */
-extern bitset_bindex bitset_first (bitset);
+bitset_bindex bitset_first (bitset);
 
 /* Find last set bit.  */
-extern bitset_bindex bitset_last (bitset);
+bitset_bindex bitset_last (bitset);
 
 /* Return nonzero if this is the only set bit.  */
-extern bool bitset_only_set_p (bitset, bitset_bindex);
+bool bitset_only_set_p (bitset, bitset_bindex);
 
 /* Dump bitset.  */
-extern void bitset_dump (FILE *, bitset);
+void bitset_dump (FILE *, bitset);
 
 /* Loop over all elements of BSET, starting with MIN, setting INDEX
    to the index of each set bit.  For example, the following will print
@@ -308,18 +308,16 @@
    bitset_iterator iter;
 
    BITSET_FOR_EACH (iter, src, i, 0)
-   {
-      printf ("%lu ", (unsigned long int) i);
-   };
+     printf ("%lu ", (unsigned long) i);
 */
-#define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN)				      \
-  for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;			      \
-       (ITER.num == BITSET_LIST_SIZE)					      \
-       && (ITER.num = bitset_list (BSET, ITER.list,			      \
-				   BITSET_LIST_SIZE, &ITER.next));)	      \
-    for (ITER.i = 0;							      \
-	 ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);		      \
-	 ITER.i++)
+#define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN)                               \
+  for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                        \
+       (ITER.num == BITSET_LIST_SIZE)                                         \
+       && (ITER.num = bitset_list (BSET, ITER.list,                           \
+                                   BITSET_LIST_SIZE, &ITER.next));)           \
+    for (ITER.i = 0;                                                          \
+         ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);               \
+         ITER.i++)
 
 
 /* Loop over all elements of BSET, in reverse order starting with
@@ -330,18 +328,16 @@
    bitset_iterator iter;
 
    BITSET_FOR_EACH_REVERSE (iter, src, i, 0)
-   {
-      printf ("%lu ", (unsigned long int) i);
-   };
+    printf ("%lu ", (unsigned long) i);
 */
-#define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN)			      \
-  for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;			      \
-       (ITER.num == BITSET_LIST_SIZE)					      \
-       && (ITER.num = bitset_list_reverse (BSET, ITER.list,		      \
-					   BITSET_LIST_SIZE, &ITER.next));)   \
-    for (ITER.i = 0;							      \
-	 ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);		      \
-	 ITER.i++)
+#define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN)                       \
+  for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                        \
+       (ITER.num == BITSET_LIST_SIZE)                                         \
+       && (ITER.num = bitset_list_reverse (BSET, ITER.list,                   \
+                                           BITSET_LIST_SIZE, &ITER.next));)   \
+    for (ITER.i = 0;                                                          \
+         ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);               \
+         ITER.i++)
 
 
 /* Define set operations in terms of logical operations.  */
@@ -367,13 +363,13 @@
 
 
 /* Release any memory tied up with bitsets.  */
-extern void bitset_release_memory (void);
+void bitset_release_memory (void);
 
 /* Enable bitset stats gathering.  */
-extern void bitset_stats_enable (void);
+void bitset_stats_enable (void);
 
 /* Disable bitset stats gathering.  */
-extern void bitset_stats_disable (void);
+void bitset_stats_disable (void);
 
 /* Read bitset stats file of accummulated stats.  */
 void bitset_stats_read (const char *file_name);
@@ -382,12 +378,12 @@
 void bitset_stats_write (const char *file_name);
 
 /* Dump bitset stats.  */
-extern void bitset_stats_dump (FILE *);
+void bitset_stats_dump (FILE *);
 
 /* Function to debug bitset from debugger.  */
-extern void debug_bitset (bitset);
+void debug_bitset (bitset);
 
 /* Function to debug bitset stats from debugger.  */
-extern void debug_bitset_stats (void);
+void debug_bitset_stats (void);
 
-#endif /* _BITSET_H  */
+#endif /* _GL_BITSET_H  */
diff --git a/lib/abitset.c b/lib/bitset/array.c
similarity index 68%
rename from lib/abitset.c
rename to lib/bitset/array.c
index 5ffba83..d46a73c 100644
--- a/lib/abitset.c
+++ b/lib/bitset/array.c
@@ -1,7 +1,7 @@
 /* Array bitsets.
 
-   Copyright (C) 2002-2003, 2006, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002-2003, 2006, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -16,11 +16,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
-#include "abitset.h"
+#include "bitset/array.h"
 #include <stddef.h>
 #include <stdlib.h>
 #include <string.h>
@@ -35,33 +35,28 @@
 static bitset_bindex
 abitset_resize (bitset src, bitset_bindex size)
 {
-    /* These bitsets have a fixed size.  */
-    if (BITSET_SIZE_ (src) != size)
-      abort ();
+  /* These bitsets have a fixed size.  */
+  if (BITSET_SIZE_ (src) != size)
+    abort ();
 
-    return size;
+  return size;
 }
 
 /* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
+   *NEXT and store in array LIST.  Return with actual number of bits
+   found and with *NEXT indicating where search stopped.  */
 static bitset_bindex
 abitset_small_list (bitset src, bitset_bindex *list,
-		    bitset_bindex num, bitset_bindex *next)
+                    bitset_bindex num, bitset_bindex *next)
 {
-  bitset_bindex bitno;
-  bitset_bindex count;
-  bitset_windex size;
-  bitset_word word;
-
-  word = ABITSET_WORDS (src)[0];
+  bitset_word word = ABITSET_WORDS (src)[0];
 
   /* Short circuit common case.  */
   if (!word)
     return 0;
 
-  size = BITSET_SIZE_ (src);
-  bitno = *next;
+  bitset_windex size = BITSET_SIZE_ (src);
+  bitset_bindex bitno = *next;
   if (bitno >= size)
     return 0;
 
@@ -70,30 +65,31 @@
   /* If num is 1, we could speed things up with a binary search
      of the word of interest.  */
 
+  bitset_bindex count;
   if (num >= BITSET_WORD_BITS)
     {
       for (count = 0; word; bitno++)
-	{
-	  if (word & 1)
-	    list[count++] = bitno;
-	  word >>= 1;
-	}
+        {
+          if (word & 1)
+            list[count++] = bitno;
+          word >>= 1;
+        }
     }
   else
     {
       for (count = 0; word; bitno++)
-	{
-	  if (word & 1)
-	    {
-	      list[count++] = bitno;
-	      if (count >= num)
-		{
-		  bitno++;
-		  break;
-		}
-	    }
-	  word >>= 1;
-	}
+        {
+          if (word & 1)
+            {
+              list[count++] = bitno;
+              if (count >= num)
+                {
+                  bitno++;
+                  break;
+                }
+            }
+          word >>= 1;
+        }
     }
 
   *next = bitno;
@@ -115,7 +111,7 @@
 /* Reset bit BITNO in bitset DST.  */
 static void
 abitset_reset (bitset dst ATTRIBUTE_UNUSED,
-	       bitset_bindex bitno ATTRIBUTE_UNUSED)
+               bitset_bindex bitno ATTRIBUTE_UNUSED)
 {
   /* This should never occur for abitsets since we should always hit
      the cache.  It is likely someone is trying to access outside the
@@ -126,7 +122,7 @@
 /* Test bit BITNO in bitset SRC.  */
 static bool
 abitset_test (bitset src ATTRIBUTE_UNUSED,
-	      bitset_bindex bitno ATTRIBUTE_UNUSED)
+              bitset_bindex bitno ATTRIBUTE_UNUSED)
 {
   /* This should never occur for abitsets since we should always
      hit the cache.  */
@@ -140,51 +136,42 @@
    stopped.  */
 static bitset_bindex
 abitset_list_reverse (bitset src, bitset_bindex *list,
-		      bitset_bindex num, bitset_bindex *next)
+                      bitset_bindex num, bitset_bindex *next)
 {
-  bitset_bindex bitno;
-  bitset_bindex rbitno;
-  bitset_bindex count;
-  bitset_windex windex;
-  unsigned int bitcnt;
-  bitset_bindex bitoff;
+  bitset_bindex rbitno = *next;
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_bindex n_bits = BITSET_SIZE_ (src);
 
-  rbitno = *next;
-
   /* If num is 1, we could speed things up with a binary search
      of the word of interest.  */
 
   if (rbitno >= n_bits)
     return 0;
 
-  count = 0;
+  bitset_bindex count = 0;
 
-  bitno = n_bits - (rbitno + 1);
+  bitset_bindex bitno = n_bits - (rbitno + 1);
 
-  windex = bitno / BITSET_WORD_BITS;
-  bitcnt = bitno % BITSET_WORD_BITS;
-  bitoff = windex * BITSET_WORD_BITS;
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+  unsigned bitcnt = bitno % BITSET_WORD_BITS;
+  bitset_bindex bitoff = windex * BITSET_WORD_BITS;
 
   do
     {
-      bitset_word word;
-
-      word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
+      bitset_word word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
       for (; word; bitcnt--)
-	{
-	  if (word & BITSET_MSB)
-	    {
-	      list[count++] = bitoff + bitcnt;
-	      if (count >= num)
-		{
-		  *next = n_bits - (bitoff + bitcnt);
-		  return count;
-		}
-	    }
-	  word <<= 1;
-	}
+        {
+          if (word & BITSET_MSB)
+            {
+              list[count++] = bitoff + bitcnt;
+              if (count >= num)
+                {
+                  *next = n_bits - (bitoff + bitcnt);
+                  return count;
+                }
+            }
+          word <<= 1;
+        }
       bitoff -= BITSET_WORD_BITS;
       bitcnt = BITSET_WORD_BITS - 1;
     }
@@ -196,101 +183,99 @@
 
 
 /* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
+   *NEXT and store in array LIST.  Return with actual number of bits
+   found and with *NEXT indicating where search stopped.  */
 static bitset_bindex
 abitset_list (bitset src, bitset_bindex *list,
-	      bitset_bindex num, bitset_bindex *next)
+              bitset_bindex num, bitset_bindex *next)
 {
-  bitset_bindex bitno;
-  bitset_bindex count;
   bitset_windex windex;
   bitset_bindex bitoff;
   bitset_windex size = src->b.csize;
   bitset_word *srcp = ABITSET_WORDS (src);
-  bitset_word word;
 
-  bitno = *next;
+  bitset_bindex bitno = *next;
 
-  count = 0;
+  bitset_bindex count = 0;
   if (!bitno)
     {
       /* Many bitsets are zero, so make this common case fast.  */
       for (windex = 0; windex < size && !srcp[windex]; windex++)
-	continue;
+        continue;
       if (windex >= size)
-	return 0;
+        return 0;
 
       /* If num is 1, we could speed things up with a binary search
-	 of the current word.  */
+         of the current word.  */
 
       bitoff = windex * BITSET_WORD_BITS;
     }
   else
     {
       if (bitno >= BITSET_SIZE_ (src))
-	return 0;
+        return 0;
 
       windex = bitno / BITSET_WORD_BITS;
       bitno = bitno % BITSET_WORD_BITS;
 
       if (bitno)
-	{
-	  /* Handle the case where we start within a word.
-	     Most often, this is executed with large bitsets
-	     with many set bits where we filled the array
-	     on the previous call to this function.  */
+        {
+          /* Handle the case where we start within a word.
+             Most often, this is executed with large bitsets
+             with many set bits where we filled the array
+             on the previous call to this function.  */
 
-	  bitoff = windex * BITSET_WORD_BITS;
-	  word = srcp[windex] >> bitno;
-	  for (bitno = bitoff + bitno; word; bitno++)
-	    {
-	      if (word & 1)
-		{
-		  list[count++] = bitno;
-		  if (count >= num)
-		    {
-		      *next = bitno + 1;
-		      return count;
-		    }
-		}
-	      word >>= 1;
-	    }
-	  windex++;
-	}
+          bitoff = windex * BITSET_WORD_BITS;
+          bitset_word word = srcp[windex] >> bitno;
+          for (bitno = bitoff + bitno; word; bitno++)
+            {
+              if (word & 1)
+                {
+                  list[count++] = bitno;
+                  if (count >= num)
+                    {
+                      *next = bitno + 1;
+                      return count;
+                    }
+                }
+              word >>= 1;
+            }
+          windex++;
+        }
       bitoff = windex * BITSET_WORD_BITS;
     }
 
   for (; windex < size; windex++, bitoff += BITSET_WORD_BITS)
     {
-      if (!(word = srcp[windex]))
-	continue;
+      bitset_word word = srcp[windex];
+      if (!word)
+        continue;
 
       if ((count + BITSET_WORD_BITS) < num)
-	{
-	  for (bitno = bitoff; word; bitno++)
-	    {
-	      if (word & 1)
-		list[count++] = bitno;
-	      word >>= 1;
-	    }
-	}
+        {
+          for (bitno = bitoff; word; bitno++)
+            {
+              if (word & 1)
+                list[count++] = bitno;
+              word >>= 1;
+            }
+        }
       else
-	{
-	  for (bitno = bitoff; word; bitno++)
-	    {
-	      if (word & 1)
-		{
-		  list[count++] = bitno;
-		  if (count >= num)
-		    {
-		      *next = bitno + 1;
-		      return count;
-		    }
-		}
-	      word >>= 1;
-	    }
-	}
+        {
+          for (bitno = bitoff; word; bitno++)
+            {
+              if (word & 1)
+                {
+                  list[count++] = bitno;
+                  if (count >= num)
+                    {
+                      *next = bitno + 1;
+                      return count;
+                    }
+                }
+              word >>= 1;
+            }
+        }
     }
 
   *next = bitoff;
@@ -302,9 +287,7 @@
 static inline void
 abitset_unused_clear (bitset dst)
 {
-  unsigned int last_bit;
-
-  last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS;
+  unsigned last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS;
   if (last_bit)
     ABITSET_WORDS (dst)[dst->b.csize - 1] &=
       ((bitset_word) 1 << last_bit) - 1;
@@ -315,9 +298,7 @@
 abitset_ones (bitset dst)
 {
   bitset_word *dstp = ABITSET_WORDS (dst);
-  size_t bytes;
-
-  bytes = sizeof (bitset_word) * dst->b.csize;
+  size_t bytes = sizeof (bitset_word) * dst->b.csize;
 
   memset (dstp, -1, bytes);
   abitset_unused_clear (dst);
@@ -328,9 +309,7 @@
 abitset_zero (bitset dst)
 {
   bitset_word *dstp = ABITSET_WORDS (dst);
-  size_t bytes;
-
-  bytes = sizeof (bitset_word) * dst->b.csize;
+  size_t bytes = sizeof (bitset_word) * dst->b.csize;
 
   memset (dstp, 0, bytes);
 }
@@ -339,13 +318,11 @@
 static bool
 abitset_empty_p (bitset dst)
 {
-  bitset_windex i;
   bitset_word *dstp = ABITSET_WORDS (dst);
 
-  for (i = 0; i < dst->b.csize; i++)
+  for (bitset_windex i = 0; i < dst->b.csize; i++)
     if (dstp[i])
       return false;
-
   return true;
 }
 
@@ -355,10 +332,9 @@
 {
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_word *dstp = ABITSET_WORDS (dst);
-  bitset_windex size = dst->b.csize;
-
   if (srcp == dstp)
-      return;
+    return;
+  bitset_windex size = dst->b.csize;
   memcpy (dstp, srcp, sizeof (bitset_word) * size);
 }
 
@@ -366,13 +342,12 @@
 static void
 abitset_not (bitset dst, bitset src)
 {
-  bitset_windex i;
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = ~(*srcp++);
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = ~(*srcp++);
   abitset_unused_clear (dst);
 }
 
@@ -380,14 +355,13 @@
 static bool
 abitset_equal_p (bitset dst, bitset src)
 {
-  bitset_windex i;
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      if (*srcp++ != *dstp++)
-	  return false;
+  for (bitset_windex i = 0; i < size; i++)
+    if (*srcp++ != *dstp++)
+      return false;
   return true;
 }
 
@@ -395,14 +369,13 @@
 static bool
 abitset_subset_p (bitset dst, bitset src)
 {
-  bitset_windex i;
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++, srcp++)
-      if (*dstp != (*srcp | *dstp))
-	  return false;
+  for (bitset_windex i = 0; i < size; i++, dstp++, srcp++)
+    if (*dstp != (*srcp | *dstp))
+      return false;
   return true;
 }
 
@@ -410,15 +383,13 @@
 static bool
 abitset_disjoint_p (bitset dst, bitset src)
 {
-  bitset_windex i;
   bitset_word *srcp = ABITSET_WORDS (src);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      if (*srcp++ & *dstp++)
-	  return false;
-
+  for (bitset_windex i = 0; i < size; i++)
+    if (*srcp++ & *dstp++)
+      return false;
   return true;
 }
 
@@ -426,36 +397,33 @@
 static void
 abitset_and (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = *src1p++ & *src2p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = *src1p++ & *src2p++;
 }
 
 
 static bool
 abitset_and_cmp (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = *src1p++ & *src2p++;
-
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -464,36 +432,33 @@
 static void
 abitset_andn (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = *src1p++ & ~(*src2p++);
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = *src1p++ & ~(*src2p++);
 }
 
 
 static bool
 abitset_andn_cmp (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = *src1p++ & ~(*src2p++);
-
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -502,36 +467,34 @@
 static void
 abitset_or (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = *src1p++ | *src2p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = *src1p++ | *src2p++;
 }
 
 
 static bool
 abitset_or_cmp (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = *src1p++ | *src2p++;
 
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -540,36 +503,34 @@
 static void
 abitset_xor (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = *src1p++ ^ *src2p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = *src1p++ ^ *src2p++;
 }
 
 
 static bool
 abitset_xor_cmp (bitset dst, bitset src1, bitset src2)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = *src1p++ ^ *src2p++;
 
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -578,22 +539,20 @@
 static void
 abitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *src3p = ABITSET_WORDS (src3);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ & *src2p++) | *src3p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = (*src1p++ & *src2p++) | *src3p++;
 }
 
 
 static bool
 abitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
@@ -601,15 +560,14 @@
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;
-
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -618,22 +576,20 @@
 static void
 abitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *src3p = ABITSET_WORDS (src3);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;
 }
 
 
 static bool
 abitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
@@ -641,15 +597,14 @@
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;
-
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -658,22 +613,20 @@
 static void
 abitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
   bitset_word *src3p = ABITSET_WORDS (src3);
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ | *src2p++) & *src3p++;
+  for (bitset_windex i = 0; i < size; i++)
+    *dstp++ = (*src1p++ | *src2p++) & *src3p++;
 }
 
 
 static bool
 abitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
 {
-  bitset_windex i;
   bool changed = false;
   bitset_word *src1p = ABITSET_WORDS (src1);
   bitset_word *src2p = ABITSET_WORDS (src2);
@@ -681,15 +634,14 @@
   bitset_word *dstp = ABITSET_WORDS (dst);
   bitset_windex size = dst->b.csize;
 
-  for (i = 0; i < size; i++, dstp++)
+  for (bitset_windex i = 0; i < size; i++, dstp++)
     {
       bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;
-
       if (*dstp != tmp)
-	{
-	  changed = true;
-	  *dstp = tmp;
-	}
+        {
+          changed = true;
+          *dstp = tmp;
+        }
     }
   return changed;
 }
@@ -699,9 +651,9 @@
 abitset_copy (bitset dst, bitset src)
 {
   if (BITSET_COMPATIBLE_ (dst, src))
-      abitset_copy1 (dst, src);
+    abitset_copy1 (dst, src);
   else
-      bitset_copy_ (dst, src);
+    bitset_copy_ (dst, src);
 }
 
 
@@ -784,14 +736,12 @@
 size_t
 abitset_bytes (bitset_bindex n_bits)
 {
-  bitset_windex size;
-  size_t bytes;
   size_t header_size = offsetof (union bitset_union, a.words);
   struct bitset_align_struct { char a; union bitset_union b; };
   size_t bitset_alignment = offsetof (struct bitset_align_struct, b);
 
-  size = ABITSET_N_WORDS (n_bits);
-  bytes = header_size + size * sizeof (bitset_word);
+  bitset_windex size = ABITSET_N_WORDS (n_bits);
+  size_t bytes = header_size + size * sizeof (bitset_word);
 
   /* Align the size properly for a vector of abitset objects.  */
   if (header_size % bitset_alignment != 0
@@ -808,19 +758,13 @@
 bitset
 abitset_init (bitset bset, bitset_bindex n_bits)
 {
-  bitset_windex size;
-
-  size = ABITSET_N_WORDS (n_bits);
+  bitset_windex size = ABITSET_N_WORDS (n_bits);
   BITSET_NBITS_ (bset) = n_bits;
 
   /* Use optimized routines if bitset fits within a single word.
      There is probably little merit if using caching since
      the small bitset will always fit in the cache.  */
-  if (size == 1)
-    bset->b.vtable = &abitset_small_vtable;
-  else
-    bset->b.vtable = &abitset_vtable;
-
+  bset->b.vtable = size == 1 ? &abitset_small_vtable : &abitset_vtable;
   bset->b.cindex = 0;
   bset->b.csize = size;
   bset->b.cdata = ABITSET_WORDS (bset);
diff --git a/lib/abitset.h b/lib/bitset/array.h
similarity index 70%
rename from lib/abitset.h
rename to lib/bitset/array.h
index ad858fa..5842387 100644
--- a/lib/abitset.h
+++ b/lib/bitset/array.h
@@ -1,6 +1,7 @@
 /* Functions to support abitsets.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,15 +16,15 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _ABITSET_H
-#define _ABITSET_H
+#ifndef _BITSET_ARRAY_H
+#define _BITSET_ARRAY_H
 
 #include "bitset.h"
 
-extern size_t abitset_bytes (bitset_bindex);
+size_t abitset_bytes (bitset_bindex);
 
-extern bitset abitset_init (bitset, bitset_bindex);
+bitset abitset_init (bitset, bitset_bindex);
 
 #endif
diff --git a/lib/bbitset.h b/lib/bitset/base.h
similarity index 81%
rename from lib/bbitset.h
rename to lib/bitset/base.h
index f819b17..d1a1581 100644
--- a/lib/bbitset.h
+++ b/lib/bitset/base.h
@@ -1,7 +1,7 @@
 /* Base bitset stuff.
 
-   Copyright (C) 2002-2004, 2006, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002-2004, 2006, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -16,42 +16,48 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _BBITSET_H
-#define _BBITSET_H
+#ifndef _BITSET_BASE_H
+#define _BITSET_BASE_H
 
-#include "libiberty.h"
-
-#include <stdbool.h>
 #include <limits.h>
+#include <stdbool.h>
 #include <stddef.h>
 
+#include "xalloc.h"
+
+#ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
+#  define __attribute__(x)
+# endif
+#endif
+
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+
 /* Currently we support five flavours of bitsets:
    BITSET_ARRAY:  Array of bits (fixed size, fast for dense bitsets).
                   Memory for bit array and bitset structure allocated
                   contiguously.
    BITSET_LIST:   Linked list of arrays of bits (variable size, least storage
-		  for large very sparse sets).
+                  for large very sparse sets).
    BITSET_TABLE:  Expandable table of pointers to arrays of bits
-		  (variable size, less storage for large sparse sets).
+                  (variable size, less storage for large sparse sets).
                   Faster than BITSET_LIST for random access.
-   BITSET_VARRAY: Variable array of bits (variable size, fast for
+   BITSET_VECTOR: Variable array of bits (variable size, fast for
                   dense bitsets).
    BITSET_STATS:  Wrapper bitset for internal use only.  Used for gathering
                   statistics and/or better run-time checking.
 */
-enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_VARRAY,
-		  BITSET_TYPE_NUM, BITSET_STATS};
-#define BITSET_TYPE_NAMES {"abitset", "lbitset", "ebitset", "vbitset"}
+enum bitset_type {BITSET_ARRAY, BITSET_LIST, BITSET_TABLE, BITSET_VECTOR,
+                  BITSET_TYPE_NUM, BITSET_STATS};
+#define BITSET_TYPE_NAMES {"abitset", "lbitset", "tbitset", "vbitset"}
 
 extern const char * const bitset_type_names[];
 
-enum bitset_alloc_type {BITSET_MALLOC, BITSET_OBALLOC};
-
 /* Data type used to store a word of bits.  */
-typedef unsigned long int bitset_word;
-#define BITSET_WORD_BITS ((unsigned int) (CHAR_BIT * sizeof (bitset_word)))
+typedef unsigned long bitset_word;
+#define BITSET_WORD_BITS ((unsigned) (CHAR_BIT * sizeof (bitset_word)))
 
 /* Bit index.  In theory we might need a type wider than size_t, but
    in practice we lose at most a factor of CHAR_BIT by going with
@@ -78,19 +84,19 @@
 #define BITSET_LIST_SIZE 1024
 
 enum bitset_ops {BITSET_OP_ZERO, BITSET_OP_ONES,
-		 BITSET_OP_COPY, BITSET_OP_NOT,
-		 BITSET_OP_EMPTY_P, BITSET_OP_EQUAL_P,
-		 BITSET_OP_SUBSET_P, BITSET_OP_DISJOINT_P,
-		 BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN,
-		 BITSET_OP_OR_AND, BITSET_OP_AND_OR, BITSET_OP_ANDN_OR};
+                 BITSET_OP_COPY, BITSET_OP_NOT,
+                 BITSET_OP_EMPTY_P, BITSET_OP_EQUAL_P,
+                 BITSET_OP_SUBSET_P, BITSET_OP_DISJOINT_P,
+                 BITSET_OP_AND, BITSET_OP_OR, BITSET_OP_XOR, BITSET_OP_ANDN,
+                 BITSET_OP_OR_AND, BITSET_OP_AND_OR, BITSET_OP_ANDN_OR};
 
 struct bbitset_struct
 {
   const struct bitset_vtable *vtable;
-  bitset_windex cindex;		/* Cache word index.  */
-  bitset_windex csize;		/* Cache size in words.  */
-  bitset_word *cdata;		/* Cache data pointer.  */
-  bitset_bindex n_bits;		/* Number of bits.  */
+  bitset_windex cindex;         /* Cache word index.  */
+  bitset_windex csize;          /* Cache size in words.  */
+  bitset_word *cdata;           /* Cache data pointer.  */
+  bitset_bindex n_bits;         /* Number of bits.  */
   /* Perhaps we could sacrifice another word to indicate
      that the bitset is known to be zero, that a bit has been set
      in the cache, and that a bit has been cleared in the cache.
@@ -148,9 +154,9 @@
   bool (*or_and_cmp) (bitset, bitset, bitset, bitset);
 
   bitset_bindex (*list) (bitset, bitset_bindex *, bitset_bindex,
-			 bitset_bindex *);
+                         bitset_bindex *);
   bitset_bindex (*list_reverse) (bitset, bitset_bindex *, bitset_bindex,
-				 bitset_bindex *);
+                                 bitset_bindex *);
   void (*free) (bitset);
   enum bitset_type type;
 };
@@ -281,24 +287,24 @@
 
 /* Private functions for bitset implementations.  */
 
-extern bool bitset_toggle_ (bitset, bitset_bindex);
+bool bitset_toggle_ (bitset, bitset_bindex);
 
-extern bitset_bindex bitset_count_ (bitset);
+bitset_bindex bitset_count_ (bitset);
 
-extern bitset_bindex bitset_size_ (bitset);
+bitset_bindex bitset_size_ (bitset);
 
-extern bool bitset_copy_ (bitset, bitset);
+bool bitset_copy_ (bitset, bitset);
 
-extern void bitset_and_or_ (bitset, bitset, bitset, bitset);
+void bitset_and_or_ (bitset, bitset, bitset, bitset);
 
-extern bool bitset_and_or_cmp_ (bitset, bitset, bitset, bitset);
+bool bitset_and_or_cmp_ (bitset, bitset, bitset, bitset);
 
-extern void bitset_andn_or_ (bitset, bitset, bitset, bitset);
+void bitset_andn_or_ (bitset, bitset, bitset, bitset);
 
-extern bool bitset_andn_or_cmp_ (bitset, bitset, bitset, bitset);
+bool bitset_andn_or_cmp_ (bitset, bitset, bitset, bitset);
 
-extern void bitset_or_and_ (bitset, bitset, bitset, bitset);
+void bitset_or_and_ (bitset, bitset, bitset, bitset);
 
-extern bool bitset_or_and_cmp_ (bitset, bitset, bitset, bitset);
+bool bitset_or_and_cmp_ (bitset, bitset, bitset, bitset);
 
 #endif /* _BBITSET_H  */
diff --git a/lib/bitset/list.c b/lib/bitset/list.c
new file mode 100644
index 0000000..1a23fed
--- /dev/null
+++ b/lib/bitset/list.c
@@ -0,0 +1,1328 @@
+/* Functions to support link list bitsets.
+
+   Copyright (C) 2002-2004, 2006, 2009-2015, 2018-2019 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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "bitset/list.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "obstack.h"
+
+/* This file implements linked-list bitsets.  These bitsets can be of
+   arbitrary length and are more efficient than arrays of bits for
+   large sparse sets.
+
+   Usually if all the bits in an element are zero we remove the element
+   from the list.  However, a side effect of the bit caching is that we
+   do not always notice when an element becomes zero.  Hence the
+   lbitset_weed function which removes zero elements.  */
+
+
+/* Number of words to use for each element.  The larger the value the
+   greater the size of the cache and the shorter the time to find a given bit
+   but the more memory wasted for sparse bitsets and the longer the time
+   to search for set bits.
+
+   The routines that dominate timing profiles are lbitset_elt_find
+   and lbitset_elt_link, especially when accessing the bits randomly.  */
+
+#define LBITSET_ELT_WORDS 2
+
+typedef bitset_word lbitset_word;
+
+#define LBITSET_WORD_BITS BITSET_WORD_BITS
+
+/* Number of bits stored in each element.  */
+#define LBITSET_ELT_BITS \
+  ((unsigned) (LBITSET_ELT_WORDS * LBITSET_WORD_BITS))
+
+/* Lbitset element.   We use an array of bits for each element.
+   These are linked together in a doubly-linked list.  */
+typedef struct lbitset_elt_struct
+{
+  struct lbitset_elt_struct *next;      /* Next element.  */
+  struct lbitset_elt_struct *prev;      /* Previous element.  */
+  bitset_windex index;  /* bitno / BITSET_WORD_BITS.  */
+  bitset_word words[LBITSET_ELT_WORDS]; /* Bits that are set.  */
+}
+lbitset_elt;
+
+
+enum lbitset_find_mode
+  { LBITSET_FIND, LBITSET_CREATE, LBITSET_SUBST };
+
+static lbitset_elt lbitset_zero_elts[3]; /* Elements of all zero bits.  */
+
+/* Obstack to allocate bitset elements from.  */
+static struct obstack lbitset_obstack;
+static bool lbitset_obstack_init = false;
+static lbitset_elt *lbitset_free_list;  /* Free list of bitset elements.  */
+
+extern void debug_lbitset (bitset);
+
+#define LBITSET_CURRENT1(X) \
+  ((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words)))
+
+#define LBITSET_CURRENT(X) LBITSET_CURRENT1((X)->b.cdata)
+
+#define LBITSET_HEAD(X) ((X)->l.head)
+#define LBITSET_TAIL(X) ((X)->l.tail)
+
+/* Allocate a lbitset element.  The bits are not cleared.  */
+static inline lbitset_elt *
+lbitset_elt_alloc (void)
+{
+  lbitset_elt *elt;
+
+  if (lbitset_free_list != 0)
+    {
+      elt = lbitset_free_list;
+      lbitset_free_list = elt->next;
+    }
+  else
+    {
+      if (!lbitset_obstack_init)
+        {
+          lbitset_obstack_init = true;
+
+          /* Let particular systems override the size of a chunk.  */
+
+#ifndef OBSTACK_CHUNK_SIZE
+# define OBSTACK_CHUNK_SIZE 0
+#endif
+
+          /* Let them override the alloc and free routines too.  */
+
+#ifndef OBSTACK_CHUNK_ALLOC
+# define OBSTACK_CHUNK_ALLOC xmalloc
+#endif
+
+#ifndef OBSTACK_CHUNK_FREE
+# define OBSTACK_CHUNK_FREE free
+#endif
+
+#if ! defined __GNUC__ || __GNUC__ < 2
+# define __alignof__(type) 0
+#endif
+
+          obstack_specify_allocation (&lbitset_obstack, OBSTACK_CHUNK_SIZE,
+                                      __alignof__ (lbitset_elt),
+                                      OBSTACK_CHUNK_ALLOC,
+                                      OBSTACK_CHUNK_FREE);
+        }
+
+      /* Perhaps we should add a number of new elements to the free
+         list.  */
+      elt = (lbitset_elt *) obstack_alloc (&lbitset_obstack,
+                                           sizeof (lbitset_elt));
+    }
+
+  return elt;
+}
+
+
+/* Allocate a lbitset element.  The bits are cleared.  */
+static inline lbitset_elt *
+lbitset_elt_calloc (void)
+{
+  lbitset_elt *elt = lbitset_elt_alloc ();
+  memset (elt->words, 0, sizeof (elt->words));
+  return elt;
+}
+
+
+static inline void
+lbitset_elt_free (lbitset_elt *elt)
+{
+  elt->next = lbitset_free_list;
+  lbitset_free_list = elt;
+}
+
+
+/* Unlink element ELT from bitset BSET.  */
+static inline void
+lbitset_elt_unlink (bitset bset, lbitset_elt *elt)
+{
+  lbitset_elt *next = elt->next;
+  lbitset_elt *prev = elt->prev;
+
+  if (prev)
+    prev->next = next;
+
+  if (next)
+    next->prev = prev;
+
+  if (LBITSET_HEAD (bset) == elt)
+    LBITSET_HEAD (bset) = next;
+  if (LBITSET_TAIL (bset) == elt)
+    LBITSET_TAIL (bset) = prev;
+
+  /* Update cache pointer.  Since the first thing we try is to insert
+     before current, make current the next entry in preference to the
+     previous.  */
+  if (LBITSET_CURRENT (bset) == elt)
+    {
+      if (next)
+        {
+          bset->b.cdata = next->words;
+          bset->b.cindex = next->index;
+        }
+      else if (prev)
+        {
+          bset->b.cdata = prev->words;
+          bset->b.cindex = prev->index;
+        }
+      else
+        {
+          bset->b.csize = 0;
+          bset->b.cdata = 0;
+        }
+    }
+
+  lbitset_elt_free (elt);
+}
+
+
+/* Cut the chain of bitset BSET before element ELT and free the
+   elements.  */
+static inline void
+lbitset_prune (bitset bset, lbitset_elt *elt)
+{
+  if (!elt)
+    return;
+
+  if (elt->prev)
+    {
+      LBITSET_TAIL (bset) = elt->prev;
+      bset->b.cdata = elt->prev->words;
+      bset->b.cindex = elt->prev->index;
+      elt->prev->next = 0;
+    }
+  else
+    {
+      LBITSET_HEAD (bset) = 0;
+      LBITSET_TAIL (bset) = 0;
+      bset->b.cdata = 0;
+      bset->b.csize = 0;
+    }
+
+  lbitset_elt *next;
+  for (; elt; elt = next)
+    {
+      next = elt->next;
+      lbitset_elt_free (elt);
+    }
+}
+
+
+/* Are all bits in an element zero?  */
+static inline bool
+lbitset_elt_zero_p (lbitset_elt *elt)
+{
+  for (int i = 0; i < LBITSET_ELT_WORDS; i++)
+    if (elt->words[i])
+      return false;
+  return true;
+}
+
+
+/* Link the bitset element into the current bitset linked list.  */
+static inline void
+lbitset_elt_link (bitset bset, lbitset_elt *elt)
+{
+  bitset_windex windex = elt->index;
+
+  lbitset_elt *current = bset->b.csize ? LBITSET_CURRENT (bset) : LBITSET_HEAD (bset);
+
+  /* If this is the first and only element, add it in.  */
+  if (LBITSET_HEAD (bset) == 0)
+    {
+      elt->next = elt->prev = 0;
+      LBITSET_HEAD (bset) = elt;
+      LBITSET_TAIL (bset) = elt;
+    }
+
+  /* If this index is less than that of the current element, it goes
+     somewhere before the current element.  */
+  else if (windex < bset->b.cindex)
+    {
+      lbitset_elt *ptr;
+      for (ptr = current;
+           ptr->prev && ptr->prev->index > windex; ptr = ptr->prev)
+        continue;
+
+      if (ptr->prev)
+        ptr->prev->next = elt;
+      else
+        LBITSET_HEAD (bset) = elt;
+
+      elt->prev = ptr->prev;
+      elt->next = ptr;
+      ptr->prev = elt;
+    }
+
+  /* Otherwise, it must go somewhere after the current element.  */
+  else
+    {
+      lbitset_elt *ptr;
+      for (ptr = current;
+           ptr->next && ptr->next->index < windex; ptr = ptr->next)
+        continue;
+
+      if (ptr->next)
+        ptr->next->prev = elt;
+      else
+        LBITSET_TAIL (bset) = elt;
+
+      elt->next = ptr->next;
+      elt->prev = ptr;
+      ptr->next = elt;
+    }
+
+  /* Set up so this is the first element searched.  */
+  bset->b.cindex = windex;
+  bset->b.csize = LBITSET_ELT_WORDS;
+  bset->b.cdata = elt->words;
+}
+
+
+static lbitset_elt *
+lbitset_elt_find (bitset bset, bitset_windex windex,
+                  enum lbitset_find_mode mode)
+{
+  lbitset_elt *current;
+
+  if (bset->b.csize)
+    {
+      current = LBITSET_CURRENT (bset);
+      /* Check if element is the cached element.  */
+      if ((windex - bset->b.cindex) < bset->b.csize)
+        return current;
+    }
+  else
+    {
+      current = LBITSET_HEAD (bset);
+    }
+
+  if (current)
+    {
+      lbitset_elt *elt;
+      if (windex < bset->b.cindex)
+        {
+          for (elt = current;
+               elt->prev && elt->index > windex; elt = elt->prev)
+            continue;
+        }
+      else
+        {
+          for (elt = current;
+               elt->next && (elt->index + LBITSET_ELT_WORDS - 1) < windex;
+               elt = elt->next)
+            continue;
+        }
+
+      /* 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 (windex - elt->index < LBITSET_ELT_WORDS)
+        {
+          bset->b.cindex = elt->index;
+          bset->b.csize = LBITSET_ELT_WORDS;
+          bset->b.cdata = elt->words;
+          return elt;
+        }
+    }
+
+  switch (mode)
+    {
+    default:
+      abort ();
+
+    case LBITSET_FIND:
+      return 0;
+
+    case LBITSET_CREATE:
+      windex -= windex % LBITSET_ELT_WORDS;
+      lbitset_elt *elt = lbitset_elt_calloc ();
+      elt->index = windex;
+      lbitset_elt_link (bset, elt);
+      return elt;
+
+    case LBITSET_SUBST:
+      return &lbitset_zero_elts[0];
+    }
+}
+
+
+/* Weed out the zero elements from the list.  */
+static inline void
+lbitset_weed (bitset bset)
+{
+  lbitset_elt *next;
+  for (lbitset_elt *elt = LBITSET_HEAD (bset); elt; elt = next)
+    {
+      next = elt->next;
+      if (lbitset_elt_zero_p (elt))
+        lbitset_elt_unlink (bset, elt);
+    }
+}
+
+
+/* Set all bits in the bitset to zero.  */
+static void
+lbitset_zero (bitset bset)
+{
+  lbitset_elt *head = LBITSET_HEAD (bset);
+  if (!head)
+    return;
+
+  /* Clear a bitset by freeing the linked list at the head element.  */
+  lbitset_prune (bset, head);
+}
+
+
+/* Is DST == SRC?  */
+static inline bool
+lbitset_equal_p (bitset dst, bitset src)
+{
+  if (src == dst)
+    return true;
+
+  lbitset_weed (src);
+  lbitset_weed (dst);
+  lbitset_elt *selt;
+  lbitset_elt *delt;
+  for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
+       selt && delt; selt = selt->next, delt = delt->next)
+    {
+      if (selt->index != delt->index)
+        return false;
+
+      for (int j = 0; j < LBITSET_ELT_WORDS; j++)
+        if (delt->words[j] != selt->words[j])
+          return false;
+    }
+  return !selt && !delt;
+}
+
+
+/* Copy bits from bitset SRC to bitset DST.  */
+static inline void
+lbitset_copy (bitset dst, bitset src)
+{
+  if (src == dst)
+    return;
+
+  lbitset_zero (dst);
+
+  lbitset_elt *head = LBITSET_HEAD (src);
+  if (!head)
+    return;
+
+  lbitset_elt *prev = 0;
+  lbitset_elt *tmp;
+  for (lbitset_elt *elt = head; elt; elt = elt->next)
+    {
+      tmp = lbitset_elt_alloc ();
+      tmp->index = elt->index;
+      tmp->prev = prev;
+      tmp->next = 0;
+      if (prev)
+        prev->next = tmp;
+      else
+        LBITSET_HEAD (dst) = tmp;
+      prev = tmp;
+
+      memcpy (tmp->words, elt->words, sizeof (elt->words));
+    }
+  LBITSET_TAIL (dst) = tmp;
+
+  dst->b.csize = LBITSET_ELT_WORDS;
+  dst->b.cdata = LBITSET_HEAD (dst)->words;
+  dst->b.cindex = LBITSET_HEAD (dst)->index;
+}
+
+
+/* Copy bits from bitset SRC to bitset DST.  Return true if
+   bitsets different.  */
+static inline bool
+lbitset_copy_cmp (bitset dst, bitset src)
+{
+  if (src == dst)
+    return false;
+
+  if (!LBITSET_HEAD (dst))
+    {
+      lbitset_copy (dst, src);
+      return LBITSET_HEAD (src) != 0;
+    }
+
+  if (lbitset_equal_p (dst, src))
+    return false;
+
+  lbitset_copy (dst, src);
+  return true;
+}
+
+
+static bitset_bindex
+lbitset_resize (bitset src, bitset_bindex size)
+{
+  BITSET_NBITS_ (src) = size;
+
+  /* Need to prune any excess bits.  FIXME.  */
+  return size;
+}
+
+/* Set bit BITNO in bitset DST.  */
+static void
+lbitset_set (bitset dst, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  lbitset_elt_find (dst, windex, LBITSET_CREATE);
+
+  dst->b.cdata[windex - dst->b.cindex] |=
+    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
+}
+
+
+/* Reset bit BITNO in bitset DST.  */
+static void
+lbitset_reset (bitset dst, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  if (!lbitset_elt_find (dst, windex, LBITSET_FIND))
+    return;
+
+  dst->b.cdata[windex - dst->b.cindex] &=
+    ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
+
+  /* If all the data is zero, perhaps we should unlink it now...  */
+}
+
+
+/* Test bit BITNO in bitset SRC.  */
+static bool
+lbitset_test (bitset src, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  return (lbitset_elt_find (src, windex, LBITSET_FIND)
+          && ((src->b.cdata[windex - src->b.cindex]
+               >> (bitno % BITSET_WORD_BITS))
+              & 1));
+}
+
+
+static void
+lbitset_free (bitset bset)
+{
+  lbitset_zero (bset);
+}
+
+
+/* Find list of up to NUM bits set in BSET starting from and including
+ *NEXT and store in array LIST.  Return with actual number of bits
+ found and with *NEXT indicating where search stopped.  */
+static bitset_bindex
+lbitset_list_reverse (bitset bset, bitset_bindex *list,
+                      bitset_bindex num, bitset_bindex *next)
+{
+  lbitset_elt *elt = LBITSET_TAIL (bset);
+  if (!elt)
+    return 0;
+
+  bitset_bindex n_bits = (elt->index + LBITSET_ELT_WORDS) * BITSET_WORD_BITS;
+  bitset_bindex rbitno = *next;
+
+  if (rbitno >= n_bits)
+    return 0;
+
+  bitset_bindex bitno = n_bits - (rbitno + 1);
+
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  /* Skip back to starting element.  */
+  for (; elt && elt->index > windex; elt = elt->prev)
+    continue;
+
+  if (!elt)
+    return 0;
+
+  unsigned bcount;
+  if (windex >= elt->index + LBITSET_ELT_WORDS)
+    {
+      /* We are trying to start in no-mans land so start
+         at end of current elt.  */
+      bcount = BITSET_WORD_BITS - 1;
+      windex = elt->index + LBITSET_ELT_WORDS - 1;
+    }
+  else
+    {
+      bcount = bitno % BITSET_WORD_BITS;
+    }
+
+  bitset_bindex count = 0;
+  bitset_bindex boffset = windex * BITSET_WORD_BITS;
+
+  /* If num is 1, we could speed things up with a binary search
+     of the word of interest.  */
+
+  while (elt)
+    {
+      bitset_word *srcp = elt->words;
+
+      for (; (windex - elt->index) < LBITSET_ELT_WORDS;
+           windex--, boffset -= BITSET_WORD_BITS,
+             bcount = BITSET_WORD_BITS - 1)
+        {
+          bitset_word word =
+            srcp[windex - elt->index] << (BITSET_WORD_BITS - 1 - bcount);
+
+          for (; word; bcount--)
+            {
+              if (word & BITSET_MSB)
+                {
+                  list[count++] = boffset + bcount;
+                  if (count >= num)
+                    {
+                      *next = n_bits - (boffset + bcount);
+                      return count;
+                    }
+                }
+              word <<= 1;
+            }
+        }
+
+      elt = elt->prev;
+      if (elt)
+        {
+          windex = elt->index + LBITSET_ELT_WORDS - 1;
+          boffset = windex * BITSET_WORD_BITS;
+        }
+    }
+
+  *next = n_bits - (boffset + 1);
+  return count;
+}
+
+
+/* Find list of up to NUM bits set in BSET starting from and including
+   *NEXT and store in array LIST.  Return with actual number of bits
+   found and with *NEXT indicating where search stopped.  */
+static bitset_bindex
+lbitset_list (bitset bset, bitset_bindex *list,
+              bitset_bindex num, bitset_bindex *next)
+{
+  lbitset_elt *head = LBITSET_HEAD (bset);
+  if (!head)
+    return 0;
+
+  bitset_windex windex;
+  lbitset_elt *elt;
+
+  bitset_bindex bitno = *next;
+  bitset_bindex count = 0;
+
+  if (!bitno)
+    {
+      /* This is the most common case.  */
+
+      /* Start with the first element.  */
+      elt = head;
+      windex = elt->index;
+      bitno = windex * BITSET_WORD_BITS;
+    }
+  else
+    {
+      windex = bitno / BITSET_WORD_BITS;
+
+      /* Skip to starting element.  */
+      for (elt = head;
+           elt && (elt->index + LBITSET_ELT_WORDS - 1) < windex;
+           elt = elt->next)
+        continue;
+
+      if (!elt)
+        return 0;
+
+      if (windex < elt->index)
+        {
+          windex = elt->index;
+          bitno = windex * BITSET_WORD_BITS;
+        }
+      else
+        {
+          bitset_word *srcp = elt->words;
+
+          /* We are starting within an element.  */
+
+          for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
+            {
+              bitset_word word = srcp[windex - elt->index] >> (bitno % BITSET_WORD_BITS);
+
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    {
+                      list[count++] = bitno;
+                      if (count >= num)
+                        {
+                          *next = bitno + 1;
+                          return count;
+                        }
+                    }
+                  word >>= 1;
+                }
+              bitno = (windex + 1) * BITSET_WORD_BITS;
+            }
+
+          elt = elt->next;
+          if (elt)
+            {
+              windex = elt->index;
+              bitno = windex * BITSET_WORD_BITS;
+            }
+        }
+    }
+
+
+  /* If num is 1, we could speed things up with a binary search
+     of the word of interest.  */
+
+  while (elt)
+    {
+      bitset_word *srcp = elt->words;
+
+      if ((count + LBITSET_ELT_BITS) < num)
+        {
+          /* The coast is clear, plant boot!  */
+
+#if LBITSET_ELT_WORDS == 2
+          bitset_word word = srcp[0];
+          if (word)
+            {
+              if (!(word & 0xffff))
+                {
+                  word >>= 16;
+                  bitno += 16;
+                }
+              if (!(word & 0xff))
+                {
+                  word >>= 8;
+                  bitno += 8;
+                }
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    list[count++] = bitno;
+                  word >>= 1;
+                }
+            }
+          windex++;
+          bitno = windex * BITSET_WORD_BITS;
+
+          word = srcp[1];
+          if (word)
+            {
+              if (!(word & 0xffff))
+                {
+                  word >>= 16;
+                  bitno += 16;
+                }
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    list[count++] = bitno;
+                  word >>= 1;
+                }
+            }
+          windex++;
+          bitno = windex * BITSET_WORD_BITS;
+#else
+          for (int i = 0; i < LBITSET_ELT_WORDS; i++)
+            {
+              bitset_word word = srcp[i];
+              if (word)
+                {
+                  if (!(word & 0xffff))
+                    {
+                      word >>= 16;
+                      bitno += 16;
+                    }
+                  if (!(word & 0xff))
+                    {
+                      word >>= 8;
+                      bitno += 8;
+                    }
+                  for (; word; bitno++)
+                    {
+                      if (word & 1)
+                        list[count++] = bitno;
+                      word >>= 1;
+                    }
+                }
+              windex++;
+              bitno = windex * BITSET_WORD_BITS;
+            }
+#endif
+        }
+      else
+        {
+          /* Tread more carefully since we need to check
+             if array overflows.  */
+
+          for (int i = 0; i < LBITSET_ELT_WORDS; i++)
+            {
+              for (bitset_word word = srcp[i]; word; bitno++)
+                {
+                  if (word & 1)
+                    {
+                      list[count++] = bitno;
+                      if (count >= num)
+                        {
+                          *next = bitno + 1;
+                          return count;
+                        }
+                    }
+                  word >>= 1;
+                }
+              windex++;
+              bitno = windex * BITSET_WORD_BITS;
+            }
+        }
+
+      elt = elt->next;
+      if (elt)
+        {
+          windex = elt->index;
+          bitno = windex * BITSET_WORD_BITS;
+        }
+    }
+
+  *next = bitno;
+  return count;
+}
+
+
+static bool
+lbitset_empty_p (bitset dst)
+{
+  lbitset_elt *elt;
+  lbitset_elt *next;
+
+  for (elt = LBITSET_HEAD (dst); elt; elt = next)
+    {
+      next = elt->next;
+      if (!lbitset_elt_zero_p (elt))
+        return false;
+      /* Weed as we go.  */
+      lbitset_elt_unlink (dst, elt);
+    }
+
+  return true;
+}
+
+
+/* Ensure that any unused bits within the last element are clear.  */
+static inline void
+lbitset_unused_clear (bitset dst)
+{
+  bitset_bindex n_bits = BITSET_SIZE_ (dst);
+  unsigned last_bit = n_bits % LBITSET_ELT_BITS;
+
+  if (last_bit)
+    {
+      lbitset_elt *elt = LBITSET_TAIL (dst);
+      bitset_word *srcp = elt->words;
+      bitset_windex windex = n_bits / BITSET_WORD_BITS;
+
+      srcp[windex - elt->index]
+        &= ((bitset_word) 1 << (last_bit % BITSET_WORD_BITS)) - 1;
+      windex++;
+
+      for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
+        srcp[windex - elt->index] = 0;
+    }
+}
+
+
+static void
+lbitset_ones (bitset dst)
+{
+  /* This is a decidedly unfriendly operation for a linked list
+     bitset!  It makes a sparse bitset become dense.  An alternative
+     is to have a flag that indicates that the bitset stores the
+     complement of what it indicates.  */
+
+  bitset_windex windex
+    = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS;
+
+  for (bitset_windex i = 0; i < windex; i += LBITSET_ELT_WORDS)
+    {
+      /* Create new elements if they cannot be found.  */
+      lbitset_elt *elt = lbitset_elt_find (dst, i, LBITSET_CREATE);
+      memset (elt->words, -1, sizeof (elt->words));
+    }
+
+  lbitset_unused_clear (dst);
+}
+
+
+static void
+lbitset_not (bitset dst, bitset src)
+{
+  bitset_windex windex
+    = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS;
+
+  for (bitset_windex i = 0; i < windex; i += LBITSET_ELT_WORDS)
+    {
+      /* Create new elements for dst if they cannot be found
+         or substitute zero elements if src elements not found.  */
+      lbitset_elt *selt = lbitset_elt_find (src, i, LBITSET_SUBST);
+      lbitset_elt *delt = lbitset_elt_find (dst, i, LBITSET_CREATE);
+
+      for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++)
+        delt->words[j] = ~selt->words[j];
+    }
+  lbitset_unused_clear (dst);
+  lbitset_weed (dst);
+}
+
+
+/* Is DST == DST | SRC?  */
+static bool
+lbitset_subset_p (bitset dst, bitset src)
+{
+  for (lbitset_elt *selt = LBITSET_HEAD (src), *delt = LBITSET_HEAD (dst);
+       selt || delt; selt = selt->next, delt = delt->next)
+    {
+      if (!selt)
+        selt = &lbitset_zero_elts[0];
+      else if (!delt)
+        delt = &lbitset_zero_elts[0];
+      else if (selt->index != delt->index)
+        {
+          if (selt->index < delt->index)
+            {
+              lbitset_zero_elts[2].next = delt;
+              delt = &lbitset_zero_elts[2];
+            }
+          else
+            {
+              lbitset_zero_elts[1].next = selt;
+              selt = &lbitset_zero_elts[1];
+            }
+        }
+
+      for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++)
+        if (delt->words[j] != (selt->words[j] | delt->words[j]))
+          return false;
+    }
+  return true;
+}
+
+
+/* Is DST & SRC == 0?  */
+static bool
+lbitset_disjoint_p (bitset dst, bitset src)
+{
+  for (lbitset_elt *selt = LBITSET_HEAD (src), *delt = LBITSET_HEAD (dst);
+       selt && delt; selt = selt->next, delt = delt->next)
+    {
+      if (selt->index != delt->index)
+        {
+          if (selt->index < delt->index)
+            {
+              lbitset_zero_elts[2].next = delt;
+              delt = &lbitset_zero_elts[2];
+            }
+          else
+            {
+              lbitset_zero_elts[1].next = selt;
+              selt = &lbitset_zero_elts[1];
+            }
+          /* Since the elements are different, there is no
+             intersection of these elements.  */
+          continue;
+        }
+
+      for (unsigned j = 0; j < LBITSET_ELT_WORDS; j++)
+        if (selt->words[j] & delt->words[j])
+          return false;
+    }
+  return true;
+}
+
+
+static bool
+lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
+{
+  lbitset_elt *selt1 = LBITSET_HEAD (src1);
+  lbitset_elt *selt2 = LBITSET_HEAD (src2);
+  lbitset_elt *delt = LBITSET_HEAD (dst);
+  bool changed = false;
+
+  LBITSET_HEAD (dst) = 0;
+  dst->b.csize = 0;
+
+  bitset_windex windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
+  bitset_windex windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
+
+  while (selt1 || selt2)
+    {
+      bitset_windex windex;
+      lbitset_elt *stmp1;
+      lbitset_elt *stmp2;
+
+      /* Figure out whether we need to substitute zero elements for
+         missing links.  */
+      if (windex1 == windex2)
+        {
+          windex = windex1;
+          stmp1 = selt1;
+          stmp2 = selt2;
+          selt1 = selt1->next;
+          windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
+          selt2 = selt2->next;
+          windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
+        }
+      else if (windex1 < windex2)
+        {
+          windex = windex1;
+          stmp1 = selt1;
+          stmp2 = &lbitset_zero_elts[0];
+          selt1 = selt1->next;
+          windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
+        }
+      else
+        {
+          windex = windex2;
+          stmp1 = &lbitset_zero_elts[0];
+          stmp2 = selt2;
+          selt2 = selt2->next;
+          windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
+        }
+
+      /* Find the appropriate element from DST.  Begin by discarding
+         elements that we've skipped.  */
+      lbitset_elt *dtmp;
+      while (delt && delt->index < windex)
+        {
+          changed = true;
+          dtmp = delt;
+          delt = delt->next;
+          lbitset_elt_free (dtmp);
+        }
+      if (delt && delt->index == windex)
+        {
+          dtmp = delt;
+          delt = delt->next;
+        }
+      else
+        dtmp = lbitset_elt_calloc ();
+
+      /* Do the operation, and if any bits are set, link it into the
+         linked list.  */
+      bitset_word *srcp1 = stmp1->words;
+      bitset_word *srcp2 = stmp2->words;
+      bitset_word *dstp = dtmp->words;
+      switch (op)
+        {
+        default:
+          abort ();
+
+        case BITSET_OP_OR:
+          for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ | *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_AND:
+          for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ & *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_XOR:
+          for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ ^ *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_ANDN:
+          for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ & ~(*srcp2++);
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+        }
+
+      if (!lbitset_elt_zero_p (dtmp))
+        {
+          dtmp->index = windex;
+          /* Perhaps this could be optimised...  */
+          lbitset_elt_link (dst, dtmp);
+        }
+      else
+        {
+          lbitset_elt_free (dtmp);
+        }
+    }
+
+  /* If we have elements of DST left over, free them all.  */
+  if (delt)
+    {
+      changed = true;
+      lbitset_prune (dst, delt);
+    }
+
+  return changed;
+}
+
+
+static bool
+lbitset_and_cmp (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_elt *selt1 = LBITSET_HEAD (src1);
+  lbitset_elt *selt2 = LBITSET_HEAD (src2);
+
+  if (!selt2)
+    {
+      lbitset_weed (dst);
+      bool changed = !LBITSET_HEAD (dst);
+      lbitset_zero (dst);
+      return changed;
+    }
+  else if (!selt1)
+    {
+      lbitset_weed (dst);
+      bool changed = !LBITSET_HEAD (dst);
+      lbitset_zero (dst);
+      return changed;
+    }
+  else
+    return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
+}
+
+
+static void
+lbitset_and (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_and_cmp (dst, src1, src2);
+}
+
+
+static bool
+lbitset_andn_cmp (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_elt *selt1 = LBITSET_HEAD (src1);
+  lbitset_elt *selt2 = LBITSET_HEAD (src2);
+
+  if (!selt2)
+    {
+      return lbitset_copy_cmp (dst, src1);
+    }
+  else if (!selt1)
+    {
+      lbitset_weed (dst);
+      bool changed = !LBITSET_HEAD (dst);
+      lbitset_zero (dst);
+      return changed;
+    }
+  else
+    return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
+}
+
+
+static void
+lbitset_andn (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_andn_cmp (dst, src1, src2);
+}
+
+
+static bool
+lbitset_or_cmp (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_elt *selt1 = LBITSET_HEAD (src1);
+  lbitset_elt *selt2 = LBITSET_HEAD (src2);
+
+  if (!selt2)
+    return lbitset_copy_cmp (dst, src1);
+  else if (!selt1)
+    return lbitset_copy_cmp (dst, src2);
+  else
+    return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
+}
+
+
+static void
+lbitset_or (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_or_cmp (dst, src1, src2);
+}
+
+
+static bool
+lbitset_xor_cmp (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_elt *selt1 = LBITSET_HEAD (src1);
+  lbitset_elt *selt2 = LBITSET_HEAD (src2);
+
+  if (!selt2)
+    return lbitset_copy_cmp (dst, src1);
+  else if (!selt1)
+    return lbitset_copy_cmp (dst, src2);
+  else
+    return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
+}
+
+
+static void
+lbitset_xor (bitset dst, bitset src1, bitset src2)
+{
+  lbitset_xor_cmp (dst, src1, src2);
+}
+
+
+
+/* Vector of operations for linked-list bitsets.  */
+struct bitset_vtable lbitset_vtable = {
+  lbitset_set,
+  lbitset_reset,
+  bitset_toggle_,
+  lbitset_test,
+  lbitset_resize,
+  bitset_size_,
+  bitset_count_,
+  lbitset_empty_p,
+  lbitset_ones,
+  lbitset_zero,
+  lbitset_copy,
+  lbitset_disjoint_p,
+  lbitset_equal_p,
+  lbitset_not,
+  lbitset_subset_p,
+  lbitset_and,
+  lbitset_and_cmp,
+  lbitset_andn,
+  lbitset_andn_cmp,
+  lbitset_or,
+  lbitset_or_cmp,
+  lbitset_xor,
+  lbitset_xor_cmp,
+  bitset_and_or_,
+  bitset_and_or_cmp_,
+  bitset_andn_or_,
+  bitset_andn_or_cmp_,
+  bitset_or_and_,
+  bitset_or_and_cmp_,
+  lbitset_list,
+  lbitset_list_reverse,
+  lbitset_free,
+  BITSET_LIST
+};
+
+
+/* Return size of initial structure.  */
+size_t
+lbitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
+{
+  return sizeof (struct lbitset_struct);
+}
+
+
+/* Initialize a bitset.  */
+bitset
+lbitset_init (bitset bset, bitset_bindex n_bits ATTRIBUTE_UNUSED)
+{
+  BITSET_NBITS_ (bset) = n_bits;
+  bset->b.vtable = &lbitset_vtable;
+  return bset;
+}
+
+
+void
+lbitset_release_memory (void)
+{
+  lbitset_free_list = 0;
+  if (lbitset_obstack_init)
+    {
+      lbitset_obstack_init = false;
+      obstack_free (&lbitset_obstack, NULL);
+    }
+}
+
+
+/* Function to be called from debugger to debug lbitset.  */
+void
+debug_lbitset (bitset bset)
+{
+  if (!bset)
+    return;
+
+  for (lbitset_elt *elt = LBITSET_HEAD (bset); elt; elt = elt->next)
+    {
+      fprintf (stderr, "Elt %lu\n", (unsigned long) elt->index);
+      for (unsigned i = 0; i < LBITSET_ELT_WORDS; i++)
+        {
+          bitset_word word = elt->words[i];
+
+          fprintf (stderr, "  Word %u:", i);
+          for (unsigned j = 0; j < LBITSET_WORD_BITS; j++)
+            if ((word & ((bitset_word) 1 << j)))
+              fprintf (stderr, " %u", j);
+          fprintf (stderr, "\n");
+        }
+    }
+}
diff --git a/lib/lbitset.h b/lib/bitset/list.h
similarity index 67%
rename from lib/lbitset.h
rename to lib/bitset/list.h
index 79804da..b87e6f2 100644
--- a/lib/lbitset.h
+++ b/lib/bitset/list.h
@@ -1,6 +1,7 @@
 /* Functions to support lbitsets.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,17 +16,17 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _LBITSET_H
-#define _LBITSET_H
+#ifndef _BITSET_LIST_H
+#define _BITSET_LIST_H
 
 #include "bitset.h"
 
-extern size_t lbitset_bytes (bitset_bindex);
+size_t lbitset_bytes (bitset_bindex);
 
-extern bitset lbitset_init (bitset, bitset_bindex);
+bitset lbitset_init (bitset, bitset_bindex);
 
-extern void lbitset_release_memory (void);
+void lbitset_release_memory (void);
 
 #endif
diff --git a/lib/bitset_stats.c b/lib/bitset/stats.c
similarity index 71%
rename from lib/bitset_stats.c
rename to lib/bitset/stats.c
index bde9b98..45d67ee 100644
--- a/lib/bitset_stats.c
+++ b/lib/bitset/stats.c
@@ -1,6 +1,6 @@
 /* Bitset statistics.
 
-   Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2006, 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* This file is a wrapper bitset implementation for the other bitset
    implementations.  It provides bitset compatibility checking and
@@ -26,20 +26,21 @@
 
 #include <config.h>
 
-#include "bitset_stats.h"
+#include "bitset/stats.h"
 
-#include "bbitset.h"
-#include "abitset.h"
-#include "ebitset.h"
-#include "lbitset.h"
-#include "vbitset.h"
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
 
 #include "gettext.h"
 #define _(Msgid)  gettext (Msgid)
 
+#include "bitset/array.h"
+#include "bitset/base.h"
+#include "bitset/list.h"
+#include "bitset/table.h"
+#include "bitset/vector.h"
+
 /* Configuration macros.  */
 #define BITSET_STATS_FILE "bitset.dat"
 #define BITSET_LOG_COUNT_BINS 10
@@ -48,51 +49,51 @@
 
 
 /* Accessor macros.  */
-#define BITSET_STATS_ALLOCS_INC(TYPE)			\
+#define BITSET_STATS_ALLOCS_INC(TYPE)                   \
     bitset_stats_info->types[(TYPE)].allocs++
-#define BITSET_STATS_FREES_INC(BSET)			\
+#define BITSET_STATS_FREES_INC(BSET)                    \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++
-#define BITSET_STATS_SETS_INC(BSET)			\
+#define BITSET_STATS_SETS_INC(BSET)                     \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++
-#define BITSET_STATS_CACHE_SETS_INC(BSET)		\
+#define BITSET_STATS_CACHE_SETS_INC(BSET)               \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++
-#define BITSET_STATS_RESETS_INC(BSET)			\
+#define BITSET_STATS_RESETS_INC(BSET)                   \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++
-#define BITSET_STATS_CACHE_RESETS_INC(BSET)		\
+#define BITSET_STATS_CACHE_RESETS_INC(BSET)             \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++
-#define BITSET_STATS_TESTS_INC(BSET)			\
+#define BITSET_STATS_TESTS_INC(BSET)                    \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++
-#define BITSET_STATS_CACHE_TESTS_INC(BSET)		\
+#define BITSET_STATS_CACHE_TESTS_INC(BSET)              \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++
-#define BITSET_STATS_LISTS_INC(BSET)			\
+#define BITSET_STATS_LISTS_INC(BSET)                    \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++
-#define BITSET_STATS_LIST_COUNTS_INC(BSET, I)		\
+#define BITSET_STATS_LIST_COUNTS_INC(BSET, I)           \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++
-#define BITSET_STATS_LIST_SIZES_INC(BSET, I)		\
+#define BITSET_STATS_LIST_SIZES_INC(BSET, I)            \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++
-#define BITSET_STATS_LIST_DENSITY_INC(BSET, I)		\
+#define BITSET_STATS_LIST_DENSITY_INC(BSET, I)          \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++
 
 
 struct bitset_type_info_struct
 {
-  unsigned int allocs;
-  unsigned int frees;
-  unsigned int lists;
-  unsigned int sets;
-  unsigned int cache_sets;
-  unsigned int resets;
-  unsigned int cache_resets;
-  unsigned int tests;
-  unsigned int cache_tests;
-  unsigned int list_counts[BITSET_LOG_COUNT_BINS];
-  unsigned int list_sizes[BITSET_LOG_SIZE_BINS];
-  unsigned int list_density[BITSET_DENSITY_BINS];
+  unsigned allocs;
+  unsigned frees;
+  unsigned lists;
+  unsigned sets;
+  unsigned cache_sets;
+  unsigned resets;
+  unsigned cache_resets;
+  unsigned tests;
+  unsigned cache_tests;
+  unsigned list_counts[BITSET_LOG_COUNT_BINS];
+  unsigned list_sizes[BITSET_LOG_SIZE_BINS];
+  unsigned list_density[BITSET_DENSITY_BINS];
 };
 
 struct bitset_stats_info_struct
 {
-  unsigned int runs;
+  unsigned runs;
   struct bitset_type_info_struct types[BITSET_TYPE_NUM];
 };
 
@@ -105,98 +106,97 @@
 /* Print a percentage histogram with message MSG to FILE.  */
 static void
 bitset_percent_histogram_print (FILE *file, const char *name, const char *msg,
-				unsigned int n_bins, unsigned int *bins)
+                                unsigned n_bins, unsigned *bins)
 {
-  unsigned int i;
-  unsigned int total;
-
-  total = 0;
-  for (i = 0; i < n_bins; i++)
+  unsigned total = 0;
+  for (unsigned i = 0; i < n_bins; i++)
     total += bins[i];
 
   if (!total)
     return;
 
   fprintf (file, "%s %s", name, msg);
-  for (i = 0; i < n_bins; i++)
+  for (unsigned i = 0; i < n_bins; i++)
     fprintf (file, "%.0f-%.0f%%\t%8u (%5.1f%%)\n",
-	     i * 100.0 / n_bins,
-	     (i + 1) * 100.0 / n_bins, bins[i],
-	     (100.0 * bins[i]) / total);
+             i * 100.0 / n_bins,
+             (i + 1) * 100.0 / n_bins, bins[i],
+             (100.0 * bins[i]) / total);
 }
 
 
 /* Print a log histogram with message MSG to FILE.  */
 static void
 bitset_log_histogram_print (FILE *file, const char *name, const char *msg,
-			    unsigned int n_bins, unsigned int *bins)
+                            unsigned n_bins, unsigned *bins)
 {
-  unsigned int i;
-  unsigned int total;
-  unsigned int max_width;
-
-  total = 0;
-  for (i = 0; i < n_bins; i++)
+  unsigned total = 0;
+  for (unsigned i = 0; i < n_bins; i++)
     total += bins[i];
 
   if (!total)
     return;
 
   /* Determine number of useful bins.  */
-  for (i = n_bins; i > 3 && ! bins[i - 1]; i--)
-     continue;
-  n_bins = i;
+  {
+    unsigned i;
+    for (i = n_bins; i > 3 && ! bins[i - 1]; i--)
+      continue;
+    n_bins = i;
+  }
 
   /* 2 * ceil (log10 (2) * (N - 1)) + 1.  */
-  max_width = 2 * (unsigned int) (0.30103 * (n_bins - 1) + 0.9999) + 1;
+  unsigned max_width = 2 * (unsigned) (0.30103 * (n_bins - 1) + 0.9999) + 1;
 
   fprintf (file, "%s %s", name, msg);
-  for (i = 0; i < 2; i++)
-    fprintf (file, "%*d\t%8u (%5.1f%%)\n",
-	     max_width, i, bins[i], 100.0 * bins[i] / total);
+  {
+    unsigned i;
+    for (i = 0; i < 2; i++)
+      fprintf (file, "%*d\t%8u (%5.1f%%)\n",
+               max_width, i, bins[i], 100.0 * bins[i] / total);
 
-  for (; i < n_bins; i++)
-    fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n",
-	     max_width - ((unsigned int) (0.30103 * (i) + 0.9999) + 1),
-	     1UL << (i - 1),
-	     (1UL << i) - 1,
-	     bins[i],
-	     (100.0 * bins[i]) / total);
+    for (; i < n_bins; i++)
+      fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n",
+               max_width - ((unsigned) (0.30103 * (i) + 0.9999) + 1),
+               1UL << (i - 1),
+               (1UL << i) - 1,
+               bins[i],
+               (100.0 * bins[i]) / total);
+  }
 }
 
 
 /* Print bitset statistics to FILE.  */
 static void
 bitset_stats_print_1 (FILE *file, const char *name,
-		      struct bitset_type_info_struct *stats)
+                      struct bitset_type_info_struct *stats)
 {
   if (!stats)
     return;
 
   fprintf (file, "%s:\n", name);
   fprintf (file, _("%u bitset_allocs, %u freed (%.2f%%).\n"),
-	   stats->allocs, stats->frees,
-	   stats->allocs ? 100.0 * stats->frees / stats->allocs : 0);
+           stats->allocs, stats->frees,
+           stats->allocs ? 100.0 * stats->frees / stats->allocs : 0);
   fprintf (file, _("%u bitset_sets, %u cached (%.2f%%)\n"),
-	   stats->sets, stats->cache_sets,
-	   stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0);
+           stats->sets, stats->cache_sets,
+           stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0);
   fprintf (file, _("%u bitset_resets, %u cached (%.2f%%)\n"),
-	   stats->resets, stats->cache_resets,
-	   stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0);
+           stats->resets, stats->cache_resets,
+           stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0);
   fprintf (file, _("%u bitset_tests, %u cached (%.2f%%)\n"),
-	   stats->tests, stats->cache_tests,
-	   stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0);
+           stats->tests, stats->cache_tests,
+           stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0);
 
   fprintf (file, _("%u bitset_lists\n"), stats->lists);
 
   bitset_log_histogram_print (file, name, _("count log histogram\n"),
-			      BITSET_LOG_COUNT_BINS, stats->list_counts);
+                              BITSET_LOG_COUNT_BINS, stats->list_counts);
 
   bitset_log_histogram_print (file, name, _("size log histogram\n"),
-			      BITSET_LOG_SIZE_BINS, stats->list_sizes);
+                              BITSET_LOG_SIZE_BINS, stats->list_sizes);
 
   bitset_percent_histogram_print (file, name, _("density histogram\n"),
-				  BITSET_DENSITY_BINS, stats->list_density);
+                                  BITSET_DENSITY_BINS, stats->list_density);
 }
 
 
@@ -204,8 +204,6 @@
 static void
 bitset_stats_print (FILE *file, bool verbose ATTRIBUTE_UNUSED)
 {
-  int i;
-
   if (!bitset_stats_info)
     return;
 
@@ -214,9 +212,9 @@
   if (bitset_stats_info->runs > 1)
     fprintf (file, _("Accumulated runs = %u\n"), bitset_stats_info->runs);
 
-  for (i = 0; i < BITSET_TYPE_NUM; i++)
+  for (int i = 0; i < BITSET_TYPE_NUM; i++)
     bitset_stats_print_1 (file, bitset_type_names[i],
-			  &bitset_stats_info->types[i]);
+                          &bitset_stats_info->types[i]);
 }
 
 
@@ -241,15 +239,13 @@
 void
 bitset_stats_read (const char *file_name)
 {
-  FILE *file;
-
   if (!bitset_stats_info)
     return;
 
   if (!file_name)
     file_name = BITSET_STATS_FILE;
 
-  file = fopen (file_name, "r");
+  FILE *file = fopen (file_name, "r");
   if (file)
     {
       if (fread (&bitset_stats_info_data, sizeof (bitset_stats_info_data),
@@ -271,15 +267,13 @@
 void
 bitset_stats_write (const char *file_name)
 {
-  FILE *file;
-
   if (!bitset_stats_info)
     return;
 
   if (!file_name)
     file_name = BITSET_STATS_FILE;
 
-  file = fopen (file_name, "w");
+  FILE *file = fopen (file_name, "w");
   if (file)
     {
       if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data),
@@ -340,7 +334,7 @@
   if (offset < bset->b.csize)
     {
       bset->b.cdata[offset] &=
-	~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
+        ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
       BITSET_STATS_CACHE_RESETS_INC (bset);
     }
   else
@@ -351,7 +345,7 @@
 static bool
 bitset_stats_toggle (bitset src, bitset_bindex bitno)
 {
-    return BITSET_TOGGLE_ (src->s.bset, bitno);
+  return BITSET_TOGGLE_ (src->s.bset, bitno);
 }
 
 
@@ -377,7 +371,7 @@
 static bitset_bindex
 bitset_stats_resize (bitset src, bitset_bindex size)
 {
-    return BITSET_RESIZE_ (src->s.bset, size);
+  return BITSET_RESIZE_ (src->s.bset, size);
 }
 
 
@@ -570,44 +564,49 @@
 
 static bitset_bindex
 bitset_stats_list (bitset bset, bitset_bindex *list,
-		   bitset_bindex num, bitset_bindex *next)
+                   bitset_bindex num, bitset_bindex *next)
 {
-  bitset_bindex count;
-  bitset_bindex tmp;
-  bitset_bindex size;
-  bitset_bindex i;
-
-  count = BITSET_LIST_ (bset->s.bset, list, num, next);
+  bitset_bindex count = BITSET_LIST_ (bset->s.bset, list, num, next);
 
   BITSET_STATS_LISTS_INC (bset->s.bset);
 
   /* Log histogram of number of set bits.  */
-  for (i = 0, tmp = count; tmp; tmp >>= 1, i++)
-     continue;
-  if (i >= BITSET_LOG_COUNT_BINS)
-     i = BITSET_LOG_COUNT_BINS - 1;
-  BITSET_STATS_LIST_COUNTS_INC (bset->s.bset, i);
+  {
+    bitset_bindex i;
+    bitset_bindex tmp;
+    for (i = 0, tmp = count; tmp; tmp >>= 1, i++)
+      continue;
+    if (i >= BITSET_LOG_COUNT_BINS)
+      i = BITSET_LOG_COUNT_BINS - 1;
+    BITSET_STATS_LIST_COUNTS_INC (bset->s.bset, i);
+  }
 
   /* Log histogram of number of bits in set.  */
-  size = BITSET_SIZE_ (bset->s.bset);
-  for (i = 0, tmp = size; tmp; tmp >>= 1, i++)
-     continue;
-  if (i >= BITSET_LOG_SIZE_BINS)
-     i = BITSET_LOG_SIZE_BINS - 1;
-  BITSET_STATS_LIST_SIZES_INC (bset->s.bset, i);
+  bitset_bindex size = BITSET_SIZE_ (bset->s.bset);
+  {
+    bitset_bindex i;
+    bitset_bindex tmp;
+    for (i = 0, tmp = size; tmp; tmp >>= 1, i++)
+      continue;
+    if (i >= BITSET_LOG_SIZE_BINS)
+      i = BITSET_LOG_SIZE_BINS - 1;
+    BITSET_STATS_LIST_SIZES_INC (bset->s.bset, i);
+  }
 
   /* Histogram of fraction of bits set.  */
-  i = size ? (count * BITSET_DENSITY_BINS) / size : 0;
-  if (i >= BITSET_DENSITY_BINS)
-     i = BITSET_DENSITY_BINS - 1;
-  BITSET_STATS_LIST_DENSITY_INC (bset->s.bset, i);
+  {
+    bitset_bindex i = size ? (count * BITSET_DENSITY_BINS) / size : 0;
+    if (i >= BITSET_DENSITY_BINS)
+      i = BITSET_DENSITY_BINS - 1;
+    BITSET_STATS_LIST_DENSITY_INC (bset->s.bset, i);
+  }
   return count;
 }
 
 
 static bitset_bindex
 bitset_stats_list_reverse (bitset bset, bitset_bindex *list,
-			   bitset_bindex num, bitset_bindex *next)
+                           bitset_bindex num, bitset_bindex *next)
 {
   return BITSET_LIST_REVERSE_ (bset->s.bset, list, num, next);
 }
@@ -662,7 +661,7 @@
 enum bitset_type
 bitset_stats_type_get (bitset bset)
 {
-   return BITSET_TYPE_ (bset->s.bset);
+  return BITSET_TYPE_ (bset->s.bset);
 }
 
 
@@ -676,9 +675,6 @@
 bitset
 bitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type)
 {
-  size_t bytes;
-  bitset sbset;
-
   bset->b.vtable = &bitset_stats_vtable;
 
   /* Disable cache.  */
@@ -696,32 +692,38 @@
       abort ();
 
     case BITSET_ARRAY:
-      bytes = abitset_bytes (n_bits);
-      sbset = xcalloc (1, bytes);
-      abitset_init (sbset, n_bits);
+      {
+        size_t bytes = abitset_bytes (n_bits);
+        bset->s.bset = xzalloc (bytes);
+        abitset_init (bset->s.bset, n_bits);
+      }
       break;
 
     case BITSET_LIST:
-      bytes = lbitset_bytes (n_bits);
-      sbset = xcalloc (1, bytes);
-      lbitset_init (sbset, n_bits);
+      {
+        size_t bytes = lbitset_bytes (n_bits);
+        bset->s.bset = xzalloc (bytes);
+        lbitset_init (bset->s.bset, n_bits);
+      }
       break;
 
     case BITSET_TABLE:
-      bytes = ebitset_bytes (n_bits);
-      sbset = xcalloc (1, bytes);
-      ebitset_init (sbset, n_bits);
+      {
+        size_t bytes = tbitset_bytes (n_bits);
+        bset->s.bset = xzalloc (bytes);
+        tbitset_init (bset->s.bset, n_bits);
+      }
       break;
 
-    case BITSET_VARRAY:
-      bytes = vbitset_bytes (n_bits);
-      sbset = xcalloc (1, bytes);
-      vbitset_init (sbset, n_bits);
+    case BITSET_VECTOR:
+      {
+        size_t bytes = vbitset_bytes (n_bits);
+        bset->s.bset = xzalloc (bytes);
+        vbitset_init (bset->s.bset, n_bits);
+      }
       break;
     }
 
-  bset->s.bset = sbset;
-
   BITSET_STATS_ALLOCS_INC (type);
 
   return bset;
diff --git a/lib/bitset_stats.h b/lib/bitset/stats.h
similarity index 69%
rename from lib/bitset_stats.h
rename to lib/bitset/stats.h
index 96efd56..f578045 100644
--- a/lib/bitset_stats.h
+++ b/lib/bitset/stats.h
@@ -1,6 +1,6 @@
 /* Functions to support bitset statistics.
 
-   Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2004, 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,19 +15,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSET_STATS_H
 #define _BITSET_STATS_H
 
-#include "bbitset.h"
+#include "bitset/base.h"
 
 extern bool bitset_stats_enabled;
 
-extern enum bitset_type bitset_stats_type_get (bitset);
+enum bitset_type bitset_stats_type_get (bitset);
 
-extern size_t bitset_stats_bytes (void);
+size_t bitset_stats_bytes (void);
 
-extern bitset bitset_stats_init (bitset, bitset_bindex, enum bitset_type);
+bitset bitset_stats_init (bitset, bitset_bindex, enum bitset_type);
 
 #endif
diff --git a/lib/bitset/table.c b/lib/bitset/table.c
new file mode 100644
index 0000000..9142aa5
--- /dev/null
+++ b/lib/bitset/table.c
@@ -0,0 +1,1221 @@
+/* Functions to support expandable bitsets.
+
+   Copyright (C) 2002-2006, 2009-2015, 2018-2019 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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "bitset/table.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "obstack.h"
+#include "xalloc.h"
+
+/* This file implements expandable bitsets.  These bitsets can be of
+   arbitrary length and are more efficient than arrays of bits for
+   large sparse sets.
+
+   Empty elements are represented by a NULL pointer in the table of
+   element pointers.  An alternative is to point to a special zero
+   element.  Similarly, we could represent an all 1's element with
+   another special ones element pointer.
+
+   Bitsets are commonly empty so we need to ensure that this special
+   case is fast.  A zero bitset is indicated when cdata is 0.  This is
+   conservative since cdata may be non zero and the bitset may still
+   be zero.
+
+   The bitset cache can be disabled either by setting cindex to
+   BITSET_WINDEX_MAX or by setting csize to 0.  Here
+   we use the former approach since cindex needs to be updated whenever
+   cdata is changed.
+*/
+
+
+/* Number of words to use for each element.  */
+#define EBITSET_ELT_WORDS 2
+
+/* Number of bits stored in each element.  */
+#define EBITSET_ELT_BITS \
+  ((unsigned) (EBITSET_ELT_WORDS * BITSET_WORD_BITS))
+
+/* Ebitset element.  We use an array of bits.  */
+typedef struct tbitset_elt_struct
+{
+  union
+  {
+    bitset_word words[EBITSET_ELT_WORDS];       /* Bits that are set.  */
+    struct tbitset_elt_struct *next;
+  }
+  u;
+}
+tbitset_elt;
+
+
+typedef tbitset_elt *tbitset_elts;
+
+
+/* Number of elements to initially allocate.  */
+
+#ifndef EBITSET_INITIAL_SIZE
+# define EBITSET_INITIAL_SIZE 2
+#endif
+
+
+enum tbitset_find_mode
+  { EBITSET_FIND, EBITSET_CREATE, EBITSET_SUBST };
+
+static tbitset_elt tbitset_zero_elts[1]; /* Elements of all zero bits.  */
+
+/* Obstack to allocate bitset elements from.  */
+static struct obstack tbitset_obstack;
+static bool tbitset_obstack_init = false;
+static tbitset_elt *tbitset_free_list;  /* Free list of bitset elements.  */
+
+#define EBITSET_N_ELTS(N) (((N) + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS)
+#define EBITSET_ELTS(BSET) ((BSET)->e.elts)
+#define EBITSET_SIZE(BSET) EBITSET_N_ELTS (BITSET_NBITS_ (BSET))
+#define EBITSET_ASIZE(BSET) ((BSET)->e.size)
+
+#define EBITSET_NEXT(ELT) ((ELT)->u.next)
+#define EBITSET_WORDS(ELT) ((ELT)->u.words)
+
+/* Disable bitset cache and mark BSET as being zero.  */
+#define EBITSET_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX, \
+        (BSET)->b.cdata = 0)
+
+#define EBITSET_CACHE_DISABLE(BSET)  ((BSET)->b.cindex = BITSET_WINDEX_MAX)
+
+/* Disable bitset cache and mark BSET as being possibly non-zero.  */
+#define EBITSET_NONZERO_SET(BSET) \
+ (EBITSET_CACHE_DISABLE (BSET), (BSET)->b.cdata = (bitset_word *)~0)
+
+/* A conservative estimate of whether the bitset is zero.
+   This is non-zero only if we know for sure that the bitset is zero.  */
+#define EBITSET_ZERO_P(BSET) ((BSET)->b.cdata == 0)
+
+/* Enable cache to point to element with table index EINDEX.
+   The element must exist.  */
+#define EBITSET_CACHE_SET(BSET, EINDEX) \
+ ((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \
+  (BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX]))
+
+#undef min
+#undef max
+#define min(a, b) ((a) > (b) ? (b) : (a))
+#define max(a, b) ((a) > (b) ? (a) : (b))
+
+static bitset_bindex
+tbitset_resize (bitset src, bitset_bindex n_bits)
+{
+  if (n_bits == BITSET_NBITS_ (src))
+    return n_bits;
+
+  bitset_windex oldsize = EBITSET_SIZE (src);
+  bitset_windex newsize = EBITSET_N_ELTS (n_bits);
+
+  if (oldsize < newsize)
+    {
+      /* The bitset needs to grow.  If we already have enough memory
+         allocated, then just zero what we need.  */
+      if (newsize > EBITSET_ASIZE (src))
+        {
+          /* We need to allocate more memory.  When oldsize is
+             non-zero this means that we are changing the size, so
+             grow the bitset 25% larger than requested to reduce
+             number of reallocations.  */
+
+          bitset_windex size = oldsize == 0 ? newsize : newsize + newsize / 4;
+          EBITSET_ELTS (src)
+            = xrealloc (EBITSET_ELTS (src), size * sizeof (tbitset_elt *));
+          EBITSET_ASIZE (src) = size;
+        }
+
+      memset (EBITSET_ELTS (src) + oldsize, 0,
+              (newsize - oldsize) * sizeof (tbitset_elt *));
+    }
+  else
+    {
+      /* The bitset needs to shrink.  There's no point deallocating
+         the memory unless it is shrinking by a reasonable amount.  */
+      if ((oldsize - newsize) >= oldsize / 2)
+        {
+          void *p
+            = realloc (EBITSET_ELTS (src), newsize * sizeof (tbitset_elt *));
+          if (p)
+            {
+              EBITSET_ELTS (src) = p;
+              EBITSET_ASIZE (src) = newsize;
+            }
+        }
+
+      /* Need to prune any excess bits.  FIXME.  */
+    }
+
+  BITSET_NBITS_ (src) = n_bits;
+  return n_bits;
+}
+
+
+/* Allocate a tbitset element.  The bits are not cleared.  */
+static inline tbitset_elt *
+tbitset_elt_alloc (void)
+{
+  tbitset_elt *elt;
+
+  if (tbitset_free_list != 0)
+    {
+      elt = tbitset_free_list;
+      tbitset_free_list = EBITSET_NEXT (elt);
+    }
+  else
+    {
+      if (!tbitset_obstack_init)
+        {
+          tbitset_obstack_init = true;
+
+          /* Let particular systems override the size of a chunk.  */
+
+#ifndef OBSTACK_CHUNK_SIZE
+# define OBSTACK_CHUNK_SIZE 0
+#endif
+
+          /* Let them override the alloc and free routines too.  */
+
+#ifndef OBSTACK_CHUNK_ALLOC
+# define OBSTACK_CHUNK_ALLOC xmalloc
+#endif
+
+#ifndef OBSTACK_CHUNK_FREE
+# define OBSTACK_CHUNK_FREE free
+#endif
+
+#if ! defined __GNUC__ || __GNUC__ < 2
+# define __alignof__(type) 0
+#endif
+
+          obstack_specify_allocation (&tbitset_obstack, OBSTACK_CHUNK_SIZE,
+                                      __alignof__ (tbitset_elt),
+                                      OBSTACK_CHUNK_ALLOC,
+                                      OBSTACK_CHUNK_FREE);
+        }
+
+      /* Perhaps we should add a number of new elements to the free
+         list.  */
+      elt = (tbitset_elt *) obstack_alloc (&tbitset_obstack,
+                                           sizeof (tbitset_elt));
+    }
+
+  return elt;
+}
+
+
+/* Allocate a tbitset element.  The bits are cleared.  */
+static inline tbitset_elt *
+tbitset_elt_calloc (void)
+{
+  tbitset_elt *elt = tbitset_elt_alloc ();
+  memset (EBITSET_WORDS (elt), 0, sizeof (EBITSET_WORDS (elt)));
+  return elt;
+}
+
+
+static inline void
+tbitset_elt_free (tbitset_elt *elt)
+{
+  EBITSET_NEXT (elt) = tbitset_free_list;
+  tbitset_free_list = elt;
+}
+
+
+/* Remove element with index EINDEX from bitset BSET.  */
+static inline void
+tbitset_elt_remove (bitset bset, bitset_windex eindex)
+{
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  tbitset_elt *elt = elts[eindex];
+
+  elts[eindex] = 0;
+  tbitset_elt_free (elt);
+}
+
+
+/* Add ELT into elts at index EINDEX of bitset BSET.  */
+static inline void
+tbitset_elt_add (bitset bset, tbitset_elt *elt, bitset_windex eindex)
+{
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  /* Assume that the elts entry not allocated.  */
+  elts[eindex] = elt;
+}
+
+
+/* Are all bits in an element zero?  */
+static inline bool
+tbitset_elt_zero_p (tbitset_elt *elt)
+{
+  for (int i = 0; i < EBITSET_ELT_WORDS; i++)
+    if (EBITSET_WORDS (elt)[i])
+      return false;
+  return true;
+}
+
+
+static tbitset_elt *
+tbitset_elt_find (bitset bset, bitset_bindex bindex,
+                  enum tbitset_find_mode mode)
+{
+  bitset_windex eindex = bindex / EBITSET_ELT_BITS;
+
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  bitset_windex size = EBITSET_SIZE (bset);
+
+  if (eindex < size)
+    {
+      tbitset_elt *elt = elts[eindex];
+      if (elt)
+        {
+          if (EBITSET_WORDS (elt) != bset->b.cdata)
+            EBITSET_CACHE_SET (bset, eindex);
+          return elt;
+        }
+    }
+
+  /* The element could not be found.  */
+
+  switch (mode)
+    {
+    default:
+      abort ();
+
+    case EBITSET_FIND:
+      return NULL;
+
+    case EBITSET_CREATE:
+      if (eindex >= size)
+        tbitset_resize (bset, bindex);
+
+      /* Create a new element.  */
+      {
+        tbitset_elt *elt = tbitset_elt_calloc ();
+        tbitset_elt_add (bset, elt, eindex);
+        EBITSET_CACHE_SET (bset, eindex);
+        return elt;
+      }
+
+    case EBITSET_SUBST:
+      return &tbitset_zero_elts[0];
+    }
+}
+
+
+/* Weed out the zero elements from the elts.  */
+static inline bitset_windex
+tbitset_weed (bitset bset)
+{
+  if (EBITSET_ZERO_P (bset))
+    return 0;
+
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  bitset_windex count = 0;
+  bitset_windex j;
+  for (j = 0; j < EBITSET_SIZE (bset); j++)
+    {
+      tbitset_elt *elt = elts[j];
+
+      if (elt)
+        {
+          if (tbitset_elt_zero_p (elt))
+            {
+              tbitset_elt_remove (bset, j);
+              count++;
+            }
+        }
+      else
+        count++;
+    }
+
+  count = j - count;
+  if (!count)
+    {
+      /* All the bits are zero.  We could shrink the elts.
+         For now just mark BSET as known to be zero.  */
+      EBITSET_ZERO_SET (bset);
+    }
+  else
+    EBITSET_NONZERO_SET (bset);
+
+  return count;
+}
+
+
+/* Set all bits in the bitset to zero.  */
+static inline void
+tbitset_zero (bitset bset)
+{
+  if (EBITSET_ZERO_P (bset))
+    return;
+
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  for (bitset_windex j = 0; j < EBITSET_SIZE (bset); j++)
+    {
+      tbitset_elt *elt = elts[j];
+      if (elt)
+        tbitset_elt_remove (bset, j);
+    }
+
+  /* All the bits are zero.  We could shrink the elts.
+     For now just mark BSET as known to be zero.  */
+  EBITSET_ZERO_SET (bset);
+}
+
+
+static inline bool
+tbitset_equal_p (bitset dst, bitset src)
+{
+  if (src == dst)
+    return true;
+
+  tbitset_weed (dst);
+  tbitset_weed (src);
+
+  if (EBITSET_SIZE (src) != EBITSET_SIZE (dst))
+    return false;
+
+  tbitset_elts *selts = EBITSET_ELTS (src);
+  tbitset_elts *delts = EBITSET_ELTS (dst);
+
+  for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++)
+    {
+      tbitset_elt *selt = selts[j];
+      tbitset_elt *delt = delts[j];
+
+      if (!selt && !delt)
+        continue;
+      if ((selt && !delt) || (!selt && delt))
+        return false;
+
+      for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++)
+        if (EBITSET_WORDS (selt)[i] != EBITSET_WORDS (delt)[i])
+          return false;
+    }
+  return true;
+}
+
+
+/* Copy bits from bitset SRC to bitset DST.  */
+static inline void
+tbitset_copy_ (bitset dst, bitset src)
+{
+  if (src == dst)
+    return;
+
+  tbitset_zero (dst);
+
+  if (BITSET_NBITS_ (dst) != BITSET_NBITS_ (src))
+    tbitset_resize (dst, BITSET_NBITS_ (src));
+
+  tbitset_elts *selts = EBITSET_ELTS (src);
+  tbitset_elts *delts = EBITSET_ELTS (dst);
+  for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++)
+    {
+      tbitset_elt *selt = selts[j];
+      if (selt)
+        {
+          tbitset_elt *tmp = tbitset_elt_alloc ();
+          delts[j] = tmp;
+          memcpy (EBITSET_WORDS (tmp), EBITSET_WORDS (selt),
+                  sizeof (EBITSET_WORDS (selt)));
+        }
+    }
+  EBITSET_NONZERO_SET (dst);
+}
+
+
+/* Copy bits from bitset SRC to bitset DST.  Return true if
+   bitsets different.  */
+static inline bool
+tbitset_copy_cmp (bitset dst, bitset src)
+{
+  if (src == dst)
+    return false;
+
+  if (EBITSET_ZERO_P (dst))
+    {
+      tbitset_copy_ (dst, src);
+      return !EBITSET_ZERO_P (src);
+    }
+
+  if (tbitset_equal_p (dst, src))
+    return false;
+
+  tbitset_copy_ (dst, src);
+  return true;
+}
+
+
+/* Set bit BITNO in bitset DST.  */
+static void
+tbitset_set (bitset dst, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  tbitset_elt_find (dst, bitno, EBITSET_CREATE);
+
+  dst->b.cdata[windex - dst->b.cindex] |=
+    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
+}
+
+
+/* Reset bit BITNO in bitset DST.  */
+static void
+tbitset_reset (bitset dst, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  if (!tbitset_elt_find (dst, bitno, EBITSET_FIND))
+    return;
+
+  dst->b.cdata[windex - dst->b.cindex] &=
+    ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
+
+  /* If all the data is zero, perhaps we should remove it now...
+     However, there is a good chance that the element will be needed
+     again soon.  */
+}
+
+
+/* Test bit BITNO in bitset SRC.  */
+static bool
+tbitset_test (bitset src, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  return (tbitset_elt_find (src, bitno, EBITSET_FIND)
+          && ((src->b.cdata[windex - src->b.cindex]
+               >> (bitno % BITSET_WORD_BITS))
+              & 1));
+}
+
+
+static void
+tbitset_free (bitset bset)
+{
+  tbitset_zero (bset);
+  free (EBITSET_ELTS (bset));
+}
+
+
+/* Find list of up to NUM bits set in BSET starting from and including
+ *NEXT and store in array LIST.  Return with actual number of bits
+ found and with *NEXT indicating where search stopped.  */
+static bitset_bindex
+tbitset_list_reverse (bitset bset, bitset_bindex *list,
+                      bitset_bindex num, bitset_bindex *next)
+{
+  if (EBITSET_ZERO_P (bset))
+    return 0;
+
+  bitset_windex size = EBITSET_SIZE (bset);
+  bitset_bindex n_bits = size * EBITSET_ELT_BITS;
+  bitset_bindex rbitno = *next;
+
+  if (rbitno >= n_bits)
+    return 0;
+
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+
+  bitset_bindex bitno = n_bits - (rbitno + 1);
+
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+  bitset_windex eindex = bitno / EBITSET_ELT_BITS;
+  bitset_windex woffset = windex - eindex * EBITSET_ELT_WORDS;
+
+  /* If num is 1, we could speed things up with a binary search
+     of the word of interest.  */
+  bitset_bindex count = 0;
+  unsigned bcount = bitno % BITSET_WORD_BITS;
+  bitset_bindex boffset = windex * BITSET_WORD_BITS;
+
+  do
+    {
+      tbitset_elt *elt = elts[eindex];
+      if (elt)
+        {
+          bitset_word *srcp = EBITSET_WORDS (elt);
+
+          do
+            {
+              for (bitset_word word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount);
+                   word; bcount--)
+                {
+                  if (word & BITSET_MSB)
+                    {
+                      list[count++] = boffset + bcount;
+                      if (count >= num)
+                        {
+                          *next = n_bits - (boffset + bcount);
+                          return count;
+                        }
+                    }
+                  word <<= 1;
+                }
+              boffset -= BITSET_WORD_BITS;
+              bcount = BITSET_WORD_BITS - 1;
+            }
+          while (woffset--);
+        }
+
+      woffset = EBITSET_ELT_WORDS - 1;
+      boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS;
+    }
+  while (eindex--);
+
+  *next = n_bits - (boffset + 1);
+  return count;
+}
+
+
+/* Find list of up to NUM bits set in BSET starting from and including
+   *NEXT and store in array LIST.  Return with actual number of bits
+   found and with *NEXT indicating where search stopped.  */
+static bitset_bindex
+tbitset_list (bitset bset, bitset_bindex *list,
+              bitset_bindex num, bitset_bindex *next)
+{
+  if (EBITSET_ZERO_P (bset))
+    return 0;
+
+  bitset_bindex bitno = *next;
+  bitset_bindex count = 0;
+
+  tbitset_elts *elts = EBITSET_ELTS (bset);
+  bitset_windex size = EBITSET_SIZE (bset);
+  bitset_windex eindex = bitno / EBITSET_ELT_BITS;
+
+  if (bitno % EBITSET_ELT_BITS)
+    {
+      /* We need to start within an element.  This is not very common.  */
+      tbitset_elt *elt = elts[eindex];
+      if (elt)
+        {
+          bitset_word *srcp = EBITSET_WORDS (elt);
+          bitset_windex woffset = eindex * EBITSET_ELT_WORDS;
+
+          for (bitset_windex windex = bitno / BITSET_WORD_BITS;
+               (windex - woffset) < EBITSET_ELT_WORDS; windex++)
+            {
+              bitset_word word = srcp[windex - woffset] >> (bitno % BITSET_WORD_BITS);
+
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    {
+                      list[count++] = bitno;
+                      if (count >= num)
+                        {
+                          *next = bitno + 1;
+                          return count;
+                        }
+                    }
+                  word >>= 1;
+                }
+              bitno = (windex + 1) * BITSET_WORD_BITS;
+            }
+        }
+
+      /* Skip to next element.  */
+      eindex++;
+    }
+
+  /* If num is 1, we could speed things up with a binary search
+     of the word of interest.  */
+
+  for (; eindex < size; eindex++)
+    {
+      bitset_word *srcp;
+
+      tbitset_elt *elt = elts[eindex];
+      if (!elt)
+        continue;
+
+      srcp = EBITSET_WORDS (elt);
+      bitset_windex windex = eindex * EBITSET_ELT_WORDS;
+
+      if ((count + EBITSET_ELT_BITS) < num)
+        {
+          /* The coast is clear, plant boot!  */
+
+#if EBITSET_ELT_WORDS == 2
+          bitset_word word = srcp[0];
+          if (word)
+            {
+              if (!(word & 0xffff))
+                {
+                  word >>= 16;
+                  bitno += 16;
+                }
+              if (!(word & 0xff))
+                {
+                  word >>= 8;
+                  bitno += 8;
+                }
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    list[count++] = bitno;
+                  word >>= 1;
+                }
+            }
+          windex++;
+          bitno = windex * BITSET_WORD_BITS;
+
+          word = srcp[1];
+          if (word)
+            {
+              if (!(word & 0xffff))
+                {
+                  word >>= 16;
+                  bitno += 16;
+                }
+              for (; word; bitno++)
+                {
+                  if (word & 1)
+                    list[count++] = bitno;
+                  word >>= 1;
+                }
+            }
+          windex++;
+          bitno = windex * BITSET_WORD_BITS;
+#else
+          for (int i = 0; i < EBITSET_ELT_WORDS; i++, windex++)
+            {
+              bitno = windex * BITSET_WORD_BITS;
+
+              word = srcp[i];
+              if (word)
+                {
+                  if (!(word & 0xffff))
+                    {
+                      word >>= 16;
+                      bitno += 16;
+                    }
+                  if (!(word & 0xff))
+                    {
+                      word >>= 8;
+                      bitno += 8;
+                    }
+                  for (; word; bitno++)
+                    {
+                      if (word & 1)
+                        list[count++] = bitno;
+                      word >>= 1;
+                    }
+                }
+            }
+#endif
+        }
+      else
+        {
+          /* Tread more carefully since we need to check
+             if array overflows.  */
+
+          for (int i = 0; i < EBITSET_ELT_WORDS; i++, windex++)
+            {
+              bitno = windex * BITSET_WORD_BITS;
+
+              for (bitset_word word = srcp[i]; word; bitno++)
+                {
+                  if (word & 1)
+                    {
+                      list[count++] = bitno;
+                      if (count >= num)
+                        {
+                          *next = bitno + 1;
+                          return count;
+                        }
+                    }
+                  word >>= 1;
+                }
+            }
+        }
+    }
+
+  *next = bitno;
+  return count;
+}
+
+
+/* Ensure that any unused bits within the last element are clear.  */
+static inline void
+tbitset_unused_clear (bitset dst)
+{
+  bitset_bindex n_bits = BITSET_NBITS_ (dst);
+  unsigned last_bit = n_bits % EBITSET_ELT_BITS;
+
+  if (last_bit)
+    {
+      tbitset_elts *elts = EBITSET_ELTS (dst);
+
+      bitset_windex eindex = n_bits / EBITSET_ELT_BITS;
+
+      tbitset_elt *elt = elts[eindex];
+      if (elt)
+        {
+          bitset_word *srcp = EBITSET_WORDS (elt);
+
+          bitset_windex windex = n_bits / BITSET_WORD_BITS;
+          bitset_windex woffset = eindex * EBITSET_ELT_WORDS;
+
+          srcp[windex - woffset]
+            &= ((bitset_word) 1 << (last_bit % BITSET_WORD_BITS)) - 1;
+          windex++;
+          for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++)
+            srcp[windex - woffset] = 0;
+        }
+    }
+}
+
+
+static void
+tbitset_ones (bitset dst)
+{
+  for (bitset_windex j = 0; j < EBITSET_SIZE (dst); j++)
+    {
+      /* Create new elements if they cannot be found.  Perhaps
+         we should just add pointers to a ones element?  */
+      tbitset_elt *elt =
+        tbitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE);
+      memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt)));
+    }
+  EBITSET_NONZERO_SET (dst);
+  tbitset_unused_clear (dst);
+}
+
+
+static bool
+tbitset_empty_p (bitset dst)
+{
+  if (EBITSET_ZERO_P (dst))
+    return true;
+
+  tbitset_elts *elts = EBITSET_ELTS (dst);
+  for (bitset_windex j = 0; j < EBITSET_SIZE (dst); j++)
+    {
+      tbitset_elt *elt = elts[j];
+
+      if (elt)
+        {
+          if (!tbitset_elt_zero_p (elt))
+            return false;
+          /* Do some weeding as we go.  */
+          tbitset_elt_remove (dst, j);
+        }
+    }
+
+  /* All the bits are zero.  We could shrink the elts.
+     For now just mark DST as known to be zero.  */
+  EBITSET_ZERO_SET (dst);
+  return true;
+}
+
+
+static void
+tbitset_not (bitset dst, bitset src)
+{
+  tbitset_resize (dst, BITSET_NBITS_ (src));
+
+  for (bitset_windex j = 0; j < EBITSET_SIZE (src); j++)
+    {
+      /* Create new elements for dst if they cannot be found
+         or substitute zero elements if src elements not found.  */
+      tbitset_elt *selt =
+        tbitset_elt_find (src, j * EBITSET_ELT_BITS, EBITSET_SUBST);
+      tbitset_elt *delt =
+        tbitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE);
+
+      for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++)
+        EBITSET_WORDS (delt)[i] = ~EBITSET_WORDS (selt)[i];
+    }
+  EBITSET_NONZERO_SET (dst);
+  tbitset_unused_clear (dst);
+}
+
+
+/* Is DST == DST | SRC?  */
+static bool
+tbitset_subset_p (bitset dst, bitset src)
+{
+  tbitset_elts *selts = EBITSET_ELTS (src);
+  tbitset_elts *delts = EBITSET_ELTS (dst);
+
+  bitset_windex ssize = EBITSET_SIZE (src);
+  bitset_windex dsize = EBITSET_SIZE (dst);
+
+  for (bitset_windex j = 0; j < ssize; j++)
+    {
+      tbitset_elt *selt = j < ssize ? selts[j] : 0;
+      tbitset_elt *delt = j < dsize ? delts[j] : 0;
+
+      if (!selt && !delt)
+        continue;
+
+      if (!selt)
+        selt = &tbitset_zero_elts[0];
+      if (!delt)
+        delt = &tbitset_zero_elts[0];
+
+      for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++)
+        if (EBITSET_WORDS (delt)[i]
+            != (EBITSET_WORDS (selt)[i] | EBITSET_WORDS (delt)[i]))
+          return false;
+    }
+  return true;
+}
+
+
+/* Is DST & SRC == 0?  */
+static bool
+tbitset_disjoint_p (bitset dst, bitset src)
+{
+  tbitset_elts *selts = EBITSET_ELTS (src);
+  tbitset_elts *delts = EBITSET_ELTS (dst);
+
+  bitset_windex ssize = EBITSET_SIZE (src);
+  bitset_windex dsize = EBITSET_SIZE (dst);
+
+  for (bitset_windex j = 0; j < ssize; j++)
+    {
+      tbitset_elt *selt = j < ssize ? selts[j] : 0;
+      tbitset_elt *delt = j < dsize ? delts[j] : 0;
+
+      if (!selt || !delt)
+        continue;
+
+      for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++)
+        if ((EBITSET_WORDS (selt)[i] & EBITSET_WORDS (delt)[i]))
+          return false;
+    }
+  return true;
+}
+
+
+
+static bool
+tbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
+{
+  bool changed = false;
+
+  tbitset_resize (dst, max (BITSET_NBITS_ (src1), BITSET_NBITS_ (src2)));
+
+  bitset_windex ssize1 = EBITSET_SIZE (src1);
+  bitset_windex ssize2 = EBITSET_SIZE (src2);
+  bitset_windex dsize = EBITSET_SIZE (dst);
+  bitset_windex size = ssize1;
+  if (size < ssize2)
+    size = ssize2;
+
+  tbitset_elts *selts1 = EBITSET_ELTS (src1);
+  tbitset_elts *selts2 = EBITSET_ELTS (src2);
+  tbitset_elts *delts = EBITSET_ELTS (dst);
+
+  bitset_windex j = 0;
+  for (j = 0; j < size; j++)
+    {
+      tbitset_elt *selt1 = j < ssize1 ? selts1[j] : 0;
+      tbitset_elt *selt2 = j < ssize2 ? selts2[j] : 0;
+      tbitset_elt *delt = j < dsize ? delts[j] : 0;
+
+      if (!selt1 && !selt2)
+        {
+          if (delt)
+            {
+              changed = true;
+              tbitset_elt_remove (dst, j);
+            }
+          continue;
+        }
+
+      if (!selt1)
+        selt1 = &tbitset_zero_elts[0];
+      if (!selt2)
+        selt2 = &tbitset_zero_elts[0];
+      if (!delt)
+        delt = tbitset_elt_calloc ();
+      else
+        delts[j] = 0;
+
+      bitset_word *srcp1 = EBITSET_WORDS (selt1);
+      bitset_word *srcp2 = EBITSET_WORDS (selt2);
+      bitset_word *dstp = EBITSET_WORDS (delt);
+      switch (op)
+        {
+        default:
+          abort ();
+
+        case BITSET_OP_OR:
+          for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ | *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_AND:
+          for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ & *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_XOR:
+          for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ ^ *srcp2++;
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+
+        case BITSET_OP_ANDN:
+          for (unsigned i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
+            {
+              bitset_word tmp = *srcp1++ & ~(*srcp2++);
+
+              if (*dstp != tmp)
+                {
+                  changed = true;
+                  *dstp = tmp;
+                }
+            }
+          break;
+        }
+
+      if (!tbitset_elt_zero_p (delt))
+        tbitset_elt_add (dst, delt, j);
+      else
+        tbitset_elt_free (delt);
+    }
+
+  /* If we have elements of DST left over, free them all.  */
+  for (; j < dsize; j++)
+    {
+      changed = true;
+
+      tbitset_elt *delt = delts[j];
+      if (delt)
+        tbitset_elt_remove (dst, j);
+    }
+
+  EBITSET_NONZERO_SET (dst);
+  return changed;
+}
+
+
+static bool
+tbitset_and_cmp (bitset dst, bitset src1, bitset src2)
+{
+  if (EBITSET_ZERO_P (src2))
+    {
+      tbitset_weed (dst);
+      bool changed = EBITSET_ZERO_P (dst);
+      tbitset_zero (dst);
+      return changed;
+    }
+  else if (EBITSET_ZERO_P (src1))
+    {
+      tbitset_weed (dst);
+      bool changed = EBITSET_ZERO_P (dst);
+      tbitset_zero (dst);
+      return changed;
+    }
+  else
+    return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
+}
+
+
+static void
+tbitset_and (bitset dst, bitset src1, bitset src2)
+{
+  tbitset_and_cmp (dst, src1, src2);
+}
+
+
+static bool
+tbitset_andn_cmp (bitset dst, bitset src1, bitset src2)
+{
+  if (EBITSET_ZERO_P (src2))
+    return tbitset_copy_cmp (dst, src1);
+  else if (EBITSET_ZERO_P (src1))
+    {
+      tbitset_weed (dst);
+      bool changed = EBITSET_ZERO_P (dst);
+      tbitset_zero (dst);
+      return changed;
+    }
+  else
+    return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
+}
+
+
+static void
+tbitset_andn (bitset dst, bitset src1, bitset src2)
+{
+  tbitset_andn_cmp (dst, src1, src2);
+}
+
+
+static bool
+tbitset_or_cmp (bitset dst, bitset src1, bitset src2)
+{
+  if (EBITSET_ZERO_P (src2))
+    return tbitset_copy_cmp (dst, src1);
+  else if (EBITSET_ZERO_P (src1))
+    return tbitset_copy_cmp (dst, src2);
+  else
+    return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
+}
+
+
+static void
+tbitset_or (bitset dst, bitset src1, bitset src2)
+{
+  tbitset_or_cmp (dst, src1, src2);
+}
+
+
+static bool
+tbitset_xor_cmp (bitset dst, bitset src1, bitset src2)
+{
+  if (EBITSET_ZERO_P (src2))
+    return tbitset_copy_cmp (dst, src1);
+  else if (EBITSET_ZERO_P (src1))
+    return tbitset_copy_cmp (dst, src2);
+  else
+    return tbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
+}
+
+
+static void
+tbitset_xor (bitset dst, bitset src1, bitset src2)
+{
+  tbitset_xor_cmp (dst, src1, src2);
+}
+
+
+static void
+tbitset_copy (bitset dst, bitset src)
+{
+  if (BITSET_COMPATIBLE_ (dst, src))
+    tbitset_copy_ (dst, src);
+  else
+    bitset_copy_ (dst, src);
+}
+
+
+/* Vector of operations for linked-list bitsets.  */
+struct bitset_vtable tbitset_vtable = {
+  tbitset_set,
+  tbitset_reset,
+  bitset_toggle_,
+  tbitset_test,
+  tbitset_resize,
+  bitset_size_,
+  bitset_count_,
+  tbitset_empty_p,
+  tbitset_ones,
+  tbitset_zero,
+  tbitset_copy,
+  tbitset_disjoint_p,
+  tbitset_equal_p,
+  tbitset_not,
+  tbitset_subset_p,
+  tbitset_and,
+  tbitset_and_cmp,
+  tbitset_andn,
+  tbitset_andn_cmp,
+  tbitset_or,
+  tbitset_or_cmp,
+  tbitset_xor,
+  tbitset_xor_cmp,
+  bitset_and_or_,
+  bitset_and_or_cmp_,
+  bitset_andn_or_,
+  bitset_andn_or_cmp_,
+  bitset_or_and_,
+  bitset_or_and_cmp_,
+  tbitset_list,
+  tbitset_list_reverse,
+  tbitset_free,
+  BITSET_TABLE
+};
+
+
+/* Return size of initial structure.  */
+size_t
+tbitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
+{
+  return sizeof (struct tbitset_struct);
+}
+
+
+/* Initialize a bitset.  */
+
+bitset
+tbitset_init (bitset bset, bitset_bindex n_bits)
+{
+  bset->b.vtable = &tbitset_vtable;
+
+  bset->b.csize = EBITSET_ELT_WORDS;
+
+  EBITSET_ZERO_SET (bset);
+
+  EBITSET_ASIZE (bset) = 0;
+  EBITSET_ELTS (bset) = 0;
+  tbitset_resize (bset, n_bits);
+
+  return bset;
+}
+
+
+void
+tbitset_release_memory (void)
+{
+  tbitset_free_list = 0;
+  if (tbitset_obstack_init)
+    {
+      tbitset_obstack_init = false;
+      obstack_free (&tbitset_obstack, NULL);
+    }
+}
diff --git a/lib/lbitset.h b/lib/bitset/table.h
similarity index 64%
copy from lib/lbitset.h
copy to lib/bitset/table.h
index 79804da..ebcb1c5 100644
--- a/lib/lbitset.h
+++ b/lib/bitset/table.h
@@ -1,6 +1,7 @@
-/* Functions to support lbitsets.
+/* Functions to support tbitsets.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,17 +16,17 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _LBITSET_H
-#define _LBITSET_H
+#ifndef _BITSET_TABLE_H
+#define _BITSET_TABLE_H
 
 #include "bitset.h"
 
-extern size_t lbitset_bytes (bitset_bindex);
+size_t tbitset_bytes (bitset_bindex);
 
-extern bitset lbitset_init (bitset, bitset_bindex);
+bitset tbitset_init (bitset, bitset_bindex);
 
-extern void lbitset_release_memory (void);
+void tbitset_release_memory (void);
 
 #endif
diff --git a/lib/bitset/vector.c b/lib/bitset/vector.c
new file mode 100644
index 0000000..935e644
--- /dev/null
+++ b/lib/bitset/vector.c
@@ -0,0 +1,995 @@
+/* Variable array bitsets.
+
+   Copyright (C) 2002-2006, 2009-2015, 2018-2019 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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "bitset/vector.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "xalloc.h"
+
+/* This file implements variable size bitsets stored as a variable
+   length array of words.  Any unused bits in the last word must be
+   zero.
+
+   Note that binary or ternary operations assume that each bitset operand
+   has the same size.
+*/
+
+static void vbitset_unused_clear (bitset);
+
+static void vbitset_set (bitset, bitset_bindex);
+static void vbitset_reset (bitset, bitset_bindex);
+static bool vbitset_test (bitset, bitset_bindex);
+static bitset_bindex vbitset_list (bitset, bitset_bindex *,
+                                   bitset_bindex, bitset_bindex *);
+static bitset_bindex vbitset_list_reverse (bitset, bitset_bindex *,
+                                           bitset_bindex, bitset_bindex *);
+
+#define VBITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
+#define VBITSET_WORDS(X) ((X)->b.cdata)
+#define VBITSET_SIZE(X) ((X)->b.csize)
+#define VBITSET_ASIZE(X) ((X)->v.size)
+
+#undef min
+#undef max
+#define min(a, b) ((a) > (b) ? (b) : (a))
+#define max(a, b) ((a) > (b) ? (a) : (b))
+
+static bitset_bindex
+vbitset_resize (bitset src, bitset_bindex n_bits)
+{
+  if (n_bits == BITSET_NBITS_ (src))
+    return n_bits;
+
+  bitset_windex oldsize = VBITSET_SIZE (src);
+  bitset_windex newsize = VBITSET_N_WORDS (n_bits);
+
+  if (oldsize < newsize)
+    {
+      /* The bitset needs to grow.  If we already have enough memory
+         allocated, then just zero what we need.  */
+      if (newsize > VBITSET_ASIZE (src))
+        {
+          /* We need to allocate more memory.  When oldsize is
+             non-zero this means that we are changing the size, so
+             grow the bitset 25% larger than requested to reduce
+             number of reallocations.  */
+
+          bitset_windex size = oldsize == 0 ? newsize : newsize + newsize / 4;
+          VBITSET_WORDS (src)
+            = xrealloc (VBITSET_WORDS (src), size * sizeof (bitset_word));
+          VBITSET_ASIZE (src) = size;
+        }
+
+      memset (VBITSET_WORDS (src) + oldsize, 0,
+              (newsize - oldsize) * sizeof (bitset_word));
+    }
+  else
+    {
+      /* The bitset needs to shrink.  There's no point deallocating
+         the memory unless it is shrinking by a reasonable amount.  */
+      if ((oldsize - newsize) >= oldsize / 2)
+        {
+          void *p
+            = realloc (VBITSET_WORDS (src), newsize * sizeof (bitset_word));
+          if (p)
+            {
+              VBITSET_WORDS (src) = p;
+              VBITSET_ASIZE (src) = newsize;
+            }
+        }
+
+      /* Need to prune any excess bits.  FIXME.  */
+    }
+
+  VBITSET_SIZE (src) = newsize;
+  BITSET_NBITS_ (src) = n_bits;
+  return n_bits;
+}
+
+
+/* Set bit BITNO in bitset DST.  */
+static void
+vbitset_set (bitset dst, bitset_bindex bitno)
+{
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+
+  /* Perhaps we should abort.  The user should explicitly call
+     bitset_resize since this will not catch the case when we set a
+     bit larger than the current size but smaller than the allocated
+     size.  */
+  vbitset_resize (dst, bitno);
+
+  dst->b.cdata[windex - dst->b.cindex] |=
+    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
+}
+
+
+/* Reset bit BITNO in bitset DST.  */
+static void
+vbitset_reset (bitset dst ATTRIBUTE_UNUSED, bitset_bindex bitno ATTRIBUTE_UNUSED)
+{
+  /* We must be accessing outside the cache so the bit is
+     zero anyway.  */
+}
+
+
+/* Test bit BITNO in bitset SRC.  */
+static bool
+vbitset_test (bitset src ATTRIBUTE_UNUSED,
+              bitset_bindex bitno ATTRIBUTE_UNUSED)
+{
+  /* We must be accessing outside the cache so the bit is
+     zero anyway.  */
+  return false;
+}
+
+
+/* Find list of up to NUM bits set in BSET in reverse order, starting
+   from and including NEXT and store in array LIST.  Return with
+   actual number of bits found and with *NEXT indicating where search
+   stopped.  */
+static bitset_bindex
+vbitset_list_reverse (bitset src, bitset_bindex *list,
+                      bitset_bindex num, bitset_bindex *next)
+{
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_bindex n_bits = BITSET_SIZE_ (src);
+
+  bitset_bindex rbitno = *next;
+
+  /* If num is 1, we could speed things up with a binary search
+     of the word of interest.  */
+
+  if (rbitno >= n_bits)
+    return 0;
+
+  bitset_bindex count = 0;
+
+  bitset_bindex bitno = n_bits - (rbitno + 1);
+
+  bitset_windex windex = bitno / BITSET_WORD_BITS;
+  unsigned bitcnt = bitno % BITSET_WORD_BITS;
+  bitset_bindex bitoff = windex * BITSET_WORD_BITS;
+
+  do
+    {
+      bitset_word word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
+      for (; word; bitcnt--)
+        {
+          if (word & BITSET_MSB)
+            {
+              list[count++] = bitoff + bitcnt;
+              if (count >= num)
+                {
+                  *next = n_bits - (bitoff + bitcnt);
+                  return count;
+                }
+            }
+          word <<= 1;
+        }
+      bitoff -= BITSET_WORD_BITS;
+      bitcnt = BITSET_WORD_BITS - 1;
+    }
+  while (windex--);
+
+  *next = n_bits - (bitoff + 1);
+  return count;
+}
+
+
+/* Find list of up to NUM bits set in BSET starting from and including
+   *NEXT and store in array LIST.  Return with actual number of bits
+   found and with *NEXT indicating where search stopped.  */
+static bitset_bindex
+vbitset_list (bitset src, bitset_bindex *list,
+              bitset_bindex num, bitset_bindex *next)
+{
+  bitset_windex size = VBITSET_SIZE (src);
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_bindex bitno = *next;
+  bitset_bindex count = 0;
+
+  bitset_windex windex;
+  bitset_bindex bitoff;
+  bitset_word word;
+
+  if (!bitno)
+    {
+      /* Many bitsets are zero, so make this common case fast.  */
+      for (windex = 0; windex < size && !srcp[windex]; windex++)
+        continue;
+      if (windex >= size)
+        return 0;
+
+      /* If num is 1, we could speed things up with a binary search
+         of the current word.  */
+
+      bitoff = windex * BITSET_WORD_BITS;
+    }
+  else
+    {
+      if (bitno >= BITSET_SIZE_ (src))
+        return 0;
+
+      windex = bitno / BITSET_WORD_BITS;
+      bitno = bitno % BITSET_WORD_BITS;
+
+      if (bitno)
+        {
+          /* Handle the case where we start within a word.
+             Most often, this is executed with large bitsets
+             with many set bits where we filled the array
+             on the previous call to this function.  */
+
+          bitoff = windex * BITSET_WORD_BITS;
+          word = srcp[windex] >> bitno;
+          for (bitno = bitoff + bitno; word; bitno++)
+            {
+              if (word & 1)
+                {
+                  list[count++] = bitno;
+                  if (count >= num)
+                    {
+                      *next = bitno + 1;
+                      return count;
+                    }
+                }
+              word >>= 1;
+            }
+          windex++;
+        }
+      bitoff = windex * BITSET_WORD_BITS;
+    }
+
+  for (; windex < size; windex++, bitoff += BITSET_WORD_BITS)
+    {
+      if (!(word = srcp[windex]))
+        continue;
+
+      if ((count + BITSET_WORD_BITS) < num)
+        {
+          for (bitno = bitoff; word; bitno++)
+            {
+              if (word & 1)
+                list[count++] = bitno;
+              word >>= 1;
+            }
+        }
+      else
+        {
+          for (bitno = bitoff; word; bitno++)
+            {
+              if (word & 1)
+                {
+                  list[count++] = bitno;
+                  if (count >= num)
+                    {
+                      *next = bitno + 1;
+                      return count;
+                    }
+                }
+              word >>= 1;
+            }
+        }
+    }
+
+  *next = bitoff;
+  return count;
+}
+
+
+/* Ensure that any unused bits within the last word are clear.  */
+static inline void
+vbitset_unused_clear (bitset dst)
+{
+  unsigned last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS;
+  if (last_bit)
+    VBITSET_WORDS (dst)[VBITSET_SIZE (dst) - 1] &=
+      ((bitset_word) 1 << last_bit) - 1;
+}
+
+
+static void
+vbitset_ones (bitset dst)
+{
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  unsigned bytes = sizeof (bitset_word) * VBITSET_SIZE (dst);
+
+  memset (dstp, -1, bytes);
+  vbitset_unused_clear (dst);
+}
+
+
+static void
+vbitset_zero (bitset dst)
+{
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  unsigned bytes = sizeof (bitset_word) * VBITSET_SIZE (dst);
+
+  memset (dstp, 0, bytes);
+}
+
+
+static bool
+vbitset_empty_p (bitset dst)
+{
+  bitset_word *dstp = VBITSET_WORDS (dst);
+
+  for (unsigned i = 0; i < VBITSET_SIZE (dst); i++)
+    if (dstp[i])
+      return false;
+  return true;
+}
+
+
+static void
+vbitset_copy1 (bitset dst, bitset src)
+{
+  if (src == dst)
+    return;
+
+  vbitset_resize (dst, BITSET_SIZE_ (src));
+
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex ssize = VBITSET_SIZE (src);
+  bitset_windex dsize = VBITSET_SIZE (dst);
+
+  memcpy (dstp, srcp, sizeof (bitset_word) * ssize);
+
+  memset (dstp + sizeof (bitset_word) * ssize, 0,
+          sizeof (bitset_word) * (dsize - ssize));
+}
+
+
+static void
+vbitset_not (bitset dst, bitset src)
+{
+  vbitset_resize (dst, BITSET_SIZE_ (src));
+
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex ssize = VBITSET_SIZE (src);
+  bitset_windex dsize = VBITSET_SIZE (dst);
+
+  for (unsigned i = 0; i < ssize; i++)
+    *dstp++ = ~(*srcp++);
+
+  vbitset_unused_clear (dst);
+  memset (dstp + sizeof (bitset_word) * ssize, 0,
+          sizeof (bitset_word) * (dsize - ssize));
+}
+
+
+static bool
+vbitset_equal_p (bitset dst, bitset src)
+{
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex ssize = VBITSET_SIZE (src);
+  bitset_windex dsize = VBITSET_SIZE (dst);
+
+  unsigned i;
+  for (i = 0; i < min (ssize, dsize); i++)
+    if (*srcp++ != *dstp++)
+      return false;
+
+  if (ssize > dsize)
+    {
+      for (; i < ssize; i++)
+        if (*srcp++)
+          return false;
+    }
+  else
+    {
+      for (; i < dsize; i++)
+        if (*dstp++)
+          return false;
+    }
+
+  return true;
+}
+
+
+static bool
+vbitset_subset_p (bitset dst, bitset src)
+{
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex ssize = VBITSET_SIZE (src);
+  bitset_windex dsize = VBITSET_SIZE (dst);
+
+  unsigned i;
+  for (i = 0; i < min (ssize, dsize); i++, dstp++, srcp++)
+    if (*dstp != (*srcp | *dstp))
+      return false;
+
+  if (ssize > dsize)
+    for (; i < ssize; i++)
+      if (*srcp++)
+        return false;
+
+  return true;
+}
+
+
+static bool
+vbitset_disjoint_p (bitset dst, bitset src)
+{
+  bitset_word *srcp = VBITSET_WORDS (src);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex ssize = VBITSET_SIZE (src);
+  bitset_windex dsize = VBITSET_SIZE (dst);
+
+  for (unsigned i = 0; i < min (ssize, dsize); i++)
+    if (*srcp++ & *dstp++)
+      return false;
+
+  return true;
+}
+
+
+static void
+vbitset_and (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  for (unsigned i = 0; i < min (ssize1, ssize2); i++)
+    *dstp++ = *src1p++ & *src2p++;
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - min (ssize1, ssize2)));
+}
+
+
+static bool
+vbitset_and_cmp (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  bool changed = false;
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
+    {
+      bitset_word tmp = *src1p++ & *src2p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  if (ssize2 > ssize1)
+    {
+      src1p = src2p;
+      ssize1 = ssize2;
+    }
+
+  for (; i < ssize1; i++, dstp++)
+    {
+      if (*dstp != 0)
+        {
+          changed = true;
+          *dstp = 0;
+        }
+    }
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+
+  return changed;
+}
+
+
+static void
+vbitset_andn (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++)
+    *dstp++ = *src1p++ & ~(*src2p++);
+
+  if (ssize2 > ssize1)
+    {
+      for (; i < ssize2; i++)
+        *dstp++ = 0;
+
+      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));
+    }
+  else
+    {
+      for (; i < ssize1; i++)
+        *dstp++ = *src1p++;
+
+      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+    }
+}
+
+
+static bool
+vbitset_andn_cmp (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  bool changed = false;
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
+    {
+      bitset_word tmp = *src1p++ & ~(*src2p++);
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  if (ssize2 > ssize1)
+    {
+      for (; i < ssize2; i++, dstp++)
+        {
+          if (*dstp != 0)
+            {
+              changed = true;
+              *dstp = 0;
+            }
+        }
+
+      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));
+    }
+  else
+    {
+      for (; i < ssize1; i++, dstp++)
+        {
+          bitset_word tmp = *src1p++;
+
+          if (*dstp != tmp)
+            {
+              changed = true;
+              *dstp = tmp;
+            }
+        }
+
+      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+    }
+
+  return changed;
+}
+
+
+static void
+vbitset_or (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++)
+    *dstp++ = *src1p++ | *src2p++;
+
+  if (ssize2 > ssize1)
+    {
+      src1p = src2p;
+      ssize1 = ssize2;
+    }
+
+  for (; i < ssize1; i++)
+    *dstp++ = *src1p++;
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+}
+
+
+static bool
+vbitset_or_cmp (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  bool changed = false;
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
+    {
+      bitset_word tmp = *src1p++ | *src2p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  if (ssize2 > ssize1)
+    {
+      src1p = src2p;
+      ssize1 = ssize2;
+    }
+
+  for (; i < ssize1; i++, dstp++)
+    {
+      bitset_word tmp = *src1p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+
+  return changed;
+}
+
+
+static void
+vbitset_xor (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++)
+    *dstp++ = *src1p++ ^ *src2p++;
+
+  if (ssize2 > ssize1)
+    {
+      src1p = src2p;
+      ssize1 = ssize2;
+    }
+
+  for (; i < ssize1; i++)
+    *dstp++ = *src1p++;
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+}
+
+
+static bool
+vbitset_xor_cmp (bitset dst, bitset src1, bitset src2)
+{
+  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
+
+  bitset_windex dsize = VBITSET_SIZE (dst);
+  bitset_windex ssize1 = VBITSET_SIZE (src1);
+  bitset_windex ssize2 = VBITSET_SIZE (src2);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+
+  bool changed = false;
+  unsigned i;
+  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
+    {
+      bitset_word tmp = *src1p++ ^ *src2p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  if (ssize2 > ssize1)
+    {
+      src1p = src2p;
+      ssize1 = ssize2;
+    }
+
+  for (; i < ssize1; i++, dstp++)
+    {
+      bitset_word tmp = *src1p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+
+  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
+
+  return changed;
+}
+
+
+/* FIXME, these operations need fixing for different size
+   bitsets.  */
+
+static void
+vbitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    {
+      bitset_and_or_ (dst, src1, src2, src3);
+      return;
+    }
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  for (unsigned i = 0; i < size; i++)
+    *dstp++ = (*src1p++ & *src2p++) | *src3p++;
+}
+
+
+static bool
+vbitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    return bitset_and_or_cmp_ (dst, src1, src2, src3);
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  bool changed = false;
+  for (unsigned i = 0; i < size; i++, dstp++)
+    {
+      bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+  return changed;
+}
+
+
+static void
+vbitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    {
+      bitset_andn_or_ (dst, src1, src2, src3);
+      return;
+    }
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  for (unsigned i = 0; i < size; i++)
+    *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;
+}
+
+
+static bool
+vbitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    return bitset_andn_or_cmp_ (dst, src1, src2, src3);
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  bool changed = false;
+  for (unsigned i = 0; i < size; i++, dstp++)
+    {
+      bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+  return changed;
+}
+
+
+static void
+vbitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    {
+      bitset_or_and_ (dst, src1, src2, src3);
+      return;
+    }
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  for (unsigned i = 0; i < size; i++)
+    *dstp++ = (*src1p++ | *src2p++) & *src3p++;
+}
+
+
+static bool
+vbitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
+{
+  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
+      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
+    return bitset_or_and_cmp_ (dst, src1, src2, src3);
+
+  vbitset_resize (dst, BITSET_NBITS_ (src1));
+
+  bitset_word *src1p = VBITSET_WORDS (src1);
+  bitset_word *src2p = VBITSET_WORDS (src2);
+  bitset_word *src3p = VBITSET_WORDS (src3);
+  bitset_word *dstp = VBITSET_WORDS (dst);
+  bitset_windex size = VBITSET_SIZE (dst);
+
+  bool changed = false;
+  unsigned i;
+  for (i = 0; i < size; i++, dstp++)
+    {
+      bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;
+
+      if (*dstp != tmp)
+        {
+          changed = true;
+          *dstp = tmp;
+        }
+    }
+  return changed;
+}
+
+
+static void
+vbitset_copy (bitset dst, bitset src)
+{
+  if (BITSET_COMPATIBLE_ (dst, src))
+    vbitset_copy1 (dst, src);
+  else
+    bitset_copy_ (dst, src);
+}
+
+
+static void
+vbitset_free (bitset bset)
+{
+  free (VBITSET_WORDS (bset));
+}
+
+
+/* Vector of operations for multiple word bitsets.  */
+struct bitset_vtable vbitset_vtable = {
+  vbitset_set,
+  vbitset_reset,
+  bitset_toggle_,
+  vbitset_test,
+  vbitset_resize,
+  bitset_size_,
+  bitset_count_,
+  vbitset_empty_p,
+  vbitset_ones,
+  vbitset_zero,
+  vbitset_copy,
+  vbitset_disjoint_p,
+  vbitset_equal_p,
+  vbitset_not,
+  vbitset_subset_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_list,
+  vbitset_list_reverse,
+  vbitset_free,
+  BITSET_VECTOR
+};
+
+
+size_t
+vbitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
+{
+  return sizeof (struct vbitset_struct);
+}
+
+
+bitset
+vbitset_init (bitset bset, bitset_bindex n_bits)
+{
+  bset->b.vtable = &vbitset_vtable;
+  bset->b.cindex = 0;
+  VBITSET_SIZE (bset) = 0;
+  vbitset_resize (bset, n_bits);
+  return bset;
+}
diff --git a/lib/vbitset.h b/lib/bitset/vector.h
similarity index 69%
rename from lib/vbitset.h
rename to lib/bitset/vector.h
index 5b3e810..34fa498 100644
--- a/lib/vbitset.h
+++ b/lib/bitset/vector.h
@@ -1,6 +1,7 @@
 /* Functions to support vbitsets.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,15 +16,15 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef _VBITSET_H
-#define _VBITSET_H
+#ifndef _BITSET_VECTOR_H
+#define _BITSET_VECTOR_H
 
 #include "bitset.h"
 
-extern size_t vbitset_bytes (bitset_bindex);
+size_t vbitset_bytes (bitset_bindex);
 
-extern bitset vbitset_init (bitset, bitset_bindex);
+bitset vbitset_init (bitset, bitset_bindex);
 
 #endif
diff --git a/lib/bitsetv-print.c b/lib/bitsetv-print.c
deleted file mode 100644
index 92b617e..0000000
--- a/lib/bitsetv-print.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Bitset vectors.
-
-   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 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   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 "bitsetv-print.h"
-
-#include <stdlib.h>
-
-/*--------------------------------------------------------.
-| Display the MATRIX array of SIZE bitsets of size SIZE.  |
-`--------------------------------------------------------*/
-
-void
-bitsetv_matrix_dump (FILE * out, const char *title, bitsetv bset)
-{
-  bitset_bindex i, j;
-  bitset_bindex hsize = bitset_size (bset[0]);
-
-  /* Title. */
-  fprintf (out, "%s BEGIN\n", title);
-
-  /* Column numbers. */
-  fputs ("   ", out);
-  for (i = 0; i < hsize; ++i)
-    putc (i / 10 ? '0' + i / 10 : ' ', out);
-  putc ('\n', out);
-  fputs ("   ", out);
-  for (i = 0; i < hsize; ++i)
-    fprintf (out, "%d", (int) (i % 10));
-  putc ('\n', out);
-
-  /* Bar. */
-  fputs ("  .", out);
-  for (i = 0; i < hsize; ++i)
-    putc ('-', out);
-  fputs (".\n", out);
-
-  /* Contents. */
-  for (i = 0; bset[i]; ++i)
-    {
-      fprintf (out, "%2lu|", (unsigned long int) i);
-      for (j = 0; j < hsize; ++j)
-	fputs (bitset_test (bset[i], j) ? "1" : " ", out);
-      fputs ("|\n", out);
-    }
-
-  /* Bar. */
-  fputs ("  `", out);
-  for (i = 0; i < hsize; ++i)
-    putc ('-', out);
-  fputs ("'\n", out);
-
-  /* End title. */
-  fprintf (out, "%s END\n\n", title);
-}
diff --git a/lib/bitsetv-print.h b/lib/bitsetv-print.h
deleted file mode 100644
index 27736ef..0000000
--- a/lib/bitsetv-print.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Bitset vectors.
-
-   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 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   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
-
-#include "bitsetv.h"
-
-/* Dump vector of bitsets as a matrix.  */
-extern void bitsetv_matrix_dump (FILE *, const char *, bitsetv);
-
-#endif  /* _BITSETV_H  */
diff --git a/lib/bitsetv.c b/lib/bitsetv.c
index e3bafb9..db10017 100644
--- a/lib/bitsetv.c
+++ b/lib/bitsetv.c
@@ -1,6 +1,6 @@
 /* Bitset vectors.
 
-   Copyright (C) 2001-2002, 2004-2006, 2009-2012 Free Software
+   Copyright (C) 2001-2002, 2004-2006, 2009-2015, 2018-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -22,30 +22,28 @@
 
 #include <stdlib.h>
 
+#include "xalloc.h"
+
 
 /* Create a vector of N_VECS bitsets, each of N_BITS, and of
    type TYPE.  */
 bitset *
 bitsetv_alloc (bitset_bindex n_vecs, bitset_bindex n_bits,
-	       enum bitset_type type)
+               enum bitset_type type)
 {
-  size_t vector_bytes;
-  size_t bytes;
-  bitset *bsetv;
-  bitset_bindex i;
-
   /* Determine number of bytes for each set.  */
-  bytes = bitset_bytes (type, n_bits);
+  size_t bytes = bitset_bytes (type, n_bits);
 
   /* If size calculation overflows, memory is exhausted.  */
   if (BITSET_SIZE_MAX / (sizeof (bitset) + bytes) <= n_vecs)
     xalloc_die ();
 
   /* Allocate vector table at head of bitset array.  */
-  vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1;
+  size_t vector_bytes = (n_vecs + 1) * sizeof (bitset) + bytes - 1;
   vector_bytes -= vector_bytes % bytes;
-  bsetv = xcalloc (1, vector_bytes + bytes * n_vecs);
+  bitset *bsetv = xzalloc (vector_bytes + bytes * n_vecs);
 
+  bitset_bindex i = 0;
   for (i = 0; i < n_vecs; i++)
     {
       bsetv[i] = (bitset) (void *) ((char *) bsetv + vector_bytes + i * bytes);
@@ -62,11 +60,9 @@
 /* Create a vector of N_VECS bitsets, each of N_BITS, and with
    attribute hints specified by ATTR.  */
 bitset *
-bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned int attr)
+bitsetv_create (bitset_bindex n_vecs, bitset_bindex n_bits, unsigned attr)
 {
-  enum bitset_type type;
-
-  type = bitset_type_choose (n_bits, attr);
+  enum bitset_type type = bitset_type_choose (n_bits, attr);
   return bitsetv_alloc (n_vecs, n_bits, type);
 }
 
@@ -75,11 +71,12 @@
 void
 bitsetv_free (bitsetv bsetv)
 {
-  bitset_bindex i;
-
-  for (i = 0; bsetv[i]; i++)
-      BITSET_FREE_ (bsetv[i]);
-  free (bsetv);
+  if (bsetv)
+    {
+      for (bitset_bindex i = 0; bsetv[i]; i++)
+        BITSET_FREE_ (bsetv[i]);
+      free (bsetv);
+    }
 }
 
 
@@ -87,9 +84,7 @@
 void
 bitsetv_zero (bitsetv bsetv)
 {
-  bitset_bindex i;
-
-  for (i = 0; bsetv[i]; i++)
+  for (bitset_bindex i = 0; bsetv[i]; i++)
     bitset_zero (bsetv[i]);
 }
 
@@ -98,9 +93,7 @@
 void
 bitsetv_ones (bitsetv bsetv)
 {
-  bitset_bindex i;
-
-  for (i = 0; bsetv[i]; i++)
+  for (bitset_bindex i = 0; bsetv[i]; i++)
     bitset_ones (bsetv[i]);
 }
 
@@ -110,13 +103,10 @@
 void
 bitsetv_transitive_closure (bitsetv bsetv)
 {
-  bitset_bindex i;
-  bitset_bindex j;
-
-  for (i = 0; bsetv[i]; i++)
-    for (j = 0; bsetv[j]; j++)
+  for (bitset_bindex i = 0; bsetv[i]; i++)
+    for (bitset_bindex j = 0; bsetv[j]; j++)
       if (bitset_test (bsetv[j], i))
-	bitset_or (bsetv[j], bsetv[j], bsetv[i]);
+        bitset_or (bsetv[j], bsetv[j], bsetv[i]);
 }
 
 
@@ -127,10 +117,8 @@
 void
 bitsetv_reflexive_transitive_closure (bitsetv bsetv)
 {
-  bitset_bindex i;
-
   bitsetv_transitive_closure (bsetv);
-  for (i = 0; bsetv[i]; i++)
+  for (bitset_bindex i = 0; bsetv[i]; i++)
     bitset_set (bsetv[i], i);
 }
 
@@ -139,14 +127,12 @@
    FILE.  */
 void
 bitsetv_dump (FILE *file, char const *title, char const *subtitle,
-	      bitsetv bsetv)
+              bitsetv bsetv)
 {
-  bitset_windex i;
-
   fprintf (file, "%s\n", title);
-  for (i = 0; bsetv[i]; i++)
+  for (bitset_windex i = 0; bsetv[i]; i++)
     {
-      fprintf (file, "%s %lu\n", subtitle, (unsigned long int) i);
+      fprintf (file, "%s %lu\n", subtitle, (unsigned long) i);
       bitset_dump (file, bsetv[i]);
     }
 
@@ -157,13 +143,59 @@
 void
 debug_bitsetv (bitsetv bsetv)
 {
-  bitset_windex i;
-
-  for (i = 0; bsetv[i]; i++)
+  for (bitset_windex i = 0; bsetv[i]; i++)
     {
-      fprintf (stderr, "%lu: ", (unsigned long int) i);
+      fprintf (stderr, "%lu: ", (unsigned long) i);
       debug_bitset (bsetv[i]);
     }
 
   fprintf (stderr, "\n");
 }
+
+
+/*--------------------------------------------------------.
+| Display the MATRIX array of SIZE bitsets of size SIZE.  |
+`--------------------------------------------------------*/
+
+void
+bitsetv_matrix_dump (FILE *out, const char *title, bitsetv bset)
+{
+  bitset_bindex hsize = bitset_size (bset[0]);
+
+  /* Title. */
+  fprintf (out, "%s BEGIN\n", title);
+
+  /* Column numbers. */
+  fputs ("   ", out);
+  for (bitset_bindex i = 0; i < hsize; ++i)
+    putc (i / 10 ? '0' + i / 10 : ' ', out);
+  putc ('\n', out);
+  fputs ("   ", out);
+  for (bitset_bindex i = 0; i < hsize; ++i)
+    fprintf (out, "%d", (int) (i % 10));
+  putc ('\n', out);
+
+  /* Bar. */
+  fputs ("  .", out);
+  for (bitset_bindex i = 0; i < hsize; ++i)
+    putc ('-', out);
+  fputs (".\n", out);
+
+  /* Contents. */
+  for (bitset_bindex i = 0; bset[i]; ++i)
+    {
+      fprintf (out, "%2lu|", (unsigned long) i);
+      for (bitset_bindex j = 0; j < hsize; ++j)
+        fputs (bitset_test (bset[i], j) ? "1" : " ", out);
+      fputs ("|\n", out);
+    }
+
+  /* Bar. */
+  fputs ("  `", out);
+  for (bitset_bindex i = 0; i < hsize; ++i)
+    putc ('-', out);
+  fputs ("'\n", out);
+
+  /* End title. */
+  fprintf (out, "%s END\n\n", title);
+}
diff --git a/lib/bitsetv.h b/lib/bitsetv.h
index 34e1604..2f1ff88 100644
--- a/lib/bitsetv.h
+++ b/lib/bitsetv.h
@@ -1,6 +1,7 @@
 /* Bitset vectors.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).
 
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _BITSETV_H
 #define _BITSETV_H
@@ -26,35 +27,38 @@
 
 /* Create a vector of N_VECS bitsets, each of N_BITS, and of
    type TYPE.  */
-extern bitsetv bitsetv_alloc (bitset_bindex, bitset_bindex, enum bitset_type);
+bitsetv bitsetv_alloc (bitset_bindex, bitset_bindex, enum bitset_type);
 
 /* Create a vector of N_VECS bitsets, each of N_BITS, and with
    attribute hints specified by ATTR.  */
-extern bitsetv bitsetv_create (bitset_bindex, bitset_bindex, unsigned int);
+bitsetv bitsetv_create (bitset_bindex, bitset_bindex, unsigned);
 
-/* Free vector of bitsets.  */
-extern void bitsetv_free (bitsetv);
+/* Free vector of bitsets.  Do nothing if NULL.  */
+void bitsetv_free (bitsetv);
 
 /* Zero vector of bitsets.  */
-extern void bitsetv_zero (bitsetv);
+void bitsetv_zero (bitsetv);
 
 /* Set vector of bitsets.  */
-extern void bitsetv_ones (bitsetv);
+void bitsetv_ones (bitsetv);
 
 /* Given a vector BSETV of N bitsets of size N, modify its contents to
    be the transitive closure of what was given.  */
-extern void bitsetv_transitive_closure (bitsetv);
+void bitsetv_transitive_closure (bitsetv);
 
 /* Given a vector BSETV of N bitsets of size N, modify its contents to
    be the reflexive transitive closure of what was given.  This is
    the same as transitive closure but with all bits on the diagonal
    of the bit matrix set.  */
-extern void bitsetv_reflexive_transitive_closure (bitsetv);
+void bitsetv_reflexive_transitive_closure (bitsetv);
 
 /* Dump vector of bitsets.  */
-extern void bitsetv_dump (FILE *, const char *, const char *, bitsetv);
+void bitsetv_dump (FILE *, const char *, const char *, bitsetv);
 
 /* Function to debug vector of bitsets from debugger.  */
-extern void debug_bitsetv (bitsetv);
+void debug_bitsetv (bitsetv);
+
+/* Dump vector of bitsets as a matrix.  */
+void bitsetv_matrix_dump (FILE *, const char *, bitsetv);
 
 #endif  /* _BITSETV_H  */
diff --git a/build-aux/snippet/c++defs.h b/lib/c++defs.h
similarity index 71%
rename from build-aux/snippet/c++defs.h
rename to lib/c++defs.h
index 96da94b..87d0716 100644
--- a/build-aux/snippet/c++defs.h
+++ b/lib/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 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
@@ -12,11 +12,20 @@
    General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _GL_CXXDEFS_H
 #define _GL_CXXDEFS_H
 
+/* Begin/end the GNULIB_NAMESPACE namespace.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
+# define _GL_END_NAMESPACE }
+#else
+# define _GL_BEGIN_NAMESPACE
+# define _GL_END_NAMESPACE
+#endif
+
 /* The three most frequent use cases of these macros are:
 
    * For providing a substitute for a function that is missing on some
@@ -111,14 +120,25 @@
    that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
    Example:
      _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
- */
+
+   Wrapping rpl_func in an object with an inline conversion operator
+   avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is
+   actually used in the program.  */
 #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;          \
+      static const struct _gl_ ## func ## _wrapper            \
+      {                                                       \
+        typedef rettype (*type) parameters;                   \
+                                                              \
+        inline operator type () const                         \
+        {                                                     \
+          return ::rpl_func;                                  \
+        }                                                     \
+      } func = {};                                            \
     }                                                         \
     _GL_EXTERN_C int _gl_cxxalias_dummy
 #else
@@ -135,8 +155,15 @@
 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
     namespace GNULIB_NAMESPACE                                     \
     {                                                              \
-      rettype (*const func) parameters =                           \
-        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+      static const struct _gl_ ## func ## _wrapper                 \
+      {                                                            \
+        typedef rettype (*type) parameters;                        \
+                                                                   \
+        inline operator type () const                              \
+        {                                                          \
+          return reinterpret_cast<type>(::rpl_func);               \
+        }                                                          \
+      } func = {};                                                 \
     }                                                              \
     _GL_EXTERN_C int _gl_cxxalias_dummy
 #else
@@ -150,19 +177,24 @@
    is defined.
    Example:
      _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
- */
+
+   Wrapping func in an object with an inline conversion operator
+   avoids a reference to func unless GNULIB_NAMESPACE::func is
+   actually used in the program.  */
 #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;  \
-    }                                              \
+# define _GL_CXXALIAS_SYS(func,rettype,parameters)            \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      static const struct _gl_ ## func ## _wrapper            \
+      {                                                       \
+        typedef rettype (*type) parameters;                   \
+                                                              \
+        inline operator type () const                         \
+        {                                                     \
+          return ::func;                                      \
+        }                                                     \
+      } func = {};                                            \
+    }                                                         \
     _GL_EXTERN_C int _gl_cxxalias_dummy
 #else
 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
@@ -178,8 +210,15 @@
 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
     namespace GNULIB_NAMESPACE                          \
     {                                                   \
-      static rettype (*func) parameters =               \
-        reinterpret_cast<rettype(*)parameters>(::func); \
+      static const struct _gl_ ## func ## _wrapper      \
+      {                                                 \
+        typedef rettype (*type) parameters;             \
+                                                        \
+        inline operator type () const                   \
+        {                                               \
+          return reinterpret_cast<type>(::func);        \
+        }                                               \
+      } func = {};                                      \
     }                                                   \
     _GL_EXTERN_C int _gl_cxxalias_dummy
 #else
@@ -202,9 +241,15 @@
 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
     namespace GNULIB_NAMESPACE                                                \
     {                                                                         \
-      static rettype (*func) parameters =                                     \
-        reinterpret_cast<rettype(*)parameters>(                               \
-          (rettype2(*)parameters2)(::func));                                  \
+      static const struct _gl_ ## func ## _wrapper                            \
+      {                                                                       \
+        typedef rettype (*type) parameters;                                   \
+                                                                              \
+        inline operator type () const                                         \
+        {                                                                     \
+          return reinterpret_cast<type>((rettype2 (*) parameters2)(::func));  \
+        }                                                                     \
+      } func = {};                                                            \
     }                                                                         \
     _GL_EXTERN_C int _gl_cxxalias_dummy
 #else
@@ -221,7 +266,7 @@
    _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>,
+/* To work around GCC bug <https://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) \
@@ -249,7 +294,7 @@
                         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>,
+/* To work around GCC bug <https://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) \
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
index 952d7a8..5d9d4d8 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -1,395 +1,3 @@
-/* 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
+#define C_CTYPE_INLINE _GL_EXTERN_INLINE
 #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
index 0b31309..4d52176 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -5,7 +5,7 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2019 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
@@ -18,13 +18,20 @@
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef C_CTYPE_H
 #define C_CTYPE_H
 
 #include <stdbool.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef C_CTYPE_INLINE
+# define C_CTYPE_INLINE _GL_INLINE
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -39,38 +46,6 @@
    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) \
@@ -96,11 +71,84 @@
     && ('{' == 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
+# define C_CTYPE_ASCII 1
+#elif ! (' ' == '\x40' && '0' == '\xf0'                     \
+         && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \
+         && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2')
+# error "Only ASCII and EBCDIC are supported"
 #endif
 
+#if 'A' < 0
+# error "EBCDIC and char is signed -- not supported"
+#endif
 
-/* Function declarations. */
+/* Cases for control characters.  */
+
+#define _C_CTYPE_CNTRL \
+   case '\a': case '\b': case '\f': case '\n': \
+   case '\r': case '\t': case '\v': \
+   _C_CTYPE_OTHER_CNTRL
+
+/* ASCII control characters other than those with \-letter escapes.  */
+
+#if C_CTYPE_ASCII
+# define _C_CTYPE_OTHER_CNTRL \
+    case '\x00': case '\x01': case '\x02': case '\x03': \
+    case '\x04': case '\x05': case '\x06': case '\x0e': \
+    case '\x0f': case '\x10': case '\x11': case '\x12': \
+    case '\x13': case '\x14': case '\x15': case '\x16': \
+    case '\x17': case '\x18': case '\x19': case '\x1a': \
+    case '\x1b': case '\x1c': case '\x1d': case '\x1e': \
+    case '\x1f': case '\x7f'
+#else
+   /* Use EBCDIC code page 1047's assignments for ASCII control chars;
+      assume all EBCDIC code pages agree about these assignments.  */
+# define _C_CTYPE_OTHER_CNTRL \
+    case '\x00': case '\x01': case '\x02': case '\x03': \
+    case '\x07': case '\x0e': case '\x0f': case '\x10': \
+    case '\x11': case '\x12': case '\x13': case '\x18': \
+    case '\x19': case '\x1c': case '\x1d': case '\x1e': \
+    case '\x1f': case '\x26': case '\x27': case '\x2d': \
+    case '\x2e': case '\x32': case '\x37': case '\x3c': \
+    case '\x3d': case '\x3f'
+#endif
+
+/* Cases for lowercase hex letters, and lowercase letters, all offset by N.  */
+
+#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
+   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
+   case 'e' + (N): case 'f' + (N)
+#define _C_CTYPE_LOWER_N(N) \
+   _C_CTYPE_LOWER_A_THRU_F_N(N): \
+   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
+   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
+   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
+   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
+   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
+
+/* Cases for hex letters, digits, lower, punct, and upper.  */
+
+#define _C_CTYPE_A_THRU_F \
+   _C_CTYPE_LOWER_A_THRU_F_N (0): \
+   _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a')
+#define _C_CTYPE_DIGIT                     \
+   case '0': case '1': case '2': case '3': \
+   case '4': case '5': case '6': case '7': \
+   case '8': case '9'
+#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
+#define _C_CTYPE_PUNCT \
+   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 '~'
+#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
+
+
+/* Function definitions.  */
 
 /* 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
@@ -117,178 +165,202 @@
          if (c_isalpha (*s)) ...
  */
 
-extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
+C_CTYPE_INLINE bool
+c_isalnum (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-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;
+C_CTYPE_INLINE bool
+c_isalpha (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER:
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
-extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
+/* The function isascii is not locale dependent.
+   Its use in EBCDIC is questionable. */
+C_CTYPE_INLINE bool
+c_isascii (int c)
+{
+  switch (c)
+    {
+    case ' ':
+    _C_CTYPE_CNTRL:
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_PUNCT:
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
+C_CTYPE_INLINE bool
+c_isblank (int c)
+{
+  return c == ' ' || c == '\t';
+}
 
-#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
+C_CTYPE_INLINE bool
+c_iscntrl (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_CNTRL:
+      return true;
+    default:
+      return false;
+    }
+}
 
-/* ASCII optimizations. */
+C_CTYPE_INLINE bool
+c_isdigit (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#undef c_isascii
-#define c_isascii(c) \
-  ({ int __c = (c); \
-     (__c >= 0x00 && __c <= 0x7f); \
-   })
+C_CTYPE_INLINE bool
+c_isgraph (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_PUNCT:
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#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
+C_CTYPE_INLINE bool
+c_islower (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#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
+C_CTYPE_INLINE bool
+c_isprint (int c)
+{
+  switch (c)
+    {
+    case ' ':
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_LOWER:
+    _C_CTYPE_PUNCT:
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#undef c_isblank
-#define c_isblank(c) \
-  ({ int __c = (c); \
-     (__c == ' ' || __c == '\t'); \
-   })
+C_CTYPE_INLINE bool
+c_ispunct (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_PUNCT:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_ASCII
-#undef c_iscntrl
-#define c_iscntrl(c) \
-  ({ int __c = (c); \
-     ((__c & ~0x1f) == 0 || __c == 0x7f); \
-   })
-#endif
+C_CTYPE_INLINE bool
+c_isspace (int c)
+{
+  switch (c)
+    {
+    case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_CONSECUTIVE_DIGITS
-#undef c_isdigit
-#define c_isdigit(c) \
-  ({ int __c = (c); \
-     (__c >= '0' && __c <= '9'); \
-   })
-#endif
+C_CTYPE_INLINE bool
+c_isupper (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_UPPER:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_CONSECUTIVE_LOWERCASE
-#undef c_islower
-#define c_islower(c) \
-  ({ int __c = (c); \
-     (__c >= 'a' && __c <= 'z'); \
-   })
-#endif
+C_CTYPE_INLINE bool
+c_isxdigit (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_DIGIT:
+    _C_CTYPE_A_THRU_F:
+      return true;
+    default:
+      return false;
+    }
+}
 
-#if C_CTYPE_ASCII
-#undef c_isgraph
-#define c_isgraph(c) \
-  ({ int __c = (c); \
-     (__c >= '!' && __c <= '~'); \
-   })
-#endif
+C_CTYPE_INLINE int
+c_tolower (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_UPPER:
+      return c - 'A' + 'a';
+    default:
+      return c;
+    }
+}
 
-#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 */
-
+C_CTYPE_INLINE int
+c_toupper (int c)
+{
+  switch (c)
+    {
+    _C_CTYPE_LOWER:
+      return c - 'a' + 'A';
+    default:
+      return c;
+    }
+}
 
 #ifdef __cplusplus
 }
 #endif
 
+_GL_INLINE_HEADER_END
+
 #endif /* C_CTYPE_H */
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
index fdef238..b67c9b5 100644
--- a/lib/c-strcase.h
+++ b/lib/c-strcase.h
@@ -1,5 +1,5 @@
 /* Case-insensitive string comparison functions in C locale.
-   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2012 Free Software
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef C_STRCASE_H
 #define C_STRCASE_H
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
index d8332ca..ec50f1a 100644
--- a/lib/c-strcasecmp.c
+++ b/lib/c-strcasecmp.c
@@ -1,5 +1,5 @@
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/c-strcaseeq.h b/lib/c-strcaseeq.h
index 5c4bdff..bcc81fc 100644
--- a/lib/c-strcaseeq.h
+++ b/lib/c-strcaseeq.h
@@ -1,5 +1,5 @@
 /* Optimized case-insensitive string comparison in C locale.
-   Copyright (C) 2001-2002, 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002, 2007, 2009-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>.  */
 
@@ -33,9 +33,6 @@
 # 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))
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
index 47fb5fd..513c353 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -1,5 +1,5 @@
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/calloc.c b/lib/calloc.c
index 93da14d..a0f5728 100644
--- a/lib/calloc.c
+++ b/lib/calloc.c
@@ -1,6 +1,6 @@
 /* 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.
+   Copyright (C) 2004-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Jim Meyering and Bruno Haible */
 
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
new file mode 100644
index 0000000..4d1be6d
--- /dev/null
+++ b/lib/canonicalize-lgpl.c
@@ -0,0 +1,428 @@
+/* Return the canonical absolute name of a given file.
+   Copyright (C) 1996-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the name == NULL test below.  */
+# define _GL_ARG_NONNULL(params)
+
+# define _GL_USE_STDLIB_ALLOC 1
+# include <config.h>
+#endif
+
+#if !HAVE_CANONICALIZE_FILE_NAME || !FUNC_REALPATH_WORKS || defined _LIBC
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <alloca.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#if HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+#include <sys/stat.h>
+#include <errno.h>
+#include <stddef.h>
+
+#ifdef _LIBC
+# include <shlib-compat.h>
+#else
+# define SHLIB_COMPAT(lib, introduced, obsoleted) 0
+# define versioned_symbol(lib, local, symbol, version) extern int dummy
+# define compat_symbol(lib, local, symbol, version)
+# define weak_alias(local, symbol)
+# define __canonicalize_file_name canonicalize_file_name
+# define __realpath realpath
+# include "pathmax.h"
+# include "malloca.h"
+# include "dosname.h"
+# if HAVE_GETCWD
+#  if IN_RELOCWRAPPER
+    /* When building the relocatable program wrapper, use the system's getcwd
+       function, not the gnulib override, otherwise we would get a link error.
+     */
+#   undef getcwd
+#  endif
+#  if defined VMS && !defined getcwd
+    /* We want the directory in Unix syntax, not in VMS syntax.
+       The gnulib override of 'getcwd' takes 2 arguments; the original VMS
+       'getcwd' takes 3 arguments.  */
+#   define __getcwd(buf, max) getcwd (buf, max, 0)
+#  else
+#   define __getcwd getcwd
+#  endif
+# else
+#  define __getcwd(buf, max) getwd (buf)
+# endif
+# define __readlink readlink
+# define __set_errno(e) errno = (e)
+# ifndef MAXSYMLINKS
+#  ifdef SYMLOOP_MAX
+#   define MAXSYMLINKS SYMLOOP_MAX
+#  else
+#   define MAXSYMLINKS 20
+#  endif
+# endif
+#endif
+
+#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
+#endif
+
+/* Define this independently so that stdint.h is not a prerequisite.  */
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#if !FUNC_REALPATH_WORKS || defined _LIBC
+
+static void
+alloc_failed (void)
+{
+#if defined _WIN32 && ! defined __CYGWIN__
+  /* Avoid errno problem without using the malloc or realloc modules; see:
+     https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html  */
+  errno = ENOMEM;
+#endif
+}
+
+/* Return the canonical absolute name of file NAME.  A canonical name
+   does not contain any ".", ".." components nor any repeated path
+   separators ('/') or symlinks.  All path components must exist.  If
+   RESOLVED is null, the result is malloc'd; otherwise, if the
+   canonical name is PATH_MAX chars or more, returns null with 'errno'
+   set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  If the name cannot be resolved and
+   RESOLVED is non-NULL, it contains the path of the first component
+   that cannot be resolved.  If the path can be resolved, RESOLVED
+   holds the same value as the value returned.  */
+
+char *
+__realpath (const char *name, char *resolved)
+{
+  char *rpath, *dest, *extra_buf = NULL;
+  const char *start, *end, *rpath_limit;
+  long int path_max;
+  int num_links = 0;
+  size_t prefix_len;
+
+  if (name == NULL)
+    {
+      /* As per Single Unix Specification V2 we must return an error if
+         either parameter is a null pointer.  We extend this to allow
+         the RESOLVED parameter to be NULL in case the we are expected to
+         allocate the room for the return value.  */
+      __set_errno (EINVAL);
+      return NULL;
+    }
+
+  if (name[0] == '\0')
+    {
+      /* As per Single Unix Specification V2 we must return an error if
+         the name argument points to an empty string.  */
+      __set_errno (ENOENT);
+      return NULL;
+    }
+
+#ifdef PATH_MAX
+  path_max = PATH_MAX;
+#else
+  path_max = pathconf (name, _PC_PATH_MAX);
+  if (path_max <= 0)
+    path_max = 8192;
+#endif
+
+  if (resolved == NULL)
+    {
+      rpath = malloc (path_max);
+      if (rpath == NULL)
+        {
+          alloc_failed ();
+          return NULL;
+        }
+    }
+  else
+    rpath = resolved;
+  rpath_limit = rpath + path_max;
+
+  /* This is always zero for Posix hosts, but can be 2 for MS-Windows
+     and MS-DOS X:/foo/bar file names.  */
+  prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
+
+  if (!IS_ABSOLUTE_FILE_NAME (name))
+    {
+      if (!__getcwd (rpath, path_max))
+        {
+          rpath[0] = '\0';
+          goto error;
+        }
+      dest = strchr (rpath, '\0');
+      start = name;
+      prefix_len = FILE_SYSTEM_PREFIX_LEN (rpath);
+    }
+  else
+    {
+      dest = rpath;
+      if (prefix_len)
+        {
+          memcpy (rpath, name, prefix_len);
+          dest += prefix_len;
+        }
+      *dest++ = '/';
+      if (DOUBLE_SLASH_IS_DISTINCT_ROOT)
+        {
+          if (ISSLASH (name[1]) && !ISSLASH (name[2]) && !prefix_len)
+            *dest++ = '/';
+          *dest = '\0';
+        }
+      start = name + prefix_len;
+    }
+
+  for (end = start; *start; start = end)
+    {
+#ifdef _LIBC
+      struct stat64 st;
+#else
+      struct stat st;
+#endif
+
+      /* Skip sequence of multiple path-separators.  */
+      while (ISSLASH (*start))
+        ++start;
+
+      /* Find end of path component.  */
+      for (end = start; *end && !ISSLASH (*end); ++end)
+        /* Nothing.  */;
+
+      if (end - start == 0)
+        break;
+      else if (end - start == 1 && start[0] == '.')
+        /* nothing */;
+      else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+        {
+          /* Back up to previous component, ignore if at root already.  */
+          if (dest > rpath + prefix_len + 1)
+            for (--dest; dest > rpath && !ISSLASH (dest[-1]); --dest)
+              continue;
+          if (DOUBLE_SLASH_IS_DISTINCT_ROOT
+              && dest == rpath + 1 && !prefix_len
+              && ISSLASH (*dest) && !ISSLASH (dest[1]))
+            dest++;
+        }
+      else
+        {
+          size_t new_size;
+
+          if (!ISSLASH (dest[-1]))
+            *dest++ = '/';
+
+          if (dest + (end - start) >= rpath_limit)
+            {
+              ptrdiff_t dest_offset = dest - rpath;
+              char *new_rpath;
+
+              if (resolved)
+                {
+                  __set_errno (ENAMETOOLONG);
+                  if (dest > rpath + prefix_len + 1)
+                    dest--;
+                  *dest = '\0';
+                  goto error;
+                }
+              new_size = rpath_limit - rpath;
+              if (end - start + 1 > path_max)
+                new_size += end - start + 1;
+              else
+                new_size += path_max;
+              new_rpath = (char *) realloc (rpath, new_size);
+              if (new_rpath == NULL)
+                {
+                  alloc_failed ();
+                  goto error;
+                }
+              rpath = new_rpath;
+              rpath_limit = rpath + new_size;
+
+              dest = rpath + dest_offset;
+            }
+
+#ifdef _LIBC
+          dest = __mempcpy (dest, start, end - start);
+#else
+          memcpy (dest, start, end - start);
+          dest += end - start;
+#endif
+          *dest = '\0';
+
+          /* FIXME: if lstat fails with errno == EOVERFLOW,
+             the entry exists.  */
+#ifdef _LIBC
+          if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
+#else
+          if (lstat (rpath, &st) < 0)
+#endif
+            goto error;
+
+          if (S_ISLNK (st.st_mode))
+            {
+              char *buf;
+              size_t len;
+              ssize_t n;
+
+              if (++num_links > MAXSYMLINKS)
+                {
+                  __set_errno (ELOOP);
+                  goto error;
+                }
+
+              buf = malloca (path_max);
+              if (!buf)
+                {
+                  __set_errno (ENOMEM);
+                  goto error;
+                }
+
+              n = __readlink (rpath, buf, path_max - 1);
+              if (n < 0)
+                {
+                  int saved_errno = errno;
+                  freea (buf);
+                  __set_errno (saved_errno);
+                  goto error;
+                }
+              buf[n] = '\0';
+
+              if (!extra_buf)
+                {
+                  extra_buf = malloca (path_max);
+                  if (!extra_buf)
+                    {
+                      freea (buf);
+                      __set_errno (ENOMEM);
+                      goto error;
+                    }
+                }
+
+              len = strlen (end);
+              /* Check that n + len + 1 doesn't overflow and is <= path_max. */
+              if (n >= SIZE_MAX - len || n + len >= path_max)
+                {
+                  freea (buf);
+                  __set_errno (ENAMETOOLONG);
+                  goto error;
+                }
+
+              /* Careful here, end may be a pointer into extra_buf... */
+              memmove (&extra_buf[n], end, len + 1);
+              name = end = memcpy (extra_buf, buf, n);
+
+              if (IS_ABSOLUTE_FILE_NAME (buf))
+                {
+                  size_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf);
+
+                  if (pfxlen)
+                    memcpy (rpath, buf, pfxlen);
+                  dest = rpath + pfxlen;
+                  *dest++ = '/'; /* It's an absolute symlink */
+                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT)
+                    {
+                      if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen)
+                        *dest++ = '/';
+                      *dest = '\0';
+                    }
+                  /* Install the new prefix to be in effect hereafter.  */
+                  prefix_len = pfxlen;
+                }
+              else
+                {
+                  /* Back up to previous component, ignore if at root
+                     already: */
+                  if (dest > rpath + prefix_len + 1)
+                    for (--dest; dest > rpath && !ISSLASH (dest[-1]); --dest)
+                      continue;
+                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1
+                      && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len)
+                    dest++;
+                }
+            }
+          else if (!S_ISDIR (st.st_mode) && *end != '\0')
+            {
+              __set_errno (ENOTDIR);
+              goto error;
+            }
+        }
+    }
+  if (dest > rpath + prefix_len + 1 && ISSLASH (dest[-1]))
+    --dest;
+  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && !prefix_len
+      && ISSLASH (*dest) && !ISSLASH (dest[1]))
+    dest++;
+  *dest = '\0';
+
+  if (extra_buf)
+    freea (extra_buf);
+
+  return rpath;
+
+error:
+  {
+    int saved_errno = errno;
+    if (extra_buf)
+      freea (extra_buf);
+    if (resolved == NULL)
+      free (rpath);
+    __set_errno (saved_errno);
+  }
+  return NULL;
+}
+versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
+#endif /* !FUNC_REALPATH_WORKS || defined _LIBC */
+
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
+char *
+attribute_compat_text_section
+__old_realpath (const char *name, char *resolved)
+{
+  if (resolved == NULL)
+    {
+      __set_errno (EINVAL);
+      return NULL;
+    }
+
+  return __realpath (name, resolved);
+}
+compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
+#endif
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+  return __realpath (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
+
+#else
+
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+
+#endif
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
new file mode 100644
index 0000000..4803265
--- /dev/null
+++ b/lib/careadlinkat.c
@@ -0,0 +1,160 @@
+/* Read symbolic links into a buffer without size limitation, relative to fd.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#include <config.h>
+
+#include "careadlinkat.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <unistd.h>
+
+/* Define this independently so that stdint.h is not a prerequisite.  */
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+
+#include "allocator.h"
+
+/* Assuming the current directory is FD, get the symbolic link value
+   of FILENAME as a null-terminated string and put it into a buffer.
+   If FD is AT_FDCWD, FILENAME is interpreted relative to the current
+   working directory, as in openat.
+
+   If the link is small enough to fit into BUFFER put it there.
+   BUFFER's size is BUFFER_SIZE, and BUFFER can be null
+   if BUFFER_SIZE is zero.
+
+   If the link is not small, put it into a dynamically allocated
+   buffer managed by ALLOC.  It is the caller's responsibility to free
+   the returned value if it is nonnull and is not BUFFER.  A null
+   ALLOC stands for the standard allocator.
+
+   The PREADLINKAT function specifies how to read links.  It operates
+   like POSIX readlinkat()
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
+   but can assume that its first argument is the same as FD.
+
+   If successful, return the buffer address; otherwise return NULL and
+   set errno.  */
+
+char *
+careadlinkat (int fd, char const *filename,
+              char *buffer, size_t buffer_size,
+              struct allocator const *alloc,
+              ssize_t (*preadlinkat) (int, char const *, char *, size_t))
+{
+  char *buf;
+  size_t buf_size;
+  size_t buf_size_max =
+    SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
+  char stack_buf[1024];
+
+  if (! alloc)
+    alloc = &stdlib_allocator;
+
+  if (! buffer_size)
+    {
+      /* Allocate the initial buffer on the stack.  This way, in the
+         common case of a symlink of small size, we get away with a
+         single small malloc() instead of a big malloc() followed by a
+         shrinking realloc().  */
+      buffer = stack_buf;
+      buffer_size = sizeof stack_buf;
+    }
+
+  buf = buffer;
+  buf_size = buffer_size;
+
+  do
+    {
+      /* Attempt to read the link into the current buffer.  */
+      ssize_t link_length = preadlinkat (fd, filename, buf, buf_size);
+      size_t link_size;
+      if (link_length < 0)
+        {
+          /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1
+             with errno == ERANGE if the buffer is too small.  */
+          int readlinkat_errno = errno;
+          if (readlinkat_errno != ERANGE)
+            {
+              if (buf != buffer)
+                {
+                  alloc->free (buf);
+                  errno = readlinkat_errno;
+                }
+              return NULL;
+            }
+        }
+
+      link_size = link_length;
+
+      if (link_size < buf_size)
+        {
+          buf[link_size++] = '\0';
+
+          if (buf == stack_buf)
+            {
+              char *b = (char *) alloc->allocate (link_size);
+              buf_size = link_size;
+              if (! b)
+                break;
+              memcpy (b, buf, link_size);
+              buf = b;
+            }
+          else if (link_size < buf_size && buf != buffer && alloc->reallocate)
+            {
+              /* Shrink BUF before returning it.  */
+              char *b = (char *) alloc->reallocate (buf, link_size);
+              if (b)
+                buf = b;
+            }
+
+          return buf;
+        }
+
+      if (buf != buffer)
+        alloc->free (buf);
+
+      if (buf_size <= buf_size_max / 2)
+        buf_size *= 2;
+      else if (buf_size < buf_size_max)
+        buf_size = buf_size_max;
+      else if (buf_size_max < SIZE_MAX)
+        {
+          errno = ENAMETOOLONG;
+          return NULL;
+        }
+      else
+        break;
+      buf = (char *) alloc->allocate (buf_size);
+    }
+  while (buf);
+
+  if (alloc->die)
+    alloc->die (buf_size);
+  errno = ENOMEM;
+  return NULL;
+}
diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h
new file mode 100644
index 0000000..3c08fd6
--- /dev/null
+++ b/lib/careadlinkat.h
@@ -0,0 +1,67 @@
+/* Read symbolic links into a buffer without size limitation, relative to fd.
+
+   Copyright (C) 2011-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#ifndef _GL_CAREADLINKAT_H
+#define _GL_CAREADLINKAT_H
+
+#include <fcntl.h>
+#include <unistd.h>
+
+struct allocator;
+
+/* Assuming the current directory is FD, get the symbolic link value
+   of FILENAME as a null-terminated string and put it into a buffer.
+   If FD is AT_FDCWD, FILENAME is interpreted relative to the current
+   working directory, as in openat.
+
+   If the link is small enough to fit into BUFFER put it there.
+   BUFFER's size is BUFFER_SIZE, and BUFFER can be null
+   if BUFFER_SIZE is zero.
+
+   If the link is not small, put it into a dynamically allocated
+   buffer managed by ALLOC.  It is the caller's responsibility to free
+   the returned value if it is nonnull and is not BUFFER.
+
+   The PREADLINKAT function specifies how to read links.  It operates
+   like POSIX readlinkat()
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
+   but can assume that its first argument is the same as FD.
+
+   If successful, return the buffer address; otherwise return NULL and
+   set errno.  */
+
+char *careadlinkat (int fd, char const *filename,
+                    char *buffer, size_t buffer_size,
+                    struct allocator const *alloc,
+                    ssize_t (*preadlinkat) (int, char const *,
+                                            char *, size_t));
+
+/* Suitable value for careadlinkat's FD argument.  */
+#if HAVE_READLINKAT
+/* AT_FDCWD is declared in <fcntl.h>.  */
+#else
+/* Define AT_FDCWD independently, so that the careadlinkat module does
+   not depend on the fcntl-h module.  We might as well use the same value
+   as fcntl-h.  */
+# ifndef AT_FDCWD
+#  define AT_FDCWD (-3041965)
+# endif
+#endif
+
+#endif /* _GL_CAREADLINKAT_H */
diff --git a/lib/cdefs.h b/lib/cdefs.h
new file mode 100644
index 0000000..96d2616
--- /dev/null
+++ b/lib/cdefs.h
@@ -0,0 +1,514 @@
+/* Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef	_SYS_CDEFS_H
+#define	_SYS_CDEFS_H	1
+
+/* We are almost always included from features.h. */
+#ifndef _FEATURES_H
+# include <features.h>
+#endif
+
+/* The GNU libc does not support any K&R compilers or the traditional mode
+   of ISO C compilers anymore.  Check for some of the combinations not
+   anymore supported.  */
+#if defined __GNUC__ && !defined __STDC__
+# error "You need a ISO C conforming compiler to use the glibc headers"
+#endif
+
+/* Some user header file might have defined this before.  */
+#undef	__P
+#undef	__PMT
+
+#ifdef __GNUC__
+
+/* All functions, except those with callbacks or those that
+   synchronize memory, are leaf functions.  */
+# if __GNUC_PREREQ (4, 6) && !defined _LIBC
+#  define __LEAF , __leaf__
+#  define __LEAF_ATTR __attribute__ ((__leaf__))
+# else
+#  define __LEAF
+#  define __LEAF_ATTR
+# endif
+
+/* GCC can always grok prototypes.  For C++ programs we add throw()
+   to help it optimize the function calls.  But this works only with
+   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
+   as non-throwing using a function attribute since programs can use
+   the -fexceptions options for C code as well.  */
+# if !defined __cplusplus && __GNUC_PREREQ (3, 3)
+#  define __THROW	__attribute__ ((__nothrow__ __LEAF))
+#  define __THROWNL	__attribute__ ((__nothrow__))
+#  define __NTH(fct)	__attribute__ ((__nothrow__ __LEAF)) fct
+#  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
+# else
+#  if defined __cplusplus && __GNUC_PREREQ (2,8)
+#   define __THROW	throw ()
+#   define __THROWNL	throw ()
+#   define __NTH(fct)	__LEAF_ATTR fct throw ()
+#   define __NTHNL(fct) fct throw ()
+#  else
+#   define __THROW
+#   define __THROWNL
+#   define __NTH(fct)	fct
+#   define __NTHNL(fct) fct
+#  endif
+# endif
+
+#else	/* Not GCC.  */
+
+# if (defined __cplusplus						\
+      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+#  define __inline	inline
+# else
+#  define __inline		/* No inline functions.  */
+# endif
+
+# define __THROW
+# define __THROWNL
+# define __NTH(fct)	fct
+
+#endif	/* GCC.  */
+
+/* Compilers that are not clang may object to
+       #if defined __clang__ && __has_extension(...)
+   even though they do not need to evaluate the right-hand side of the &&.  */
+#if defined __clang__ && defined __has_extension
+# define __glibc_clang_has_extension(ext) __has_extension (ext)
+#else
+# define __glibc_clang_has_extension(ext) 0
+#endif
+
+/* These two macros are not used in glibc anymore.  They are kept here
+   only because some other projects expect the macros to be defined.  */
+#define __P(args)	args
+#define __PMT(args)	args
+
+/* For these things, GCC behaves the ANSI way normally,
+   and the non-ANSI way under -traditional.  */
+
+#define __CONCAT(x,y)	x ## y
+#define __STRING(x)	#x
+
+/* This is not a typedef so `const __ptr_t' does the right thing.  */
+#define __ptr_t void *
+
+
+/* C++ needs to know that types and declarations are C, not C++.  */
+#ifdef	__cplusplus
+# define __BEGIN_DECLS	extern "C" {
+# define __END_DECLS	}
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+
+/* Fortify support.  */
+#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+#define __bos0(ptr) __builtin_object_size (ptr, 0)
+
+#if __GNUC_PREREQ (4,3)
+# define __warndecl(name, msg) \
+  extern void name (void) __attribute__((__warning__ (msg)))
+# define __warnattr(msg) __attribute__((__warning__ (msg)))
+# define __errordecl(name, msg) \
+  extern void name (void) __attribute__((__error__ (msg)))
+#else
+# define __warndecl(name, msg) extern void name (void)
+# define __warnattr(msg)
+# define __errordecl(name, msg) extern void name (void)
+#endif
+
+/* Support for flexible arrays.
+   Headers that should use flexible arrays only if they're "real"
+   (e.g. only if they won't affect sizeof()) should test
+   #if __glibc_c99_flexarr_available.  */
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
+# define __flexarr	[]
+# define __glibc_c99_flexarr_available 1
+#elif __GNUC_PREREQ (2,97)
+/* GCC 2.97 supports C99 flexible array members as an extension,
+   even when in C89 mode or compiling C++ (any version).  */
+# define __flexarr	[]
+# define __glibc_c99_flexarr_available 1
+#elif defined __GNUC__
+/* Pre-2.97 GCC did not support C99 flexible arrays but did have
+   an equivalent extension with slightly different notation.  */
+# define __flexarr	[0]
+# define __glibc_c99_flexarr_available 1
+#else
+/* Some other non-C99 compiler.  Approximate with [1].  */
+# define __flexarr	[1]
+# define __glibc_c99_flexarr_available 0
+#endif
+
+
+/* __asm__ ("xyz") is used throughout the headers to rename functions
+   at the assembly language level.  This is wrapped by the __REDIRECT
+   macro, in order to support compilers that can do this some other
+   way.  When compilers don't support asm-names at all, we have to do
+   preprocessor tricks instead (which don't have exactly the right
+   semantics, but it's the best we can do).
+
+   Example:
+   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
+
+#if defined __GNUC__ && __GNUC__ >= 2
+
+# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
+# ifdef __cplusplus
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __THROW __asm__ (__ASMNAME (#alias))
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __THROWNL __asm__ (__ASMNAME (#alias))
+# else
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROW
+#  define __REDIRECT_NTHNL(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROWNL
+# endif
+# define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
+
+/*
+#elif __SOME_OTHER_COMPILER__
+
+# define __REDIRECT(name, proto, alias) name proto; \
+	_Pragma("let " #name " = " #alias)
+*/
+#endif
+
+/* GCC has various useful declarations that can be made with the
+   `__attribute__' syntax.  All of the ways we use this do fine if
+   they are omitted for compilers that don't understand it. */
+#if !defined __GNUC__ || __GNUC__ < 2
+# define __attribute__(xyz)	/* Ignore */
+#endif
+
+/* At some point during the gcc 2.96 development the `malloc' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_malloc__ __attribute__ ((__malloc__))
+#else
+# define __attribute_malloc__ /* Ignore */
+#endif
+
+/* Tell the compiler which arguments to an allocation function
+   indicate the size of the allocation.  */
+#if __GNUC_PREREQ (4, 3)
+# define __attribute_alloc_size__(params) \
+  __attribute__ ((__alloc_size__ params))
+#else
+# define __attribute_alloc_size__(params) /* Ignore.  */
+#endif
+
+/* At some point during the gcc 2.96 development the `pure' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_pure__ __attribute__ ((__pure__))
+#else
+# define __attribute_pure__ /* Ignore */
+#endif
+
+/* This declaration tells the compiler that the value is constant.  */
+#if __GNUC_PREREQ (2,5)
+# define __attribute_const__ __attribute__ ((__const__))
+#else
+# define __attribute_const__ /* Ignore */
+#endif
+
+/* At some point during the gcc 3.1 development the `used' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (3,1)
+# define __attribute_used__ __attribute__ ((__used__))
+# define __attribute_noinline__ __attribute__ ((__noinline__))
+#else
+# define __attribute_used__ __attribute__ ((__unused__))
+# define __attribute_noinline__ /* Ignore */
+#endif
+
+/* Since version 3.2, gcc allows marking deprecated functions.  */
+#if __GNUC_PREREQ (3,2)
+# define __attribute_deprecated__ __attribute__ ((__deprecated__))
+#else
+# define __attribute_deprecated__ /* Ignore */
+#endif
+
+/* Since version 4.5, gcc also allows one to specify the message printed
+   when a deprecated function is used.  clang claims to be gcc 4.2, but
+   may also support this feature.  */
+#if __GNUC_PREREQ (4,5) || \
+    __glibc_clang_has_extension (__attribute_deprecated_with_message__)
+# define __attribute_deprecated_msg__(msg) \
+	 __attribute__ ((__deprecated__ (msg)))
+#else
+# define __attribute_deprecated_msg__(msg) __attribute_deprecated__
+#endif
+
+/* At some point during the gcc 2.8 development the `format_arg' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.
+   If several `format_arg' attributes are given for the same function, in
+   gcc-3.0 and older, all but the last one are ignored.  In newer gccs,
+   all designated arguments are considered.  */
+#if __GNUC_PREREQ (2,8)
+# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
+#else
+# define __attribute_format_arg__(x) /* Ignore */
+#endif
+
+/* At some point during the gcc 2.97 development the `strfmon' format
+   attribute for functions was introduced.  We don't want to use it
+   unconditionally (although this would be possible) since it
+   generates warnings.  */
+#if __GNUC_PREREQ (2,97)
+# define __attribute_format_strfmon__(a,b) \
+  __attribute__ ((__format__ (__strfmon__, a, b)))
+#else
+# define __attribute_format_strfmon__(a,b) /* Ignore */
+#endif
+
+/* The nonnull function attribute marks pointer parameters that
+   must not be NULL.  Do not define __nonnull if it is already defined,
+   for portability when this file is used in Gnulib.  */
+#ifndef __nonnull
+# if __GNUC_PREREQ (3,3)
+#  define __nonnull(params) __attribute__ ((__nonnull__ params))
+# else
+#  define __nonnull(params)
+# endif
+#endif
+
+/* If fortification mode, we warn about unused results of certain
+   function calls which can lead to problems.  */
+#if __GNUC_PREREQ (3,4)
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
+#  define __wur __attribute_warn_unused_result__
+# endif
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+#ifndef __wur
+# define __wur /* Ignore */
+#endif
+
+/* Forces a function to be always inlined.  */
+#if __GNUC_PREREQ (3,2)
+/* The Linux kernel defines __always_inline in stddef.h (283d7573), and
+   it conflicts with this definition.  Therefore undefine it first to
+   allow either header to be included first.  */
+# undef __always_inline
+# define __always_inline __inline __attribute__ ((__always_inline__))
+#else
+# undef __always_inline
+# define __always_inline __inline
+#endif
+
+/* Associate error messages with the source location of the call site rather
+   than with the source location inside the function.  */
+#if __GNUC_PREREQ (4,3)
+# define __attribute_artificial__ __attribute__ ((__artificial__))
+#else
+# define __attribute_artificial__ /* Ignore */
+#endif
+
+/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__
+   or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
+   older than 4.3 may define these macros and still not guarantee GNU inlining
+   semantics.
+
+   clang++ identifies itself as gcc-4.2, but has support for GNU inlining
+   semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
+   __GNUC_GNU_INLINE__ macro definitions.  */
+#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
+     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
+			       || defined __GNUC_GNU_INLINE__)))
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+#  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+#  define __extern_always_inline \
+  extern __always_inline __attribute__ ((__gnu_inline__))
+# else
+#  define __extern_inline extern __inline
+#  define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+#ifdef __extern_always_inline
+# define __fortify_function __extern_always_inline __attribute_artificial__
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+   __extern_always_inline function to some other vararg function.  */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
+# define __va_arg_pack_len() __builtin_va_arg_pack_len ()
+#endif
+
+/* It is possible to compile containing GCC extensions even if GCC is
+   run in pedantic mode if the uses are carefully marked using the
+   `__extension__' keyword.  But this is not generally available before
+   version 2.8.  */
+#if !__GNUC_PREREQ (2,8)
+# define __extension__		/* Ignore */
+#endif
+
+/* __restrict is known in EGCS 1.2 and above. */
+#if !__GNUC_PREREQ (2,92)
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#  define __restrict	restrict
+# else
+#  define __restrict	/* Ignore */
+# endif
+#endif
+
+/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
+     array_name[restrict]
+   GCC 3.1 supports this.  */
+#if __GNUC_PREREQ (3,1) && !defined __GNUG__
+# define __restrict_arr	__restrict
+#else
+# ifdef __GNUC__
+#  define __restrict_arr	/* Not supported in old GCC.  */
+# else
+#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#   define __restrict_arr	restrict
+#  else
+/* Some other non-C99 compiler.  */
+#   define __restrict_arr	/* Not supported.  */
+#  endif
+# endif
+#endif
+
+#if __GNUC__ >= 3
+# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0)
+# define __glibc_likely(cond)	__builtin_expect ((cond), 1)
+#else
+# define __glibc_unlikely(cond)	(cond)
+# define __glibc_likely(cond)	(cond)
+#endif
+
+#ifdef __has_attribute
+# define __glibc_has_attribute(attr)	__has_attribute (attr)
+#else
+# define __glibc_has_attribute(attr)	0
+#endif
+
+#if (!defined _Noreturn \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     &&  !__GNUC_PREREQ (4,7))
+# if __GNUC_PREREQ (2,8)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# else
+#  define _Noreturn
+# endif
+#endif
+
+#if __GNUC_PREREQ (8, 0)
+/* Describes a char array whose address can safely be passed as the first
+   argument to strncpy and strncat, as the char array is not necessarily
+   a NUL-terminated string.  */
+# define __attribute_nonstring__ __attribute__ ((__nonstring__))
+#else
+# define __attribute_nonstring__
+#endif
+
+#if (!defined _Static_assert && !defined __cplusplus \
+     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+     && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))
+# define _Static_assert(expr, diagnostic) \
+    extern int (*__Static_assert_function (void)) \
+      [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
+#endif
+
+/* The #ifndef lets Gnulib avoid including these on non-glibc
+   platforms, where the includes typically do not exist.  */
+#ifndef __WORDSIZE
+# include <bits/wordsize.h>
+# include <bits/long-double.h>
+#endif
+
+#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+# define __LDBL_COMPAT 1
+# ifdef __REDIRECT
+#  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __LDBL_REDIR(name, proto) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
+#  define __LDBL_REDIR_NTH(name, proto) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
+#  define __LDBL_REDIR1_DECL(name, alias) \
+  extern __typeof (name) name __asm (__ASMNAME (#alias));
+#  define __LDBL_REDIR_DECL(name) \
+  extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
+#  define __REDIRECT_LDBL(name, proto, alias) \
+  __LDBL_REDIR1 (name, proto, __nldbl_##alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
+# endif
+#endif
+#if !defined __LDBL_COMPAT || !defined __REDIRECT
+# define __LDBL_REDIR1(name, proto, alias) name proto
+# define __LDBL_REDIR(name, proto) name proto
+# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
+# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
+# define __LDBL_REDIR_DECL(name)
+# ifdef __REDIRECT
+#  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __REDIRECT_NTH_LDBL(name, proto, alias) \
+  __REDIRECT_NTH (name, proto, alias)
+# endif
+#endif
+
+/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE.  This is
+   intended for use in preprocessor macros.
+
+   Note: MESSAGE must be a _single_ string; concatenation of string
+   literals is not supported.  */
+#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
+# define __glibc_macro_warning1(message) _Pragma (#message)
+# define __glibc_macro_warning(message) \
+  __glibc_macro_warning1 (GCC warning message)
+#else
+# define __glibc_macro_warning(msg)
+#endif
+
+/* Generic selection (ISO C11) is a C-only feature, available in GCC
+   since version 4.9.  Previous versions do not provide generic
+   selection, even though they might set __STDC_VERSION__ to 201112L,
+   when in -std=c11 mode.  Thus, we must check for !defined __GNUC__
+   when testing __STDC_VERSION__ for generic selection support.
+   On the other hand, Clang also defines __GNUC__, so a clang-specific
+   check is required to enable the use of generic selection.  */
+#if !defined __cplusplus \
+    && (__GNUC_PREREQ (4, 9) \
+	|| __glibc_clang_has_extension (c_generic_selections) \
+	|| (!defined __GNUC__ && defined __STDC_VERSION__ \
+	    && __STDC_VERSION__ >= 201112L))
+# define __HAVE_GENERIC_SELECTION 1
+#else
+# define __HAVE_GENERIC_SELECTION 0
+#endif
+
+#endif	 /* sys/cdefs.h */
diff --git a/lib/cloexec.c b/lib/cloexec.c
index 7919e86..db42576 100644
--- a/lib/cloexec.c
+++ b/lib/cloexec.c
@@ -1,6 +1,6 @@
-/* closexec.c - set or clear the close-on-exec descriptor flag
+/* cloexec.c - set or clear the close-on-exec descriptor flag
 
-   Copyright (C) 1991, 2004-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1991, 2004-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
    The code is taken from glibc/manual/llio.texi  */
 
diff --git a/lib/cloexec.h b/lib/cloexec.h
index 92e9f81..06ad945 100644
--- a/lib/cloexec.h
+++ b/lib/cloexec.h
@@ -1,6 +1,6 @@
-/* closexec.c - set or clear the close-on-exec descriptor flag
+/* cloexec.c - set or clear the close-on-exec descriptor flag
 
-   Copyright (C) 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 */
 
diff --git a/lib/close-stream.c b/lib/close-stream.c
index 04fa5ec..5458c4f 100644
--- a/lib/close-stream.c
+++ b/lib/close-stream.c
@@ -1,6 +1,6 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 1998-2002, 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/close.c b/lib/close.c
index 4b7accb..40ce845 100644
--- a/lib/close.c
+++ b/lib/close.c
@@ -1,5 +1,5 @@
 /* close replacement.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -22,7 +22,9 @@
 #include <errno.h>
 
 #include "fd-hook.h"
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef close
 
diff --git a/lib/closeout.c b/lib/closeout.c
index eea4024..4a604ec 100644
--- a/lib/closeout.c
+++ b/lib/closeout.c
@@ -1,6 +1,6 @@
 /* Close standard output and standard error, exiting with a diagnostic on error.
 
-   Copyright (C) 1998-2002, 2004, 2006, 2008-2012 Free Software Foundation,
+   Copyright (C) 1998-2002, 2004, 2006, 2008-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -33,6 +33,16 @@
 #include "exitfail.h"
 #include "quotearg.h"
 
+#ifndef __has_feature
+# define __has_feature(a) false
+#endif
+
+#if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer)
+enum { SANITIZE_ADDRESS = true };
+#else
+enum { SANITIZE_ADDRESS = false };
+#endif
+
 static const char *file_name;
 
 /* Set the file name to be reported in the event an error is detected
@@ -119,6 +129,8 @@
       _exit (exit_failure);
     }
 
-   if (close_stream (stderr) != 0)
-     _exit (exit_failure);
+  /* Close stderr only if not sanitizing, as sanitizers may report to
+     stderr after this function returns.  */
+  if (!SANITIZE_ADDRESS && close_stream (stderr) != 0)
+    _exit (exit_failure);
 }
diff --git a/lib/closeout.h b/lib/closeout.h
index 5310b28..ac89f76 100644
--- a/lib/closeout.h
+++ b/lib/closeout.h
@@ -1,6 +1,6 @@
 /* Close standard output and standard error.
 
-   Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2012 Free Software
+   Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef CLOSEOUT_H
 # define CLOSEOUT_H 1
diff --git a/lib/concat-filename.c b/lib/concat-filename.c
new file mode 100644
index 0000000..df0e170
--- /dev/null
+++ b/lib/concat-filename.c
@@ -0,0 +1,73 @@
+/* Construct a full filename from a directory and a relative filename.
+   Copyright (C) 2001-2004, 2006-2019 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 any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <haible@clisp.cons.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "concat-filename.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "filename.h"
+
+/* Concatenate a directory filename, a relative filename and an optional
+   suffix.  The directory may end with the directory separator.  The second
+   argument may not start with the directory separator (it is relative).
+   Return a freshly allocated filename.  Return NULL and set errno
+   upon memory allocation failure.  */
+char *
+concatenated_filename (const char *directory, const char *filename,
+                       const char *suffix)
+{
+  char *result;
+  char *p;
+
+  if (strcmp (directory, ".") == 0)
+    {
+      /* No need to prepend the directory.  */
+      result = (char *) malloc (strlen (filename)
+                                + (suffix != NULL ? strlen (suffix) : 0)
+                                + 1);
+      if (result == NULL)
+        return NULL; /* errno is set here */
+      p = result;
+    }
+  else
+    {
+      size_t directory_len = strlen (directory);
+      int need_slash =
+        (directory_len > FILE_SYSTEM_PREFIX_LEN (directory)
+         && !ISSLASH (directory[directory_len - 1]));
+      result = (char *) malloc (directory_len + need_slash
+                                + strlen (filename)
+                                + (suffix != NULL ? strlen (suffix) : 0)
+                                + 1);
+      if (result == NULL)
+        return NULL; /* errno is set here */
+      memcpy (result, directory, directory_len);
+      p = result + directory_len;
+      if (need_slash)
+        *p++ = '/';
+    }
+  p = stpcpy (p, filename);
+  if (suffix != NULL)
+    stpcpy (p, suffix);
+  return result;
+}
diff --git a/lib/concat-filename.h b/lib/concat-filename.h
new file mode 100644
index 0000000..4448b78
--- /dev/null
+++ b/lib/concat-filename.h
@@ -0,0 +1,41 @@
+/* Construct a full filename from a directory and a relative filename.
+   Copyright (C) 2001-2004, 2007-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _CONCAT_FILENAME_H
+#define _CONCAT_FILENAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Concatenate a directory filename, a relative filename and an optional
+   suffix.  Return a freshly allocated filename.  Return NULL and set errno
+   upon memory allocation failure.  */
+extern char *concatenated_filename (const char *directory,
+                                    const char *filename, const char *suffix);
+
+/* Concatenate a directory filename, a relative filename and an optional
+   suffix.  Return a freshly allocated filename.  */
+extern char *xconcatenated_filename (const char *directory,
+                                     const char *filename, const char *suffix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONCAT_FILENAME_H */
diff --git a/lib/config.charset b/lib/config.charset
deleted file mode 100644
index 0a3b343..0000000
--- a/lib/config.charset
+++ /dev/null
@@ -1,684 +0,0 @@
-#! /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
index 31bb0c5..9c8539e 100644
--- a/lib/config.in.h
+++ b/lib/config.in.h
@@ -30,6 +30,9 @@
 /* Define to 1 if using `alloca.c'. */
 #undef C_ALLOCA
 
+/* Define to 1 if the C locale may have encoding errors. */
+#undef C_LOCALE_MAYBE_EILSEQ
+
 /* Define as the bit index in the word where to find bit 0 of the exponent of
    'double'. */
 #undef DBL_EXPBIT0_BIT
@@ -50,6 +53,9 @@
    language is requested. */
 #undef ENABLE_NLS
 
+/* Define to 1 if the package shall run at any location in the file system. */
+#undef ENABLE_RELOCATABLE
+
 /* Define this to 1 if F_DUPFD behavior does not match POSIX */
 #undef FCNTL_DUPFD_BUGGY
 
@@ -69,6 +75,21 @@
 /* Define to 1 if fopen() fails to recognize a trailing slash. */
 #undef FOPEN_TRAILING_SLASH_BUG
 
+/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
+   and handles trailing slash correctly. */
+#undef FUNC_REALPATH_WORKS
+
+/* Define if gettimeofday clobbers the localtime buffer. */
+#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME
+
+/* Define this to 'void' or 'struct timezone' to match the system's
+   declaration of the second argument to gettimeofday. */
+#undef GETTIMEOFDAY_TIMEZONE
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module canonicalize-lgpl shall be considered present. */
+#undef GNULIB_CANONICALIZE_LGPL
+
 /* 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
@@ -90,13 +111,25 @@
 #undef GNULIB_FSCANF
 
 /* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module lock shall be considered present. */
+#undef GNULIB_LOCK
+
+/* 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 msvc-nothrow shall be considered present. */
+#undef GNULIB_MSVC_NOTHROW
+
+/* 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 1 if printf and friends should be labeled with attribute
+   "__gnu_printf__" instead of "__printf__" */
+#undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+
 /* 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
@@ -109,9 +142,20 @@
    whether the gnulib module strerror shall be considered present. */
 #undef GNULIB_STRERROR
 
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module strerror_r-posix shall be considered present. */
+#undef GNULIB_STRERROR_R_POSIX
+
 /* Define to 1 when the gnulib module calloc-posix should be tested. */
 #undef GNULIB_TEST_CALLOC_POSIX
 
+/* Define to 1 when the gnulib module canonicalize_file_name should be tested.
+   */
+#undef GNULIB_TEST_CANONICALIZE_FILE_NAME
+
+/* Define to 1 when the gnulib module chdir should be tested. */
+#undef GNULIB_TEST_CHDIR
+
 /* Define to 1 when the gnulib module cloexec should be tested. */
 #undef GNULIB_TEST_CLOEXEC
 
@@ -142,17 +186,17 @@
 /* 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 fsync should be tested. */
+#undef GNULIB_TEST_FSYNC
 
 /* 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 getrusage should be tested. */
+#undef GNULIB_TEST_GETRUSAGE
 
-/* Define to 1 when the gnulib module getopt-gnu should be tested. */
-#undef GNULIB_TEST_GETOPT_GNU
+/* Define to 1 when the gnulib module gettimeofday should be tested. */
+#undef GNULIB_TEST_GETTIMEOFDAY
 
 /* Define to 1 when the gnulib module isnan should be tested. */
 #undef GNULIB_TEST_ISNAN
@@ -172,21 +216,18 @@
 /* Define to 1 when the gnulib module ldexpl should be tested. */
 #undef GNULIB_TEST_LDEXPL
 
+/* Define to 1 when the gnulib module lstat should be tested. */
+#undef GNULIB_TEST_LSTAT
+
 /* 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
 
@@ -250,9 +291,21 @@
 /* Define to 1 when the gnulib module rawmemchr should be tested. */
 #undef GNULIB_TEST_RAWMEMCHR
 
+/* Define to 1 when the gnulib module readlink should be tested. */
+#undef GNULIB_TEST_READLINK
+
 /* Define to 1 when the gnulib module realloc-posix should be tested. */
 #undef GNULIB_TEST_REALLOC_POSIX
 
+/* Define to 1 when the gnulib module realpath should be tested. */
+#undef GNULIB_TEST_REALPATH
+
+/* Define to 1 when the gnulib module rename should be tested. */
+#undef GNULIB_TEST_RENAME
+
+/* Define to 1 when the gnulib module rmdir should be tested. */
+#undef GNULIB_TEST_RMDIR
+
 /* Define to 1 when the gnulib module sigaction should be tested. */
 #undef GNULIB_TEST_SIGACTION
 
@@ -295,9 +348,15 @@
 /* Define to 1 when the gnulib module strverscmp should be tested. */
 #undef GNULIB_TEST_STRVERSCMP
 
+/* Define to 1 when the gnulib module unlink should be tested. */
+#undef GNULIB_TEST_UNLINK
+
 /* Define to 1 when the gnulib module unsetenv should be tested. */
 #undef GNULIB_TEST_UNSETENV
 
+/* Define to 1 when the gnulib module vasprintf should be tested. */
+#undef GNULIB_TEST_VASPRINTF
+
 /* Define to 1 when the gnulib module vfprintf-posix should be tested. */
 #undef GNULIB_TEST_VFPRINTF_POSIX
 
@@ -313,8 +372,8 @@
 /* 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 if your system defines TIOCGWINSZ in sys/ioctl.h. */
+#undef GWINSZ_IN_SYS_IOCTL
 
 /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
    may be supplied by this distribution. */
@@ -324,12 +383,18 @@
    */
 #undef HAVE_ALLOCA_H
 
+/* Define if you have an arithmetic hrtime_t type. */
+#undef HAVE_ARITHMETIC_HRTIME_T
+
 /* 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 `canonicalize_file_name' function. */
+#undef HAVE_CANONICALIZE_FILE_NAME
+
 /* Define to 1 if you have the `catgets' function. */
 #undef HAVE_CATGETS
 
@@ -341,8 +406,11 @@
    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 `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `clock_settime' function. */
+#undef HAVE_CLOCK_SETTIME
 
 /* Define to 1 if you have the `confstr' function. */
 #undef HAVE_CONFSTR
@@ -359,18 +427,24 @@
    libc. */
 #undef HAVE_COPYSIGN_IN_LIBC
 
+/* Define to 1 if you have the `copy_file_range' function. */
+#undef HAVE_COPY_FILE_RANGE
+
+/* Define to 1 if you have the <crtdefs.h> header file. */
+#undef HAVE_CRTDEFS_H
+
 /* Define if the GNU dcgettext() function is already present or preinstalled.
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ALARM
+
 /* 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
@@ -423,21 +497,13 @@
    don't. */
 #undef HAVE_DECL_GETC_UNLOCKED
 
-/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
+/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you
    don't. */
-#undef HAVE_DECL_GETDELIM
+#undef HAVE_DECL_GETDTABLESIZE
 
-/* 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
+/* Define to 1 if you have the declaration of `gethrtime', 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
+#undef HAVE_DECL_GETHRTIME
 
 /* Define to 1 if you have the declaration of `iswblank', and to 0 if you
    don't. */
@@ -475,6 +541,10 @@
    don't. */
 #undef HAVE_DECL_PUTC_UNLOCKED
 
+/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SETENV
+
 /* Define to 1 if you have the declaration of `snprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_SNPRINTF
@@ -495,14 +565,6 @@
    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
@@ -523,6 +585,10 @@
    don't. */
 #undef HAVE_DECL__SNPRINTF
 
+/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't.
+   */
+#undef HAVE_DECL___ARGV
+
 /* Define to 1 if you have the declaration of `__fpending', and to 0 if you
    don't. */
 #undef HAVE_DECL___FPENDING
@@ -539,33 +605,42 @@
 /* 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 `fsync' function. */
+#undef HAVE_FSYNC
 
-/* Define to 1 if you have the `getdelim' function. */
-#undef HAVE_GETDELIM
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
 
 /* Define to 1 if you have the `getdtablesize' function. */
 #undef HAVE_GETDTABLESIZE
 
+/* Define to 1 if you have the `getexecname' function. */
+#undef HAVE_GETEXECNAME
+
 /* 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 to 1 if you have the `getprogname' function. */
+#undef HAVE_GETPROGNAME
+
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
 /* Define if you have the iconv() function and it works. */
 #undef HAVE_ICONV
 
@@ -609,6 +684,15 @@
 /* Define if the ldexp function is available in libc. */
 #undef HAVE_LDEXP_IN_LIBC
 
+/* Define if you have the libtextstyle library. */
+#undef HAVE_LIBTEXTSTYLE
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the `link' function. */
+#undef HAVE_LINK
+
 /* Define to 1 if you have the <locale.h> header file. */
 #undef HAVE_LOCALE_H
 
@@ -618,6 +702,9 @@
 /* Define to 1 if you have the `lstat' function. */
 #undef HAVE_LSTAT
 
+/* Define to 1 if you have the <mach-o/dyld.h> header file. */
+#undef HAVE_MACH_O_DYLD_H
+
 /* Define to 1 if your system has a GNU libc compatible 'malloc' function, and
    to 0 otherwise. */
 #undef HAVE_MALLOC_GNU
@@ -644,6 +731,15 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
+/* Define to 1 if you have the `microuptime' function. */
+#undef HAVE_MICROUPTIME
+
+/* Define to 1 if <limits.h> defines the MIN and MAX macros. */
+#undef HAVE_MINMAX_IN_LIMITS_H
+
+/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */
+#undef HAVE_MINMAX_IN_SYS_PARAM_H
+
 /* Define to 1 if you have the `mprotect' function. */
 #undef HAVE_MPROTECT
 
@@ -651,10 +747,13 @@
    concept. */
 #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER
 
+/* Define to 1 if you have the `nanouptime' function. */
+#undef HAVE_NANOUPTIME
+
 /* Define to 1 if you have the `nl_langinfo' function. */
 #undef HAVE_NL_LANGINFO
 
-/* Define to 1 if libc includes obstacks. */
+/* Define to 1 if the system has obstacks that work with any size object. */
 #undef HAVE_OBSTACK
 
 /* Define to 1 if you have the `obstack_printf' function. */
@@ -684,890 +783,28 @@
 /* Define if the POSIX multithreading library has read/write locks. */
 #undef HAVE_PTHREAD_RWLOCK
 
+/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a
+   reader. */
+#undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+
 /* 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 you have the `readlink' function. */
+#undef HAVE_READLINK
 
-/* 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 to 1 if you have the `readlinkat' function. */
+#undef HAVE_READLINKAT
 
 /* Define if the 'realloc' function is POSIX compliant. */
 #undef HAVE_REALLOC_POSIX
 
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
 /* Define to 1 if 'long double' and 'double' have the same representation. */
 #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
 
@@ -1580,9 +817,18 @@
 /* Define to 1 if you have the `sched_setscheduler' function. */
 #undef HAVE_SCHED_SETSCHEDULER
 
+/* Define to 1 if you have the <search.h> header file. */
+#undef HAVE_SEARCH_H
+
+/* Define to 1 if you have the `setdtablesize' function. */
+#undef HAVE_SETDTABLESIZE
+
 /* Define to 1 if you have the `setegid' function. */
 #undef HAVE_SETEGID
 
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
 /* Define to 1 if you have the `seteuid' function. */
 #undef HAVE_SETEUID
 
@@ -1664,12 +910,30 @@
 /* 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 `st_atimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+
+/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+
+/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+
+/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC
+
 /* Define to 1 if the system has the type `struct tms'. */
 #undef HAVE_STRUCT_TMS
 
@@ -1682,6 +946,9 @@
 /* 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/cdefs.h> header file. */
+#undef HAVE_SYS_CDEFS_H
+
 /* Define to 1 if you have the <sys/inttypes.h> header file. */
 #undef HAVE_SYS_INTTYPES_H
 
@@ -1712,12 +979,18 @@
 /* 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 `tcdrain' function. */
+#undef HAVE_TCDRAIN
+
+/* Define to 1 if you have the <threads.h> header file. */
+#undef HAVE_THREADS_H
 
 /* Define to 1 if you have the `towlower' function. */
 #undef HAVE_TOWLOWER
 
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
@@ -1727,9 +1000,15 @@
 /* Define to 1 if the system has the type 'unsigned long long int'. */
 #undef HAVE_UNSIGNED_LONG_LONG_INT
 
+/* Define if you have a global __progname variable */
+#undef HAVE_VAR___PROGNAME
+
 /* Define to 1 if you have the `vasnprintf' function. */
 #undef HAVE_VASNPRINTF
 
+/* Define to 1 if you have the `vasprintf' function. */
+#undef HAVE_VASPRINTF
+
 /* Define to 1 if you have the `vfork' function. */
 #undef HAVE_VFORK
 
@@ -1772,25 +1051,27 @@
 /* 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 `_NSGetExecutablePath' function. */
+#undef HAVE__NSGETEXECUTABLEPATH
+
 /* 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 the compiler supports the keyword '__inline'. */
+#undef HAVE___INLINE
+
 /* Define to 1 if you have the `__xpg_strerror_r' function. */
 #undef HAVE___XPG_STRERROR_R
 
+/* Define to the value of ${prefix}, as a string. */
+#undef INSTALLPREFIX
+
 /* Define as the bit index in the word where to find bit 0 of the exponent of
    'long double'. */
 #undef LDBL_EXPBIT0_BIT
@@ -1805,15 +1086,26 @@
 /* Define as the word index where to find the sign of 'long double'. */
 #undef LDBL_SIGNBIT_WORD
 
+/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing
+   slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
 /* Define to the GNU M4 executable name. */
 #undef M4
 
 /* Define to "-g" if GNU M4 supports -g, otherwise to "". */
 #undef M4_GNU_OPTION
 
+/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
+#undef MALLOC_0_IS_NONNULL
+
 /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
 #undef MAP_ANONYMOUS
 
+/* Define if the mbrtowc function does not return (size_t) -2 for empty input.
+   */
+#undef MBRTOWC_EMPTY_INPUT_BUG
+
 /* Define if the mbrtowc function has the NULL pwc argument bug. */
 #undef MBRTOWC_NULL_ARG1_BUG
 
@@ -1826,6 +1118,12 @@
 /* Define if the mbrtowc function returns a wrong return value. */
 #undef MBRTOWC_RETVAL_BUG
 
+/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+
+
 /* Define to 1 if assertions should be disabled. */
 #undef NDEBUG
 
@@ -1877,9 +1175,6 @@
    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
 
@@ -1907,9 +1202,6 @@
 /* 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
 
@@ -1924,18 +1216,36 @@
    'ptrdiff_t'. */
 #undef PTRDIFF_T_SUFFIX
 
+/* Define to 1 if readlink fails to recognize a trailing slash. */
+#undef READLINK_TRAILING_SLASH_BUG
+
+/* Define if rename does not work when the destination file exists, as on
+   Cygwin 1.5 or Windows. */
+#undef RENAME_DEST_EXISTS_BUG
+
+/* Define if rename fails to leave hard links alone, as on NetBSD 1.6 or
+   Cygwin 1.5. */
+#undef RENAME_HARD_LINK_BUG
+
+/* Define if rename does not correctly handle slashes on the destination
+   argument, such as on Solaris 11 or NetBSD 1.6. */
+#undef RENAME_TRAILING_SLASH_DEST_BUG
+
+/* Define if rename does not correctly handle slashes on the source argument,
+   such as on Solaris 9 or cygwin 1.5. */
+#undef RENAME_TRAILING_SLASH_SOURCE_BUG
+
 /* 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 gnulib uses its own posix_spawn and posix_spawnp functions. */
+#undef REPLACE_POSIX_SPAWN
+
 /* Define if printf is overridden by a POSIX compliant gnulib implementation.
    */
 #undef REPLACE_PRINTF_POSIX
@@ -1950,6 +1260,17 @@
    implementation. */
 #undef REPLACE_VFPRINTF_POSIX
 
+/* File name of the Bourne shell.  */
+#if defined __CYGWIN__ || defined __ANDROID__
+/* Omit the directory part because
+   - For 32-bit Cygwin programs in a 64-bit Cygwin environment, the Cygwin
+     mounts are not visible.
+   - On Android, /bin/sh does not exist. It's /system/bin/sh instead.  */
+# define BOURNE_SHELL "sh"
+#else
+# define BOURNE_SHELL "/bin/sh"
+#endif
+
 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    'sig_atomic_t'. */
 #undef SIG_ATOMIC_T_SUFFIX
@@ -1981,10 +1302,24 @@
 /* Define to 1 if strerror_r returns char *. */
 #undef STRERROR_R_CHAR_P
 
+/* Define to 1 if the type of the st_atim member of a struct stat is struct
+   timespec. */
+#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+
+/* Define to 1 if unlink() on a parent directory may succeed */
+#undef UNLINK_PARENT_BUG
+
 /* 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 combination of the ISO C and POSIX multithreading APIs can be
+   used. */
+#undef USE_ISOC_AND_POSIX_THREADS
+
+/* Define if the ISO C multithreading library can be used. */
+#undef USE_ISOC_THREADS
+
 /* Define if the POSIX multithreading library can be used. */
 #undef USE_POSIX_THREADS
 
@@ -1992,19 +1327,78 @@
    weak. */
 #undef USE_POSIX_THREADS_WEAK
 
-/* Define if the GNU Pth multithreading library can be used. */
-#undef USE_PTH_THREADS
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS.  */
+#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 NetBSD extensions on NetBSD.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD extensions on NetBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
+   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
+   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
 
-/* 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
@@ -2024,13 +1418,13 @@
    'wchar_t'. */
 #undef WCHAR_T_SUFFIX
 
+/* Define if sys/ptem.h is required for struct winsize. */
+#undef WINSIZE_IN_PTEM
+
 /* 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
@@ -2050,31 +1444,41 @@
    `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
+/* Enable large inode numbers on Mac OS X 10.5. */
+#undef _DARWIN_USE_64_BIT_INODE
 
 /* 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
 
+/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
+#undef _NETBSD_SOURCE
+
 /* 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)
+#ifndef _Noreturn
+# if (defined __cplusplus \
+      && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+          || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+      && 0)
+    /* [[noreturn]] is not practically usable, because with it the syntax
+         extern _Noreturn void func (...);
+       would not be valid; such a declaration would only be valid with 'extern'
+       and '_Noreturn' swapped, or without the 'extern' keyword.  However, some
+       AIX system header files and several gnulib header files use precisely
+       this syntax with 'extern'.  */
+#  define _Noreturn [[noreturn]]
+# elif ((!defined __cplusplus || defined __clang__) \
+        && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0)  \
+            || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)))
+   /* _Noreturn works as-is.  */
+# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
 #  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
 #  define _Noreturn __declspec (noreturn)
 # else
 #  define _Noreturn
@@ -2089,73 +1493,132 @@
 /* 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
-
+/* For standard stat data types on VMS. */
+#undef _USE_STD_STAT
 
 /* 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.
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_CONSTANT_MACROS
 
-   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.  */
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_LIMIT_MACROS
+
+/* The _GL_ASYNC_SAFE marker should be attached to functions that are
+   signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
+   invoked from such signal handlers.  Such functions have some restrictions:
+     * All functions that it calls should be marked _GL_ASYNC_SAFE as well,
+       or should be listed as async-signal-safe in POSIX
+       <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04>
+       section 2.4.3.  Note that malloc(), sprintf(), and fwrite(), in
+       particular, are NOT async-signal-safe.
+     * All memory locations (variables and struct fields) that these functions
+       access must be marked 'volatile'.  This holds for both read and write
+       accesses.  Otherwise the compiler might optimize away stores to and
+       reads from such locations that occur in the program, depending on its
+       data flow analysis.  For example, when the program contains a loop
+       that is intended to inspect a variable set from within a signal handler
+           while (!signal_occurred)
+             ;
+       the compiler is allowed to transform this into an endless loop if the
+       variable 'signal_occurred' is not declared 'volatile'.
+   Additionally, recall that:
+     * A signal handler should not modify errno (except if it is a handler
+       for a fatal signal and ends by raising the same signal again, thus
+       provoking the termination of the process).  If it invokes a function
+       that may clobber errno, it needs to save and restore the value of
+       errno.  */
+#define _GL_ASYNC_SAFE
+
+
+/* Please see the Gnulib manual for how to use these macros.
+
+   Suppress extern inline with HP-UX cc, as it appears to be broken; see
+   <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+   Suppress extern inline with Sun C in standards-conformance mode, as it
+   mishandles inline functions that call each other.  E.g., for 'inline void f
+   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+   'reference to static identifier "f" in extern inline function'.
+   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions (ISO C 99 section 6.7.4.(3).
+   This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.
+
+   GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  It defines a macro
+   __GNUC_STDC_INLINE__ to indicate this situation or a macro
+   __GNUC_GNU_INLINE__ to indicate the opposite situation.
+   GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+   semantics but warns, unless -fgnu89-inline is used:
+     warning: C99 inline functions are not supported; using GNU89
+     warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+   It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
 #if ((__GNUC__ \
       ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
+      : (199901L <= __STDC_VERSION__ \
+         && !defined __HP_cc \
+         && !defined __PGI \
+         && !(defined __SUNPRO_C && __STDC__))) \
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
 # define _GL_INLINE inline
 # define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __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
+# define _GL_EXTERN_INLINE_IN_USE
 #else
 # define _GL_INLINE static _GL_UNUSED
 # define _GL_EXTERN_INLINE static _GL_UNUSED
 #endif
 
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
 #  define _GL_INLINE_HEADER_CONST_PRAGMA
 # else
@@ -2251,6 +1714,16 @@
    is a misnomer outside of parameter lists.  */
 #define _UNUSED_PARAMETER_ _GL_UNUSED
 
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
 /* The __pure__ attribute was added in gcc 2.96.  */
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
@@ -2265,3 +1738,10 @@
 # define _GL_ATTRIBUTE_CONST /* empty */
 #endif
 
+/* The __malloc__ attribute was added in gcc 3.  */
+#if 3 <= __GNUC__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC /* empty */
+#endif
+
diff --git a/lib/diffseq.h b/lib/diffseq.h
new file mode 100644
index 0000000..c48da0c
--- /dev/null
+++ b/lib/diffseq.h
@@ -0,0 +1,529 @@
+/* Analyze differences between two vectors.
+
+   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2019 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 <https://www.gnu.org/licenses/>.  */
+
+
+/* The basic idea is to consider two vectors as similar if, when
+   transforming the first vector into the second vector through a
+   sequence of edits (inserts and deletes of one element each),
+   this sequence is short - or equivalently, if the ordered list
+   of elements that are untouched by these edits is long.  For a
+   good introduction to the subject, read about the "Levenshtein
+   distance" in Wikipedia.
+
+   The basic algorithm is described in:
+   "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers,
+   Algorithmica Vol. 1, 1986, pp. 251-266,
+   <https://doi.org/10.1007/BF01840446>.
+   See especially section 4.2, which describes the variation used below.
+
+   The basic algorithm was independently discovered as described in:
+   "Algorithms for Approximate String Matching", Esko Ukkonen,
+   Information and Control Vol. 64, 1985, pp. 100-118,
+   <https://doi.org/10.1016/S0019-9958(85)80046-2>.
+
+   Unless the 'find_minimal' flag is set, this code uses the TOO_EXPENSIVE
+   heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N)
+   at the price of producing suboptimal output for large inputs with
+   many differences.  */
+
+/* Before including this file, you need to define:
+     ELEMENT                 The element type of the vectors being compared.
+     EQUAL                   A two-argument macro that tests two elements for
+                             equality.
+     OFFSET                  A signed integer type sufficient to hold the
+                             difference between two indices.  Usually
+                             something like ptrdiff_t.
+     EXTRA_CONTEXT_FIELDS    Declarations of fields for 'struct context'.
+     NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff].
+     NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff].
+     EARLY_ABORT(ctxt)       (Optional) A boolean expression that triggers an
+                             early abort of the computation.
+     USE_HEURISTIC           (Optional) Define if you want to support the
+                             heuristic for large vectors.
+   It is also possible to use this file with abstract arrays.  In this case,
+   xvec and yvec are not represented in memory.  They only exist conceptually.
+   In this case, the list of defines above is amended as follows:
+     ELEMENT                 Undefined.
+     EQUAL                   Undefined.
+     XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff)
+                             A three-argument macro: References xvec[xoff] and
+                             yvec[yoff] and tests these elements for equality.
+   Before including this file, you also need to include:
+     #include <limits.h>
+     #include <stdbool.h>
+     #include "minmax.h"
+ */
+
+/* Maximum value of type OFFSET.  */
+#define OFFSET_MAX \
+  ((((OFFSET)1 << (sizeof (OFFSET) * CHAR_BIT - 2)) - 1) * 2 + 1)
+
+/* Default to no early abort.  */
+#ifndef EARLY_ABORT
+# define EARLY_ABORT(ctxt) false
+#endif
+
+/* Use this to suppress gcc's "...may be used before initialized" warnings.
+   Beware: The Code argument must not contain commas.  */
+#ifndef IF_LINT
+# if defined GCC_LINT || defined lint
+#  define IF_LINT(Code) Code
+# else
+#  define IF_LINT(Code) /* empty */
+# endif
+#endif
+
+/* As above, but when Code must contain one comma. */
+#ifndef IF_LINT2
+# if defined GCC_LINT || defined lint
+#  define IF_LINT2(Code1, Code2) Code1, Code2
+# else
+#  define IF_LINT2(Code1, Code2) /* empty */
+# endif
+#endif
+
+/*
+ * Context of comparison operation.
+ */
+struct context
+{
+  #ifdef ELEMENT
+  /* Vectors being compared.  */
+  ELEMENT const *xvec;
+  ELEMENT const *yvec;
+  #endif
+
+  /* Extra fields.  */
+  EXTRA_CONTEXT_FIELDS
+
+  /* Vector, indexed by diagonal, containing 1 + the X coordinate of the point
+     furthest along the given diagonal in the forward search of the edit
+     matrix.  */
+  OFFSET *fdiag;
+
+  /* Vector, indexed by diagonal, containing the X coordinate of the point
+     furthest along the given diagonal in the backward search of the edit
+     matrix.  */
+  OFFSET *bdiag;
+
+  #ifdef USE_HEURISTIC
+  /* This corresponds to the diff --speed-large-files flag.  With this
+     heuristic, for vectors with a constant small density of changes,
+     the algorithm is linear in the vector size.  */
+  bool heuristic;
+  #endif
+
+  /* Edit scripts longer than this are too expensive to compute.  */
+  OFFSET too_expensive;
+
+  /* Snakes bigger than this are considered "big".  */
+  #define SNAKE_LIMIT 20
+};
+
+struct partition
+{
+  /* Midpoints of this partition.  */
+  OFFSET xmid;
+  OFFSET ymid;
+
+  /* True if low half will be analyzed minimally.  */
+  bool lo_minimal;
+
+  /* Likewise for high half.  */
+  bool hi_minimal;
+};
+
+
+/* Find the midpoint of the shortest edit script for a specified portion
+   of the two vectors.
+
+   Scan from the beginnings of the vectors, and simultaneously from the ends,
+   doing a breadth-first search through the space of edit-sequence.
+   When the two searches meet, we have found the midpoint of the shortest
+   edit sequence.
+
+   If FIND_MINIMAL is true, find the minimal edit script regardless of
+   expense.  Otherwise, if the search is too expensive, use heuristics to
+   stop the search and report a suboptimal answer.
+
+   Set PART->(xmid,ymid) to the midpoint (XMID,YMID).  The diagonal number
+   XMID - YMID equals the number of inserted elements minus the number
+   of deleted elements (counting only elements before the midpoint).
+
+   Set PART->lo_minimal to true iff the minimal edit script for the
+   left half of the partition is known; similarly for PART->hi_minimal.
+
+   This function assumes that the first elements of the specified portions
+   of the two vectors do not match, and likewise that the last elements do not
+   match.  The caller must trim matching elements from the beginning and end
+   of the portions it is going to specify.
+
+   If we return the "wrong" partitions, the worst this can do is cause
+   suboptimal diff output.  It cannot cause incorrect diff output.  */
+
+static void
+diag (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim, bool find_minimal,
+      struct partition *part, struct context *ctxt)
+{
+  OFFSET *const fd = ctxt->fdiag;       /* Give the compiler a chance. */
+  OFFSET *const bd = ctxt->bdiag;       /* Additional help for the compiler. */
+#ifdef ELEMENT
+  ELEMENT const *const xv = ctxt->xvec; /* Still more help for the compiler. */
+  ELEMENT const *const yv = ctxt->yvec; /* And more and more . . . */
+  #define XREF_YREF_EQUAL(x,y)  EQUAL (xv[x], yv[y])
+#else
+  #define XREF_YREF_EQUAL(x,y)  XVECREF_YVECREF_EQUAL (ctxt, x, y)
+#endif
+  const OFFSET dmin = xoff - ylim;      /* Minimum valid diagonal. */
+  const OFFSET dmax = xlim - yoff;      /* Maximum valid diagonal. */
+  const OFFSET fmid = xoff - yoff;      /* Center diagonal of top-down search. */
+  const OFFSET bmid = xlim - ylim;      /* Center diagonal of bottom-up search. */
+  OFFSET fmin = fmid;
+  OFFSET fmax = fmid;           /* Limits of top-down search. */
+  OFFSET bmin = bmid;
+  OFFSET bmax = bmid;           /* Limits of bottom-up search. */
+  OFFSET c;                     /* Cost. */
+  bool odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd
+                                   diagonal with respect to the northwest. */
+
+  fd[fmid] = xoff;
+  bd[bmid] = xlim;
+
+  for (c = 1;; ++c)
+    {
+      OFFSET d;                 /* Active diagonal. */
+      bool big_snake = false;
+
+      /* Extend the top-down search by an edit step in each diagonal. */
+      if (fmin > dmin)
+        fd[--fmin - 1] = -1;
+      else
+        ++fmin;
+      if (fmax < dmax)
+        fd[++fmax + 1] = -1;
+      else
+        --fmax;
+      for (d = fmax; d >= fmin; d -= 2)
+        {
+          OFFSET x;
+          OFFSET y;
+          OFFSET tlo = fd[d - 1];
+          OFFSET thi = fd[d + 1];
+          OFFSET x0 = tlo < thi ? thi : tlo + 1;
+
+          for (x = x0, y = x0 - d;
+               x < xlim && y < ylim && XREF_YREF_EQUAL (x, y);
+               x++, y++)
+            continue;
+          if (x - x0 > SNAKE_LIMIT)
+            big_snake = true;
+          fd[d] = x;
+          if (odd && bmin <= d && d <= bmax && bd[d] <= x)
+            {
+              part->xmid = x;
+              part->ymid = y;
+              part->lo_minimal = part->hi_minimal = true;
+              return;
+            }
+        }
+
+      /* Similarly extend the bottom-up search.  */
+      if (bmin > dmin)
+        bd[--bmin - 1] = OFFSET_MAX;
+      else
+        ++bmin;
+      if (bmax < dmax)
+        bd[++bmax + 1] = OFFSET_MAX;
+      else
+        --bmax;
+      for (d = bmax; d >= bmin; d -= 2)
+        {
+          OFFSET x;
+          OFFSET y;
+          OFFSET tlo = bd[d - 1];
+          OFFSET thi = bd[d + 1];
+          OFFSET x0 = tlo < thi ? tlo : thi - 1;
+
+          for (x = x0, y = x0 - d;
+               xoff < x && yoff < y && XREF_YREF_EQUAL (x - 1, y - 1);
+               x--, y--)
+            continue;
+          if (x0 - x > SNAKE_LIMIT)
+            big_snake = true;
+          bd[d] = x;
+          if (!odd && fmin <= d && d <= fmax && x <= fd[d])
+            {
+              part->xmid = x;
+              part->ymid = y;
+              part->lo_minimal = part->hi_minimal = true;
+              return;
+            }
+        }
+
+      if (find_minimal)
+        continue;
+
+#ifdef USE_HEURISTIC
+      bool heuristic = ctxt->heuristic;
+#else
+      bool heuristic = false;
+#endif
+
+      /* Heuristic: check occasionally for a diagonal that has made lots
+         of progress compared with the edit distance.  If we have any
+         such, find the one that has made the most progress and return it
+         as if it had succeeded.
+
+         With this heuristic, for vectors with a constant small density
+         of changes, the algorithm is linear in the vector size.  */
+
+      if (200 < c && big_snake && heuristic)
+        {
+          {
+            OFFSET best = 0;
+
+            for (d = fmax; d >= fmin; d -= 2)
+              {
+                OFFSET dd = d - fmid;
+                OFFSET x = fd[d];
+                OFFSET y = x - d;
+                OFFSET v = (x - xoff) * 2 - dd;
+
+                if (v > 12 * (c + (dd < 0 ? -dd : dd)))
+                  {
+                    if (v > best
+                        && xoff + SNAKE_LIMIT <= x && x < xlim
+                        && yoff + SNAKE_LIMIT <= y && y < ylim)
+                      {
+                        /* We have a good enough best diagonal; now insist
+                           that it end with a significant snake.  */
+                        int k;
+
+                        for (k = 1; XREF_YREF_EQUAL (x - k, y - k); k++)
+                          if (k == SNAKE_LIMIT)
+                            {
+                              best = v;
+                              part->xmid = x;
+                              part->ymid = y;
+                              break;
+                            }
+                      }
+                  }
+              }
+            if (best > 0)
+              {
+                part->lo_minimal = true;
+                part->hi_minimal = false;
+                return;
+              }
+          }
+
+          {
+            OFFSET best = 0;
+
+            for (d = bmax; d >= bmin; d -= 2)
+              {
+                OFFSET dd = d - bmid;
+                OFFSET x = bd[d];
+                OFFSET y = x - d;
+                OFFSET v = (xlim - x) * 2 + dd;
+
+                if (v > 12 * (c + (dd < 0 ? -dd : dd)))
+                  {
+                    if (v > best
+                        && xoff < x && x <= xlim - SNAKE_LIMIT
+                        && yoff < y && y <= ylim - SNAKE_LIMIT)
+                      {
+                        /* We have a good enough best diagonal; now insist
+                           that it end with a significant snake.  */
+                        int k;
+
+                        for (k = 0; XREF_YREF_EQUAL (x + k, y + k); k++)
+                          if (k == SNAKE_LIMIT - 1)
+                            {
+                              best = v;
+                              part->xmid = x;
+                              part->ymid = y;
+                              break;
+                            }
+                      }
+                  }
+              }
+            if (best > 0)
+              {
+                part->lo_minimal = false;
+                part->hi_minimal = true;
+                return;
+              }
+          }
+        }
+
+      /* Heuristic: if we've gone well beyond the call of duty, give up
+         and report halfway between our best results so far.  */
+      if (c >= ctxt->too_expensive)
+        {
+          OFFSET fxybest;
+          OFFSET fxbest IF_LINT (= 0);
+          OFFSET bxybest;
+          OFFSET bxbest IF_LINT (= 0);
+
+          /* Find forward diagonal that maximizes X + Y.  */
+          fxybest = -1;
+          for (d = fmax; d >= fmin; d -= 2)
+            {
+              OFFSET x = MIN (fd[d], xlim);
+              OFFSET y = x - d;
+              if (ylim < y)
+                {
+                  x = ylim + d;
+                  y = ylim;
+                }
+              if (fxybest < x + y)
+                {
+                  fxybest = x + y;
+                  fxbest = x;
+                }
+            }
+
+          /* Find backward diagonal that minimizes X + Y.  */
+          bxybest = OFFSET_MAX;
+          for (d = bmax; d >= bmin; d -= 2)
+            {
+              OFFSET x = MAX (xoff, bd[d]);
+              OFFSET y = x - d;
+              if (y < yoff)
+                {
+                  x = yoff + d;
+                  y = yoff;
+                }
+              if (x + y < bxybest)
+                {
+                  bxybest = x + y;
+                  bxbest = x;
+                }
+            }
+
+          /* Use the better of the two diagonals.  */
+          if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff))
+            {
+              part->xmid = fxbest;
+              part->ymid = fxybest - fxbest;
+              part->lo_minimal = true;
+              part->hi_minimal = false;
+            }
+          else
+            {
+              part->xmid = bxbest;
+              part->ymid = bxybest - bxbest;
+              part->lo_minimal = false;
+              part->hi_minimal = true;
+            }
+          return;
+        }
+    }
+  #undef XREF_YREF_EQUAL
+}
+
+
+/* Compare in detail contiguous subsequences of the two vectors
+   which are known, as a whole, to match each other.
+
+   The subsequence of vector 0 is [XOFF, XLIM) and likewise for vector 1.
+
+   Note that XLIM, YLIM are exclusive bounds.  All indices into the vectors
+   are origin-0.
+
+   If FIND_MINIMAL, find a minimal difference no matter how
+   expensive it is.
+
+   The results are recorded by invoking NOTE_DELETE and NOTE_INSERT.
+
+   Return false if terminated normally, or true if terminated through early
+   abort.  */
+
+static bool
+compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET ylim,
+            bool find_minimal, struct context *ctxt)
+{
+#ifdef ELEMENT
+  ELEMENT const *xv = ctxt->xvec; /* Help the compiler.  */
+  ELEMENT const *yv = ctxt->yvec;
+  #define XREF_YREF_EQUAL(x,y)  EQUAL (xv[x], yv[y])
+#else
+  #define XREF_YREF_EQUAL(x,y)  XVECREF_YVECREF_EQUAL (ctxt, x, y)
+#endif
+
+  /* Slide down the bottom initial diagonal.  */
+  while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff))
+    {
+      xoff++;
+      yoff++;
+    }
+
+  /* Slide up the top initial diagonal. */
+  while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1))
+    {
+      xlim--;
+      ylim--;
+    }
+
+  /* Handle simple cases. */
+  if (xoff == xlim)
+    while (yoff < ylim)
+      {
+        NOTE_INSERT (ctxt, yoff);
+        if (EARLY_ABORT (ctxt))
+          return true;
+        yoff++;
+      }
+  else if (yoff == ylim)
+    while (xoff < xlim)
+      {
+        NOTE_DELETE (ctxt, xoff);
+        if (EARLY_ABORT (ctxt))
+          return true;
+        xoff++;
+      }
+  else
+    {
+      struct partition part IF_LINT2 (= { .xmid = 0, .ymid = 0 });
+
+      /* Find a point of correspondence in the middle of the vectors.  */
+      diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt);
+
+      /* Use the partitions to split this problem into subproblems.  */
+      if (compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal, ctxt))
+        return true;
+      if (compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal, ctxt))
+        return true;
+    }
+
+  return false;
+  #undef XREF_YREF_EQUAL
+}
+
+#undef ELEMENT
+#undef EQUAL
+#undef OFFSET
+#undef EXTRA_CONTEXT_FIELDS
+#undef NOTE_DELETE
+#undef NOTE_INSERT
+#undef EARLY_ABORT
+#undef USE_HEURISTIC
+#undef XVECREF_YVECREF_EQUAL
+#undef OFFSET_MAX
diff --git a/lib/dirname-lgpl.c b/lib/dirname-lgpl.c
index 2895cbc..7cf89d8 100644
--- a/lib/dirname-lgpl.c
+++ b/lib/dirname-lgpl.c
@@ -1,6 +1,6 @@
 /* dirname.c -- return all but the last element in a file name
 
-   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2012 Free Software
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/dirname.c b/lib/dirname.c
index 627c164..1e042a5 100644
--- a/lib/dirname.c
+++ b/lib/dirname.c
@@ -1,6 +1,6 @@
 /* dirname.c -- return all but the last element in a file name
 
-   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2012 Free Software
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/dirname.h b/lib/dirname.h
index 51a685c..5791659 100644
--- a/lib/dirname.h
+++ b/lib/dirname.h
@@ -1,6 +1,6 @@
 /*  Take file names apart into directory and base names.
 
-    Copyright (C) 1998, 2001, 2003-2006, 2009-2012 Free Software Foundation,
+    Copyright (C) 1998, 2001, 2003-2006, 2009-2019 Free Software Foundation,
     Inc.
 
     This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef DIRNAME_H_
 # define DIRNAME_H_ 1
@@ -31,8 +31,12 @@
 #  define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
 # endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 # if GNULIB_DIRNAME
-char *base_name (char const *file);
+char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC;
 char *dir_name (char const *file);
 # endif
 
@@ -43,4 +47,8 @@
 
 bool strip_trailing_slashes (char *file);
 
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
 #endif /* not DIRNAME_H_ */
diff --git a/lib/dosname.h b/lib/dosname.h
index 0468ce4..c0ab684 100644
--- a/lib/dosname.h
+++ b/lib/dosname.h
@@ -1,6 +1,6 @@
 /* File names on MS-DOS/Windows systems.
 
-   Copyright (C) 2000-2001, 2004-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2004-2006, 2009-2019 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
@@ -13,16 +13,15 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <https://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__)
+#if (defined _WIN32 || defined __CYGWIN__ \
+     || defined __EMX__ || defined __MSDOS__ || 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'  \
diff --git a/lib/dup-safer-flag.c b/lib/dup-safer-flag.c
index e4d1b21..485f741 100644
--- a/lib/dup-safer-flag.c
+++ b/lib/dup-safer-flag.c
@@ -1,7 +1,7 @@
 /* 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.
+   Copyright (C) 2001, 2004-2006, 2009-2019 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
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert and Eric Blake.  */
 
diff --git a/lib/dup-safer.c b/lib/dup-safer.c
index 0f5d3be..c0c5f2a 100644
--- a/lib/dup-safer.c
+++ b/lib/dup-safer.c
@@ -1,6 +1,6 @@
 /* Invoke dup, but avoid some glitches.
 
-   Copyright (C) 2001, 2004-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2004-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/dup2.c b/lib/dup2.c
index f6d0f1c..d3aafa4 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,6 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Paul Eggert */
 
@@ -29,16 +29,45 @@
 
 # undef dup2
 
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if defined _WIN32 && ! defined __CYGWIN__
 
 /* Get declarations of the native Windows API functions.  */
 #  define WIN32_LEAN_AND_MEAN
 #  include <windows.h>
 
-#  include "msvc-inval.h"
+#  if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#   include "msvc-inval.h"
+#  endif
 
 /* Get _get_osfhandle.  */
-#  include "msvc-nothrow.h"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
+
+#  if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+dup2_nothrow (int fd, int desired_fd)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = dup2 (fd, desired_fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      errno = EBADF;
+      result = -1;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#  else
+#   define dup2_nothrow dup2
+#  endif
 
 static int
 ms_windows_dup2 (int fd, int desired_fd)
@@ -59,23 +88,14 @@
     }
 
   /* Wine 1.0.1 return 0 when desired_fd is negative but not -1:
-     http://bugs.winehq.org/show_bug.cgi?id=21289 */
+     https://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;
+  result = dup2_nothrow (fd, desired_fd);
 
   if (result == 0)
     result = desired_fd;
@@ -85,6 +105,57 @@
 
 #  define dup2 ms_windows_dup2
 
+# elif defined __KLIBC__
+
+#  include <InnoTekLIBC/backend.h>
+
+static int
+klibc_dup2dirfd (int fd, int desired_fd)
+{
+  int tempfd;
+  int dupfd;
+
+  tempfd = open ("NUL", O_RDONLY);
+  if (tempfd == -1)
+    return -1;
+
+  if (tempfd == desired_fd)
+    {
+      close (tempfd);
+
+      char path[_MAX_PATH];
+      if (__libc_Back_ioFHToPath (fd, path, sizeof (path)))
+        return -1;
+
+      return open(path, O_RDONLY);
+    }
+
+  dupfd = klibc_dup2dirfd (fd, desired_fd);
+
+  close (tempfd);
+
+  return dupfd;
+}
+
+static int
+klibc_dup2 (int fd, int desired_fd)
+{
+  int dupfd;
+  struct stat sbuf;
+
+  dupfd = dup2 (fd, desired_fd);
+  if (dupfd == -1 && errno == ENOTSUP \
+      && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
+    {
+      close (desired_fd);
+
+      return klibc_dup2dirfd (fd, desired_fd);
+    }
+
+  return dupfd;
+}
+
+#  define dup2 klibc_dup2
 # endif
 
 int
@@ -95,7 +166,14 @@
 # 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 Cygwin 1.7.17, dup2 (1, -1) dumps core.
+     On Cygwin 1.7.25, dup2 (1, 256) can dump core.
      On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC.  */
+#  if HAVE_SETDTABLESIZE
+  setdtablesize (desired_fd + 1);
+#  endif
+  if (desired_fd < 0)
+    fd = desired_fd;
   if (fd == desired_fd)
     return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
 # endif
diff --git a/lib/ebitset.c b/lib/ebitset.c
deleted file mode 100644
index 9f35499..0000000
--- a/lib/ebitset.c
+++ /dev/null
@@ -1,1361 +0,0 @@
-/* Functions to support expandable bitsets.
-
-   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
-   it under the terms of the 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 "ebitset.h"
-
-#include "obstack.h"
-#include <stdlib.h>
-#include <string.h>
-
-/* This file implements expandable bitsets.  These bitsets can be of
-   arbitrary length and are more efficient than arrays of bits for
-   large sparse sets.
-
-   Empty elements are represented by a NULL pointer in the table of
-   element pointers.  An alternative is to point to a special zero
-   element.  Similarly, we could represent an all 1's element with
-   another special ones element pointer.
-
-   Bitsets are commonly empty so we need to ensure that this special
-   case is fast.  A zero bitset is indicated when cdata is 0.  This is
-   conservative since cdata may be non zero and the bitset may still
-   be zero.
-
-   The bitset cache can be disabled either by setting cindex to
-   BITSET_WINDEX_MAX or by setting csize to 0.  Here
-   we use the former approach since cindex needs to be updated whenever
-   cdata is changed.
-*/
-
-
-/* Number of words to use for each element.  */
-#define EBITSET_ELT_WORDS 2
-
-/* Number of bits stored in each element.  */
-#define EBITSET_ELT_BITS \
-  ((unsigned int) (EBITSET_ELT_WORDS * BITSET_WORD_BITS))
-
-/* Ebitset element.  We use an array of bits.  */
-typedef struct ebitset_elt_struct
-{
-  union
-  {
-    bitset_word words[EBITSET_ELT_WORDS];	/* Bits that are set.  */
-    struct ebitset_elt_struct *next;
-  }
-  u;
-}
-ebitset_elt;
-
-
-typedef ebitset_elt *ebitset_elts;
-
-
-/* Number of elements to initially allocate.  */
-
-#ifndef EBITSET_INITIAL_SIZE
-#define EBITSET_INITIAL_SIZE 2
-#endif
-
-
-enum ebitset_find_mode
-  { EBITSET_FIND, EBITSET_CREATE, EBITSET_SUBST };
-
-static ebitset_elt ebitset_zero_elts[1]; /* Elements of all zero bits.  */
-
-/* Obstack to allocate bitset elements from.  */
-static struct obstack ebitset_obstack;
-static bool ebitset_obstack_init = false;
-static ebitset_elt *ebitset_free_list;	/* Free list of bitset elements.  */
-
-#define EBITSET_N_ELTS(N) (((N) + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS)
-#define EBITSET_ELTS(BSET) ((BSET)->e.elts)
-#define EBITSET_SIZE(BSET) EBITSET_N_ELTS (BITSET_NBITS_ (BSET))
-#define EBITSET_ASIZE(BSET) ((BSET)->e.size)
-
-#define EBITSET_NEXT(ELT) ((ELT)->u.next)
-#define EBITSET_WORDS(ELT) ((ELT)->u.words)
-
-/* Disable bitset cache and mark BSET as being zero.  */
-#define EBITSET_ZERO_SET(BSET) ((BSET)->b.cindex = BITSET_WINDEX_MAX, \
-	(BSET)->b.cdata = 0)
-
-#define EBITSET_CACHE_DISABLE(BSET)  ((BSET)->b.cindex = BITSET_WINDEX_MAX)
-
-/* Disable bitset cache and mark BSET as being possibly non-zero.  */
-#define EBITSET_NONZERO_SET(BSET) \
- (EBITSET_CACHE_DISABLE (BSET), (BSET)->b.cdata = (bitset_word *)~0)
-
-/* A conservative estimate of whether the bitset is zero.
-   This is non-zero only if we know for sure that the bitset is zero.  */
-#define EBITSET_ZERO_P(BSET) ((BSET)->b.cdata == 0)
-
-/* Enable cache to point to element with table index EINDEX.
-   The element must exist.  */
-#define EBITSET_CACHE_SET(BSET, EINDEX) \
- ((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \
-  (BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX]))
-
-#undef min
-#undef max
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#define max(a, b) ((a) > (b) ? (a) : (b))
-
-static bitset_bindex
-ebitset_resize (bitset src, bitset_bindex n_bits)
-{
-  bitset_windex oldsize;
-  bitset_windex newsize;
-
-  if (n_bits == BITSET_NBITS_ (src))
-    return n_bits;
-
-  oldsize = EBITSET_SIZE (src);
-  newsize = EBITSET_N_ELTS (n_bits);
-
-  if (oldsize < newsize)
-    {
-      bitset_windex size;
-
-      /* The bitset needs to grow.  If we already have enough memory
-	 allocated, then just zero what we need.  */
-      if (newsize > EBITSET_ASIZE (src))
-	{
-	  /* We need to allocate more memory.  When oldsize is
-	     non-zero this means that we are changing the size, so
-	     grow the bitset 25% larger than requested to reduce
-	     number of reallocations.  */
-
-	  if (oldsize == 0)
-	    size = newsize;
-	  else
-	    size = newsize + newsize / 4;
-
-	  EBITSET_ELTS (src)
-	    = realloc (EBITSET_ELTS (src), size * sizeof (ebitset_elt *));
-	  EBITSET_ASIZE (src) = size;
-	}
-
-      memset (EBITSET_ELTS (src) + oldsize, 0,
-	      (newsize - oldsize) * sizeof (ebitset_elt *));
-    }
-  else
-    {
-      /* The bitset needs to shrink.  There's no point deallocating
-	 the memory unless it is shrinking by a reasonable amount.  */
-      if ((oldsize - newsize) >= oldsize / 2)
-	{
-	  EBITSET_ELTS (src)
-	    = realloc (EBITSET_ELTS (src), newsize * sizeof (ebitset_elt *));
-	  EBITSET_ASIZE (src) = newsize;
-	}
-
-      /* Need to prune any excess bits.  FIXME.  */
-    }
-
-  BITSET_NBITS_ (src) = n_bits;
-  return n_bits;
-}
-
-
-/* Allocate a ebitset element.  The bits are not cleared.  */
-static inline ebitset_elt *
-ebitset_elt_alloc (void)
-{
-  ebitset_elt *elt;
-
-  if (ebitset_free_list != 0)
-    {
-      elt = ebitset_free_list;
-      ebitset_free_list = EBITSET_NEXT (elt);
-    }
-  else
-    {
-      if (!ebitset_obstack_init)
-	{
-	  ebitset_obstack_init = true;
-
-	  /* Let particular systems override the size of a chunk.  */
-
-#ifndef OBSTACK_CHUNK_SIZE
-#define OBSTACK_CHUNK_SIZE 0
-#endif
-
-	  /* Let them override the alloc and free routines too.  */
-
-#ifndef OBSTACK_CHUNK_ALLOC
-#define OBSTACK_CHUNK_ALLOC xmalloc
-#endif
-
-#ifndef OBSTACK_CHUNK_FREE
-#define OBSTACK_CHUNK_FREE free
-#endif
-
-#if ! defined __GNUC__ || __GNUC__ < 2
-#define __alignof__(type) 0
-#endif
-
-	  obstack_specify_allocation (&ebitset_obstack, OBSTACK_CHUNK_SIZE,
-				      __alignof__ (ebitset_elt),
-				      OBSTACK_CHUNK_ALLOC,
-				      OBSTACK_CHUNK_FREE);
-	}
-
-      /* Perhaps we should add a number of new elements to the free
-	 list.  */
-      elt = (ebitset_elt *) obstack_alloc (&ebitset_obstack,
-					   sizeof (ebitset_elt));
-    }
-
-  return elt;
-}
-
-
-/* Allocate a ebitset element.  The bits are cleared.  */
-static inline ebitset_elt *
-ebitset_elt_calloc (void)
-{
-  ebitset_elt *elt;
-
-  elt = ebitset_elt_alloc ();
-  memset (EBITSET_WORDS (elt), 0, sizeof (EBITSET_WORDS (elt)));
-  return elt;
-}
-
-
-static inline void
-ebitset_elt_free (ebitset_elt *elt)
-{
-  EBITSET_NEXT (elt) = ebitset_free_list;
-  ebitset_free_list = elt;
-}
-
-
-/* Remove element with index EINDEX from bitset BSET.  */
-static inline void
-ebitset_elt_remove (bitset bset, bitset_windex eindex)
-{
-  ebitset_elts *elts;
-  ebitset_elt *elt;
-
-  elts = EBITSET_ELTS (bset);
-
-  elt = elts[eindex];
-
-  elts[eindex] = 0;
-  ebitset_elt_free (elt);
-}
-
-
-/* Add ELT into elts at index EINDEX of bitset BSET.  */
-static inline void
-ebitset_elt_add (bitset bset, ebitset_elt *elt, bitset_windex eindex)
-{
-  ebitset_elts *elts;
-
-  elts = EBITSET_ELTS (bset);
-  /* Assume that the elts entry not allocated.  */
-  elts[eindex] = elt;
-}
-
-
-/* Are all bits in an element zero?  */
-static inline bool
-ebitset_elt_zero_p (ebitset_elt *elt)
-{
-  int i;
-
-  for (i = 0; i < EBITSET_ELT_WORDS; i++)
-    if (EBITSET_WORDS (elt)[i])
-      return false;
-
-  return true;
-}
-
-
-static ebitset_elt *
-ebitset_elt_find (bitset bset, bitset_bindex bindex,
-		  enum ebitset_find_mode mode)
-{
-  ebitset_elt *elt;
-  bitset_windex size;
-  bitset_windex eindex;
-  ebitset_elts *elts;
-
-  eindex = bindex / EBITSET_ELT_BITS;
-
-  elts = EBITSET_ELTS (bset);
-  size = EBITSET_SIZE (bset);
-
-  if (eindex < size)
-    {
-      if ((elt = elts[eindex]))
-	{
-	  if (EBITSET_WORDS (elt) == bset->b.cdata)
-	    return elt;
-
-	  EBITSET_CACHE_SET (bset, eindex);
-	  return elt;
-	}
-    }
-
-  /* The element could not be found.  */
-
-  switch (mode)
-    {
-    default:
-      abort ();
-
-    case EBITSET_FIND:
-      return 0;
-
-    case EBITSET_CREATE:
-      if (eindex >= size)
-	ebitset_resize (bset, bindex);
-
-      /* Create a new element.  */
-      elt = ebitset_elt_calloc ();
-      ebitset_elt_add (bset, elt, eindex);
-      EBITSET_CACHE_SET (bset, eindex);
-      return elt;
-
-    case EBITSET_SUBST:
-      return &ebitset_zero_elts[0];
-    }
-}
-
-
-/* Weed out the zero elements from the elts.  */
-static inline bitset_windex
-ebitset_weed (bitset bset)
-{
-  ebitset_elts *elts;
-  bitset_windex j;
-  bitset_windex count;
-
-  if (EBITSET_ZERO_P (bset))
-    return 0;
-
-  elts = EBITSET_ELTS (bset);
-  count = 0;
-  for (j = 0; j < EBITSET_SIZE (bset); j++)
-    {
-      ebitset_elt *elt = elts[j];
-
-      if (elt)
-	{
-	  if (ebitset_elt_zero_p (elt))
-	    {
-	      ebitset_elt_remove (bset, j);
-	      count++;
-	    }
-	}
-      else
-	count++;
-    }
-
-  count = j - count;
-  if (!count)
-    {
-      /* All the bits are zero.  We could shrink the elts.
-	 For now just mark BSET as known to be zero.  */
-      EBITSET_ZERO_SET (bset);
-    }
-  else
-    EBITSET_NONZERO_SET (bset);
-
-  return count;
-}
-
-
-/* Set all bits in the bitset to zero.  */
-static inline void
-ebitset_zero (bitset bset)
-{
-  ebitset_elts *elts;
-  bitset_windex j;
-
-  if (EBITSET_ZERO_P (bset))
-    return;
-
-  elts = EBITSET_ELTS (bset);
-  for (j = 0; j < EBITSET_SIZE (bset); j++)
-    {
-      ebitset_elt *elt = elts[j];
-
-      if (elt)
-	ebitset_elt_remove (bset, j);
-    }
-
-  /* All the bits are zero.  We could shrink the elts.
-     For now just mark BSET as known to be zero.  */
-  EBITSET_ZERO_SET (bset);
-}
-
-
-static inline bool
-ebitset_equal_p (bitset dst, bitset src)
-{
-  ebitset_elts *selts;
-  ebitset_elts *delts;
-  bitset_windex j;
-
-  if (src == dst)
-    return true;
-
-  ebitset_weed (dst);
-  ebitset_weed (src);
-
-  if (EBITSET_SIZE (src) != EBITSET_SIZE (dst))
-    return false;
-
-  selts = EBITSET_ELTS (src);
-  delts = EBITSET_ELTS (dst);
-
-  for (j = 0; j < EBITSET_SIZE (src); j++)
-    {
-      unsigned int i;
-      ebitset_elt *selt = selts[j];
-      ebitset_elt *delt = delts[j];
-
-      if (!selt && !delt)
-	continue;
-      if ((selt && !delt) || (!selt && delt))
-	return false;
-
-      for (i = 0; i < EBITSET_ELT_WORDS; i++)
-	if (EBITSET_WORDS (selt)[i] != EBITSET_WORDS (delt)[i])
-	  return false;
-    }
-  return true;
-}
-
-
-/* Copy bits from bitset SRC to bitset DST.  */
-static inline void
-ebitset_copy_ (bitset dst, bitset src)
-{
-  ebitset_elts *selts;
-  ebitset_elts *delts;
-  bitset_windex j;
-
-  if (src == dst)
-    return;
-
-  ebitset_zero (dst);
-
-  if (BITSET_NBITS_ (dst) != BITSET_NBITS_ (src))
-    ebitset_resize (dst, BITSET_NBITS_ (src));
-
-  selts = EBITSET_ELTS (src);
-  delts = EBITSET_ELTS (dst);
-  for (j = 0; j < EBITSET_SIZE (src); j++)
-    {
-      ebitset_elt *selt = selts[j];
-
-      if (selt)
-	{
-	  ebitset_elt *tmp;
-
-	  tmp = ebitset_elt_alloc ();
-	  delts[j] = tmp;
-	  memcpy (EBITSET_WORDS (tmp), EBITSET_WORDS (selt),
-		  sizeof (EBITSET_WORDS (selt)));
-	}
-    }
-  EBITSET_NONZERO_SET (dst);
-}
-
-
-/* Copy bits from bitset SRC to bitset DST.  Return true if
-   bitsets different.  */
-static inline bool
-ebitset_copy_cmp (bitset dst, bitset src)
-{
-  if (src == dst)
-    return false;
-
-  if (EBITSET_ZERO_P (dst))
-    {
-      ebitset_copy_ (dst, src);
-      return !EBITSET_ZERO_P (src);
-    }
-
-  if (ebitset_equal_p (dst, src))
-    return false;
-
-  ebitset_copy_ (dst, src);
-  return true;
-}
-
-
-/* Set bit BITNO in bitset DST.  */
-static void
-ebitset_set (bitset dst, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  ebitset_elt_find (dst, bitno, EBITSET_CREATE);
-
-  dst->b.cdata[windex - dst->b.cindex] |=
-    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
-}
-
-
-/* Reset bit BITNO in bitset DST.  */
-static void
-ebitset_reset (bitset dst, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  if (!ebitset_elt_find (dst, bitno, EBITSET_FIND))
-    return;
-
-  dst->b.cdata[windex - dst->b.cindex] &=
-    ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
-
-  /* If all the data is zero, perhaps we should remove it now...
-     However, there is a good chance that the element will be needed
-     again soon.  */
-}
-
-
-/* Test bit BITNO in bitset SRC.  */
-static bool
-ebitset_test (bitset src, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  return (ebitset_elt_find (src, bitno, EBITSET_FIND)
-	  && ((src->b.cdata[windex - src->b.cindex]
-	       >> (bitno % BITSET_WORD_BITS))
-	      & 1));
-}
-
-
-static void
-ebitset_free (bitset bset)
-{
-  ebitset_zero (bset);
-  free (EBITSET_ELTS (bset));
-}
-
-
-/* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
-static bitset_bindex
-ebitset_list_reverse (bitset bset, bitset_bindex *list,
-		      bitset_bindex num, bitset_bindex *next)
-{
-  bitset_bindex n_bits;
-  bitset_bindex bitno;
-  bitset_bindex rbitno;
-  unsigned int bcount;
-  bitset_bindex boffset;
-  bitset_windex windex;
-  bitset_windex eindex;
-  bitset_windex woffset;
-  bitset_bindex count;
-  bitset_windex size;
-  ebitset_elts *elts;
-
-  if (EBITSET_ZERO_P (bset))
-    return 0;
-
-  size = EBITSET_SIZE (bset);
-  n_bits = size * EBITSET_ELT_BITS;
-  rbitno = *next;
-
-  if (rbitno >= n_bits)
-    return 0;
-
-  elts = EBITSET_ELTS (bset);
-
-  bitno = n_bits - (rbitno + 1);
-
-  windex = bitno / BITSET_WORD_BITS;
-  eindex = bitno / EBITSET_ELT_BITS;
-  woffset = windex - eindex * EBITSET_ELT_WORDS;
-
-  /* If num is 1, we could speed things up with a binary search
-     of the word of interest.  */
-
-  count = 0;
-  bcount = bitno % BITSET_WORD_BITS;
-  boffset = windex * BITSET_WORD_BITS;
-
-  do
-    {
-      ebitset_elt *elt;
-      bitset_word *srcp;
-
-      elt = elts[eindex];
-      if (elt)
-	{
-	  srcp = EBITSET_WORDS (elt);
-
-	  do
-	    {
-	      bitset_word word;
-
-	      word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount);
-
-	      for (; word; bcount--)
-		{
-		  if (word & BITSET_MSB)
-		    {
-		      list[count++] = boffset + bcount;
-		      if (count >= num)
-			{
-			  *next = n_bits - (boffset + bcount);
-			  return count;
-			}
-		    }
-		  word <<= 1;
-		}
-	      boffset -= BITSET_WORD_BITS;
-	      bcount = BITSET_WORD_BITS - 1;
-	    }
-	  while (woffset--);
-	}
-
-      woffset = EBITSET_ELT_WORDS - 1;
-      boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS;
-    }
-  while (eindex--);
-
-  *next = n_bits - (boffset + 1);
-  return count;
-}
-
-
-/* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
-static bitset_bindex
-ebitset_list (bitset bset, bitset_bindex *list,
-	      bitset_bindex num, bitset_bindex *next)
-{
-  bitset_bindex bitno;
-  bitset_windex windex;
-  bitset_windex eindex;
-  bitset_bindex count;
-  bitset_windex size;
-  ebitset_elt *elt;
-  bitset_word word;
-  ebitset_elts *elts;
-
-  if (EBITSET_ZERO_P (bset))
-    return 0;
-
-  bitno = *next;
-  count = 0;
-
-  elts = EBITSET_ELTS (bset);
-  size = EBITSET_SIZE (bset);
-  eindex = bitno / EBITSET_ELT_BITS;
-
-  if (bitno % EBITSET_ELT_BITS)
-    {
-      /* We need to start within an element.  This is not very common.  */
-
-      elt = elts[eindex];
-      if (elt)
-	{
-	  bitset_windex woffset;
-	  bitset_word *srcp = EBITSET_WORDS (elt);
-
-	  windex = bitno / BITSET_WORD_BITS;
-	  woffset = eindex * EBITSET_ELT_WORDS;
-
-	  for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++)
-	    {
-	      word = srcp[windex - woffset] >> (bitno % BITSET_WORD_BITS);
-
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    {
-		      list[count++] = bitno;
-		      if (count >= num)
-			{
-			  *next = bitno + 1;
-			  return count;
-			}
-		    }
-		  word >>= 1;
-		}
-	      bitno = (windex + 1) * BITSET_WORD_BITS;
-	    }
-	}
-
-      /* Skip to next element.  */
-      eindex++;
-    }
-
-  /* If num is 1, we could speed things up with a binary search
-     of the word of interest.  */
-
-  for (; eindex < size; eindex++)
-    {
-      int i;
-      bitset_word *srcp;
-
-      elt = elts[eindex];
-      if (!elt)
-	continue;
-
-      srcp = EBITSET_WORDS (elt);
-      windex = eindex * EBITSET_ELT_WORDS;
-
-      if ((count + EBITSET_ELT_BITS) < num)
-	{
-	  /* The coast is clear, plant boot!  */
-
-#if EBITSET_ELT_WORDS == 2
-	  word = srcp[0];
-	  if (word)
-	    {
-	      if (!(word & 0xffff))
-		{
-		  word >>= 16;
-		  bitno += 16;
-		}
-	      if (!(word & 0xff))
-		{
-		  word >>= 8;
-		  bitno += 8;
-		}
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    list[count++] = bitno;
-		  word >>= 1;
-		}
-	    }
-	  windex++;
-	  bitno = windex * BITSET_WORD_BITS;
-
-	  word = srcp[1];
-	  if (word)
-	    {
-	      if (!(word & 0xffff))
-		{
-		  word >>= 16;
-		  bitno += 16;
-		}
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    list[count++] = bitno;
-		  word >>= 1;
-		}
-	    }
-	  windex++;
-	  bitno = windex * BITSET_WORD_BITS;
-#else
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, windex++)
-	    {
-	      bitno = windex * BITSET_WORD_BITS;
-
-	      word = srcp[i];
-	      if (word)
-		{
-		  if (!(word & 0xffff))
-		    {
-		      word >>= 16;
-		      bitno += 16;
-		    }
-		  if (!(word & 0xff))
-		    {
-		      word >>= 8;
-		      bitno += 8;
-		    }
-		  for (; word; bitno++)
-		    {
-		      if (word & 1)
-			list[count++] = bitno;
-		      word >>= 1;
-		    }
-		}
-	    }
-#endif
-	}
-      else
-	{
-	  /* Tread more carefully since we need to check
-	     if array overflows.  */
-
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, windex++)
-	    {
-	      bitno = windex * BITSET_WORD_BITS;
-
-	      for (word = srcp[i]; word; bitno++)
-		{
-		  if (word & 1)
-		    {
-		      list[count++] = bitno;
-		      if (count >= num)
-			{
-			  *next = bitno + 1;
-			  return count;
-			}
-		    }
-		  word >>= 1;
-		}
-	    }
-	}
-    }
-
-  *next = bitno;
-  return count;
-}
-
-
-/* Ensure that any unused bits within the last element are clear.  */
-static inline void
-ebitset_unused_clear (bitset dst)
-{
-  unsigned int last_bit;
-  bitset_bindex n_bits;
-
-  n_bits = BITSET_NBITS_ (dst);
-  last_bit = n_bits % EBITSET_ELT_BITS;
-
-  if (last_bit)
-    {
-      bitset_windex eindex;
-      ebitset_elts *elts;
-      ebitset_elt *elt;
-
-      elts = EBITSET_ELTS (dst);
-
-      eindex = n_bits / EBITSET_ELT_BITS;
-
-      elt = elts[eindex];
-      if (elt)
-	{
-	  bitset_windex windex;
-	  bitset_windex woffset;
-	  bitset_word *srcp = EBITSET_WORDS (elt);
-
-	  windex = n_bits / BITSET_WORD_BITS;
-	  woffset = eindex * EBITSET_ELT_WORDS;
-
-	  srcp[windex - woffset] &= ((bitset_word) 1 << last_bit) - 1;
-	  windex++;
-	  for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++)
-	    srcp[windex - woffset] = 0;
-	}
-    }
-}
-
-
-static void
-ebitset_ones (bitset dst)
-{
-  bitset_windex j;
-  ebitset_elt *elt;
-
-  for (j = 0; j < EBITSET_SIZE (dst); j++)
-    {
-      /* Create new elements if they cannot be found.  Perhaps
-	 we should just add pointers to a ones element?  */
-      elt =
-	ebitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE);
-      memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt)));
-    }
-  EBITSET_NONZERO_SET (dst);
-  ebitset_unused_clear (dst);
-}
-
-
-static bool
-ebitset_empty_p (bitset dst)
-{
-  ebitset_elts *elts;
-  bitset_windex j;
-
-  if (EBITSET_ZERO_P (dst))
-    return 1;
-
-  elts = EBITSET_ELTS (dst);
-  for (j = 0; j < EBITSET_SIZE (dst); j++)
-    {
-      ebitset_elt *elt = elts[j];
-
-      if (elt)
-	{
-	  if (!ebitset_elt_zero_p (elt))
-	    return 0;
-	  /* Do some weeding as we go.  */
-	  ebitset_elt_remove (dst, j);
-	}
-    }
-
-  /* All the bits are zero.  We could shrink the elts.
-     For now just mark DST as known to be zero.  */
-  EBITSET_ZERO_SET (dst);
-  return 1;
-}
-
-
-static void
-ebitset_not (bitset dst, bitset src)
-{
-  unsigned int i;
-  ebitset_elt *selt;
-  ebitset_elt *delt;
-  bitset_windex j;
-
-  ebitset_resize (dst, BITSET_NBITS_ (src));
-
-  for (j = 0; j < EBITSET_SIZE (src); j++)
-    {
-      /* Create new elements for dst if they cannot be found
-	 or substitute zero elements if src elements not found.  */
-      selt =
-	ebitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_SUBST);
-      delt =
-	ebitset_elt_find (dst, j * EBITSET_ELT_BITS, EBITSET_CREATE);
-
-      for (i = 0; i < EBITSET_ELT_WORDS; i++)
-	EBITSET_WORDS (delt)[i] = ~EBITSET_WORDS (selt)[i];
-    }
-  EBITSET_NONZERO_SET (dst);
-  ebitset_unused_clear (dst);
-}
-
-
-/* Is DST == DST | SRC?  */
-static bool
-ebitset_subset_p (bitset dst, bitset src)
-{
-  bitset_windex j;
-  ebitset_elts *selts;
-  ebitset_elts *delts;
-  bitset_windex ssize;
-  bitset_windex dsize;
-
-  selts = EBITSET_ELTS (src);
-  delts = EBITSET_ELTS (dst);
-
-  ssize = EBITSET_SIZE (src);
-  dsize = EBITSET_SIZE (dst);
-
-  for (j = 0; j < ssize; j++)
-    {
-      unsigned int i;
-      ebitset_elt *selt;
-      ebitset_elt *delt;
-
-      selt = j < ssize ? selts[j] : 0;
-      delt = j < dsize ? delts[j] : 0;
-
-      if (!selt && !delt)
-	continue;
-
-      if (!selt)
-	selt = &ebitset_zero_elts[0];
-      if (!delt)
-	delt = &ebitset_zero_elts[0];
-
-      for (i = 0; i < EBITSET_ELT_WORDS; i++)
-	if (EBITSET_WORDS (delt)[i]
-	    != (EBITSET_WORDS (selt)[i] | EBITSET_WORDS (delt)[i]))
-	  return false;
-    }
-  return true;
-}
-
-
-/* Is DST & SRC == 0?  */
-static bool
-ebitset_disjoint_p (bitset dst, bitset src)
-{
-  bitset_windex j;
-  ebitset_elts *selts;
-  ebitset_elts *delts;
-  bitset_windex ssize;
-  bitset_windex dsize;
-
-  selts = EBITSET_ELTS (src);
-  delts = EBITSET_ELTS (dst);
-
-  ssize = EBITSET_SIZE (src);
-  dsize = EBITSET_SIZE (dst);
-
-  for (j = 0; j < ssize; j++)
-    {
-      unsigned int i;
-      ebitset_elt *selt;
-      ebitset_elt *delt;
-
-      selt = j < ssize ? selts[j] : 0;
-      delt = j < dsize ? delts[j] : 0;
-
-      if (!selt || !delt)
-	continue;
-
-      for (i = 0; i < EBITSET_ELT_WORDS; i++)
-	if ((EBITSET_WORDS (selt)[i] & EBITSET_WORDS (delt)[i]))
-	  return false;
-    }
-  return true;
-}
-
-
-
-static bool
-ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
-{
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-  bitset_windex size;
-  ebitset_elts *selts1;
-  ebitset_elts *selts2;
-  ebitset_elts *delts;
-  bitset_word *srcp1;
-  bitset_word *srcp2;
-  bitset_word *dstp;
-  bool changed = false;
-  unsigned int i;
-  bitset_windex j;
-
-  ebitset_resize (dst, max (BITSET_NBITS_ (src1), BITSET_NBITS_ (src2)));
-
-  ssize1 = EBITSET_SIZE (src1);
-  ssize2 = EBITSET_SIZE (src2);
-  dsize = EBITSET_SIZE (dst);
-  size = ssize1;
-  if (size < ssize2)
-    size = ssize2;
-
-  selts1 = EBITSET_ELTS (src1);
-  selts2 = EBITSET_ELTS (src2);
-  delts = EBITSET_ELTS (dst);
-
-  for (j = 0; j < size; j++)
-    {
-      ebitset_elt *selt1;
-      ebitset_elt *selt2;
-      ebitset_elt *delt;
-
-      selt1 = j < ssize1 ? selts1[j] : 0;
-      selt2 = j < ssize2 ? selts2[j] : 0;
-      delt = j < dsize ? delts[j] : 0;
-
-      if (!selt1 && !selt2)
-	{
-	  if (delt)
-	    {
-	      changed = true;
-	      ebitset_elt_remove (dst, j);
-	    }
-	  continue;
-	}
-
-      if (!selt1)
-	selt1 = &ebitset_zero_elts[0];
-      if (!selt2)
-	selt2 = &ebitset_zero_elts[0];
-      if (!delt)
-	delt = ebitset_elt_calloc ();
-      else
-	delts[j] = 0;
-
-      srcp1 = EBITSET_WORDS (selt1);
-      srcp2 = EBITSET_WORDS (selt2);
-      dstp = EBITSET_WORDS (delt);
-      switch (op)
-	{
-	default:
-	  abort ();
-
-	case BITSET_OP_OR:
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ | *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_AND:
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ & *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_XOR:
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ ^ *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_ANDN:
-	  for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ & ~(*srcp2++);
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-	}
-
-      if (!ebitset_elt_zero_p (delt))
-	{
-	  ebitset_elt_add (dst, delt, j);
-	}
-      else
-	{
-	  ebitset_elt_free (delt);
-	}
-    }
-
-  /* If we have elements of DST left over, free them all.  */
-  for (; j < dsize; j++)
-    {
-      ebitset_elt *delt;
-
-      changed = true;
-
-      delt = delts[j];
-
-      if (delt)
-	ebitset_elt_remove (dst, j);
-    }
-
-  EBITSET_NONZERO_SET (dst);
-  return changed;
-}
-
-
-static bool
-ebitset_and_cmp (bitset dst, bitset src1, bitset src2)
-{
-  bool changed;
-
-  if (EBITSET_ZERO_P (src2))
-    {
-      ebitset_weed (dst);
-      changed = EBITSET_ZERO_P (dst);
-      ebitset_zero (dst);
-      return changed;
-    }
-  else if (EBITSET_ZERO_P (src1))
-    {
-      ebitset_weed (dst);
-      changed = EBITSET_ZERO_P (dst);
-      ebitset_zero (dst);
-      return changed;
-    }
-  return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
-}
-
-
-static void
-ebitset_and (bitset dst, bitset src1, bitset src2)
-{
-  ebitset_and_cmp (dst, src1, src2);
-}
-
-
-static bool
-ebitset_andn_cmp (bitset dst, bitset src1, bitset src2)
-{
-  bool changed;
-
-  if (EBITSET_ZERO_P (src2))
-    {
-      return ebitset_copy_cmp (dst, src1);
-    }
-  else if (EBITSET_ZERO_P (src1))
-    {
-      ebitset_weed (dst);
-      changed = EBITSET_ZERO_P (dst);
-      ebitset_zero (dst);
-      return changed;
-    }
-  return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
-}
-
-
-static void
-ebitset_andn (bitset dst, bitset src1, bitset src2)
-{
-  ebitset_andn_cmp (dst, src1, src2);
-}
-
-
-static bool
-ebitset_or_cmp (bitset dst, bitset src1, bitset src2)
-{
-  if (EBITSET_ZERO_P (src2))
-    {
-      return ebitset_copy_cmp (dst, src1);
-    }
-  else if (EBITSET_ZERO_P (src1))
-    {
-      return ebitset_copy_cmp (dst, src2);
-    }
-  return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
-}
-
-
-static void
-ebitset_or (bitset dst, bitset src1, bitset src2)
-{
-  ebitset_or_cmp (dst, src1, src2);
-}
-
-
-static bool
-ebitset_xor_cmp (bitset dst, bitset src1, bitset src2)
-{
-  if (EBITSET_ZERO_P (src2))
-    {
-      return ebitset_copy_cmp (dst, src1);
-    }
-  else if (EBITSET_ZERO_P (src1))
-    {
-      return ebitset_copy_cmp (dst, src2);
-    }
-  return ebitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
-}
-
-
-static void
-ebitset_xor (bitset dst, bitset src1, bitset src2)
-{
-  ebitset_xor_cmp (dst, src1, src2);
-}
-
-
-static void
-ebitset_copy (bitset dst, bitset src)
-{
-  if (BITSET_COMPATIBLE_ (dst, src))
-      ebitset_copy_ (dst, src);
-  else
-      bitset_copy_ (dst, src);
-}
-
-
-/* Vector of operations for linked-list bitsets.  */
-struct bitset_vtable ebitset_vtable = {
-  ebitset_set,
-  ebitset_reset,
-  bitset_toggle_,
-  ebitset_test,
-  ebitset_resize,
-  bitset_size_,
-  bitset_count_,
-  ebitset_empty_p,
-  ebitset_ones,
-  ebitset_zero,
-  ebitset_copy,
-  ebitset_disjoint_p,
-  ebitset_equal_p,
-  ebitset_not,
-  ebitset_subset_p,
-  ebitset_and,
-  ebitset_and_cmp,
-  ebitset_andn,
-  ebitset_andn_cmp,
-  ebitset_or,
-  ebitset_or_cmp,
-  ebitset_xor,
-  ebitset_xor_cmp,
-  bitset_and_or_,
-  bitset_and_or_cmp_,
-  bitset_andn_or_,
-  bitset_andn_or_cmp_,
-  bitset_or_and_,
-  bitset_or_and_cmp_,
-  ebitset_list,
-  ebitset_list_reverse,
-  ebitset_free,
-  BITSET_TABLE
-};
-
-
-/* Return size of initial structure.  */
-size_t
-ebitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
-{
-  return sizeof (struct ebitset_struct);
-}
-
-
-/* Initialize a bitset.  */
-
-bitset
-ebitset_init (bitset bset, bitset_bindex n_bits)
-{
-  bset->b.vtable = &ebitset_vtable;
-
-  bset->b.csize = EBITSET_ELT_WORDS;
-
-  EBITSET_ZERO_SET (bset);
-
-  EBITSET_ASIZE (bset) = 0;
-  EBITSET_ELTS (bset) = 0;
-  ebitset_resize (bset, n_bits);
-
-  return bset;
-}
-
-
-void
-ebitset_release_memory (void)
-{
-  ebitset_free_list = 0;
-  if (ebitset_obstack_init)
-    {
-      ebitset_obstack_init = false;
-      obstack_free (&ebitset_obstack, NULL);
-    }
-}
diff --git a/lib/ebitset.h b/lib/ebitset.h
deleted file mode 100644
index a25ed28..0000000
--- a/lib/ebitset.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Functions to support ebitsets.
-
-   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 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   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
-
-#include "bitset.h"
-
-extern size_t ebitset_bytes (bitset_bindex);
-
-extern bitset ebitset_init (bitset, bitset_bindex);
-
-extern void ebitset_release_memory (void);
-
-#endif
diff --git a/lib/errno.in.h b/lib/errno.in.h
index f9612c3..3bd27f1 100644
--- a/lib/errno.in.h
+++ b/lib/errno.in.h
@@ -1,6 +1,6 @@
 /* A POSIX-like <errno.h>.
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_ERRNO_H
 
@@ -30,7 +30,7 @@
 
 
 /* On native Windows platforms, many macros are not defined.  */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if defined _WIN32 && ! defined __CYGWIN__
 
 /* These are the same values as defined by MSVC 10, for interoperability.  */
 
@@ -248,7 +248,7 @@
        interoperability.  */
 #   define EOWNERDEAD      58
 #   define ENOTRECOVERABLE 59
-#  elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  elif 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
diff --git a/lib/error.c b/lib/error.c
index 7d2bc71..f8ab668 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -1,5 +1,5 @@
 /* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1990-1998, 2000-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
 
@@ -39,6 +39,11 @@
 # include <stdint.h>
 # include <wchar.h>
 # define mbsrtowcs __mbsrtowcs
+# define USE_UNLOCKED_IO 0
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b)
+# define _GL_ARG_NONNULL(a)
+#else
+# include "getprogname.h"
 #endif
 
 #if USE_UNLOCKED_IO
@@ -72,14 +77,14 @@
 extern void __error_at_line (int status, int errnum, const char *file_name,
                              unsigned int line_number, const char *message,
                              ...)
-     __attribute__ ((__format__ (__printf__, 5, 6)));;
+     __attribute__ ((__format__ (__printf__, 5, 6)));
 # define error __error
 # define error_at_line __error_at_line
 
 # include <libio/iolibio.h>
-# define fflush(s) INTUSE(_IO_fflush) (s)
+# define fflush(s) _IO_fflush (s)
 # undef putc
-# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
+# define putc(c, fp) _IO_putc (c, fp)
 
 # include <bits/libc-lock.h>
 
@@ -88,35 +93,37 @@
 # include <fcntl.h>
 # include <unistd.h>
 
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if 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"
+#  if GNULIB_MSVC_NOTHROW
+#   include "msvc-nothrow.h"
+#  else
+#   include <io.h>
+#  endif
 # endif
 
 /* The gnulib override of fcntl is not needed in this file.  */
 # undef fcntl
 
-# if !HAVE_DECL_STRERROR_R
+# if !(GNULIB_STRERROR_R_POSIX || 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 ();
+char *strerror_r (int errnum, char *buf, size_t buflen);
 #  else
-int strerror_r ();
+int strerror_r (int errnum, char *buf, size_t buflen);
 #  endif
 # endif
 
-/* The calling program should define program_name and set it to the
-   name of the executing program.  */
-extern char *program_name;
+# define program_name getprogname ()
 
-# if HAVE_STRERROR_R || defined strerror_r
+# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r
 #  define __strerror_r strerror_r
-# endif /* HAVE_STRERROR_R || defined strerror_r */
+# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */
 #endif  /* not _LIBC */
 
 #if !_LIBC
@@ -124,7 +131,7 @@
 static int
 is_open (int fd)
 {
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if 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
@@ -169,9 +176,9 @@
 {
   char const *s;
 
-#if defined HAVE_STRERROR_R || _LIBC
+#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R
   char errbuf[1024];
-# if STRERROR_R_CHAR_P || _LIBC
+# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P)
   s = __strerror_r (errnum, errbuf, sizeof errbuf);
 # else
   if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
@@ -195,13 +202,12 @@
 #endif
 }
 
-static void
+static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))
 error_tail (int status, int errnum, const char *message, va_list args)
 {
 #if _LIBC
   if (_IO_fwide (stderr, 0) > 0)
     {
-# define ALLOCA_LIMIT 2000
       size_t len = strlen (message) + 1;
       wchar_t *wmessage = NULL;
       mbstate_t st;
@@ -237,7 +243,7 @@
           if (res != len)
             break;
 
-          if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+          if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0))
             {
               /* This really should not happen if everything is fine.  */
               res = (size_t) -1;
@@ -266,7 +272,6 @@
   else
 #endif
     vfprintf (stderr, message, args);
-  va_end (args);
 
   ++error_message_count;
   if (errnum)
@@ -316,6 +321,7 @@
 
   va_start (args, message);
   error_tail (status, errnum, message, args);
+  va_end (args);
 
 #ifdef _LIBC
   _IO_funlockfile (stderr);
@@ -342,7 +348,10 @@
 
       if (old_line_number == line_number
           && (file_name == old_file_name
-              || strcmp (old_file_name, file_name) == 0))
+              || (old_file_name != NULL
+                  && file_name != NULL
+                  && strcmp (old_file_name, file_name) == 0)))
+
         /* Simply return and print nothing.  */
         return;
 
@@ -374,15 +383,16 @@
     }
 
 #if _LIBC
-  __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ",
+  __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ",
               file_name, line_number);
 #else
-  fprintf (stderr, file_name != NULL ? "%s:%d: " : " ",
+  fprintf (stderr, file_name != NULL ? "%s:%u: " : " ",
            file_name, line_number);
 #endif
 
   va_start (args, message);
   error_tail (status, errnum, message, args);
+  va_end (args);
 
 #ifdef _LIBC
   _IO_funlockfile (stderr);
diff --git a/lib/error.h b/lib/error.h
index 9c2cb8b..3759f8a 100644
--- a/lib/error.h
+++ b/lib/error.h
@@ -1,5 +1,5 @@
 /* Declaration for error-reporting function
-   Copyright (C) 1995-1997, 2003, 2006, 2008-2012 Free Software Foundation,
+   Copyright (C) 1995-1997, 2003, 2006, 2008-2019 Free Software Foundation,
    Inc.
    This file is part of the GNU C Library.
 
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _ERROR_H
 #define _ERROR_H 1
@@ -31,6 +31,16 @@
 # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
 #endif
 
+/* On mingw, the flavor of printf depends on whether the extensions module
+ * is in use; the check for <stdio.h> determines the witness macro.  */
+#ifndef _GL_ATTRIBUTE_SPEC_PRINTF
+# if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+#  define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__
+# else
+#  define _GL_ATTRIBUTE_SPEC_PRINTF __printf__
+# endif
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -40,11 +50,11 @@
    If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */
 
 extern void error (int __status, int __errnum, const char *__format, ...)
-     _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
+     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4));
 
 extern void error_at_line (int __status, int __errnum, const char *__fname,
                            unsigned int __lineno, const char *__format, ...)
-     _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6));
+     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_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
diff --git a/lib/exitfail.c b/lib/exitfail.c
index fdd674c..69b3513 100644
--- a/lib/exitfail.c
+++ b/lib/exitfail.c
@@ -1,6 +1,6 @@
 /* Failure exit status
 
-   Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/exitfail.h b/lib/exitfail.h
index 074f212..480ad1a 100644
--- a/lib/exitfail.h
+++ b/lib/exitfail.h
@@ -1,6 +1,6 @@
 /* Failure exit status
 
-   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2019 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
@@ -13,6 +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.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 extern int volatile exit_failure;
diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c
index 27e9d82..c9153f1 100644
--- a/lib/fatal-signal.c
+++ b/lib/fatal-signal.c
@@ -1,5 +1,5 @@
 /* Emergency actions in case of a fatal signal.
-   Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
@@ -107,7 +107,7 @@
 /* ========================================================================= */
 
 
-typedef void (*action_t) (void);
+typedef _GL_ASYNC_SAFE void (*action_t) (int sig);
 
 /* Type of an entry in the actions array.
    The 'action' field is accessed from within the fatal_signal_handler(),
@@ -131,7 +131,7 @@
 
 
 /* Uninstall the handlers.  */
-static void
+static _GL_ASYNC_SAFE void
 uninstall_handlers (void)
 {
   size_t i;
@@ -148,7 +148,7 @@
 
 
 /* The signal handler.  It gets called asynchronously.  */
-static void
+static _GL_ASYNC_SAFE void
 fatal_signal_handler (int sig)
 {
   for (;;)
@@ -162,7 +162,7 @@
       actions_count = n;
       action = actions[n].action;
       /* Execute the action.  */
-      action ();
+      action (sig);
     }
 
   /* Now execute the signal's default action.
@@ -284,3 +284,20 @@
   init_fatal_signal_set ();
   sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL);
 }
+
+
+unsigned int
+get_fatal_signals (int signals[64])
+{
+  init_fatal_signal_set ();
+
+  {
+    int *p = signals;
+    size_t i;
+
+    for (i = 0; i < num_fatal_signals; i++)
+      if (fatal_signals[i] >= 0)
+        *p++ = fatal_signals[i];
+    return p - signals;
+  }
+}
diff --git a/lib/fatal-signal.h b/lib/fatal-signal.h
index f6628d6..8ac57cf 100644
--- a/lib/fatal-signal.h
+++ b/lib/fatal-signal.h
@@ -1,5 +1,5 @@
 /* Emergency actions in case of a fatal signal.
-   Copyright (C) 2003-2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003-2004, 2009-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #ifdef __cplusplus
@@ -36,7 +36,8 @@
    occurs.
 
    Restrictions for the cleanup function:
-     - The cleanup function can do all kinds of system calls.
+     - The cleanup function can do all kinds of system calls.  It may also
+       modify (clobber) errno.
      - 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
@@ -51,7 +52,7 @@
    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));
+extern void at_fatal_signal (_GL_ASYNC_SAFE void (*function) (int sig));
 
 
 /* Sometimes it is necessary to block the usually fatal signals while the
@@ -71,6 +72,12 @@
 extern void unblock_fatal_signals (void);
 
 
+/* Return the list of signals that block_fatal_signals/unblock_fatal_signals
+   would block or unblock.
+   Fills signals[0..count-1] and returns count.  */
+extern unsigned int get_fatal_signals (int signals[64]);
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/fcntl.c b/lib/fcntl.c
index 3dfb6b7..a3ffaa6 100644
--- a/lib/fcntl.c
+++ b/lib/fcntl.c
@@ -1,6 +1,6 @@
 /* Provide file descriptor control.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Eric Blake <ebb9@byu.net>.  */
 
@@ -25,20 +25,25 @@
 #include <errno.h>
 #include <limits.h>
 #include <stdarg.h>
+#include <stdlib.h>
 #include <unistd.h>
 
-#if !HAVE_FCNTL
-# define rpl_fcntl fcntl
+#ifdef __KLIBC__
+# define INCL_DOS
+# include <os2.h>
 #endif
-#undef fcntl
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if 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"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 /* Upper bound on getdtablesize().  See lib/getdtablesize.c.  */
 # define OPEN_MAX_MAX 0x10000
@@ -89,8 +94,25 @@
                             inherit,                /* InheritHandle */
                             DUPLICATE_SAME_ACCESS)) /* Options */
         {
-          /* TODO: Translate GetLastError () into errno.  */
-          errno = EMFILE;
+          switch (GetLastError ())
+            {
+              case ERROR_TOO_MANY_OPEN_FILES:
+                errno = EMFILE;
+                break;
+              case ERROR_INVALID_HANDLE:
+              case ERROR_INVALID_TARGET_HANDLE:
+              case ERROR_DIRECT_ACCESS_HANDLE:
+                errno = EBADF;
+                break;
+              case ERROR_INVALID_PARAMETER:
+              case ERROR_INVALID_FUNCTION:
+              case ERROR_INVALID_ACCESS:
+                errno = EINVAL;
+                break;
+              default:
+                errno = EACCES;
+                break;
+            }
           result = -1;
           break;
         }
@@ -98,7 +120,6 @@
       if (duplicated_fd < 0)
         {
           CloseHandle (new_handle);
-          errno = EMFILE;
           result = -1;
           break;
         }
@@ -146,6 +167,18 @@
 }
 #endif /* W32 */
 
+/* Forward declarations, because we '#undef fcntl' in the middle of this
+   compilation unit.  */
+/* Our implementation of fcntl (fd, F_DUPFD, target).  */
+static int rpl_fcntl_DUPFD (int fd, int target);
+/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target).  */
+static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target);
+#ifdef __KLIBC__
+/* Adds support for fcntl on directories.  */
+static int klibc_fcntl (int fd, int action, /* arg */...);
+#endif
+
+
 /* 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
@@ -166,110 +199,35 @@
    return -1 and set errno.  */
 
 int
-rpl_fcntl (int fd, int action, /* arg */...)
+fcntl (int fd, int action, /* arg */...)
+#undef fcntl
+#ifdef __KLIBC__
+# define fcntl klibc_fcntl
+#endif
 {
   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);
+        result = rpl_fcntl_DUPFD (fd, target);
         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);
+        result = rpl_fcntl_DUPFD_CLOEXEC (fd, target);
         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__
+# if defined _WIN32 && ! defined __CYGWIN__
         HANDLE handle = (HANDLE) _get_osfhandle (fd);
         DWORD flags;
         if (handle == INVALID_HANDLE_VALUE
@@ -298,8 +256,183 @@
     default:
       {
 #if HAVE_FCNTL
-        void *p = va_arg (arg, void *);
-        result = fcntl (fd, action, p);
+        switch (action)
+          {
+          #ifdef F_BARRIERFSYNC                  /* macOS */
+          case F_BARRIERFSYNC:
+          #endif
+          #ifdef F_CHKCLEAN                      /* macOS */
+          case F_CHKCLEAN:
+          #endif
+          #ifdef F_CLOSEM                        /* NetBSD, HP-UX */
+          case F_CLOSEM:
+          #endif
+          #ifdef F_FLUSH_DATA                    /* macOS */
+          case F_FLUSH_DATA:
+          #endif
+          #ifdef F_FREEZE_FS                     /* macOS */
+          case F_FREEZE_FS:
+          #endif
+          #ifdef F_FULLFSYNC                     /* macOS */
+          case F_FULLFSYNC:
+          #endif
+          #ifdef F_GETCONFINED                   /* macOS */
+          case F_GETCONFINED:
+          #endif
+          #ifdef F_GETDEFAULTPROTLEVEL           /* macOS */
+          case F_GETDEFAULTPROTLEVEL:
+          #endif
+          #ifdef F_GETFD                         /* POSIX */
+          case F_GETFD:
+          #endif
+          #ifdef F_GETFL                         /* POSIX */
+          case F_GETFL:
+          #endif
+          #ifdef F_GETLEASE                      /* Linux */
+          case F_GETLEASE:
+          #endif
+          #ifdef F_GETNOSIGPIPE                  /* macOS */
+          case F_GETNOSIGPIPE:
+          #endif
+          #ifdef F_GETOWN                        /* POSIX */
+          case F_GETOWN:
+          #endif
+          #ifdef F_GETPIPE_SZ                    /* Linux */
+          case F_GETPIPE_SZ:
+          #endif
+          #ifdef F_GETPROTECTIONCLASS            /* macOS */
+          case F_GETPROTECTIONCLASS:
+          #endif
+          #ifdef F_GETPROTECTIONLEVEL            /* macOS */
+          case F_GETPROTECTIONLEVEL:
+          #endif
+          #ifdef F_GET_SEALS                     /* Linux */
+          case F_GET_SEALS:
+          #endif
+          #ifdef F_GETSIG                        /* Linux */
+          case F_GETSIG:
+          #endif
+          #ifdef F_MAXFD                         /* NetBSD */
+          case F_MAXFD:
+          #endif
+          #ifdef F_RECYCLE                       /* macOS */
+          case F_RECYCLE:
+          #endif
+          #ifdef F_SETFIFOENH                    /* HP-UX */
+          case F_SETFIFOENH:
+          #endif
+          #ifdef F_THAW_FS                       /* macOS */
+          case F_THAW_FS:
+          #endif
+            /* These actions take no argument.  */
+            result = fcntl (fd, action);
+            break;
+
+          #ifdef F_ADD_SEALS                     /* Linux */
+          case F_ADD_SEALS:
+          #endif
+          #ifdef F_BADFD                         /* Solaris */
+          case F_BADFD:
+          #endif
+          #ifdef F_CHECK_OPENEVT                 /* macOS */
+          case F_CHECK_OPENEVT:
+          #endif
+          #ifdef F_DUP2FD                        /* FreeBSD, AIX, Solaris */
+          case F_DUP2FD:
+          #endif
+          #ifdef F_DUP2FD_CLOEXEC                /* FreeBSD, Solaris */
+          case F_DUP2FD_CLOEXEC:
+          #endif
+          #ifdef F_DUP2FD_CLOFORK                /* Solaris */
+          case F_DUP2FD_CLOFORK:
+          #endif
+          #ifdef F_DUPFD                         /* POSIX */
+          case F_DUPFD:
+          #endif
+          #ifdef F_DUPFD_CLOEXEC                 /* POSIX */
+          case F_DUPFD_CLOEXEC:
+          #endif
+          #ifdef F_DUPFD_CLOFORK                 /* Solaris */
+          case F_DUPFD_CLOFORK:
+          #endif
+          #ifdef F_GETXFL                        /* Solaris */
+          case F_GETXFL:
+          #endif
+          #ifdef F_GLOBAL_NOCACHE                /* macOS */
+          case F_GLOBAL_NOCACHE:
+          #endif
+          #ifdef F_MAKECOMPRESSED                /* macOS */
+          case F_MAKECOMPRESSED:
+          #endif
+          #ifdef F_MOVEDATAEXTENTS               /* macOS */
+          case F_MOVEDATAEXTENTS:
+          #endif
+          #ifdef F_NOCACHE                       /* macOS */
+          case F_NOCACHE:
+          #endif
+          #ifdef F_NODIRECT                      /* macOS */
+          case F_NODIRECT:
+          #endif
+          #ifdef F_NOTIFY                        /* Linux */
+          case F_NOTIFY:
+          #endif
+          #ifdef F_OPLKACK                       /* IRIX */
+          case F_OPLKACK:
+          #endif
+          #ifdef F_OPLKREG                       /* IRIX */
+          case F_OPLKREG:
+          #endif
+          #ifdef F_RDAHEAD                       /* macOS */
+          case F_RDAHEAD:
+          #endif
+          #ifdef F_SETBACKINGSTORE               /* macOS */
+          case F_SETBACKINGSTORE:
+          #endif
+          #ifdef F_SETCONFINED                   /* macOS */
+          case F_SETCONFINED:
+          #endif
+          #ifdef F_SETFD                         /* POSIX */
+          case F_SETFD:
+          #endif
+          #ifdef F_SETFL                         /* POSIX */
+          case F_SETFL:
+          #endif
+          #ifdef F_SETLEASE                      /* Linux */
+          case F_SETLEASE:
+          #endif
+          #ifdef F_SETNOSIGPIPE                  /* macOS */
+          case F_SETNOSIGPIPE:
+          #endif
+          #ifdef F_SETOWN                        /* POSIX */
+          case F_SETOWN:
+          #endif
+          #ifdef F_SETPIPE_SZ                    /* Linux */
+          case F_SETPIPE_SZ:
+          #endif
+          #ifdef F_SETPROTECTIONCLASS            /* macOS */
+          case F_SETPROTECTIONCLASS:
+          #endif
+          #ifdef F_SETSIG                        /* Linux */
+          case F_SETSIG:
+          #endif
+          #ifdef F_SINGLE_WRITER                 /* macOS */
+          case F_SINGLE_WRITER:
+          #endif
+            /* These actions take an 'int' argument.  */
+            {
+              int x = va_arg (arg, int);
+              result = fcntl (fd, action, x);
+            }
+            break;
+
+          default:
+            /* Other actions take a pointer argument.  */
+            {
+              void *p = va_arg (arg, void *);
+              result = fcntl (fd, action, p);
+            }
+            break;
+          }
 #else
         errno = EINVAL;
 #endif
@@ -309,3 +442,186 @@
   va_end (arg);
   return result;
 }
+
+static int
+rpl_fcntl_DUPFD (int fd, int target)
+{
+  int result;
+#if !HAVE_FCNTL
+  result = dupfd (fd, target, 0);
+#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
+  /* Detect invalid target; needed for cygwin 1.5.x.  */
+  if (target < 0 || getdtablesize () <= target)
+    {
+      result = -1;
+      errno = EINVAL;
+    }
+  else
+    {
+      /* Haiku alpha 2 loses fd flags on original.  */
+      int flags = fcntl (fd, F_GETFD);
+      if (flags < 0)
+        result = -1;
+      else
+        {
+          result = fcntl (fd, F_DUPFD, 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
+        }
+    }
+#else
+  result = fcntl (fd, F_DUPFD, target);
+#endif
+  return result;
+}
+
+static int
+rpl_fcntl_DUPFD_CLOEXEC (int fd, int target)
+{
+  int result;
+#if !HAVE_FCNTL
+  result = dupfd (fd, target, O_CLOEXEC);
+#else /* HAVE_FCNTL */
+# if defined __HAIKU__
+  /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets
+     the FD_CLOEXEC flag on fd, not on target.  Therefore avoid the
+     system fcntl in this case.  */
+#  define have_dupfd_cloexec -1
+# else
+  /* 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, F_DUPFD_CLOEXEC, 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_DUPFD (fd, target);
+          if (result >= 0)
+            have_dupfd_cloexec = -1;
+        }
+    }
+  else
+# endif
+    result = rpl_fcntl_DUPFD (fd, 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;
+        }
+    }
+#endif /* HAVE_FCNTL */
+  return result;
+}
+
+#undef fcntl
+
+#ifdef __KLIBC__
+
+static int
+klibc_fcntl (int fd, int action, /* arg */...)
+{
+  va_list arg_ptr;
+  int arg;
+  struct stat sbuf;
+  int result;
+
+  va_start (arg_ptr, action);
+  arg = va_arg (arg_ptr, int);
+  result = fcntl (fd, action, arg);
+  /* EPERM for F_DUPFD, ENOTSUP for others */
+  if (result == -1 && (errno == EPERM || errno == ENOTSUP)
+      && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
+    {
+      ULONG ulMode;
+
+      switch (action)
+        {
+        case F_DUPFD:
+          /* Find available fd */
+          while (fcntl (arg, F_GETFL) != -1 || errno != EBADF)
+            arg++;
+
+          result = dup2 (fd, arg);
+          break;
+
+        /* Using underlying APIs is right ? */
+        case F_GETFD:
+          if (DosQueryFHState (fd, &ulMode))
+            break;
+
+          result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0;
+          break;
+
+        case F_SETFD:
+          if (arg & ~FD_CLOEXEC)
+            break;
+
+          if (DosQueryFHState (fd, &ulMode))
+            break;
+
+          if (arg & FD_CLOEXEC)
+            ulMode |= OPEN_FLAGS_NOINHERIT;
+          else
+            ulMode &= ~OPEN_FLAGS_NOINHERIT;
+
+          /* Filter supported flags.  */
+          ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR
+                     | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT);
+
+          if (DosSetFHState (fd, ulMode))
+            break;
+
+          result = 0;
+          break;
+
+        case F_GETFL:
+          result = 0;
+          break;
+
+        case F_SETFL:
+          if (arg != 0)
+            break;
+
+          result = 0;
+          break;
+
+        default:
+          errno = EINVAL;
+          break;
+        }
+    }
+
+  va_end (arg_ptr);
+
+  return result;
+}
+
+#endif
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
index 604c31b..abe7993 100644
--- a/lib/fcntl.in.h
+++ b/lib/fcntl.in.h
@@ -1,6 +1,6 @@
 /* Like <fcntl.h>, but with non-working flags defined to 0.
 
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Paul Eggert */
 
@@ -34,11 +34,17 @@
    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)))
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
 # include <sys/stat.h>
 #endif
 #@INCLUDE_NEXT@ @NEXT_FCNTL_H@
 
+/* Native Windows platforms declare open(), creat() in <io.h>.  */
+#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
 #else
 /* Normal invocation convention.  */
 
@@ -53,12 +59,18 @@
    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)))
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__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@
 
+/* Native Windows platforms declare open(), creat() in <io.h>.  */
+#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
 #ifndef _@GUARD_PREFIX@_FCNTL_H
 #define _@GUARD_PREFIX@_FCNTL_H
 
@@ -66,12 +78,6 @@
 # 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.  */
 
@@ -82,6 +88,26 @@
 
 /* Declare overridden functions.  */
 
+#if @GNULIB_CREAT@
+# if @REPLACE_CREAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef creat
+#   define creat rpl_creat
+#  endif
+_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode)
+                             _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (creat);
+#elif defined GNULIB_POSIXCHECK
+# undef creat
+/* Assume creat is always declared.  */
+_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - "
+                 "use gnulib module creat for portability");
+#endif
+
 #if @GNULIB_FCNTL@
 # if @REPLACE_FCNTL@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -186,6 +212,22 @@
 
 /* Fix up the O_* macros.  */
 
+/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
+   to values outside 'int' range, so omit these misdefinitions.
+   But avoid namespace pollution on non-AIX systems.  */
+#ifdef _AIX
+# include <limits.h>
+# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
+#  undef O_CLOEXEC
+# endif
+# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
+#  undef O_NOFOLLOW
+# endif
+# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
+#  undef O_TTY_INIT
+# endif
+#endif
+
 #if !defined O_DIRECT && defined O_DIRECTIO
 /* Tru64 spells it 'O_DIRECTIO'.  */
 # define O_DIRECT O_DIRECTIO
@@ -197,7 +239,10 @@
 #endif
 
 #ifndef O_CLOEXEC
-# define O_CLOEXEC 0
+# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags.  */
+# define GNULIB_defined_O_CLOEXEC 1
+#else
+# define GNULIB_defined_O_CLOEXEC 0
 #endif
 
 #ifndef O_DIRECT
diff --git a/lib/fd-hook.c b/lib/fd-hook.c
index 8f4ffe2..7879119 100644
--- a/lib/fd-hook.c
+++ b/lib/fd-hook.c
@@ -1,5 +1,5 @@
-/* Hook for making making file descriptor functions close(), ioctl() extensible.
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+/* Hook for making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2019 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
@@ -13,7 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/fd-hook.h b/lib/fd-hook.h
index 721e9ad..bf07f00 100644
--- a/lib/fd-hook.h
+++ b/lib/fd-hook.h
@@ -1,5 +1,5 @@
-/* Hook for making making file descriptor functions close(), ioctl() extensible.
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+/* Hook for making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #ifndef FD_HOOK_H
diff --git a/lib/fd-safer-flag.c b/lib/fd-safer-flag.c
index b090edf..7c026ef 100644
--- a/lib/fd-safer-flag.c
+++ b/lib/fd-safer-flag.c
@@ -1,7 +1,7 @@
 /* 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.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert and Eric Blake.  */
 
diff --git a/lib/fd-safer.c b/lib/fd-safer.c
index 052837b..b5113e1 100644
--- a/lib/fd-safer.c
+++ b/lib/fd-safer.c
@@ -1,6 +1,6 @@
 /* Return a safer copy of a file descriptor.
 
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/filename.h b/lib/filename.h
new file mode 100644
index 0000000..3ba3105
--- /dev/null
+++ b/lib/filename.h
@@ -0,0 +1,54 @@
+/* Basic filename support macros.
+   Copyright (C) 2001-2004, 2007-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FILENAME_H
+#define _FILENAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
+                        it may be concatenated to a directory pathname.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Native Windows, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILE_SYSTEM_PREFIX_LEN(P) 0
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FILENAME_H */
diff --git a/lib/float+.h b/lib/float+.h
index 75e56a1..5af861f 100644
--- a/lib/float+.h
+++ b/lib/float+.h
@@ -1,5 +1,5 @@
 /* Supplemental information about the floating-point formats.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2007.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _FLOATPLUS_H
 #define _FLOATPLUS_H
diff --git a/lib/float.c b/lib/float.c
index ea31866..8872deb 100644
--- a/lib/float.c
+++ b/lib/float.c
@@ -1,5 +1,5 @@
 /* Auxiliary definitions for <float.h>.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/float.in.h b/lib/float.in.h
index b420510..ba094a8 100644
--- a/lib/float.in.h
+++ b/lib/float.in.h
@@ -1,6 +1,6 @@
 /* A correct <float.h>.
 
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_FLOAT_H
 
@@ -62,8 +62,8 @@
 
 /* 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__
+   <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>.  */
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
 /* Number of mantissa units, in base FLT_RADIX.  */
 # undef LDBL_MANT_DIG
 # define LDBL_MANT_DIG   64
@@ -81,7 +81,7 @@
 # define LDBL_MAX_EXP    16384
 /* Minimum positive normalized number.  */
 # undef LDBL_MIN
-# define LDBL_MIN        3.3621031431120935E-4932L /* = 0x1p-16382L */
+# define LDBL_MIN        3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */
 /* Maximum representable finite number.  */
 # undef LDBL_MAX
 /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }.
diff --git a/lib/fopen-safer.c b/lib/fopen-safer.c
index 38b0093..5d4a4a9 100644
--- a/lib/fopen-safer.c
+++ b/lib/fopen-safer.c
@@ -1,6 +1,6 @@
 /* Invoke fopen, but avoid some glitches.
 
-   Copyright (C) 2001, 2004-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2004-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/fopen.c b/lib/fopen.c
index 3408192..69ba5b9 100644
--- a/lib/fopen.c
+++ b/lib/fopen.c
@@ -1,5 +1,5 @@
 /* Open a stream to a file.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
@@ -47,26 +47,23 @@
 FILE *
 rpl_fopen (const char *filename, const char *mode)
 {
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if 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."
+  /* Fail if the mode requires write access and the filename ends in a slash,
+     as POSIX says such a filename must name a directory
+     <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
+       "A pathname that contains at least one non-<slash> character and that
+        ends with one or more trailing <slash> characters shall not be resolved
+        successfully unless the last pathname component before the trailing
+        <slash> characters names an existing directory"
      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.
+     <https://pubs.opengroup.org/onlinepubs/9699919799/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.  */
   {
diff --git a/lib/fpending.c b/lib/fpending.c
index 2591d53..3c01285 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -1,5 +1,5 @@
 /* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006-2007, 2009-2012 Free Software Foundation,
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,18 +13,50 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Jim Meyering. */
 
 #include <config.h>
 
+/* Specification.  */
 #include "fpending.h"
 
+#include "stdio-impl.h"
+
+/* This file is not used on systems that already have the __fpending function,
+   namely glibc >= 2.2, Solaris >= 7, Android API >= 23.  */
+
 /* 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;
+  /* 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_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
+  /* GNU libc, BeOS, Haiku, Linux libc5 */
+  return fp->_IO_write_ptr - fp->_IO_write_base;
+#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+  return fp->_p - fp->_bf._base;
+#elif defined __EMX__                /* emx+gcc */
+  return fp->_ptr - fp->_buffer;
+#elif defined __minix                /* Minix */
+  return fp_->_ptr - fp_->_buf;
+#elif defined _IOERR                 /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
+  return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0);
+#elif defined __UCLIBC__             /* uClibc */
+  return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0);
+#elif defined __QNX__                /* QNX */
+  return (fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0);
+#elif defined __MINT__               /* Atari FreeMiNT */
+  return fp->__bufp - fp->__buffer;
+#elif defined EPLAN9                 /* Plan9 */
+  return fp->wp - fp->buf;
+#else
+# error "Please port gnulib fpending.c to your platform!"
+  return 1;
+#endif
 }
diff --git a/lib/fpending.h b/lib/fpending.h
index 0365287..097a3ef 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -1,6 +1,6 @@
 /* Declare __fpending.
 
-   Copyright (C) 2000, 2003, 2005-2006, 2009-2012 Free Software Foundation,
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,17 +14,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, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
    Written by Jim Meyering.  */
 
 #include <stddef.h>
 #include <stdio.h>
+#if HAVE_STDIO_EXT_H
+# include <stdio_ext.h>
+#endif
 
-#if HAVE_DECL___FPENDING
-# if HAVE_STDIO_EXT_H
-#  include <stdio_ext.h>
-# endif
-#else
-size_t __fpending (FILE *);
+#if !HAVE_DECL___FPENDING
+size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE;
 #endif
diff --git a/lib/fprintf.c b/lib/fprintf.c
index b1db5f6..ec5c415 100644
--- a/lib/fprintf.c
+++ b/lib/fprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to a stream.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/fpucw.h b/lib/fpucw.h
index 23e4c81..91a1cbe 100644
--- a/lib/fpucw.h
+++ b/lib/fpucw.h
@@ -1,5 +1,5 @@
-/* Manipulating the FPU control word.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+/* Manipulating the FPU control word.  -*- coding: utf-8 -*-
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2007.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _FPUCW_H
 #define _FPUCW_H
@@ -35,15 +35,15 @@
 
    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
+   https://www.linux-mips.org/pub/linux/mips/doc/ABI/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
+   See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html
    for a good explanation.
-   See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for
+   See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html
    some argumentation which setting should be the default.  */
 
 /* This header file provides the following facilities:
@@ -70,12 +70,12 @@
 # define FPU_PC_DOUBLE 0x200    /* glibc calls this _FPU_DOUBLE */
 # define FPU_PC_EXTENDED 0x300  /* glibc calls this _FPU_EXTENDED */
 
-# define GET_FPUCW() \
+# define GET_FPUCW() __extension__ \
   ({ fpucw_t _cw;                                               \
      __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw));         \
      _cw;                                                       \
    })
-# define SET_FPUCW(word) \
+# define SET_FPUCW(word) __extension__ \
   (void)({ fpucw_t _ncw = (word);                               \
            __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw));  \
          })
diff --git a/lib/frexp.c b/lib/frexp.c
index 4f5d0c0..d3f1199 100644
--- a/lib/frexp.c
+++ b/lib/frexp.c
@@ -1,5 +1,5 @@
 /* Split a double into fraction and mantissa.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and
    Bruno Haible <bruno@clisp.org>, 2007.  */
diff --git a/lib/frexpl.c b/lib/frexpl.c
index b74ceeb..820cb2d 100644
--- a/lib/frexpl.c
+++ b/lib/frexpl.c
@@ -1,5 +1,5 @@
 /* Split a 'long double' into fraction and mantissa.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/fseterr.c b/lib/fseterr.c
index 4273a46..8cd68e8 100644
--- a/lib/fseterr.c
+++ b/lib/fseterr.c
@@ -1,5 +1,5 @@
 /* Set the error indicator of a stream.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -23,21 +23,26 @@
 
 #include "stdio-impl.h"
 
+/* This file is not used on systems that have the __fseterr function,
+   namely musl libc.  */
+
 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 */
+#if defined _IO_EOF_SEEN || 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 */
+#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   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 */
+#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
   fp_->_flag |= _IOERR;
 #elif defined __UCLIBC__            /* uClibc */
   fp->__modeflags |= __FLAG_ERROR;
diff --git a/lib/fseterr.h b/lib/fseterr.h
index 16a1afe..7b57faa 100644
--- a/lib/fseterr.h
+++ b/lib/fseterr.h
@@ -1,5 +1,5 @@
 /* Set the error indicator of a stream.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _FSETERR_H
 #define _FSETERR_H
diff --git a/lib/fstat.c b/lib/fstat.c
index 0418cc6..a892b8f 100644
--- a/lib/fstat.c
+++ b/lib/fstat.c
@@ -1,5 +1,5 @@
 /* fstat() replacement.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://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
@@ -23,54 +23,45 @@
 /* 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
 
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WINDOWS_NATIVE
+#endif
+
+#if !defined WINDOWS_NATIVE
+
 static int
 orig_fstat (int fd, struct stat *buf)
 {
   return fstat (fd, buf);
 }
 
+#endif
+
 /* Specification.  */
+#ifdef __osf__
 /* 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 "sys/stat.h"
+#else
+# include <sys/stat.h>
+#endif
+
+#include "stat-time.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
+#ifdef WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
+# include "stat-w32.h"
 #endif
 
 int
@@ -84,5 +75,20 @@
     return stat (name, buf);
 #endif
 
-  return fstat_nothrow (fd, buf);
+#ifdef WINDOWS_NATIVE
+  /* Fill the fields ourselves, because the original fstat function returns
+     values for st_atime, st_mtime, st_ctime that depend on the current time
+     zone.  See
+     <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html>  */
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+
+  if (h == INVALID_HANDLE_VALUE)
+    {
+      errno = EBADF;
+      return -1;
+    }
+  return _gl_fstat_by_handle (h, NULL, buf);
+#else
+  return stat_time_normalize (orig_fstat (fd, buf), buf);
+#endif
 }
diff --git a/lib/fstrcmp.c b/lib/fstrcmp.c
new file mode 100644
index 0000000..c61eab9
--- /dev/null
+++ b/lib/fstrcmp.c
@@ -0,0 +1,248 @@
+/* Functions to make fuzzy comparisons between strings
+   Copyright (C) 1988-1989, 1992-1993, 1995, 2001-2003, 2006, 2008-2019 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 <https://www.gnu.org/licenses/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#include "fstrcmp.h"
+
+#include <string.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include "glthread/lock.h"
+#include "glthread/tls.h"
+#include "minmax.h"
+#include "xalloc.h"
+
+
+#define ELEMENT char
+#define EQUAL(x,y) ((x) == (y))
+#define OFFSET ptrdiff_t
+#define EXTRA_CONTEXT_FIELDS \
+  /* The number of edits beyond which the computation can be aborted. */ \
+  ptrdiff_t edit_count_limit; \
+  /* The number of edits (= number of elements inserted, plus the number of \
+     elements deleted), temporarily minus edit_count_limit. */ \
+  ptrdiff_t edit_count;
+#define NOTE_DELETE(ctxt, xoff) ctxt->edit_count++
+#define NOTE_INSERT(ctxt, yoff) ctxt->edit_count++
+#define EARLY_ABORT(ctxt) ctxt->edit_count > 0
+/* We don't need USE_HEURISTIC, since it is unlikely in typical uses of
+   fstrcmp().  */
+#include "diffseq.h"
+
+
+/* Because fstrcmp is typically called multiple times, attempt to minimize
+   the number of memory allocations performed.  Thus, let a call reuse the
+   memory already allocated by the previous call, if it is sufficient.
+   To make it multithread-safe, without need for a lock that protects the
+   already allocated memory, store the allocated memory per thread.  Free
+   it only when the thread exits.  */
+
+static gl_tls_key_t buffer_key; /* TLS key for a 'ptrdiff_t *' */
+static gl_tls_key_t bufmax_key; /* TLS key for a 'uintptr_t' */
+
+static void
+keys_init (void)
+{
+  gl_tls_key_init (buffer_key, free);
+  gl_tls_key_init (bufmax_key, NULL);
+  /* The per-thread initial values are NULL and 0, respectively.  */
+}
+
+/* Ensure that keys_init is called once only.  */
+gl_once_define(static, keys_init_once)
+
+
+/* In the code below, branch probabilities were measured by Ralf Wildenhues,
+   by running "msgmerge LL.po coreutils.pot" with msgmerge 0.18 for many
+   values of LL.  The probability indicates that the condition evaluates
+   to true; whether that leads to a branch or a non-branch in the code,
+   depends on the compiler's reordering of basic blocks.  */
+
+
+double
+fstrcmp_bounded (const char *string1, const char *string2, double lower_bound)
+{
+  struct context ctxt;
+  size_t xvec_length = strlen (string1);
+  size_t yvec_length = strlen (string2);
+  size_t length_sum = xvec_length + yvec_length;
+  ptrdiff_t i;
+
+  ptrdiff_t fdiag_len;
+  ptrdiff_t *buffer;
+  uintptr_t bufmax;
+
+  /* short-circuit obvious comparisons */
+  if (xvec_length == 0 || yvec_length == 0) /* Prob: 1% */
+    return length_sum == 0;
+
+  if (! (xvec_length <= length_sum
+         && length_sum <= MIN (UINTPTR_MAX, PTRDIFF_MAX) - 3))
+    xalloc_die ();
+
+  if (lower_bound > 0)
+    {
+      /* Compute a quick upper bound.
+         Each edit is an insertion or deletion of an element, hence modifies
+         the length of the sequence by at most 1.
+         Therefore, when starting from a sequence X and ending at a sequence Y,
+         with N edits,  | yvec_length - xvec_length | <= N.  (Proof by
+         induction over N.)
+         So, at the end, we will have
+           edit_count >= | xvec_length - yvec_length |.
+         and hence
+           result
+             = (xvec_length + yvec_length - edit_count)
+               / (xvec_length + yvec_length)
+             <= (xvec_length + yvec_length - | yvec_length - xvec_length |)
+                / (xvec_length + yvec_length)
+             = 2 * min (xvec_length, yvec_length) / (xvec_length + yvec_length).
+       */
+      ptrdiff_t length_min = MIN (xvec_length, yvec_length);
+      volatile double upper_bound = 2.0 * length_min / length_sum;
+
+      if (upper_bound < lower_bound) /* Prob: 74% */
+        /* Return an arbitrary value < LOWER_BOUND.  */
+        return 0.0;
+
+#if CHAR_BIT <= 8
+      /* When X and Y are both small, avoid the overhead of setting up an
+         array of size 256.  */
+      if (length_sum >= 20) /* Prob: 99% */
+        {
+          /* Compute a less quick upper bound.
+             Each edit is an insertion or deletion of a character, hence
+             modifies the occurrence count of a character by 1 and leaves the
+             other occurrence counts unchanged.
+             Therefore, when starting from a sequence X and ending at a
+             sequence Y, and denoting the occurrence count of C in X with
+             OCC (X, C), with N edits,
+               sum_C | OCC (X, C) - OCC (Y, C) | <= N.
+             (Proof by induction over N.)
+             So, at the end, we will have
+               edit_count >= sum_C | OCC (X, C) - OCC (Y, C) |,
+             and hence
+               result
+                 = (xvec_length + yvec_length - edit_count)
+                   / (xvec_length + yvec_length)
+                 <= (xvec_length + yvec_length - sum_C | OCC(X,C) - OCC(Y,C) |)
+                    / (xvec_length + yvec_length).
+           */
+          ptrdiff_t occ_diff[UCHAR_MAX + 1]; /* array C -> OCC(X,C) - OCC(Y,C) */
+          ptrdiff_t sum;
+          double dsum;
+
+          /* Determine the occurrence counts in X.  */
+          memset (occ_diff, 0, sizeof (occ_diff));
+          for (i = xvec_length - 1; i >= 0; i--)
+            occ_diff[(unsigned char) string1[i]]++;
+          /* Subtract the occurrence counts in Y.  */
+          for (i = yvec_length - 1; i >= 0; i--)
+            occ_diff[(unsigned char) string2[i]]--;
+          /* Sum up the absolute values.  */
+          sum = 0;
+          for (i = 0; i <= UCHAR_MAX; i++)
+            {
+              ptrdiff_t d = occ_diff[i];
+              sum += (d >= 0 ? d : -d);
+            }
+
+          dsum = sum;
+          upper_bound = 1.0 - dsum / length_sum;
+
+          if (upper_bound < lower_bound) /* Prob: 66% */
+            /* Return an arbitrary value < LOWER_BOUND.  */
+            return 0.0;
+        }
+#endif
+    }
+
+  /* set the info for each string.  */
+  ctxt.xvec = string1;
+  ctxt.yvec = string2;
+
+  /* Set TOO_EXPENSIVE to be approximate square root of input size,
+     bounded below by 4096.  */
+  ctxt.too_expensive = 1;
+  for (i = xvec_length + yvec_length; i != 0; i >>= 2)
+    ctxt.too_expensive <<= 1;
+  if (ctxt.too_expensive < 4096)
+    ctxt.too_expensive = 4096;
+
+  /* Allocate memory for fdiag and bdiag from a thread-local pool.  */
+  fdiag_len = length_sum + 3;
+  gl_once (keys_init_once, keys_init);
+  buffer = gl_tls_get (buffer_key);
+  bufmax = (uintptr_t) gl_tls_get (bufmax_key);
+  if (fdiag_len > bufmax)
+    {
+      /* Need more memory.  */
+      bufmax = 2 * bufmax;
+      if (fdiag_len > bufmax)
+        bufmax = fdiag_len;
+      /* Calling xrealloc would be a waste: buffer's contents does not need
+         to be preserved.  */
+      free (buffer);
+      buffer = xnmalloc (bufmax, 2 * sizeof *buffer);
+      gl_tls_set (buffer_key, buffer);
+      gl_tls_set (bufmax_key, (void *) (uintptr_t) bufmax);
+    }
+  ctxt.fdiag = buffer + yvec_length + 1;
+  ctxt.bdiag = ctxt.fdiag + fdiag_len;
+
+  /* The edit_count is only ever increased.  The computation can be aborted
+     when
+       (xvec_length + yvec_length - edit_count) / (xvec_length + yvec_length)
+       < lower_bound,
+     or equivalently
+       edit_count > (xvec_length + yvec_length) * (1 - lower_bound)
+     or equivalently
+       edit_count > floor((xvec_length + yvec_length) * (1 - lower_bound)).
+     We need to add an epsilon inside the floor(...) argument, to neutralize
+     rounding errors.  */
+  ctxt.edit_count_limit =
+    (lower_bound < 1.0
+     ? (ptrdiff_t) (length_sum * (1.0 - lower_bound + 0.000001))
+     : 0);
+
+  /* Now do the main comparison algorithm */
+  ctxt.edit_count = - ctxt.edit_count_limit;
+  if (compareseq (0, xvec_length, 0, yvec_length, 0, &ctxt)) /* Prob: 98% */
+    /* The edit_count passed the limit.  Hence the result would be
+       < lower_bound.  We can return any value < lower_bound instead.  */
+    return 0.0;
+  ctxt.edit_count += ctxt.edit_count_limit;
+
+  /* The result is
+        ((number of chars in common) / (average length of the strings)).
+     The numerator is
+        = xvec_length - (number of calls to NOTE_DELETE)
+        = yvec_length - (number of calls to NOTE_INSERT)
+        = 1/2 * (xvec_length + yvec_length - (number of edits)).
+     This is admittedly biased towards finding that the strings are
+     similar, however it does produce meaningful results.  */
+  return ((double) (xvec_length + yvec_length - ctxt.edit_count)
+          / (xvec_length + yvec_length));
+}
diff --git a/lib/fstrcmp.h b/lib/fstrcmp.h
new file mode 100644
index 0000000..119498d
--- /dev/null
+++ b/lib/fstrcmp.h
@@ -0,0 +1,45 @@
+/* Fuzzy string comparison.
+   Copyright (C) 1995, 2000, 2002-2003, 2006, 2008-2019 Free Software
+   Foundation, Inc.
+
+   This file was written by Peter Miller <pmiller@agso.gov.au>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FSTRCMP_H
+#define _FSTRCMP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Fuzzy compare of S1 and S2.  Return a measure for the similarity of S1
+   and S1.  The higher the result, the more similar the strings are.
+   The result is bounded between 0 (meaning very dissimilar strings) and
+   1 (meaning identical strings).  */
+extern double fstrcmp (const char *s1, const char *s2);
+
+/* Like fstrcmp (S1, S2), except that if the result is < LOWER_BOUND, an
+   arbitrary other value < LOWER_BOUND can be returned.  */
+extern double fstrcmp_bounded (const char *s1, const char *s2,
+                               double lower_bound);
+
+/* A shortcut for fstrcmp.  Avoids a function call.  */
+#define fstrcmp(s1,s2) fstrcmp_bounded (s1, s2, 0.0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/fsync.c b/lib/fsync.c
new file mode 100644
index 0000000..bfb6d28
--- /dev/null
+++ b/lib/fsync.c
@@ -0,0 +1,87 @@
+/* Emulate fsync on platforms that lack it, primarily Windows and
+   cross-compilers like MinGW.
+
+   This is derived from sqlite3 sources.
+   https://www.sqlite.org/src/finfo?name=src/os_win.c
+   https://www.sqlite.org/copyright.html
+
+   Written by Richard W.M. Jones <rjones.at.redhat.com>
+
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the 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 library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* FlushFileBuffers */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+# include <errno.h>
+
+/* Get _get_osfhandle.  */
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
+
+int
+fsync (int fd)
+{
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+  DWORD err;
+
+  if (h == INVALID_HANDLE_VALUE)
+    {
+      errno = EBADF;
+      return -1;
+    }
+
+  if (!FlushFileBuffers (h))
+    {
+      /* Translate some Windows errors into rough approximations of Unix
+       * errors.  MSDN is useless as usual - in this case it doesn't
+       * document the full range of errors.
+       */
+      err = GetLastError ();
+      switch (err)
+        {
+        case ERROR_ACCESS_DENIED:
+          /* For a read-only handle, fsync should succeed, even though we have
+             no way to sync the access-time changes.  */
+          return 0;
+
+          /* eg. Trying to fsync a tty. */
+        case ERROR_INVALID_HANDLE:
+          errno = EINVAL;
+          break;
+
+        default:
+          errno = EIO;
+        }
+      return -1;
+    }
+
+  return 0;
+}
+
+#else /* !Windows */
+
+# error "This platform lacks fsync function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib."
+
+#endif /* !Windows */
diff --git a/lib/get-errno.c b/lib/get-errno.c
index b77ecc2..36e07ad 100644
--- a/lib/get-errno.c
+++ b/lib/get-errno.c
@@ -1,6 +1,7 @@
 /* get-errno.c - get and set errno.
 
-   Copyright (C) 2002, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2006, 2009-2015, 2018-2019 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
diff --git a/lib/get-errno.h b/lib/get-errno.h
index 99ab52f..c13ac6b 100644
--- a/lib/get-errno.h
+++ b/lib/get-errno.h
@@ -1,6 +1,7 @@
 /* get-errno.h - get and set errno.
 
-   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2015, 2018-2019 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
diff --git a/lib/getdelim.c b/lib/getdelim.c
deleted file mode 100644
index b7af0a2..0000000
--- a/lib/getdelim.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/* 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
index f9524fd..03a9243 100644
--- a/lib/getdtablesize.c
+++ b/lib/getdtablesize.c
@@ -1,5 +1,5 @@
-/* getdtablesize() function for platforms that don't have it.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+/* getdtablesize() function: Return maximum possible file descriptor value + 1.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,20 +13,22 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
 /* Specification.  */
 #include <unistd.h>
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 
-#include <stdio.h>
+# include <stdio.h>
 
-#include "msvc-inval.h"
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
 
-#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
 static int
 _setmaxstdio_nothrow (int newmax)
 {
@@ -44,10 +46,12 @@
 
   return result;
 }
-# define _setmaxstdio _setmaxstdio_nothrow
-#endif
+# else
+#  define _setmaxstdio_nothrow _setmaxstdio
+# endif
 
-/* Cache for the previous getdtablesize () result.  */
+/* Cache for the previous getdtablesize () result.  Safe to cache because
+   Windows also lacks setrlimit.  */
 static int dtablesize;
 
 int
@@ -75,12 +79,46 @@
          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)
+      for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2)
         ;
-      _setmaxstdio (orig_max_stdio);
+      _setmaxstdio_nothrow (orig_max_stdio);
       dtablesize = bound;
     }
   return dtablesize;
 }
 
+#else
+
+# include <limits.h>
+# include <sys/resource.h>
+
+# ifndef RLIM_SAVED_CUR
+#  define RLIM_SAVED_CUR RLIM_INFINITY
+# endif
+# ifndef RLIM_SAVED_MAX
+#  define RLIM_SAVED_MAX RLIM_INFINITY
+# endif
+
+# ifdef __CYGWIN__
+  /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it
+     hits the compile-time constant hard limit of 3200.  We might as
+     well just report the hard limit.  */
+#  define rlim_cur rlim_max
+# endif
+
+int
+getdtablesize (void)
+{
+  struct rlimit lim;
+
+  if (getrlimit (RLIMIT_NOFILE, &lim) == 0
+      && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX
+      && lim.rlim_cur != RLIM_INFINITY
+      && lim.rlim_cur != RLIM_SAVED_CUR
+      && lim.rlim_cur != RLIM_SAVED_MAX)
+    return lim.rlim_cur;
+
+  return INT_MAX;
+}
+
 #endif
diff --git a/lib/gethrxtime.c b/lib/gethrxtime.c
new file mode 100644
index 0000000..b1ade55
--- /dev/null
+++ b/lib/gethrxtime.c
@@ -0,0 +1,73 @@
+/* gethrxtime -- get high resolution real time
+
+   Copyright (C) 2005-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#include <config.h>
+
+#define GETHRXTIME_INLINE _GL_EXTERN_INLINE
+#include "gethrxtime.h"
+
+#if ! (HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME)
+
+#include <sys/time.h>
+#include "timespec.h"
+
+/* Get the current time, as a count of the number of nanoseconds since
+   an arbitrary epoch (e.g., the system boot time).  Prefer a
+   high-resolution clock that is not subject to resetting or
+   drifting.  */
+
+xtime_t
+gethrxtime (void)
+{
+# if HAVE_NANOUPTIME
+  {
+    struct timespec ts;
+    nanouptime (&ts);
+    return xtime_make (ts.tv_sec, ts.tv_nsec);
+  }
+# else
+
+#  if defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME
+  {
+    struct timespec ts;
+    if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0)
+      return xtime_make (ts.tv_sec, ts.tv_nsec);
+  }
+#  endif
+
+#  if HAVE_MICROUPTIME
+  {
+    struct timeval tv;
+    microuptime (&tv);
+    return xtime_make (tv.tv_sec, 1000 * tv.tv_usec);
+  }
+
+#  else
+  /* No monotonically increasing clocks are available; fall back on a
+     clock that might jump backwards, since it's the best we can do.  */
+  {
+    struct timespec ts;
+    gettime (&ts);
+    return xtime_make (ts.tv_sec, ts.tv_nsec);
+  }
+#  endif
+# endif
+}
+
+#endif
diff --git a/lib/gethrxtime.h b/lib/gethrxtime.h
new file mode 100644
index 0000000..6491794
--- /dev/null
+++ b/lib/gethrxtime.h
@@ -0,0 +1,55 @@
+/* gethrxtime -- get high resolution real time
+
+   Copyright (C) 2005, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef GETHRXTIME_H_
+#define GETHRXTIME_H_ 1
+
+#include "xtime.h"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GETHRXTIME_INLINE
+# define GETHRXTIME_INLINE _GL_INLINE
+#endif
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* Get the current time, as a count of the number of nanoseconds since
+   an arbitrary epoch (e.g., the system boot time).  Prefer a
+   high-resolution clock that is not subject to resetting or
+   drifting.  */
+
+#if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME
+# include <time.h>
+GETHRXTIME_INLINE xtime_t gethrxtime (void) { return gethrtime (); }
+# else
+xtime_t gethrxtime (void);
+#endif
+
+_GL_INLINE_HEADER_END
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/getline.c b/lib/getline.c
deleted file mode 100644
index f422747..0000000
--- a/lib/getline.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* 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-cdefs.in.h b/lib/getopt-cdefs.in.h
new file mode 100644
index 0000000..049145b
--- /dev/null
+++ b/lib/getopt-cdefs.in.h
@@ -0,0 +1,67 @@
+/* getopt-on-non-glibc compatibility macros.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of gnulib.
+   Unlike most of the getopt implementation, it is NOT shared
+   with the GNU C Library.
+
+   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 gnulib; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_CDEFS_H
+#define _GETOPT_CDEFS_H 1
+
+/* This header should not be used directly; include getopt.h or
+   unistd.h instead.  It does not have a protective #error, because
+   the guard macro for getopt.h in gnulib is not fixed.  */
+
+/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect
+   a number of the internal macros supplied to GNU libc's headers by
+   sys/cdefs.h.  Provide fallback definitions for all of them.  */
+#if @HAVE_SYS_CDEFS_H@
+# include <sys/cdefs.h>
+#endif
+
+#ifndef __BEGIN_DECLS
+# ifdef __cplusplus
+#  define __BEGIN_DECLS extern "C" {
+# else
+#  define __BEGIN_DECLS /* nothing */
+# endif
+#endif
+#ifndef __END_DECLS
+# ifdef __cplusplus
+#  define __END_DECLS }
+# else
+#  define __END_DECLS /* nothing */
+# endif
+#endif
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_VERSION__
+# define __GNUC_PREREQ(maj, min) \
+        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# else
+#  define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#ifndef __THROW
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW       throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+#endif /* _GETOPT_CDEFS_H */
diff --git a/lib/getopt-core.h b/lib/getopt-core.h
new file mode 100644
index 0000000..6360ad6
--- /dev/null
+++ b/lib/getopt-core.h
@@ -0,0 +1,96 @@
+/* Declarations for getopt (basic, portable features only).
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library and is also part of gnulib.
+   Patches to this file should be submitted to both projects.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_CORE_H
+#define _GETOPT_CORE_H 1
+
+/* This header should not be used directly; include getopt.h or
+   unistd.h instead.  Unlike most bits headers, it does not have
+   a protective #error, because the guard macro for getopt.h in
+   gnulib is not fixed.  */
+
+__BEGIN_DECLS
+
+/* 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;
+
+/* 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.
+
+   For standards compliance, the 'argv' argument has the type
+   char *const *, but this is inaccurate; if argument permutation is
+   enabled, the argv array (not the strings it points to) must be
+   writable.  */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+__END_DECLS
+
+#endif /* _GETOPT_CORE_H */
diff --git a/lib/getopt-ext.h b/lib/getopt-ext.h
new file mode 100644
index 0000000..13cb007
--- /dev/null
+++ b/lib/getopt-ext.h
@@ -0,0 +1,77 @@
+/* Declarations for getopt (GNU extensions).
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library and is also part of gnulib.
+   Patches to this file should be submitted to both projects.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_EXT_H
+#define _GETOPT_EXT_H 1
+
+/* This header should not be used directly; include getopt.h instead.
+   Unlike most bits headers, it does not have a protective #error,
+   because the guard macro for getopt.h in gnulib is not fixed.  */
+
+__BEGIN_DECLS
+
+/* 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
+
+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));
+
+__END_DECLS
+
+#endif /* _GETOPT_EXT_H */
diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
new file mode 100644
index 0000000..8fac269
--- /dev/null
+++ b/lib/getopt-pfx-core.h
@@ -0,0 +1,59 @@
+/* getopt (basic, portable features) gnulib wrapper header.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of gnulib.
+   Unlike most of the getopt implementation, it is NOT shared
+   with the GNU C Library.
+
+   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 gnulib; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_PFX_CORE_H
+#define _GETOPT_PFX_CORE_H 1
+
+/* This header should not be used directly; include getopt.h or
+   unistd.h instead.  It does not have a protective #error, because
+   the guard macro for getopt.h in gnulib is not fixed.  */
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in getopt-core.h and getopt-ext.h.  Systematically
+   rename identifiers so that they do not collide with the system
+   functions and variables.  Renaming avoids problems with some
+   compilers and linkers.  */
+#ifdef __GETOPT_PREFIX
+# ifndef __GETOPT_ID
+#  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)
+# endif
+# undef getopt
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# define getopt __GETOPT_ID (getopt)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+
+/* The system's getopt.h may have already included getopt-core.h to
+   declare the unprefixed identifiers.  Undef _GETOPT_CORE_H so that
+   getopt-core.h declares them with prefixes.  */
+# undef _GETOPT_CORE_H
+#endif
+
+#include <getopt-core.h>
+
+#endif /* _GETOPT_PFX_CORE_H */
diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h
new file mode 100644
index 0000000..0e21aef
--- /dev/null
+++ b/lib/getopt-pfx-ext.h
@@ -0,0 +1,71 @@
+/* getopt (GNU extensions) gnulib wrapper header.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of gnulib.
+   Unlike most of the getopt implementation, it is NOT shared
+   with the GNU C Library.
+
+   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 gnulib; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GETOPT_PFX_EXT_H
+#define _GETOPT_PFX_EXT_H 1
+
+/* This header should not be used directly; include getopt.h instead.
+   It does not have a protective #error, because the guard macro for
+   getopt.h in gnulib is not fixed.  */
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in getopt-core.h and getopt-ext.h.  Systematically
+   rename identifiers so that they do not collide with the system
+   functions and variables.  Renaming avoids problems with some
+   compilers and linkers.  */
+#ifdef __GETOPT_PREFIX
+# ifndef __GETOPT_ID
+#  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)
+# endif
+# undef getopt_long
+# undef getopt_long_only
+# undef option
+# undef _getopt_internal
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+
+/* The system's getopt.h may have already included getopt-ext.h to
+   declare the unprefixed identifiers.  Undef _GETOPT_EXT_H so that
+   getopt-ext.h declares them with prefixes.  */
+# undef _GETOPT_EXT_H
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+   getopt_long_only; they declare "char **argv".  For backward
+   compatibility with old applications, if __GETOPT_PREFIX is not
+   defined, we supply GNU-libc-compatible, but incorrect, prototypes
+   using "char *const *argv".  (GNU libc is stuck with the incorrect
+   prototypes, as they are baked into older versions of LSB.)  */
+#ifndef __getopt_argv_const
+# if defined __GETOPT_PREFIX
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
+#endif
+
+#include <getopt-ext.h>
+
+#endif /* _GETOPT_PFX_EXT_H */
diff --git a/lib/getopt.c b/lib/getopt.c
index 4342a34..8ee075a 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -1,23 +1,21 @@
 /* Getopt for GNU.
-   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-1996, 1998-2004, 2006, 2008-2012 Free Software
-   Foundation, Inc.
-   This file is part of the GNU C Library.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library and is also part of gnulib.
+   Patches to this file should be submitted to both projects.
 
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBC
 # include <config.h>
@@ -31,30 +29,54 @@
 #include <unistd.h>
 
 #ifdef _LIBC
+/* When used as part of glibc, error printing must be done differently
+   for standards compliance.  getopt is not a cancellation point, so
+   it must not call functions that are, and it is specified by an
+   older standard than stdio locking, so it must not refer to
+   functions in the "user namespace" related to stdio locking.
+   Finally, it must use glibc's internal message translation so that
+   the messages are looked up in the proper text domain.  */
 # include <libintl.h>
+# define fprintf __fxprintf_nocancel
+# define flockfile(fp) _IO_flockfile (fp)
+# define funlockfile(fp) _IO_funlockfile (fp)
 #else
 # include "gettext.h"
 # define _(msgid) gettext (msgid)
+/* When used standalone, flockfile and funlockfile might not be
+   available.  */
+# if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \
+      || (defined _WIN32 && ! defined __CYGWIN__))
+#  define flockfile(fp) /* nop */
+#  define funlockfile(fp) /* nop */
+# endif
+/* When used standalone, do not attempt to use alloca.  */
+# define __libc_use_alloca(size) 0
+# undef alloca
+# define alloca(size) (abort (), (void *)0)
 #endif
 
-#if defined _LIBC && defined USE_IN_LIBIO
-# include <wchar.h>
-#endif
+/* This implementation of 'getopt' has three modes for handling
+   options interspersed with non-option arguments.  It can stop
+   scanning for options at the first non-option argument encountered,
+   as POSIX specifies.  It can continue scanning for options after the
+   first non-option argument, but permute 'argv' as it goes so that,
+   after 'getopt' is done, all the options precede all the non-option
+   arguments and 'optind' points to the first non-option argument.
+   Or, it can report non-option arguments as if they were arguments to
+   the option character '\x01'.
 
-/* 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.
-
-   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
+   The default behavior of 'getopt_long' is to permute the argument list.
+   When this implementation is used standalone, the default behavior of
+   'getopt' is to stop at the first non-option argument, but when it is
+   used as part of GNU libc it also permutes the argument list.  In both
+   cases, setting the environment variable POSIXLY_CORRECT to any value
    disables permutation.
-   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.  */
+   If the first character of the OPTSTRING argument to 'getopt' or
+   'getopt_long' is '+', both functions will stop at the first
+   non-option argument.  If it is '-', both functions will report
+   non-option arguments as arguments to the option character '\x01'.  */
 
 #include "getopt_int.h"
 
@@ -95,42 +117,7 @@
 /* Keep a global copy of all internal members of getopt_data.  */
 
 static struct _getopt_data getopt_data;
-
 
-#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV
-extern char *getenv ();
-#endif
-
-#ifdef _LIBC
-/* Stored original parameters.
-   XXX This is no good solution.  We should rather copy the args so
-   that we can compare them later.  But we must not use malloc(3).  */
-extern int __libc_argc;
-extern char **__libc_argv;
-
-/* Bash 2.0 gives us an environment variable containing flags
-   indicating ARGV elements that should not be considered arguments.  */
-
-# ifdef USE_NONOPTION_FLAGS
-/* Defined in getopt_init.c  */
-extern char *__getopt_nonoption_flags;
-# endif
-
-# 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;                                  \
-    }
-# else
-#  define SWAP_FLAGS(ch1, ch2)
-# endif
-#else   /* !_LIBC */
-# define SWAP_FLAGS(ch1, ch2)
-#endif  /* _LIBC */
-
 /* Exchange two adjacent subsequences of ARGV.
    One subsequence is elements [first_nonopt,last_nonopt)
    which contains all the non-options that have been skipped so far.
@@ -153,64 +140,40 @@
      It leaves the longer segment in the right place overall,
      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'
-     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.  */
-      char *new_str = malloc (top + 1);
-      if (new_str == NULL)
-        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;
-        }
-    }
-#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;
+	  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;
+	    }
+	  /* 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;
+	  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;
+	    }
+	  /* Exclude the moved top segment from further swapping.  */
+	  bottom += len;
+	}
     }
 
   /* Update records for the slots the non-options now occupy.  */
@@ -219,25 +182,216 @@
   d->__last_nonopt = d->optind;
 }
 
-/* Initialize the internal data when the first call is made.  */
+/* Process the argument starting with d->__nextchar as a long option.
+   d->optind should *not* have been advanced over this argument.
+
+   If the value returned is -1, it was not actually a long option, the
+   state is unchanged, and the argument should be processed as a set
+   of short options (this can only happen when long_only is true).
+   Otherwise, the option (and its argument, if any) have been consumed
+   and the return value is the value to return from _getopt_internal_r.  */
+static int
+process_long_option (int argc, char **argv, const char *optstring,
+		     const struct option *longopts, int *longind,
+		     int long_only, struct _getopt_data *d,
+		     int print_errors, const char *prefix)
+{
+  char *nameend;
+  size_t namelen;
+  const struct option *p;
+  const struct option *pfound = NULL;
+  int n_options;
+  int option_index;
+
+  for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+    /* Do nothing.  */ ;
+  namelen = nameend - d->__nextchar;
+
+  /* First look for an exact match, counting the options as a side
+     effect.  */
+  for (p = longopts, n_options = 0; p->name; p++, n_options++)
+    if (!strncmp (p->name, d->__nextchar, namelen)
+	&& namelen == strlen (p->name))
+      {
+	/* Exact match found.  */
+	pfound = p;
+	option_index = n_options;
+	break;
+      }
+
+  if (pfound == NULL)
+    {
+      /* Didn't find an exact match, so look for abbreviations.  */
+      unsigned char *ambig_set = NULL;
+      int ambig_malloced = 0;
+      int ambig_fallback = 0;
+      int indfound = -1;
+
+      for (p = longopts, option_index = 0; p->name; p++, option_index++)
+	if (!strncmp (p->name, d->__nextchar, namelen))
+	  {
+	    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.  */
+		if (!ambig_fallback)
+		  {
+		    if (!print_errors)
+		      /* Don't waste effort tracking the ambig set if
+			 we're not going to print it anyway.  */
+		      ambig_fallback = 1;
+		    else if (!ambig_set)
+		      {
+			if (__libc_use_alloca (n_options))
+			  ambig_set = alloca (n_options);
+			else if ((ambig_set = malloc (n_options)) == NULL)
+			  /* Fall back to simpler error message.  */
+			  ambig_fallback = 1;
+			else
+			  ambig_malloced = 1;
+
+			if (ambig_set)
+			  {
+			    memset (ambig_set, 0, n_options);
+			    ambig_set[indfound] = 1;
+			  }
+		      }
+		    if (ambig_set)
+		      ambig_set[option_index] = 1;
+		  }
+	      }
+	  }
+
+      if (ambig_set || ambig_fallback)
+	{
+	  if (print_errors)
+	    {
+	      if (ambig_fallback)
+		fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"),
+			 argv[0], prefix, d->__nextchar);
+	      else
+		{
+		  flockfile (stderr);
+		  fprintf (stderr,
+			   _("%s: option '%s%s' is ambiguous; possibilities:"),
+			   argv[0], prefix, d->__nextchar);
+
+		  for (option_index = 0; option_index < n_options; option_index++)
+		    if (ambig_set[option_index])
+		      fprintf (stderr, " '%s%s'",
+			       prefix, longopts[option_index].name);
+
+		  /* This must use 'fprintf' even though it's only
+		     printing a single character, so that it goes through
+		     __fxprintf_nocancel when compiled as part of glibc.  */
+		  fprintf (stderr, "\n");
+		  funlockfile (stderr);
+		}
+	    }
+	  if (ambig_malloced)
+	    free (ambig_set);
+	  d->__nextchar += strlen (d->__nextchar);
+	  d->optind++;
+	  d->optopt = 0;
+	  return '?';
+	}
+
+      option_index = indfound;
+    }
+
+  if (pfound == NULL)
+    {
+      /* 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.  */
+      if (!long_only || argv[d->optind][1] == '-'
+	  || strchr (optstring, *d->__nextchar) == NULL)
+	{
+	  if (print_errors)
+	    fprintf (stderr, _("%s: unrecognized option '%s%s'\n"),
+		     argv[0], prefix, d->__nextchar);
+
+	  d->__nextchar = NULL;
+	  d->optind++;
+	  d->optopt = 0;
+	  return '?';
+	}
+
+      /* Otherwise interpret it as a short option.  */
+      return -1;
+    }
+
+  /* We have found a matching long option.  Consume it.  */
+  d->optind++;
+  d->__nextchar = NULL;
+  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)
+	    fprintf (stderr,
+		     _("%s: option '%s%s' doesn't allow an argument\n"),
+		     argv[0], prefix, pfound->name);
+
+	  d->optopt = pfound->val;
+	  return '?';
+	}
+    }
+  else if (pfound->has_arg == 1)
+    {
+      if (d->optind < argc)
+	d->optarg = argv[d->optind++];
+      else
+	{
+	  if (print_errors)
+	    fprintf (stderr,
+		     _("%s: option '%s%s' requires an argument\n"),
+		     argv[0], prefix, pfound->name);
+
+	  d->optopt = pfound->val;
+	  return optstring[0] == ':' ? ':' : '?';
+	}
+    }
+
+  if (longind != NULL)
+    *longind = option_index;
+  if (pfound->flag)
+    {
+      *(pfound->flag) = pfound->val;
+      return 0;
+    }
+  return pfound->val;
+}
+
+/* Initialize internal data upon the first call to getopt.  */
 
 static const char *
 _getopt_initialize (int argc _GL_UNUSED,
-                    char **argv _GL_UNUSED, const char *optstring,
-                    struct _getopt_data *d, int posixly_correct)
+		    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
      non-option ARGV-elements is empty.  */
+  if (d->optind == 0)
+    d->optind = 1;
 
   d->__first_nonopt = d->__last_nonopt = d->optind;
-
   d->__nextchar = NULL;
 
-  d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
-
   /* Determine how to handle the ordering of options and nonoptions.  */
-
   if (optstring[0] == '-')
     {
       d->__ordering = RETURN_IN_ORDER;
@@ -248,41 +402,12 @@
       d->__ordering = REQUIRE_ORDER;
       ++optstring;
     }
-  else if (d->__posixly_correct)
+  else if (posixly_correct || !!getenv ("POSIXLY_CORRECT"))
     d->__ordering = REQUIRE_ORDER;
   else
     d->__ordering = PERMUTE;
 
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
-  if (!d->__posixly_correct
-      && 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);
-            }
-        }
-      d->__nonoption_flags_len = d->__nonoption_flags_max_len;
-    }
-  else
-    d->__nonoption_flags_len = 0;
-#endif
-
+  d->__initialized = 1;
   return optstring;
 }
 
@@ -344,8 +469,8 @@
 
 int
 _getopt_internal_r (int argc, char **argv, const char *optstring,
-                    const struct option *longopts, int *longind,
-                    int long_only, struct _getopt_data *d, int posixly_correct)
+		    const struct option *longopts, int *longind,
+		    int long_only, struct _getopt_data *d, int posixly_correct)
 {
   int print_errors = d->opterr;
 
@@ -355,431 +480,129 @@
   d->optarg = NULL;
 
   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, d,
-                                      posixly_correct);
-      d->__initialized = 1;
-    }
+    optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct);
   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
-     from the shell indicating it is not an option.  The later information
-     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'))
-#else
-# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
-#endif
+  /* Test whether ARGV[optind] points to a non-option argument.  */
+#define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
 
   if (d->__nextchar == NULL || *d->__nextchar == '\0')
     {
       /* 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 (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.  */
+	 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 (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.  */
+	 Check whether it might be a long option.  */
+      if (longopts)
+	{
+	  if (argv[d->optind][1] == '-')
+	    {
+	      /* "--foo" is always a long option.  The special option
+		 "--" was handled above.  */
+	      d->__nextchar = argv[d->optind] + 2;
+	      return process_long_option (argc, argv, optstring, longopts,
+					  longind, long_only, d,
+					  print_errors, "--");
+	    }
 
-      d->__nextchar = (argv[d->optind] + 1
-                  + (longopts != NULL && argv[d->optind][1] == '-'));
-    }
+	  /* If long_only and the ARGV-element has the form "-f",
+	     where f is a valid short option, don't consider it an
+	     abbreviated form of a long option that starts with f.
+	     Otherwise there would be no way to give the -f short
+	     option.
 
-  /* Decode the current option-ARGV-element.  */
+	     On the other hand, if there's a long option "fubar" and
+	     the ARGV-element is "-fu", do consider that an
+	     abbreviation of the long option, just like "--fu", and
+	     not "-f" with arg "u".
 
-  /* Check whether the ARGV-element is a long option.
+	     This distinction seems to be the most useful approach.  */
+	  if (long_only && (argv[d->optind][2]
+			    || !strchr (optstring, argv[d->optind][1])))
+	    {
+	      int code;
+	      d->__nextchar = argv[d->optind] + 1;
+	      code = process_long_option (argc, argv, optstring, longopts,
+					  longind, long_only, d,
+					  print_errors, "-");
+	      if (code != -1)
+		return code;
+	    }
+	}
 
-     If long_only and the ARGV-element has the form "-f", where f is
-     a valid short option, don't consider it an abbreviated form of
-     a long option that starts with f.  Otherwise there would be no
-     way to give the -f short option.
-
-     On the other hand, if there's a long option "fubar" and
-     the ARGV-element is "-fu", do consider that an abbreviation of
-     the long option, just like "--fu", and not "-f" with arg "u".
-
-     This distinction seems to be the most useful approach.  */
-
-  if (longopts != NULL
-      && (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 indfound = -1;
-      int option_index;
-
-      for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
-        /* Do nothing.  */ ;
-      namelen = nameend - d->__nextchar;
-
-      /* 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, 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_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 = NULL;
-              size_t buflen = 0;
-
-              FILE *fp = open_memstream (&buf, &buflen);
-              if (fp != NULL)
-                {
-                  fprintf (fp,
-                           _("%s: option '%s' is ambiguous; possibilities:"),
-                           argv[0], argv[d->optind]);
-
-                  do
-                    {
-                      fprintf (fp, " '--%s'", ambig_list->p->name);
-                      ambig_list = ambig_list->next;
-                    }
-                  while (ambig_list != NULL);
-
-                  fputc_unlocked ('\n', fp);
-
-                  if (__builtin_expect (fclose (fp) != EOF, 1))
-                    {
-                      _IO_flockfile (stderr);
-
-                      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; 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 '?';
-        }
-
-      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)
-                    {
-#if defined _LIBC && defined USE_IN_LIBIO
-                      char *buf;
-                      int n;
-#endif
-
-                      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);
-#else
-                          fprintf (stderr, _("\
-%s: option '--%s' doesn't allow an argument\n"),
-                                   argv[0], pfound->name);
-#endif
-                        }
-                      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);
-#else
-                          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);
-
-                          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);
-                        }
-#endif
-                    }
-
-                  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)
-                    {
-#if defined _LIBC && defined USE_IN_LIBIO
-                      char *buf;
-
-                      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;
-
-                          __fxprintf (NULL, "%s", buf);
-
-                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                          _IO_funlockfile (stderr);
-
-                          free (buf);
-                        }
-#else
-                      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;
-        }
-
-      /* 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.  */
-      if (!long_only || argv[d->optind][1] == '-'
-          || strchr (optstring, *d->__nextchar) == NULL)
-        {
-          if (print_errors)
-            {
-#if defined _LIBC && defined USE_IN_LIBIO
-              char *buf;
-              int n;
-#endif
-
-              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);
-#else
-                  fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
-                           argv[0], d->__nextchar);
-#endif
-                }
-              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);
-#else
-                  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);
-
-                  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);
-                }
-#endif
-            }
-          d->__nextchar = (char *) "";
-          d->optind++;
-          d->optopt = 0;
-          return '?';
-        }
+      /* It is not a long option.  Skip the initial punctuation.  */
+      d->__nextchar = argv[d->optind] + 1;
     }
 
   /* Look at and handle the next short option-character.  */
@@ -794,331 +617,83 @@
 
     if (temp == NULL || c == ':' || c == ';')
       {
-        if (print_errors)
-          {
-#if defined _LIBC && defined USE_IN_LIBIO
-              char *buf;
-              int n;
-#endif
-
-#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);
-
-                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);
-              }
-#endif
-          }
-        d->optopt = c;
-        return '?';
+	if (print_errors)
+	  fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c);
+	d->optopt = c;
+	return '?';
       }
+
     /* Convenience. Treat POSIX -W foo same as long option --foo */
-    if (temp[0] == 'W' && temp[1] == ';')
+    if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL)
       {
-        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;
+	else if (d->optind == argc)
+	  {
+	    if (print_errors)
+	      fprintf (stderr,
+		       _("%s: option requires an argument -- '%c'\n"),
+		       argv[0], c);
 
-        if (longopts == NULL)
-          goto no_longs;
+	    d->optopt = c;
+	    if (optstring[0] == ':')
+	      c = ':';
+	    else
+	      c = '?';
+	    return c;
+	  }
+	else
+	  d->optarg = argv[d->optind];
 
-        /* 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;
-
-                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;
-
-                    __fxprintf (NULL, "%s", buf);
-
-                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                    _IO_funlockfile (stderr);
-
-                    free (buf);
-                  }
-#else
-                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++];
-
-        /* 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.  */ ;
-
-        /* 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;
-
-                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;
-
-                    __fxprintf (NULL, "%s", buf);
-
-                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                    _IO_funlockfile (stderr);
-
-                    free (buf);
-                  }
-#else
-                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)
-                      {
-#if defined _LIBC && defined USE_IN_LIBIO
-                        char *buf;
-
-                        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;
-
-                            __fxprintf (NULL, "%s", buf);
-
-                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                            _IO_funlockfile (stderr);
-
-                            free (buf);
-                          }
-#else
-                        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)
-                      {
-#if defined _LIBC && defined USE_IN_LIBIO
-                        char *buf;
-
-                        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;
-
-                            __fxprintf (NULL, "%s", buf);
-
-                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                            _IO_funlockfile (stderr);
-
-                            free (buf);
-                          }
-#else
-                        fprintf (stderr, _("\
-%s: option '-W %s' requires an argument\n"),
-                                 argv[0], pfound->name);
-#endif
-                      }
-                    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.   */
+	d->__nextchar = d->optarg;
+	d->optarg = NULL;
+	return process_long_option (argc, argv, optstring, longopts, longind,
+				    0 /* long_only */, d, print_errors, "-W ");
       }
     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)
-                  {
-#if defined _LIBC && defined USE_IN_LIBIO
-                    char *buf;
+	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)
+		  fprintf (stderr,
+			   _("%s: option requires an argument -- '%c'\n"),
+			   argv[0], c);
 
-                    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;
-
-                        __fxprintf (NULL, "%s", buf);
-
-                        ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                        _IO_funlockfile (stderr);
-
-                        free (buf);
-                      }
-#else
-                    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;
   }
@@ -1126,8 +701,8 @@
 
 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;
 
@@ -1135,8 +710,8 @@
   getopt_data.opterr = opterr;
 
   result = _getopt_internal_r (argc, argv, optstring, longopts,
-                               longind, long_only, &getopt_data,
-                               posixly_correct);
+			       longind, long_only, &getopt_data,
+			       posixly_correct);
 
   optind = getopt_data.optind;
   optarg = getopt_data.optarg;
@@ -1145,32 +720,23 @@
   return result;
 }
 
-/* glibc gets a LSB-compliant getopt.
-   Standalone applications get a POSIX-compliant getopt.  */
-#if _LIBC
-enum { POSIXLY_CORRECT = 0 };
-#else
-enum { POSIXLY_CORRECT = 1 };
-#endif
-
-int
-getopt (int argc, char *const *argv, const char *optstring)
-{
-  return _getopt_internal (argc, (char **) argv, optstring,
-                           (const struct option *) 0,
-                           (int *) 0,
-                           0, POSIXLY_CORRECT);
-}
+/* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt.
+   Standalone applications just get a POSIX-compliant getopt.
+   POSIX and LSB both require these functions to take 'char *const *argv'
+   even though this is incorrect (because of the permutation).  */
+#define GETOPT_ENTRY(NAME, POSIXLY_CORRECT)			\
+  int								\
+  NAME (int argc, char *const *argv, const char *optstring)	\
+  {								\
+    return _getopt_internal (argc, (char **)argv, optstring,	\
+			     0, 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);
-}
+GETOPT_ENTRY(getopt, 0)
+GETOPT_ENTRY(__posix_getopt, 1)
+#else
+GETOPT_ENTRY(getopt, 1)
 #endif
 
 
@@ -1191,51 +757,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
index 06b6dfc..c77f34c 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -1,20 +1,22 @@
 /* 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.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of gnulib.
+   Unlike most of the getopt implementation, it is NOT shared
+   with the GNU C Library, which supplies a different version of
+   this file.
 
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the 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 free software; you can redistribute it and/or modify it
+   under the terms of the 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 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 program.  If not, see <http://www.gnu.org/licenses/>.  */
+   You should have received a copy of the GNU General Public
+   License along with gnulib; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_GETOPT_H
 
@@ -32,222 +34,28 @@
 # undef _GL_SYSTEM_GETOPT
 #endif
 
-#ifndef _@GUARD_PREFIX@_GETOPT_H
-
-#ifndef __need_getopt
-# define _@GUARD_PREFIX@_GETOPT_H 1
-#endif
+#define _@GUARD_PREFIX@_GETOPT_H 1
 
 /* 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
+   defined in getopt-core.h and getopt-ext.h.  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).  */
+#if defined __GETOPT_PREFIX
 # if !@HAVE_GETOPT_H@
+#  define __need_system_stdlib_h
 #  include <stdlib.h>
+#  undef __need_system_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
+#include <getopt-cdefs.h>
+#include <getopt-pfx-core.h>
+#include <getopt-pfx-ext.h>
 
-/* 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 fb2a8f5..883aa6b 100644
--- a/lib/getopt1.c
+++ b/lib/getopt1.c
@@ -1,56 +1,44 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2012 Free Software
-   Foundation, Inc.
-   This file is part of the GNU C Library.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library and is also part of gnulib.
+   Patches to this file should be submitted to both projects.
 
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
-#ifdef _LIBC
-# include <getopt.h>
-#else
+#ifndef _LIBC
 # include <config.h>
-# include "getopt.h"
 #endif
+
+#include "getopt.h"
 #include "getopt_int.h"
 
-#include <stdio.h>
-
-/* This needs to come after some library #include
-   to get __GNU_LIBRARY__ defined.  */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#endif
-
-#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, d, 0);
+			     0, d, 0);
 }
 
 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
@@ -60,26 +48,27 @@
 
 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, d, 0);
+			     1, d, 0);
 }
 
 
 #ifdef TEST
 
 #include <stdio.h>
+#include <stdlib.h>
 
 int
 main (int argc, char **argv)
@@ -93,74 +82,74 @@
       int option_index = 0;
       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_int.h b/lib/getopt_int.h
index 2da020c..e63706f 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,30 +1,31 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2012 Free Software
-   Foundation, Inc.
-   This file is part of the GNU C Library.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library and is also part of gnulib.
+   Patches to this file should be submitted to both projects.
 
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://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
@@ -32,28 +33,20 @@
 
 /* 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 POSIX
+   specifies should happen.
 
-   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.
+   PERMUTE means 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.
+   with character code 1.
 
    The special argument '--' forces an end of option-scanning regardless
    of the value of 'ordering'.  In the case of RETURN_IN_ORDER, only
@@ -91,11 +84,6 @@
   /* See __ord above.  */
   enum __ord __ordering;
 
-  /* If the POSIXLY_CORRECT environment variable is set
-     or getopt was called.  */
-  int __posixly_correct;
-
-
   /* Handle permutation of arguments.  */
 
   /* Describe the part of ARGV that contains non-options that have
@@ -104,32 +92,27 @@
 
   int __first_nonopt;
   int __last_nonopt;
-
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
-  int __nonoption_flags_max_len;
-  int __nonoption_flags_len;
-#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, struct _getopt_data *__data,
-                               int __posixly_correct);
+			       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/getprogname.c b/lib/getprogname.c
new file mode 100644
index 0000000..de8f49a
--- /dev/null
+++ b/lib/getprogname.c
@@ -0,0 +1,260 @@
+/* Program name management.
+   Copyright (C) 2016-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "getprogname.h"
+
+#include <errno.h> /* get program_invocation_name declaration */
+#include <stdlib.h> /* get __argv declaration */
+
+#ifdef _AIX
+# include <unistd.h>
+# include <procinfo.h>
+# include <string.h>
+#endif
+
+#ifdef __MVS__
+# ifndef _OPEN_SYS
+#  define _OPEN_SYS
+# endif
+# include <string.h>
+# include <sys/ps.h>
+#endif
+
+#ifdef __hpux
+# include <unistd.h>
+# include <sys/param.h>
+# include <sys/pstat.h>
+# include <string.h>
+#endif
+
+#ifdef __sgi
+# include <string.h>
+# include <unistd.h>
+# include <stdio.h>
+# include <fcntl.h>
+# include <sys/procfs.h>
+#endif
+
+#include "dirname.h"
+
+#ifndef HAVE_GETPROGNAME             /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */
+char const *
+getprogname (void)
+{
+# if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME                /* glibc, BeOS */
+  /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */
+  return program_invocation_short_name;
+# elif HAVE_DECL_PROGRAM_INVOCATION_NAME                    /* glibc, BeOS */
+  /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */
+  return last_component (program_invocation_name);
+# elif HAVE_GETEXECNAME                                     /* Solaris */
+  /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */
+  const char *p = getexecname ();
+  if (!p)
+    p = "?";
+  return last_component (p);
+# elif HAVE_DECL___ARGV                                     /* mingw, MSVC */
+  /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */
+  const char *p = __argv && __argv[0] ? __argv[0] : "?";
+  return last_component (p);
+# elif HAVE_VAR___PROGNAME                                  /* OpenBSD, Android, QNX */
+  /* https://man.openbsd.org/style.9 */
+  /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */
+  /* Be careful to declare this only when we absolutely need it
+     (OpenBSD 5.1), rather than when it's available.  Otherwise,
+     its mere declaration makes program_invocation_short_name
+     malfunction (have zero length) with Fedora 25's glibc.  */
+  extern char *__progname;
+  const char *p = __progname;
+#  if defined __ANDROID__
+  return last_component (p);
+#  else
+  return p && p[0] ? p : "?";
+#  endif
+# elif _AIX                                                 /* AIX */
+  /* Idea by Bastien ROUCARIÈS,
+     https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html
+     Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm
+  */
+  static char *p;
+  static int first = 1;
+  if (first)
+    {
+      first = 0;
+      pid_t pid = getpid ();
+      struct procentry64 procs;
+      p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1)
+           ? strdup (procs.pi_comm)
+           : NULL);
+      if (!p)
+        p = "?";
+    }
+  return p;
+# elif defined __hpux
+  static char *p;
+  static int first = 1;
+  if (first)
+    {
+      first = 0;
+      pid_t pid = getpid ();
+      struct pst_status status;
+      if (pstat_getproc (&status, sizeof status, 0, pid) > 0)
+        {
+          char *ucomm = status.pst_ucomm;
+          char *cmd = status.pst_cmd;
+          if (strlen (ucomm) < PST_UCOMMLEN - 1)
+            p = ucomm;
+          else
+            {
+              /* ucomm is truncated to length PST_UCOMMLEN - 1.
+                 Look at cmd instead.  */
+              char *space = strchr (cmd, ' ');
+              if (space != NULL)
+                *space = '\0';
+              p = strrchr (cmd, '/');
+              if (p != NULL)
+                p++;
+              else
+                p = cmd;
+              if (strlen (p) > PST_UCOMMLEN - 1
+                  && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0)
+                /* p is less truncated than ucomm.  */
+                ;
+              else
+                p = ucomm;
+            }
+          p = strdup (p);
+        }
+      else
+        {
+#  if !defined __LP64__
+          /* Support for 32-bit programs running in 64-bit HP-UX.
+             The documented way to do this is to use the same source code
+             as above, but in a compilation unit where '#define _PSTAT64 1'
+             is in effect.  I prefer a single compilation unit; the struct
+             size and the offsets are not going to change.  */
+          char status64[1216];
+          if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0)
+            {
+              char *ucomm = status64 + 288;
+              char *cmd = status64 + 168;
+              if (strlen (ucomm) < PST_UCOMMLEN - 1)
+                p = ucomm;
+              else
+                {
+                  /* ucomm is truncated to length PST_UCOMMLEN - 1.
+                     Look at cmd instead.  */
+                  char *space = strchr (cmd, ' ');
+                  if (space != NULL)
+                    *space = '\0';
+                  p = strrchr (cmd, '/');
+                  if (p != NULL)
+                    p++;
+                  else
+                    p = cmd;
+                  if (strlen (p) > PST_UCOMMLEN - 1
+                      && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0)
+                    /* p is less truncated than ucomm.  */
+                    ;
+                  else
+                    p = ucomm;
+                }
+              p = strdup (p);
+            }
+          else
+#  endif
+            p = NULL;
+        }
+      if (!p)
+        p = "?";
+    }
+  return p;
+# elif __MVS__                                              /* z/OS */
+  /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */
+  static char *p = "?";
+  static int first = 1;
+  if (first)
+    {
+      pid_t pid = getpid ();
+      int token;
+      W_PSPROC buf;
+      first = 0;
+      memset (&buf, 0, sizeof(buf));
+      buf.ps_cmdptr    = (char *) malloc (buf.ps_cmdlen    = PS_CMDBLEN_LONG);
+      buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN);
+      buf.ps_pathptr   = (char *) malloc (buf.ps_pathlen   = PS_PATHBLEN);
+      if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr)
+        {
+          for (token = 0; token >= 0;
+               token = w_getpsent (token, &buf, sizeof(buf)))
+            {
+              if (token > 0 && buf.ps_pid == pid)
+                {
+                  char *s = strdup (last_component (buf.ps_pathptr));
+                  if (s)
+                    p = s;
+                  break;
+                }
+            }
+        }
+      free (buf.ps_cmdptr);
+      free (buf.ps_conttyptr);
+      free (buf.ps_pathptr);
+    }
+  return p;
+# elif defined __sgi                                        /* IRIX */
+  char filename[50];
+  int fd;
+
+  sprintf (filename, "/proc/pinfo/%d", (int) getpid ());
+  fd = open (filename, O_RDONLY);
+  if (0 <= fd)
+    {
+      prpsinfo_t buf;
+      int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf);
+      close (fd);
+      if (ioctl_ok)
+        {
+          char *name = buf.pr_fname;
+          size_t namesize = sizeof buf.pr_fname;
+          /* It may not be NUL-terminated.  */
+          char *namenul = memchr (name, '\0', namesize);
+          size_t namelen = namenul ? namenul - name : namesize;
+          char *namecopy = malloc (namelen + 1);
+          if (namecopy)
+            {
+              namecopy[namelen] = '\0';
+              return memcpy (namecopy, name, namelen);
+            }
+        }
+    }
+  return NULL;
+# else
+#  error "getprogname module not ported to this OS"
+# endif
+}
+
+#endif
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/getprogname.h b/lib/getprogname.h
new file mode 100644
index 0000000..1590b38
--- /dev/null
+++ b/lib/getprogname.h
@@ -0,0 +1,40 @@
+/* Program name management.
+   Copyright (C) 2016-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_GETPROGNAME_H
+#define _GL_GETPROGNAME_H
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Return the base name of the executing program.
+   On native Windows this will usually end in ".exe" or ".EXE". */
+#ifndef HAVE_GETPROGNAME
+extern char const *getprogname (void)
+# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME
+  _GL_ATTRIBUTE_PURE
+# endif
+  ;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/getrusage.c b/lib/getrusage.c
new file mode 100644
index 0000000..4598eac
--- /dev/null
+++ b/lib/getrusage.c
@@ -0,0 +1,131 @@
+/* getrusage replacement for systems which lack it.
+
+   Copyright (C) 2012-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible, 2012.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <sys/resource.h>
+
+#include <errno.h>
+#include <string.h>
+
+/* Get uint64_t.  */
+#include <stdint.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+#else
+
+# include <sys/times.h>
+# include <unistd.h>
+#endif
+
+int
+getrusage (int who, struct rusage *usage_p)
+{
+  if (who == RUSAGE_SELF || who == RUSAGE_CHILDREN)
+    {
+      /* Clear all unsupported members of 'struct rusage'.  */
+      memset (usage_p, '\0', sizeof (struct rusage));
+
+#if defined _WIN32 && ! defined __CYGWIN__
+      if (who == RUSAGE_SELF)
+        {
+          /* Fill in the ru_utime and ru_stime members.  */
+          FILETIME creation_time;
+          FILETIME exit_time;
+          FILETIME kernel_time;
+          FILETIME user_time;
+
+          if (GetProcessTimes (GetCurrentProcess (),
+                               &creation_time, &exit_time,
+                               &kernel_time, &user_time))
+            {
+              /* Convert to microseconds, rounding.  */
+              uint64_t kernel_usec =
+                ((((uint64_t) kernel_time.dwHighDateTime << 32)
+                  | (uint64_t) kernel_time.dwLowDateTime)
+                 + 5) / 10;
+              uint64_t user_usec =
+                ((((uint64_t) user_time.dwHighDateTime << 32)
+                  | (uint64_t) user_time.dwLowDateTime)
+                 + 5) / 10;
+
+              usage_p->ru_utime.tv_sec = user_usec / 1000000U;
+              usage_p->ru_utime.tv_usec = user_usec % 1000000U;
+              usage_p->ru_stime.tv_sec = kernel_usec / 1000000U;
+              usage_p->ru_stime.tv_usec = kernel_usec % 1000000U;
+            }
+        }
+#else
+      /* Fill in the ru_utime and ru_stime members.  */
+      {
+        struct tms time;
+
+        if (times (&time) != (clock_t) -1)
+          {
+            /* Number of clock ticks per second.  */
+            unsigned int clocks_per_second = sysconf (_SC_CLK_TCK);
+
+            if (clocks_per_second > 0)
+              {
+                clock_t user_ticks;
+                clock_t system_ticks;
+
+                uint64_t user_usec;
+                uint64_t system_usec;
+
+                if (who == RUSAGE_CHILDREN)
+                  {
+                    user_ticks   = time.tms_cutime;
+                    system_ticks = time.tms_cstime;
+                  }
+                else
+                  {
+                    user_ticks   = time.tms_utime;
+                    system_ticks = time.tms_stime;
+                  }
+
+                user_usec =
+                  (((uint64_t) user_ticks * (uint64_t) 1000000U)
+                   + clocks_per_second / 2) / clocks_per_second;
+                system_usec =
+                  (((uint64_t) system_ticks * (uint64_t) 1000000U)
+                   + clocks_per_second / 2) / clocks_per_second;
+
+                usage_p->ru_utime.tv_sec = user_usec / 1000000U;
+                usage_p->ru_utime.tv_usec = user_usec % 1000000U;
+                usage_p->ru_stime.tv_sec = system_usec / 1000000U;
+                usage_p->ru_stime.tv_usec = system_usec % 1000000U;
+              }
+          }
+      }
+#endif
+
+      return 0;
+    }
+  else
+    {
+      errno = EINVAL;
+      return -1;
+    }
+}
diff --git a/lib/gettext.h b/lib/gettext.h
index 65ca1e6..c7c0fdb 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,5 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2012 Free Software
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,13 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBGETTEXT_H
 #define _LIBGETTEXT_H 1
 
-/* NLS can be disabled through the configure --disable-nls option.  */
-#if ENABLE_NLS
+/* NLS can be disabled through the configure --disable-nls option
+   or through "#define ENABLE NLS 0" before including this file.  */
+#if defined ENABLE_NLS && ENABLE_NLS
 
 /* Get declarations of GNU message catalog functions.  */
 # include <libintl.h>
@@ -183,8 +184,16 @@
 
 #include <string.h>
 
-#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
-     /* || __STDC_VERSION__ >= 199901L */ )
+/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported.
+   This relates to the -Wvla and -Wvla-larger-than warnings, enabled in
+   the default GCC many warnings set.  This allows programs to disable use
+   of VLAs, which may be unintended, or may be awkward to support portably,
+   or may have security implications due to non-deterministic stack usage.  */
+
+#if (!defined GNULIB_NO_VLA \
+     && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
+     /*  || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
+         || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ))
 # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
 #else
 # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
@@ -225,15 +234,17 @@
   if (msg_ctxt_id != NULL)
 #endif
     {
+      int found_translation;
       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);
+      found_translation = (translation != msg_ctxt_id);
 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
       if (msg_ctxt_id != buf)
         free (msg_ctxt_id);
 #endif
-      if (translation != msg_ctxt_id)
+      if (found_translation)
         return translation;
     }
   return msgid;
@@ -271,15 +282,17 @@
   if (msg_ctxt_id != NULL)
 #endif
     {
+      int found_translation;
       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);
+      found_translation = !(translation == msg_ctxt_id || translation == msgid_plural);
 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
       if (msg_ctxt_id != buf)
         free (msg_ctxt_id);
 #endif
-      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+      if (found_translation)
         return translation;
     }
   return (n == 1 ? msgid : msgid_plural);
diff --git a/lib/gettime.c b/lib/gettime.c
new file mode 100644
index 0000000..1fd153f
--- /dev/null
+++ b/lib/gettime.c
@@ -0,0 +1,49 @@
+/* gettime -- get the system clock
+
+   Copyright (C) 2002, 2004-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#include <config.h>
+
+#include "timespec.h"
+
+#include <sys/time.h>
+
+/* Get the system time into *TS.  */
+
+void
+gettime (struct timespec *ts)
+{
+#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
+  clock_gettime (CLOCK_REALTIME, ts);
+#else
+  struct timeval tv;
+  gettimeofday (&tv, NULL);
+  ts->tv_sec = tv.tv_sec;
+  ts->tv_nsec = tv.tv_usec * 1000;
+#endif
+}
+
+/* Return the current system time as a struct timespec.  */
+
+struct timespec
+current_timespec (void)
+{
+  struct timespec ts;
+  gettime (&ts);
+  return ts;
+}
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
new file mode 100644
index 0000000..e728bf4
--- /dev/null
+++ b/lib/gettimeofday.c
@@ -0,0 +1,150 @@
+/* Provide gettimeofday for systems that don't have it or for which it's broken.
+
+   Copyright (C) 2001-2003, 2005-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification.  */
+#include <sys/time.h>
+
+#include <time.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WINDOWS_NATIVE
+# include <windows.h>
+#endif
+
+#include "localtime-buffer.h"
+
+#ifdef WINDOWS_NATIVE
+
+/* Avoid warnings from gcc -Wcast-function-type.  */
+# define GetProcAddress \
+   (void *) GetProcAddress
+
+/* GetSystemTimePreciseAsFileTime was introduced only in Windows 8.  */
+typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime);
+static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL;
+static BOOL initialized = FALSE;
+
+static void
+initialize (void)
+{
+  HMODULE kernel32 = LoadLibrary ("kernel32.dll");
+  if (kernel32 != NULL)
+    {
+      GetSystemTimePreciseAsFileTimeFunc =
+        (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime");
+    }
+  initialized = TRUE;
+}
+
+#endif
+
+/* This is a wrapper for gettimeofday.  It is used only on systems
+   that lack this function, or whose implementation of this function
+   causes problems.
+   Work around the bug in some systems whereby gettimeofday clobbers
+   the static buffer that localtime uses for its return value.  The
+   gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
+   this problem.  */
+
+int
+gettimeofday (struct timeval *restrict tv, void *restrict tz)
+{
+#undef gettimeofday
+#ifdef WINDOWS_NATIVE
+
+  /* On native Windows, there are two ways to get the current time:
+     GetSystemTimeAsFileTime
+     <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime>
+     or
+     GetSystemTimePreciseAsFileTime
+     <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>.
+     GetSystemTimeAsFileTime produces values that jump by increments of
+     15.627 milliseconds (!) on average.
+     Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2
+     microseconds.
+     More discussion on this topic:
+     <http://www.windowstimestamp.com/description>.  */
+  FILETIME current_time;
+
+  if (!initialized)
+    initialize ();
+  if (GetSystemTimePreciseAsFileTimeFunc != NULL)
+    GetSystemTimePreciseAsFileTimeFunc (&current_time);
+  else
+    GetSystemTimeAsFileTime (&current_time);
+
+  /* Convert from FILETIME to 'struct timeval'.  */
+  /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */
+  ULONGLONG since_1601 =
+    ((ULONGLONG) current_time.dwHighDateTime << 32)
+    | (ULONGLONG) current_time.dwLowDateTime;
+  /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap
+     years, in total 134774 days.  */
+  ULONGLONG since_1970 =
+    since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000;
+  ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10;
+  tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000;
+  tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000;
+
+  return 0;
+
+#else
+
+# if HAVE_GETTIMEOFDAY
+#  if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+  /* Save and restore the contents of the buffer used for localtime's
+     result around the call to gettimeofday.  */
+  struct tm save = *localtime_buffer_addr;
+#  endif
+
+#  if defined timeval /* 'struct timeval' overridden by gnulib?  */
+#   undef timeval
+  struct timeval otv;
+  int result = gettimeofday (&otv, (struct timezone *) tz);
+  if (result == 0)
+    {
+      tv->tv_sec = otv.tv_sec;
+      tv->tv_usec = otv.tv_usec;
+    }
+#  else
+  int result = gettimeofday (tv, (struct timezone *) tz);
+#  endif
+
+#  if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+  *localtime_buffer_addr = save;
+#  endif
+
+  return result;
+
+# else
+
+#  if !defined OK_TO_USE_1S_CLOCK
+#   error "Only 1-second nominal clock resolution found.  Is that intended?" \
+          "If so, compile with the -DOK_TO_USE_1S_CLOCK option."
+#  endif
+  tv->tv_sec = time (NULL);
+  tv->tv_usec = 0;
+
+  return 0;
+
+# endif
+#endif
+}
diff --git a/lib/gl_array_list.c b/lib/gl_array_list.c
new file mode 100644
index 0000000..fa8cf1e
--- /dev/null
+++ b/lib/gl_array_list.c
@@ -0,0 +1,677 @@
+/* Sequential list data type implemented by an array.
+   Copyright (C) 2006-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "gl_array_list.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+/* Get memcpy.  */
+#include <string.h>
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Concrete gl_list_impl type, valid for this file only.  */
+struct gl_list_impl
+{
+  struct gl_list_impl_base base;
+  /* An array of ALLOCATED elements, of which the first COUNT are used.
+     0 <= COUNT <= ALLOCATED.  */
+  const void **elements;
+  size_t count;
+  size_t allocated;
+};
+
+/* struct gl_list_node_impl doesn't exist here.  The pointers are actually
+   indices + 1.  */
+#define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1)
+#define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1)
+
+static gl_list_t
+gl_array_nx_create_empty (gl_list_implementation_t implementation,
+                          gl_listelement_equals_fn equals_fn,
+                          gl_listelement_hashcode_fn hashcode_fn,
+                          gl_listelement_dispose_fn dispose_fn,
+                          bool allow_duplicates)
+{
+  struct gl_list_impl *list =
+    (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+  if (list == NULL)
+    return NULL;
+
+  list->base.vtable = implementation;
+  list->base.equals_fn = equals_fn;
+  list->base.hashcode_fn = hashcode_fn;
+  list->base.dispose_fn = dispose_fn;
+  list->base.allow_duplicates = allow_duplicates;
+  list->elements = NULL;
+  list->count = 0;
+  list->allocated = 0;
+
+  return list;
+}
+
+static gl_list_t
+gl_array_nx_create (gl_list_implementation_t implementation,
+                    gl_listelement_equals_fn equals_fn,
+                    gl_listelement_hashcode_fn hashcode_fn,
+                    gl_listelement_dispose_fn dispose_fn,
+                    bool allow_duplicates,
+                    size_t count, const void **contents)
+{
+  struct gl_list_impl *list =
+    (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl));
+
+  if (list == NULL)
+    return NULL;
+
+  list->base.vtable = implementation;
+  list->base.equals_fn = equals_fn;
+  list->base.hashcode_fn = hashcode_fn;
+  list->base.dispose_fn = dispose_fn;
+  list->base.allow_duplicates = allow_duplicates;
+  if (count > 0)
+    {
+      if (size_overflow_p (xtimes (count, sizeof (const void *))))
+        goto fail;
+      list->elements = (const void **) malloc (count * sizeof (const void *));
+      if (list->elements == NULL)
+        goto fail;
+      memcpy (list->elements, contents, count * sizeof (const void *));
+    }
+  else
+    list->elements = NULL;
+  list->count = count;
+  list->allocated = count;
+
+  return list;
+
+ fail:
+  free (list);
+  return NULL;
+}
+
+static size_t
+gl_array_size (gl_list_t list)
+{
+  return list->count;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_array_node_value (gl_list_t list, gl_list_node_t node)
+{
+  uintptr_t index = NODE_TO_INDEX (node);
+  if (!(index < list->count))
+    /* Invalid argument.  */
+    abort ();
+  return list->elements[index];
+}
+
+static int
+gl_array_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+                            const void *elt)
+{
+  uintptr_t index = NODE_TO_INDEX (node);
+  if (!(index < list->count))
+    /* Invalid argument.  */
+    abort ();
+  list->elements[index] = elt;
+  return 0;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_array_next_node (gl_list_t list, gl_list_node_t node)
+{
+  uintptr_t index = NODE_TO_INDEX (node);
+  if (!(index < list->count))
+    /* Invalid argument.  */
+    abort ();
+  index++;
+  if (index < list->count)
+    return INDEX_TO_NODE (index);
+  else
+    return NULL;
+}
+
+static gl_list_node_t _GL_ATTRIBUTE_PURE
+gl_array_previous_node (gl_list_t list, gl_list_node_t node)
+{
+  uintptr_t index = NODE_TO_INDEX (node);
+  if (!(index < list->count))
+    /* Invalid argument.  */
+    abort ();
+  if (index > 0)
+    return INDEX_TO_NODE (index - 1);
+  else
+    return NULL;
+}
+
+static const void * _GL_ATTRIBUTE_PURE
+gl_array_get_at (gl_list_t list, size_t position)
+{
+  size_t count = list->count;
+
+  if (!(position < count))
+    /* Invalid argument.  */
+    abort ();
+  return list->elements[position];
+}
+
+static gl_list_node_t
+gl_array_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+  size_t count = list->count;
+
+  if (!(position < count))
+    /* Invalid argument.  */
+    abort ();
+  list->elements[position] = elt;
+  return INDEX_TO_NODE (position);
+}
+
+static size_t
+gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+                          const void *elt)
+{
+  size_t count = list->count;
+
+  if (!(start_index <= end_index && end_index <= count))
+    /* Invalid arguments.  */
+    abort ();
+
+  if (start_index < end_index)
+    {
+      gl_listelement_equals_fn equals = list->base.equals_fn;
+      if (equals != NULL)
+        {
+          size_t i;
+
+          for (i = start_index;;)
+            {
+              if (equals (elt, list->elements[i]))
+                return i;
+              i++;
+              if (i == end_index)
+                break;
+            }
+        }
+      else
+        {
+          size_t i;
+
+          for (i = start_index;;)
+            {
+              if (elt == list->elements[i])
+                return i;
+              i++;
+              if (i == end_index)
+                break;
+            }
+        }
+    }
+  return (size_t)(-1);
+}
+
+static gl_list_node_t
+gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+                         const void *elt)
+{
+  size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt);
+  return INDEX_TO_NODE (index);
+}
+
+/* Ensure that list->allocated > list->count.
+   Return 0 upon success, -1 upon out-of-memory.  */
+static int
+grow (gl_list_t list)
+{
+  size_t new_allocated;
+  size_t memory_size;
+  const void **memory;
+
+  new_allocated = xtimes (list->allocated, 2);
+  new_allocated = xsum (new_allocated, 1);
+  memory_size = xtimes (new_allocated, sizeof (const void *));
+  if (size_overflow_p (memory_size))
+    /* Overflow, would lead to out of memory.  */
+    return -1;
+  memory = (const void **) realloc (list->elements, memory_size);
+  if (memory == NULL)
+    /* Out of memory.  */
+    return -1;
+  list->elements = memory;
+  list->allocated = new_allocated;
+  return 0;
+}
+
+static gl_list_node_t
+gl_array_nx_add_first (gl_list_t list, const void *elt)
+{
+  size_t count = list->count;
+  const void **elements;
+  size_t i;
+
+  if (count == list->allocated)
+    if (grow (list) < 0)
+      return NULL;
+  elements = list->elements;
+  for (i = count; i > 0; i--)
+    elements[i] = elements[i - 1];
+  elements[0] = elt;
+  list->count = count + 1;
+  return INDEX_TO_NODE (0);
+}
+
+static gl_list_node_t
+gl_array_nx_add_last (gl_list_t list, const void *elt)
+{
+  size_t count = list->count;
+
+  if (count == list->allocated)
+    if (grow (list) < 0)
+      return NULL;
+  list->elements[count] = elt;
+  list->count = count + 1;
+  return INDEX_TO_NODE (count);
+}
+
+static gl_list_node_t
+gl_array_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  size_t count = list->count;
+  uintptr_t index = NODE_TO_INDEX (node);
+  size_t position;
+  const void **elements;
+  size_t i;
+
+  if (!(index < count))
+    /* Invalid argument.  */
+    abort ();
+  position = index;
+  if (count == list->allocated)
+    if (grow (list) < 0)
+      return NULL;
+  elements = list->elements;
+  for (i = count; i > position; i--)
+    elements[i] = elements[i - 1];
+  elements[position] = elt;
+  list->count = count + 1;
+  return INDEX_TO_NODE (position);
+}
+
+static gl_list_node_t
+gl_array_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  size_t count = list->count;
+  uintptr_t index = NODE_TO_INDEX (node);
+  size_t position;
+  const void **elements;
+  size_t i;
+
+  if (!(index < count))
+    /* Invalid argument.  */
+    abort ();
+  position = index + 1;
+  if (count == list->allocated)
+    if (grow (list) < 0)
+      return NULL;
+  elements = list->elements;
+  for (i = count; i > position; i--)
+    elements[i] = elements[i - 1];
+  elements[position] = elt;
+  list->count = count + 1;
+  return INDEX_TO_NODE (position);
+}
+
+static gl_list_node_t
+gl_array_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+  size_t count = list->count;
+  const void **elements;
+  size_t i;
+
+  if (!(position <= count))
+    /* Invalid argument.  */
+    abort ();
+  if (count == list->allocated)
+    if (grow (list) < 0)
+      return NULL;
+  elements = list->elements;
+  for (i = count; i > position; i--)
+    elements[i] = elements[i - 1];
+  elements[position] = elt;
+  list->count = count + 1;
+  return INDEX_TO_NODE (position);
+}
+
+static bool
+gl_array_remove_node (gl_list_t list, gl_list_node_t node)
+{
+  size_t count = list->count;
+  uintptr_t index = NODE_TO_INDEX (node);
+  size_t position;
+  const void **elements;
+  size_t i;
+
+  if (!(index < count))
+    /* Invalid argument.  */
+    abort ();
+  position = index;
+  elements = list->elements;
+  if (list->base.dispose_fn != NULL)
+    list->base.dispose_fn (elements[position]);
+  for (i = position + 1; i < count; i++)
+    elements[i - 1] = elements[i];
+  list->count = count - 1;
+  return true;
+}
+
+static bool
+gl_array_remove_at (gl_list_t list, size_t position)
+{
+  size_t count = list->count;
+  const void **elements;
+  size_t i;
+
+  if (!(position < count))
+    /* Invalid argument.  */
+    abort ();
+  elements = list->elements;
+  if (list->base.dispose_fn != NULL)
+    list->base.dispose_fn (elements[position]);
+  for (i = position + 1; i < count; i++)
+    elements[i - 1] = elements[i];
+  list->count = count - 1;
+  return true;
+}
+
+static bool
+gl_array_remove (gl_list_t list, const void *elt)
+{
+  size_t position = gl_array_indexof_from_to (list, 0, list->count, elt);
+  if (position == (size_t)(-1))
+    return false;
+  else
+    return gl_array_remove_at (list, position);
+}
+
+static void
+gl_array_list_free (gl_list_t list)
+{
+  if (list->elements != NULL)
+    {
+      if (list->base.dispose_fn != NULL)
+        {
+          size_t count = list->count;
+
+          if (count > 0)
+            {
+              gl_listelement_dispose_fn dispose = list->base.dispose_fn;
+              const void **elements = list->elements;
+
+              do
+                dispose (*elements++);
+              while (--count > 0);
+            }
+        }
+      free (list->elements);
+    }
+  free (list);
+}
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+static gl_list_iterator_t
+gl_array_iterator (gl_list_t list)
+{
+  gl_list_iterator_t result;
+
+  result.vtable = list->base.vtable;
+  result.list = list;
+  result.count = list->count;
+  result.p = list->elements + 0;
+  result.q = list->elements + list->count;
+#if defined GCC_LINT || defined lint
+  result.i = 0;
+  result.j = 0;
+#endif
+
+  return result;
+}
+
+static gl_list_iterator_t
+gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index)
+{
+  gl_list_iterator_t result;
+
+  if (!(start_index <= end_index && end_index <= list->count))
+    /* Invalid arguments.  */
+    abort ();
+  result.vtable = list->base.vtable;
+  result.list = list;
+  result.count = list->count;
+  result.p = list->elements + start_index;
+  result.q = list->elements + end_index;
+#if defined GCC_LINT || defined lint
+  result.i = 0;
+  result.j = 0;
+#endif
+
+  return result;
+}
+
+static bool
+gl_array_iterator_next (gl_list_iterator_t *iterator,
+                        const void **eltp, gl_list_node_t *nodep)
+{
+  gl_list_t list = iterator->list;
+  if (iterator->count != list->count)
+    {
+      if (iterator->count != list->count + 1)
+        /* Concurrent modifications were done on the list.  */
+        abort ();
+      /* The last returned element was removed.  */
+      iterator->count--;
+      iterator->p = (const void **) iterator->p - 1;
+      iterator->q = (const void **) iterator->q - 1;
+    }
+  if (iterator->p < iterator->q)
+    {
+      const void **p = (const void **) iterator->p;
+      *eltp = *p;
+      if (nodep != NULL)
+        *nodep = INDEX_TO_NODE (p - list->elements);
+      iterator->p = p + 1;
+      return true;
+    }
+  else
+    return false;
+}
+
+static void
+gl_array_iterator_free (gl_list_iterator_t *iterator _GL_UNUSED)
+{
+}
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+static size_t
+gl_array_sortedlist_indexof_from_to (gl_list_t list,
+                                     gl_listelement_compar_fn compar,
+                                     size_t low, size_t high,
+                                     const void *elt)
+{
+  if (!(low <= high && high <= list->count))
+    /* Invalid arguments.  */
+    abort ();
+  if (low < high)
+    {
+      /* At each loop iteration, low < high; for indices < low the values
+         are smaller than ELT; for indices >= high the values are greater
+         than ELT.  So, if the element occurs in the list, it is at
+         low <= position < high.  */
+      do
+        {
+          size_t mid = low + (high - low) / 2; /* low <= mid < high */
+          int cmp = compar (list->elements[mid], elt);
+
+          if (cmp < 0)
+            low = mid + 1;
+          else if (cmp > 0)
+            high = mid;
+          else /* cmp == 0 */
+            {
+              /* We have an element equal to ELT at index MID.  But we need
+                 the minimal such index.  */
+              high = mid;
+              /* At each loop iteration, low <= high and
+                   compar (list->elements[high], elt) == 0,
+                 and we know that the first occurrence of the element is at
+                 low <= position <= high.  */
+              while (low < high)
+                {
+                  size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */
+                  int cmp2 = compar (list->elements[mid2], elt);
+
+                  if (cmp2 < 0)
+                    low = mid2 + 1;
+                  else if (cmp2 > 0)
+                    /* The list was not sorted.  */
+                    abort ();
+                  else /* cmp2 == 0 */
+                    {
+                      if (mid2 == low)
+                        break;
+                      high = mid2 - 1;
+                    }
+                }
+              return low;
+            }
+        }
+      while (low < high);
+      /* Here low == high.  */
+    }
+  return (size_t)(-1);
+}
+
+static size_t
+gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar,
+                             const void *elt)
+{
+  return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count,
+                                              elt);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_search_from_to (gl_list_t list,
+                                    gl_listelement_compar_fn compar,
+                                    size_t low, size_t high,
+                                    const void *elt)
+{
+  size_t index =
+    gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt);
+  return INDEX_TO_NODE (index);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar,
+                            const void *elt)
+{
+  size_t index =
+    gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt);
+  return INDEX_TO_NODE (index);
+}
+
+static gl_list_node_t
+gl_array_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar,
+                            const void *elt)
+{
+  size_t count = list->count;
+  size_t low = 0;
+  size_t high = count;
+
+  /* At each loop iteration, low <= high; for indices < low the values are
+     smaller than ELT; for indices >= high the values are greater than ELT.  */
+  while (low < high)
+    {
+      size_t mid = low + (high - low) / 2; /* low <= mid < high */
+      int cmp = compar (list->elements[mid], elt);
+
+      if (cmp < 0)
+        low = mid + 1;
+      else if (cmp > 0)
+        high = mid;
+      else /* cmp == 0 */
+        {
+          low = mid;
+          break;
+        }
+    }
+  return gl_array_nx_add_at (list, low, elt);
+}
+
+static bool
+gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar,
+                            const void *elt)
+{
+  size_t index = gl_array_sortedlist_indexof (list, compar, elt);
+  if (index == (size_t)(-1))
+    return false;
+  else
+    return gl_array_remove_at (list, index);
+}
+
+
+const struct gl_list_implementation gl_array_list_implementation =
+  {
+    gl_array_nx_create_empty,
+    gl_array_nx_create,
+    gl_array_size,
+    gl_array_node_value,
+    gl_array_node_nx_set_value,
+    gl_array_next_node,
+    gl_array_previous_node,
+    gl_array_get_at,
+    gl_array_nx_set_at,
+    gl_array_search_from_to,
+    gl_array_indexof_from_to,
+    gl_array_nx_add_first,
+    gl_array_nx_add_last,
+    gl_array_nx_add_before,
+    gl_array_nx_add_after,
+    gl_array_nx_add_at,
+    gl_array_remove_node,
+    gl_array_remove_at,
+    gl_array_remove,
+    gl_array_list_free,
+    gl_array_iterator,
+    gl_array_iterator_from_to,
+    gl_array_iterator_next,
+    gl_array_iterator_free,
+    gl_array_sortedlist_search,
+    gl_array_sortedlist_search_from_to,
+    gl_array_sortedlist_indexof,
+    gl_array_sortedlist_indexof_from_to,
+    gl_array_sortedlist_nx_add,
+    gl_array_sortedlist_remove
+  };
diff --git a/lib/gl_array_list.h b/lib/gl_array_list.h
new file mode 100644
index 0000000..98158fe
--- /dev/null
+++ b/lib/gl_array_list.h
@@ -0,0 +1,34 @@
+/* Sequential list data type implemented by an array.
+   Copyright (C) 2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_ARRAY_LIST_H
+#define _GL_ARRAY_LIST_H
+
+#include "gl_list.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct gl_list_implementation gl_array_list_implementation;
+#define GL_ARRAY_LIST &gl_array_list_implementation
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_ARRAY_LIST_H */
diff --git a/lib/gl_list.c b/lib/gl_list.c
new file mode 100644
index 0000000..8793298
--- /dev/null
+++ b/lib/gl_list.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_LIST_INLINE _GL_EXTERN_INLINE
+#include "gl_list.h"
diff --git a/lib/gl_list.h b/lib/gl_list.h
new file mode 100644
index 0000000..5f2cade
--- /dev/null
+++ b/lib/gl_list.h
@@ -0,0 +1,843 @@
+/* Abstract sequential list data type.  -*- coding: utf-8 -*-
+   Copyright (C) 2006-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_LIST_H
+#define _GL_LIST_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_LIST_INLINE
+# define GL_LIST_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* gl_list is an abstract list data type.  It can contain any number of
+   objects ('void *' or 'const void *' pointers) in any given order.
+   Duplicates are allowed, but can optionally be forbidden.
+
+   There are several implementations of this list datatype, optimized for
+   different operations or for memory.  You can start using the simplest list
+   implementation, GL_ARRAY_LIST, and switch to a different implementation
+   later, when you realize which operations are performed the most frequently.
+   The API of the different implementations is exactly the same; when
+   switching to a different implementation, you only have to change the
+   gl_list_create call.
+
+   The implementations are:
+     GL_ARRAY_LIST        a growable array
+     GL_CARRAY_LIST       a growable circular array
+     GL_LINKED_LIST       a linked list
+     GL_AVLTREE_LIST      a binary tree (AVL tree)
+     GL_RBTREE_LIST       a binary tree (red-black tree)
+     GL_LINKEDHASH_LIST   a hash table with a linked list
+     GL_AVLTREEHASH_LIST  a hash table with a binary tree (AVL tree)
+     GL_RBTREEHASH_LIST   a hash table with a binary tree (red-black tree)
+
+   The memory consumption is asymptotically the same: O(1) for every object
+   in the list.  When looking more closely at the average memory consumed
+   for an object, GL_ARRAY_LIST is the most compact representation, and
+   GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory.
+
+   The guaranteed average performance of the operations is, for a list of
+   n elements:
+
+   Operation                  ARRAY    LINKED    TREE    LINKEDHASH   TREEHASH
+                              CARRAY                   with|without with|without
+                                                         duplicates  duplicates
+
+   gl_list_size                O(1)     O(1)     O(1)      O(1)         O(1)
+   gl_list_node_value          O(1)     O(1)     O(1)      O(1)         O(1)
+   gl_list_node_set_value      O(1)     O(1)     O(1)      O(1)    O((log n)²)/O(1)
+   gl_list_next_node           O(1)     O(1)   O(log n)    O(1)       O(log n)
+   gl_list_previous_node       O(1)     O(1)   O(log n)    O(1)       O(log n)
+   gl_list_get_at              O(1)     O(n)   O(log n)    O(n)       O(log n)
+   gl_list_set_at              O(1)     O(n)   O(log n)    O(n)    O((log n)²)/O(log n)
+   gl_list_search              O(n)     O(n)     O(n)    O(n)/O(1)    O(log n)/O(1)
+   gl_list_search_from         O(n)     O(n)     O(n)    O(n)/O(1) O((log n)²)/O(log n)
+   gl_list_search_from_to      O(n)     O(n)     O(n)    O(n)/O(1) O((log n)²)/O(log n)
+   gl_list_indexof             O(n)     O(n)     O(n)      O(n)       O(log n)
+   gl_list_indexof_from        O(n)     O(n)     O(n)      O(n)    O((log n)²)/O(log n)
+   gl_list_indexof_from_to     O(n)     O(n)     O(n)      O(n)    O((log n)²)/O(log n)
+   gl_list_add_first         O(n)/O(1)  O(1)   O(log n)    O(1)    O((log n)²)/O(log n)
+   gl_list_add_last            O(1)     O(1)   O(log n)    O(1)    O((log n)²)/O(log n)
+   gl_list_add_before          O(n)     O(1)   O(log n)    O(1)    O((log n)²)/O(log n)
+   gl_list_add_after           O(n)     O(1)   O(log n)    O(1)    O((log n)²)/O(log n)
+   gl_list_add_at              O(n)     O(n)   O(log n)    O(n)    O((log n)²)/O(log n)
+   gl_list_remove_node         O(n)     O(1)   O(log n)  O(n)/O(1) O((log n)²)/O(log n)
+   gl_list_remove_at           O(n)     O(n)   O(log n)    O(n)    O((log n)²)/O(log n)
+   gl_list_remove              O(n)     O(n)     O(n)    O(n)/O(1) O((log n)²)/O(log n)
+   gl_list_iterator            O(1)     O(1)   O(log n)    O(1)       O(log n)
+   gl_list_iterator_from_to    O(1)     O(n)   O(log n)    O(n)       O(log n)
+   gl_list_iterator_next       O(1)     O(1)   O(log n)    O(1)       O(log n)
+   gl_sortedlist_search      O(log n)   O(n)   O(log n)    O(n)       O(log n)
+   gl_sortedlist_search_from O(log n)   O(n)   O(log n)    O(n)       O(log n)
+   gl_sortedlist_indexof     O(log n)   O(n)   O(log n)    O(n)       O(log n)
+   gl_sortedlist_indexof_fro O(log n)   O(n)   O(log n)    O(n)       O(log n)
+   gl_sortedlist_add           O(n)     O(n)   O(log n)    O(n)    O((log n)²)/O(log n)
+   gl_sortedlist_remove        O(n)     O(n)   O(log n)    O(n)    O((log n)²)/O(log n)
+ */
+
+/* -------------------------- gl_list_t Data Type -------------------------- */
+
+/* Type of function used to compare two elements.
+   NULL denotes pointer comparison.  */
+typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2);
+
+/* Type of function used to compute a hash code.
+   NULL denotes a function that depends only on the pointer itself.  */
+typedef size_t (*gl_listelement_hashcode_fn) (const void *elt);
+
+/* Type of function used to dispose an element once it's removed from a list.
+   NULL denotes a no-op.  */
+typedef void (*gl_listelement_dispose_fn) (const void *elt);
+
+struct gl_list_impl;
+/* Type representing an entire list.  */
+typedef struct gl_list_impl * gl_list_t;
+
+struct gl_list_node_impl;
+/* Type representing the position of an element in the list, in a way that
+   is more adapted to the list implementation than a plain index.
+   Note: It is invalidated by insertions and removals!  */
+typedef struct gl_list_node_impl * gl_list_node_t;
+
+struct gl_list_implementation;
+/* Type representing a list datatype implementation.  */
+typedef const struct gl_list_implementation * gl_list_implementation_t;
+
+#if 0 /* Unless otherwise specified, these are defined inline below.  */
+
+/* Create an empty list.
+   IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST,
+   GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST,
+   GL_RBTREEHASH_LIST.
+   EQUALS_FN is an element comparison function or NULL.
+   HASHCODE_FN is an element hash code function or NULL.
+   DISPOSE_FN is an element disposal function or NULL.
+   ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
+   the list. The implementation may verify this at runtime.  */
+/* declared in gl_xlist.h */
+extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation,
+                                       gl_listelement_equals_fn equals_fn,
+                                       gl_listelement_hashcode_fn hashcode_fn,
+                                       gl_listelement_dispose_fn dispose_fn,
+                                       bool allow_duplicates);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation,
+                                          gl_listelement_equals_fn equals_fn,
+                                          gl_listelement_hashcode_fn hashcode_fn,
+                                          gl_listelement_dispose_fn dispose_fn,
+                                          bool allow_duplicates);
+
+/* Create a list with given contents.
+   IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST,
+   GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST,
+   GL_RBTREEHASH_LIST.
+   EQUALS_FN is an element comparison function or NULL.
+   HASHCODE_FN is an element hash code function or NULL.
+   DISPOSE_FN is an element disposal function or NULL.
+   ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
+   the list. The implementation may verify this at runtime.
+   COUNT is the number of initial elements.
+   CONTENTS[0..COUNT-1] is the initial contents.  */
+/* declared in gl_xlist.h */
+extern gl_list_t gl_list_create (gl_list_implementation_t implementation,
+                                 gl_listelement_equals_fn equals_fn,
+                                 gl_listelement_hashcode_fn hashcode_fn,
+                                 gl_listelement_dispose_fn dispose_fn,
+                                 bool allow_duplicates,
+                                 size_t count, const void **contents);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation,
+                                    gl_listelement_equals_fn equals_fn,
+                                    gl_listelement_hashcode_fn hashcode_fn,
+                                    gl_listelement_dispose_fn dispose_fn,
+                                    bool allow_duplicates,
+                                    size_t count, const void **contents);
+
+/* Return the current number of elements in a list.  */
+extern size_t gl_list_size (gl_list_t list);
+
+/* Return the element value represented by a list node.  */
+extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node);
+
+/* Replace the element value represented by a list node.  */
+/* declared in gl_xlist.h */
+extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node,
+                                    const void *elt);
+/* Likewise.  Return 0 upon success, -1 upon out-of-memory.  */
+extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+                                      const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Return the node immediately after the given node in the list, or NULL
+   if the given node is the last (rightmost) one in the list.  */
+extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node);
+
+/* Return the node immediately before the given node in the list, or NULL
+   if the given node is the first (leftmost) one in the list.  */
+extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node);
+
+/* Return the element at a given position in the list.
+   POSITION must be >= 0 and < gl_list_size (list).  */
+extern const void * gl_list_get_at (gl_list_t list, size_t position);
+
+/* Replace the element at a given position in the list.
+   POSITION must be >= 0 and < gl_list_size (list).
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position,
+                                      const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position,
+                                         const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Search whether an element is already in the list.
+   Return its node if found, or NULL if not present in the list.  */
+extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt);
+
+/* Search whether an element is already in the list,
+   at a position >= START_INDEX.
+   Return its node if found, or NULL if not present in the list.  */
+extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index,
+                                           const void *elt);
+
+/* Search whether an element is already in the list,
+   at a position >= START_INDEX and < END_INDEX.
+   Return its node if found, or NULL if not present in the list.  */
+extern gl_list_node_t gl_list_search_from_to (gl_list_t list,
+                                              size_t start_index,
+                                              size_t end_index,
+                                              const void *elt);
+
+/* Search whether an element is already in the list.
+   Return its position if found, or (size_t)(-1) if not present in the list.  */
+extern size_t gl_list_indexof (gl_list_t list, const void *elt);
+
+/* Search whether an element is already in the list,
+   at a position >= START_INDEX.
+   Return its position if found, or (size_t)(-1) if not present in the list.  */
+extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index,
+                                    const void *elt);
+
+/* Search whether an element is already in the list,
+   at a position >= START_INDEX and < END_INDEX.
+   Return its position if found, or (size_t)(-1) if not present in the list.  */
+extern size_t gl_list_indexof_from_to (gl_list_t list,
+                                       size_t start_index, size_t end_index,
+                                       const void *elt);
+
+/* Add an element as the first element of the list.
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Add an element as the last element of the list.
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Add an element before a given element node of the list.
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node,
+                                          const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_add_before (gl_list_t list,
+                                             gl_list_node_t node,
+                                             const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Add an element after a given element node of the list.
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node,
+                                         const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node,
+                                            const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Add an element at a given position in the list.
+   POSITION must be >= 0 and <= gl_list_size (list).  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position,
+                                      const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position,
+                                         const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Remove an element from the list.
+   Return true.  */
+extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node);
+
+/* Remove an element at a given position from the list.
+   POSITION must be >= 0 and < gl_list_size (list).
+   Return true.  */
+extern bool gl_list_remove_at (gl_list_t list, size_t position);
+
+/* Search and remove an element from the list.
+   Return true if it was found and removed.  */
+extern bool gl_list_remove (gl_list_t list, const void *elt);
+
+/* Free an entire list.
+   (But this call does not free the elements of the list.  It only invokes
+   the DISPOSE_FN on each of the elements of the list, and only if the list
+   is not a sublist.)  */
+extern void gl_list_free (gl_list_t list);
+
+#endif /* End of inline and gl_xlist.h-defined functions.  */
+
+/* --------------------- gl_list_iterator_t Data Type --------------------- */
+
+/* Functions for iterating through a list.  */
+
+/* Type of an iterator that traverses a list.
+   This is a fixed-size struct, so that creation of an iterator doesn't need
+   memory allocation on the heap.  */
+typedef struct
+{
+  /* For fast dispatch of gl_list_iterator_next.  */
+  const struct gl_list_implementation *vtable;
+  /* For detecting whether the last returned element was removed.  */
+  gl_list_t list;
+  size_t count;
+  /* Other, implementation-private fields.  */
+  void *p; void *q;
+  size_t i; size_t j;
+} gl_list_iterator_t;
+
+#if 0 /* These are defined inline below.  */
+
+/* Create an iterator traversing a list.
+   The list contents must not be modified while the iterator is in use,
+   except for replacing or removing the last returned element.  */
+extern gl_list_iterator_t gl_list_iterator (gl_list_t list);
+
+/* Create an iterator traversing the element with indices i,
+   start_index <= i < end_index, of a list.
+   The list contents must not be modified while the iterator is in use,
+   except for replacing or removing the last returned element.  */
+extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list,
+                                                    size_t start_index,
+                                                    size_t end_index);
+
+/* If there is a next element, store the next element in *ELTP, store its
+   node in *NODEP if NODEP is non-NULL, advance the iterator and return true.
+   Otherwise, return false.  */
+extern bool gl_list_iterator_next (gl_list_iterator_t *iterator,
+                                   const void **eltp, gl_list_node_t *nodep);
+
+/* Free an iterator.  */
+extern void gl_list_iterator_free (gl_list_iterator_t *iterator);
+
+#endif /* End of inline functions.  */
+
+/* ---------------------- Sorted gl_list_t Data Type ---------------------- */
+
+/* The following functions are for lists without duplicates where the
+   order is given by a sort criterion.  */
+
+/* Type of function used to compare two elements.  Same as for qsort().
+   NULL denotes pointer comparison.  */
+typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2);
+
+#if 0 /* Unless otherwise specified, these are defined inline below.  */
+
+/* Search whether an element is already in the list.
+   The list is assumed to be sorted with COMPAR.
+   Return its node if found, or NULL if not present in the list.
+   If the list contains several copies of ELT, the node of the leftmost one is
+   returned.  */
+extern gl_list_node_t gl_sortedlist_search (gl_list_t list,
+                                            gl_listelement_compar_fn compar,
+                                            const void *elt);
+
+/* Search whether an element is already in the list.
+   The list is assumed to be sorted with COMPAR.
+   Only list elements with indices >= START_INDEX and < END_INDEX are
+   considered; the implementation uses these bounds to minimize the number
+   of COMPAR invocations.
+   Return its node if found, or NULL if not present in the list.
+   If the list contains several copies of ELT, the node of the leftmost one is
+   returned.  */
+extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list,
+                                                    gl_listelement_compar_fn compar,
+                                                    size_t start_index,
+                                                    size_t end_index,
+                                                    const void *elt);
+
+/* Search whether an element is already in the list.
+   The list is assumed to be sorted with COMPAR.
+   Return its position if found, or (size_t)(-1) if not present in the list.
+   If the list contains several copies of ELT, the position of the leftmost one
+   is returned.  */
+extern size_t gl_sortedlist_indexof (gl_list_t list,
+                                     gl_listelement_compar_fn compar,
+                                     const void *elt);
+
+/* Search whether an element is already in the list.
+   The list is assumed to be sorted with COMPAR.
+   Only list elements with indices >= START_INDEX and < END_INDEX are
+   considered; the implementation uses these bounds to minimize the number
+   of COMPAR invocations.
+   Return its position if found, or (size_t)(-1) if not present in the list.
+   If the list contains several copies of ELT, the position of the leftmost one
+   is returned.  */
+extern size_t gl_sortedlist_indexof_from_to (gl_list_t list,
+                                             gl_listelement_compar_fn compar,
+                                             size_t start_index,
+                                             size_t end_index,
+                                             const void *elt);
+
+/* Add an element at the appropriate position in the list.
+   The list is assumed to be sorted with COMPAR.
+   Return its node.  */
+/* declared in gl_xlist.h */
+extern gl_list_node_t gl_sortedlist_add (gl_list_t list,
+                                         gl_listelement_compar_fn compar,
+                                         const void *elt);
+/* Likewise.  Return NULL upon out-of-memory.  */
+extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list,
+                                            gl_listelement_compar_fn compar,
+                                            const void *elt)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+  ;
+
+/* Search and remove an element from the list.
+   The list is assumed to be sorted with COMPAR.
+   Return true if it was found and removed.
+   If the list contains several copies of ELT, only the leftmost one is
+   removed.  */
+extern bool gl_sortedlist_remove (gl_list_t list,
+                                  gl_listelement_compar_fn compar,
+                                  const void *elt);
+
+#endif /* End of inline and gl_xlist.h-defined functions.  */
+
+/* ------------------------ Implementation Details ------------------------ */
+
+struct gl_list_implementation
+{
+  /* gl_list_t functions.  */
+  gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation,
+                                gl_listelement_equals_fn equals_fn,
+                                gl_listelement_hashcode_fn hashcode_fn,
+                                gl_listelement_dispose_fn dispose_fn,
+                                bool allow_duplicates);
+  gl_list_t (*nx_create) (gl_list_implementation_t implementation,
+                          gl_listelement_equals_fn equals_fn,
+                          gl_listelement_hashcode_fn hashcode_fn,
+                          gl_listelement_dispose_fn dispose_fn,
+                          bool allow_duplicates,
+                          size_t count, const void **contents);
+  size_t (*size) (gl_list_t list);
+  const void * (*node_value) (gl_list_t list, gl_list_node_t node);
+  int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node,
+                            const void *elt);
+  gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node);
+  gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node);
+  const void * (*get_at) (gl_list_t list, size_t position);
+  gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position,
+                               const void *elt);
+  gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index,
+                                    size_t end_index, const void *elt);
+  size_t (*indexof_from_to) (gl_list_t list, size_t start_index,
+                             size_t end_index, const void *elt);
+  gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt);
+  gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt);
+  gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node,
+                                   const void *elt);
+  gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node,
+                                  const void *elt);
+  gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position,
+                               const void *elt);
+  bool (*remove_node) (gl_list_t list, gl_list_node_t node);
+  bool (*remove_at) (gl_list_t list, size_t position);
+  bool (*remove_elt) (gl_list_t list, const void *elt);
+  void (*list_free) (gl_list_t list);
+  /* gl_list_iterator_t functions.  */
+  gl_list_iterator_t (*iterator) (gl_list_t list);
+  gl_list_iterator_t (*iterator_from_to) (gl_list_t list,
+                                          size_t start_index,
+                                          size_t end_index);
+  bool (*iterator_next) (gl_list_iterator_t *iterator,
+                         const void **eltp, gl_list_node_t *nodep);
+  void (*iterator_free) (gl_list_iterator_t *iterator);
+  /* Sorted gl_list_t functions.  */
+  gl_list_node_t (*sortedlist_search) (gl_list_t list,
+                                       gl_listelement_compar_fn compar,
+                                       const void *elt);
+  gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list,
+                                               gl_listelement_compar_fn compar,
+                                               size_t start_index,
+                                               size_t end_index,
+                                               const void *elt);
+  size_t (*sortedlist_indexof) (gl_list_t list,
+                                gl_listelement_compar_fn compar,
+                                const void *elt);
+  size_t (*sortedlist_indexof_from_to) (gl_list_t list,
+                                        gl_listelement_compar_fn compar,
+                                        size_t start_index, size_t end_index,
+                                        const void *elt);
+  gl_list_node_t (*sortedlist_nx_add) (gl_list_t list,
+                                       gl_listelement_compar_fn compar,
+                                    const void *elt);
+  bool (*sortedlist_remove) (gl_list_t list,
+                             gl_listelement_compar_fn compar,
+                             const void *elt);
+};
+
+struct gl_list_impl_base
+{
+  const struct gl_list_implementation *vtable;
+  gl_listelement_equals_fn equals_fn;
+  gl_listelement_hashcode_fn hashcode_fn;
+  gl_listelement_dispose_fn dispose_fn;
+  bool allow_duplicates;
+};
+
+/* Define all functions of this file as accesses to the
+   struct gl_list_implementation.  */
+
+GL_LIST_INLINE gl_list_t
+gl_list_nx_create_empty (gl_list_implementation_t implementation,
+                         gl_listelement_equals_fn equals_fn,
+                         gl_listelement_hashcode_fn hashcode_fn,
+                         gl_listelement_dispose_fn dispose_fn,
+                         bool allow_duplicates)
+{
+  return implementation->nx_create_empty (implementation, equals_fn,
+                                          hashcode_fn, dispose_fn,
+                                          allow_duplicates);
+}
+
+GL_LIST_INLINE gl_list_t
+gl_list_nx_create (gl_list_implementation_t implementation,
+                   gl_listelement_equals_fn equals_fn,
+                   gl_listelement_hashcode_fn hashcode_fn,
+                   gl_listelement_dispose_fn dispose_fn,
+                   bool allow_duplicates,
+                   size_t count, const void **contents)
+{
+  return implementation->nx_create (implementation, equals_fn, hashcode_fn,
+                                    dispose_fn, allow_duplicates, count,
+                                    contents);
+}
+
+GL_LIST_INLINE size_t
+gl_list_size (gl_list_t list)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->size (list);
+}
+
+GL_LIST_INLINE const void *
+gl_list_node_value (gl_list_t list, gl_list_node_t node)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->node_value (list, node);
+}
+
+GL_LIST_INLINE int
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node,
+                           const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->node_nx_set_value (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_next_node (gl_list_t list, gl_list_node_t node)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->next_node (list, node);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_previous_node (gl_list_t list, gl_list_node_t node)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->previous_node (list, node);
+}
+
+GL_LIST_INLINE const void *
+gl_list_get_at (gl_list_t list, size_t position)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->get_at (list, position);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_set_at (list, position, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search (gl_list_t list, const void *elt)
+{
+  size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->search_from_to (list, 0, size, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search_from (gl_list_t list, size_t start_index, const void *elt)
+{
+  size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->search_from_to (list, start_index, size, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index,
+                        const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->search_from_to (list, start_index, end_index, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof (gl_list_t list, const void *elt)
+{
+  size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->indexof_from_to (list, 0, size, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt)
+{
+  size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list);
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->indexof_from_to (list, start_index, size, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index,
+                         const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->indexof_from_to (list, start_index, end_index, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_first (gl_list_t list, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_add_first (list, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_last (gl_list_t list, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_add_last (list, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_add_before (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_add_after (list, node, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->nx_add_at (list, position, elt);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove_node (gl_list_t list, gl_list_node_t node)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->remove_node (list, node);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove_at (gl_list_t list, size_t position)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->remove_at (list, position);
+}
+
+GL_LIST_INLINE bool
+gl_list_remove (gl_list_t list, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->remove_elt (list, elt);
+}
+
+GL_LIST_INLINE void
+gl_list_free (gl_list_t list)
+{
+  ((const struct gl_list_impl_base *) list)->vtable->list_free (list);
+}
+
+GL_LIST_INLINE gl_list_iterator_t
+gl_list_iterator (gl_list_t list)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->iterator (list);
+}
+
+GL_LIST_INLINE gl_list_iterator_t
+gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->iterator_from_to (list, start_index, end_index);
+}
+
+GL_LIST_INLINE bool
+gl_list_iterator_next (gl_list_iterator_t *iterator,
+                       const void **eltp, gl_list_node_t *nodep)
+{
+  return iterator->vtable->iterator_next (iterator, eltp, nodep);
+}
+
+GL_LIST_INLINE void
+gl_list_iterator_free (gl_list_iterator_t *iterator)
+{
+  iterator->vtable->iterator_free (iterator);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_search (list, compar, elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_search_from_to (list, compar, start_index, end_index,
+                                      elt);
+}
+
+GL_LIST_INLINE size_t
+gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_indexof (list, compar, elt);
+}
+
+GL_LIST_INLINE size_t
+gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_indexof_from_to (list, compar, start_index, end_index,
+                                       elt);
+}
+
+GL_LIST_INLINE gl_list_node_t
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+  __attribute__ ((__warn_unused_result__))
+#endif
+gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_nx_add (list, compar, elt);
+}
+
+GL_LIST_INLINE bool
+gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt)
+{
+  return ((const struct gl_list_impl_base *) list)->vtable
+         ->sortedlist_remove (list, compar, elt);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_LIST_H */
diff --git a/lib/gl_xlist.c b/lib/gl_xlist.c
new file mode 100644
index 0000000..fe3c893
--- /dev/null
+++ b/lib/gl_xlist.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define GL_XLIST_INLINE _GL_EXTERN_INLINE
+#include "gl_xlist.h"
diff --git a/lib/gl_xlist.h b/lib/gl_xlist.h
new file mode 100644
index 0000000..87885c3
--- /dev/null
+++ b/lib/gl_xlist.h
@@ -0,0 +1,177 @@
+/* Abstract sequential list data type, with out-of-memory checking.
+   Copyright (C) 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_XLIST_H
+#define _GL_XLIST_H
+
+#include "gl_list.h"
+#include "xalloc.h"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef GL_XLIST_INLINE
+# define GL_XLIST_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are thin wrappers around the corresponding functions with
+   _nx_ infix from gl_list.h.  Upon out-of-memory, they invoke xalloc_die (),
+   instead of returning an error indicator.  */
+#if 0 /* These are defined inline below.  */
+extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation,
+                                       gl_listelement_equals_fn equals_fn,
+                                       gl_listelement_hashcode_fn hashcode_fn,
+                                       gl_listelement_dispose_fn dispose_fn,
+                                       bool allow_duplicates);
+extern gl_list_t gl_list_create (gl_list_implementation_t implementation,
+                                 gl_listelement_equals_fn equals_fn,
+                                 gl_listelement_hashcode_fn hashcode_fn,
+                                 gl_listelement_dispose_fn dispose_fn,
+                                 bool allow_duplicates,
+                                 size_t count, const void **contents);
+extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node,
+                                    const void *elt);
+extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position,
+                                      const void *elt);
+extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt);
+extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt);
+extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node,
+                                          const void *elt);
+extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node,
+                                         const void *elt);
+extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position,
+                                      const void *elt);
+extern gl_list_node_t gl_sortedlist_add (gl_list_t list,
+                                         gl_listelement_compar_fn compar,
+                                         const void *elt);
+#endif
+
+GL_XLIST_INLINE gl_list_t
+gl_list_create_empty (gl_list_implementation_t implementation,
+                      gl_listelement_equals_fn equals_fn,
+                      gl_listelement_hashcode_fn hashcode_fn,
+                      gl_listelement_dispose_fn dispose_fn,
+                      bool allow_duplicates)
+{
+  gl_list_t result =
+    gl_list_nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn,
+                             allow_duplicates);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_t
+gl_list_create (gl_list_implementation_t implementation,
+                gl_listelement_equals_fn equals_fn,
+                gl_listelement_hashcode_fn hashcode_fn,
+                gl_listelement_dispose_fn dispose_fn,
+                bool allow_duplicates,
+                size_t count, const void **contents)
+{
+  gl_list_t result =
+    gl_list_nx_create (implementation, equals_fn, hashcode_fn, dispose_fn,
+                       allow_duplicates, count, contents);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE void
+gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  int result = gl_list_node_nx_set_value (list, node, elt);
+  if (result < 0)
+    xalloc_die ();
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_set_at (gl_list_t list, size_t position, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_set_at (list, position, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_first (gl_list_t list, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_add_first (list, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_last (gl_list_t list, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_add_last (list, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_add_before (list, node, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_add_after (list, node, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_list_add_at (gl_list_t list, size_t position, const void *elt)
+{
+  gl_list_node_t result = gl_list_nx_add_at (list, position, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+GL_XLIST_INLINE gl_list_node_t
+gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar,
+                   const void *elt)
+{
+  gl_list_node_t result = gl_sortedlist_nx_add (list, compar, elt);
+  if (result == NULL)
+    xalloc_die ();
+  return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _GL_XLIST_H */
diff --git a/lib/glthread/lock.c b/lib/glthread/lock.c
index bc0df29..e471188 100644
--- a/lib/glthread/lock.c
+++ b/lib/glthread/lock.c
@@ -1,5 +1,5 @@
 /* Locking in multithreaded situations.
-   Copyright (C) 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2019 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
@@ -12,11 +12,10 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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.  */
+   Based on GCC's gthr-posix.h, gthr-posix95.h.  */
 
 #include <config.h>
 
@@ -24,15 +23,267 @@
 
 /* ========================================================================= */
 
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+int
+glthread_lock_init (gl_lock_t *lock)
+{
+  if (mtx_init (&lock->mutex, mtx_plain) != thrd_success)
+    return ENOMEM;
+  lock->init_needed = 0;
+  return 0;
+}
+
+int
+glthread_lock_lock (gl_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_lock (&lock->mutex) != thrd_success)
+    return EAGAIN;
+  return 0;
+}
+
+int
+glthread_lock_unlock (gl_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_unlock (&lock->mutex) != thrd_success)
+    return EINVAL;
+  return 0;
+}
+
+int
+glthread_lock_destroy (gl_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  mtx_destroy (&lock->mutex);
+  return 0;
+}
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+int
+glthread_rwlock_init (gl_rwlock_t *lock)
+{
+  if (mtx_init (&lock->lock, mtx_plain) != thrd_success
+      || cnd_init (&lock->waiting_readers) != thrd_success
+      || cnd_init (&lock->waiting_writers) != thrd_success)
+    return ENOMEM;
+  lock->waiting_writers_count = 0;
+  lock->runcount = 0;
+  lock->init_needed = 0;
+  return 0;
+}
+
+int
+glthread_rwlock_rdlock (gl_rwlock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_lock (&lock->lock) != thrd_success)
+    return EAGAIN;
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow, and whether no writer is waiting.  The latter
+     condition is because POSIX recommends that "write locks shall take
+     precedence over read locks", to avoid "writer starvation".  */
+  while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_readers.  */
+      if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success)
+        {
+          mtx_unlock (&lock->lock);
+          return EINVAL;
+        }
+    }
+  lock->runcount++;
+  if (mtx_unlock (&lock->lock) != thrd_success)
+    return EINVAL;
+  return 0;
+}
+
+int
+glthread_rwlock_wrlock (gl_rwlock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_lock (&lock->lock) != thrd_success)
+    return EAGAIN;
+  /* 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++;
+      if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success)
+        {
+          lock->waiting_writers_count--;
+          mtx_unlock (&lock->lock);
+          return EINVAL;
+        }
+      lock->waiting_writers_count--;
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  if (mtx_unlock (&lock->lock) != thrd_success)
+    return EINVAL;
+  return 0;
+}
+
+int
+glthread_rwlock_unlock (gl_rwlock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_lock (&lock->lock) != thrd_success)
+    return EAGAIN;
+  if (lock->runcount < 0)
+    {
+      /* Drop a writer lock.  */
+      if (!(lock->runcount == -1))
+        {
+          mtx_unlock (&lock->lock);
+          return EINVAL;
+        }
+      lock->runcount = 0;
+    }
+  else
+    {
+      /* Drop a reader lock.  */
+      if (!(lock->runcount > 0))
+        {
+          mtx_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.  */
+          if (cnd_signal (&lock->waiting_writers) != thrd_success)
+            {
+              mtx_unlock (&lock->lock);
+              return EINVAL;
+            }
+        }
+      else
+        {
+          /* Wake up all waiting readers.  */
+          if (cnd_broadcast (&lock->waiting_readers) != thrd_success)
+            {
+              mtx_unlock (&lock->lock);
+              return EINVAL;
+            }
+        }
+    }
+  if (mtx_unlock (&lock->lock) != thrd_success)
+    return EINVAL;
+  return 0;
+}
+
+int
+glthread_rwlock_destroy (gl_rwlock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  mtx_destroy (&lock->lock);
+  cnd_destroy (&lock->waiting_readers);
+  cnd_destroy (&lock->waiting_writers);
+  return 0;
+}
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+int
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+  if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success)
+    return ENOMEM;
+  lock->init_needed = 0;
+  return 0;
+}
+
+int
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_lock (&lock->mutex) != thrd_success)
+    return EAGAIN;
+  return 0;
+}
+
+int
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  if (mtx_unlock (&lock->mutex) != thrd_success)
+    return EINVAL;
+  return 0;
+}
+
+int
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+  if (lock->init_needed)
+    call_once (&lock->init_once, lock->init_func);
+  mtx_destroy (&lock->mutex);
+  return 0;
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+#endif
+
+/* ========================================================================= */
+
 #if USE_POSIX_THREADS
 
 /* -------------------------- gl_lock_t datatype -------------------------- */
 
 /* ------------------------- gl_rwlock_t datatype ------------------------- */
 
-# if HAVE_PTHREAD_RWLOCK
+# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
 
-#  if !defined PTHREAD_RWLOCK_INITIALIZER
+#  ifdef PTHREAD_RWLOCK_INITIALIZER
+
+#   if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+     /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+
+int
+glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock)
+{
+  pthread_rwlockattr_t attributes;
+  int err;
+
+  err = pthread_rwlockattr_init (&attributes);
+  if (err != 0)
+    return err;
+  /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that
+     causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not
+     do this; see
+     http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */
+  err = pthread_rwlockattr_setkind_np (&attributes,
+                                       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
+  if (err == 0)
+    err = pthread_rwlock_init(lock, &attributes);
+  /* pthread_rwlockattr_destroy always returns 0.  It cannot influence the
+     return value.  */
+  pthread_rwlockattr_destroy (&attributes);
+  return err;
+}
+
+#   endif
+#  else
 
 int
 glthread_rwlock_init_multithreaded (gl_rwlock_t *lock)
@@ -152,11 +403,9 @@
   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.  */
+     field will not overflow, and whether no writer is waiting.  The latter
+     condition is because POSIX recommends that "write locks shall take
+     precedence over read locks", to avoid "writer starvation".  */
   while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
     {
       /* This thread has to wait for a while.  Enqueue it among the
@@ -473,585 +722,8 @@
 
 /* ========================================================================= */
 
-#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
index 6782d49..c190e2e 100644
--- a/lib/glthread/lock.h
+++ b/lib/glthread/lock.h
@@ -1,5 +1,5 @@
 /* Locking in multithreaded situations.
-   Copyright (C) 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2019 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
@@ -12,11 +12,10 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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.  */
+   Based on GCC's gthr-posix.h, gthr-posix95.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
@@ -81,6 +80,125 @@
 #include <errno.h>
 #include <stdlib.h>
 
+#if !defined c11_threads_in_use
+# if HAVE_THREADS_H && USE_POSIX_THREADS_WEAK
+#  include <threads.h>
+#  pragma weak thrd_exit
+#  define c11_threads_in_use() (thrd_exit != NULL)
+# else
+#  define c11_threads_in_use() 0
+# endif
+#endif
+
+/* ========================================================================= */
+
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* Use the ISO C threads library.  */
+
+# include <threads.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef struct
+        {
+          int volatile init_needed;
+          once_flag init_once;
+          void (*init_func) (void);
+          mtx_t mutex;
+        }
+        gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_lock_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    static void _atomic_init_##NAME (void);       \
+    STORAGECLASS gl_lock_t NAME =                 \
+      { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+    static void _atomic_init_##NAME (void)        \
+    {                                             \
+      if (glthread_lock_init (&(NAME)))           \
+        abort ();                                 \
+    }
+extern int glthread_lock_init (gl_lock_t *lock);
+extern int glthread_lock_lock (gl_lock_t *lock);
+extern int glthread_lock_unlock (gl_lock_t *lock);
+extern int glthread_lock_destroy (gl_lock_t *lock);
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef struct
+        {
+          int volatile init_needed;
+          once_flag init_once;
+          void (*init_func) (void);
+          mtx_t lock; /* protects the remaining fields */
+          cnd_t waiting_readers; /* waiting readers */
+          cnd_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) \
+    static void _atomic_init_##NAME (void);       \
+    STORAGECLASS gl_rwlock_t NAME =               \
+      { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+    static void _atomic_init_##NAME (void)        \
+    {                                             \
+      if (glthread_rwlock_init (&(NAME)))         \
+        abort ();                                 \
+    }
+extern int glthread_rwlock_init (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy (gl_rwlock_t *lock);
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef struct
+        {
+          int volatile init_needed;
+          once_flag init_once;
+          void (*init_func) (void);
+          mtx_t mutex;
+        }
+        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) \
+    static void _atomic_init_##NAME (void);       \
+    STORAGECLASS gl_recursive_lock_t NAME =       \
+      { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+    static void _atomic_init_##NAME (void)        \
+    {                                             \
+      if (glthread_recursive_lock_init (&(NAME))) \
+        abort ();                                 \
+    }
+extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef once_flag gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS once_flag NAME = ONCE_FLAG_INIT;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+    (call_once (ONCE_CONTROL, INITFUNCTION), 0)
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
 /* ========================================================================= */
 
 #if USE_POSIX_THREADS
@@ -139,13 +257,25 @@
 #  pragma weak pthread_mutexattr_init
 #  pragma weak pthread_mutexattr_settype
 #  pragma weak pthread_mutexattr_destroy
+#  pragma weak pthread_rwlockattr_init
+#  if __GNU_LIBRARY__ > 1
+#   pragma weak pthread_rwlockattr_setkind_np
+#  endif
+#  pragma weak pthread_rwlockattr_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)
+    /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols
+       can be used to determine whether libpthread is in use.  These are:
+         pthread_mutexattr_gettype
+         pthread_rwlockattr_destroy
+         pthread_rwlockattr_init
+     */
+#   pragma weak pthread_mutexattr_gettype
+#   define pthread_in_use() \
+      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
 #  endif
 
 # else
@@ -176,7 +306,7 @@
 
 /* ------------------------- gl_rwlock_t datatype ------------------------- */
 
-# if HAVE_PTHREAD_RWLOCK
+# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
 
 #  ifdef PTHREAD_RWLOCK_INITIALIZER
 
@@ -185,10 +315,18 @@
       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)
+#   if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+#    define gl_rwlock_initializer \
+       PTHREAD_RWLOCK_INITIALIZER
+#    define glthread_rwlock_init(LOCK) \
+       (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0)
+#   else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+#    define gl_rwlock_initializer \
+       PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+#    define glthread_rwlock_init(LOCK) \
+       (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0)
+extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock);
+#   endif
 #   define glthread_rwlock_rdlock(LOCK) \
       (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0)
 #   define glthread_rwlock_wrlock(LOCK) \
@@ -376,248 +514,16 @@
 
 /* ========================================================================= */
 
-#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>
 
+# include "windows-mutex.h"
+# include "windows-rwlock.h"
+# include "windows-recmutex.h"
+# include "windows-once.h"
+
 # ifdef __cplusplus
 extern "C" {
 # endif
@@ -633,127 +539,69 @@
 /* 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;
+typedef glwthread_mutex_t 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 } }
+    GLWTHREAD_MUTEX_INIT
 # define glthread_lock_init(LOCK) \
-    (glthread_lock_init_func (LOCK), 0)
+    (glwthread_mutex_init (LOCK), 0)
 # define glthread_lock_lock(LOCK) \
-    glthread_lock_lock_func (LOCK)
+    glwthread_mutex_lock (LOCK)
 # define glthread_lock_unlock(LOCK) \
-    glthread_lock_unlock_func (LOCK)
+    glwthread_mutex_unlock (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);
+    glwthread_mutex_destroy (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;
+typedef glwthread_rwlock_t 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 } }
+    GLWTHREAD_RWLOCK_INIT
 # define glthread_rwlock_init(LOCK) \
-    (glthread_rwlock_init_func (LOCK), 0)
+    (glwthread_rwlock_init (LOCK), 0)
 # define glthread_rwlock_rdlock(LOCK) \
-    glthread_rwlock_rdlock_func (LOCK)
+    glwthread_rwlock_rdlock (LOCK)
 # define glthread_rwlock_wrlock(LOCK) \
-    glthread_rwlock_wrlock_func (LOCK)
+    glwthread_rwlock_wrlock (LOCK)
 # define glthread_rwlock_unlock(LOCK) \
-    glthread_rwlock_unlock_func (LOCK)
+    glwthread_rwlock_unlock (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);
+    glwthread_rwlock_destroy (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;
+typedef glwthread_recmutex_t 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 }
+    GLWTHREAD_RECMUTEX_INIT
 # define glthread_recursive_lock_init(LOCK) \
-    (glthread_recursive_lock_init_func (LOCK), 0)
+    (glwthread_recmutex_init (LOCK), 0)
 # define glthread_recursive_lock_lock(LOCK) \
-    glthread_recursive_lock_lock_func (LOCK)
+    glwthread_recmutex_lock (LOCK)
 # define glthread_recursive_lock_unlock(LOCK) \
-    glthread_recursive_lock_unlock_func (LOCK)
+    glwthread_recmutex_unlock (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);
+    glwthread_recmutex_destroy (LOCK)
 
 /* -------------------------- gl_once_t datatype -------------------------- */
 
-typedef struct
-        {
-          volatile int inited;
-          volatile long started;
-          CRITICAL_SECTION lock;
-        }
-        gl_once_t;
+typedef glwthread_once_t gl_once_t;
 # define gl_once_define(STORAGECLASS, NAME) \
-    STORAGECLASS gl_once_t NAME = { -1, -1 };
+    STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT;
 # 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));
+    (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0)
 
 # ifdef __cplusplus
 }
@@ -763,7 +611,7 @@
 
 /* ========================================================================= */
 
-#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS)
+#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS)
 
 /* Provide dummy implementation if threads are not supported.  */
 
diff --git a/lib/glthread/threadlib.c b/lib/glthread/threadlib.c
index 946268e..86947f5 100644
--- a/lib/glthread/threadlib.c
+++ b/lib/glthread/threadlib.c
@@ -1,5 +1,5 @@
 /* Multithreading primitives.
-   Copyright (C) 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
 
@@ -20,7 +20,7 @@
 
 /* ========================================================================= */
 
-#if USE_POSIX_THREADS
+#if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS
 
 /* Use the POSIX threads library.  */
 
diff --git a/lib/glthread/tls.c b/lib/glthread/tls.c
new file mode 100644
index 0000000..90a50e9
--- /dev/null
+++ b/lib/glthread/tls.c
@@ -0,0 +1,41 @@
+/* Thread-local storage in multithreaded situations.
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
+
+#include <config.h>
+
+#include "glthread/tls.h"
+
+/* ========================================================================= */
+
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+#endif
+
+/* ========================================================================= */
diff --git a/lib/glthread/tls.h b/lib/glthread/tls.h
new file mode 100644
index 0000000..32775fc
--- /dev/null
+++ b/lib/glthread/tls.h
@@ -0,0 +1,228 @@
+/* Thread-local storage in multithreaded situations.
+   Copyright (C) 2005, 2007-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
+
+/* This file contains thread-local storage primitives for use with a given
+   thread library.  It does not contain primitives for creating threads or
+   for other multithreading primitives.
+
+     Type:                      gl_tls_key_t
+     Initialization:            gl_tls_key_init (name, destructor);
+     Getting per-thread value:  gl_tls_get (name)
+     Setting per-thread value:  gl_tls_set (name, pointer);
+     De-initialization:         gl_tls_key_destroy (name);
+   Equivalent functions with control of error handling:
+     Initialization:            err = glthread_tls_key_init (&name, destructor);
+     Setting per-thread value:  err = glthread_tls_set (&name, pointer);
+     De-initialization:         err = glthread_tls_key_destroy (&name);
+
+   A per-thread value is of type 'void *'.
+
+   A destructor is a function pointer of type 'void (*) (void *)', called
+   when a thread exits, and taking the last per-thread value as argument.  It
+   is unspecified whether the destructor function is called when the last
+   per-thread value is NULL.  On some platforms, the destructor function is
+   not called at all.
+*/
+
+
+#ifndef _TLS_H
+#define _TLS_H
+
+#include <errno.h>
+#include <stdlib.h>
+
+#if !defined c11_threads_in_use
+# if HAVE_THREADS_H && USE_POSIX_THREADS_WEAK
+#  include <threads.h>
+#  pragma weak thrd_exit
+#  define c11_threads_in_use() (thrd_exit != NULL)
+# else
+#  define c11_threads_in_use() 0
+# endif
+#endif
+
+/* ========================================================================= */
+
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* Use the ISO C threads library.  */
+
+# include <threads.h>
+
+/* ------------------------- gl_tls_key_t datatype ------------------------- */
+
+typedef tss_t gl_tls_key_t;
+# define glthread_tls_key_init(KEY, DESTRUCTOR) \
+    (tss_create (KEY, DESTRUCTOR) != thrd_success ? EAGAIN : 0)
+# define gl_tls_get(NAME) \
+    tss_get (NAME)
+# define glthread_tls_set(KEY, POINTER) \
+    (tss_set (*(KEY), (POINTER)) != thrd_success ? ENOMEM : 0)
+# define glthread_tls_key_destroy(KEY) \
+    (tss_delete (*(KEY)), 0)
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library.  */
+
+# include <pthread.h>
+
+# 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.  */
+
+#  pragma weak pthread_key_create
+#  pragma weak pthread_getspecific
+#  pragma weak pthread_setspecific
+#  pragma weak pthread_key_delete
+#  ifndef pthread_self
+#   pragma weak pthread_self
+#  endif
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   pragma weak pthread_mutexattr_gettype
+#   define pthread_in_use() \
+      (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
+#  endif
+
+# else
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   define pthread_in_use() 1
+#  endif
+
+# endif
+
+/* ------------------------- gl_tls_key_t datatype ------------------------- */
+
+typedef union
+        {
+          void *singlethread_value;
+          pthread_key_t key;
+        }
+        gl_tls_key_t;
+# define glthread_tls_key_init(KEY, DESTRUCTOR) \
+    (pthread_in_use ()                              \
+     ? pthread_key_create (&(KEY)->key, DESTRUCTOR) \
+     : ((KEY)->singlethread_value = NULL, 0))
+# define gl_tls_get(NAME) \
+    (pthread_in_use ()                  \
+     ? pthread_getspecific ((NAME).key) \
+     : (NAME).singlethread_value)
+# define glthread_tls_set(KEY, POINTER) \
+    (pthread_in_use ()                             \
+     ? pthread_setspecific ((KEY)->key, (POINTER)) \
+     : ((KEY)->singlethread_value = (POINTER), 0))
+# define glthread_tls_key_destroy(KEY) \
+    (pthread_in_use () ? pthread_key_delete ((KEY)->key) : 0)
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+# define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+# include <windows.h>
+
+# include "windows-tls.h"
+
+/* ------------------------- gl_tls_key_t datatype ------------------------- */
+
+typedef glwthread_tls_key_t gl_tls_key_t;
+# define glthread_tls_key_init(KEY, DESTRUCTOR) \
+    glwthread_tls_key_create (KEY, DESTRUCTOR)
+# define gl_tls_get(NAME) \
+    TlsGetValue (NAME)
+# define glthread_tls_set(KEY, POINTER) \
+    (!TlsSetValue (*(KEY), POINTER) ? EINVAL : 0)
+# define glthread_tls_key_destroy(KEY) \
+    glwthread_tls_key_delete (*(KEY))
+
+#endif
+
+/* ========================================================================= */
+
+#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS)
+
+/* Provide dummy implementation if threads are not supported.  */
+
+/* ------------------------- gl_tls_key_t datatype ------------------------- */
+
+typedef struct
+        {
+          void *singlethread_value;
+        }
+        gl_tls_key_t;
+# define glthread_tls_key_init(KEY, DESTRUCTOR) \
+    ((KEY)->singlethread_value = NULL, \
+     (void) (DESTRUCTOR),              \
+     0)
+# define gl_tls_get(NAME) \
+    (NAME).singlethread_value
+# define glthread_tls_set(KEY, POINTER) \
+    ((KEY)->singlethread_value = (POINTER), 0)
+# define glthread_tls_key_destroy(KEY) \
+    0
+
+#endif
+
+/* ========================================================================= */
+
+/* Macros with built-in error handling.  */
+
+/* ------------------------- gl_tls_key_t datatype ------------------------- */
+
+#define gl_tls_key_init(NAME, DESTRUCTOR) \
+   do                                                 \
+     {                                                \
+       if (glthread_tls_key_init (&NAME, DESTRUCTOR)) \
+         abort ();                                    \
+     }                                                \
+   while (0)
+#define gl_tls_set(NAME, POINTER) \
+   do                                         \
+     {                                        \
+       if (glthread_tls_set (&NAME, POINTER)) \
+         abort ();                            \
+     }                                        \
+   while (0)
+#define gl_tls_key_destroy(NAME) \
+   do                                        \
+     {                                       \
+       if (glthread_tls_key_destroy (&NAME)) \
+         abort ();                           \
+     }                                       \
+   while (0)
+
+/* ========================================================================= */
+
+#endif /* _TLS_H */
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
index f001169..5efd353 100644
--- a/lib/gnulib.mk
+++ b/lib/gnulib.mk
@@ -1,6 +1,6 @@
 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
 ## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2019 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
@@ -13,7 +13,7 @@
 # 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/>.
+# along with this file.  If not, see <https://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
@@ -21,17 +21,123 @@
 # 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
+# Reproduce by:
+# gnulib-tool --import --local-dir=gl \
+#  --lib=libbison \
+#  --source-base=lib \
+#  --m4-base=m4 \
+#  --po-base=gnulib-po \
+#  --doc-base=doc \
+#  --tests-base=tests \
+#  --aux-dir=build-aux \
+#  --makefile-name=gnulib.mk \
+#  --conditional-dependencies \
+#  --no-libtool \
+#  --macro-prefix=gl \
+#  --po-domain=bison \
+#  argmatch \
+#  array-list \
+#  assert \
+#  assure \
+#  bitsetv \
+#  c-strcase \
+#  calloc-posix \
+#  close \
+#  closeout \
+#  config-h \
+#  configmake \
+#  dirname \
+#  error \
+#  extensions \
+#  fdl \
+#  fopen-safer \
+#  fprintf-posix \
+#  fstrcmp \
+#  getopt-gnu \
+#  gettext-h \
+#  git-version-gen \
+#  gitlog-to-changelog \
+#  gpl-3.0 \
+#  intprops \
+#  inttypes \
+#  isnan \
+#  javacomp-script \
+#  javaexec-script \
+#  ldexpl \
+#  libtextstyle-optional \
+#  malloc-gnu \
+#  mbfile \
+#  mbswidth \
+#  non-recursive-gnulib-prefix-hack \
+#  obstack \
+#  obstack-printf \
+#  perror \
+#  printf-posix \
+#  progname \
+#  quote \
+#  quotearg \
+#  readme-release \
+#  realloc-posix \
+#  relocatable-prog \
+#  relocatable-script \
+#  rename \
+#  snprintf-posix \
+#  spawn-pipe \
+#  sprintf-posix \
+#  stdbool \
+#  stpcpy \
+#  strdup-posix \
+#  strerror \
+#  strverscmp \
+#  timevar \
+#  unistd \
+#  unistd-safer \
+#  unlink \
+#  unlocked-io \
+#  unsetenv \
+#  update-copyright \
+#  verify \
+#  vsnprintf-posix \
+#  vsprintf-posix \
+#  warnings \
+#  winsz-ioctl \
+#  winsz-termios \
+#  xalloc \
+#  xalloc-die \
+#  xconcat-filename \
+#  xhash \
+#  xlist \
+#  xmemdup0 \
+#  xstrndup
 
 
-MOSTLYCLEANFILES += core *.stackdump
+MOSTLYCLEANFILES += lib/core lib/*.stackdump
+# No GNU Make output.
 
-noinst_LIBRARIES += libbison.a
+noinst_LIBRARIES += lib/libbison.a
 
-libbison_a_SOURCES =
-libbison_a_LIBADD = $(gl_LIBOBJS)
-libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libbison_a_SOURCES =
+lib_libbison_a_SOURCES =
+lib_libbison_a_LIBADD = $(gl_LIBOBJS)
+lib_libbison_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_lib_libbison_a_SOURCES =
+
+lib_libbison_a_CPPFLAGS = $(AM_CPPFLAGS) -DDEFAULT_TEXT_DOMAIN=\"bison-gnulib\"
+
+## begin gnulib module absolute-header
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER)
+
+## end   gnulib module absolute-header
+
+## begin gnulib module alignof
+
+
+EXTRA_DIST += lib/alignof.h
+
+## end   gnulib module alignof
 
 ## begin gnulib module alloca-opt
 
@@ -40,22 +146,30 @@
 # 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
+lib/alloca.h: lib/alloca.in.h $(top_builddir)/config.status
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/alloca.in.h; \
+	  sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(top_srcdir)/lib/alloca.in.h; \
 	} > $@-t && \
 	mv -f $@-t $@
 else
-alloca.h: $(top_builddir)/config.status
+lib/alloca.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += alloca.h alloca.h-t
+MOSTLYCLEANFILES += lib/alloca.h lib/alloca.h-t
 
-EXTRA_DIST += alloca.in.h
+EXTRA_DIST += lib/alloca.in.h
 
 ## end   gnulib module alloca-opt
 
+## begin gnulib module allocator
+
+lib_libbison_a_SOURCES += lib/allocator.c
+
+EXTRA_DIST += lib/allocator.h
+
+## end   gnulib module allocator
+
 ## begin gnulib module announce-gen
 
 
@@ -63,96 +177,161 @@
 
 ## end   gnulib module announce-gen
 
+## begin gnulib module areadlink
+
+lib_libbison_a_SOURCES += lib/areadlink.c
+
+EXTRA_DIST += lib/areadlink.h
+
+## end   gnulib module areadlink
+
 ## begin gnulib module argmatch
 
-libbison_a_SOURCES += argmatch.c
+lib_libbison_a_SOURCES += lib/argmatch.c
 
-EXTRA_DIST += argmatch.h
+EXTRA_DIST += lib/argmatch.h
 
 ## end   gnulib module argmatch
 
+## begin gnulib module array-list
+
+lib_libbison_a_SOURCES += lib/gl_array_list.h lib/gl_array_list.c
+
+## end   gnulib module array-list
+
+## begin gnulib module assure
+
+
+EXTRA_DIST += lib/assure.h
+
+## end   gnulib module assure
+
 ## begin gnulib module binary-io
 
-libbison_a_SOURCES += binary-io.h binary-io.c
+lib_libbison_a_SOURCES += lib/binary-io.h lib/binary-io.c
 
 ## end   gnulib module binary-io
 
 ## begin gnulib module bitrotate
 
-libbison_a_SOURCES += bitrotate.h bitrotate.c
+lib_libbison_a_SOURCES += lib/bitrotate.h lib/bitrotate.c
 
 ## end   gnulib module bitrotate
 
+## begin gnulib module bitset
+
+lib_libbison_a_SOURCES += lib/bitset.c lib/bitset/array.c lib/bitset/stats.c    lib/bitset/table.c lib/bitset/list.c lib/bitset/vector.c
+
+EXTRA_DIST += lib/bitset.h lib/bitset/array.h lib/bitset/base.h lib/bitset/list.h lib/bitset/stats.h lib/bitset/table.h lib/bitset/vector.h
+
+## end   gnulib module bitset
+
+## begin gnulib module bitsetv
+
+lib_libbison_a_SOURCES += lib/bitsetv.c
+
+EXTRA_DIST += lib/bitsetv.h
+
+## end   gnulib module bitsetv
+
 ## begin gnulib module c-ctype
 
-libbison_a_SOURCES += c-ctype.h c-ctype.c
+lib_libbison_a_SOURCES += lib/c-ctype.h lib/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
+lib_libbison_a_SOURCES += lib/c-strcase.h lib/c-strcasecmp.c lib/c-strncasecmp.c
 
 ## end   gnulib module c-strcase
 
 ## begin gnulib module c-strcaseeq
 
 
-EXTRA_DIST += c-strcaseeq.h
+EXTRA_DIST += lib/c-strcaseeq.h
 
 ## end   gnulib module c-strcaseeq
 
 ## begin gnulib module calloc-posix
 
 
-EXTRA_DIST += calloc.c
+EXTRA_DIST += lib/calloc.c
 
-EXTRA_libbison_a_SOURCES += calloc.c
+EXTRA_lib_libbison_a_SOURCES += lib/calloc.c
 
 ## end   gnulib module calloc-posix
 
+## begin gnulib module canonicalize-lgpl
+
+
+EXTRA_DIST += lib/canonicalize-lgpl.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/canonicalize-lgpl.c
+
+## end   gnulib module canonicalize-lgpl
+
+## begin gnulib module careadlinkat
+
+lib_libbison_a_SOURCES += lib/careadlinkat.c
+
+EXTRA_DIST += lib/careadlinkat.h
+
+## end   gnulib module careadlinkat
+
 ## begin gnulib module cloexec
 
-libbison_a_SOURCES += cloexec.c
+lib_libbison_a_SOURCES += lib/cloexec.c
 
-EXTRA_DIST += cloexec.h
+EXTRA_DIST += lib/cloexec.h
 
 ## end   gnulib module cloexec
 
 ## begin gnulib module close
 
 
-EXTRA_DIST += close.c
+EXTRA_DIST += lib/close.c
 
-EXTRA_libbison_a_SOURCES += close.c
+EXTRA_lib_libbison_a_SOURCES += lib/close.c
 
 ## end   gnulib module close
 
 ## begin gnulib module close-stream
 
-libbison_a_SOURCES += close-stream.c
+lib_libbison_a_SOURCES += lib/close-stream.c
 
-EXTRA_DIST += close-stream.h
+EXTRA_DIST += lib/close-stream.h
 
 ## end   gnulib module close-stream
 
 ## begin gnulib module closeout
 
-libbison_a_SOURCES += closeout.c
+lib_libbison_a_SOURCES += lib/closeout.c
 
-EXTRA_DIST += closeout.h
+EXTRA_DIST += lib/closeout.h
 
 ## end   gnulib module closeout
 
+## begin gnulib module concat-filename
+
+lib_libbison_a_SOURCES += lib/concat-filename.c
+
+EXTRA_DIST += lib/concat-filename.h
+
+## end   gnulib module concat-filename
+
 ## begin gnulib module configmake
 
 # Listed in the same order as the GNU makefile conventions, and
-# provided by autoconf 2.59c+.
+# provided by autoconf 2.59c+ or 2.70.
 # The Automake-defined pkg* macros are appended, in the order
 # listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
+lib/configmake.h: Makefile
 	$(AM_V_GEN)rm -f $@-t && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#if HAVE_WINSOCK2_H'; \
+	  echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \
+	  echo '#endif'; \
 	  echo '#define PREFIX "$(prefix)"'; \
 	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
 	  echo '#define BINDIR "$(bindir)"'; \
@@ -163,6 +342,7 @@
 	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
 	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
 	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define RUNSTATEDIR "$(runstatedir)"'; \
 	  echo '#define INCLUDEDIR "$(includedir)"'; \
 	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
 	  echo '#define DOCDIR "$(docdir)"'; \
@@ -183,26 +363,32 @@
 	} | sed '/""/d' > $@-t && \
 	mv -f $@-t $@
 
-BUILT_SOURCES += configmake.h
-CLEANFILES += configmake.h configmake.h-t
+BUILT_SOURCES += lib/configmake.h
+CLEANFILES += lib/configmake.h lib/configmake.h-t
 
 ## end   gnulib module configmake
 
+## begin gnulib module diffseq
+
+lib_libbison_a_SOURCES += lib/diffseq.h
+
+## end   gnulib module diffseq
+
 ## begin gnulib module dirname
 
-libbison_a_SOURCES += dirname.c basename.c
+lib_libbison_a_SOURCES += lib/dirname.c lib/basename.c
 
-EXTRA_DIST += stripslash.c
+EXTRA_DIST += lib/stripslash.c
 
-EXTRA_libbison_a_SOURCES += stripslash.c
+EXTRA_lib_libbison_a_SOURCES += lib/stripslash.c
 
 ## end   gnulib module dirname
 
 ## begin gnulib module dirname-lgpl
 
-libbison_a_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c
+lib_libbison_a_SOURCES += lib/dirname-lgpl.c lib/basename-lgpl.c lib/stripslash.c
 
-EXTRA_DIST += dirname.h
+EXTRA_DIST += lib/dirname.h
 
 ## end   gnulib module dirname-lgpl
 
@@ -216,16 +402,16 @@
 ## begin gnulib module dosname
 
 
-EXTRA_DIST += dosname.h
+EXTRA_DIST += lib/dosname.h
 
 ## end   gnulib module dosname
 
 ## begin gnulib module dup2
 
 
-EXTRA_DIST += dup2.c
+EXTRA_DIST += lib/dup2.c
 
-EXTRA_libbison_a_SOURCES += dup2.c
+EXTRA_lib_libbison_a_SOURCES += lib/dup2.c
 
 ## end   gnulib module dup2
 
@@ -236,7 +422,7 @@
 # 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
+lib/errno.h: lib/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' \
@@ -250,58 +436,58 @@
 	      -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; \
+	      < $(top_srcdir)/lib/errno.in.h; \
 	} > $@-t && \
 	mv $@-t $@
 else
-errno.h: $(top_builddir)/config.status
+lib/errno.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += errno.h errno.h-t
+MOSTLYCLEANFILES += lib/errno.h lib/errno.h-t
 
-EXTRA_DIST += errno.in.h
+EXTRA_DIST += lib/errno.in.h
 
 ## end   gnulib module errno
 
 ## begin gnulib module error
 
 
-EXTRA_DIST += error.c error.h
+EXTRA_DIST += lib/error.c lib/error.h
 
-EXTRA_libbison_a_SOURCES += error.c
+EXTRA_lib_libbison_a_SOURCES += lib/error.c
 
 ## end   gnulib module error
 
 ## begin gnulib module exitfail
 
-libbison_a_SOURCES += exitfail.c
+lib_libbison_a_SOURCES += lib/exitfail.c
 
-EXTRA_DIST += exitfail.h
+EXTRA_DIST += lib/exitfail.h
 
 ## end   gnulib module exitfail
 
 ## begin gnulib module fatal-signal
 
-libbison_a_SOURCES += fatal-signal.h fatal-signal.c
+lib_libbison_a_SOURCES += lib/fatal-signal.h lib/fatal-signal.c
 
 ## end   gnulib module fatal-signal
 
 ## begin gnulib module fcntl
 
 
-EXTRA_DIST += fcntl.c
+EXTRA_DIST += lib/fcntl.c
 
-EXTRA_libbison_a_SOURCES += fcntl.c
+EXTRA_lib_libbison_a_SOURCES += lib/fcntl.c
 
 ## end   gnulib module fcntl
 
 ## begin gnulib module fcntl-h
 
-BUILT_SOURCES += fcntl.h
+BUILT_SOURCES += lib/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)
+lib/fcntl.h: lib/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' \
@@ -309,41 +495,52 @@
 	      -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_CREAT''@/$(GNULIB_CREAT)/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_CREAT''@|$(REPLACE_CREAT)|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; \
+	      < $(top_srcdir)/lib/fcntl.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += fcntl.h fcntl.h-t
+MOSTLYCLEANFILES += lib/fcntl.h lib/fcntl.h-t
 
-EXTRA_DIST += fcntl.in.h
+EXTRA_DIST += lib/fcntl.in.h
 
 ## end   gnulib module fcntl-h
 
 ## begin gnulib module fd-hook
 
-libbison_a_SOURCES += fd-hook.c
+if gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239
+lib_libbison_a_SOURCES += lib/fd-hook.c
 
-EXTRA_DIST += fd-hook.h
+endif
+EXTRA_DIST += lib/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
+lib_libbison_a_SOURCES += lib/fd-safer-flag.c lib/dup-safer-flag.c
 
 ## end   gnulib module fd-safer-flag
 
+## begin gnulib module filename
+
+
+EXTRA_DIST += lib/filename.h
+
+## end   gnulib module filename
+
 ## begin gnulib module float
 
 BUILT_SOURCES += $(FLOAT_H)
@@ -351,7 +548,7 @@
 # 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
+lib/float.h: lib/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' \
@@ -360,99 +557,118 @@
 	      -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; \
+	      < $(top_srcdir)/lib/float.in.h; \
 	} > $@-t && \
 	mv $@-t $@
 else
-float.h: $(top_builddir)/config.status
+lib/float.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += float.h float.h-t
+MOSTLYCLEANFILES += lib/float.h lib/float.h-t
 
-EXTRA_DIST += float.c float.in.h itold.c
+EXTRA_DIST += lib/float.c lib/float.in.h lib/itold.c
 
-EXTRA_libbison_a_SOURCES += float.c itold.c
+EXTRA_lib_libbison_a_SOURCES += lib/float.c lib/itold.c
 
 ## end   gnulib module float
 
 ## begin gnulib module fopen
 
 
-EXTRA_DIST += fopen.c
+EXTRA_DIST += lib/fopen.c
 
-EXTRA_libbison_a_SOURCES += fopen.c
+EXTRA_lib_libbison_a_SOURCES += lib/fopen.c
 
 ## end   gnulib module fopen
 
 ## begin gnulib module fopen-safer
 
-libbison_a_SOURCES += fopen-safer.c
+lib_libbison_a_SOURCES += lib/fopen-safer.c
 
-EXTRA_DIST += stdio--.h stdio-safer.h
+EXTRA_DIST += lib/stdio--.h lib/stdio-safer.h
 
 ## end   gnulib module fopen-safer
 
 ## begin gnulib module fpending
 
 
-EXTRA_DIST += fpending.c fpending.h
+EXTRA_DIST += lib/fpending.c lib/fpending.h lib/stdio-impl.h
 
-EXTRA_libbison_a_SOURCES += fpending.c
+EXTRA_lib_libbison_a_SOURCES += lib/fpending.c
 
 ## end   gnulib module fpending
 
 ## begin gnulib module fprintf-posix
 
 
-EXTRA_DIST += fprintf.c
+EXTRA_DIST += lib/fprintf.c
 
-EXTRA_libbison_a_SOURCES += fprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/fprintf.c
 
 ## end   gnulib module fprintf-posix
 
 ## begin gnulib module fpucw
 
 
-EXTRA_DIST += fpucw.h
+EXTRA_DIST += lib/fpucw.h
 
 ## end   gnulib module fpucw
 
 ## begin gnulib module frexp-nolibm
 
 
-EXTRA_DIST += frexp.c
+EXTRA_DIST += lib/frexp.c
 
-EXTRA_libbison_a_SOURCES += frexp.c
+EXTRA_lib_libbison_a_SOURCES += lib/frexp.c
 
 ## end   gnulib module frexp-nolibm
 
 ## begin gnulib module frexpl-nolibm
 
 
-EXTRA_DIST += frexp.c frexpl.c
+EXTRA_DIST += lib/frexp.c lib/frexpl.c
 
-EXTRA_libbison_a_SOURCES += frexp.c frexpl.c
+EXTRA_lib_libbison_a_SOURCES += lib/frexp.c lib/frexpl.c
 
 ## end   gnulib module frexpl-nolibm
 
 ## begin gnulib module fseterr
 
+if gl_GNULIB_ENABLED_fseterr
 
-EXTRA_DIST += fseterr.c fseterr.h stdio-impl.h
+endif
+EXTRA_DIST += lib/fseterr.c lib/fseterr.h lib/stdio-impl.h
 
-EXTRA_libbison_a_SOURCES += fseterr.c
+EXTRA_lib_libbison_a_SOURCES += lib/fseterr.c
 
 ## end   gnulib module fseterr
 
 ## begin gnulib module fstat
 
+if gl_GNULIB_ENABLED_fstat
 
-EXTRA_DIST += fstat.c
+endif
+EXTRA_DIST += lib/fstat.c lib/stat-w32.c lib/stat-w32.h
 
-EXTRA_libbison_a_SOURCES += fstat.c
+EXTRA_lib_libbison_a_SOURCES += lib/fstat.c lib/stat-w32.c
 
 ## end   gnulib module fstat
 
+## begin gnulib module fstrcmp
+
+lib_libbison_a_SOURCES += lib/fstrcmp.h lib/fstrcmp.c
+
+## end   gnulib module fstrcmp
+
+## begin gnulib module fsync
+
+
+EXTRA_DIST += lib/fsync.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/fsync.c
+
+## end   gnulib module fsync
+
 ## begin gnulib module gendocs
 
 
@@ -460,40 +676,32 @@
 
 ## 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
 
+if gl_GNULIB_ENABLED_getdtablesize
 
-EXTRA_DIST += getdtablesize.c
+endif
+EXTRA_DIST += lib/getdtablesize.c
 
-EXTRA_libbison_a_SOURCES += getdtablesize.c
+EXTRA_lib_libbison_a_SOURCES += lib/getdtablesize.c
 
 ## end   gnulib module getdtablesize
 
-## begin gnulib module getline
+## begin gnulib module gethrxtime
 
+lib_libbison_a_SOURCES += lib/gethrxtime.c lib/xtime.c
 
-EXTRA_DIST += getline.c
+EXTRA_DIST += lib/gethrxtime.h lib/xtime.h
 
-EXTRA_libbison_a_SOURCES += getline.c
-
-## end   gnulib module getline
+## end   gnulib module gethrxtime
 
 ## begin gnulib module getopt-posix
 
-BUILT_SOURCES += $(GETOPT_H)
+BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_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.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+lib/getopt.h: lib/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' \
@@ -503,39 +711,62 @@
 	      -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; \
+	      < $(top_srcdir)/lib/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
+lib/getopt-cdefs.h: lib/getopt-cdefs.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+          sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+	      < $(top_srcdir)/lib/getopt-cdefs.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
 
-EXTRA_libbison_a_SOURCES += getopt.c getopt1.c
+MOSTLYCLEANFILES += lib/getopt.h lib/getopt.h-t lib/getopt-cdefs.h lib/getopt-cdefs.h-t
+
+EXTRA_DIST += lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/getopt.c lib/getopt1.c
 
 ## end   gnulib module getopt-posix
 
-## begin gnulib module gettext
+## begin gnulib module getprogname
 
-# 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".
-AM_CPPFLAGS += -I$(top_builddir)/intl
+lib_libbison_a_SOURCES += lib/getprogname.h lib/getprogname.c
 
-EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+## end   gnulib module getprogname
 
-## end   gnulib module gettext
+## begin gnulib module getrusage
+
+
+EXTRA_DIST += lib/getrusage.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/getrusage.c
+
+## end   gnulib module getrusage
 
 ## begin gnulib module gettext-h
 
-libbison_a_SOURCES += gettext.h
+lib_libbison_a_SOURCES += lib/gettext.h
 
 ## end   gnulib module gettext-h
 
+## begin gnulib module gettime
+
+lib_libbison_a_SOURCES += lib/gettime.c
+
+## end   gnulib module gettime
+
+## begin gnulib module gettimeofday
+
+
+EXTRA_DIST += lib/gettimeofday.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/gettimeofday.c
+
+## end   gnulib module gettimeofday
+
 ## begin gnulib module git-version-gen
 
 
@@ -559,12 +790,11 @@
 
 ## begin gnulib module gnumakefile
 
+EXTRA_DIST += $(top_srcdir)/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
@@ -574,11 +804,21 @@
 
 ## end   gnulib module gnupload
 
+## begin gnulib module hard-locale
+
+if gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76
+lib_libbison_a_SOURCES += lib/hard-locale.c
+
+endif
+EXTRA_DIST += lib/hard-locale.h
+
+## end   gnulib module hard-locale
+
 ## begin gnulib module hash
 
-libbison_a_SOURCES += hash.c
+lib_libbison_a_SOURCES += lib/hash.c
 
-EXTRA_DIST += hash.h
+EXTRA_DIST += lib/hash.h
 
 ## end   gnulib module hash
 
@@ -592,17 +832,17 @@
 ## begin gnulib module intprops
 
 
-EXTRA_DIST += intprops.h
+EXTRA_DIST += lib/intprops.h
 
 ## end   gnulib module intprops
 
 ## begin gnulib module inttypes-incomplete
 
-BUILT_SOURCES += inttypes.h
+BUILT_SOURCES += lib/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)
+lib/inttypes.h: lib/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' \
@@ -623,7 +863,9 @@
 	      -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/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \
 	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/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' \
@@ -631,75 +873,77 @@
 	      -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; \
+	      < $(top_srcdir)/lib/inttypes.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += inttypes.h inttypes.h-t
+MOSTLYCLEANFILES += lib/inttypes.h lib/inttypes.h-t
 
-EXTRA_DIST += inttypes.in.h
+EXTRA_DIST += lib/inttypes.in.h
 
 ## end   gnulib module inttypes-incomplete
 
 ## begin gnulib module isnand
 
 
-EXTRA_DIST += float+.h isnan.c isnand.c
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnand.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnand.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnand.c
 
 ## end   gnulib module isnand
 
 ## begin gnulib module isnand-nolibm
 
 
-EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnand-nolibm.h lib/isnand.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnand.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnand.c
 
 ## end   gnulib module isnand-nolibm
 
 ## begin gnulib module isnanf
 
 
-EXTRA_DIST += float+.h isnan.c isnanf.c
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanf.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnanf.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnanf.c
 
 ## end   gnulib module isnanf
 
 ## begin gnulib module isnanf-nolibm
 
+if gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66
 
-EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c
+endif
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanf-nolibm.h lib/isnanf.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnanf.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnanf.c
 
 ## end   gnulib module isnanf-nolibm
 
 ## begin gnulib module isnanl
 
 
-EXTRA_DIST += float+.h isnan.c isnanl.c
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanl.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnanl.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnanl.c
 
 ## end   gnulib module isnanl
 
 ## begin gnulib module isnanl-nolibm
 
 
-EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanl-nolibm.h lib/isnanl.c
 
-EXTRA_libbison_a_SOURCES += isnan.c isnanl.c
+EXTRA_lib_libbison_a_SOURCES += lib/isnan.c lib/isnanl.c
 
 ## end   gnulib module isnanl-nolibm
 
 ## begin gnulib module iswblank
 
 
-EXTRA_DIST += iswblank.c
+EXTRA_DIST += lib/iswblank.c
 
-EXTRA_libbison_a_SOURCES += iswblank.c
+EXTRA_lib_libbison_a_SOURCES += lib/iswblank.c
 
 ## end   gnulib module iswblank
 
@@ -720,92 +964,114 @@
 ## begin gnulib module ldexpl
 
 
-EXTRA_DIST += ldexpl.c
+EXTRA_DIST += lib/ldexpl.c
 
-EXTRA_libbison_a_SOURCES += ldexpl.c
+EXTRA_lib_libbison_a_SOURCES += lib/ldexpl.c
 
 ## end   gnulib module ldexpl
 
+## begin gnulib module libc-config
+
+if gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467
+
+endif
+EXTRA_DIST += lib/cdefs.h lib/libc-config.h
+
+## end   gnulib module libc-config
+
+## begin gnulib module libtextstyle-optional
+
+BUILT_SOURCES += $(TEXTSTYLE_H)
+
+# We need the following in order to create a dummy placeholder for
+# <textstyle.h> when the system doesn't have one.
+if GL_GENERATE_TEXTSTYLE_H
+lib/textstyle.h: lib/textstyle.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(top_srcdir)/lib/textstyle.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+lib/textstyle.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += lib/textstyle.h lib/textstyle.h-t
+
+EXTRA_DIST += lib/textstyle.in.h
+
+## end   gnulib module libtextstyle-optional
+
+## begin gnulib module limits-h
+
+BUILT_SOURCES += $(LIMITS_H)
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+if GL_GENERATE_LIMITS_H
+lib/limits.h: lib/limits.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_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+	      < $(top_srcdir)/lib/limits.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+lib/limits.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += lib/limits.h lib/limits.h-t
+
+EXTRA_DIST += lib/limits.in.h
+
+## end   gnulib module limits-h
+
+## begin gnulib module list
+
+lib_libbison_a_SOURCES += lib/gl_list.h lib/gl_list.c
+
+## end   gnulib module list
+
 ## begin gnulib module localcharset
 
-libbison_a_SOURCES += localcharset.h localcharset.c
+lib_libbison_a_SOURCES += lib/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
+EXTRA_DIST += lib/localcharset.h
 
 ## end   gnulib module localcharset
 
+## begin gnulib module localtime-buffer
+
+if gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9
+
+endif
+EXTRA_DIST += lib/localtime-buffer.c lib/localtime-buffer.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/localtime-buffer.c
+
+## end   gnulib module localtime-buffer
+
 ## begin gnulib module lock
 
-libbison_a_SOURCES += glthread/lock.h glthread/lock.c
+lib_libbison_a_SOURCES += lib/glthread/lock.h lib/glthread/lock.c
 
 ## end   gnulib module lock
 
+## begin gnulib module lstat
+
+if gl_GNULIB_ENABLED_lstat
+
+endif
+EXTRA_DIST += lib/lstat.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/lstat.c
+
+## end   gnulib module lstat
+
 ## begin gnulib module maintainer-makefile
 
 EXTRA_DIST += $(top_srcdir)/maint.mk
@@ -815,29 +1081,39 @@
 ## begin gnulib module malloc-gnu
 
 
-EXTRA_DIST += malloc.c
+EXTRA_DIST += lib/malloc.c
 
-EXTRA_libbison_a_SOURCES += malloc.c
+EXTRA_lib_libbison_a_SOURCES += lib/malloc.c
 
 ## end   gnulib module malloc-gnu
 
 ## begin gnulib module malloc-posix
 
 
-EXTRA_DIST += malloc.c
+EXTRA_DIST += lib/malloc.c
 
-EXTRA_libbison_a_SOURCES += malloc.c
+EXTRA_lib_libbison_a_SOURCES += lib/malloc.c
 
 ## end   gnulib module malloc-posix
 
+## begin gnulib module malloca
+
+if gl_GNULIB_ENABLED_malloca
+lib_libbison_a_SOURCES += lib/malloca.c
+
+endif
+EXTRA_DIST += lib/malloca.h
+
+## end   gnulib module malloca
+
 ## begin gnulib module math
 
-BUILT_SOURCES += math.h
-libbison_a_SOURCES += math.c
+BUILT_SOURCES += lib/math.h
+lib_libbison_a_SOURCES += lib/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)
+lib/math.h: lib/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' \
@@ -889,7 +1165,7 @@
 	      -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 | \
+	      < $(top_srcdir)/lib/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' \
@@ -1039,13 +1315,22 @@
 	      -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' \
+	  sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \
+	      -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \
+	      -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \
+	      -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \
+	      -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_COSF''@|$(REPLACE_COSF)|g' \
+	      -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \
+	      -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \
+	      -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \
 	      -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
 	      -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+	      -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \
 	      -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
 	      -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
 	      -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
@@ -1067,6 +1352,7 @@
 	      -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
 	      -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
 	      -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+	      -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \
 	      -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
 	      -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
 	      -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
@@ -1094,12 +1380,18 @@
 	      -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
 	      -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
 	      -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+	      -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|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_SINF''@|$(REPLACE_SINF)|g' \
+	      -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \
+	      -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \
 	      -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+	      -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \
+	      -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \
 	      -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
 	      -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
 	      -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
@@ -1108,372 +1400,452 @@
 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += math.h math.h-t
+MOSTLYCLEANFILES += lib/math.h lib/math.h-t
 
-EXTRA_DIST += math.in.h
+EXTRA_DIST += lib/math.in.h
 
 ## end   gnulib module math
 
 ## begin gnulib module mbchar
 
-libbison_a_SOURCES += mbchar.c
+lib_libbison_a_SOURCES += lib/mbchar.c
 
-EXTRA_DIST += mbchar.h
+EXTRA_DIST += lib/mbchar.h
 
 ## end   gnulib module mbchar
 
+## begin gnulib module mbfile
+
+lib_libbison_a_SOURCES += lib/mbfile.h lib/mbfile.c
+
+## end   gnulib module mbfile
+
 ## begin gnulib module mbrtowc
 
 
-EXTRA_DIST += mbrtowc.c
+EXTRA_DIST += lib/mbrtowc.c
 
-EXTRA_libbison_a_SOURCES += mbrtowc.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/mbsinit.c
 
-EXTRA_libbison_a_SOURCES += mbsinit.c
+EXTRA_lib_libbison_a_SOURCES += lib/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
+lib_libbison_a_SOURCES += lib/mbswidth.h lib/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_DIST += lib/memchr.c lib/memchr.valgrind
 
-EXTRA_libbison_a_SOURCES += memchr.c
+EXTRA_lib_libbison_a_SOURCES += lib/memchr.c
 
 ## end   gnulib module memchr
 
+## begin gnulib module minmax
+
+lib_libbison_a_SOURCES += lib/minmax.h
+
+## end   gnulib module minmax
+
 ## begin gnulib module msvc-inval
 
 
-EXTRA_DIST += msvc-inval.c msvc-inval.h
+EXTRA_DIST += lib/msvc-inval.c lib/msvc-inval.h
 
-EXTRA_libbison_a_SOURCES += msvc-inval.c
+EXTRA_lib_libbison_a_SOURCES += lib/msvc-inval.c
 
 ## end   gnulib module msvc-inval
 
 ## begin gnulib module msvc-nothrow
 
 
-EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h
+EXTRA_DIST += lib/msvc-nothrow.c lib/msvc-nothrow.h
 
-EXTRA_libbison_a_SOURCES += msvc-nothrow.c
+EXTRA_lib_libbison_a_SOURCES += lib/msvc-nothrow.c
 
 ## end   gnulib module msvc-nothrow
 
+## begin gnulib module non-recursive-gnulib-prefix-hack
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/prefix-gnulib-mk
+
+## end   gnulib module non-recursive-gnulib-prefix-hack
+
 ## begin gnulib module obstack
 
 
-EXTRA_DIST += obstack.c obstack.h
+EXTRA_DIST += lib/obstack.c lib/obstack.h
 
-EXTRA_libbison_a_SOURCES += obstack.c
+EXTRA_lib_libbison_a_SOURCES += lib/obstack.c
 
 ## end   gnulib module obstack
 
 ## begin gnulib module obstack-printf
 
 
-EXTRA_DIST += obstack_printf.c
+EXTRA_DIST += lib/obstack_printf.c
 
-EXTRA_libbison_a_SOURCES += obstack_printf.c
+EXTRA_lib_libbison_a_SOURCES += lib/obstack_printf.c
 
 ## end   gnulib module obstack-printf
 
 ## begin gnulib module open
 
 
-EXTRA_DIST += open.c
+EXTRA_DIST += lib/open.c
 
-EXTRA_libbison_a_SOURCES += open.c
+EXTRA_lib_libbison_a_SOURCES += lib/open.c
 
 ## end   gnulib module open
 
 ## begin gnulib module pathmax
 
 
-EXTRA_DIST += pathmax.h
+EXTRA_DIST += lib/pathmax.h
 
 ## end   gnulib module pathmax
 
 ## begin gnulib module perror
 
 
-EXTRA_DIST += perror.c
+EXTRA_DIST += lib/perror.c
 
-EXTRA_libbison_a_SOURCES += perror.c
+EXTRA_lib_libbison_a_SOURCES += lib/perror.c
 
 ## end   gnulib module perror
 
 ## begin gnulib module pipe2
 
-libbison_a_SOURCES += pipe2.c
+lib_libbison_a_SOURCES += lib/pipe2.c
 
 ## end   gnulib module pipe2
 
 ## begin gnulib module pipe2-safer
 
-libbison_a_SOURCES += pipe2-safer.c
+lib_libbison_a_SOURCES += lib/pipe2-safer.c
 
 ## end   gnulib module pipe2-safer
 
 ## begin gnulib module posix_spawn-internal
 
+if gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7
 
-EXTRA_DIST += spawn_int.h spawni.c
+endif
+EXTRA_DIST += lib/spawn_int.h lib/spawni.c
 
-EXTRA_libbison_a_SOURCES += spawni.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/spawn_faction_addclose.c lib/spawn_int.h
 
-EXTRA_libbison_a_SOURCES += spawn_faction_addclose.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/spawn_faction_adddup2.c lib/spawn_int.h
 
-EXTRA_libbison_a_SOURCES += spawn_faction_adddup2.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/spawn_faction_addopen.c lib/spawn_int.h
 
-EXTRA_libbison_a_SOURCES += spawn_faction_addopen.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/spawn_faction_destroy.c
 
-EXTRA_libbison_a_SOURCES += spawn_faction_destroy.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/spawn_faction_init.c lib/spawn_int.h
 
-EXTRA_libbison_a_SOURCES += spawn_faction_init.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawn_faction_init.c
 
 ## end   gnulib module posix_spawn_file_actions_init
 
 ## begin gnulib module posix_spawnattr_destroy
 
 
-EXTRA_DIST += spawnattr_destroy.c
+EXTRA_DIST += lib/spawnattr_destroy.c
 
-EXTRA_libbison_a_SOURCES += spawnattr_destroy.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawnattr_destroy.c
 
 ## end   gnulib module posix_spawnattr_destroy
 
 ## begin gnulib module posix_spawnattr_init
 
 
-EXTRA_DIST += spawnattr_init.c
+EXTRA_DIST += lib/spawnattr_init.c
 
-EXTRA_libbison_a_SOURCES += spawnattr_init.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawnattr_init.c
 
 ## end   gnulib module posix_spawnattr_init
 
 ## begin gnulib module posix_spawnattr_setflags
 
 
-EXTRA_DIST += spawnattr_setflags.c
+EXTRA_DIST += lib/spawnattr_setflags.c
 
-EXTRA_libbison_a_SOURCES += spawnattr_setflags.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawnattr_setflags.c
 
 ## end   gnulib module posix_spawnattr_setflags
 
 ## begin gnulib module posix_spawnattr_setsigmask
 
 
-EXTRA_DIST += spawnattr_setsigmask.c
+EXTRA_DIST += lib/spawnattr_setsigmask.c
 
-EXTRA_libbison_a_SOURCES += spawnattr_setsigmask.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawnattr_setsigmask.c
 
 ## end   gnulib module posix_spawnattr_setsigmask
 
 ## begin gnulib module posix_spawnp
 
 
-EXTRA_DIST += spawnp.c
+EXTRA_DIST += lib/spawnp.c
 
-EXTRA_libbison_a_SOURCES += spawnp.c
+EXTRA_lib_libbison_a_SOURCES += lib/spawnp.c
 
 ## end   gnulib module posix_spawnp
 
 ## begin gnulib module printf-frexp
 
-libbison_a_SOURCES += printf-frexp.c
+lib_libbison_a_SOURCES += lib/printf-frexp.c
 
-EXTRA_DIST += printf-frexp.h
+EXTRA_DIST += lib/printf-frexp.h
 
 ## end   gnulib module printf-frexp
 
 ## begin gnulib module printf-frexpl
 
-libbison_a_SOURCES += printf-frexpl.c
+lib_libbison_a_SOURCES += lib/printf-frexpl.c
 
-EXTRA_DIST += printf-frexp.c printf-frexpl.h
+EXTRA_DIST += lib/printf-frexp.c lib/printf-frexpl.h
 
-EXTRA_libbison_a_SOURCES += printf-frexp.c
+EXTRA_lib_libbison_a_SOURCES += lib/printf-frexp.c
 
 ## end   gnulib module printf-frexpl
 
 ## begin gnulib module printf-posix
 
 
-EXTRA_DIST += printf.c
+EXTRA_DIST += lib/printf.c
 
-EXTRA_libbison_a_SOURCES += printf.c
+EXTRA_lib_libbison_a_SOURCES += lib/printf.c
 
 ## end   gnulib module printf-posix
 
 ## begin gnulib module progname
 
-libbison_a_SOURCES += progname.h progname.c
+lib_libbison_a_SOURCES += lib/progname.h lib/progname.c
 
 ## end   gnulib module progname
 
 ## begin gnulib module quote
 
 
-EXTRA_DIST += quote.h
+EXTRA_DIST += lib/quote.h
 
 ## end   gnulib module quote
 
 ## begin gnulib module quotearg
 
-libbison_a_SOURCES += quotearg.c
+lib_libbison_a_SOURCES += lib/quotearg.c
 
-EXTRA_DIST += quote.h quotearg.h
+EXTRA_DIST += lib/quote.h lib/quotearg.h
 
 ## end   gnulib module quotearg
 
 ## begin gnulib module raise
 
 
-EXTRA_DIST += raise.c
+EXTRA_DIST += lib/raise.c
 
-EXTRA_libbison_a_SOURCES += raise.c
+EXTRA_lib_libbison_a_SOURCES += lib/raise.c
 
 ## end   gnulib module raise
 
 ## begin gnulib module rawmemchr
 
+if gl_GNULIB_ENABLED_rawmemchr
 
-EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
+endif
+EXTRA_DIST += lib/rawmemchr.c lib/rawmemchr.valgrind
 
-EXTRA_libbison_a_SOURCES += rawmemchr.c
+EXTRA_lib_libbison_a_SOURCES += lib/rawmemchr.c
 
 ## end   gnulib module rawmemchr
 
-## begin gnulib module readme-release
+## begin gnulib module readlink
 
 
-EXTRA_DIST += $(top_srcdir)/README-release
+EXTRA_DIST += lib/readlink.c
 
-## end   gnulib module readme-release
+EXTRA_lib_libbison_a_SOURCES += lib/readlink.c
+
+## end   gnulib module readlink
 
 ## begin gnulib module realloc-posix
 
 
-EXTRA_DIST += realloc.c
+EXTRA_DIST += lib/realloc.c
 
-EXTRA_libbison_a_SOURCES += realloc.c
+EXTRA_lib_libbison_a_SOURCES += lib/realloc.c
 
 ## end   gnulib module realloc-posix
 
+## begin gnulib module relocatable-prog
+
+DEFS += -DEXEEXT=\"@EXEEXT@\"
+if RELOCATABLE_VIA_WRAPPER
+uninstall-hook: uninstall-relocwrapper
+uninstall-relocwrapper:
+	if test $(RELOCATABLE) = yes; then \
+	  case '$(EXEEXT)' in \
+	    .bin*) ;; \
+	    *) cd $(top_builddir) && \
+	       $(MAKE) $(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT) \
+		       AM_MAKEFLAGS='$(AM_MAKEFLAGS) EXEEXT=.bin$(EXEEXT)' \
+		       uninstall ;; \
+	  esac; \
+	fi
+endif
+## Automake warns about conditionally added dependencies to unconditionally defined targets.
+.PHONY: uninstall-relocwrapper
+
+EXTRA_DIST += lib/progreloc.c lib/relocatable.c lib/relocatable.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/progreloc.c lib/relocatable.c
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.libpath $(top_srcdir)/build-aux/reloc-ldflags $(top_srcdir)/build-aux/libtool-reloc
+
+## end   gnulib module relocatable-prog
+
+## begin gnulib module relocatable-prog-wrapper
+
+
+EXTRA_DIST += lib/allocator.c lib/allocator.h lib/areadlink.c lib/areadlink.h lib/c-ctype.c lib/c-ctype.h lib/canonicalize-lgpl.c lib/careadlinkat.c lib/careadlinkat.h lib/lstat.c lib/malloca.c lib/malloca.h lib/progname.c lib/progname.h lib/progreloc.c lib/readlink.c lib/relocatable.c lib/relocatable.h lib/relocwrapper.c lib/setenv.c lib/stat.c
+
+EXTRA_DIST += $(top_srcdir)/build-aux/install-reloc
+
+## end   gnulib module relocatable-prog-wrapper
+
+## begin gnulib module relocatable-script
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/relocatable.sh.in
+
+## end   gnulib module relocatable-script
+
+## begin gnulib module rename
+
+
+EXTRA_DIST += lib/rename.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/rename.c
+
+## end   gnulib module rename
+
+## begin gnulib module rmdir
+
+if gl_GNULIB_ENABLED_rmdir
+
+endif
+EXTRA_DIST += lib/rmdir.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/rmdir.c
+
+## end   gnulib module rmdir
+
+## begin gnulib module same-inode
+
+if gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62
+
+endif
+EXTRA_DIST += lib/same-inode.h
+
+## end   gnulib module same-inode
+
 ## begin gnulib module sched
 
-BUILT_SOURCES += $(SCHED_H)
+BUILT_SOURCES += lib/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
+lib/sched.h: lib/sched.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_SCHED_H''@|$(HAVE_SCHED_H)|g' \
+	      -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_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; \
+	      -e 's/@''GNULIB_SCHED_YIELD''@/$(GNULIB_SCHED_YIELD)/g' \
+	      -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \
+	      -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(top_srcdir)/lib/sched.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-else
-sched.h: $(top_builddir)/config.status
-	rm -f $@
-endif
-MOSTLYCLEANFILES += sched.h sched.h-t
+MOSTLYCLEANFILES += lib/sched.h lib/sched.h-t
 
-EXTRA_DIST += sched.in.h
+EXTRA_DIST += lib/sched.in.h
 
 ## end   gnulib module sched
 
 ## begin gnulib module sigaction
 
-libbison_a_SOURCES += sig-handler.c
+lib_libbison_a_SOURCES += lib/sig-handler.c
 
-EXTRA_DIST += sig-handler.h sigaction.c
+EXTRA_DIST += lib/sig-handler.h lib/sigaction.c
 
-EXTRA_libbison_a_SOURCES += sigaction.c
+EXTRA_lib_libbison_a_SOURCES += lib/sigaction.c
 
 ## end   gnulib module sigaction
 
 ## begin gnulib module signal-h
 
-BUILT_SOURCES += signal.h
+BUILT_SOURCES += lib/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)
+lib/signal.h: lib/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' \
@@ -1481,8 +1853,8 @@
 	      -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_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' \
@@ -1500,136 +1872,103 @@
 	      -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; \
+	      < $(top_srcdir)/lib/signal.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += signal.h signal.h-t
+MOSTLYCLEANFILES += lib/signal.h lib/signal.h-t
 
-EXTRA_DIST += signal.in.h
+EXTRA_DIST += lib/signal.in.h
 
 ## end   gnulib module signal-h
 
 ## begin gnulib module signbit
 
 
-EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c
+EXTRA_DIST += lib/float+.h lib/signbitd.c lib/signbitf.c lib/signbitl.c
 
-EXTRA_libbison_a_SOURCES += signbitd.c signbitf.c signbitl.c
+EXTRA_lib_libbison_a_SOURCES += lib/signbitd.c lib/signbitf.c lib/signbitl.c
 
 ## end   gnulib module signbit
 
 ## begin gnulib module sigprocmask
 
 
-EXTRA_DIST += sigprocmask.c
+EXTRA_DIST += lib/sigprocmask.c
 
-EXTRA_libbison_a_SOURCES += sigprocmask.c
+EXTRA_lib_libbison_a_SOURCES += lib/sigprocmask.c
 
 ## end   gnulib module sigprocmask
 
 ## begin gnulib module size_max
 
-libbison_a_SOURCES += size_max.h
+lib_libbison_a_SOURCES += lib/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
+# gnulib Makefile snippets, it must be present in all makefiles that
 # need it. This is ensured by the applicability 'all' defined above.
 
-_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h
+_NORETURN_H=$(top_srcdir)/lib/_Noreturn.h
 
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h
+EXTRA_DIST += lib/_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.
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles 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=$(top_srcdir)/lib/arg-nonnull.h
 
-ARG_NONNULL_H=arg-nonnull.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+EXTRA_DIST += lib/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.
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles 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=$(top_srcdir)/lib/c++defs.h
 
-CXXDEFS_H=c++defs.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
+EXTRA_DIST += lib/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
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
 
-WARN_ON_USE_H=warn-on-use.h
+WARN_ON_USE_H=$(top_srcdir)/lib/warn-on-use.h
 
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
+EXTRA_DIST += lib/warn-on-use.h
 
 ## end   gnulib module snippet/warn-on-use
 
 ## begin gnulib module snprintf
 
 
-EXTRA_DIST += snprintf.c
+EXTRA_DIST += lib/snprintf.c
 
-EXTRA_libbison_a_SOURCES += snprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/snprintf.c
 
 ## end   gnulib module snprintf
 
 ## begin gnulib module spawn
 
-BUILT_SOURCES += spawn.h
+BUILT_SOURCES += lib/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)
+lib/spawn.h: lib/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' \
@@ -1641,8 +1980,10 @@
 	      -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_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/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_ADDFCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)/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' \
@@ -1662,46 +2003,62 @@
 	      -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|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \
+	      -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \
 	      -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \
+	      -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|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_ADDFCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|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; \
+	      < $(top_srcdir)/lib/spawn.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += spawn.h spawn.h-t
+MOSTLYCLEANFILES += lib/spawn.h lib/spawn.h-t
 
-EXTRA_DIST += spawn.in.h
+EXTRA_DIST += lib/spawn.in.h
 
 ## end   gnulib module spawn
 
 ## begin gnulib module spawn-pipe
 
-libbison_a_SOURCES += spawn-pipe.h spawn-pipe.c w32spawn.h
+lib_libbison_a_SOURCES += lib/spawn-pipe.h lib/spawn-pipe.c lib/w32spawn.h
 
 ## end   gnulib module spawn-pipe
 
 ## begin gnulib module sprintf-posix
 
 
-EXTRA_DIST += sprintf.c
+EXTRA_DIST += lib/sprintf.c
 
-EXTRA_libbison_a_SOURCES += sprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/sprintf.c
 
 ## end   gnulib module sprintf-posix
 
 ## begin gnulib module stat
 
+if gl_GNULIB_ENABLED_stat
 
-EXTRA_DIST += stat.c
+endif
+EXTRA_DIST += lib/stat-w32.c lib/stat-w32.h lib/stat.c
 
-EXTRA_libbison_a_SOURCES += stat.c
+EXTRA_lib_libbison_a_SOURCES += lib/stat-w32.c lib/stat.c
 
 ## end   gnulib module stat
 
+## begin gnulib module stat-time
+
+if gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c
+lib_libbison_a_SOURCES += lib/stat-time.c
+
+endif
+EXTRA_DIST += lib/stat-time.h
+
+## end   gnulib module stat-time
+
 ## begin gnulib module stdbool
 
 BUILT_SOURCES += $(STDBOOL_H)
@@ -1709,19 +2066,19 @@
 # We need the following in order to create <stdbool.h> when the system
 # doesn't have one that works.
 if GL_GENERATE_STDBOOL_H
-stdbool.h: stdbool.in.h $(top_builddir)/config.status
+lib/stdbool.h: lib/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; \
+	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(top_srcdir)/lib/stdbool.in.h; \
 	} > $@-t && \
 	mv $@-t $@
 else
-stdbool.h: $(top_builddir)/config.status
+lib/stdbool.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += stdbool.h stdbool.h-t
+MOSTLYCLEANFILES += lib/stdbool.h lib/stdbool.h-t
 
-EXTRA_DIST += stdbool.in.h
+EXTRA_DIST += lib/stdbool.in.h
 
 ## end   gnulib module stdbool
 
@@ -1732,7 +2089,7 @@
 # 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
+lib/stddef.h: lib/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' \
@@ -1740,18 +2097,19 @@
 	      -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_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
 	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
 	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-	      < $(srcdir)/stddef.in.h; \
+	      < $(top_srcdir)/lib/stddef.in.h; \
 	} > $@-t && \
 	mv $@-t $@
 else
-stddef.h: $(top_builddir)/config.status
+lib/stddef.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += stddef.h stddef.h-t
+MOSTLYCLEANFILES += lib/stddef.h lib/stddef.h-t
 
-EXTRA_DIST += stddef.in.h
+EXTRA_DIST += lib/stddef.in.h
 
 ## end   gnulib module stddef
 
@@ -1762,7 +2120,7 @@
 # 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
+lib/stdint.h: lib/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' \
@@ -1771,6 +2129,7 @@
 	      -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_C99_STDINT_H''@/$(HAVE_C99_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' \
@@ -1792,27 +2151,27 @@
 	      -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; \
+	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+	      < $(top_srcdir)/lib/stdint.in.h; \
 	} > $@-t && \
 	mv $@-t $@
 else
-stdint.h: $(top_builddir)/config.status
+lib/stdint.h: $(top_builddir)/config.status
 	rm -f $@
 endif
-MOSTLYCLEANFILES += stdint.h stdint.h-t
+MOSTLYCLEANFILES += lib/stdint.h lib/stdint.h-t
 
-EXTRA_DIST += stdint.in.h
+EXTRA_DIST += lib/stdint.in.h
 
 ## end   gnulib module stdint
 
 ## begin gnulib module stdio
 
-BUILT_SOURCES += stdio.h
-libbison_a_SOURCES += stdio.c
+BUILT_SOURCES += lib/stdio.h
 
 # 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)
+lib/stdio.h: lib/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' \
@@ -1873,7 +2232,7 @@
 	      -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 | \
+	      < $(top_srcdir)/lib/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' \
@@ -1928,19 +2287,19 @@
 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += stdio.h stdio.h-t
+MOSTLYCLEANFILES += lib/stdio.h lib/stdio.h-t
 
-EXTRA_DIST += stdio.in.h
+EXTRA_DIST += lib/stdio.in.h
 
 ## end   gnulib module stdio
 
 ## begin gnulib module stdlib
 
-BUILT_SOURCES += stdlib.h
+BUILT_SOURCES += lib/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) \
+lib/stdlib.h: lib/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! */' && \
@@ -1967,26 +2326,33 @@
 	      -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_QSORT_R''@/$(GNULIB_QSORT_R)/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_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \
 	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
 	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+	      -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \
 	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
 	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+	      -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/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 | \
+	      < $(top_srcdir)/lib/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_INITSTATE''@|$(HAVE_INITSTATE)|g' \
+	      -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \
+	      -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \
 	      -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
 	      -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
 	      -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
@@ -1995,13 +2361,19 @@
 	      -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_QSORT_R''@|$(HAVE_QSORT_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_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \
 	      -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
 	      -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+	      -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \
 	      -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+	      -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
+	      -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
 	      -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+	      -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|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' \
@@ -2010,17 +2382,22 @@
 	      -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_INITSTATE''@|$(REPLACE_INITSTATE)|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_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
+	      -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|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_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
 	      -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+	      -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
 	      -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
 	      -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
 	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
@@ -2029,80 +2406,86 @@
 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+MOSTLYCLEANFILES += lib/stdlib.h lib/stdlib.h-t
 
-EXTRA_DIST += stdlib.in.h
+EXTRA_DIST += lib/stdlib.in.h
 
 ## end   gnulib module stdlib
 
 ## begin gnulib module stpcpy
 
 
-EXTRA_DIST += stpcpy.c
+EXTRA_DIST += lib/stpcpy.c
 
-EXTRA_libbison_a_SOURCES += stpcpy.c
+EXTRA_lib_libbison_a_SOURCES += lib/stpcpy.c
 
 ## end   gnulib module stpcpy
 
 ## begin gnulib module strchrnul
 
+if gl_GNULIB_ENABLED_strchrnul
 
-EXTRA_DIST += strchrnul.c strchrnul.valgrind
+endif
+EXTRA_DIST += lib/strchrnul.c lib/strchrnul.valgrind
 
-EXTRA_libbison_a_SOURCES += strchrnul.c
+EXTRA_lib_libbison_a_SOURCES += lib/strchrnul.c
 
 ## end   gnulib module strchrnul
 
 ## begin gnulib module strdup-posix
 
 
-EXTRA_DIST += strdup.c
+EXTRA_DIST += lib/strdup.c
 
-EXTRA_libbison_a_SOURCES += strdup.c
+EXTRA_lib_libbison_a_SOURCES += lib/strdup.c
 
 ## end   gnulib module strdup-posix
 
 ## begin gnulib module streq
 
 
-EXTRA_DIST += streq.h
+EXTRA_DIST += lib/streq.h
 
 ## end   gnulib module streq
 
 ## begin gnulib module strerror
 
 
-EXTRA_DIST += strerror.c
+EXTRA_DIST += lib/strerror.c
 
-EXTRA_libbison_a_SOURCES += strerror.c
+EXTRA_lib_libbison_a_SOURCES += lib/strerror.c
 
 ## end   gnulib module strerror
 
 ## begin gnulib module strerror-override
 
+if gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72
 
-EXTRA_DIST += strerror-override.c strerror-override.h
+endif
+EXTRA_DIST += lib/strerror-override.c lib/strerror-override.h
 
-EXTRA_libbison_a_SOURCES += strerror-override.c
+EXTRA_lib_libbison_a_SOURCES += lib/strerror-override.c
 
 ## end   gnulib module strerror-override
 
 ## begin gnulib module strerror_r-posix
 
+if gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a
 
-EXTRA_DIST += strerror_r.c
+endif
+EXTRA_DIST += lib/strerror_r.c
 
-EXTRA_libbison_a_SOURCES += strerror_r.c
+EXTRA_lib_libbison_a_SOURCES += lib/strerror_r.c
 
 ## end   gnulib module strerror_r-posix
 
 ## begin gnulib module string
 
-BUILT_SOURCES += string.h
+BUILT_SOURCES += lib/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)
+lib/string.h: lib/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' \
@@ -2110,6 +2493,7 @@
 	      -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_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
 	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
 	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
 	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
@@ -2147,8 +2531,9 @@
 	      -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' \
+	      < $(top_srcdir)/lib/string.in.h | \
+	  sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+	      -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' \
@@ -2169,83 +2554,102 @@
 	      -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_STPNCPY''@|$(REPLACE_STPNCPY)|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_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
 	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|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; \
+	      < $(top_srcdir)/lib/string.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += string.h string.h-t
+MOSTLYCLEANFILES += lib/string.h lib/string.h-t
 
-EXTRA_DIST += string.in.h
+EXTRA_DIST += lib/string.in.h
 
 ## end   gnulib module string
 
 ## begin gnulib module strndup
 
 
-EXTRA_DIST += strndup.c
+EXTRA_DIST += lib/strndup.c
 
-EXTRA_libbison_a_SOURCES += strndup.c
+EXTRA_lib_libbison_a_SOURCES += lib/strndup.c
 
 ## end   gnulib module strndup
 
 ## begin gnulib module strnlen
 
+if gl_GNULIB_ENABLED_strnlen
 
-EXTRA_DIST += strnlen.c
+endif
+EXTRA_DIST += lib/strnlen.c
 
-EXTRA_libbison_a_SOURCES += strnlen.c
+EXTRA_lib_libbison_a_SOURCES += lib/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_DIST += lib/strverscmp.c
 
-EXTRA_libbison_a_SOURCES += strverscmp.c
+EXTRA_lib_libbison_a_SOURCES += lib/strverscmp.c
 
 ## end   gnulib module strverscmp
 
+## begin gnulib module sys_resource
+
+BUILT_SOURCES += lib/sys/resource.h
+
+# We need the following in order to create <sys/resource.h> when the system
+# doesn't have one.
+lib/sys/resource.h: lib/sys_resource.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/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_RESOURCE_H''@|$(NEXT_SYS_RESOURCE_H)|g' \
+	      -e 's|@''HAVE_SYS_RESOURCE_H''@|$(HAVE_SYS_RESOURCE_H)|g' \
+	      -e 's/@''GNULIB_GETRUSAGE''@/$(GNULIB_GETRUSAGE)/g' \
+	      -e 's/@''HAVE_GETRUSAGE''@/$(HAVE_GETRUSAGE)/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)' \
+	      < $(top_srcdir)/lib/sys_resource.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += lib/sys/resource.h lib/sys/resource.h-t
+MOSTLYCLEANDIRS += lib/sys
+
+EXTRA_DIST += lib/sys_resource.in.h
+
+## end   gnulib module sys_resource
+
 ## begin gnulib module sys_stat
 
-BUILT_SOURCES += sys/stat.h
+if gl_GNULIB_ENABLED_sys_stat
+BUILT_SOURCES += lib/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
+lib/sys/stat.h: lib/sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
 	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
@@ -2254,6 +2658,7 @@
 	      -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|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
 	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
 	      -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
 	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
@@ -2267,6 +2672,7 @@
 	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
 	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
 	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
+	      -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \
 	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
 	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
 	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
@@ -2290,24 +2696,90 @@
 	      -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; \
+	      < $(top_srcdir)/lib/sys_stat.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
-MOSTLYCLEANDIRS += sys
+MOSTLYCLEANFILES += lib/sys/stat.h lib/sys/stat.h-t
+MOSTLYCLEANDIRS += lib/sys
 
-EXTRA_DIST += sys_stat.in.h
+endif
+EXTRA_DIST += lib/sys_stat.in.h
 
 ## end   gnulib module sys_stat
 
+## begin gnulib module sys_time
+
+BUILT_SOURCES += lib/sys/time.h
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/time.h: lib/sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_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_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+	      -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+	      -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
+	      -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
+	      -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+	      -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+	      -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/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)' \
+	      < $(top_srcdir)/lib/sys_time.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += lib/sys/time.h lib/sys/time.h-t
+
+EXTRA_DIST += lib/sys_time.in.h
+
+## end   gnulib module sys_time
+
+## begin gnulib module sys_times
+
+BUILT_SOURCES += lib/sys/times.h
+
+# We need the following in order to create <sys/times.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/times.h: lib/sys_times.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIMES_H''@/$(HAVE_SYS_TIMES_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_SYS_TIMES_H''@|$(NEXT_SYS_TIMES_H)|g' \
+	      -e 's/@''GNULIB_TIMES''@/$(GNULIB_TIMES)/g' \
+	      -e 's|@''HAVE_STRUCT_TMS''@|$(HAVE_STRUCT_TMS)|g' \
+	      -e 's|@''HAVE_TIMES''@|$(HAVE_TIMES)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(top_srcdir)/lib/sys_times.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += lib/sys/times.h lib/sys/times.h-t
+MOSTLYCLEANDIRS += lib/sys
+
+EXTRA_DIST += lib/sys_times.in.h
+
+## end   gnulib module sys_times
+
 ## begin gnulib module sys_types
 
-BUILT_SOURCES += sys/types.h
+BUILT_SOURCES += lib/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
+lib/sys/types.h: lib/sys_types.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) lib/sys
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
 	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
@@ -2316,23 +2788,24 @@
 	      -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; \
+	      -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+	      < $(top_srcdir)/lib/sys_types.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += sys/types.h sys/types.h-t
+MOSTLYCLEANFILES += lib/sys/types.h lib/sys/types.h-t
 
-EXTRA_DIST += sys_types.in.h
+EXTRA_DIST += lib/sys_types.in.h
 
 ## end   gnulib module sys_types
 
 ## begin gnulib module sys_wait
 
-BUILT_SOURCES += sys/wait.h
+BUILT_SOURCES += lib/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
+lib/sys/wait.h: lib/sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) lib/sys
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
 	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
@@ -2343,31 +2816,29 @@
 	      -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; \
+	      < $(top_srcdir)/lib/sys_wait.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t
-MOSTLYCLEANDIRS += sys
+MOSTLYCLEANFILES += lib/sys/wait.h lib/sys/wait.h-t
+MOSTLYCLEANDIRS += lib/sys
 
-EXTRA_DIST += sys_wait.in.h
+EXTRA_DIST += lib/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
+lib_libbison_a_SOURCES += lib/glthread/threadlib.c
 
 ## end   gnulib module threadlib
 
 ## begin gnulib module time
 
-BUILT_SOURCES += time.h
+BUILT_SOURCES += lib/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)
+lib/time.h: lib/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' \
@@ -2375,42 +2846,77 @@
 	      -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_CTIME''@/$(GNULIB_CTIME)/g' \
+	      -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \
 	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
 	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+	      -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/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/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \
+	      -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/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|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
+	      -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \
+	      -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
+	      -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
+	      -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|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_STRFTIME''@|$(REPLACE_STRFTIME)|g' \
 	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+	      -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|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 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_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; \
+	      < $(top_srcdir)/lib/time.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += time.h time.h-t
+MOSTLYCLEANFILES += lib/time.h lib/time.h-t
 
-EXTRA_DIST += time.in.h
+EXTRA_DIST += lib/time.in.h
 
 ## end   gnulib module time
 
+## begin gnulib module timespec
+
+lib_libbison_a_SOURCES += lib/timespec.c
+
+EXTRA_DIST += lib/timespec.h
+
+## end   gnulib module timespec
+
+## begin gnulib module timevar
+
+lib_libbison_a_SOURCES += lib/timevar.c lib/timevar.def
+
+EXTRA_DIST += lib/timevar.h
+
+## end   gnulib module timevar
+
+## begin gnulib module tls
+
+lib_libbison_a_SOURCES += lib/glthread/tls.h lib/glthread/tls.c
+
+## end   gnulib module tls
+
 ## begin gnulib module unistd
 
-BUILT_SOURCES += unistd.h
-libbison_a_SOURCES += unistd.c
+BUILT_SOURCES += lib/unistd.h
+lib_libbison_a_SOURCES += lib/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: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+lib/unistd.h: lib/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' \
@@ -2420,9 +2926,11 @@
 	      -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_ACCESS''@/$(GNULIB_ACCESS)/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_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \
 	      -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
 	      -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
 	      -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
@@ -2442,6 +2950,7 @@
 	      -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_GETPASS''@/$(GNULIB_GETPASS)/g' \
 	      -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
 	      -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
 	      -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
@@ -2461,6 +2970,7 @@
 	      -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
 	      -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
 	      -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
+	      -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/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' \
@@ -2469,8 +2979,9 @@
 	      -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 | \
+	      < $(top_srcdir)/lib/unistd.in.h | \
 	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+	      -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \
 	      -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
 	      -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
 	      -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
@@ -2483,8 +2994,8 @@
 	      -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_GETPASS''@|$(HAVE_GETPASS)|g' \
 	      -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
 	      -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
 	      -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
@@ -2505,25 +3016,31 @@
 	      -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''@|$(HAVE_DECL_GETLOGIN)|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_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|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' \
+	  sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \
+	      -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_FACCESSAT''@|$(REPLACE_FACCESSAT)|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_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|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_GETPASS''@|$(REPLACE_GETPASS)|g' \
 	      -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
 	      -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
 	      -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
@@ -2533,9 +3050,12 @@
 	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
 	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
 	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|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_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
+	      -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \
 	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
 	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
 	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
@@ -2548,17 +3068,17 @@
 	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += unistd.h unistd.h-t
+MOSTLYCLEANFILES += lib/unistd.h lib/unistd.h-t
 
-EXTRA_DIST += unistd.in.h
+EXTRA_DIST += lib/unistd.in.h
 
 ## end   gnulib module unistd
 
 ## begin gnulib module unistd-safer
 
-libbison_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c
+lib_libbison_a_SOURCES += lib/dup-safer.c lib/fd-safer.c lib/pipe-safer.c
 
-EXTRA_DIST += unistd--.h unistd-safer.h
+EXTRA_DIST += lib/unistd--.h lib/unistd-safer.h
 
 ## end   gnulib module unistd-safer
 
@@ -2566,15 +3086,15 @@
 
 BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)
 
-unitypes.h: unitypes.in.h
+lib/unitypes.h: lib/unitypes.in.h
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/unitypes.in.h; \
+	  cat $(top_srcdir)/lib/unitypes.in.h; \
 	} > $@-t && \
 	mv -f $@-t $@
-MOSTLYCLEANFILES += unitypes.h unitypes.h-t
+MOSTLYCLEANFILES += lib/unitypes.h lib/unitypes.h-t
 
-EXTRA_DIST += unitypes.in.h
+EXTRA_DIST += lib/unitypes.in.h
 
 ## end   gnulib module unitypes
 
@@ -2582,41 +3102,50 @@
 
 BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H)
 
-uniwidth.h: uniwidth.in.h
+lib/uniwidth.h: lib/uniwidth.in.h
 	$(AM_V_GEN)rm -f $@-t $@ && \
 	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  cat $(srcdir)/uniwidth.in.h; \
+	  cat $(top_srcdir)/lib/uniwidth.in.h; \
 	} > $@-t && \
 	mv -f $@-t $@
-MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t
+MOSTLYCLEANFILES += lib/uniwidth.h lib/uniwidth.h-t
 
-EXTRA_DIST += localcharset.h uniwidth.in.h
+EXTRA_DIST += lib/localcharset.h lib/uniwidth.in.h
 
 ## end   gnulib module uniwidth/base
 
 ## begin gnulib module uniwidth/width
 
 if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH
-libbison_a_SOURCES += uniwidth/width.c
+lib_libbison_a_SOURCES += lib/uniwidth/width.c
 endif
 
-EXTRA_DIST += uniwidth/cjk.h
+EXTRA_DIST += lib/uniwidth/cjk.h
 
 ## end   gnulib module uniwidth/width
 
+## begin gnulib module unlink
+
+
+EXTRA_DIST += lib/unlink.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/unlink.c
+
+## end   gnulib module unlink
+
 ## begin gnulib module unlocked-io
 
 
-EXTRA_DIST += unlocked-io.h
+EXTRA_DIST += lib/unlocked-io.h
 
 ## end   gnulib module unlocked-io
 
 ## begin gnulib module unsetenv
 
 
-EXTRA_DIST += unsetenv.c
+EXTRA_DIST += lib/unsetenv.c
 
-EXTRA_libbison_a_SOURCES += unsetenv.c
+EXTRA_lib_libbison_a_SOURCES += lib/unsetenv.c
 
 ## end   gnulib module unsetenv
 
@@ -2637,12 +3166,21 @@
 ## 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_DIST += lib/asnprintf.c lib/float+.h lib/printf-args.c lib/printf-args.h lib/printf-parse.c lib/printf-parse.h lib/vasnprintf.c lib/vasnprintf.h
 
-EXTRA_libbison_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/asnprintf.c lib/printf-args.c lib/printf-parse.c lib/vasnprintf.c
 
 ## end   gnulib module vasnprintf
 
+## begin gnulib module vasprintf
+
+
+EXTRA_DIST += lib/asprintf.c lib/vasprintf.c
+
+EXTRA_lib_libbison_a_SOURCES += lib/asprintf.c lib/vasprintf.c
+
+## end   gnulib module vasprintf
+
 ## begin gnulib module vc-list-files
 
 
@@ -2653,59 +3191,61 @@
 ## begin gnulib module verify
 
 
-EXTRA_DIST += verify.h
+EXTRA_DIST += lib/verify.h
 
 ## end   gnulib module verify
 
 ## begin gnulib module vfprintf-posix
 
+if gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b
 
-EXTRA_DIST += vfprintf.c
+endif
+EXTRA_DIST += lib/vfprintf.c
 
-EXTRA_libbison_a_SOURCES += vfprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/vfprintf.c
 
 ## end   gnulib module vfprintf-posix
 
 ## begin gnulib module vsnprintf
 
 
-EXTRA_DIST += vsnprintf.c
+EXTRA_DIST += lib/vsnprintf.c
 
-EXTRA_libbison_a_SOURCES += vsnprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/vsnprintf.c
 
 ## end   gnulib module vsnprintf
 
 ## begin gnulib module vsprintf-posix
 
 
-EXTRA_DIST += vsprintf.c
+EXTRA_DIST += lib/vsprintf.c
 
-EXTRA_libbison_a_SOURCES += vsprintf.c
+EXTRA_lib_libbison_a_SOURCES += lib/vsprintf.c
 
 ## end   gnulib module vsprintf-posix
 
 ## begin gnulib module wait-process
 
-libbison_a_SOURCES += wait-process.h wait-process.c
+lib_libbison_a_SOURCES += lib/wait-process.h lib/wait-process.c
 
 ## end   gnulib module wait-process
 
 ## begin gnulib module waitpid
 
 
-EXTRA_DIST += waitpid.c
+EXTRA_DIST += lib/waitpid.c
 
-EXTRA_libbison_a_SOURCES += waitpid.c
+EXTRA_lib_libbison_a_SOURCES += lib/waitpid.c
 
 ## end   gnulib module waitpid
 
 ## begin gnulib module wchar
 
-BUILT_SOURCES += wchar.h
+BUILT_SOURCES += lib/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)
+lib/wchar.h: lib/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' \
@@ -2715,6 +3255,8 @@
 	      -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/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
 	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
 	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
 	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
@@ -2754,7 +3296,8 @@
 	      -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 | \
+	      -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
+	      < $(top_srcdir)/lib/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' \
@@ -2793,6 +3336,7 @@
 	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
 	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
 	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
 	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
 	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
 	  | \
@@ -2809,25 +3353,27 @@
 	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
 	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
 	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+	      -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|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
+MOSTLYCLEANFILES += lib/wchar.h lib/wchar.h-t
 
-EXTRA_DIST += wchar.in.h
+EXTRA_DIST += lib/wchar.in.h
 
 ## end   gnulib module wchar
 
 ## begin gnulib module wctype-h
 
-BUILT_SOURCES += wctype.h
-libbison_a_SOURCES += wctype-h.c
+BUILT_SOURCES += lib/wctype.h
+lib_libbison_a_SOURCES += lib/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)
+lib/wctype.h: lib/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' \
@@ -2836,6 +3382,8 @@
 	      -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/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+	      -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
 	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
 	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
 	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
@@ -2851,63 +3399,146 @@
 	      -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; \
+	      < $(top_srcdir)/lib/wctype.in.h; \
 	} > $@-t && \
 	mv $@-t $@
-MOSTLYCLEANFILES += wctype.h wctype.h-t
+MOSTLYCLEANFILES += lib/wctype.h lib/wctype.h-t
 
-EXTRA_DIST += wctype.in.h
+EXTRA_DIST += lib/wctype.in.h
 
 ## end   gnulib module wctype-h
 
 ## begin gnulib module wcwidth
 
 
-EXTRA_DIST += wcwidth.c
+EXTRA_DIST += lib/wcwidth.c
 
-EXTRA_libbison_a_SOURCES += wcwidth.c
+EXTRA_lib_libbison_a_SOURCES += lib/wcwidth.c
 
 ## end   gnulib module wcwidth
 
+## begin gnulib module windows-mutex
+
+if gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440
+
+endif
+EXTRA_DIST += lib/windows-initguard.h lib/windows-mutex.c lib/windows-mutex.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/windows-mutex.c
+
+## end   gnulib module windows-mutex
+
+## begin gnulib module windows-once
+
+if gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab
+
+endif
+EXTRA_DIST += lib/windows-once.c lib/windows-once.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/windows-once.c
+
+## end   gnulib module windows-once
+
+## begin gnulib module windows-recmutex
+
+if gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354
+
+endif
+EXTRA_DIST += lib/windows-initguard.h lib/windows-recmutex.c lib/windows-recmutex.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/windows-recmutex.c
+
+## end   gnulib module windows-recmutex
+
+## begin gnulib module windows-rwlock
+
+if gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef
+
+endif
+EXTRA_DIST += lib/windows-initguard.h lib/windows-rwlock.c lib/windows-rwlock.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/windows-rwlock.c
+
+## end   gnulib module windows-rwlock
+
+## begin gnulib module windows-tls
+
+if gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d
+
+endif
+EXTRA_DIST += lib/windows-tls.c lib/windows-tls.h
+
+EXTRA_lib_libbison_a_SOURCES += lib/windows-tls.c
+
+## end   gnulib module windows-tls
+
 ## begin gnulib module xalloc
 
-libbison_a_SOURCES += xmalloc.c
+lib_libbison_a_SOURCES += lib/xmalloc.c
 
-EXTRA_DIST += xalloc.h
+EXTRA_DIST += lib/xalloc.h
 
 ## end   gnulib module xalloc
 
 ## begin gnulib module xalloc-die
 
-libbison_a_SOURCES += xalloc-die.c
+lib_libbison_a_SOURCES += lib/xalloc-die.c
 
 ## end   gnulib module xalloc-die
 
 ## begin gnulib module xalloc-oversized
 
 
-EXTRA_DIST += xalloc-oversized.h
+EXTRA_DIST += lib/xalloc-oversized.h
 
 ## end   gnulib module xalloc-oversized
 
+## begin gnulib module xconcat-filename
+
+lib_libbison_a_SOURCES += lib/xconcat-filename.c
+
+EXTRA_DIST += lib/concat-filename.h
+
+## end   gnulib module xconcat-filename
+
+## begin gnulib module xhash
+
+lib_libbison_a_SOURCES += lib/xhash.c
+
+## end   gnulib module xhash
+
+## begin gnulib module xlist
+
+lib_libbison_a_SOURCES += lib/gl_xlist.h lib/gl_xlist.c
+
+## end   gnulib module xlist
+
 ## begin gnulib module xmemdup0
 
 
-EXTRA_DIST += xmemdup0.c xmemdup0.h
+EXTRA_DIST += lib/xmemdup0.c lib/xmemdup0.h
 
-EXTRA_libbison_a_SOURCES += xmemdup0.c
+EXTRA_lib_libbison_a_SOURCES += lib/xmemdup0.c
 
 ## end   gnulib module xmemdup0
 
+## begin gnulib module xreadlink
+
+lib_libbison_a_SOURCES += lib/xreadlink.c
+
+EXTRA_DIST += lib/xreadlink.h
+
+## end   gnulib module xreadlink
+
 ## begin gnulib module xsize
 
-libbison_a_SOURCES += xsize.h xsize.c
+lib_libbison_a_SOURCES += lib/xsize.h lib/xsize.c
 
 ## end   gnulib module xsize
 
 ## begin gnulib module xstrndup
 
-libbison_a_SOURCES += xstrndup.h xstrndup.c
+lib_libbison_a_SOURCES += lib/xstrndup.h lib/xstrndup.c
 
 ## end   gnulib module xstrndup
 
diff --git a/lib/hard-locale.c b/lib/hard-locale.c
new file mode 100644
index 0000000..dcfcad6
--- /dev/null
+++ b/lib/hard-locale.c
@@ -0,0 +1,72 @@
+/* hard-locale.c -- Determine whether a locale is hard.
+
+   Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include "hard-locale.h"
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __GLIBC__
+# define GLIBC_VERSION __GLIBC__
+#elif defined __UCLIBC__
+# define GLIBC_VERSION 2
+#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/strtoul.c b/lib/hard-locale.h
similarity index 64%
rename from lib/strtoul.c
rename to lib/hard-locale.h
index e99da41..8f1da96 100644
--- a/lib/strtoul.c
+++ b/lib/hard-locale.h
@@ -1,5 +1,6 @@
-/* Copyright (C) 1991, 1997, 2009-2012 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
+/* Determine whether a locale is hard.
+
+   Copyright (C) 1999, 2003-2004, 2009-2019 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
@@ -12,8 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#define UNSIGNED        1
+#ifndef HARD_LOCALE_H_
+# define HARD_LOCALE_H_ 1
 
-#include "strtol.c"
+# include <stdbool.h>
+
+bool hard_locale (int);
+
+#endif /* HARD_LOCALE_H_ */
diff --git a/lib/hash.c b/lib/hash.c
index 1933057..9e1f8e8 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -1,6 +1,6 @@
 /* hash - hashing table processing.
 
-   Copyright (C) 1998-2004, 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2006-2007, 2009-2019 Free Software Foundation, Inc.
 
    Written by Jim Meyering, 1992.
 
@@ -15,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* A generic hash table package.  */
 
@@ -1116,14 +1116,6 @@
   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.
diff --git a/lib/hash.h b/lib/hash.h
index 06e303b..8f2e459 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -1,5 +1,5 @@
 /* hash - hashing table processing.
-   Copyright (C) 1998-1999, 2001, 2003, 2009-2012 Free Software Foundation,
+   Copyright (C) 1998-1999, 2001, 2003, 2009-2019 Free Software Foundation,
    Inc.
    Written by Jim Meyering <meyering@ascend.com>, 1998.
 
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* A generic hash table package.  */
 
@@ -89,6 +89,9 @@
 Hash_table *hash_initialize (size_t, const Hash_tuning *,
                              Hash_hasher, Hash_comparator,
                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
+Hash_table *hash_xinitialize (size_t, const Hash_tuning *,
+                              Hash_hasher, Hash_comparator,
+                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
 void hash_clear (Hash_table *);
 void hash_free (Hash_table *);
 
@@ -96,10 +99,6 @@
 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 *);
diff --git a/lib/intprops.h b/lib/intprops.h
index 2485c78..0c3963d 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -1,10 +1,10 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2005, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2019 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
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the 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,
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
@@ -22,13 +22,13 @@
 
 #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))
+/* Return a value with the common real type of E and V and the value of V.
+   Do not evaluate E.  */
+#define _GL_INT_CONVERT(e, v) ((1 ? 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))
+   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>.  */
+#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v))
 
 /* The extra casts in the following macros work around compiler bugs,
    e.g., in Cray C 5.0.3.0.  */
@@ -37,59 +37,57 @@
    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.  */
+/* True if the real 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)
+/* Return 1 if the real expression E, after promotion, has a
+   signed or floating type.  Do not evaluate E.  */
+#define EXPR_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.  */
+/* Minimum and maximum values for integer types and expressions.  */
+
+/* The width in bits of the integer type or expression T.
+   Do not evaluate T.
+   Padding bits are not supported; this is checked at compile-time below.  */
+#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
 
 /* 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_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
 #define TYPE_MAXIMUM(t)                                                 \
   ((t) (! TYPE_SIGNED (t)                                               \
         ? (t) -1                                                        \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+        : ((((t) 1 << (TYPE_WIDTH (t) - 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.  */
+   after integer promotion.  E is not evaluated.  */
 #define _GL_INT_MINIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
-   ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e)         \
+  (EXPR_SIGNED (e)                                                      \
+   ? ~ _GL_SIGNED_INT_MAXIMUM (e)                                       \
    : _GL_INT_CONVERT (e, 0))
 #define _GL_INT_MAXIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
+  (EXPR_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)
+  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
 
+/* Work around OpenVMS incompatibility with C99.  */
+#if !defined LLONG_MAX && defined __INT64_MAX
+# define LLONG_MAX __INT64_MAX
+# define LLONG_MIN __INT64_MIN
+#endif
 
-/* Return 1 if the __typeof__ keyword works.  This could be done by
+/* This include file assumes that signed types are two's complement without
+   padding bits; the above macros have undefined behavior otherwise.
+   If this is a problem for you, please let us know how to fix it for your host.
+   This assumption is tested by the intprops-tests module.  */
+
+/* Does the __typeof__ keyword work?  This could be done by
    'configure', but for now it's easier to do it by hand.  */
-#if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C
+#if (2 <= __GNUC__ \
+     || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
+     || (0x5110 <= __SUNPRO_C && !__STDC__))
 # define _GL_HAVE___TYPEOF__ 1
 #else
 # define _GL_HAVE___TYPEOF__ 0
@@ -113,12 +111,11 @@
    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
+   Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is
+   unsigned, 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))        \
+  (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _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,
@@ -184,7 +181,7 @@
 /* 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>.  */
+   <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>.  */
 #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
   ((b) < 0                                              \
    ? ((a) < 0                                           \
@@ -223,24 +220,54 @@
    ? (a) < (min) >> (b)                                 \
    : (max) >> (b) < (a))
 
+/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
+   (A, B, P) work when P is non-null.  */
+#if 5 <= __GNUC__ && !defined __ICC
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
+#else
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
+#endif
+
+/* True if __builtin_mul_overflow (A, B, P) works when P is non-null.  */
+#ifdef __clang__
+/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>.  */
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
+#else
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW
+#endif
+
+/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
+   __builtin_mul_overflow_p and __builtin_mul_overflow_p.  */
+#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
 
 /* 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))
+#if _GL_HAS_BUILTIN_OVERFLOW_P
+# define _GL_ADD_OVERFLOW(a, b, min, max)                               \
+   __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
+# define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                          \
+   __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0)
+# define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                          \
+   __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0)
+#else
+# 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))
+#endif
 #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                                     \
@@ -262,22 +289,31 @@
     : (a) % - (b))                                                      \
    == 0)
 
-
-/* Integer overflow checks.
+/* Check for integer overflow, and report low order bits of answer.
 
    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
+   The INT_<op>_WRAPV macros compute the low-order bits of the sum,
+   difference, and product of two C integers, and return 1 if these
+   low-order bits are not numerically correct.
+   These macros work correctly on all known practical hosts, and do not rely
    on undefined behavior due to signed arithmetic overflow.
 
-   Example usage:
+   Example usage, assuming A and B are long int:
 
-     long int i = ...;
-     long int j = ...;
-     if (INT_MULTIPLY_OVERFLOW (i, j))
-       printf ("multiply would overflow");
+     if (INT_MULTIPLY_OVERFLOW (a, b))
+       printf ("result would overflow\n");
      else
-       printf ("product is %ld", i * j);
+       printf ("result is %ld (no overflow)\n", a * b);
+
+   Example usage with WRAPV flavor:
+
+     long int result;
+     bool overflow = INT_MULTIPLY_WRAPV (a, b, &result);
+     printf ("result is %ld (%s)\n", result,
+             overflow ? "after overflow" : "no overflow");
+
+   Restrictions on these macros:
 
    These macros do not check for all possible numerical problems or
    undefined or unspecified behavior: they do not check for division
@@ -286,7 +322,12 @@
    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.
+   The WRAPV macros are not constant expressions.  They support only
+   +, binary -, and *.  Because the WRAPV macros convert the result,
+   they report overflow in different circumstances than the OVERFLOW
+   macros do.
+
+   These macros are tuned for their last input 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.  */
@@ -295,8 +336,12 @@
   _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))
+#if _GL_HAS_BUILTIN_OVERFLOW_P
+# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a)
+#else
+# define INT_NEGATE_OVERFLOW(a) \
+   INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+#endif
 #define INT_MULTIPLY_OVERFLOW(a, b) \
   _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
 #define INT_DIVIDE_OVERFLOW(a, b) \
@@ -313,7 +358,227 @@
    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)))
+                      _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \
+                      _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b)))
+
+/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
+   Return 1 if the result overflows.  See above for restrictions.  */
+#if _GL_HAS_BUILTIN_ADD_OVERFLOW
+# define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
+# define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r)
+#else
+# define INT_ADD_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW)
+# define INT_SUBTRACT_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW)
+#endif
+#if _GL_HAS_BUILTIN_MUL_OVERFLOW
+# if (9 < __GNUC__ + (3 <= __GNUC_MINOR__) \
+      || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__))
+#  define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r)
+# else
+   /* Work around GCC bug 91450.  */
+#  define INT_MULTIPLY_WRAPV(a, b, r) \
+    ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \
+      && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
+     ? ((void) __builtin_mul_overflow (a, b, r), 1) \
+     : __builtin_mul_overflow (a, b, r))
+# endif
+#else
+# define INT_MULTIPLY_WRAPV(a, b, r) \
+   _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW)
+#endif
+
+/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390.  See:
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
+   https://llvm.org/bugs/show_bug.cgi?id=25390
+   For now, assume all versions of GCC-like compilers generate bogus
+   warnings for _Generic.  This matters only for compilers that
+   lack relevant builtins.  */
+#if __GNUC__
+# define _GL__GENERIC_BOGUS 1
+#else
+# define _GL__GENERIC_BOGUS 0
+#endif
+
+/* Store the low-order bits of A <op> B into *R, where OP specifies
+   the operation and OVERFLOW the overflow predicate.  Return 1 if the
+   result overflows.  See above for restrictions.  */
+#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
+   (_Generic \
+    (*(r), \
+     signed char: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        signed char, SCHAR_MIN, SCHAR_MAX), \
+     unsigned char: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        unsigned char, 0, UCHAR_MAX), \
+     short int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        short int, SHRT_MIN, SHRT_MAX), \
+     unsigned short int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        unsigned short int, 0, USHRT_MAX), \
+     int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        int, INT_MIN, INT_MAX), \
+     unsigned int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                        unsigned int, 0, UINT_MAX), \
+     long int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                        long int, LONG_MIN, LONG_MAX), \
+     unsigned long int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                        unsigned long int, 0, ULONG_MAX), \
+     long long int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+                        long long int, LLONG_MIN, LLONG_MAX), \
+     unsigned long long int: \
+       _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+                        unsigned long long int, 0, ULLONG_MAX)))
+#else
+/* Store the low-order bits of A <op> B into *R, where OP specifies
+   the operation and OVERFLOW the overflow predicate.  If *R is
+   signed, its type is ST with bounds SMIN..SMAX; otherwise its type
+   is UT with bounds U..UMAX.  ST and UT are narrower than int.
+   Return 1 if the result overflows.  See above for restrictions.  */
+# if _GL_HAVE___TYPEOF__
+#  define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \
+    (TYPE_SIGNED (__typeof__ (*(r))) \
+     ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \
+     : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax))
+# else
+#  define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \
+    (overflow (a, b, smin, smax) \
+     ? (overflow (a, b, 0, umax) \
+        ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \
+        : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \
+     : (overflow (a, b, 0, umax) \
+        ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \
+        : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0)))
+# endif
+
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
+   (sizeof *(r) == sizeof (signed char) \
+    ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
+                                 signed char, SCHAR_MIN, SCHAR_MAX, \
+                                 unsigned char, UCHAR_MAX) \
+    : sizeof *(r) == sizeof (short int) \
+    ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
+                                 short int, SHRT_MIN, SHRT_MAX, \
+                                 unsigned short int, USHRT_MAX) \
+    : sizeof *(r) == sizeof (int) \
+    ? (EXPR_SIGNED (*(r)) \
+       ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                          int, INT_MIN, INT_MAX) \
+       : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+                          unsigned int, 0, UINT_MAX)) \
+    : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow))
+# ifdef LLONG_MAX
+#  define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+    (sizeof *(r) == sizeof (long int) \
+     ? (EXPR_SIGNED (*(r)) \
+        ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                           long int, LONG_MIN, LONG_MAX) \
+        : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                           unsigned long int, 0, ULONG_MAX)) \
+     : (EXPR_SIGNED (*(r)) \
+        ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+                           long long int, LLONG_MIN, LLONG_MAX) \
+        : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+                           unsigned long long int, 0, ULLONG_MAX)))
+# else
+#  define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+    (EXPR_SIGNED (*(r)) \
+     ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                        long int, LONG_MIN, LONG_MAX) \
+     : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+                        unsigned long int, 0, ULONG_MAX))
+# endif
+#endif
+
+/* Store the low-order bits of A <op> B into *R, where the operation
+   is given by OP.  Use the unsigned type UT for calculation to avoid
+   overflow problems.  *R's type is T, with extrema TMIN and TMAX.
+   T must be a signed integer type.  Return 1 if the result overflows.  */
+#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
+  (overflow (a, b, tmin, tmax) \
+   ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \
+   : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0))
+
+/* Return the low-order bits of A <op> B, where the operation is given
+   by OP.  Use the unsigned type UT for calculation to avoid undefined
+   behavior on signed integer overflow, and convert the result to type T.
+   UT is at least as wide as T and is no narrower than unsigned int,
+   T is two's complement, and there is no padding or trap representations.
+   Assume that converting UT to T yields the low-order bits, as is
+   done in all known two's-complement C compilers.  E.g., see:
+   https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
+
+   According to the C standard, converting UT to T yields an
+   implementation-defined result or signal for values outside T's
+   range.  However, code that works around this theoretical problem
+   runs afoul of a compiler bug in Oracle Studio 12.3 x86.  See:
+   https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html
+   As the compiler bug is real, don't try to work around the
+   theoretical problem.  */
+
+#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \
+  ((t) ((ut) (a) op (ut) (b)))
+
+/* Return true if the numeric values A + B, A - B, A * B fall outside
+   the range TMIN..TMAX.  Arguments should be integer expressions
+   without side effects.  TMIN should be signed and nonpositive.
+   TMAX should be positive, and should be signed unless TMIN is zero.  */
+#define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \
+  ((b) < 0 \
+   ? (((tmin) \
+       ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \
+          && (a) < (tmin) - (b)) \
+       : (a) <= -1 - (b)) \
+      || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \
+   : (a) < 0 \
+   ? (((tmin) \
+       ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \
+          && (b) < (tmin) - (a)) \
+       : (b) <= -1 - (a)) \
+      || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \
+          && (tmax) < (a) + (b))) \
+   : (tmax) < (b) || (tmax) - (b) < (a))
+#define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \
+  (((a) < 0) == ((b) < 0) \
+   ? ((a) < (b) \
+      ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \
+      : (tmax) < (a) - (b)) \
+   : (a) < 0 \
+   ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \
+      || (a) - (tmin) < (b)) \
+   : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
+          && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \
+       && (tmax) <= -1 - (b)) \
+      || (tmax) + (b) < (a)))
+#define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \
+  ((b) < 0 \
+   ? ((a) < 0 \
+      ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
+         ? (a) < (tmax) / (b) \
+         : ((INT_NEGATE_OVERFLOW (b) \
+             ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \
+             : (tmax) / -(b)) \
+            <= -1 - (a))) \
+      : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \
+      ? (EXPR_SIGNED (a) \
+         ? 0 < (a) + (tmin) \
+         : 0 < (a) && -1 - (tmin) < (a) - 1) \
+      : (tmin) / (b) < (a)) \
+   : (b) == 0 \
+   ? 0 \
+   : ((a) < 0 \
+      ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \
+         ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \
+         : (tmin) / (a) < (b)) \
+      : (tmax) / (b) < (a)))
 
 #endif /* _GL_INTPROPS_H */
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
index b9da2b5..49bcbc1 100644
--- a/lib/inttypes.in.h
+++ b/lib/inttypes.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2019 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Derek Price.
    This file is part of gnulib.
 
@@ -13,11 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /*
  * ISO C 99 <inttypes.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html>
  */
 
 #if __GNUC__ >= 3
@@ -49,11 +49,15 @@
 #ifndef __GLIBC__
 # include <stdint.h>
 #endif
-/* Get CHAR_BIT.  */
+/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc.  */
 #include <limits.h>
+/* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <stdio.h>
+#endif
 
-#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>."
+#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1)
+# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>."
 #endif
 
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
@@ -1063,11 +1067,13 @@
 #endif
 
 #if @GNULIB_IMAXDIV@
-# if !@HAVE_DECL_IMAXDIV@
+# if !@HAVE_IMAXDIV_T@
 #  if !GNULIB_defined_imaxdiv_t
 typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
 #   define GNULIB_defined_imaxdiv_t 1
 #  endif
+# endif
+# if !@HAVE_DECL_IMAXDIV@
 extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -1105,12 +1111,22 @@
 #endif
 
 #if @GNULIB_STRTOUMAX@
-# if !@HAVE_DECL_STRTOUMAX@
-#  undef strtoumax
+# if @REPLACE_STRTOUMAX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtoumax
+#   define strtoumax rpl_strtoumax
+#  endif
+_GL_FUNCDECL_RPL (strtoumax, uintmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int));
+# else
+#  if !@HAVE_DECL_STRTOUMAX@
+#   undef strtoumax
 _GL_FUNCDECL_SYS (strtoumax, uintmax_t,
                   (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
+# endif
 _GL_CXXALIASWARN (strtoumax);
 #elif defined GNULIB_POSIXCHECK
 # undef strtoumax
diff --git a/lib/isnan.c b/lib/isnan.c
index a5a7d92..c399c18 100644
--- a/lib/isnan.c
+++ b/lib/isnan.c
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
@@ -79,10 +79,21 @@
   ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
 typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double;
 
+/* Most hosts nowadays use IEEE floating point, so they use IEC 60559
+   representations, have infinities and NaNs, and do not trap on
+   exceptions.  Define IEEE_FLOATING_POINT if this host is one of the
+   typical ones.  The C11 macro __STDC_IEC_559__ is close to what is
+   wanted here, but is not quite right because this file does not require
+   all the features of C11 Annex F (and does not require C11 at all,
+   for that matter).  */
+
+#define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
+                             && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128)
+
 int
 FUNC (DOUBLE x)
 {
-#ifdef KNOWN_EXPBIT0_LOCATION
+#if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT
 # 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,
@@ -153,8 +164,9 @@
   }
 # endif
 #else
-  /* The configuration did not find sufficient information.  Give up about
-     the signaling NaNs, handle only the quiet NaNs.  */
+  /* The configuration did not find sufficient information, or does
+     not use IEEE floating point.  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
diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h
index 56fb270..174c61e 100644
--- a/lib/isnand-nolibm.h
+++ b/lib/isnand-nolibm.h
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if HAVE_ISNAND_IN_LIBC
 /* Get declaration of isnan macro.  */
diff --git a/lib/isnand.c b/lib/isnand.c
index ef815f3..c3cd315 100644
--- a/lib/isnand.c
+++ b/lib/isnand.c
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2008.  */
 
diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h
index 9d550e0..73937a2 100644
--- a/lib/isnanf-nolibm.h
+++ b/lib/isnanf-nolibm.h
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if HAVE_ISNANF_IN_LIBC
 /* Get declaration of isnan macro or (older) isnanf function.  */
diff --git a/lib/isnanf.c b/lib/isnanf.c
index 0816704..8bc58eb 100644
--- a/lib/isnanf.c
+++ b/lib/isnanf.c
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h
index 58d963d..fdedf56 100644
--- a/lib/isnanl-nolibm.h
+++ b/lib/isnanl-nolibm.h
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if HAVE_ISNANL_IN_LIBC
 /* Get declaration of isnan macro or (older) isnanl function.  */
diff --git a/lib/isnanl.c b/lib/isnanl.c
index 597ac2a..99afd29 100644
--- a/lib/isnanl.c
+++ b/lib/isnanl.c
@@ -1,5 +1,5 @@
 /* Test for NaN that does not need libm.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
diff --git a/lib/iswblank.c b/lib/iswblank.c
index f18de99..6d7a6df 100644
--- a/lib/iswblank.c
+++ b/lib/iswblank.c
@@ -1,5 +1,5 @@
 /* Test wide character for being blank.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/itold.c b/lib/itold.c
index 95ff7e1..bca01eb 100644
--- a/lib/itold.c
+++ b/lib/itold.c
@@ -1,5 +1,5 @@
 /* Replacement for 'int' to 'long double' conversion routine.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/lbitset.c b/lib/lbitset.c
deleted file mode 100644
index aa19f45..0000000
--- a/lib/lbitset.c
+++ /dev/null
@@ -1,1401 +0,0 @@
-/* Functions to support link list bitsets.
-
-   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 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   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 "lbitset.h"
-
-#include "obstack.h"
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-/* This file implements linked-list bitsets.  These bitsets can be of
-   arbitrary length and are more efficient than arrays of bits for
-   large sparse sets.
-
-   Usually if all the bits in an element are zero we remove the element
-   from the list.  However, a side effect of the bit caching is that we
-   do not always notice when an element becomes zero.  Hence the
-   lbitset_weed function which removes zero elements.  */
-
-
-/* Number of words to use for each element.  The larger the value the
-   greater the size of the cache and the shorter the time to find a given bit
-   but the more memory wasted for sparse bitsets and the longer the time
-   to search for set bits.
-
-   The routines that dominate timing profiles are lbitset_elt_find
-   and lbitset_elt_link, especially when accessing the bits randomly.  */
-
-#define LBITSET_ELT_WORDS 2
-
-typedef bitset_word lbitset_word;
-
-#define LBITSET_WORD_BITS BITSET_WORD_BITS
-
-/* Number of bits stored in each element.  */
-#define LBITSET_ELT_BITS \
-  ((unsigned int) (LBITSET_ELT_WORDS * LBITSET_WORD_BITS))
-
-/* Lbitset element.   We use an array of bits for each element.
-   These are linked together in a doubly-linked list.  */
-typedef struct lbitset_elt_struct
-{
-  struct lbitset_elt_struct *next;	/* Next element.  */
-  struct lbitset_elt_struct *prev;	/* Previous element.  */
-  bitset_windex index;	/* bitno / BITSET_WORD_BITS.  */
-  bitset_word words[LBITSET_ELT_WORDS];	/* Bits that are set.  */
-}
-lbitset_elt;
-
-
-enum lbitset_find_mode
-  { LBITSET_FIND, LBITSET_CREATE, LBITSET_SUBST };
-
-static lbitset_elt lbitset_zero_elts[3]; /* Elements of all zero bits.  */
-
-/* Obstack to allocate bitset elements from.  */
-static struct obstack lbitset_obstack;
-static bool lbitset_obstack_init = false;
-static lbitset_elt *lbitset_free_list;	/* Free list of bitset elements.  */
-
-extern void debug_lbitset (bitset);
-
-#define LBITSET_CURRENT1(X) \
-  ((lbitset_elt *) (void *) ((char *) (X) - offsetof (lbitset_elt, words)))
-
-#define LBITSET_CURRENT(X) LBITSET_CURRENT1((X)->b.cdata)
-
-#define LBITSET_HEAD(X) ((X)->l.head)
-#define LBITSET_TAIL(X) ((X)->l.tail)
-
-/* Allocate a lbitset element.  The bits are not cleared.  */
-static inline lbitset_elt *
-lbitset_elt_alloc (void)
-{
-  lbitset_elt *elt;
-
-  if (lbitset_free_list != 0)
-    {
-      elt = lbitset_free_list;
-      lbitset_free_list = elt->next;
-    }
-  else
-    {
-      if (!lbitset_obstack_init)
-	{
-	  lbitset_obstack_init = true;
-
-	  /* Let particular systems override the size of a chunk.  */
-
-#ifndef OBSTACK_CHUNK_SIZE
-#define OBSTACK_CHUNK_SIZE 0
-#endif
-
-	  /* Let them override the alloc and free routines too.  */
-
-#ifndef OBSTACK_CHUNK_ALLOC
-#define OBSTACK_CHUNK_ALLOC xmalloc
-#endif
-
-#ifndef OBSTACK_CHUNK_FREE
-#define OBSTACK_CHUNK_FREE free
-#endif
-
-#if ! defined __GNUC__ || __GNUC__ < 2
-#define __alignof__(type) 0
-#endif
-
-	  obstack_specify_allocation (&lbitset_obstack, OBSTACK_CHUNK_SIZE,
-				      __alignof__ (lbitset_elt),
-				      OBSTACK_CHUNK_ALLOC,
-				      OBSTACK_CHUNK_FREE);
-	}
-
-      /* Perhaps we should add a number of new elements to the free
-	 list.  */
-      elt = (lbitset_elt *) obstack_alloc (&lbitset_obstack,
-					   sizeof (lbitset_elt));
-    }
-
-  return elt;
-}
-
-
-/* Allocate a lbitset element.  The bits are cleared.  */
-static inline lbitset_elt *
-lbitset_elt_calloc (void)
-{
-  lbitset_elt *elt;
-
-  elt = lbitset_elt_alloc ();
-  memset (elt->words, 0, sizeof (elt->words));
-  return elt;
-}
-
-
-static inline void
-lbitset_elt_free (lbitset_elt *elt)
-{
-  elt->next = lbitset_free_list;
-  lbitset_free_list = elt;
-}
-
-
-/* Unlink element ELT from bitset BSET.  */
-static inline void
-lbitset_elt_unlink (bitset bset, lbitset_elt *elt)
-{
-  lbitset_elt *next = elt->next;
-  lbitset_elt *prev = elt->prev;
-
-  if (prev)
-    prev->next = next;
-
-  if (next)
-    next->prev = prev;
-
-  if (LBITSET_HEAD (bset) == elt)
-    LBITSET_HEAD (bset) = next;
-  if (LBITSET_TAIL (bset) == elt)
-    LBITSET_TAIL (bset) = prev;
-
-  /* Update cache pointer.  Since the first thing we try is to insert
-     before current, make current the next entry in preference to the
-     previous.  */
-  if (LBITSET_CURRENT (bset) == elt)
-    {
-      if (next)
-	{
-	  bset->b.cdata = next->words;
-	  bset->b.cindex = next->index;
-	}
-      else if (prev)
-	{
-	  bset->b.cdata = prev->words;
-	  bset->b.cindex = prev->index;
-	}
-      else
-	{
-	  bset->b.csize = 0;
-	  bset->b.cdata = 0;
-	}
-    }
-
-  lbitset_elt_free (elt);
-}
-
-
-/* Cut the chain of bitset BSET before element ELT and free the
-   elements.  */
-static inline void
-lbitset_prune (bitset bset, lbitset_elt *elt)
-{
-  lbitset_elt *next;
-
-  if (!elt)
-    return;
-
-  if (elt->prev)
-    {
-      LBITSET_TAIL (bset) = elt->prev;
-      bset->b.cdata = elt->prev->words;
-      bset->b.cindex = elt->prev->index;
-      elt->prev->next = 0;
-    }
-  else
-    {
-      LBITSET_HEAD (bset) = 0;
-      LBITSET_TAIL (bset) = 0;
-      bset->b.cdata = 0;
-      bset->b.csize = 0;
-    }
-
-  for (; elt; elt = next)
-    {
-      next = elt->next;
-      lbitset_elt_free (elt);
-    }
-}
-
-
-/* Are all bits in an element zero?  */
-static inline bool
-lbitset_elt_zero_p (lbitset_elt *elt)
-{
-  int i;
-
-  for (i = 0; i < LBITSET_ELT_WORDS; i++)
-    if (elt->words[i])
-      return false;
-
-  return true;
-}
-
-
-/* Link the bitset element into the current bitset linked list.  */
-static inline void
-lbitset_elt_link (bitset bset, lbitset_elt *elt)
-{
-  bitset_windex windex = elt->index;
-  lbitset_elt *ptr;
-  lbitset_elt *current;
-
-  if (bset->b.csize)
-    current = LBITSET_CURRENT (bset);
-  else
-    current = LBITSET_HEAD (bset);
-
-  /* If this is the first and only element, add it in.  */
-  if (LBITSET_HEAD (bset) == 0)
-    {
-      elt->next = elt->prev = 0;
-      LBITSET_HEAD (bset) = elt;
-      LBITSET_TAIL (bset) = elt;
-    }
-
-  /* If this index is less than that of the current element, it goes
-     somewhere before the current element.  */
-  else if (windex < bset->b.cindex)
-    {
-      for (ptr = current;
-	   ptr->prev && ptr->prev->index > windex; ptr = ptr->prev)
-	continue;
-
-      if (ptr->prev)
-	ptr->prev->next = elt;
-      else
-	LBITSET_HEAD (bset) = elt;
-
-      elt->prev = ptr->prev;
-      elt->next = ptr;
-      ptr->prev = elt;
-    }
-
-  /* Otherwise, it must go somewhere after the current element.  */
-  else
-    {
-      for (ptr = current;
-	   ptr->next && ptr->next->index < windex; ptr = ptr->next)
-	continue;
-
-      if (ptr->next)
-	ptr->next->prev = elt;
-      else
-	LBITSET_TAIL (bset) = elt;
-
-      elt->next = ptr->next;
-      elt->prev = ptr;
-      ptr->next = elt;
-    }
-
-  /* Set up so this is the first element searched.  */
-  bset->b.cindex = windex;
-  bset->b.csize = LBITSET_ELT_WORDS;
-  bset->b.cdata = elt->words;
-}
-
-
-static lbitset_elt *
-lbitset_elt_find (bitset bset, bitset_windex windex,
-		  enum lbitset_find_mode mode)
-{
-  lbitset_elt *elt;
-  lbitset_elt *current;
-
-  if (bset->b.csize)
-    {
-      current = LBITSET_CURRENT (bset);
-      /* Check if element is the cached element.  */
-      if ((windex - bset->b.cindex) < bset->b.csize)
-	return current;
-    }
-  else
-    {
-      current = LBITSET_HEAD (bset);
-    }
-
-  if (current)
-    {
-      if (windex < bset->b.cindex)
-	{
-	  for (elt = current;
-	       elt->prev && elt->index > windex; elt = elt->prev)
-	    continue;
-	}
-      else
-	{
-	  for (elt = current;
-	       elt->next && (elt->index + LBITSET_ELT_WORDS - 1) < windex;
-	       elt = elt->next)
-	    continue;
-	}
-
-      /* 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 (windex - elt->index < LBITSET_ELT_WORDS)
-	{
-	  bset->b.cindex = elt->index;
-	  bset->b.csize = LBITSET_ELT_WORDS;
-	  bset->b.cdata = elt->words;
-	  return elt;
-	}
-    }
-
-  switch (mode)
-    {
-    default:
-      abort ();
-
-    case LBITSET_FIND:
-      return 0;
-
-    case LBITSET_CREATE:
-      windex -= windex % LBITSET_ELT_WORDS;
-
-      elt = lbitset_elt_calloc ();
-      elt->index = windex;
-      lbitset_elt_link (bset, elt);
-      return elt;
-
-    case LBITSET_SUBST:
-      return &lbitset_zero_elts[0];
-    }
-}
-
-
-/* Weed out the zero elements from the list.  */
-static inline void
-lbitset_weed (bitset bset)
-{
-  lbitset_elt *elt;
-  lbitset_elt *next;
-
-  for (elt = LBITSET_HEAD (bset); elt; elt = next)
-    {
-      next = elt->next;
-      if (lbitset_elt_zero_p (elt))
-	lbitset_elt_unlink (bset, elt);
-    }
-}
-
-
-/* Set all bits in the bitset to zero.  */
-static void
-lbitset_zero (bitset bset)
-{
-  lbitset_elt *head;
-
-  head = LBITSET_HEAD (bset);
-  if (!head)
-    return;
-
-  /* Clear a bitset by freeing the linked list at the head element.  */
-  lbitset_prune (bset, head);
-}
-
-
-/* Is DST == SRC?  */
-static inline bool
-lbitset_equal_p (bitset dst, bitset src)
-{
-  lbitset_elt *selt;
-  lbitset_elt *delt;
-  int j;
-
-  if (src == dst)
-    return true;
-
-  lbitset_weed (src);
-  lbitset_weed (dst);
-  for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
-       selt && delt; selt = selt->next, delt = delt->next)
-    {
-      if (selt->index != delt->index)
-	return false;
-
-      for (j = 0; j < LBITSET_ELT_WORDS; j++)
-	if (delt->words[j] != selt->words[j])
-	  return false;
-    }
-  return !selt && !delt;
-}
-
-
-/* Copy bits from bitset SRC to bitset DST.  */
-static inline void
-lbitset_copy (bitset dst, bitset src)
-{
-  lbitset_elt *elt;
-  lbitset_elt *head;
-  lbitset_elt *prev;
-  lbitset_elt *tmp;
-
-  if (src == dst)
-    return;
-
-  lbitset_zero (dst);
-
-  head = LBITSET_HEAD (src);
-  if (!head)
-    return;
-
-  prev = 0;
-  for (elt = head; elt; elt = elt->next)
-    {
-      tmp = lbitset_elt_alloc ();
-      tmp->index = elt->index;
-      tmp->prev = prev;
-      tmp->next = 0;
-      if (prev)
-	prev->next = tmp;
-      else
-	LBITSET_HEAD (dst) = tmp;
-      prev = tmp;
-
-      memcpy (tmp->words, elt->words, sizeof (elt->words));
-    }
-  LBITSET_TAIL (dst) = tmp;
-
-  dst->b.csize = LBITSET_ELT_WORDS;
-  dst->b.cdata = LBITSET_HEAD (dst)->words;
-  dst->b.cindex = LBITSET_HEAD (dst)->index;
-}
-
-
-/* Copy bits from bitset SRC to bitset DST.  Return true if
-   bitsets different.  */
-static inline bool
-lbitset_copy_cmp (bitset dst, bitset src)
-{
-  if (src == dst)
-    return false;
-
-  if (!LBITSET_HEAD (dst))
-    {
-      lbitset_copy (dst, src);
-      return LBITSET_HEAD (src) != 0;
-    }
-
-  if (lbitset_equal_p (dst, src))
-    return false;
-
-  lbitset_copy (dst, src);
-  return true;
-}
-
-
-static bitset_bindex
-lbitset_resize (bitset src, bitset_bindex size)
-{
-    BITSET_NBITS_ (src) = size;
-
-    /* Need to prune any excess bits.  FIXME.  */
-    return size;
-}
-
-/* Set bit BITNO in bitset DST.  */
-static void
-lbitset_set (bitset dst, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  lbitset_elt_find (dst, windex, LBITSET_CREATE);
-
-  dst->b.cdata[windex - dst->b.cindex] |=
-    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
-}
-
-
-/* Reset bit BITNO in bitset DST.  */
-static void
-lbitset_reset (bitset dst, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  if (!lbitset_elt_find (dst, windex, LBITSET_FIND))
-    return;
-
-  dst->b.cdata[windex - dst->b.cindex] &=
-    ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
-
-  /* If all the data is zero, perhaps we should unlink it now...  */
-}
-
-
-/* Test bit BITNO in bitset SRC.  */
-static bool
-lbitset_test (bitset src, bitset_bindex bitno)
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  return (lbitset_elt_find (src, windex, LBITSET_FIND)
-	  && ((src->b.cdata[windex - src->b.cindex]
-	       >> (bitno % BITSET_WORD_BITS))
-	      & 1));
-}
-
-
-static void
-lbitset_free (bitset bset)
-{
-  lbitset_zero (bset);
-}
-
-
-/* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
-static bitset_bindex
-lbitset_list_reverse (bitset bset, bitset_bindex *list,
-		      bitset_bindex num, bitset_bindex *next)
-{
-  bitset_bindex rbitno;
-  bitset_bindex bitno;
-  unsigned int bcount;
-  bitset_bindex boffset;
-  bitset_windex windex;
-  bitset_bindex count;
-  lbitset_elt *elt;
-  bitset_word word;
-  bitset_bindex n_bits;
-
-  elt = LBITSET_TAIL (bset);
-  if (!elt)
-    return 0;
-
-  n_bits = (elt->index + LBITSET_ELT_WORDS) * BITSET_WORD_BITS;
-  rbitno = *next;
-
-  if (rbitno >= n_bits)
-    return 0;
-
-  bitno = n_bits - (rbitno + 1);
-
-  windex = bitno / BITSET_WORD_BITS;
-
-  /* Skip back to starting element.  */
-  for (; elt && elt->index > windex; elt = elt->prev)
-    continue;
-
-  if (!elt)
-    return 0;
-
-  if (windex >= elt->index + LBITSET_ELT_WORDS)
-    {
-      /* We are trying to start in no-mans land so start
-	 at end of current elt.  */
-      bcount = BITSET_WORD_BITS - 1;
-      windex = elt->index + LBITSET_ELT_WORDS - 1;
-    }
-  else
-    {
-      bcount = bitno % BITSET_WORD_BITS;
-    }
-
-  count = 0;
-  boffset = windex * BITSET_WORD_BITS;
-
-  /* If num is 1, we could speed things up with a binary search
-     of the word of interest.  */
-
-  while (elt)
-    {
-      bitset_word *srcp = elt->words;
-
-      for (; (windex - elt->index) < LBITSET_ELT_WORDS;
-	   windex--, boffset -= BITSET_WORD_BITS,
-	     bcount = BITSET_WORD_BITS - 1)
-	{
-	  word =
-	    srcp[windex - elt->index] << (BITSET_WORD_BITS - 1 - bcount);
-
-	  for (; word; bcount--)
-	    {
-	      if (word & BITSET_MSB)
-		{
-		  list[count++] = boffset + bcount;
-		  if (count >= num)
-		    {
-		      *next = n_bits - (boffset + bcount);
-		      return count;
-		    }
-		}
-	      word <<= 1;
-	    }
-	}
-
-      elt = elt->prev;
-      if (elt)
-	{
-	  windex = elt->index + LBITSET_ELT_WORDS - 1;
-	  boffset = windex * BITSET_WORD_BITS;
-	}
-    }
-
-  *next = n_bits - (boffset + 1);
-  return count;
-}
-
-
-/* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
-static bitset_bindex
-lbitset_list (bitset bset, bitset_bindex *list,
-	      bitset_bindex num, bitset_bindex *next)
-{
-  bitset_bindex bitno;
-  bitset_windex windex;
-  bitset_bindex count;
-  lbitset_elt *elt;
-  lbitset_elt *head;
-  bitset_word word;
-
-  head = LBITSET_HEAD (bset);
-  if (!head)
-    return 0;
-
-  bitno = *next;
-  count = 0;
-
-  if (!bitno)
-    {
-      /* This is the most common case.  */
-
-      /* Start with the first element.  */
-      elt = head;
-      windex = elt->index;
-      bitno = windex * BITSET_WORD_BITS;
-    }
-  else
-    {
-      windex = bitno / BITSET_WORD_BITS;
-
-      /* Skip to starting element.  */
-      for (elt = head;
-	   elt && (elt->index + LBITSET_ELT_WORDS - 1) < windex;
-	   elt = elt->next)
-	continue;
-
-      if (!elt)
-	return 0;
-
-      if (windex < elt->index)
-	{
-	  windex = elt->index;
-	  bitno = windex * BITSET_WORD_BITS;
-	}
-      else
-	{
-	  bitset_word *srcp = elt->words;
-
-	  /* We are starting within an element.  */
-
-	  for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
-	    {
-	      word = srcp[windex - elt->index] >> (bitno % BITSET_WORD_BITS);
-
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    {
-		      list[count++] = bitno;
-		      if (count >= num)
-			{
-			  *next = bitno + 1;
-			  return count;
-			}
-		    }
-		  word >>= 1;
-		}
-	      bitno = (windex + 1) * BITSET_WORD_BITS;
-	    }
-
-	  elt = elt->next;
-	  if (elt)
-	    {
-	      windex = elt->index;
-	      bitno = windex * BITSET_WORD_BITS;
-	    }
-	}
-    }
-
-
-  /* If num is 1, we could speed things up with a binary search
-     of the word of interest.  */
-
-  while (elt)
-    {
-      int i;
-      bitset_word *srcp = elt->words;
-
-      if ((count + LBITSET_ELT_BITS) < num)
-	{
-	  /* The coast is clear, plant boot!  */
-
-#if LBITSET_ELT_WORDS == 2
-	  word = srcp[0];
-	  if (word)
-	    {
-	      if (!(word & 0xffff))
-		{
-		  word >>= 16;
-		  bitno += 16;
-		}
-	      if (!(word & 0xff))
-		{
-		  word >>= 8;
-		  bitno += 8;
-		}
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    list[count++] = bitno;
-		  word >>= 1;
-		}
-	    }
-	  windex++;
-	  bitno = windex * BITSET_WORD_BITS;
-
-	  word = srcp[1];
-	  if (word)
-	    {
-	      if (!(word & 0xffff))
-		{
-		  word >>= 16;
-		  bitno += 16;
-		}
-	      for (; word; bitno++)
-		{
-		  if (word & 1)
-		    list[count++] = bitno;
-		  word >>= 1;
-		}
-	    }
-	  windex++;
-	  bitno = windex * BITSET_WORD_BITS;
-#else
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++)
-	    {
-	      word = srcp[i];
-	      if (word)
-		{
-		  if (!(word & 0xffff))
-		    {
-		      word >>= 16;
-		      bitno += 16;
-		    }
-		  if (!(word & 0xff))
-		    {
-		      word >>= 8;
-		      bitno += 8;
-		    }
-		  for (; word; bitno++)
-		    {
-		      if (word & 1)
-			list[count++] = bitno;
-		      word >>= 1;
-		    }
-		}
-	      windex++;
-	      bitno = windex * BITSET_WORD_BITS;
-	    }
-#endif
-	}
-      else
-	{
-	  /* Tread more carefully since we need to check
-	     if array overflows.  */
-
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++)
-	    {
-	      for (word = srcp[i]; word; bitno++)
-		{
-		  if (word & 1)
-		    {
-		      list[count++] = bitno;
-		      if (count >= num)
-			{
-			  *next = bitno + 1;
-			  return count;
-			}
-		    }
-		  word >>= 1;
-		}
-	      windex++;
-	      bitno = windex * BITSET_WORD_BITS;
-	    }
-	}
-
-      elt = elt->next;
-      if (elt)
-	{
-	  windex = elt->index;
-	  bitno = windex * BITSET_WORD_BITS;
-	}
-    }
-
-  *next = bitno;
-  return count;
-}
-
-
-static bool
-lbitset_empty_p (bitset dst)
-{
-  lbitset_elt *elt;
-  lbitset_elt *next;
-
-  for (elt = LBITSET_HEAD (dst); elt; elt = next)
-    {
-      next = elt->next;
-      if (!lbitset_elt_zero_p (elt))
-	return 0;
-      /* Weed as we go.  */
-      lbitset_elt_unlink (dst, elt);
-    }
-
-  return 1;
-}
-
-
-/* Ensure that any unused bits within the last element are clear.  */
-static inline void
-lbitset_unused_clear (bitset dst)
-{
-  unsigned int last_bit;
-  bitset_bindex n_bits;
-
-  n_bits = BITSET_SIZE_ (dst);
-  last_bit = n_bits % LBITSET_ELT_BITS;
-
-  if (last_bit)
-    {
-      lbitset_elt *elt;
-      bitset_windex windex;
-      bitset_word *srcp;
-
-      elt = LBITSET_TAIL (dst);
-      srcp = elt->words;
-      windex = n_bits / BITSET_WORD_BITS;
-
-      srcp[windex - elt->index] &= ((bitset_word) 1 << last_bit) - 1;
-      windex++;
-
-      for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
-	srcp[windex - elt->index] = 0;
-    }
-}
-
-
-static void
-lbitset_ones (bitset dst)
-{
-  bitset_windex i;
-  bitset_windex windex;
-  lbitset_elt *elt;
-
-  /* This is a decidedly unfriendly operation for a linked list
-      bitset!  It makes a sparse bitset become dense.  An alternative
-      is to have a flag that indicates that the bitset stores the
-      complement of what it indicates.  */
-
-  windex = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS;
-
-  for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
-    {
-      /* Create new elements if they cannot be found.  */
-      elt = lbitset_elt_find (dst, i, LBITSET_CREATE);
-      memset (elt->words, -1, sizeof (elt->words));
-    }
-
-  lbitset_unused_clear (dst);
-}
-
-
-static void
-lbitset_not (bitset dst, bitset src)
-{
-  lbitset_elt *selt;
-  lbitset_elt *delt;
-  bitset_windex i;
-  unsigned int j;
-  bitset_windex windex;
-
-  windex = (BITSET_SIZE_ (dst) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS;
-
-  for (i = 0; i < windex; i += LBITSET_ELT_WORDS)
-    {
-      /* Create new elements for dst if they cannot be found
-	 or substitute zero elements if src elements not found.  */
-      selt = lbitset_elt_find (src, i, LBITSET_SUBST);
-      delt = lbitset_elt_find (dst, i, LBITSET_CREATE);
-
-      for (j = 0; j < LBITSET_ELT_WORDS; j++)
-	delt->words[j] = ~selt->words[j];
-    }
-  lbitset_unused_clear (dst);
-  lbitset_weed (dst);
-  return;
-}
-
-
-/* Is DST == DST | SRC?  */
-static bool
-lbitset_subset_p (bitset dst, bitset src)
-{
-  lbitset_elt *selt;
-  lbitset_elt *delt;
-  unsigned int j;
-
-  for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
-       selt || delt; selt = selt->next, delt = delt->next)
-    {
-      if (!selt)
-	selt = &lbitset_zero_elts[0];
-      else if (!delt)
-	delt = &lbitset_zero_elts[0];
-      else if (selt->index != delt->index)
-	{
-	  if (selt->index < delt->index)
-	    {
-	      lbitset_zero_elts[2].next = delt;
-	      delt = &lbitset_zero_elts[2];
-	    }
-	  else
-	    {
-	      lbitset_zero_elts[1].next = selt;
-	      selt = &lbitset_zero_elts[1];
-	    }
-	}
-
-      for (j = 0; j < LBITSET_ELT_WORDS; j++)
-	if (delt->words[j] != (selt->words[j] | delt->words[j]))
-	  return false;
-    }
-  return true;
-}
-
-
-/* Is DST & SRC == 0?  */
-static bool
-lbitset_disjoint_p (bitset dst, bitset src)
-{
-  lbitset_elt *selt;
-  lbitset_elt *delt;
-  unsigned int j;
-
-  for (selt = LBITSET_HEAD (src), delt = LBITSET_HEAD (dst);
-       selt && delt; selt = selt->next, delt = delt->next)
-    {
-      if (selt->index != delt->index)
-	{
-	  if (selt->index < delt->index)
-	    {
-	      lbitset_zero_elts[2].next = delt;
-	      delt = &lbitset_zero_elts[2];
-	    }
-	  else
-	    {
-	      lbitset_zero_elts[1].next = selt;
-	      selt = &lbitset_zero_elts[1];
-	    }
-	  /* Since the elements are different, there is no
-	     intersection of these elements.  */
-	  continue;
-	}
-
-      for (j = 0; j < LBITSET_ELT_WORDS; j++)
-	if (selt->words[j] & delt->words[j])
-	  return false;
-    }
-  return true;
-}
-
-
-static bool
-lbitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op)
-{
-  lbitset_elt *selt1 = LBITSET_HEAD (src1);
-  lbitset_elt *selt2 = LBITSET_HEAD (src2);
-  lbitset_elt *delt = LBITSET_HEAD (dst);
-  bitset_windex windex1;
-  bitset_windex windex2;
-  bitset_windex windex;
-  lbitset_elt *stmp1;
-  lbitset_elt *stmp2;
-  lbitset_elt *dtmp;
-  bitset_word *srcp1;
-  bitset_word *srcp2;
-  bitset_word *dstp;
-  bool changed = false;
-  unsigned int i;
-
-  LBITSET_HEAD (dst) = 0;
-  dst->b.csize = 0;
-
-  windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
-  windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
-
-  while (selt1 || selt2)
-    {
-      /* Figure out whether we need to substitute zero elements for
-	 missing links.  */
-      if (windex1 == windex2)
-	{
-	  windex = windex1;
-	  stmp1 = selt1;
-	  stmp2 = selt2;
-	  selt1 = selt1->next;
-	  windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
-	  selt2 = selt2->next;
-	  windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
-	}
-      else if (windex1 < windex2)
-	{
-	  windex = windex1;
-	  stmp1 = selt1;
-	  stmp2 = &lbitset_zero_elts[0];
-	  selt1 = selt1->next;
-	  windex1 = (selt1) ? selt1->index : BITSET_WINDEX_MAX;
-	}
-      else
-	{
-	  windex = windex2;
-	  stmp1 = &lbitset_zero_elts[0];
-	  stmp2 = selt2;
-	  selt2 = selt2->next;
-	  windex2 = (selt2) ? selt2->index : BITSET_WINDEX_MAX;
-	}
-
-      /* Find the appropriate element from DST.  Begin by discarding
-	 elements that we've skipped.  */
-      while (delt && delt->index < windex)
-	{
-	  changed = true;
-	  dtmp = delt;
-	  delt = delt->next;
-	  lbitset_elt_free (dtmp);
-	}
-      if (delt && delt->index == windex)
-	{
-	  dtmp = delt;
-	  delt = delt->next;
-	}
-      else
-	dtmp = lbitset_elt_calloc ();
-
-      /* Do the operation, and if any bits are set, link it into the
-	 linked list.  */
-      srcp1 = stmp1->words;
-      srcp2 = stmp2->words;
-      dstp = dtmp->words;
-      switch (op)
-	{
-	default:
-	  abort ();
-
-	case BITSET_OP_OR:
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ | *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_AND:
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ & *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_XOR:
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ ^ *srcp2++;
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-
-	case BITSET_OP_ANDN:
-	  for (i = 0; i < LBITSET_ELT_WORDS; i++, dstp++)
-	    {
-	      bitset_word tmp = *srcp1++ & ~(*srcp2++);
-
-	      if (*dstp != tmp)
-		{
-		  changed = true;
-		  *dstp = tmp;
-		}
-	    }
-	  break;
-	}
-
-      if (!lbitset_elt_zero_p (dtmp))
-	{
-	  dtmp->index = windex;
-	  /* Perhaps this could be optimised...  */
-	  lbitset_elt_link (dst, dtmp);
-	}
-      else
-	{
-	  lbitset_elt_free (dtmp);
-	}
-    }
-
-  /* If we have elements of DST left over, free them all.  */
-  if (delt)
-    {
-      changed = true;
-      lbitset_prune (dst, delt);
-    }
-
-  return changed;
-}
-
-
-static bool
-lbitset_and_cmp (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_elt *selt1 = LBITSET_HEAD (src1);
-  lbitset_elt *selt2 = LBITSET_HEAD (src2);
-  bool changed;
-
-  if (!selt2)
-    {
-      lbitset_weed (dst);
-      changed = !LBITSET_HEAD (dst);
-      lbitset_zero (dst);
-      return changed;
-    }
-  else if (!selt1)
-    {
-      lbitset_weed (dst);
-      changed = !LBITSET_HEAD (dst);
-      lbitset_zero (dst);
-      return changed;
-    }
-  return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_AND);
-}
-
-
-static void
-lbitset_and (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_and_cmp (dst, src1, src2);
-}
-
-
-static bool
-lbitset_andn_cmp (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_elt *selt1 = LBITSET_HEAD (src1);
-  lbitset_elt *selt2 = LBITSET_HEAD (src2);
-  bool changed;
-
-  if (!selt2)
-    {
-      return lbitset_copy_cmp (dst, src1);
-    }
-  else if (!selt1)
-    {
-      lbitset_weed (dst);
-      changed = !LBITSET_HEAD (dst);
-      lbitset_zero (dst);
-      return changed;
-    }
-  return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_ANDN);
-}
-
-
-static void
-lbitset_andn (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_andn_cmp (dst, src1, src2);
-}
-
-
-static bool
-lbitset_or_cmp (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_elt *selt1 = LBITSET_HEAD (src1);
-  lbitset_elt *selt2 = LBITSET_HEAD (src2);
-
-  if (!selt2)
-    {
-      return lbitset_copy_cmp (dst, src1);
-    }
-  else if (!selt1)
-    {
-      return lbitset_copy_cmp (dst, src2);
-    }
-  return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_OR);
-}
-
-
-static void
-lbitset_or (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_or_cmp (dst, src1, src2);
-}
-
-
-static bool
-lbitset_xor_cmp (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_elt *selt1 = LBITSET_HEAD (src1);
-  lbitset_elt *selt2 = LBITSET_HEAD (src2);
-
-  if (!selt2)
-    {
-      return lbitset_copy_cmp (dst, src1);
-    }
-  else if (!selt1)
-    {
-      return lbitset_copy_cmp (dst, src2);
-    }
-  return lbitset_op3_cmp (dst, src1, src2, BITSET_OP_XOR);
-}
-
-
-static void
-lbitset_xor (bitset dst, bitset src1, bitset src2)
-{
-  lbitset_xor_cmp (dst, src1, src2);
-}
-
-
-
-/* Vector of operations for linked-list bitsets.  */
-struct bitset_vtable lbitset_vtable = {
-  lbitset_set,
-  lbitset_reset,
-  bitset_toggle_,
-  lbitset_test,
-  lbitset_resize,
-  bitset_size_,
-  bitset_count_,
-  lbitset_empty_p,
-  lbitset_ones,
-  lbitset_zero,
-  lbitset_copy,
-  lbitset_disjoint_p,
-  lbitset_equal_p,
-  lbitset_not,
-  lbitset_subset_p,
-  lbitset_and,
-  lbitset_and_cmp,
-  lbitset_andn,
-  lbitset_andn_cmp,
-  lbitset_or,
-  lbitset_or_cmp,
-  lbitset_xor,
-  lbitset_xor_cmp,
-  bitset_and_or_,
-  bitset_and_or_cmp_,
-  bitset_andn_or_,
-  bitset_andn_or_cmp_,
-  bitset_or_and_,
-  bitset_or_and_cmp_,
-  lbitset_list,
-  lbitset_list_reverse,
-  lbitset_free,
-  BITSET_LIST
-};
-
-
-/* Return size of initial structure.  */
-size_t
-lbitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED)
-{
-  return sizeof (struct lbitset_struct);
-}
-
-
-/* Initialize a bitset.  */
-bitset
-lbitset_init (bitset bset, bitset_bindex n_bits ATTRIBUTE_UNUSED)
-{
-  BITSET_NBITS_ (bset) = n_bits;
-  bset->b.vtable = &lbitset_vtable;
-  return bset;
-}
-
-
-void
-lbitset_release_memory (void)
-{
-  lbitset_free_list = 0;
-  if (lbitset_obstack_init)
-    {
-      lbitset_obstack_init = false;
-      obstack_free (&lbitset_obstack, NULL);
-    }
-}
-
-
-/* Function to be called from debugger to debug lbitset.  */
-void
-debug_lbitset (bitset bset)
-{
-  lbitset_elt *elt;
-  unsigned int i;
-
-  if (!bset)
-    return;
-
-  for (elt = LBITSET_HEAD (bset); elt; elt = elt->next)
-    {
-      fprintf (stderr, "Elt %lu\n", (unsigned long int) elt->index);
-      for (i = 0; i < LBITSET_ELT_WORDS; i++)
-	{
-	  unsigned int j;
-	  bitset_word word;
-
-	  word = elt->words[i];
-
-	  fprintf (stderr, "  Word %u:", i);
-	  for (j = 0; j < LBITSET_WORD_BITS; j++)
-	    if ((word & ((bitset_word) 1 << j)))
-	      fprintf (stderr, " %u", j);
-	  fprintf (stderr, "\n");
-	}
-    }
-}
diff --git a/lib/ldexpl.c b/lib/ldexpl.c
index a6cfff9..05a05ca 100644
--- a/lib/ldexpl.c
+++ b/lib/ldexpl.c
@@ -1,7 +1,7 @@
 /* Emulation for ldexpl.
    Contributed by Paolo Bonzini
 
-   Copyright 2002-2003, 2007-2012 Free Software Foundation, Inc.
+   Copyright 2002-2003, 2007-2019 Free Software Foundation, Inc.
 
    This file is part of gnulib.
 
@@ -16,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/libc-config.h b/lib/libc-config.h
new file mode 100644
index 0000000..57c6966
--- /dev/null
+++ b/lib/libc-config.h
@@ -0,0 +1,174 @@
+/* System definitions for code taken from the GNU C Library
+
+   Copyright 2017-2019 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+/* This is intended to be a good-enough substitute for glibc system
+   macros like those defined in <sys/cdefs.h>, so that Gnulib code
+   shared with glibc can do this as the first #include:
+
+     #ifndef _LIBC
+     # include <libc-config.h>
+     #endif
+
+   When compiled as part of glibc this is a no-op; when compiled as
+   part of Gnulib this includes Gnulib's <config.h> and defines macros
+   that glibc library code would normally assume.  */
+
+#include <config.h>
+
+/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
+   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 it
+   includes <sys/cdefs.h> which defines __nonnull.  Elsewhere it
+   is harmless.  */
+#include <errno.h>
+
+/* From glibc <errno.h>.  */
+#ifndef __set_errno
+# define __set_errno(val) (errno = (val))
+#endif
+
+/* From glibc <features.h>.  */
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_MINOR__
+#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__))
+# else
+#  define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#ifndef __glibc_clang_prereq
+# if defined __clang_major__ && defined __clang_minor__
+#  define __glibc_clang_prereq(maj, min) \
+     ((maj) < __clang_major__ + ((min) <= __clang_minor__))
+# else
+#  define __glibc_clang_prereq(maj, min) 0
+# endif
+#endif
+
+
+/* Prepare to include <cdefs.h>, which is our copy of glibc
+   <sys/cdefs.h>.  */
+
+/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>.  */
+#ifndef _FEATURES_H
+# define _FEATURES_H 1
+#endif
+/* Define __WORDSIZE so that <cdefs.h> does not attempt to include
+   nonexistent files.  Make it a syntax error, since Gnulib does not
+   use __WORDSIZE now, and if Gnulib uses it later the syntax error
+   will let us know that __WORDSIZE needs configuring.  */
+#ifndef __WORDSIZE
+# define __WORDSIZE %%%
+#endif
+/* Undef the macros unconditionally defined by our copy of glibc
+   <sys/cdefs.h>, so that they do not clash with any system-defined
+   versions.  */
+#undef _SYS_CDEFS_H
+#undef __ASMNAME
+#undef __ASMNAME2
+#undef __BEGIN_DECLS
+#undef __CONCAT
+#undef __END_DECLS
+#undef __HAVE_GENERIC_SELECTION
+#undef __LDBL_COMPAT
+#undef __LDBL_REDIR
+#undef __LDBL_REDIR1
+#undef __LDBL_REDIR1_DECL
+#undef __LDBL_REDIR1_NTH
+#undef __LDBL_REDIR_DECL
+#undef __LDBL_REDIR_NTH
+#undef __LEAF
+#undef __LEAF_ATTR
+#undef __NTH
+#undef __NTHNL
+#undef __P
+#undef __PMT
+#undef __REDIRECT
+#undef __REDIRECT_LDBL
+#undef __REDIRECT_NTH
+#undef __REDIRECT_NTHNL
+#undef __REDIRECT_NTH_LDBL
+#undef __STRING
+#undef __THROW
+#undef __THROWNL
+#undef __always_inline
+#undef __attribute__
+#undef __attribute_alloc_size__
+#undef __attribute_artificial__
+#undef __attribute_const__
+#undef __attribute_deprecated__
+#undef __attribute_deprecated_msg__
+#undef __attribute_format_arg__
+#undef __attribute_format_strfmon__
+#undef __attribute_malloc__
+#undef __attribute_noinline__
+#undef __attribute_nonstring__
+#undef __attribute_pure__
+#undef __attribute_used__
+#undef __attribute_warn_unused_result__
+#undef __bos
+#undef __bos0
+#undef __errordecl
+#undef __extension__
+#undef __extern_always_inline
+#undef __extern_inline
+#undef __flexarr
+#undef __fortify_function
+#undef __glibc_c99_flexarr_available
+#undef __glibc_clang_has_extension
+#undef __glibc_likely
+#undef __glibc_macro_warning
+#undef __glibc_macro_warning1
+#undef __glibc_unlikely
+#undef __inline
+#undef __ptr_t
+#undef __restrict
+#undef __restrict_arr
+#undef __va_arg_pack
+#undef __va_arg_pack_len
+#undef __warnattr
+#undef __warndecl
+
+/* Include our copy of glibc <sys/cdefs.h>.  */
+#include <cdefs.h>
+
+/* <cdefs.h> __inline is too pessimistic for non-GCC.  */
+#undef __inline
+#ifndef HAVE___INLINE
+# if 199901 <= __STDC_VERSION__ || defined inline
+#  define __inline inline
+# else
+#  define __inline
+# endif
+#endif
+
+
+/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib.  */
+#define attribute_hidden
+#define libc_hidden_proto(name, ...)
+#define libc_hidden_def(name)
+#define libc_hidden_weak(name)
+#define libc_hidden_ver(local, name)
+#define strong_alias(name, aliasname)
+#define weak_alias(name, aliasname)
+
+/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib.  */
+#define SHLIB_COMPAT(lib, introduced, obsoleted) 0
+#define versioned_symbol(lib, local, symbol, version)
diff --git a/lib/libiberty.h b/lib/libiberty.h
deleted file mode 100644
index ad7b358..0000000
--- a/lib/libiberty.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Fake libiberty.h for Bison.
-
-   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 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-
-/* Bison depends on libiberty's implementation of bitsets, which
-   requires a `libiberty.h' file.  This file provides the minimum
-   services.  */
-
-#ifndef BISON_LIBIBERTY_H_
-# define BISON_LIBIBERTY_H_ 1
-
-# ifndef __attribute__
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#   define __attribute__(x)
-#  endif
-# endif
-
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-
-# include "xalloc.h"
-
-#endif /* ! BISON_LIBIBERTY_H_ */
diff --git a/lib/limits.in.h b/lib/limits.in.h
new file mode 100644
index 0000000..39750b3
--- /dev/null
+++ b/lib/limits.in.h
@@ -0,0 +1,104 @@
+/* A GNU-like <limits.h>.
+
+   Copyright 2016-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_LIMITS_H@
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+#define _@GUARD_PREFIX@_LIMITS_H
+
+#ifndef LLONG_MIN
+# if defined LONG_LONG_MIN /* HP-UX 11.31 */
+#  define LLONG_MIN LONG_LONG_MIN
+# elif defined LONGLONG_MIN /* IRIX 6.5 */
+#  define LLONG_MIN LONGLONG_MIN
+# elif defined __GNUC__
+#  define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL)
+# endif
+#endif
+#ifndef LLONG_MAX
+# if defined LONG_LONG_MAX /* HP-UX 11.31 */
+#  define LLONG_MAX LONG_LONG_MAX
+# elif defined LONGLONG_MAX /* IRIX 6.5 */
+#  define LLONG_MAX LONGLONG_MAX
+# elif defined __GNUC__
+#  define LLONG_MAX __LONG_LONG_MAX__
+# endif
+#endif
+#ifndef ULLONG_MAX
+# if defined ULONG_LONG_MAX /* HP-UX 11.31 */
+#  define ULLONG_MAX ULONG_LONG_MAX
+# elif defined ULONGLONG_MAX /* IRIX 6.5 */
+#  define ULLONG_MAX ULONGLONG_MAX
+# elif defined __GNUC__
+#  define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
+# endif
+#endif
+
+/* The number of usable bits in an unsigned or signed integer type
+   with minimum value MIN and maximum value MAX, as an int expression
+   suitable in #if.  Cover all known practical hosts.  This
+   implementation exploits the fact that MAX is 1 less than a power of
+   2, and merely counts the number of 1 bits in MAX; "COBn" means
+   "count the number of 1 bits in the low-order n bits").  */
+#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max))
+#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n))
+#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n))
+#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n))
+#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n))
+#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n))
+#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1))
+
+#ifndef WORD_BIT
+/* Assume 'int' is 32 bits wide.  */
+# define WORD_BIT 32
+#endif
+#ifndef LONG_BIT
+/* Assume 'long' is 32 or 64 bits wide.  */
+# if LONG_MAX == INT_MAX
+#  define LONG_BIT 32
+# else
+#  define LONG_BIT 64
+# endif
+#endif
+
+/* Macros specified by ISO/IEC TS 18661-1:2014.  */
+
+#if (! defined ULLONG_WIDTH                                             \
+     && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
+# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
+# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
+# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX)
+# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX)
+# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX)
+# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX)
+# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX)
+# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
+# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
+# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
+#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
+
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
diff --git a/lib/local.mk b/lib/local.mk
new file mode 100644
index 0000000..8112080
--- /dev/null
+++ b/lib/local.mk
@@ -0,0 +1,30 @@
+## Copyright (C) 2001-2015, 2018-2019 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 lib/gnulib.mk
+
+# Non-gnulib sources in Bison's internal library.
+lib_libbison_a_SOURCES +=                       \
+  lib/get-errno.h                               \
+  lib/get-errno.c                               \
+  lib/path-join.h                               \
+  lib/path-join.c
+
+# The Yacc compatibility library.
+if ENABLE_YACC
+  lib_LIBRARIES = lib/liby.a
+  EXTRA_LIBRARIES = lib/liby.a
+  lib_liby_a_SOURCES = lib/main.c lib/yyerror.c
+endif
diff --git a/lib/localcharset.c b/lib/localcharset.c
index 8d16c87..479fcb9 100644
--- a/lib/localcharset.c
+++ b/lib/localcharset.c
@@ -1,6 +1,6 @@
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2006, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>.  */
 
@@ -22,7 +22,6 @@
 /* Specification.  */
 #include "localcharset.h"
 
-#include <fcntl.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <string.h>
@@ -32,8 +31,9 @@
 # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
 #endif
 
-#if defined _WIN32 || defined __WIN32__
+#if defined _WIN32 && !defined __CYGWIN__
 # define WINDOWS_NATIVE
+# include <locale.h>
 #endif
 
 #if defined __EMX__
@@ -44,11 +44,10 @@
 #endif
 
 #if !defined WINDOWS_NATIVE
-# include <unistd.h>
 # if HAVE_LANGINFO_CODESET
 #  include <langinfo.h>
 # else
-#  if 0 /* see comment below */
+#  if 0 /* see comment regarding use of setlocale(), below */
 #   include <locale.h>
 #  endif
 # endif
@@ -65,287 +64,755 @@
 # include <os2.h>
 #endif
 
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
+/* For MB_CUR_MAX_L */
+#if defined DARWIN7
+# include <xlocale.h>
 #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 HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
 
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
-  /* Native Windows, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
+/* On these platforms, we use a mapping from non-canonical encoding name
+   to GNU canonical encoding name.  */
 
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
+/* 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.  */
+# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__)
 
-#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)
+struct table_entry
 {
-  const char *cp;
+  const char alias[11+1];
+  const char canonical[11+1];
+};
 
-  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;
+/* Table of platform-dependent mappings, sorted in ascending order.  */
+static const struct table_entry alias_table[] =
+  {
+#  if defined __FreeBSD__                                   /* FreeBSD */
+  /*{ "ARMSCII-8",  "ARMSCII-8" },*/
+    { "Big5",       "BIG5" },
+    { "C",          "ASCII" },
+  /*{ "CP1131",     "CP1131" },*/
+  /*{ "CP1251",     "CP1251" },*/
+  /*{ "CP866",      "CP866" },*/
+  /*{ "GB18030",    "GB18030" },*/
+  /*{ "GB2312",     "GB2312" },*/
+  /*{ "GBK",        "GBK" },*/
+  /*{ "ISCII-DEV",  "?" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+  /*{ "KOI8-R",     "KOI8-R" },*/
+  /*{ "KOI8-U",     "KOI8-U" },*/
+    { "SJIS",       "SHIFT_JIS" },
+    { "US-ASCII",   "ASCII" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" }
+#   define alias_table_defined
+#  endif
+#  if defined __NetBSD__                                    /* NetBSD */
+    { "646",        "ASCII" },
+  /*{ "ARMSCII-8",  "ARMSCII-8" },*/
+  /*{ "BIG5",       "BIG5" },*/
+    { "Big5-HKSCS", "BIG5-HKSCS" },
+  /*{ "CP1251",     "CP1251" },*/
+  /*{ "CP866",      "CP866" },*/
+  /*{ "GB18030",    "GB18030" },*/
+  /*{ "GB2312",     "GB2312" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+  /*{ "KOI8-R",     "KOI8-R" },*/
+  /*{ "KOI8-U",     "KOI8-U" },*/
+  /*{ "PT154",      "PT154" },*/
+    { "SJIS",       "SHIFT_JIS" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  if defined __OpenBSD__                                   /* OpenBSD */
+    { "646",        "ASCII" },
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" }
+#   define alias_table_defined
+#  endif
+#  if defined __APPLE__ && defined __MACH__                 /* Mac OS X */
+    /* 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.
+     */
+    { "ARMSCII-8",  "ARMSCII-8" },
+    { "Big5",       "BIG5" },
+    { "Big5HKSCS",  "BIG5-HKSCS" },
+    { "CP1131",     "CP1131" },
+    { "CP1251",     "CP1251" },
+    { "CP866",      "CP866" },
+    { "CP949",      "CP949" },
+    { "GB18030",    "GB18030" },
+    { "GB2312",     "GB2312" },
+    { "GBK",        "GBK" },
+  /*{ "ISCII-DEV",  "?" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "KOI8-R",     "KOI8-R" },
+    { "KOI8-U",     "KOI8-U" },
+    { "PT154",      "PT154" },
+    { "SJIS",       "SHIFT_JIS" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" }
+#   define alias_table_defined
+#  endif
+#  if defined _AIX                                          /* AIX */
+  /*{ "GBK",        "GBK" },*/
+    { "IBM-1046",   "CP1046" },
+    { "IBM-1124",   "CP1124" },
+    { "IBM-1129",   "CP1129" },
+    { "IBM-1252",   "CP1252" },
+    { "IBM-850",    "CP850" },
+    { "IBM-856",    "CP856" },
+    { "IBM-921",    "ISO-8859-13" },
+    { "IBM-922",    "CP922" },
+    { "IBM-932",    "CP932" },
+    { "IBM-943",    "CP943" },
+    { "IBM-eucCN",  "GB2312" },
+    { "IBM-eucJP",  "EUC-JP" },
+    { "IBM-eucKR",  "EUC-KR" },
+    { "IBM-eucTW",  "EUC-TW" },
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-6",  "ISO-8859-6" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-8",  "ISO-8859-8" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "TIS-620",    "TIS-620" },
+  /*{ "UTF-8",      "UTF-8" },*/
+    { "big5",       "BIG5" }
+#   define alias_table_defined
+#  endif
+#  if defined __hpux                                        /* HP-UX */
+    { "SJIS",      "SHIFT_JIS" },
+    { "arabic8",   "HP-ARABIC8" },
+    { "big5",      "BIG5" },
+    { "cp1251",    "CP1251" },
+    { "eucJP",     "EUC-JP" },
+    { "eucKR",     "EUC-KR" },
+    { "eucTW",     "EUC-TW" },
+    { "gb18030",   "GB18030" },
+    { "greek8",    "HP-GREEK8" },
+    { "hebrew8",   "HP-HEBREW8" },
+    { "hkbig5",    "BIG5-HKSCS" },
+    { "hp15CN",    "GB2312" },
+    { "iso88591",  "ISO-8859-1" },
+    { "iso885913", "ISO-8859-13" },
+    { "iso885915", "ISO-8859-15" },
+    { "iso88592",  "ISO-8859-2" },
+    { "iso88594",  "ISO-8859-4" },
+    { "iso88595",  "ISO-8859-5" },
+    { "iso88596",  "ISO-8859-6" },
+    { "iso88597",  "ISO-8859-7" },
+    { "iso88598",  "ISO-8859-8" },
+    { "iso88599",  "ISO-8859-9" },
+    { "kana8",     "HP-KANA8" },
+    { "koi8r",     "KOI8-R" },
+    { "roman8",    "HP-ROMAN8" },
+    { "tis620",    "TIS-620" },
+    { "turkish8",  "HP-TURKISH8" },
+    { "utf8",      "UTF-8" }
+#   define alias_table_defined
+#  endif
+#  if defined __sgi                                         /* IRIX */
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  if defined __osf__                                       /* OSF/1 */
+  /*{ "GBK",        "GBK" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-8",  "ISO-8859-8" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "KSC5601",    "CP949" },
+    { "SJIS",       "SHIFT_JIS" },
+    { "TACTIS",     "TIS-620" },
+  /*{ "UTF-8",      "UTF-8" },*/
+    { "big5",       "BIG5" },
+    { "cp850",      "CP850" },
+    { "dechanyu",   "DEC-HANYU" },
+    { "dechanzi",   "GB2312" },
+    { "deckanji",   "DEC-KANJI" },
+    { "deckorean",  "EUC-KR" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" },
+    { "sdeckanji",  "EUC-JP" }
+#   define alias_table_defined
+#  endif
+#  if defined __sun                                         /* Solaris */
+    { "5601",        "EUC-KR" },
+    { "646",         "ASCII" },
+  /*{ "BIG5",        "BIG5" },*/
+    { "Big5-HKSCS",  "BIG5-HKSCS" },
+    { "GB18030",     "GB18030" },
+  /*{ "GBK",         "GBK" },*/
+    { "ISO8859-1",   "ISO-8859-1" },
+    { "ISO8859-11",  "TIS-620" },
+    { "ISO8859-13",  "ISO-8859-13" },
+    { "ISO8859-15",  "ISO-8859-15" },
+    { "ISO8859-2",   "ISO-8859-2" },
+    { "ISO8859-3",   "ISO-8859-3" },
+    { "ISO8859-4",   "ISO-8859-4" },
+    { "ISO8859-5",   "ISO-8859-5" },
+    { "ISO8859-6",   "ISO-8859-6" },
+    { "ISO8859-7",   "ISO-8859-7" },
+    { "ISO8859-8",   "ISO-8859-8" },
+    { "ISO8859-9",   "ISO-8859-9" },
+    { "PCK",         "SHIFT_JIS" },
+    { "TIS620.2533", "TIS-620" },
+  /*{ "UTF-8",       "UTF-8" },*/
+    { "ansi-1251",   "CP1251" },
+    { "cns11643",    "EUC-TW" },
+    { "eucJP",       "EUC-JP" },
+    { "gb2312",      "GB2312" },
+    { "koi8-r",      "KOI8-R" }
+#   define alias_table_defined
+#  endif
+#  if defined __minix                                       /* Minix */
+    { "646", "ASCII" }
+#   define alias_table_defined
+#  endif
+#  if defined WINDOWS_NATIVE || defined __CYGWIN__          /* Windows */
+    { "CP1361",  "JOHAB" },
+    { "CP20127", "ASCII" },
+    { "CP20866", "KOI8-R" },
+    { "CP20936", "GB2312" },
+    { "CP21866", "KOI8-RU" },
+    { "CP28591", "ISO-8859-1" },
+    { "CP28592", "ISO-8859-2" },
+    { "CP28593", "ISO-8859-3" },
+    { "CP28594", "ISO-8859-4" },
+    { "CP28595", "ISO-8859-5" },
+    { "CP28596", "ISO-8859-6" },
+    { "CP28597", "ISO-8859-7" },
+    { "CP28598", "ISO-8859-8" },
+    { "CP28599", "ISO-8859-9" },
+    { "CP28605", "ISO-8859-15" },
+    { "CP38598", "ISO-8859-8" },
+    { "CP51932", "EUC-JP" },
+    { "CP51936", "GB2312" },
+    { "CP51949", "EUC-KR" },
+    { "CP51950", "EUC-TW" },
+    { "CP54936", "GB18030" },
+    { "CP65001", "UTF-8" },
+    { "CP936",   "GBK" }
+#   define alias_table_defined
+#  endif
+#  if defined OS2                                           /* OS/2 */
+    /* The list of encodings is taken from "List of OS/2 Codepages"
+       by Alex Taylor:
+       <http://altsan.org/os2/toolkits/uls/index.html#codepages>.
+       See also "__convcp() of kLIBC":
+       <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>.  */
+    { "CP1004",        "CP1252" },
+  /*{ "CP1041",        "CP943" },*/
+  /*{ "CP1088",        "CP949" },*/
+    { "CP1089",        "ISO-8859-6" },
+  /*{ "CP1114",        "CP950" },*/
+  /*{ "CP1115",        "GB2312" },*/
+    { "CP1208",        "UTF-8" },
+  /*{ "CP1380",        "GB2312" },*/
+    { "CP1381",        "GB2312" },
+    { "CP1383",        "GB2312" },
+    { "CP1386",        "GBK" },
+  /*{ "CP301",         "CP943" },*/
+    { "CP3372",        "EUC-JP" },
+    { "CP4946",        "CP850" },
+  /*{ "CP5048",        "JIS_X0208-1990" },*/
+  /*{ "CP5049",        "JIS_X0212-1990" },*/
+  /*{ "CP5067",        "KS_C_5601-1987" },*/
+    { "CP813",         "ISO-8859-7" },
+    { "CP819",         "ISO-8859-1" },
+    { "CP878",         "KOI8-R" },
+  /*{ "CP897",         "CP943" },*/
+    { "CP912",         "ISO-8859-2" },
+    { "CP913",         "ISO-8859-3" },
+    { "CP914",         "ISO-8859-4" },
+    { "CP915",         "ISO-8859-5" },
+    { "CP916",         "ISO-8859-8" },
+    { "CP920",         "ISO-8859-9" },
+    { "CP921",         "ISO-8859-13" },
+    { "CP923",         "ISO-8859-15" },
+  /*{ "CP941",         "CP943" },*/
+  /*{ "CP947",         "CP950" },*/
+  /*{ "CP951",         "CP949" },*/
+  /*{ "CP952",         "JIS_X0208-1990" },*/
+  /*{ "CP953",         "JIS_X0212-1990" },*/
+    { "CP954",         "EUC-JP" },
+    { "CP964",         "EUC-TW" },
+    { "CP970",         "EUC-KR" },
+  /*{ "CP971",         "KS_C_5601-1987" },*/
+    { "IBM-1004",      "CP1252" },
+  /*{ "IBM-1006",      "?" },*/
+  /*{ "IBM-1008",      "?" },*/
+  /*{ "IBM-1041",      "CP943" },*/
+  /*{ "IBM-1051",      "?" },*/
+  /*{ "IBM-1088",      "CP949" },*/
+    { "IBM-1089",      "ISO-8859-6" },
+  /*{ "IBM-1098",      "?" },*/
+  /*{ "IBM-1114",      "CP950" },*/
+  /*{ "IBM-1115",      "GB2312" },*/
+  /*{ "IBM-1116",      "?" },*/
+  /*{ "IBM-1117",      "?" },*/
+  /*{ "IBM-1118",      "?" },*/
+  /*{ "IBM-1119",      "?" },*/
+    { "IBM-1124",      "CP1124" },
+    { "IBM-1125",      "CP1125" },
+    { "IBM-1131",      "CP1131" },
+    { "IBM-1208",      "UTF-8" },
+    { "IBM-1250",      "CP1250" },
+    { "IBM-1251",      "CP1251" },
+    { "IBM-1252",      "CP1252" },
+    { "IBM-1253",      "CP1253" },
+    { "IBM-1254",      "CP1254" },
+    { "IBM-1255",      "CP1255" },
+    { "IBM-1256",      "CP1256" },
+    { "IBM-1257",      "CP1257" },
+  /*{ "IBM-1275",      "?" },*/
+  /*{ "IBM-1276",      "?" },*/
+  /*{ "IBM-1277",      "?" },*/
+  /*{ "IBM-1280",      "?" },*/
+  /*{ "IBM-1281",      "?" },*/
+  /*{ "IBM-1282",      "?" },*/
+  /*{ "IBM-1283",      "?" },*/
+  /*{ "IBM-1380",      "GB2312" },*/
+    { "IBM-1381",      "GB2312" },
+    { "IBM-1383",      "GB2312" },
+    { "IBM-1386",      "GBK" },
+  /*{ "IBM-301",       "CP943" },*/
+    { "IBM-3372",      "EUC-JP" },
+    { "IBM-367",       "ASCII" },
+    { "IBM-437",       "CP437" },
+    { "IBM-4946",      "CP850" },
+  /*{ "IBM-5048",      "JIS_X0208-1990" },*/
+  /*{ "IBM-5049",      "JIS_X0212-1990" },*/
+  /*{ "IBM-5067",      "KS_C_5601-1987" },*/
+    { "IBM-813",       "ISO-8859-7" },
+    { "IBM-819",       "ISO-8859-1" },
+    { "IBM-850",       "CP850" },
+  /*{ "IBM-851",       "?" },*/
+    { "IBM-852",       "CP852" },
+    { "IBM-855",       "CP855" },
+    { "IBM-856",       "CP856" },
+    { "IBM-857",       "CP857" },
+  /*{ "IBM-859",       "?" },*/
+    { "IBM-860",       "CP860" },
+    { "IBM-861",       "CP861" },
+    { "IBM-862",       "CP862" },
+    { "IBM-863",       "CP863" },
+    { "IBM-864",       "CP864" },
+    { "IBM-865",       "CP865" },
+    { "IBM-866",       "CP866" },
+  /*{ "IBM-868",       "?" },*/
+    { "IBM-869",       "CP869" },
+    { "IBM-874",       "CP874" },
+    { "IBM-878",       "KOI8-R" },
+  /*{ "IBM-895",       "?" },*/
+  /*{ "IBM-897",       "CP943" },*/
+  /*{ "IBM-907",       "?" },*/
+  /*{ "IBM-909",       "?" },*/
+    { "IBM-912",       "ISO-8859-2" },
+    { "IBM-913",       "ISO-8859-3" },
+    { "IBM-914",       "ISO-8859-4" },
+    { "IBM-915",       "ISO-8859-5" },
+    { "IBM-916",       "ISO-8859-8" },
+    { "IBM-920",       "ISO-8859-9" },
+    { "IBM-921",       "ISO-8859-13" },
+    { "IBM-922",       "CP922" },
+    { "IBM-923",       "ISO-8859-15" },
+    { "IBM-932",       "CP932" },
+  /*{ "IBM-941",       "CP943" },*/
+  /*{ "IBM-942",       "?" },*/
+    { "IBM-943",       "CP943" },
+  /*{ "IBM-947",       "CP950" },*/
+    { "IBM-949",       "CP949" },
+    { "IBM-950",       "CP950" },
+  /*{ "IBM-951",       "CP949" },*/
+  /*{ "IBM-952",       "JIS_X0208-1990" },*/
+  /*{ "IBM-953",       "JIS_X0212-1990" },*/
+    { "IBM-954",       "EUC-JP" },
+  /*{ "IBM-955",       "?" },*/
+    { "IBM-964",       "EUC-TW" },
+    { "IBM-970",       "EUC-KR" },
+  /*{ "IBM-971",       "KS_C_5601-1987" },*/
+    { "IBM-eucCN",     "GB2312" },
+    { "IBM-eucJP",     "EUC-JP" },
+    { "IBM-eucKR",     "EUC-KR" },
+    { "IBM-eucTW",     "EUC-TW" },
+    { "IBM33722",      "EUC-JP" },
+    { "ISO8859-1",     "ISO-8859-1" },
+    { "ISO8859-2",     "ISO-8859-2" },
+    { "ISO8859-3",     "ISO-8859-3" },
+    { "ISO8859-4",     "ISO-8859-4" },
+    { "ISO8859-5",     "ISO-8859-5" },
+    { "ISO8859-6",     "ISO-8859-6" },
+    { "ISO8859-7",     "ISO-8859-7" },
+    { "ISO8859-8",     "ISO-8859-8" },
+    { "ISO8859-9",     "ISO-8859-9" },
+  /*{ "JISX0201-1976", "JISX0201-1976" },*/
+  /*{ "JISX0208-1978", "?" },*/
+  /*{ "JISX0208-1983", "JIS_X0208-1983" },*/
+  /*{ "JISX0208-1990", "JIS_X0208-1990" },*/
+  /*{ "JISX0212-1990", "JIS_X0212-1990" },*/
+  /*{ "KSC5601-1987",  "KS_C_5601-1987" },*/
+    { "SJIS-1",        "CP943" },
+    { "SJIS-2",        "CP943" },
+    { "eucJP",         "EUC-JP" },
+    { "eucKR",         "EUC-KR" },
+    { "eucTW-1993",    "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  if defined VMS                                           /* OpenVMS */
+    /* 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".  */
+    { "DECHANYU",  "DEC-HANYU" },
+    { "DECHANZI",  "GB2312" },
+    { "DECKANJI",  "DEC-KANJI" },
+    { "DECKOREAN", "EUC-KR" },
+    { "ISO8859-1", "ISO-8859-1" },
+    { "ISO8859-2", "ISO-8859-2" },
+    { "ISO8859-5", "ISO-8859-5" },
+    { "ISO8859-7", "ISO-8859-7" },
+    { "ISO8859-8", "ISO-8859-8" },
+    { "ISO8859-9", "ISO-8859-9" },
+    { "SDECKANJI", "EUC-JP" },
+    { "SJIS",      "SHIFT_JIS" },
+    { "eucJP",     "EUC-JP" },
+    { "eucTW",     "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  ifndef alias_table_defined
+    /* Just a dummy entry, to avoid a C syntax error.  */
+    { "", "" }
+#  endif
+  };
 
-      /* 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);
-        }
+# endif
 
 #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
+/* On these platforms, we use a mapping from locale name to GNU canonical
+   encoding name.  */
 
-# 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
+struct table_entry
+{
+  const char locale[17+1];
+  const char canonical[11+1];
+};
 
-# 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";
+/* Table of platform-dependent mappings, sorted in ascending order.  */
+static const struct table_entry locale_table[] =
+  {
+# if defined __FreeBSD__                                    /* FreeBSD 4.2 */
+    { "cs_CZ.ISO_8859-2",  "ISO-8859-2" },
+    { "da_DK.DIS_8859-15", "ISO-8859-15" },
+    { "da_DK.ISO_8859-1",  "ISO-8859-1" },
+    { "de_AT.DIS_8859-15", "ISO-8859-15" },
+    { "de_AT.ISO_8859-1",  "ISO-8859-1" },
+    { "de_CH.DIS_8859-15", "ISO-8859-15" },
+    { "de_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "de_DE.DIS_8859-15", "ISO-8859-15" },
+    { "de_DE.ISO_8859-1",  "ISO-8859-1" },
+    { "en_AU.DIS_8859-15", "ISO-8859-15" },
+    { "en_AU.ISO_8859-1",  "ISO-8859-1" },
+    { "en_CA.DIS_8859-15", "ISO-8859-15" },
+    { "en_CA.ISO_8859-1",  "ISO-8859-1" },
+    { "en_GB.DIS_8859-15", "ISO-8859-15" },
+    { "en_GB.ISO_8859-1",  "ISO-8859-1" },
+    { "en_US.DIS_8859-15", "ISO-8859-15" },
+    { "en_US.ISO_8859-1",  "ISO-8859-1" },
+    { "es_ES.DIS_8859-15", "ISO-8859-15" },
+    { "es_ES.ISO_8859-1",  "ISO-8859-1" },
+    { "fi_FI.DIS_8859-15", "ISO-8859-15" },
+    { "fi_FI.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_BE.DIS_8859-15", "ISO-8859-15" },
+    { "fr_BE.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_CA.DIS_8859-15", "ISO-8859-15" },
+    { "fr_CA.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_CH.DIS_8859-15", "ISO-8859-15" },
+    { "fr_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_FR.DIS_8859-15", "ISO-8859-15" },
+    { "fr_FR.ISO_8859-1",  "ISO-8859-1" },
+    { "hr_HR.ISO_8859-2",  "ISO-8859-2" },
+    { "hu_HU.ISO_8859-2",  "ISO-8859-2" },
+    { "is_IS.DIS_8859-15", "ISO-8859-15" },
+    { "is_IS.ISO_8859-1",  "ISO-8859-1" },
+    { "it_CH.DIS_8859-15", "ISO-8859-15" },
+    { "it_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "it_IT.DIS_8859-15", "ISO-8859-15" },
+    { "it_IT.ISO_8859-1",  "ISO-8859-1" },
+    { "ja_JP.EUC",         "EUC-JP" },
+    { "ja_JP.SJIS",        "SHIFT_JIS" },
+    { "ja_JP.Shift_JIS",   "SHIFT_JIS" },
+    { "ko_KR.EUC",         "EUC-KR" },
+    { "la_LN.ASCII",       "ASCII" },
+    { "la_LN.DIS_8859-15", "ISO-8859-15" },
+    { "la_LN.ISO_8859-1",  "ISO-8859-1" },
+    { "la_LN.ISO_8859-2",  "ISO-8859-2" },
+    { "la_LN.ISO_8859-4",  "ISO-8859-4" },
+    { "lt_LN.ASCII",       "ASCII" },
+    { "lt_LN.DIS_8859-15", "ISO-8859-15" },
+    { "lt_LN.ISO_8859-1",  "ISO-8859-1" },
+    { "lt_LN.ISO_8859-2",  "ISO-8859-2" },
+    { "lt_LT.ISO_8859-4",  "ISO-8859-4" },
+    { "nl_BE.DIS_8859-15", "ISO-8859-15" },
+    { "nl_BE.ISO_8859-1",  "ISO-8859-1" },
+    { "nl_NL.DIS_8859-15", "ISO-8859-15" },
+    { "nl_NL.ISO_8859-1",  "ISO-8859-1" },
+    { "no_NO.DIS_8859-15", "ISO-8859-15" },
+    { "no_NO.ISO_8859-1",  "ISO-8859-1" },
+    { "pl_PL.ISO_8859-2",  "ISO-8859-2" },
+    { "pt_PT.DIS_8859-15", "ISO-8859-15" },
+    { "pt_PT.ISO_8859-1",  "ISO-8859-1" },
+    { "ru_RU.CP866",       "CP866" },
+    { "ru_RU.ISO_8859-5",  "ISO-8859-5" },
+    { "ru_RU.KOI8-R",      "KOI8-R" },
+    { "ru_SU.CP866",       "CP866" },
+    { "ru_SU.ISO_8859-5",  "ISO-8859-5" },
+    { "ru_SU.KOI8-R",      "KOI8-R" },
+    { "sl_SI.ISO_8859-2",  "ISO-8859-2" },
+    { "sv_SE.DIS_8859-15", "ISO-8859-15" },
+    { "sv_SE.ISO_8859-1",  "ISO-8859-1" },
+    { "uk_UA.KOI8-U",      "KOI8-U" },
+    { "zh_CN.EUC",         "GB2312" },
+    { "zh_TW.BIG5",        "BIG5" },
+    { "zh_TW.Big5",        "BIG5" }
+#  define locale_table_defined
 # endif
+# if defined __DJGPP__                                      /* DOS / DJGPP 2.03 */
+    /* The encodings given here may not all be correct.
+       If you find that the encoding given for your language and
+       country is not the one your DOS machine actually uses, just
+       correct it in this file, and send a mail to
+       Juan Manuel Guerrero <juan.guerrero@gmx.de>
+       and <bug-gnulib@gnu.org>.  */
+    { "C",     "ASCII" },
+    { "ar",    "CP864" },
+    { "ar_AE", "CP864" },
+    { "ar_DZ", "CP864" },
+    { "ar_EG", "CP864" },
+    { "ar_IQ", "CP864" },
+    { "ar_IR", "CP864" },
+    { "ar_JO", "CP864" },
+    { "ar_KW", "CP864" },
+    { "ar_MA", "CP864" },
+    { "ar_OM", "CP864" },
+    { "ar_QA", "CP864" },
+    { "ar_SA", "CP864" },
+    { "ar_SY", "CP864" },
+    { "be",    "CP866" },
+    { "be_BE", "CP866" },
+    { "bg",    "CP866" }, /* not CP855 ?? */
+    { "bg_BG", "CP866" }, /* not CP855 ?? */
+    { "ca",    "CP850" },
+    { "ca_ES", "CP850" },
+    { "cs",    "CP852" },
+    { "cs_CZ", "CP852" },
+    { "da",    "CP865" }, /* not CP850 ?? */
+    { "da_DK", "CP865" }, /* not CP850 ?? */
+    { "de",    "CP850" },
+    { "de_AT", "CP850" },
+    { "de_CH", "CP850" },
+    { "de_DE", "CP850" },
+    { "el",    "CP869" },
+    { "el_GR", "CP869" },
+    { "en",    "CP850" },
+    { "en_AU", "CP850" }, /* not CP437 ?? */
+    { "en_CA", "CP850" },
+    { "en_GB", "CP850" },
+    { "en_NZ", "CP437" },
+    { "en_US", "CP437" },
+    { "en_ZA", "CP850" }, /* not CP437 ?? */
+    { "eo",    "CP850" },
+    { "eo_EO", "CP850" },
+    { "es",    "CP850" },
+    { "es_AR", "CP850" },
+    { "es_BO", "CP850" },
+    { "es_CL", "CP850" },
+    { "es_CO", "CP850" },
+    { "es_CR", "CP850" },
+    { "es_CU", "CP850" },
+    { "es_DO", "CP850" },
+    { "es_EC", "CP850" },
+    { "es_ES", "CP850" },
+    { "es_GT", "CP850" },
+    { "es_HN", "CP850" },
+    { "es_MX", "CP850" },
+    { "es_NI", "CP850" },
+    { "es_PA", "CP850" },
+    { "es_PE", "CP850" },
+    { "es_PY", "CP850" },
+    { "es_SV", "CP850" },
+    { "es_UY", "CP850" },
+    { "es_VE", "CP850" },
+    { "et",    "CP850" },
+    { "et_EE", "CP850" },
+    { "eu",    "CP850" },
+    { "eu_ES", "CP850" },
+    { "fi",    "CP850" },
+    { "fi_FI", "CP850" },
+    { "fr",    "CP850" },
+    { "fr_BE", "CP850" },
+    { "fr_CA", "CP850" },
+    { "fr_CH", "CP850" },
+    { "fr_FR", "CP850" },
+    { "ga",    "CP850" },
+    { "ga_IE", "CP850" },
+    { "gd",    "CP850" },
+    { "gd_GB", "CP850" },
+    { "gl",    "CP850" },
+    { "gl_ES", "CP850" },
+    { "he",    "CP862" },
+    { "he_IL", "CP862" },
+    { "hr",    "CP852" },
+    { "hr_HR", "CP852" },
+    { "hu",    "CP852" },
+    { "hu_HU", "CP852" },
+    { "id",    "CP850" }, /* not CP437 ?? */
+    { "id_ID", "CP850" }, /* not CP437 ?? */
+    { "is",    "CP861" }, /* not CP850 ?? */
+    { "is_IS", "CP861" }, /* not CP850 ?? */
+    { "it",    "CP850" },
+    { "it_CH", "CP850" },
+    { "it_IT", "CP850" },
+    { "ja",    "CP932" },
+    { "ja_JP", "CP932" },
+    { "kr",    "CP949" }, /* not CP934 ?? */
+    { "kr_KR", "CP949" }, /* not CP934 ?? */
+    { "lt",    "CP775" },
+    { "lt_LT", "CP775" },
+    { "lv",    "CP775" },
+    { "lv_LV", "CP775" },
+    { "mk",    "CP866" }, /* not CP855 ?? */
+    { "mk_MK", "CP866" }, /* not CP855 ?? */
+    { "mt",    "CP850" },
+    { "mt_MT", "CP850" },
+    { "nb",    "CP865" }, /* not CP850 ?? */
+    { "nb_NO", "CP865" }, /* not CP850 ?? */
+    { "nl",    "CP850" },
+    { "nl_BE", "CP850" },
+    { "nl_NL", "CP850" },
+    { "nn",    "CP865" }, /* not CP850 ?? */
+    { "nn_NO", "CP865" }, /* not CP850 ?? */
+    { "no",    "CP865" }, /* not CP850 ?? */
+    { "no_NO", "CP865" }, /* not CP850 ?? */
+    { "pl",    "CP852" },
+    { "pl_PL", "CP852" },
+    { "pt",    "CP850" },
+    { "pt_BR", "CP850" },
+    { "pt_PT", "CP850" },
+    { "ro",    "CP852" },
+    { "ro_RO", "CP852" },
+    { "ru",    "CP866" },
+    { "ru_RU", "CP866" },
+    { "sk",    "CP852" },
+    { "sk_SK", "CP852" },
+    { "sl",    "CP852" },
+    { "sl_SI", "CP852" },
+    { "sq",    "CP852" },
+    { "sq_AL", "CP852" },
+    { "sr",    "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sv",    "CP850" },
+    { "sv_SE", "CP850" },
+    { "th",    "CP874" },
+    { "th_TH", "CP874" },
+    { "tr",    "CP857" },
+    { "tr_TR", "CP857" },
+    { "uk",    "CP1125" },
+    { "uk_UA", "CP1125" },
+    { "zh_CN", "GBK" },
+    { "zh_TW", "CP950" } /* not CP938 ?? */
+#  define locale_table_defined
+# endif
+# ifndef locale_table_defined
+    /* Just a dummy entry, to avoid a C syntax error.  */
+    { "", "" }
+# 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.
+   into one of the canonical names listed in localcharset.h.
    The result must not be freed; it is statically allocated.
    If the canonical name cannot be determined, the result is a non-canonical
    name.  */
@@ -357,9 +824,8 @@
 locale_charset (void)
 {
   const char *codeset;
-  const char *aliases;
 
-#if !(defined WINDOWS_NATIVE || defined OS2)
+#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
 
 # if HAVE_LANGINFO_CODESET
 
@@ -422,57 +888,58 @@
     }
 #  endif
 
-# else
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
 
-  /* 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
+# 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;
+  /* The Windows API has a function returning the locale's codepage as
+     a number, but the value doesn't change according to what the
+     'setlocale' call specified.  So we use it as a last resort, in
+     case the string returned by 'setlocale' doesn't specify the
+     codepage.  */
+  char *current_locale = setlocale (LC_ALL, NULL);
+  char *pdot;
 
-#elif defined OS2
+  /* If they set different locales for different categories,
+     'setlocale' will return a semi-colon separated list of locale
+     values.  To make sure we use the correct one, we choose LC_CTYPE.  */
+  if (strchr (current_locale, ';'))
+    current_locale = setlocale (LC_CTYPE, NULL);
+
+  pdot = strrchr (current_locale, '.');
+  if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf))
+    sprintf (buf, "CP%s", pdot + 1);
+  else
+    {
+      /* 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 ());
+    }
+  /* For a locale name such as "French_France.65001", in Windows 10,
+     setlocale now returns "French_France.utf8" instead.  */
+  if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0)
+    codeset = "UTF-8";
+  else
+    codeset = buf;
+
+# elif defined OS2
 
   const char *locale;
   static char buf[2 + 10 + 1];
   ULONG cp[3];
   ULONG cplen;
 
+  codeset = NULL;
+
   /* Allow user to override the codeset, as set in the operating system,
      with standard language environment variables.  */
   locale = getenv ("LC_ALL");
@@ -504,10 +971,12 @@
             }
         }
 
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
+      /* For the POSIX locale, don't use the system's codepage.  */
+      if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
+        codeset = "";
     }
-  else
+
+  if (codeset == NULL)
     {
       /* OS/2 has a function returning the locale's codepage as a number.  */
       if (DosQueryCp (sizeof (cp), cp, &cplen))
@@ -519,33 +988,149 @@
         }
     }
 
-#endif
+# else
 
-  if (codeset == NULL)
-    /* The canonical name cannot be determined.  */
-    codeset = "";
+#  error "Add code for other platforms here."
 
-  /* 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'))
+# endif
+
+  /* Resolve alias.  */
+  {
+# ifdef alias_table_defined
+    /* On some platforms, UTF-8 locales are the most frequently used ones.
+       Speed up the common case and slow down the less common cases by
+       testing for this case first.  */
+#  if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__
+    if (strcmp (codeset, "UTF-8") == 0)
+      goto done_table_lookup;
+    else
+#  endif
       {
-        codeset = aliases + strlen (aliases) + 1;
-        break;
+        const struct table_entry * const table = alias_table;
+        size_t const table_size =
+          sizeof (alias_table) / sizeof (struct table_entry);
+        /* The table is sorted.  Perform a binary search.  */
+        size_t hi = table_size;
+        size_t lo = 0;
+        while (lo < hi)
+          {
+            /* Invariant:
+               for i < lo, strcmp (table[i].alias, codeset) < 0,
+               for i >= hi, strcmp (table[i].alias, codeset) > 0.  */
+            size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+            int cmp = strcmp (table[mid].alias, codeset);
+            if (cmp < 0)
+              lo = mid + 1;
+            else if (cmp > 0)
+              hi = mid;
+            else
+              {
+                /* Found an i with
+                     strcmp (table[i].alias, codeset) == 0.  */
+                codeset = table[mid].canonical;
+                goto done_table_lookup;
+              }
+          }
       }
+    if (0)
+      done_table_lookup: ;
+    else
+# endif
+      {
+        /* Did not find it in the table.  */
+        /* On Mac OS X, all modern locales use the UTF-8 encoding.
+           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+        codeset = "UTF-8";
+# else
+        /* 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";
+# endif
+      }
+  }
 
-  /* 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";
+#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 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");
+            if (locale == NULL)
+              locale = "";
+        }
+    }
+
+  /* Map locale name to canonical encoding name.  */
+  {
+# ifdef locale_table_defined
+    const struct table_entry * const table = locale_table;
+    size_t const table_size =
+      sizeof (locale_table) / sizeof (struct table_entry);
+    /* The table is sorted.  Perform a binary search.  */
+    size_t hi = table_size;
+    size_t lo = 0;
+    while (lo < hi)
+      {
+        /* Invariant:
+           for i < lo, strcmp (table[i].locale, locale) < 0,
+           for i >= hi, strcmp (table[i].locale, locale) > 0.  */
+        size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+        int cmp = strcmp (table[mid].locale, locale);
+        if (cmp < 0)
+          lo = mid + 1;
+        else if (cmp > 0)
+          hi = mid;
+        else
+          {
+            /* Found an i with
+                 strcmp (table[i].locale, locale) == 0.  */
+            codeset = table[mid].canonical;
+            goto done_table_lookup;
+          }
+      }
+    if (0)
+      done_table_lookup: ;
+    else
+# endif
+      {
+        /* Did not find it in the table.  */
+        /* On Mac OS X, all modern locales use the UTF-8 encoding.
+           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+        codeset = "UTF-8";
+# else
+        /* The canonical name cannot be determined.  */
+        /* 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.  */
+        codeset = "ASCII";
+# endif
+      }
+  }
+
+#endif
 
 #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)
+  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
     codeset = "ASCII";
 #endif
 
diff --git a/lib/localcharset.h b/lib/localcharset.h
index 39dc593..7d0d771 100644
--- a/lib/localcharset.h
+++ b/lib/localcharset.h
@@ -1,5 +1,5 @@
 /* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _LOCALCHARSET_H
 #define _LOCALCHARSET_H
@@ -25,12 +25,106 @@
 
 
 /* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
+   into one of the canonical names listed below.
    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);
 
+/* About GNU canonical names for character encodings:
+
+   Every canonical name must be supported by GNU libiconv.  Support by GNU libc
+   is also desirable.
+
+   The name is case insensitive.  Usually an upper case MIME charset name is
+   preferred.
+
+   The current list of these GNU canonical names is:
+
+       name              MIME?             used by which systems
+                                    (darwin = Mac OS X, windows = native Windows)
+
+   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin minix 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   hpux 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 freebsd netbsd openbsd darwin cygwin
+   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
+   ISO-8859-9              Y   glibc aix hpux irix osf solaris freebsd darwin cygwin
+   ISO-8859-13                 glibc hpux solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-14                 glibc cygwin
+   ISO-8859-15                 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin
+   KOI8-R                  Y   glibc hpux 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                       windows dos
+   CP922                       aix
+   CP932                       aix cygwin windows dos
+   CP943                       aix
+   CP949                       osf darwin windows dos
+   CP950                       windows dos
+   CP1046                      aix
+   CP1124                      aix
+   CP1125                      dos
+   CP1129                      aix
+   CP1131                      freebsd darwin
+   CP1250                      windows
+   CP1251                      glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows
+   CP1252                      aix windows
+   CP1253                      windows
+   CP1254                      windows
+   CP1255                      glibc windows
+   CP1256                      windows
+   CP1257                      windows
+   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin cygwin
+   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+   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 hpux solaris netbsd darwin
+   GBK                         glibc aix osf solaris freebsd darwin cygwin windows dos
+   GB18030                     glibc hpux solaris freebsd netbsd darwin
+   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+   JOHAB                       glibc solaris windows
+   TIS-620                     glibc aix hpux osf solaris cygwin
+   VISCII                  Y   glibc
+   TCVN5712-1                  glibc
+   ARMSCII-8                   glibc freebsd netbsd darwin
+   GEORGIAN-PS                 glibc cygwin
+   PT154                       glibc netbsd cygwin
+   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.
+ */
+
 
 #ifdef __cplusplus
 }
diff --git a/lib/localtime-buffer.c b/lib/localtime-buffer.c
new file mode 100644
index 0000000..b65ea45
--- /dev/null
+++ b/lib/localtime-buffer.c
@@ -0,0 +1,60 @@
+/* Provide access to the last buffer returned by localtime() or gmtime().
+
+   Copyright (C) 2001-2003, 2005-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localtime-buffer.h"
+
+#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
+
+static struct tm tm_zero_buffer;
+struct tm *localtime_buffer_addr = &tm_zero_buffer;
+
+/* This is a wrapper for localtime.
+
+   On the first call, record the address of the static buffer that
+   localtime uses for its result.  */
+
+struct tm *
+rpl_localtime (time_t const *timep)
+#undef localtime
+{
+  struct tm *tm = localtime (timep);
+
+  if (localtime_buffer_addr == &tm_zero_buffer)
+    localtime_buffer_addr = tm;
+
+  return tm;
+}
+
+/* Same as above, since gmtime and localtime use the same buffer.  */
+struct tm *
+rpl_gmtime (time_t const *timep)
+#undef gmtime
+{
+  struct tm *tm = gmtime (timep);
+
+  if (localtime_buffer_addr == &tm_zero_buffer)
+    localtime_buffer_addr = tm;
+
+  return tm;
+}
+
+#endif
diff --git a/lib/localtime-buffer.h b/lib/localtime-buffer.h
new file mode 100644
index 0000000..031111a
--- /dev/null
+++ b/lib/localtime-buffer.h
@@ -0,0 +1,27 @@
+/* Provide access to the last buffer returned by localtime() or gmtime().
+
+   Copyright (C) 2001-2003, 2005-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering */
+
+#include <time.h>
+
+#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
+
+/* The address of the last buffer returned by localtime() or gmtime().  */
+extern struct tm *localtime_buffer_addr;
+
+#endif
diff --git a/lib/lstat.c b/lib/lstat.c
new file mode 100644
index 0000000..a3e40d8
--- /dev/null
+++ b/lib/lstat.c
@@ -0,0 +1,104 @@
+/* Work around a bug of lstat on some systems
+
+   Copyright (C) 1997-2006, 2008-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* written by Jim Meyering */
+
+/* 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_lstat doesn't recurse to
+   rpl_lstat.  */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+#if !HAVE_LSTAT
+/* On systems that lack symlinks, our replacement <sys/stat.h> already
+   defined lstat as stat, so there is nothing further to do other than
+   avoid an empty file.  */
+typedef int dummy;
+#else /* HAVE_LSTAT */
+
+/* Get the original definition of lstat.  It might be defined as a macro.  */
+# include <sys/types.h>
+# include <sys/stat.h>
+# undef __need_system_sys_stat_h
+
+static int
+orig_lstat (const char *filename, struct stat *buf)
+{
+  return lstat (filename, buf);
+}
+
+/* Specification.  */
+# ifdef __osf__
+/* 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"
+# else
+#  include <sys/stat.h>
+# endif
+
+# include "stat-time.h"
+
+# include <string.h>
+# include <errno.h>
+
+/* lstat works differently on Linux and Solaris systems.  POSIX (see
+   "pathname resolution" in the glossary) requires that programs like
+   'ls' take into consideration the fact that FILE has a trailing slash
+   when FILE is a symbolic link.  On Linux and Solaris 10 systems, the
+   lstat function already has the desired semantics (in treating
+   'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)',
+   but on Solaris 9 and earlier it does not.
+
+   If FILE has a trailing slash and specifies a symbolic link,
+   then use stat() to get more info on the referent of FILE.
+   If the referent is a non-directory, then set errno to ENOTDIR
+   and return -1.  Otherwise, return stat's result.  */
+
+int
+rpl_lstat (const char *file, struct stat *sbuf)
+{
+  int result = orig_lstat (file, sbuf);
+
+  /* This replacement file can blindly check against '/' rather than
+     using the ISSLASH macro, because all platforms with '\\' either
+     lack symlinks (mingw) or have working lstat (cygwin) and thus do
+     not compile this file.  0 len should have already been filtered
+     out above, with a failure return of ENOENT.  */
+  if (result == 0)
+    {
+      if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/')
+        result = stat_time_normalize (result, sbuf);
+      else
+        {
+          /* At this point, a trailing slash is permitted only on
+             symlink-to-dir; but it should have found information on the
+             directory, not the symlink.  Call 'stat' to get info about the
+             link's referent.  Our replacement stat guarantees valid results,
+             even if the symlink is not pointing to a directory.  */
+          if (!S_ISLNK (sbuf->st_mode))
+            {
+              errno = ENOTDIR;
+              return -1;
+            }
+          result = stat (file, sbuf);
+        }
+    }
+  return result;
+}
+
+#endif /* HAVE_LSTAT */
diff --git a/lib/main.c b/lib/main.c
index 7996c7f..f183119 100644
--- a/lib/main.c
+++ b/lib/main.c
@@ -1,6 +1,7 @@
 /* Yacc library main function.
 
-   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -18,13 +19,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#if ! HAVE_SETLOCALE
-# define setlocale(Category, Locale)
-#endif
+#include <locale.h>
 
 int yyparse (void);
 
diff --git a/lib/malloc.c b/lib/malloc.c
index e0d5c89..76e6ff7 100644
--- a/lib/malloc.c
+++ b/lib/malloc.c
@@ -1,6 +1,6 @@
 /* malloc() function that is glibc compatible.
 
-   Copyright (C) 1997-1998, 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1997-1998, 2006-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Jim Meyering and Bruno Haible */
 
diff --git a/lib/malloca.c b/lib/malloca.c
new file mode 100644
index 0000000..f60c5fb
--- /dev/null
+++ b/lib/malloca.c
@@ -0,0 +1,105 @@
+/* Safe automatic memory allocation.
+   Copyright (C) 2003, 2006-2007, 2009-2019 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003, 2018.
+
+   This program is free software; you can redistribute 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 <https://www.gnu.org/licenses/>.  */
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+/* Specification.  */
+#include "malloca.h"
+
+#include "verify.h"
+
+/* The speed critical point in this file is freea() applied to an alloca()
+   result: it must be fast, to match the speed of alloca().  The speed of
+   mmalloca() and freea() in the other case are not critical, because they
+   are only invoked for big memory sizes.
+   Here we use a bit in the address as an indicator, an idea by Ondřej Bílka.
+   malloca() can return three types of pointers:
+     - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation.
+     - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap
+       allocation.
+     - NULL comes from a failed heap allocation.  */
+
+/* Type for holding very small pointer differences.  */
+typedef unsigned char small_t;
+/* Verify that it is wide enough.  */
+verify (2 * sa_alignment_max - 1 <= (small_t) -1);
+
+void *
+mmalloca (size_t n)
+{
+#if HAVE_ALLOCA
+  /* Allocate one more word, used to determine the address to pass to freea(),
+     and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max.  */
+  size_t nplus = n + sizeof (small_t) + 2 * sa_alignment_max - 1;
+
+  if (nplus >= n)
+    {
+      char *mem = (char *) malloc (nplus);
+
+      if (mem != NULL)
+        {
+          char *p =
+            (char *)((((uintptr_t)mem + sizeof (small_t) + sa_alignment_max - 1)
+                      & ~(uintptr_t)(2 * sa_alignment_max - 1))
+                     + sa_alignment_max);
+          /* Here p >= mem + sizeof (small_t),
+             and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1
+             hence p + n <= mem + nplus.
+             So, the memory range [p, p+n) lies in the allocated memory range
+             [mem, mem + nplus).  */
+          ((small_t *) p)[-1] = p - mem;
+          /* p ≡ sa_alignment_max mod 2*sa_alignment_max.  */
+          return p;
+        }
+    }
+  /* Out of memory.  */
+  return NULL;
+#else
+# if !MALLOC_0_IS_NONNULL
+  if (n == 0)
+    n = 1;
+# endif
+  return malloc (n);
+#endif
+}
+
+#if HAVE_ALLOCA
+void
+freea (void *p)
+{
+  /* Check argument.  */
+  if ((uintptr_t) p & (sa_alignment_max - 1))
+    {
+      /* p was not the result of a malloca() call.  Invalid argument.  */
+      abort ();
+    }
+  /* Determine whether p was a non-NULL pointer returned by mmalloca().  */
+  if ((uintptr_t) p & sa_alignment_max)
+    {
+      void *mem = (char *) p - ((small_t *) p)[-1];
+      free (mem);
+    }
+}
+#endif
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/malloca.h b/lib/malloca.h
new file mode 100644
index 0000000..d80c316
--- /dev/null
+++ b/lib/malloca.h
@@ -0,0 +1,127 @@
+/* Safe automatic memory allocation.
+   Copyright (C) 2003-2007, 2009-2019 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, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _MALLOCA_H
+#define _MALLOCA_H
+
+#include <alloca.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "xalloc-oversized.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
+   alloca(N); otherwise it returns NULL.  It either returns N bytes of
+   memory allocated on the stack, that lasts until the function returns,
+   or NULL.
+   Use of safe_alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns.
+*/
+#if HAVE_ALLOCA
+/* The OS usually guarantees only one guard page at the bottom of the stack,
+   and a page size can be as small as 4096 bytes.  So we cannot safely
+   allocate anything larger than 4096 bytes.  Also care for the possibility
+   of a few compiler-allocated temporary stack slots.
+   This must be a macro, not a function.  */
+# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
+#else
+# define safe_alloca(N) ((void) (N), NULL)
+#endif
+
+/* malloca(N) is a safe variant of alloca(N).  It allocates N bytes of
+   memory allocated on the stack, that must be freed using freea() before
+   the function returns.  Upon failure, it returns NULL.  */
+#if HAVE_ALLOCA
+# define malloca(N) \
+  ((N) < 4032 - (2 * sa_alignment_max - 1)                                   \
+   ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \
+                + (2 * sa_alignment_max - 1))                                \
+               & ~(uintptr_t)(2 * sa_alignment_max - 1))                     \
+   : mmalloca (N))
+#else
+# define malloca(N) \
+  mmalloca (N)
+#endif
+extern void * mmalloca (size_t n);
+
+/* Free a block of memory allocated through malloca().  */
+#if HAVE_ALLOCA
+extern void freea (void *p);
+#else
+# define freea free
+#endif
+
+/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
+   It allocates an array of N objects, each with S bytes of memory,
+   on the stack.  S must be positive and N must be nonnegative.
+   The array must be freed using freea() before the function returns.  */
+#define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s)))
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* ------------------- Auxiliary, non-public definitions ------------------- */
+
+/* Determine the alignment of a type at compile time.  */
+#if defined __GNUC__ || defined __IBM__ALIGNOF__
+# define sa_alignof __alignof__
+#elif defined __cplusplus
+  template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
+# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
+#elif defined __hpux
+  /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
+     values.  */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#elif defined _AIX
+  /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
+     values.  */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#else
+# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#endif
+
+enum
+{
+/* The desired alignment of memory allocations is the maximum alignment
+   among all elementary types.  */
+  sa_alignment_long = sa_alignof (long),
+  sa_alignment_double = sa_alignof (double),
+#if HAVE_LONG_LONG_INT
+  sa_alignment_longlong = sa_alignof (long long),
+#endif
+  sa_alignment_longdouble = sa_alignof (long double),
+  sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
+#if HAVE_LONG_LONG_INT
+                      | (sa_alignment_longlong - 1)
+#endif
+                      | (sa_alignment_longdouble - 1)
+                     ) + 1
+};
+
+#endif /* _MALLOCA_H */
diff --git a/lib/math.c b/lib/math.c
index ddb2ded..ba2a6ab 100644
--- a/lib/math.c
+++ b/lib/math.c
@@ -1,3 +1,4 @@
 #include <config.h>
 #define _GL_MATH_INLINE _GL_EXTERN_INLINE
 #include "math.h"
+typedef int dummy;
diff --git a/lib/math.in.h b/lib/math.in.h
index 252e205..3bb9663 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <math.h>.
 
-   Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2007-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_MATH_H
 
@@ -28,6 +28,14 @@
 #ifndef _@GUARD_PREFIX@_MATH_H
 #define _@GUARD_PREFIX@_MATH_H
 
+/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>.  */
+#if defined __VMS && ! defined NAN
+# include <fp.h>
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef _GL_MATH_INLINE
 # define _GL_MATH_INLINE _GL_INLINE
@@ -59,22 +67,24 @@
 {                                                                   \
   return func (l);                                                  \
 }
-# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
-inline int                                                          \
-func (float f)                                                      \
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \
+_GL_BEGIN_NAMESPACE                                                 \
+inline rettype                                                      \
+rpl_func (float f)                                                  \
 {                                                                   \
   return _gl_cxx_ ## func ## f (f);                                 \
 }                                                                   \
-inline int                                                          \
-func (double d)                                                     \
+inline rettype                                                      \
+rpl_func (double d)                                                 \
 {                                                                   \
   return _gl_cxx_ ## func ## d (d);                                 \
 }                                                                   \
-inline int                                                          \
-func (long double l)                                                \
+inline rettype                                                      \
+rpl_func (long double l)                                            \
 {                                                                   \
   return _gl_cxx_ ## func ## l (l);                                 \
-}
+}                                                                   \
+_GL_END_NAMESPACE
 #endif
 
 /* Helper macros to define a portability warning for the
@@ -82,27 +92,27 @@
    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")
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## f (float f)                                               \
+{                                                                         \
+  return func (f);                                                        \
+}                                                                         \
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## d (double d)                                              \
+{                                                                         \
+  return func (d);                                                        \
+}                                                                         \
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## l (long double l)                                         \
+{                                                                         \
+  return func (l);                                                        \
+}
 #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
   (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
    : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
@@ -184,8 +194,17 @@
 #endif
 
 
-/* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
-#if !(defined FP_ILOGB0 && defined FP_ILOGBNAN)
+#if defined FP_ILOGB0 && defined FP_ILOGBNAN
+ /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct.  */
+# if defined __HAIKU__
+  /* Haiku: match what ilogb() does */
+#  undef FP_ILOGB0
+#  undef FP_ILOGBNAN
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#else
+ /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
 # if defined __NetBSD__ || defined __sgi
   /* NetBSD, IRIX 6.5: match what ilogb() does */
 #  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
@@ -207,11 +226,20 @@
 
 
 #if @GNULIB_ACOSF@
-# if !@HAVE_ACOSF@
-#  undef acosf
+# if @REPLACE_ACOSF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef acosf
+#   define acosf rpl_acosf
+#  endif
+_GL_FUNCDECL_RPL (acosf, float, (float x));
+_GL_CXXALIAS_RPL (acosf, float, (float x));
+# else
+#  if !@HAVE_ACOSF@
+#   undef acosf
 _GL_FUNCDECL_SYS (acosf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (acosf, float, (float x));
+# endif
 _GL_CXXALIASWARN (acosf);
 #elif defined GNULIB_POSIXCHECK
 # undef acosf
@@ -238,11 +266,20 @@
 
 
 #if @GNULIB_ASINF@
-# if !@HAVE_ASINF@
-#  undef asinf
+# if @REPLACE_ASINF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef asinf
+#   define asinf rpl_asinf
+#  endif
+_GL_FUNCDECL_RPL (asinf, float, (float x));
+_GL_CXXALIAS_RPL (asinf, float, (float x));
+# else
+#  if !@HAVE_ASINF@
+#   undef asinf
 _GL_FUNCDECL_SYS (asinf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (asinf, float, (float x));
+# endif
 _GL_CXXALIASWARN (asinf);
 #elif defined GNULIB_POSIXCHECK
 # undef asinf
@@ -269,11 +306,20 @@
 
 
 #if @GNULIB_ATANF@
-# if !@HAVE_ATANF@
-#  undef atanf
+# if @REPLACE_ATANF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef atanf
+#   define atanf rpl_atanf
+#  endif
+_GL_FUNCDECL_RPL (atanf, float, (float x));
+_GL_CXXALIAS_RPL (atanf, float, (float x));
+# else
+#  if !@HAVE_ATANF@
+#   undef atanf
 _GL_FUNCDECL_SYS (atanf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (atanf, float, (float x));
+# endif
 _GL_CXXALIASWARN (atanf);
 #elif defined GNULIB_POSIXCHECK
 # undef atanf
@@ -300,11 +346,20 @@
 
 
 #if @GNULIB_ATAN2F@
-# if !@HAVE_ATAN2F@
-#  undef atan2f
+# if @REPLACE_ATAN2F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef atan2f
+#   define atan2f rpl_atan2f
+#  endif
+_GL_FUNCDECL_RPL (atan2f, float, (float y, float x));
+_GL_CXXALIAS_RPL (atan2f, float, (float y, float x));
+# else
+#  if !@HAVE_ATAN2F@
+#   undef atan2f
 _GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
+# endif
 _GL_CXXALIASWARN (atan2f);
 #elif defined GNULIB_POSIXCHECK
 # undef atan2f
@@ -343,7 +398,9 @@
 _GL_FUNCDECL_SYS (cbrt, double, (double x));
 # endif
 _GL_CXXALIAS_SYS (cbrt, double, (double x));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (cbrt);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef cbrt
 # if HAVE_RAW_DECL_CBRT
@@ -403,6 +460,7 @@
 #if @GNULIB_CEIL@
 # if @REPLACE_CEIL@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceil
 #   define ceil rpl_ceil
 #  endif
 _GL_FUNCDECL_RPL (ceil, double, (double x));
@@ -410,7 +468,9 @@
 # else
 _GL_CXXALIAS_SYS (ceil, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (ceil);
+# endif
 #endif
 
 #if @GNULIB_CEILL@
@@ -457,7 +517,9 @@
 _GL_FUNCDECL_SYS (copysign, double, (double x, double y));
 # endif
 _GL_CXXALIAS_SYS (copysign, double, (double x, double y));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (copysign);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef copysign
 # if HAVE_RAW_DECL_COPYSIGN
@@ -482,11 +544,20 @@
 
 
 #if @GNULIB_COSF@
-# if !@HAVE_COSF@
-#  undef cosf
+# if @REPLACE_COSF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cosf
+#   define cosf rpl_cosf
+#  endif
+_GL_FUNCDECL_RPL (cosf, float, (float x));
+_GL_CXXALIAS_RPL (cosf, float, (float x));
+# else
+#  if !@HAVE_COSF@
+#   undef cosf
 _GL_FUNCDECL_SYS (cosf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (cosf, float, (float x));
+# endif
 _GL_CXXALIASWARN (cosf);
 #elif defined GNULIB_POSIXCHECK
 # undef cosf
@@ -513,11 +584,20 @@
 
 
 #if @GNULIB_COSHF@
-# if !@HAVE_COSHF@
-#  undef coshf
+# if @REPLACE_COSHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef coshf
+#   define coshf rpl_coshf
+#  endif
+_GL_FUNCDECL_RPL (coshf, float, (float x));
+_GL_CXXALIAS_RPL (coshf, float, (float x));
+# else
+#  if !@HAVE_COSHF@
+#   undef coshf
 _GL_FUNCDECL_SYS (coshf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (coshf, float, (float x));
+# endif
 _GL_CXXALIASWARN (coshf);
 #elif defined GNULIB_POSIXCHECK
 # undef coshf
@@ -529,11 +609,20 @@
 
 
 #if @GNULIB_EXPF@
-# if !@HAVE_EXPF@
-#  undef expf
+# if @REPLACE_EXPF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expf
+#   define expf rpl_expf
+#  endif
+_GL_FUNCDECL_RPL (expf, float, (float x));
+_GL_CXXALIAS_RPL (expf, float, (float x));
+# else
+#  if !@HAVE_EXPF@
+#   undef expf
 _GL_FUNCDECL_SYS (expf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (expf, float, (float x));
+# endif
 _GL_CXXALIASWARN (expf);
 #elif defined GNULIB_POSIXCHECK
 # undef expf
@@ -544,11 +633,20 @@
 #endif
 
 #if @GNULIB_EXPL@
-# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
-#  undef expl
+# if @REPLACE_EXPL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expl
+#   define expl rpl_expl
+#  endif
+_GL_FUNCDECL_RPL (expl, long double, (long double x));
+_GL_CXXALIAS_RPL (expl, long double, (long double x));
+# else
+#  if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
+#   undef expl
 _GL_FUNCDECL_SYS (expl, long double, (long double x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (expl, long double, (long double x));
+# endif
 _GL_CXXALIASWARN (expl);
 #elif defined GNULIB_POSIXCHECK
 # undef expl
@@ -587,7 +685,9 @@
 #  endif
 _GL_CXXALIAS_SYS (exp2, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (exp2);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef exp2
 # if HAVE_RAW_DECL_EXP2
@@ -658,7 +758,9 @@
 #  endif
 _GL_CXXALIAS_SYS (expm1, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (expm1);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef expm1
 # if HAVE_RAW_DECL_EXPM1
@@ -668,11 +770,22 @@
 #endif
 
 #if @GNULIB_EXPM1L@
-# if !@HAVE_DECL_EXPM1L@
-#  undef expm1l
+# if @REPLACE_EXPM1L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1l
+#   define expm1l rpl_expm1l
+#  endif
+_GL_FUNCDECL_RPL (expm1l, long double, (long double x));
+_GL_CXXALIAS_RPL (expm1l, long double, (long double x));
+# else
+#  if !@HAVE_DECL_EXPM1L@
+#   undef expm1l
+#   if !(defined __cplusplus && defined _AIX)
 _GL_FUNCDECL_SYS (expm1l, long double, (long double x));
-# endif
+#   endif
+#  endif
 _GL_CXXALIAS_SYS (expm1l, long double, (long double x));
+# endif
 _GL_CXXALIASWARN (expm1l);
 #elif defined GNULIB_POSIXCHECK
 # undef expm1l
@@ -750,6 +863,7 @@
 #if @GNULIB_FLOOR@
 # if @REPLACE_FLOOR@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floor
 #   define floor rpl_floor
 #  endif
 _GL_FUNCDECL_RPL (floor, double, (double x));
@@ -757,7 +871,9 @@
 # else
 _GL_CXXALIAS_SYS (floor, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (floor);
+# endif
 #endif
 
 #if @GNULIB_FLOORL@
@@ -822,7 +938,9 @@
 #  endif
 _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fma);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef fma
 # if HAVE_RAW_DECL_FMA
@@ -844,8 +962,10 @@
 # else
 #  if !@HAVE_FMAL@
 #   undef fmal
+#   if !(defined __cplusplus && defined _AIX)
 _GL_FUNCDECL_SYS (fmal, long double,
                   (long double x, long double y, long double z));
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (fmal, long double,
                   (long double x, long double y, long double z));
@@ -895,7 +1015,9 @@
 # else
 _GL_CXXALIAS_SYS (fmod, double, (double x, double y));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fmod);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef fmod
 # if HAVE_RAW_DECL_FMOD
@@ -970,6 +1092,7 @@
 #if @GNULIB_FREXP@
 # if @REPLACE_FREXP@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexp
 #   define frexp rpl_frexp
 #  endif
 _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
@@ -977,7 +1100,9 @@
 # else
 _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
 # endif
-_GL_CXXALIASWARN (frexp);
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr));
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef frexp
 /* Assume frexp is always declared.  */
@@ -1057,7 +1182,9 @@
 # else
 _GL_CXXALIAS_SYS (hypot, double, (double x, double y));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (hypot);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef hypot
 # if HAVE_RAW_DECL_HYPOT
@@ -1128,7 +1255,9 @@
 #  endif
 _GL_CXXALIAS_SYS (ilogb, int, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (ilogb);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef ilogb
 # if HAVE_RAW_DECL_ILOGB
@@ -1138,10 +1267,19 @@
 #endif
 
 #if @GNULIB_ILOGBL@
-# if !@HAVE_ILOGBL@
+# if @REPLACE_ILOGBL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbl
+#   define ilogbl rpl_ilogbl
+#  endif
+_GL_FUNCDECL_RPL (ilogbl, int, (long double x));
+_GL_CXXALIAS_RPL (ilogbl, int, (long double x));
+# else
+#  if !@HAVE_ILOGBL@
 _GL_FUNCDECL_SYS (ilogbl, int, (long double x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (ilogbl, int, (long double x));
+# endif
 _GL_CXXALIASWARN (ilogbl);
 #elif defined GNULIB_POSIXCHECK
 # undef ilogbl
@@ -1231,7 +1369,9 @@
 # else
 _GL_CXXALIAS_SYS (log, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (log);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef log
 # if HAVE_RAW_DECL_LOG
@@ -1300,7 +1440,9 @@
 # else
 _GL_CXXALIAS_SYS (log10, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (log10);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef log10
 # if HAVE_RAW_DECL_LOG10
@@ -1371,7 +1513,9 @@
 #  endif
 _GL_CXXALIAS_SYS (log1p, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (log1p);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef log1p
 # if HAVE_RAW_DECL_LOG1P
@@ -1443,7 +1587,9 @@
 #  endif
 _GL_CXXALIAS_SYS (log2, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (log2);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef log2
 # if HAVE_RAW_DECL_LOG2
@@ -1513,7 +1659,9 @@
 #  endif
 _GL_CXXALIAS_SYS (logb, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (logb);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef logb
 # if HAVE_RAW_DECL_LOGB
@@ -1581,7 +1729,9 @@
 # else
 _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (modf);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef modf
 # if HAVE_RAW_DECL_MODF
@@ -1670,7 +1820,9 @@
 #  endif
 _GL_CXXALIAS_SYS (remainder, double, (double x, double y));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (remainder);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef remainder
 # if HAVE_RAW_DECL_REMAINDER
@@ -1690,7 +1842,9 @@
 # else
 #  if !@HAVE_DECL_REMAINDERL@
 #   undef remainderl
+#   if !(defined __cplusplus && defined _AIX)
 _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
 # endif
@@ -1723,7 +1877,9 @@
 _GL_FUNCDECL_SYS (rint, double, (double x));
 # endif
 _GL_CXXALIAS_SYS (rint, double, (double x));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (rint);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef rint
 # if HAVE_RAW_DECL_RINT
@@ -1733,10 +1889,19 @@
 #endif
 
 #if @GNULIB_RINTL@
-# if !@HAVE_RINTL@
+# if @REPLACE_RINTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rintl
+#   define rintl rpl_rintl
+#  endif
+_GL_FUNCDECL_RPL (rintl, long double, (long double x));
+_GL_CXXALIAS_RPL (rintl, long double, (long double x));
+# else
+#  if !@HAVE_RINTL@
 _GL_FUNCDECL_SYS (rintl, long double, (long double x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (rintl, long double, (long double x));
+# endif
 _GL_CXXALIASWARN (rintl);
 #elif defined GNULIB_POSIXCHECK
 # undef rintl
@@ -1784,7 +1949,9 @@
 #  endif
 _GL_CXXALIAS_SYS (round, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (round);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef round
 # if HAVE_RAW_DECL_ROUND
@@ -1804,7 +1971,9 @@
 # else
 #  if !@HAVE_DECL_ROUNDL@
 #   undef roundl
+#   if !(defined __cplusplus && defined _AIX)
 _GL_FUNCDECL_SYS (roundl, long double, (long double x));
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (roundl, long double, (long double x));
 # endif
@@ -1819,11 +1988,20 @@
 
 
 #if @GNULIB_SINF@
-# if !@HAVE_SINF@
-#  undef sinf
+# if @REPLACE_SINF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sinf
+#   define sinf rpl_sinf
+#  endif
+_GL_FUNCDECL_RPL (sinf, float, (float x));
+_GL_CXXALIAS_RPL (sinf, float, (float x));
+# else
+#  if !@HAVE_SINF@
+ #  undef sinf
 _GL_FUNCDECL_SYS (sinf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (sinf, float, (float x));
+# endif
 _GL_CXXALIASWARN (sinf);
 #elif defined GNULIB_POSIXCHECK
 # undef sinf
@@ -1850,11 +2028,20 @@
 
 
 #if @GNULIB_SINHF@
-# if !@HAVE_SINHF@
-#  undef sinhf
+# if @REPLACE_SINHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sinhf
+#   define sinhf rpl_sinhf
+#  endif
+_GL_FUNCDECL_RPL (sinhf, float, (float x));
+_GL_CXXALIAS_RPL (sinhf, float, (float x));
+# else
+#  if !@HAVE_SINHF@
+#   undef sinhf
 _GL_FUNCDECL_SYS (sinhf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (sinhf, float, (float x));
+# endif
 _GL_CXXALIASWARN (sinhf);
 #elif defined GNULIB_POSIXCHECK
 # undef sinhf
@@ -1866,11 +2053,20 @@
 
 
 #if @GNULIB_SQRTF@
-# if !@HAVE_SQRTF@
-#  undef sqrtf
+# if @REPLACE_SQRTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtf
+#   define sqrtf rpl_sqrtf
+#  endif
+_GL_FUNCDECL_RPL (sqrtf, float, (float x));
+_GL_CXXALIAS_RPL (sqrtf, float, (float x));
+# else
+#  if !@HAVE_SQRTF@
+#   undef sqrtf
 _GL_FUNCDECL_SYS (sqrtf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (sqrtf, float, (float x));
+# endif
 _GL_CXXALIASWARN (sqrtf);
 #elif defined GNULIB_POSIXCHECK
 # undef sqrtf
@@ -1906,11 +2102,20 @@
 
 
 #if @GNULIB_TANF@
-# if !@HAVE_TANF@
-#  undef tanf
+# if @REPLACE_TANF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef tanf
+#   define tanf rpl_tanf
+#  endif
+_GL_FUNCDECL_RPL (tanf, float, (float x));
+_GL_CXXALIAS_RPL (tanf, float, (float x));
+# else
+#  if !@HAVE_TANF@
+#   undef tanf
 _GL_FUNCDECL_SYS (tanf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (tanf, float, (float x));
+# endif
 _GL_CXXALIASWARN (tanf);
 #elif defined GNULIB_POSIXCHECK
 # undef tanf
@@ -1937,11 +2142,20 @@
 
 
 #if @GNULIB_TANHF@
-# if !@HAVE_TANHF@
-#  undef tanhf
+# if @REPLACE_TANHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef tanhf
+#   define tanhf rpl_tanhf
+#  endif
+_GL_FUNCDECL_RPL (tanhf, float, (float x));
+_GL_CXXALIAS_RPL (tanhf, float, (float x));
+# else
+#  if !@HAVE_TANHF@
+#   undef tanhf
 _GL_FUNCDECL_SYS (tanhf, float, (float x));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (tanhf, float, (float x));
+# endif
 _GL_CXXALIASWARN (tanhf);
 #elif defined GNULIB_POSIXCHECK
 # undef tanhf
@@ -1955,6 +2169,7 @@
 #if @GNULIB_TRUNCF@
 # if @REPLACE_TRUNCF@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncf
 #   define truncf rpl_truncf
 #  endif
 _GL_FUNCDECL_RPL (truncf, float, (float x));
@@ -1977,6 +2192,7 @@
 #if @GNULIB_TRUNC@
 # if @REPLACE_TRUNC@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef trunc
 #   define trunc rpl_trunc
 #  endif
 _GL_FUNCDECL_RPL (trunc, double, (double x));
@@ -1987,7 +2203,9 @@
 #  endif
 _GL_CXXALIAS_SYS (trunc, double, (double x));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (trunc);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef trunc
 # if HAVE_RAW_DECL_TRUNC
@@ -2036,10 +2254,17 @@
     gl_isfinitef (x))
 # endif
 # ifdef __cplusplus
-#  ifdef isfinite
+#  if defined isfinite || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
 #   undef isfinite
-_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
+#   if __GNUC__ >= 6 || (defined __clang__ && !defined _AIX)
+  /* This platform's <cmath> possibly defines isfinite through a set of inline
+     functions.  */
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool)
+#    define isfinite rpl_isfinite
+#   else
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool)
+#   endif
 #  endif
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -2063,10 +2288,17 @@
     gl_isinff (x))
 # endif
 # ifdef __cplusplus
-#  ifdef isinf
+#  if defined isinf || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
 #   undef isinf
-_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
+#   if __GNUC__ >= 6 || defined __clang__
+  /* This platform's <cmath> possibly defines isinf through a set of inline
+     functions.  */
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool)
+#    define isinf rpl_isinf
+#   else
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool)
+#   endif
 #  endif
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -2181,10 +2413,17 @@
     __builtin_isnanf ((float)(x)))
 # endif
 # ifdef __cplusplus
-#  ifdef isnan
+#  if defined isnan || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
 #   undef isnan
-_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
+#   if __GNUC__ >= 6 || defined __clang__
+  /* This platform's <cmath> possibly defines isnan through a set of inline
+     functions.  */
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool)
+#    define isnan rpl_isnan
+#   else
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool)
+#   endif
 #  endif
 # else
 /* Ensure isnan is a macro.  */
@@ -2202,7 +2441,8 @@
 
 
 #if @GNULIB_SIGNBIT@
-# if @REPLACE_SIGNBIT_USING_GCC@
+# if (@REPLACE_SIGNBIT_USING_GCC@ \
+      && (!defined __cplusplus || __cplusplus < 201103))
 #  undef signbit
    /* GCC 4.0 and newer provides three built-ins for signbit.  */
 #  define signbit(x) \
@@ -2210,7 +2450,7 @@
     sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
     __builtin_signbitf (x))
 # endif
-# if @REPLACE_SIGNBIT@
+# if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit
 #  undef signbit
 _GL_EXTERN_C int gl_signbitf (float arg);
 _GL_EXTERN_C int gl_signbitd (double arg);
@@ -2253,12 +2493,20 @@
    (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
     sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
     gl_signbitf (x))
+#  define GNULIB_defined_signbit 1
 # endif
 # ifdef __cplusplus
-#  ifdef signbit
+#  if defined signbit || defined GNULIB_NAMESPACE
 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
 #   undef signbit
-_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
+#   if __GNUC__ >= 6 || (defined __clang__ && !defined _AIX)
+  /* This platform's <cmath> possibly defines signbit through a set of inline
+     functions.  */
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool)
+#    define signbit rpl_signbit
+#   else
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool)
+#   endif
 #  endif
 # endif
 #elif defined GNULIB_POSIXCHECK
diff --git a/lib/mbchar.c b/lib/mbchar.c
index 9d372a7..aa8012b 100644
--- a/lib/mbchar.c
+++ b/lib/mbchar.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2006, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2006, 2009-2019 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
@@ -11,7 +11,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
diff --git a/lib/mbchar.h b/lib/mbchar.h
index 001f743..2d26075 100644
--- a/lib/mbchar.h
+++ b/lib/mbchar.h
@@ -1,5 +1,5 @@
 /* Multibyte character data type.
-   Copyright (C) 2001, 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005-2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>.  */
 
@@ -156,6 +156,9 @@
 #include <wchar.h>
 #include <wctype.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef MBCHAR_INLINE
 # define MBCHAR_INLINE _GL_INLINE
diff --git a/lib/mbfile.c b/lib/mbfile.c
new file mode 100644
index 0000000..b0a468e
--- /dev/null
+++ b/lib/mbfile.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define MBFILE_INLINE _GL_EXTERN_INLINE
+#include "mbfile.h"
diff --git a/lib/mbfile.h b/lib/mbfile.h
new file mode 100644
index 0000000..211f073
--- /dev/null
+++ b/lib/mbfile.h
@@ -0,0 +1,252 @@
+/* Multibyte character I/O: macros for multi-byte encodings.
+   Copyright (C) 2001, 2005, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Mitsuru Chinen <mchinen@yamato.ibm.com>
+   and Bruno Haible <bruno@clisp.org>.  */
+
+/* The macros in this file implement multi-byte character input from a
+   stream.
+
+   mb_file_t
+     is the type for multibyte character input stream, usable for variable
+     declarations.
+
+   mbf_char_t
+     is the type for multibyte character or EOF, usable for variable
+     declarations.
+
+   mbf_init (mbf, stream)
+     initializes the MB_FILE for reading from stream.
+
+   mbf_getc (mbc, mbf)
+     reads the next multibyte character from mbf and stores it in mbc.
+
+   mb_iseof (mbc)
+     returns true if mbc represents the EOF value.
+
+   Here are the function prototypes of the macros.
+
+   extern void          mbf_init (mb_file_t mbf, FILE *stream);
+   extern void          mbf_getc (mbf_char_t mbc, mb_file_t mbf);
+   extern bool          mb_iseof (const mbf_char_t mbc);
+ */
+
+#ifndef _MBFILE_H
+#define _MBFILE_H 1
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.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"
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBFILE_INLINE
+# define MBFILE_INLINE _GL_INLINE
+#endif
+
+struct mbfile_multi {
+  FILE *fp;
+  bool eof_seen;
+  bool have_pushback;
+  mbstate_t state;
+  unsigned int bufcount;
+  char buf[MBCHAR_BUF_SIZE];
+  struct mbchar pushback;
+};
+
+MBFILE_INLINE void
+mbfile_multi_getc (struct mbchar *mbc, struct mbfile_multi *mbf)
+{
+  size_t bytes;
+
+  /* If EOF has already been seen, don't use getc.  This matters if
+     mbf->fp is connected to an interactive tty.  */
+  if (mbf->eof_seen)
+    goto eof;
+
+  /* Return character pushed back, if there is one.  */
+  if (mbf->have_pushback)
+    {
+      mb_copy (mbc, &mbf->pushback);
+      mbf->have_pushback = false;
+      return;
+    }
+
+  /* Before using mbrtowc, we need at least one byte.  */
+  if (mbf->bufcount == 0)
+    {
+      int c = getc (mbf->fp);
+      if (c == EOF)
+        {
+          mbf->eof_seen = true;
+          goto eof;
+        }
+      mbf->buf[0] = (unsigned char) c;
+      mbf->bufcount++;
+    }
+
+  /* Handle most ASCII characters quickly, without calling mbrtowc().  */
+  if (mbf->bufcount == 1 && mbsinit (&mbf->state) && is_basic (mbf->buf[0]))
+    {
+      /* These characters are part of the basic character set.  ISO C 99
+         guarantees that their wide character code is identical to their
+         char code.  */
+      mbc->wc = mbc->buf[0] = mbf->buf[0];
+      mbc->wc_valid = true;
+      mbc->ptr = &mbc->buf[0];
+      mbc->bytes = 1;
+      mbf->bufcount = 0;
+      return;
+    }
+
+  /* Use mbrtowc on an increasing number of bytes.  Read only as many bytes
+     from mbf->fp as needed.  This is needed to give reasonable interactive
+     behaviour when mbf->fp is connected to an interactive tty.  */
+  for (;;)
+    {
+      /* We don't know whether the 'mbrtowc' function updates the state when
+         it returns -2, - this is the ISO C 99 and glibc-2.2 behaviour - or
+         not - amended ANSI C, glibc-2.1 and Solaris 2.7 behaviour.  We
+         don't have an autoconf test for this, yet.
+         The new behaviour would allow us to feed the bytes one by one into
+         mbrtowc.  But the old behaviour forces us to feed all bytes since
+         the end of the last character into mbrtowc.  Since we want to retry
+         with more bytes when mbrtowc returns -2, we must backup the state
+         before calling mbrtowc, because implementations with the new
+         behaviour will clobber it.  */
+      mbstate_t backup_state = mbf->state;
+
+      bytes = mbrtowc (&mbc->wc, &mbf->buf[0], mbf->bufcount, &mbf->state);
+
+      if (bytes == (size_t) -1)
+        {
+          /* An invalid multibyte sequence was encountered.  */
+          /* Return a single byte.  */
+          bytes = 1;
+          mbc->wc_valid = false;
+          break;
+        }
+      else if (bytes == (size_t) -2)
+        {
+          /* An incomplete multibyte character.  */
+          mbf->state = backup_state;
+          if (mbf->bufcount == MBCHAR_BUF_SIZE)
+            {
+              /* An overlong incomplete multibyte sequence was encountered.  */
+              /* Return a single byte.  */
+              bytes = 1;
+              mbc->wc_valid = false;
+              break;
+            }
+          else
+            {
+              /* Read one more byte and retry mbrtowc.  */
+              int c = getc (mbf->fp);
+              if (c == EOF)
+                {
+                  /* An incomplete multibyte character at the end.  */
+                  mbf->eof_seen = true;
+                  bytes = mbf->bufcount;
+                  mbc->wc_valid = false;
+                  break;
+                }
+              mbf->buf[mbf->bufcount] = (unsigned char) c;
+              mbf->bufcount++;
+            }
+        }
+      else
+        {
+          if (bytes == 0)
+            {
+              /* A null wide character was encountered.  */
+              bytes = 1;
+              assert (mbf->buf[0] == '\0');
+              assert (mbc->wc == 0);
+            }
+          mbc->wc_valid = true;
+          break;
+        }
+    }
+
+  /* Return the multibyte sequence mbf->buf[0..bytes-1].  */
+  mbc->ptr = &mbc->buf[0];
+  memcpy (&mbc->buf[0], &mbf->buf[0], bytes);
+  mbc->bytes = bytes;
+
+  mbf->bufcount -= bytes;
+  if (mbf->bufcount > 0)
+    {
+      /* It's not worth calling memmove() for so few bytes.  */
+      unsigned int count = mbf->bufcount;
+      char *p = &mbf->buf[0];
+
+      do
+        {
+          *p = *(p + bytes);
+          p++;
+        }
+      while (--count > 0);
+    }
+  return;
+
+eof:
+  /* An mbchar_t with bytes == 0 is used to indicate EOF.  */
+  mbc->ptr = NULL;
+  mbc->bytes = 0;
+  mbc->wc_valid = false;
+  return;
+}
+
+MBFILE_INLINE void
+mbfile_multi_ungetc (const struct mbchar *mbc, struct mbfile_multi *mbf)
+{
+  mb_copy (&mbf->pushback, mbc);
+  mbf->have_pushback = true;
+}
+
+typedef struct mbfile_multi mb_file_t;
+
+typedef mbchar_t mbf_char_t;
+
+#define mbf_init(mbf, stream)                                           \
+  ((mbf).fp = (stream),                                                 \
+   (mbf).eof_seen = false,                                              \
+   (mbf).have_pushback = false,                                         \
+   memset (&(mbf).state, '\0', sizeof (mbstate_t)),                     \
+   (mbf).bufcount = 0)
+
+#define mbf_getc(mbc, mbf) mbfile_multi_getc (&(mbc), &(mbf))
+
+#define mbf_ungetc(mbc, mbf) mbfile_multi_ungetc (&(mbc), &(mbf))
+
+#define mb_iseof(mbc) ((mbc).bytes == 0)
+
+_GL_INLINE_HEADER_END
+
+#endif /* _MBFILE_H */
diff --git a/lib/mbrtowc.c b/lib/mbrtowc.c
index e3f354b..1aad22c 100644
--- a/lib/mbrtowc.c
+++ b/lib/mbrtowc.c
@@ -1,5 +1,5 @@
 /* Convert multibyte character to wide character.
-   Copyright (C) 1999-2002, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 1999-2002, 2005-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,13 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
 /* Specification.  */
 #include <wchar.h>
 
+#if C_LOCALE_MAYBE_EILSEQ
+# include "hard-locale.h"
+# include <locale.h>
+#endif
+
 #if GNULIB_defined_mbstate_t
 /* Implement mbrtowc() on top of mbtowc().  */
 
@@ -29,7 +34,67 @@
 # include "localcharset.h"
 # include "streq.h"
 # include "verify.h"
+# include "glthread/lock.h"
 
+# ifndef FALLTHROUGH
+#  if __GNUC__ < 7
+#   define FALLTHROUGH ((void) 0)
+#  else
+#   define FALLTHROUGH __attribute__ ((__fallthrough__))
+#  endif
+# endif
+
+/* Returns a classification of special values of the encoding of the current
+   locale.  */
+typedef enum {
+  enc_other,      /* other */
+  enc_utf8,       /* UTF-8 */
+  enc_eucjp,      /* EUC-JP */
+  enc_94,         /* EUC-KR, GB2312, BIG5 */
+  enc_euctw,      /* EUC-TW */
+  enc_gb18030,    /* GB18030 */
+  enc_sjis        /* SJIS */
+} enc_t;
+static inline enc_t
+locale_enc (void)
+{
+  const char *encoding = locale_charset ();
+  if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+    return enc_utf8;
+  if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
+    return enc_eucjp;
+  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))
+    return enc_94;
+  if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
+    return enc_euctw;
+  if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+    return enc_gb18030;
+  if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
+    return enc_sjis;
+  return enc_other;
+}
+
+# if GNULIB_WCHAR_SINGLE
+/* When we know that the locale does not change, provide a speedup by
+   caching the value of locale_enc.  */
+static int cached_locale_enc = -1;
+static inline enc_t
+locale_enc_cached (void)
+{
+  if (cached_locale_enc < 0)
+    cached_locale_enc = locale_enc ();
+  return cached_locale_enc;
+}
+# else
+/* By default, don't make assumptions, hence no caching.  */
+#  define locale_enc_cached locale_enc
+# endif
+
+/* This lock protects the internal state of mbtowc against multiple simultaneous
+   calls of mbrtowc.  */
+gl_lock_define_initialized(static, mbtowc_lock)
 
 verify (sizeof (mbstate_t) >= 4);
 
@@ -60,6 +125,8 @@
     char buf[4];
     const char *p;
     size_t m;
+    enc_t enc;
+    int res;
 
     switch (nstate)
       {
@@ -69,10 +136,10 @@
         break;
       case 3:
         buf[2] = pstate[3];
-        /*FALLTHROUGH*/
+        FALLTHROUGH;
       case 2:
         buf[1] = pstate[2];
-        /*FALLTHROUGH*/
+        FALLTHROUGH;
       case 1:
         buf[0] = pstate[1];
         p = buf;
@@ -92,231 +159,296 @@
 
     /* 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);
+    enc = locale_enc_cached ();
 
-      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.  */
+    if (enc == enc_utf8) /* UTF-8 */
       {
-        const char *encoding = locale_charset ();
+        /* Achieve multi-thread safety by not calling mbtowc() at all.  */
+        /* Cf. unistr/u8-mbtouc.c.  */
+        unsigned char c = (unsigned char) p[0];
 
-        if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+        if (c < 0x80)
           {
-            /* Cf. unistr/u8-mblen.c.  */
-            unsigned char c = (unsigned char) p[0];
-
-            if (c >= 0xc2)
+            if (pwc != NULL)
+              *pwc = c;
+            res = (c == 0 ? 0 : 1);
+            goto success;
+          }
+        if (c >= 0xc2)
+          {
+            if (c < 0xe0)
               {
-                if (c < 0xe0)
+                if (m == 1)
+                  goto incomplete;
+                else /* m >= 2 */
                   {
-                    if (m == 1)
-                      goto incomplete;
-                  }
-                else if (c < 0xf0)
-                  {
-                    if (m == 1)
-                      goto incomplete;
-                    if (m == 2)
-                      {
-                        unsigned char c2 = (unsigned char) p[1];
+                    unsigned char c2 = (unsigned char) p[1];
 
-                        if ((c2 ^ 0x80) < 0x40
-                            && (c >= 0xe1 || c2 >= 0xa0)
-                            && (c != 0xed || c2 < 0xa0))
-                          goto incomplete;
+                    if ((c2 ^ 0x80) < 0x40)
+                      {
+                        if (pwc != NULL)
+                          *pwc = ((unsigned int) (c & 0x1f) << 6)
+                                 | (unsigned int) (c2 ^ 0x80);
+                        res = 2;
+                        goto success;
                       }
                   }
-                else if (c <= 0xf4)
+              }
+            else if (c < 0xf0)
+              {
+                if (m == 1)
+                  goto incomplete;
+                else
                   {
-                    if (m == 1)
-                      goto incomplete;
-                    else /* m == 2 || m == 3 */
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if ((c2 ^ 0x80) < 0x40
+                        && (c >= 0xe1 || c2 >= 0xa0)
+                        && (c != 0xed || c2 < 0xa0))
                       {
-                        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 */
                           {
-                            if (m == 2)
-                              goto incomplete;
-                            else /* m == 3 */
-                              {
-                                unsigned char c3 = (unsigned char) p[2];
+                            unsigned char c3 = (unsigned char) p[2];
 
-                                if ((c3 ^ 0x80) < 0x40)
-                                  goto incomplete;
+                            if ((c3 ^ 0x80) < 0x40)
+                              {
+                                if (pwc != NULL)
+                                  *pwc = ((unsigned int) (c & 0x0f) << 12)
+                                         | ((unsigned int) (c2 ^ 0x80) << 6)
+                                         | (unsigned int) (c3 ^ 0x80);
+                                res = 3;
+                                goto success;
                               }
                           }
                       }
                   }
               }
-            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)
+            else if (c <= 0xf4)
               {
-                unsigned char c = (unsigned char) p[0];
-
-                if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
+                if (m == 1)
                   goto incomplete;
-              }
-            if (m == 2)
-              {
-                unsigned char c = (unsigned char) p[0];
-
-                if (c == 0x8f)
+                else
                   {
                     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 ((c2 ^ 0x80) < 0x40
+                        && (c >= 0xf1 || c2 >= 0x90)
+                        && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
                       {
                         if (m == 2)
                           goto incomplete;
-                        else /* m == 3 */
+                        else
                           {
                             unsigned char c3 = (unsigned char) p[2];
 
-                            if (c3 >= 0x81 && c3 <= 0xfe)
-                              goto incomplete;
+                            if ((c3 ^ 0x80) < 0x40)
+                              {
+                                if (m == 3)
+                                  goto incomplete;
+                                else /* m >= 4 */
+                                  {
+                                    unsigned char c4 = (unsigned char) p[3];
+
+                                    if ((c4 ^ 0x80) < 0x40)
+                                      {
+                                        if (pwc != NULL)
+                                          *pwc = ((unsigned int) (c & 0x07) << 18)
+                                                 | ((unsigned int) (c2 ^ 0x80) << 12)
+                                                 | ((unsigned int) (c3 ^ 0x80) << 6)
+                                                 | (unsigned int) (c4 ^ 0x80);
+                                        res = 4;
+                                        goto success;
+                                      }
+                                  }
+                              }
                           }
                       }
                   }
               }
-            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;
+        goto invalid;
       }
-
-     incomplete:
+    else
       {
-        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);
+        /* The hidden internal state of mbtowc would make this function not
+           multi-thread safe.  Achieve multi-thread safety through a lock.  */
+        gl_lock_lock (mbtowc_lock);
 
-     invalid:
-      errno = EILSEQ;
-      /* The conversion state is undefined, says POSIX.  */
-      return (size_t)(-1);
+        /* Put the hidden internal state of mbtowc into its initial state.
+           This is needed at least with glibc, uClibc, and MSVC CRT.
+           See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>.  */
+        mbtowc (NULL, NULL, 0);
+
+        res = mbtowc (pwc, p, m);
+
+        gl_lock_unlock (mbtowc_lock);
+
+        if (res >= 0)
+          {
+            if (pwc != NULL && ((*pwc == 0) != (res == 0)))
+              abort ();
+            goto success;
+          }
+
+        /* 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 (already handled above).
+           Use specialized code for each.  */
+        if (m >= 4 || m >= MB_CUR_MAX)
+          goto invalid;
+        /* Here MB_CUR_MAX > 1 and 0 < m < 4.  */
+        switch (enc)
+          {
+          /* As a reference for this code, you can use the GNU libiconv
+             implementation.  Look for uses of the RET_TOOFEW macro.  */
+
+          case enc_eucjp: /* EUC-JP */
+            {
+              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;
+            }
+
+          case enc_94: /* EUC-KR, GB2312, BIG5 */
+            {
+              if (m == 1)
+                {
+                  unsigned char c = (unsigned char) p[0];
+
+                  if (c >= 0xa1 && c < 0xff)
+                    goto incomplete;
+                }
+              goto invalid;
+            }
+
+          case enc_euctw: /* EUC-TW */
+            {
+              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;
+            }
+
+          case enc_gb18030: /* GB18030 */
+            {
+              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;
+            }
+
+          case enc_sjis: /* SJIS */
+            {
+              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;
+            }
+
+          default:
+            /* An unknown multibyte encoding.  */
+            goto incomplete;
+          }
+      }
+
+   success:
+    /* res >= 0 is the corrected return value of mbtowc (pwc, p, m).  */
+    if (nstate >= (res > 0 ? res : 1))
+      abort ();
+    res -= nstate;
+    pstate[0] = 0;
+    return res;
+
+   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);
   }
 }
 
@@ -328,7 +460,10 @@
 size_t
 rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
 {
-# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG
+  size_t ret;
+  wchar_t wc;
+
+# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG
   if (s == NULL)
     {
       pwc = NULL;
@@ -337,6 +472,14 @@
     }
 # endif
 
+# if MBRTOWC_EMPTY_INPUT_BUG
+  if (n == 0)
+    return (size_t) -2;
+# endif
+
+  if (! pwc)
+    pwc = &wc;
+
 # if MBRTOWC_RETVAL_BUG
   {
     static mbstate_t internal_state;
@@ -352,8 +495,7 @@
         size_t count = 0;
         for (; n > 0; s++, n--)
           {
-            wchar_t wc;
-            size_t ret = mbrtowc (&wc, s, 1, ps);
+            ret = mbrtowc (&wc, s, 1, ps);
 
             if (ret == (size_t)(-1))
               return (size_t)(-1);
@@ -361,8 +503,7 @@
             if (ret != (size_t)(-2))
               {
                 /* The multibyte character has been completed.  */
-                if (pwc != NULL)
-                  *pwc = wc;
+                *pwc = wc;
                 return (wc == 0 ? 0 : count);
               }
           }
@@ -371,32 +512,23 @@
   }
 # endif
 
+  ret = mbrtowc (pwc, s, n, ps);
+
 # 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);
-  }
+  if (ret < (size_t) -2 && !*pwc)
+    return 0;
 # endif
+
+# if C_LOCALE_MAYBE_EILSEQ
+  if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE))
+    {
+      unsigned char uc = *s;
+      *pwc = uc;
+      return 1;
+    }
+# endif
+
+  return ret;
 }
 
 #endif
diff --git a/lib/mbschr.c b/lib/mbschr.c
deleted file mode 100644
index d021d99..0000000
--- a/lib/mbschr.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 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
index 638142e..5ecaef7 100644
--- a/lib/mbsinit.c
+++ b/lib/mbsinit.c
@@ -1,5 +1,5 @@
 /* Test for initial conversion state.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2008.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -22,17 +22,7 @@
 
 #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
+#if GNULIB_defined_mbstate_t
 
 /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
    and wcrtomb(), wcsrtombs().
@@ -45,6 +35,7 @@
    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.
+       See mbrtowc.c.
      - In wc -> mb direction, mbstate_t contains no information. In other
        words, it is always in the initial state.  */
 
@@ -58,4 +49,25 @@
   return pstate == NULL || pstate[0] == 0;
 }
 
+#else
+
+int
+mbsinit (const mbstate_t *ps)
+{
+# if defined _WIN32 && !defined __CYGWIN__
+  /* Native Windows.  */
+#  ifdef __MINGW32__
+  /* On mingw, 'mbstate_t' is defined as 'int'.  */
+  return ps == NULL || *ps == 0;
+#  else
+  /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4-bytes matter.  */
+  return ps == NULL || *(const unsigned int *)ps == 0;
+#  endif
+# else
+  /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ...  */
+  /* Maybe this definition works, maybe not...  */
+  return ps == NULL || *(const char *)ps == 0;
+# endif
+}
+
 #endif
diff --git a/lib/mbsrchr.c b/lib/mbsrchr.c
deleted file mode 100644
index ad39a3b..0000000
--- a/lib/mbsrchr.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* 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 d81b5c8..408a15e 100644
--- a/lib/mbswidth.c
+++ b/lib/mbswidth.c
@@ -1,5 +1,5 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <haible@clisp.cons.org>.  */
 
diff --git a/lib/mbswidth.h b/lib/mbswidth.h
index 690a5a7..2b5c53c 100644
--- a/lib/mbswidth.h
+++ b/lib/mbswidth.h
@@ -1,5 +1,5 @@
 /* Determine the number of screen columns needed for a string.
-   Copyright (C) 2000-2004, 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2004, 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
 
diff --git a/lib/mbuiter.c b/lib/mbuiter.c
deleted file mode 100644
index 9167580..0000000
--- a/lib/mbuiter.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <config.h>
-#define MBUITER_INLINE _GL_EXTERN_INLINE
-#include "mbuiter.h"
diff --git a/lib/mbuiter.h b/lib/mbuiter.h
deleted file mode 100644
index 6194d9d..0000000
--- a/lib/mbuiter.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/* 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
index b8fb0ef..4e0c5f9 100644
--- a/lib/memchr.c
+++ b/lib/memchr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2012
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2019
    Free Software Foundation, Inc.
 
    Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
@@ -21,7 +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, see <http://www.gnu.org/licenses/>.  */
+along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBC
 # include <config.h>
diff --git a/lib/memchr.valgrind b/lib/memchr.valgrind
index 60f247e..1d60e29 100644
--- a/lib/memchr.valgrind
+++ b/lib/memchr.valgrind
@@ -1,4 +1,20 @@
 # Suppress a valgrind message about use of uninitialized memory in memchr().
+
+# Copyright (C) 2009-2019 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 <https://www.gnu.org/licenses/>.
+
 # 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.
diff --git a/lib/minmax.h b/lib/minmax.h
new file mode 100644
index 0000000..d7f6bea
--- /dev/null
+++ b/lib/minmax.h
@@ -0,0 +1,60 @@
+/* MIN, MAX macros.
+   Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _MINMAX_H
+#define _MINMAX_H
+
+/* Note: MIN, MAX are also defined in <sys/param.h> on some systems
+   (glibc, IRIX, HP-UX, OSF/1).  Therefore you might get warnings about
+   MIN, MAX macro redefinitions on some systems; the workaround is to
+   #include this file as the last one among the #include list.  */
+
+/* Before we define the following symbols we get the <limits.h> file
+   since otherwise we get redefinitions on some systems if <limits.h> is
+   included after this file.  Likewise for <sys/param.h>.
+   If more than one of these system headers define MIN and MAX, pick just
+   one of the headers (because the definitions most likely are the same).  */
+#if HAVE_MINMAX_IN_LIMITS_H
+# include <limits.h>
+#elif HAVE_MINMAX_IN_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+/* Note: MIN and MAX should be used with two arguments of the
+   same type.  They might not return the minimum and maximum of their two
+   arguments, if the arguments have different types or have unusual
+   floating-point values.  For example, on a typical host with 32-bit 'int',
+   64-bit 'long long', and 64-bit IEEE 754 'double' types:
+
+     MAX (-1, 2147483648) returns 4294967295.
+     MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0.
+     MAX (NaN, 0.0) returns 0.0.
+     MAX (+0.0, -0.0) returns -0.0.
+
+   and in each case the answer is in some sense bogus.  */
+
+/* MAX(a,b) returns the maximum of A and B.  */
+#ifndef MAX
+# define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+/* MIN(a,b) returns the minimum of A and B.  */
+#ifndef MIN
+# define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#endif /* _MINMAX_H */
diff --git a/lib/msvc-inval.c b/lib/msvc-inval.c
index ba76a7e..75b5a07 100644
--- a/lib/msvc-inval.c
+++ b/lib/msvc-inval.c
@@ -1,5 +1,5 @@
 /* Invalid parameter handler for MSVC runtime libraries.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -28,7 +28,7 @@
 
 # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
 
-static void cdecl
+static void __cdecl
 gl_msvc_invalid_parameter_handler (const wchar_t *expression,
                                    const wchar_t *function,
                                    const wchar_t *file,
@@ -45,7 +45,7 @@
 
 #  if defined _MSC_VER
 
-static void cdecl
+static void __cdecl
 gl_msvc_invalid_parameter_handler (const wchar_t *expression,
                                    const wchar_t *function,
                                    const wchar_t *file,
@@ -94,7 +94,7 @@
     }
 }
 
-static void cdecl
+static void __cdecl
 gl_msvc_invalid_parameter_handler (const wchar_t *expression,
                                    const wchar_t *function,
                                    const wchar_t *file,
diff --git a/lib/msvc-inval.h b/lib/msvc-inval.h
index eb6930b..9d3aa1f 100644
--- a/lib/msvc-inval.h
+++ b/lib/msvc-inval.h
@@ -1,5 +1,5 @@
 /* Invalid parameter handler for MSVC runtime libraries.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _MSVC_INVAL_H
 #define _MSVC_INVAL_H
@@ -95,7 +95,7 @@
 
 /* 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>.
+   <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>.
    Our status codes are composed of
      - 0xE0000000, mandatory for all user-defined status codes,
      - 0x474E550, a API identifier ("GNU"),
@@ -106,7 +106,7 @@
 #  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>.
+   <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>.
    With __try/__except, we can use the multithread-safe exception handling.  */
 
 #   ifdef __cplusplus
diff --git a/lib/msvc-nothrow.c b/lib/msvc-nothrow.c
index e5cf181..49b709c 100644
--- a/lib/msvc-nothrow.c
+++ b/lib/msvc-nothrow.c
@@ -1,6 +1,6 @@
 /* Wrappers that don't throw invalid parameter notifications
    with MSVC runtime libraries.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -24,7 +24,9 @@
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-#include "msvc-inval.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
 
 #undef _get_osfhandle
 
diff --git a/lib/msvc-nothrow.h b/lib/msvc-nothrow.h
index 2b71945..8d3ca78 100644
--- a/lib/msvc-nothrow.h
+++ b/lib/msvc-nothrow.h
@@ -1,6 +1,6 @@
 /* Wrappers that don't throw invalid parameter notifications
    with MSVC runtime libraries.
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _MSVC_NOTHROW_H
 #define _MSVC_NOTHROW_H
@@ -25,7 +25,7 @@
    This file defines wrappers that turn such an invalid parameter notification
    into an error code.  */
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 
 /* Get original declaration of _get_osfhandle.  */
 # include <io.h>
diff --git a/lib/obstack.c b/lib/obstack.c
index fc50f1e..abdd713 100644
--- a/lib/obstack.c
+++ b/lib/obstack.c
@@ -1,32 +1,32 @@
 /* obstack.c - subroutines used implicitly by object stack macros
+   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-   Copyright (C) 1988-1994, 1996-2006, 2009-2012 Free Software Foundation, Inc.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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 free software: you can redistribute it and/or modify
-   it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
 
 #ifdef _LIBC
 # include <obstack.h>
-# include <shlib-compat.h>
 #else
 # include <config.h>
 # include "obstack.h"
 #endif
 
-/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
-   incremented whenever callers compiled using an old obstack.h can no
-   longer properly call the functions in this obstack.c.  */
-#define OBSTACK_INTERFACE_VERSION 1
+/* NOTE BEFORE MODIFYING THIS FILE: _OBSTACK_INTERFACE_VERSION in
+   obstack.h must be incremented whenever callers compiled using an old
+   obstack.h can no longer properly call the functions in this file.  */
 
 /* Comment out all this code if we are using the GNU C Library, and are not
    actually compiling the library itself, and the installed library
@@ -36,114 +36,80 @@
    (especially if it is a shared library).  Rather than having every GNU
    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__.  */
 #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
 # include <gnu-versions.h>
-# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
-#  define ELIDE_CODE
+# if (_GNU_OBSTACK_INTERFACE_VERSION == _OBSTACK_INTERFACE_VERSION	      \
+      || (_GNU_OBSTACK_INTERFACE_VERSION == 1				      \
+          && _OBSTACK_INTERFACE_VERSION == 2				      \
+          && defined SIZEOF_INT && defined SIZEOF_SIZE_T		      \
+          && SIZEOF_INT == SIZEOF_SIZE_T))
+#  define _OBSTACK_ELIDE_CODE
 # endif
 #endif
 
-#include <stddef.h>
-
-#ifndef ELIDE_CODE
-
+#ifndef _OBSTACK_ELIDE_CODE
+/* If GCC, or if an oddball (testing?) host that #defines __alignof__,
+   use the already-supplied __alignof__.  Otherwise, this must be Gnulib
+   (as glibc assumes GCC); defer to Gnulib's alignof_type.  */
+# if !defined __GNUC__ && !defined __alignof__
+#  include <alignof.h>
+#  define __alignof__(type) alignof_type (type)
+# endif
+# include <stdlib.h>
 # include <stdint.h>
 
+# ifndef MAX
+#  define MAX(a,b) ((a) > (b) ? (a) : (b))
+# endif
+
 /* Determine default alignment.  */
-union fooround
-{
-  uintmax_t i;
-  long double d;
-  void *p;
-};
-struct fooalign
-{
-  char c;
-  union fooround u;
-};
+
 /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
    But in fact it might be less smart and round addresses to as much as
-   DEFAULT_ROUNDING.  So we prepare for it to do that.  */
-enum
-  {
-    DEFAULT_ALIGNMENT = offsetof (struct fooalign, u),
-    DEFAULT_ROUNDING = sizeof (union fooround)
-  };
+   DEFAULT_ROUNDING.  So we prepare for it to do that.
 
-/* 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.  */
-# ifndef COPYING_UNIT
-#  define COPYING_UNIT int
-# endif
+   DEFAULT_ALIGNMENT cannot be an enum constant; see gnulib's alignof.h.  */
+#define DEFAULT_ALIGNMENT MAX (__alignof__ (long double),		      \
+                               MAX (__alignof__ (uintmax_t),		      \
+                                    __alignof__ (void *)))
+#define DEFAULT_ROUNDING MAX (sizeof (long double),			      \
+                               MAX (sizeof (uintmax_t),			      \
+                                    sizeof (void *)))
+
+/* Call functions with either the traditional malloc/free calling
+   interface, or the mmalloc/mfree interface (that adds an extra first
+   argument), based on the value of use_extra_arg.  */
+
+static void *
+call_chunkfun (struct obstack *h, size_t size)
+{
+  if (h->use_extra_arg)
+    return h->chunkfun.extra (h->extra_arg, size);
+  else
+    return h->chunkfun.plain (size);
+}
+
+static void
+call_freefun (struct obstack *h, void *old_chunk)
+{
+  if (h->use_extra_arg)
+    h->freefun.extra (h->extra_arg, old_chunk);
+  else
+    h->freefun.plain (old_chunk);
+}
 
 
-/* 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 _Noreturn void print_and_abort (void);
-void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-
-/* Exit value used when 'print_and_abort' is used.  */
-# include <stdlib.h>
-# ifdef _LIBC
-int obstack_exit_failure = EXIT_FAILURE;
-# else
-#  include "exitfail.h"
-#  define obstack_exit_failure exit_failure
-# endif
-
-# ifdef _LIBC
-#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
-/* A looong time ago (before 1994, anyway; we're not sure) this global variable
-   was used by non-GNU-C macros to avoid multiple evaluation.  The GNU C
-   library still exports it because somebody might use it.  */
-struct obstack *_obstack_compat;
-compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0);
-#  endif
-# endif
-
-/* Define a macro that either calls functions with the traditional malloc/free
-   calling interface, or calls functions with the mmalloc/mfree interface
-   (that adds an extra first argument), based on the state of use_extra_arg.
-   For free, do not use ?:, since some compilers, like the MIPS compilers,
-   do not allow (expr) ? void : void.  */
-
-# define CALL_CHUNKFUN(h, size) \
-  (((h) -> use_extra_arg) \
-   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
-   : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
-
-# define CALL_FREEFUN(h, old_chunk) \
-  do { \
-    if ((h) -> use_extra_arg) \
-      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
-    else \
-      (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
-  } while (0)
-
-
 /* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
    Objects start on multiples of ALIGNMENT (0 means use default).
-   CHUNKFUN is the function to use to allocate chunks,
-   and FREEFUN the function to free them.
 
    Return nonzero if successful, calls obstack_alloc_failed_handler if
    allocation fails.  */
 
-int
-_obstack_begin (struct obstack *h,
-                int size, int alignment,
-                void *(*chunkfun) (long),
-                void (*freefun) (void *))
+static int
+_obstack_begin_worker (struct obstack *h,
+                       _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment)
 {
-  register struct _obstack_chunk *chunk; /* points to new chunk */
+  struct _obstack_chunk *chunk; /* points to new chunk */
 
   if (alignment == 0)
     alignment = DEFAULT_ALIGNMENT;
@@ -164,19 +130,15 @@
       size = 4096 - extra;
     }
 
-  h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
-  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
   h->chunk_size = size;
   h->alignment_mask = alignment - 1;
-  h->use_extra_arg = 0;
 
-  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
+  chunk = h->chunk = call_chunkfun (h, h->chunk_size);
   if (!chunk)
     (*obstack_alloc_failed_handler) ();
   h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
                                                alignment - 1);
-  h->chunk_limit = chunk->limit
-    = (char *) chunk + h->chunk_size;
+  h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size;
   chunk->prev = 0;
   /* The initial chunk now contains no empty object.  */
   h->maybe_empty_object = 0;
@@ -185,51 +147,29 @@
 }
 
 int
-_obstack_begin_1 (struct obstack *h, int size, int alignment,
-                  void *(*chunkfun) (void *, long),
+_obstack_begin (struct obstack *h,
+                _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment,
+                void *(*chunkfun) (size_t),
+                void (*freefun) (void *))
+{
+  h->chunkfun.plain = chunkfun;
+  h->freefun.plain = freefun;
+  h->use_extra_arg = 0;
+  return _obstack_begin_worker (h, size, alignment);
+}
+
+int
+_obstack_begin_1 (struct obstack *h,
+                  _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment,
+                  void *(*chunkfun) (void *, size_t),
                   void (*freefun) (void *, void *),
                   void *arg)
 {
-  register struct _obstack_chunk *chunk; /* points to new chunk */
-
-  if (alignment == 0)
-    alignment = DEFAULT_ALIGNMENT;
-  if (size == 0)
-    /* 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.
-
-         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));
-      size = 4096 - extra;
-    }
-
-  h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
-  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-  h->chunk_size = size;
-  h->alignment_mask = alignment - 1;
+  h->chunkfun.extra = chunkfun;
+  h->freefun.extra = freefun;
   h->extra_arg = arg;
   h->use_extra_arg = 1;
-
-  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
-  if (!chunk)
-    (*obstack_alloc_failed_handler) ();
-  h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
-                                               alignment - 1);
-  h->chunk_limit = chunk->limit
-    = (char *) chunk + h->chunk_size;
-  chunk->prev = 0;
-  /* The initial chunk now contains no empty object.  */
-  h->maybe_empty_object = 0;
-  h->alloc_failed = 0;
-  return 1;
+  return _obstack_begin_worker (h, size, alignment);
 }
 
 /* Allocate a new current chunk for the obstack *H
@@ -239,25 +179,27 @@
    to the beginning of the new one.  */
 
 void
-_obstack_newchunk (struct obstack *h, int length)
+_obstack_newchunk (struct obstack *h, _OBSTACK_SIZE_T length)
 {
-  register struct _obstack_chunk *old_chunk = h->chunk;
-  register struct _obstack_chunk *new_chunk;
-  register long new_size;
-  register long obj_size = h->next_free - h->object_base;
-  register long i;
-  long already;
+  struct _obstack_chunk *old_chunk = h->chunk;
+  struct _obstack_chunk *new_chunk = 0;
+  size_t obj_size = h->next_free - h->object_base;
   char *object_base;
 
   /* Compute size for new chunk.  */
-  new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100;
+  size_t sum1 = obj_size + length;
+  size_t sum2 = sum1 + h->alignment_mask;
+  size_t new_size = sum2 + (obj_size >> 3) + 100;
+  if (new_size < sum2)
+    new_size = sum2;
   if (new_size < h->chunk_size)
     new_size = h->chunk_size;
 
   /* Allocate and initialize the new chunk.  */
-  new_chunk = CALL_CHUNKFUN (h, new_size);
+  if (obj_size <= sum1 && sum1 <= sum2)
+    new_chunk = call_chunkfun (h, new_size);
   if (!new_chunk)
-    (*obstack_alloc_failed_handler) ();
+    (*obstack_alloc_failed_handler)();
   h->chunk = new_chunk;
   new_chunk->prev = old_chunk;
   new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
@@ -266,36 +208,19 @@
   object_base =
     __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask);
 
-  /* Move the existing object to the new chunk.
-     Word at a time is fast and is safe if the object
-     is sufficiently aligned.  */
-  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];
-      /* 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.  */
-      already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
-    }
-  else
-    already = 0;
-  /* Copy remaining bytes one by one.  */
-  for (i = already; i < obj_size; i++)
-    object_base[i] = h->object_base[i];
+  /* Move the existing object to the new chunk.  */
+  memcpy (object_base, h->object_base, obj_size);
 
   /* If the object just copied was the only data in OLD_CHUNK,
      free that chunk and remove it from the chain.
      But not if that chunk might contain an empty object.  */
-  if (! h->maybe_empty_object
+  if (!h->maybe_empty_object
       && (h->object_base
           == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
                           h->alignment_mask)))
     {
       new_chunk->prev = old_chunk->prev;
-      CALL_FREEFUN (h, old_chunk);
+      call_freefun (h, old_chunk);
     }
 
   h->object_base = object_base;
@@ -303,9 +228,6 @@
   /* The new chunk certainly contains no empty object yet.  */
   h->maybe_empty_object = 0;
 }
-# ifdef _LIBC
-libc_hidden_def (_obstack_newchunk)
-# endif
 
 /* Return nonzero if object OBJ has been allocated from obstack H.
    This is here for debugging.
@@ -313,13 +235,13 @@
 
 /* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
    obstack.h because it is just for debugging.  */
-int _obstack_allocated_p (struct obstack *h, void *obj);
+int _obstack_allocated_p (struct obstack *h, void *obj) __attribute_pure__;
 
 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 */
+  struct _obstack_chunk *lp;    /* below addr of any objects in this chunk */
+  struct _obstack_chunk *plp;   /* point to previous chunk if any */
 
   lp = (h)->chunk;
   /* We use >= rather than > since the object cannot be exactly at
@@ -332,17 +254,15 @@
     }
   return lp != 0;
 }
-
+
 /* Free objects in obstack H, including OBJ and everything allocate
    more recently than OBJ.  If OBJ is zero, free everything in H.  */
 
-# 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 */
+  struct _obstack_chunk *lp;    /* below addr of any objects in this chunk */
+  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.
@@ -351,7 +271,7 @@
   while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
     {
       plp = lp->prev;
-      CALL_FREEFUN (h, lp);
+      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.  */
@@ -368,17 +288,11 @@
     abort ();
 }
 
-# ifdef _LIBC
-/* Older versions of libc used a function _obstack_free intended to be
-   called by non-GCC compilers.  */
-strong_alias (obstack_free, _obstack_free)
-# endif
-
-int
+_OBSTACK_SIZE_T
 _obstack_memory_used (struct obstack *h)
 {
-  register struct _obstack_chunk* lp;
-  register int nbytes = 0;
+  struct _obstack_chunk *lp;
+  _OBSTACK_SIZE_T nbytes = 0;
 
   for (lp = h->chunk; lp != 0; lp = lp->prev)
     {
@@ -386,20 +300,31 @@
     }
   return nbytes;
 }
-
-/* Define the error handler.  */
-# ifdef _LIBC
-#  include <libintl.h>
-# else
-#  include "gettext.h"
-# endif
-# ifndef _
-#  define _(msgid) gettext (msgid)
-# endif
 
-# ifdef _LIBC
-#  include <libio/iolibio.h>
-# endif
+# ifndef _OBSTACK_NO_ERROR_HANDLER
+/* Define the error handler.  */
+#  include <stdio.h>
+
+/* Exit value used when 'print_and_abort' is used.  */
+#  ifdef _LIBC
+int obstack_exit_failure = EXIT_FAILURE;
+#  else
+#   include "exitfail.h"
+#   define obstack_exit_failure exit_failure
+#  endif
+
+#  ifdef _LIBC
+#   include <libintl.h>
+#  else
+#   include "gettext.h"
+#  endif
+#  ifndef _
+#   define _(msgid) gettext (msgid)
+#  endif
+
+#  ifdef _LIBC
+#   include <libio/iolibio.h>
+#  endif
 
 static _Noreturn void
 print_and_abort (void)
@@ -409,12 +334,21 @@
      happen because the "memory exhausted" message appears in other places
      like this and the translation should be reused instead of creating
      a very similar string which requires a separate translation.  */
-# ifdef _LIBC
+#  ifdef _LIBC
   (void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
-# else
+#  else
   fprintf (stderr, "%s\n", _("memory exhausted"));
-# endif
+#  endif
   exit (obstack_exit_failure);
 }
 
-#endif  /* !ELIDE_CODE */
+/* 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'.  */
+__attribute_noreturn__ void (*obstack_alloc_failed_handler) (void)
+  = print_and_abort;
+# endif /* !_OBSTACK_NO_ERROR_HANDLER */
+#endif /* !_OBSTACK_ELIDE_CODE */
diff --git a/lib/obstack.h b/lib/obstack.h
index 6a44b44..9fc6455 100644
--- a/lib/obstack.h
+++ b/lib/obstack.h
@@ -1,90 +1,90 @@
 /* obstack.h - object stack macros
-   Copyright (C) 1988-1994, 1996-1999, 2003-2006, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1988-2019 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.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
 /* Summary:
 
-All the apparent functions defined here are macros. The idea
-is that you would use these pre-tested macros to solve a
-very specific set of problems, and they would run fast.
-Caution: no side-effects in arguments please!! They may be
-evaluated MANY times!!
+   All the apparent functions defined here are macros. The idea
+   is that you would use these pre-tested macros to solve a
+   very specific set of problems, and they would run fast.
+   Caution: no side-effects in arguments please!! They may be
+   evaluated MANY times!!
 
-These macros operate a stack of objects.  Each object starts life
-small, and may grow to maturity.  (Consider building a word syllable
-by syllable.)  An object can move while it is growing.  Once it has
-been "finished" it never changes address again.  So the "top of the
-stack" is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
+   These macros operate a stack of objects.  Each object starts life
+   small, and may grow to maturity.  (Consider building a word syllable
+   by syllable.)  An object can move while it is growing.  Once it has
+   been "finished" it never changes address again.  So the "top of the
+   stack" is typically an immature growing object, while the rest of the
+   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
-them before using any obstack macros.
+   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
+   them before using any obstack macros.
 
-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.
+   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.
 
-One motivation for this package is the problem of growing char strings
-in symbol tables.  Unless you are "fascist pig with a read-only mind"
---Gosper's immortal quote from HAKMEM item 154, out of context--you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
+   One motivation for this package is the problem of growing char strings
+   in symbol tables.  Unless you are "fascist pig with a read-only mind"
+   --Gosper's immortal quote from HAKMEM item 154, out of context--you
+   would not like to put any arbitrary upper limit on the length of your
+   symbols.
 
-In practice this often means you will build many short symbols and a
-few long symbols.  At the time you are reading a symbol you don't know
-how long it is.  One traditional method is to read a symbol into a
-buffer, realloc()ating the buffer every time you try to read a symbol
-that is longer than the buffer.  This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
+   In practice this often means you will build many short symbols and a
+   few long symbols.  At the time you are reading a symbol you don't know
+   how long it is.  One traditional method is to read a symbol into a
+   buffer, realloc()ating the buffer every time you try to read a symbol
+   that is longer than the buffer.  This is beaut, but you still will
+   want to copy the symbol from the buffer to a more permanent
+   symbol-table entry say about half the time.
 
-With obstacks, you can work differently.  Use one obstack for all symbol
-names.  As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it.  Then, if the symbol exists already,
-free the newly read name.
+   With obstacks, you can work differently.  Use one obstack for all symbol
+   names.  As you read a symbol, grow the name in the obstack gradually.
+   When the name is complete, finalize it.  Then, if the symbol exists already,
+   free the newly read name.
 
-The way we do this is to take a large chunk, allocating memory from
-low addresses.  When you want to build a symbol in the chunk you just
-add chars above the current "high water mark" in the chunk.  When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
+   The way we do this is to take a large chunk, allocating memory from
+   low addresses.  When you want to build a symbol in the chunk you just
+   add chars above the current "high water mark" in the chunk.  When you
+   have finished adding chars, because you got to the end of the symbol,
+   you know how long the chars are, and you can create a new object.
+   Mostly the chars will not burst over the highest address of the chunk,
+   because you would typically expect a chunk to be (say) 100 times as
+   long as an average object.
 
-In case that isn't clear, when we have enough chars to make up
-the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
-so we just point to it where it lies.  No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
+   In case that isn't clear, when we have enough chars to make up
+   the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+   so we just point to it where it lies.  No moving of chars is
+   needed and this is the second win: potentially long strings need
+   never be explicitly shuffled. Once an object is formed, it does not
+   change its address during its lifetime.
 
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk.  We then carry on
-accreting characters to the end of the object as we normally would.
+   When the chars burst over a chunk boundary, we allocate a larger
+   chunk, and then copy the partly formed object from the end of the old
+   chunk to the beginning of the new larger chunk.  We then carry on
+   accreting characters to the end of the object as we normally would.
 
-A special macro is provided to add a single char at a time to a
-growing object.  This allows the use of register variables, which
-break the ordinary 'growth' macro.
+   A special macro is provided to add a single char at a time to a
+   growing object.  This allows the use of register variables, which
+   break the ordinary 'growth' macro.
 
-Summary:
+   Summary:
         We allocate large chunks.
         We carve out one object at a time from the current chunk.
         Once carved, an object never moves.
@@ -96,24 +96,38 @@
         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.)
-*/
+ */
 
 
 /* Don't do the contents of this file more than once.  */
 
 #ifndef _OBSTACK_H
 #define _OBSTACK_H 1
-
-/* 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
-   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
-   and use ptrdiff_t.  */
 
-#ifdef __PTRDIFF_TYPE__
-# define PTR_INT_TYPE __PTRDIFF_TYPE__
+#ifndef _OBSTACK_INTERFACE_VERSION
+# define _OBSTACK_INTERFACE_VERSION 2
+#endif
+
+#include <stddef.h>             /* For size_t and ptrdiff_t.  */
+#include <string.h>             /* For __GNU_LIBRARY__, and memcpy.  */
+
+#if __STDC_VERSION__ < 199901L || defined __HP_cc
+# define __FLEXIBLE_ARRAY_MEMBER 1
 #else
-# include <stddef.h>
-# define PTR_INT_TYPE ptrdiff_t
+# define __FLEXIBLE_ARRAY_MEMBER
+#endif
+
+#if _OBSTACK_INTERFACE_VERSION == 1
+/* For binary compatibility with obstack version 1, which used "int"
+   and "long" for these two types.  */
+# define _OBSTACK_SIZE_T unsigned int
+# define _CHUNK_SIZE_T unsigned long
+# define _OBSTACK_CAST(type, expr) ((type) (expr))
+#else
+/* Version 2 with sane types, especially for 64-bit hosts.  */
+# define _OBSTACK_SIZE_T size_t
+# define _CHUNK_SIZE_T size_t
+# define _OBSTACK_CAST(type, expr) (expr)
 #endif
 
 /* If B is the base of an object addressed by P, return the result of
@@ -122,18 +136,29 @@
 
 #define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
 
-/* Similar 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
+   and converted back again.  If ptrdiff_t 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)                                                \
-  __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
+#define __PTR_ALIGN(B, P, A)						      \
+  __BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0,      \
                 P, A)
 
-#include <string.h>
+#ifndef __attribute_pure__
+# define __attribute_pure__ _GL_ATTRIBUTE_PURE
+#endif
+
+/* Not the same as _Noreturn, since it also works with function pointers.  */
+#ifndef __attribute_noreturn__
+# if 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
+#  define __attribute_noreturn__ __attribute__ ((__noreturn__))
+# else
+#  define __attribute_noreturn__
+# endif
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -141,67 +166,72 @@
 
 struct _obstack_chunk           /* Lives at front of each chunk. */
 {
-  char  *limit;                 /* 1 past end of this 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 contents[__FLEXIBLE_ARRAY_MEMBER]; /* objects begin here */
 };
 
 struct obstack          /* control current object in current chunk */
 {
-  long  chunk_size;             /* preferred size to allocate chunks in */
+  _CHUNK_SIZE_T 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 */
+  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;
+    _OBSTACK_SIZE_T i;
+    void *p;
   } 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 *);
+  _OBSTACK_SIZE_T alignment_mask;  /* Mask of alignment for each object. */
+
+  /* These prototypes vary based on 'use_extra_arg'.  */
+  union
+  {
+    void *(*plain) (size_t);
+    void *(*extra) (void *, size_t);
+  } chunkfun;
+  union
+  {
+    void (*plain) (void *);
+    void (*extra) (void *, void *);
+  } freefun;
+
   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.  */
+  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.  */
 };
 
 /* 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 *));
-extern int _obstack_begin_1 (struct obstack *, int, int,
-                             void *(*) (void *, long),
+extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T);
+extern void _obstack_free (struct obstack *, void *);
+extern int _obstack_begin (struct obstack *,
+                           _OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
+                           void *(*) (size_t), void (*) (void *));
+extern int _obstack_begin_1 (struct obstack *,
+                             _OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
+                             void *(*) (void *, size_t),
                              void (*) (void *, void *), void *);
-extern int _obstack_memory_used (struct obstack *);
+extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *)
+  __attribute_pure__;
 
-/* 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
    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);
+extern __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void);
 
 /* 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.
    Note that this might not be the final address of the object
    because a new chunk might be needed to hold the final size.  */
@@ -214,50 +244,47 @@
 
 /* Pointer to next byte not yet allocated in current chunk.  */
 
-#define obstack_next_free(h)    ((h)->next_free)
+#define obstack_next_free(h) ((void *) (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,						      \
+                  _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc),    \
+                  _OBSTACK_CAST (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,					      \
+                  _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \
+                  _OBSTACK_CAST (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))
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)     \
+  _obstack_begin ((h), (size), (alignment),				      \
+                  _OBSTACK_CAST (void *(*) (size_t), chunkfun),		      \
+                  _OBSTACK_CAST (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),				      \
+                    _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun),     \
+                    _OBSTACK_CAST (void (*) (void *, void *), freefun), arg)
 
-#define obstack_chunkfun(h, newchunkfun) \
-  ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
+#define obstack_chunkfun(h, newchunkfun)				      \
+  ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun)))
 
-#define obstack_freefun(h, newfreefun) \
-  ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
+#define obstack_freefun(h, newfreefun)					      \
+  ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun)))
 
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
+#define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar)))
 
-#define obstack_blank_fast(h,n) ((h)->next_free += (n))
+#define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n)))
 
 #define obstack_memory_used(h) _obstack_memory_used (h)
-
+
 #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__.  */
-# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+# if !defined __GNUC_MINOR__ || __GNUC__ * 1000 + __GNUC_MINOR__ < 2008
 #  define __extension__
 # endif
 
@@ -266,158 +293,161 @@
    without using a global variable.
    Also, we can avoid using the 'temp' slot, to make faster code.  */
 
-# define obstack_object_size(OBSTACK)                                   \
-  __extension__                                                         \
-  ({ struct obstack const *__o = (OBSTACK);                             \
-     (unsigned) (__o->next_free - __o->object_base); })
+# define obstack_object_size(OBSTACK)					      \
+  __extension__								      \
+    ({ struct obstack const *__o = (OBSTACK);				      \
+       (_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); })
 
-# define obstack_room(OBSTACK)                                          \
-  __extension__                                                         \
-  ({ struct obstack const *__o = (OBSTACK);                             \
-     (unsigned) (__o->chunk_limit - __o->next_free); })
+/* The local variable is named __o1 to avoid a shadowed variable
+   warning when invoked from other obstack macros.  */
+# define obstack_room(OBSTACK)						      \
+  __extension__								      \
+    ({ struct obstack const *__o1 = (OBSTACK);				      \
+       (_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->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);                                    \
-   (void) 0; })
+# define obstack_make_room(OBSTACK, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __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;                                             \
-   (void) 0; })
+# define obstack_grow(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len)					      \
+         _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;                                             \
-   (void) 0; })
+# define obstack_grow0(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len + 1)				      \
+         _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);                                     \
-   (void) 0; })
+# define obstack_1grow(OBSTACK, datum)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       if (obstack_room (__o) < 1)					      \
+         _obstack_newchunk (__o, 1);					      \
+       obstack_1grow_fast (__o, datum); })
 
 /* 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 (obstack_room (__o) < sizeof (void *))			      \
+         _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));                             \
-   obstack_int_grow_fast (__o, datum); })
+# define obstack_int_grow(OBSTACK, datum)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       if (obstack_room (__o) < sizeof (int))				      \
+         _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 *);                            \
-   (void) 0; })
+# define obstack_ptr_grow_fast(OBSTACK, aptr)				      \
+  __extension__								      \
+    ({ struct obstack *__o1 = (OBSTACK);				      \
+       void *__p1 = __o1->next_free;					      \
+       *(const void **) __p1 = (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);                                     \
-   (void) 0; })
+# define obstack_int_grow_fast(OBSTACK, aint)				      \
+  __extension__								      \
+    ({ struct obstack *__o1 = (OBSTACK);				      \
+       void *__p1 = __o1->next_free;					      \
+       *(int *) __p1 = (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);                                     \
-   (void) 0; })
+# define obstack_blank(OBSTACK, length)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len)					      \
+         _obstack_newchunk (__o, __len);				      \
+       obstack_blank_fast (__o, __len); })
 
-# define obstack_alloc(OBSTACK,length)                                  \
-__extension__                                                           \
-({ struct obstack *__h = (OBSTACK);                                     \
-   obstack_blank (__h, (length));                                       \
-   obstack_finish (__h); })
+# 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));                               \
-   obstack_finish (__h); })
+# 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));                              \
-   obstack_finish (__h); })
+# 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;                                 \
-   __value; })
+/* The local variable is named __o1 to avoid a shadowed variable
+   warning when invoked from other obstack macros, typically obstack_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 ((size_t) (__o1->next_free - (char *) __o1->chunk)		      \
+           > (size_t) (__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);                                                 \
-   if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
-     __o->next_free = __o->object_base = (char *)__obj;                 \
-   else (__obstack_free) (__o, __obj); })
-
+# define obstack_free(OBSTACK, OBJ)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       void *__obj = (void *) (OBJ);					      \
+       if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit)  \
+         __o->next_free = __o->object_base = (char *) __obj;		      \
+       else								      \
+         _obstack_free (__o, __obj); })
+
 #else /* not __GNUC__ */
 
-# define obstack_object_size(h) \
- (unsigned) ((h)->next_free - (h)->object_base)
+# define obstack_object_size(h)						      \
+  ((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base))
 
-# define obstack_room(h)                \
- (unsigned) ((h)->chunk_limit - (h)->next_free)
+# define obstack_room(h)						      \
+  ((_OBSTACK_SIZE_T) ((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))
+# define obstack_empty_p(h)						      \
+  ((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
@@ -425,83 +455,87 @@
    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)              \
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
+# define obstack_make_room(h, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+    ? (_obstack_newchunk (h, (h)->temp.i), 0) : 0),			      \
+   (void) 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),                    \
-  (h)->next_free += (h)->temp.tempint)
+# define obstack_grow(h, where, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+   ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0),			      \
+   memcpy ((h)->next_free, where, (h)->temp.i),				      \
+   (h)->next_free += (h)->temp.i,					      \
+   (void) 0)
 
-# 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_grow0(h, where, length)				      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i + 1)				      \
+   ? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0),		      \
+   memcpy ((h)->next_free, where, (h)->temp.i),				      \
+   (h)->next_free += (h)->temp.i,					      \
+   *((h)->next_free)++ = 0,						      \
+   (void) 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_1grow(h, datum)					      \
+  (((obstack_room (h) < 1)						      \
+    ? (_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),                \
-  obstack_ptr_grow_fast (h, datum))
+# define obstack_ptr_grow(h, datum)					      \
+  (((obstack_room (h) < sizeof (char *))				      \
+    ? (_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),                   \
-  obstack_int_grow_fast (h, datum))
+# define obstack_int_grow(h, datum)					      \
+  (((obstack_room (h) < sizeof (int))					      \
+    ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			      \
+   obstack_int_grow_fast (h, datum))
 
-# define obstack_ptr_grow_fast(h,aptr)                                  \
-  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+# define obstack_ptr_grow_fast(h, aptr)					      \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr),	      \
+   (void) 0)
 
-# define obstack_int_grow_fast(h,aint)                                  \
-  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
+# define obstack_int_grow_fast(h, aint)					      \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint),		      \
+   (void) 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_blank(h, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+   ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0),			      \
+   obstack_blank_fast (h, (h)->temp.i))
 
-# define obstack_alloc(h,length)                                        \
- (obstack_blank ((h), (length)), obstack_finish ((h)))
+# define obstack_alloc(h, length)					      \
+  (obstack_blank ((h), (length)), obstack_finish ((h)))
 
-# define obstack_copy(h,where,length)                                   \
- (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+# define obstack_copy(h, where, length)					      \
+  (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
 
-# define obstack_copy0(h,where,length)                                  \
- (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+# 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,                                    \
-  (h)->temp.tempptr)
+# define obstack_finish(h)						      \
+  (((h)->next_free == (h)->object_base					      \
+    ? (((h)->maybe_empty_object = 1), 0)				      \
+    : 0),								      \
+   (h)->temp.p = (h)->object_base,					      \
+   (h)->next_free							      \
+     = __PTR_ALIGN ((h)->object_base, (h)->next_free,			      \
+                    (h)->alignment_mask),				      \
+   (((size_t) ((h)->next_free - (char *) (h)->chunk)			      \
+     > (size_t) ((h)->chunk_limit - (char *) (h)->chunk))		      \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),				      \
+   (h)->object_base = (h)->next_free,					      \
+   (h)->temp.p)
 
-# 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.p = (void *) (obj),					      \
+   (((h)->temp.p > (void *) (h)->chunk					      \
+     && (h)->temp.p < (void *) (h)->chunk_limit)			      \
+    ? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p)       \
+    : _obstack_free ((h), (h)->temp.p)))
 
 #endif /* not __GNUC__ */
 
@@ -509,4 +543,4 @@
 }       /* C++ */
 #endif
 
-#endif /* obstack.h */
+#endif /* _OBSTACK_H */
diff --git a/lib/obstack_printf.c b/lib/obstack_printf.c
index fba0536..42bf09e 100644
--- a/lib/obstack_printf.c
+++ b/lib/obstack_printf.c
@@ -1,5 +1,5 @@
 /* Formatted output to obstacks.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/open.c b/lib/open.c
index bdfc8db..0c2742b 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -1,5 +1,5 @@
 /* Open a descriptor to a file.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
@@ -38,6 +38,8 @@
    this include because of the preliminary #include <fcntl.h> above.  */
 #include "fcntl.h"
 
+#include "cloexec.h"
+
 #include <errno.h>
 #include <stdarg.h>
 #include <string.h>
@@ -52,6 +54,13 @@
 int
 open (const char *filename, int flags, ...)
 {
+  /* 0 = unknown, 1 = yes, -1 = no.  */
+#if GNULIB_defined_O_CLOEXEC
+  int have_cloexec = -1;
+#else
+  static int have_cloexec;
+#endif
+
   mode_t mode;
   int fd;
 
@@ -77,28 +86,25 @@
   flags &= ~O_NONBLOCK;
 #endif
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if 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."
+  /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename
+     ends in a slash, as POSIX says such a filename must name a directory
+     <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
+       "A pathname that contains at least one non-<slash> character and that
+        ends with one or more trailing <slash> characters shall not be resolved
+        successfully unless the last pathname component before the trailing
+        <slash> characters names an existing directory"
      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.
+         <https://pubs.opengroup.org/onlinepubs/9699919799/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,
@@ -115,7 +121,25 @@
     }
 #endif
 
-  fd = orig_open (filename, flags, mode);
+  fd = orig_open (filename,
+                  flags & ~(have_cloexec <= 0 ? O_CLOEXEC : 0), mode);
+
+  if (flags & O_CLOEXEC)
+    {
+      if (! have_cloexec)
+        {
+          if (0 <= fd)
+            have_cloexec = 1;
+          else if (errno == EINVAL)
+            {
+              fd = orig_open (filename, flags & ~O_CLOEXEC, mode);
+              have_cloexec = -1;
+            }
+        }
+      if (have_cloexec < 0 && 0 <= fd)
+        set_cloexec_flag (fd, true);
+    }
+
 
 #if REPLACE_FCHDIR
   /* Implementing fchdir and fdopendir requires the ability to open a
@@ -144,14 +168,12 @@
 #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."
+     Rationale: POSIX says such a filename must name a directory
+     <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
+       "A pathname that contains at least one non-<slash> character and that
+        ends with one or more trailing <slash> characters shall not be resolved
+        successfully unless the last pathname component before the trailing
+        <slash> characters names an existing directory"
      If the named file without the slash is not a directory, open() must fail
      with ENOTDIR.  */
   if (fd >= 0)
diff --git a/lib/path-join.c b/lib/path-join.c
new file mode 100644
index 0000000..7278742
--- /dev/null
+++ b/lib/path-join.c
@@ -0,0 +1,37 @@
+/* Concatenate path components.
+   Copyright (C) 2018-2019 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 any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Akim Demaille <akim@lrde.epita.fr>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "path-join.h"
+
+#include <concat-filename.h> /* xconcatenated_filename */
+#include <filename.h> /* IS_ABSOLUTE_PATH */
+#include <xalloc.h> /* xstrdup */
+
+char *
+xpath_join (const char *path1, const char *path2)
+{
+  if (!path2 || !*path2)
+    return xstrdup (path1);
+  else if (IS_ABSOLUTE_PATH (path2))
+    return xstrdup (path2);
+  else
+    return xconcatenated_filename (path1, path2, NULL);
+}
diff --git a/lib/path-join.h b/lib/path-join.h
new file mode 100644
index 0000000..0ac7055
--- /dev/null
+++ b/lib/path-join.h
@@ -0,0 +1,38 @@
+/* Concatenate path components.
+   Copyright (C) 2018-2019 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 any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Akim Demaille <akim@lrde.epita.fr>.  */
+
+#ifndef _PATH_JOIN_H
+# define _PATH_JOIN_H
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+/* Concatenate two paths together.  PATH2 may be null, or empty, or
+   absolute: do what is right.  Return a freshly allocated
+   filename.  */
+char *
+xpath_join (const char *path1, const char *path2);
+
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* _PATH_JOIN_H */
diff --git a/lib/pathmax.h b/lib/pathmax.h
index 03db7cb..4287d15 100644
--- a/lib/pathmax.h
+++ b/lib/pathmax.h
@@ -1,5 +1,5 @@
 /* Define PATH_MAX somehow.  Requires sys/types.h.
-   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2012 Free Software
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,14 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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>
+   <https://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.
 
@@ -65,10 +65,10 @@
 #  define PATH_MAX 1024
 # endif
 
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if 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>
+   <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation>
    explains that the maximum size of a filename, including the terminating
    NUL byte, is 260 = 3 + 256 + 1.
    This is the same value as
diff --git a/lib/perror.c b/lib/perror.c
index 4853d1b..91221f9 100644
--- a/lib/perror.c
+++ b/lib/perror.c
@@ -1,5 +1,5 @@
 /* Print a message describing error code.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
    Written by Bruno Haible and Simon Josefsson.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c
index d6dce5f..6201739 100644
--- a/lib/pipe-safer.c
+++ b/lib/pipe-safer.c
@@ -1,5 +1,5 @@
 /* Invoke pipe, but avoid some glitches.
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Jim Meyering.  */
 
diff --git a/lib/pipe2-safer.c b/lib/pipe2-safer.c
index 981a0ff..390d96b 100644
--- a/lib/pipe2-safer.c
+++ b/lib/pipe2-safer.c
@@ -1,5 +1,5 @@
 /* Invoke pipe2, but avoid some glitches.
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Eric Blake.  */
 
diff --git a/lib/pipe2.c b/lib/pipe2.c
index 6203fe5..134d9f1 100644
--- a/lib/pipe2.c
+++ b/lib/pipe2.c
@@ -1,5 +1,5 @@
 /* Create a pipe, with specific opening flags.
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -29,7 +29,7 @@
 # include "nonblocking.h"
 #endif
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 /* Native Windows API.  */
 
 # include <io.h>
@@ -73,7 +73,7 @@
       return -1;
     }
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 /* Native Windows API.  */
 
   if (_pipe (fd, 4096, flags & ~O_NONBLOCK) < 0)
@@ -107,7 +107,7 @@
   if (pipe (fd) < 0)
     return -1;
 
-  /* POSIX <http://www.opengroup.org/onlinepubs/9699919799/functions/pipe.html>
+  /* POSIX <https://pubs.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].  */
 
@@ -138,13 +138,13 @@
 # if O_BINARY
   if (flags & O_BINARY)
     {
-      setmode (fd[1], O_BINARY);
-      setmode (fd[0], O_BINARY);
+      set_binary_mode (fd[1], O_BINARY);
+      set_binary_mode (fd[0], O_BINARY);
     }
   else if (flags & O_TEXT)
     {
-      setmode (fd[1], O_TEXT);
-      setmode (fd[0], O_TEXT);
+      set_binary_mode (fd[1], O_TEXT);
+      set_binary_mode (fd[0], O_TEXT);
     }
 # endif
 
@@ -152,8 +152,7 @@
 
 #endif
 
-#if GNULIB_defined_O_NONBLOCK || \
-  !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+#if GNULIB_defined_O_NONBLOCK || !(defined _WIN32 && ! defined __CYGWIN__)
  fail:
   {
     int saved_errno = errno;
diff --git a/lib/printf-args.c b/lib/printf-args.c
index 47b20dc..e45cfbe 100644
--- a/lib/printf-args.c
+++ b/lib/printf-args.c
@@ -1,5 +1,5 @@
 /* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2012 Free Software
+   Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* This file can be parametrized with the following macros:
      ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
diff --git a/lib/printf-args.h b/lib/printf-args.h
index aa811af..866cba0 100644
--- a/lib/printf-args.h
+++ b/lib/printf-args.h
@@ -1,5 +1,5 @@
 /* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2012 Free Software
+   Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _PRINTF_ARGS_H
 #define _PRINTF_ARGS_H
diff --git a/lib/printf-frexp.c b/lib/printf-frexp.c
index eb47205..77eafab 100644
--- a/lib/printf-frexp.c
+++ b/lib/printf-frexp.c
@@ -1,5 +1,5 @@
 /* Split a double into fraction and mantissa, for hexadecimal printf.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if ! defined USE_LONG_DOUBLE
 # include <config.h>
diff --git a/lib/printf-frexp.h b/lib/printf-frexp.h
index 985d7d2..9310734 100644
--- a/lib/printf-frexp.h
+++ b/lib/printf-frexp.h
@@ -1,5 +1,5 @@
 /* Split a double into fraction and mantissa, for hexadecimal printf.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Write a finite, positive number x as
      x = mantissa * 2^exp
diff --git a/lib/printf-frexpl.c b/lib/printf-frexpl.c
index 568d2ff..693b889 100644
--- a/lib/printf-frexpl.c
+++ b/lib/printf-frexpl.c
@@ -1,5 +1,5 @@
 /* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/printf-frexpl.h b/lib/printf-frexpl.h
index 341dded..2760769 100644
--- a/lib/printf-frexpl.h
+++ b/lib/printf-frexpl.h
@@ -1,5 +1,5 @@
 /* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Write a finite, positive number x as
      x = mantissa * 2^exp
diff --git a/lib/printf-parse.c b/lib/printf-parse.c
index 815fd43..8596fd5 100644
--- a/lib/printf-parse.c
+++ b/lib/printf-parse.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 1999-2000, 2002-2003, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 1999-2000, 2002-2003, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* This file can be parametrized with the following macros:
      CHAR_T             The element type of the format string.
@@ -419,7 +419,7 @@
                       cp++;
                     }
 #endif
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if 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.  */
diff --git a/lib/printf-parse.h b/lib/printf-parse.h
index 577099a..746bb3f 100644
--- a/lib/printf-parse.h
+++ b/lib/printf-parse.h
@@ -1,5 +1,5 @@
 /* Parse printf format string.
-   Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2012 Free Software
+   Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _PRINTF_PARSE_H
 #define _PRINTF_PARSE_H
diff --git a/lib/printf.c b/lib/printf.c
index 11c306b..b57ae91 100644
--- a/lib/printf.c
+++ b/lib/printf.c
@@ -1,5 +1,5 @@
 /* Formatted output to a stream.
-   Copyright (C) 2007, 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/progname.c b/lib/progname.c
index bdd4dd7..a42b7fa 100644
--- a/lib/progname.c
+++ b/lib/progname.c
@@ -1,5 +1,5 @@
 /* Program name management.
-   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2001.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
diff --git a/lib/progname.h b/lib/progname.h
index a75a02e..c726e97 100644
--- a/lib/progname.h
+++ b/lib/progname.h
@@ -1,5 +1,5 @@
 /* Program name management.
-   Copyright (C) 2001-2004, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2006, 2009-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2001.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _PROGNAME_H
 #define _PROGNAME_H
diff --git a/lib/progreloc.c b/lib/progreloc.c
new file mode 100644
index 0000000..9d81efa
--- /dev/null
+++ b/lib/progreloc.c
@@ -0,0 +1,498 @@
+/* Provide relocatable programs.
+   Copyright (C) 2003-2019 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 <https://www.gnu.org/licenses/>.  */
+
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+/* Specification.  */
+#include "progname.h"
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+/* Get declaration of _NSGetExecutablePath on Mac OS X 10.2 or newer.  */
+#if HAVE_MACH_O_DYLD_H
+# include <mach-o/dyld.h>
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define WINDOWS_NATIVE
+#endif
+
+#ifdef WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#ifdef __EMX__
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#include "relocatable.h"
+
+#ifdef NO_XMALLOC
+# include "areadlink.h"
+# define xreadlink areadlink
+#else
+# include "xreadlink.h"
+#endif
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+# define xstrdup strdup
+#else
+# include "xalloc.h"
+#endif
+
+#ifndef O_EXEC
+# define O_EXEC O_RDONLY /* This is often close enough in older systems.  */
+#endif
+
+/* Declare canonicalize_file_name.
+   The <stdlib.h> included above may be the system's one, not the gnulib
+   one.  */
+extern char * canonicalize_file_name (const char *name);
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
+  /* Native Windows, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILE_SYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Use the system functions, not the gnulib overrides in this file.  */
+#undef sprintf
+
+#undef set_program_name
+
+
+#if ENABLE_RELOCATABLE
+
+#ifdef __sun
+
+/* Helper function, from gnulib module 'safe-read'.  */
+static size_t
+safe_read (int fd, void *buf, size_t count)
+{
+  for (;;)
+    {
+      ssize_t result = read (fd, buf, count);
+
+      if (0 <= result || errno != EINTR)
+        return result;
+    }
+}
+
+/* Helper function, from gnulib module 'full-read'.  */
+static size_t
+full_read (int fd, void *buf, size_t count)
+{
+  size_t total = 0;
+  const char *ptr = (const char *) buf;
+
+  while (count > 0)
+    {
+      size_t n = safe_read (fd, ptr, count);
+      if (n == (size_t) -1)
+        break;
+      if (n == 0)
+        {
+          errno = 0;
+          break;
+        }
+      total += n;
+      ptr += n;
+      count -= n;
+    }
+
+  return total;
+}
+
+#endif
+
+#if defined __linux__ || defined __CYGWIN__
+/* File descriptor of the executable.
+   (Only used to verify that we find the correct executable.)  */
+static int executable_fd = -1;
+#endif
+
+/* Define this function only when it's needed.  */
+#if !(defined WINDOWS_NATIVE || defined __EMX__)
+
+/* Tests whether a given pathname may belong to the executable.  */
+static bool
+maybe_executable (const char *filename)
+{
+  /* The native Windows API lacks the access() function.  */
+# if !defined WINDOWS_NATIVE
+  if (access (filename, X_OK) < 0)
+    return false;
+# endif
+
+# if defined __linux__ || defined __CYGWIN__
+  if (executable_fd >= 0)
+    {
+      /* If we already have an executable_fd, check that filename points to
+         the same inode.  */
+      struct stat statexe;
+      struct stat statfile;
+
+      if (fstat (executable_fd, &statexe) >= 0)
+        {
+          if (stat (filename, &statfile) < 0)
+            return false;
+          if (!(statfile.st_dev
+                && statfile.st_dev == statexe.st_dev
+                && statfile.st_ino == statexe.st_ino))
+            return false;
+        }
+    }
+# endif
+
+  return true;
+}
+
+#endif
+
+/* Determine the full pathname of the current executable, freshly allocated.
+   Return NULL if unknown.
+   Guaranteed to work on Linux and native Windows.  Likely to work on the
+   other Unixes (maybe except BeOS), under most conditions.  */
+static char *
+find_executable (const char *argv0)
+{
+#if defined WINDOWS_NATIVE
+  /* Native Windows only.
+     On Cygwin, it is better to use the Cygwin provided /proc interface, than
+     to use native Windows API and cygwin_conv_to_posix_path, because it
+     supports longer file names
+     (see <https://cygwin.com/ml/cygwin/2011-01/msg00410.html>).  */
+  char location[MAX_PATH];
+  int length = GetModuleFileName (NULL, location, sizeof (location));
+  if (length < 0)
+    return NULL;
+  if (!IS_PATH_WITH_DIR (location))
+    /* Shouldn't happen.  */
+    return NULL;
+  return xstrdup (location);
+#elif defined __EMX__
+  PPIB ppib;
+  char location[CCHMAXPATH];
+
+  /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/619_L2H_DosGetInfoBlocksSynt.html
+     for specification of DosGetInfoBlocks().  */
+  if (DosGetInfoBlocks (NULL, &ppib))
+    return NULL;
+
+  /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html
+     for specification of DosQueryModuleName().  */
+  if (DosQueryModuleName (ppib->pib_hmte, sizeof (location), location))
+    return NULL;
+
+  _fnslashify (location);
+
+  return xstrdup (location);
+#else /* Unix */
+# if defined __linux__
+  /* The executable is accessible as /proc/<pid>/exe.  In newer Linux
+     versions, also as /proc/self/exe.  Linux >= 2.1 provides a symlink
+     to the true pathname; older Linux versions give only device and ino,
+     enclosed in brackets, which we cannot use here.  */
+  {
+    char *link;
+
+    link = xreadlink ("/proc/self/exe");
+    if (link != NULL && link[0] != '[')
+      return link;
+    if (executable_fd < 0)
+      executable_fd = open ("/proc/self/exe", O_EXEC, 0);
+
+    {
+      char buf[6+10+5];
+      sprintf (buf, "/proc/%d/exe", getpid ());
+      link = xreadlink (buf);
+      if (link != NULL && link[0] != '[')
+        return link;
+      if (executable_fd < 0)
+        executable_fd = open (buf, O_EXEC, 0);
+    }
+  }
+# endif
+# if defined __ANDROID__ || defined __FreeBSD_kernel__
+  /* On Android and GNU/kFreeBSD, the executable is accessible as
+     /proc/<pid>/exe and /proc/self/exe.  */
+  {
+    char *link;
+
+    link = xreadlink ("/proc/self/exe");
+    if (link != NULL)
+      return link;
+  }
+# endif
+# if defined __FreeBSD__ || defined __DragonFly__
+  /* In FreeBSD >= 5.0, the executable is accessible as /proc/<pid>/file and
+     /proc/curproc/file.  */
+  {
+    char *link;
+
+    link = xreadlink ("/proc/curproc/file");
+    if (link != NULL)
+      {
+        if (strcmp (link, "unknown") != 0)
+          return link;
+        free (link);
+      }
+  }
+# endif
+# if defined __NetBSD__
+  /* In NetBSD >= 4.0, the executable is accessible as /proc/<pid>/exe and
+     /proc/curproc/exe.  */
+  {
+    char *link;
+
+    link = xreadlink ("/proc/curproc/exe");
+    if (link != NULL)
+      return link;
+  }
+# endif
+# if defined __sun
+  /* On Solaris >= 11.4, /proc/<pid>/execname and /proc/self/execname contains
+     the name of the executable, either as an absolute file name or relative to
+     the current directory.  */
+  {
+    char namebuf[4096];
+    int fd = open ("/proc/self/execname", O_RDONLY, 0);
+    if (fd >= 0)
+      {
+        size_t len = full_read (fd, namebuf, sizeof (namebuf));
+        close (fd);
+        if (len > 0 && len < sizeof (namebuf))
+          {
+            namebuf[len] = '\0';
+            return canonicalize_file_name (namebuf);
+          }
+      }
+  }
+# endif
+# if defined __CYGWIN__
+  /* The executable is accessible as /proc/<pid>/exe, at least in
+     Cygwin >= 1.5.  */
+  {
+    char *link;
+
+    link = xreadlink ("/proc/self/exe");
+    if (link != NULL)
+      return link;
+    if (executable_fd < 0)
+      executable_fd = open ("/proc/self/exe", O_EXEC, 0);
+  }
+# endif
+# if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH
+  /* On Mac OS X 10.2 or newer, the function
+       int _NSGetExecutablePath (char *buf, uint32_t *bufsize);
+     can be used to retrieve the executable's full path.  */
+  char location[4096];
+  unsigned int length = sizeof (location);
+  if (_NSGetExecutablePath (location, &length) == 0
+      && location[0] == '/')
+    return canonicalize_file_name (location);
+# endif
+  /* Guess the executable's full path.  We assume the executable has been
+     called via execlp() or execvp() with properly set up argv[0].  The
+     login(1) convention to add a '-' prefix to argv[0] is not supported.  */
+  {
+    bool has_slash = false;
+    {
+      const char *p;
+      for (p = argv0; *p; p++)
+        if (*p == '/')
+          {
+            has_slash = true;
+            break;
+          }
+    }
+    if (!has_slash)
+      {
+        /* exec searches paths without slashes in the directory list given
+           by $PATH.  */
+        const char *path = getenv ("PATH");
+
+        if (path != NULL)
+          {
+            const char *p;
+            const char *p_next;
+
+            for (p = path; *p; p = p_next)
+              {
+                const char *q;
+                size_t p_len;
+                char *concat_name;
+
+                for (q = p; *q; q++)
+                  if (*q == ':')
+                    break;
+                p_len = q - p;
+                p_next = (*q == '\0' ? q : q + 1);
+
+                /* We have a path item at p, of length p_len.
+                   Now concatenate the path item and argv0.  */
+                concat_name = (char *) xmalloc (p_len + strlen (argv0) + 2);
+# ifdef NO_XMALLOC
+                if (concat_name == NULL)
+                  return NULL;
+# endif
+                if (p_len == 0)
+                  /* An empty PATH element designates the current directory.  */
+                  strcpy (concat_name, argv0);
+                else
+                  {
+                    memcpy (concat_name, p, p_len);
+                    concat_name[p_len] = '/';
+                    strcpy (concat_name + p_len + 1, argv0);
+                  }
+                if (maybe_executable (concat_name))
+                  return canonicalize_file_name (concat_name);
+                free (concat_name);
+              }
+          }
+        /* Not found in the PATH, assume the current directory.  */
+      }
+    /* exec treats paths containing slashes as relative to the current
+       directory.  */
+    if (maybe_executable (argv0))
+      return canonicalize_file_name (argv0);
+  }
+  /* No way to find the executable.  */
+  return NULL;
+#endif
+}
+
+/* Full pathname of executable, or NULL.  */
+static char *executable_fullname;
+
+static void
+prepare_relocate (const char *orig_installprefix, const char *orig_installdir,
+                  const char *argv0)
+{
+  char *curr_prefix;
+
+  /* Determine the full pathname of the current executable.  */
+  executable_fullname = find_executable (argv0);
+
+  /* Determine the current installation prefix from it.  */
+  curr_prefix = compute_curr_prefix (orig_installprefix, orig_installdir,
+                                     executable_fullname);
+  if (curr_prefix != NULL)
+    {
+      /* Now pass this prefix to all copies of the relocate.c source file.  */
+      set_relocation_prefix (orig_installprefix, curr_prefix);
+
+      free (curr_prefix);
+    }
+}
+
+/* Set program_name, based on argv[0], and original installation prefix and
+   directory, for relocatability.  */
+void
+set_program_name_and_installdir (const char *argv0,
+                                 const char *orig_installprefix,
+                                 const char *orig_installdir)
+{
+  const char *argv0_stripped = argv0;
+
+  /* Relocatable programs are renamed to .bin by install-reloc.  Or, more
+     generally, their suffix is changed from $exeext to .bin$exeext.
+     Remove the ".bin" here.  */
+  {
+    size_t argv0_len = strlen (argv0);
+    const size_t exeext_len = sizeof (EXEEXT) - sizeof ("");
+    if (argv0_len > 4 + exeext_len)
+      if (memcmp (argv0 + argv0_len - exeext_len - 4, ".bin", 4) == 0)
+        {
+          if (sizeof (EXEEXT) > sizeof (""))
+            {
+              /* Compare using an inlined copy of c_strncasecmp(), because
+                 the filenames may have undergone a case conversion since
+                 they were packaged.  In other words, EXEEXT may be ".exe"
+                 on one system and ".EXE" on another.  */
+              static const char exeext[] = EXEEXT;
+              const char *s1 = argv0 + argv0_len - exeext_len;
+              const char *s2 = exeext;
+              for (; *s1 != '\0'; s1++, s2++)
+                {
+                  unsigned char c1 = *s1;
+                  unsigned char c2 = *s2;
+                  if ((c1 >= 'A' && c1 <= 'Z' ? c1 - 'A' + 'a' : c1)
+                      != (c2 >= 'A' && c2 <= 'Z' ? c2 - 'A' + 'a' : c2))
+                    goto done_stripping;
+                }
+            }
+          /* Remove ".bin" before EXEEXT or its equivalent.  */
+          {
+            char *shorter = (char *) xmalloc (argv0_len - 4 + 1);
+#ifdef NO_XMALLOC
+            if (shorter != NULL)
+#endif
+              {
+                memcpy (shorter, argv0, argv0_len - exeext_len - 4);
+                if (sizeof (EXEEXT) > sizeof (""))
+                  memcpy (shorter + argv0_len - exeext_len - 4,
+                          argv0 + argv0_len - exeext_len - 4,
+                          exeext_len);
+                shorter[argv0_len - 4] = '\0';
+                argv0_stripped = shorter;
+              }
+          }
+         done_stripping: ;
+      }
+  }
+
+  set_program_name (argv0_stripped);
+
+  prepare_relocate (orig_installprefix, orig_installdir, argv0);
+}
+
+/* Return the full pathname of the current executable, based on the earlier
+   call to set_program_name_and_installdir.  Return NULL if unknown.  */
+char *
+get_full_program_name (void)
+{
+  return executable_fullname;
+}
+
+#endif
diff --git a/lib/quote.h b/lib/quote.h
index e3b332d..5cef8ff 100644
--- a/lib/quote.h
+++ b/lib/quote.h
@@ -1,6 +1,6 @@
 /* quote.h - prototypes for quote.c
 
-   Copyright (C) 1998-2001, 2003, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-2001, 2003, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef QUOTE_H_
 # define QUOTE_H_ 1
diff --git a/lib/quotearg.c b/lib/quotearg.c
index 7fb866d..773d53f 100644
--- a/lib/quotearg.c
+++ b/lib/quotearg.c
@@ -1,6 +1,6 @@
 /* quotearg.c - quote arguments for output
 
-   Copyright (C) 1998-2002, 2004-2012 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert <eggert@twinsun.com> */
 
@@ -29,6 +29,7 @@
 #include "quotearg.h"
 #include "quote.h"
 
+#include "minmax.h"
 #include "xalloc.h"
 #include "c-strcaseeq.h"
 #include "localcharset.h"
@@ -37,6 +38,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <stdbool.h>
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 #include <wchar.h>
@@ -52,6 +54,14 @@
 
 #define INT_BITS (sizeof (int) * CHAR_BIT)
 
+#ifndef FALLTHROUGH
+# if __GNUC__ < 7
+#  define FALLTHROUGH ((void) 0)
+# else
+#  define FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+#endif
+
 struct quoting_options
 {
   /* Basic quoting style.  */
@@ -77,6 +87,8 @@
   "literal",
   "shell",
   "shell-always",
+  "shell-escape",
+  "shell-escape-always",
   "c",
   "c-maybe",
   "escape",
@@ -91,6 +103,8 @@
   literal_quoting_style,
   shell_quoting_style,
   shell_always_quoting_style,
+  shell_escape_quoting_style,
+  shell_escape_always_quoting_style,
   c_quoting_style,
   c_maybe_quoting_style,
   escape_quoting_style,
@@ -116,7 +130,7 @@
 
 /* Get the value of O's quoting style.  If O is null, use the default.  */
 enum quoting_style
-get_quoting_style (struct quoting_options *o)
+get_quoting_style (struct quoting_options const *o)
 {
   return (o ? o : &default_quoting_options)->style;
 }
@@ -178,7 +192,7 @@
 static struct quoting_options /* NOT PURE!! */
 quoting_options_from_style (enum quoting_style style)
 {
-  struct quoting_options o = { 0, 0, { 0 }, NULL, NULL };
+  struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL };
   if (style == custom_quoting_style)
     abort ();
   o.style = style;
@@ -248,11 +262,15 @@
 {
   size_t i;
   size_t len = 0;
+  size_t orig_buffersize = 0;
   char const *quote_string = 0;
   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;
+  bool pending_shell_escape_end = false;
+  bool encountered_single_quote = false;
+  bool all_c_and_shell_quote_compat = true;
 
 #define STORE(c) \
     do \
@@ -263,12 +281,44 @@
       } \
     while (0)
 
+#define START_ESC() \
+    do \
+      { \
+        if (elide_outer_quotes) \
+          goto force_outer_quoting_style; \
+        escaping = true; \
+        if (quoting_style == shell_always_quoting_style \
+            && ! pending_shell_escape_end) \
+          { \
+            STORE ('\''); \
+            STORE ('$'); \
+            STORE ('\''); \
+            pending_shell_escape_end = true; \
+          } \
+        STORE ('\\'); \
+      } \
+    while (0)
+
+#define END_ESC() \
+    do \
+      { \
+        if (pending_shell_escape_end && ! escaping) \
+          { \
+            STORE ('\''); \
+            STORE ('\''); \
+            pending_shell_escape_end = false; \
+          } \
+      } \
+    while (0)
+
+ process_input:
+
   switch (quoting_style)
     {
     case c_maybe_quoting_style:
       quoting_style = c_quoting_style;
       elide_outer_quotes = true;
-      /* Fall through.  */
+      FALLTHROUGH;
     case c_quoting_style:
       if (!elide_outer_quotes)
         STORE ('"');
@@ -307,7 +357,7 @@
                for your locale.
 
                If you don't know what to put here, please see
-               <http://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+               <https://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);
@@ -321,11 +371,18 @@
       }
       break;
 
+    case shell_escape_quoting_style:
+      backslash_escapes = true;
+      FALLTHROUGH;
     case shell_quoting_style:
-      quoting_style = shell_always_quoting_style;
       elide_outer_quotes = true;
-      /* Fall through.  */
+      FALLTHROUGH;
+    case shell_escape_always_quoting_style:
+      if (!elide_outer_quotes)
+        backslash_escapes = true;
+      FALLTHROUGH;
     case shell_always_quoting_style:
+      quoting_style = shell_always_quoting_style;
       if (!elide_outer_quotes)
         STORE ('\'');
       quote_string = "'";
@@ -345,10 +402,18 @@
       unsigned char c;
       unsigned char esc;
       bool is_right_quote = false;
+      bool escaping = false;
+      bool c_and_shell_quote_compat = false;
 
       if (backslash_escapes
+          && quoting_style != shell_always_quoting_style
           && quote_string_len
-          && i + quote_string_len <= argsize
+          && (i + quote_string_len
+              <= (argsize == SIZE_MAX && 1 < quote_string_len
+                  /* Use strlen only if we must: when argsize is SIZE_MAX,
+                     and when the quote string is more than 1 byte long.
+                     If we do call strlen, save the result.  */
+                  ? (argsize = strlen (arg)) : argsize))
           && memcmp (arg + i, quote_string, quote_string_len) == 0)
         {
           if (elide_outer_quotes)
@@ -362,15 +427,15 @@
         case '\0':
           if (backslash_escapes)
             {
-              if (elide_outer_quotes)
-                goto force_outer_quoting_style;
-              STORE ('\\');
+              START_ESC ();
               /* 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')
+                 accept them.  Use only a single \0 with shell-escape
+                 as currently digits are not printed within $'...'  */
+              if (quoting_style != shell_always_quoting_style
+                  && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
                 {
                   STORE ('0');
                   STORE ('0');
@@ -431,6 +496,14 @@
         case '\t': esc = 't'; goto c_and_shell_escape;
         case '\v': esc = 'v'; goto c_escape;
         case '\\': esc = c;
+          /* Never need to escape '\' in shell case.  */
+          if (quoting_style == shell_always_quoting_style)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              goto store_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)
@@ -440,7 +513,7 @@
           if (quoting_style == shell_always_quoting_style
               && elide_outer_quotes)
             goto force_outer_quoting_style;
-          /* Fall through.  */
+          /* fall through */
         c_escape:
           if (backslash_escapes)
             {
@@ -452,12 +525,14 @@
         case '{': case '}': /* sometimes special if isolated */
           if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
             break;
-          /* Fall through.  */
+          FALLTHROUGH;
         case '#': case '~':
           if (i != 0)
             break;
-          /* Fall through.  */
+          FALLTHROUGH;
         case ' ':
+          c_and_shell_quote_compat = true;
+          FALLTHROUGH;
         case '!': /* special in bash */
         case '"': case '$': case '&':
         case '(': case ')': case '*': case ';':
@@ -476,13 +551,26 @@
           break;
 
         case '\'':
+          encountered_single_quote = true;
+          c_and_shell_quote_compat = true;
           if (quoting_style == shell_always_quoting_style)
             {
               if (elide_outer_quotes)
                 goto force_outer_quoting_style;
+
+              if (buffersize && ! orig_buffersize)
+                {
+                  /* Just scan string to see if supports a more concise
+                     representation, rather than writing a longer string
+                     but returning the length of the more concise form.  */
+                  orig_buffersize = buffersize;
+                  buffersize = 0;
+                }
+
               STORE ('\'');
               STORE ('\\');
               STORE ('\'');
+              pending_shell_escape_end = false;
             }
           break;
 
@@ -508,6 +596,7 @@
              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.  */
+          c_and_shell_quote_compat = true;
           break;
 
         default:
@@ -586,6 +675,8 @@
                 while (! mbsinit (&mbstate));
               }
 
+            c_and_shell_quote_compat = printable;
+
             if (1 < m || (backslash_escapes && ! printable))
               {
                 /* Output a multibyte sequence, or an escaped
@@ -596,9 +687,7 @@
                   {
                     if (backslash_escapes && ! printable)
                       {
-                        if (elide_outer_quotes)
-                          goto force_outer_quoting_style;
-                        STORE ('\\');
+                        START_ESC ();
                         STORE ('0' + (c >> 6));
                         STORE ('0' + ((c >> 3) & 7));
                         c = '0' + (c & 7);
@@ -610,6 +699,7 @@
                       }
                     if (ilim <= i + 1)
                       break;
+                    END_ESC ();
                     STORE (c);
                     c = arg[++i];
                   }
@@ -619,25 +709,49 @@
           }
         }
 
-      if (! ((backslash_escapes || elide_outer_quotes)
+      if (! (((backslash_escapes && quoting_style != shell_always_quoting_style)
+              || elide_outer_quotes)
              && quote_these_too
-             && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
+             && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1)
           && !is_right_quote)
         goto store_c;
 
     store_escape:
-      if (elide_outer_quotes)
-        goto force_outer_quoting_style;
-      STORE ('\\');
+      START_ESC ();
 
     store_c:
+      END_ESC ();
       STORE (c);
+
+      if (! c_and_shell_quote_compat)
+        all_c_and_shell_quote_compat = false;
     }
 
   if (len == 0 && quoting_style == shell_always_quoting_style
       && elide_outer_quotes)
     goto force_outer_quoting_style;
 
+  /* Single shell quotes (') are commonly enough used as an apostrophe,
+     that we attempt to minimize the quoting in this case.  Note itʼs
+     better to use the apostrophe modifier "\u02BC" if possible, as that
+     renders better and works with the word match regex \W+ etc.  */
+  if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes
+      && encountered_single_quote)
+    {
+      if (all_c_and_shell_quote_compat)
+        return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize,
+                                         c_quoting_style,
+                                         flags, quote_these_too,
+                                         left_quote, right_quote);
+      else if (! buffersize && orig_buffersize)
+        {
+          /* Disable read-only scan, and reprocess to write quoted string.  */
+          buffersize = orig_buffersize;
+          len = 0;
+          goto process_input;
+        }
+    }
+
   if (quote_string && !elide_outer_quotes)
     for (; *quote_string; quote_string++)
       STORE (*quote_string);
@@ -649,6 +763,8 @@
  force_outer_quoting_style:
   /* Don't reuse quote_these_too, since the addition of outer quotes
      sufficiently quotes the specified characters.  */
+  if (quoting_style == shell_always_quoting_style && backslash_escapes)
+    quoting_style = shell_escape_always_quoting_style;
   return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
                                    quoting_style,
                                    flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
@@ -724,7 +840,7 @@
 /* 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 int nslots = 1;
 static struct slotvec slotvec0 = {sizeof slot0, slot0};
 static struct slotvec *slotvec = &slotvec0;
 
@@ -732,7 +848,7 @@
 quotearg_free (void)
 {
   struct slotvec *sv = slotvec;
-  unsigned int i;
+  int i;
   for (i = 1; i < nslots; i++)
     free (sv[i].val);
   if (sv[0].val != slot0)
@@ -763,30 +879,24 @@
 {
   int e = errno;
 
-  unsigned int n0 = n;
   struct slotvec *sv = slotvec;
 
   if (n < 0)
     abort ();
 
-  if (nslots <= n0)
+  if (nslots <= n)
     {
-      /* 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);
+      int nmax = MIN (INT_MAX, MIN (PTRDIFF_MAX, SIZE_MAX) / sizeof *sv) - 1;
 
-      if (xalloc_oversized (n1, sizeof *sv))
+      if (nmax < n)
         xalloc_die ();
 
-      slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
+      slotvec = sv = xrealloc (preallocated ? NULL : sv, (n + 1) * sizeof *sv);
       if (preallocated)
         *sv = slotvec0;
-      memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
-      nslots = n1;
+      memset (sv + nslots, 0, (n + 1 - nslots) * sizeof *sv);
+      nslots = n + 1;
     }
 
   {
@@ -896,6 +1006,15 @@
 }
 
 char *
+quotearg_n_style_colon (int n, enum quoting_style s, char const *arg)
+{
+  struct quoting_options options;
+  options = quoting_options_from_style (s);
+  set_char_quoting (&options, ':', 1);
+  return quotearg_n_options (n, arg, SIZE_MAX, &options);
+}
+
+char *
 quotearg_n_custom (int n, char const *left_quote,
                    char const *right_quote, char const *arg)
 {
@@ -961,3 +1080,10 @@
 {
   return quote_n (0, arg);
 }
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/quotearg.h b/lib/quotearg.h
index e6b08ab..0f07e02 100644
--- a/lib/quotearg.h
+++ b/lib/quotearg.h
@@ -1,6 +1,6 @@
 /* quotearg.h - quote arguments for output
 
-   Copyright (C) 1998-2002, 2004, 2006, 2008-2012 Free Software Foundation,
+   Copyright (C) 1998-2002, 2004, 2006, 2008-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert <eggert@twinsun.com> */
 
@@ -73,6 +73,37 @@
     */
     shell_always_quoting_style,
 
+    /* Quote names for the shell if they contain shell metacharacters
+       or other problematic characters (ls --quoting-style=shell-escape).
+       Non printable characters are quoted using the $'...' syntax,
+       which originated in ksh93 and is widely supported by most shells,
+       and proposed for inclusion in POSIX.
+
+       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'"
+    */
+    shell_escape_quoting_style,
+
+    /* Quote names for the shell even if they would normally not
+       require quoting (ls --quoting-style=shell-escape).
+       Non printable characters are quoted using the $'...' syntax,
+       which originated in ksh93 and is widely supported by most shells,
+       and proposed for inclusion in POSIX.  Behaves like
+       shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect.
+
+       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'"
+    */
+    shell_escape_always_quoting_style,
+
     /* 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
@@ -247,7 +278,7 @@
 struct quoting_options *clone_quoting_options (struct quoting_options *o);
 
 /* Get the value of O's quoting style.  If O is null, use the default.  */
-enum quoting_style get_quoting_style (struct quoting_options *o);
+enum quoting_style get_quoting_style (struct quoting_options const *o);
 
 /* In O (or in the default if O is null),
    set the value of the quoting style to S.  */
@@ -362,6 +393,9 @@
 /* Like quotearg_colon (ARG), except it can quote null bytes.  */
 char *quotearg_colon_mem (char const *arg, size_t argsize);
 
+/* Like quotearg_n_style, except with ':' quoting enabled.  */
+char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg);
+
 /* 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
diff --git a/lib/raise.c b/lib/raise.c
index f975dcd..e750b7a 100644
--- a/lib/raise.c
+++ b/lib/raise.c
@@ -1,6 +1,6 @@
 /* Provide a non-threads replacement for the POSIX raise function.
 
-   Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Jim Meyering and Bruno Haible */
 
@@ -27,11 +27,41 @@
 
 # include <errno.h>
 
-# include "msvc-inval.h"
-
-# undef raise
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+#  include "msvc-inval.h"
+# endif
 
 # if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+/* Forward declaration.  */
+static int raise_nothrow (int sig);
+# else
+#  define raise_nothrow raise
+# endif
+
+#else
+/* An old Unix platform.  */
+
+# include <unistd.h>
+
+#endif
+
+int
+raise (int sig)
+#undef raise
+{
+#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
+}
+
+#if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER
 static int
 raise_nothrow (int sig)
 {
@@ -50,30 +80,4 @@
 
   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
index c94a0e1..7df6151 100644
--- a/lib/rawmemchr.c
+++ b/lib/rawmemchr.c
@@ -1,5 +1,5 @@
 /* Searching in a string.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/rawmemchr.valgrind b/lib/rawmemchr.valgrind
index 6363923..3d91a72 100644
--- a/lib/rawmemchr.valgrind
+++ b/lib/rawmemchr.valgrind
@@ -1,4 +1,20 @@
 # Suppress a valgrind message about use of uninitialized memory in rawmemchr().
+
+# Copyright (C) 2008-2019 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 <https://www.gnu.org/licenses/>.
+
 # This use is OK because it provides only a speedup.
 {
     rawmemchr-value4
diff --git a/lib/readlink.c b/lib/readlink.c
new file mode 100644
index 0000000..bf71109
--- /dev/null
+++ b/lib/readlink.c
@@ -0,0 +1,74 @@
+/* Stub for readlink().
+   Copyright (C) 2003-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_READLINK
+
+/* readlink() substitute for systems that don't have a readlink() function,
+   such as DJGPP 2.03 and mingw32.  */
+
+ssize_t
+readlink (const char *name, char *buf _GL_UNUSED,
+          size_t bufsize _GL_UNUSED)
+{
+  struct stat statbuf;
+
+  /* In general we should use lstat() here, not stat().  But on platforms
+     without symbolic links, lstat() - if it exists - would be equivalent to
+     stat(), therefore we can use stat().  This saves us a configure check.  */
+  if (stat (name, &statbuf) >= 0)
+    errno = EINVAL;
+  return -1;
+}
+
+#else /* HAVE_READLINK */
+
+# undef readlink
+
+/* readlink() wrapper that uses correct types, for systems like cygwin
+   1.5.x where readlink returns int, and which rejects trailing slash,
+   for Solaris 9.  */
+
+ssize_t
+rpl_readlink (const char *name, char *buf, size_t bufsize)
+{
+# if READLINK_TRAILING_SLASH_BUG
+  size_t len = strlen (name);
+  if (len && name[len - 1] == '/')
+    {
+      /* Even if name without the slash is a symlink to a directory,
+         both lstat() and stat() must resolve the trailing slash to
+         the directory rather than the symlink.  We can therefore
+         safely use stat() to distinguish between EINVAL and
+         ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat().  */
+      struct stat st;
+      if (stat (name, &st) == 0)
+        errno = EINVAL;
+      return -1;
+    }
+# endif /* READLINK_TRAILING_SLASH_BUG */
+  return readlink (name, buf, bufsize);
+}
+
+#endif /* HAVE_READLINK */
diff --git a/lib/realloc.c b/lib/realloc.c
index 99556cc..a81ce3b 100644
--- a/lib/realloc.c
+++ b/lib/realloc.c
@@ -1,6 +1,6 @@
 /* realloc() function that is glibc compatible.
 
-   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2012 Free Software
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* written by Jim Meyering and Bruno Haible */
 
diff --git a/lib/ref-add.sin b/lib/ref-add.sin
deleted file mode 100644
index 4ec043f..0000000
--- a/lib/ref-add.sin
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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
deleted file mode 100644
index eb03881..0000000
--- a/lib/ref-del.sin
+++ /dev/null
@@ -1,24 +0,0 @@
-# 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/relocatable.c b/lib/relocatable.c
new file mode 100644
index 0000000..de431e7
--- /dev/null
+++ b/lib/relocatable.c
@@ -0,0 +1,588 @@
+/* Provide relocatable packages.
+   Copyright (C) 2003-2006, 2008-2019 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 <https://www.gnu.org/licenses/>.  */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+   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
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+/* Specification.  */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xalloc.h"
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#ifdef __EMX__
+# define INCL_DOS
+# include <os2.h>
+
+# define strcmp  stricmp
+# define strncmp strnicmp
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'.  */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
+  /* Native Windows, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILE_SYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Whether to enable the more costly support for relocatable libraries.
+   It allows libraries to be have been installed with a different original
+   prefix than the program.  But it is quite costly, especially on Cygwin
+   platforms, see below.  Therefore we enable it by default only on native
+   Windows platforms.  */
+#ifndef ENABLE_COSTLY_RELOCATABLE
+# if defined _WIN32 && !defined __CYGWIN__
+#  define ENABLE_COSTLY_RELOCATABLE 1
+# else
+#  define ENABLE_COSTLY_RELOCATABLE 0
+# endif
+#endif
+
+/* Original installation prefix.  */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix.  */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash.  Anything that will be concatenated
+   to them must start with a slash.  */
+
+/* Sets the original and the current installation prefix of this module.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+                            const char *curr_prefix_arg)
+{
+  if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+      /* Optimization: if orig_prefix and curr_prefix are equal, the
+         relocation is a nop.  */
+      && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+    {
+      /* Duplicate the argument strings.  */
+      char *memory;
+
+      orig_prefix_len = strlen (orig_prefix_arg);
+      curr_prefix_len = strlen (curr_prefix_arg);
+      memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+      if (memory != NULL)
+#endif
+        {
+          memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+          orig_prefix = memory;
+          memory += orig_prefix_len + 1;
+          memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+          curr_prefix = memory;
+          return;
+        }
+    }
+  orig_prefix = NULL;
+  curr_prefix = NULL;
+  /* Don't worry about wasted memory here - this function is usually only
+     called once.  */
+}
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+  set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+  /* Now notify all dependent libraries.  */
+#if DEPENDS_ON_LIBCHARSET
+  libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+  libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+  libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE)
+
+/* Convenience function:
+   Computes the current installation prefix, based on the original
+   installation prefix, the original installation directory of a particular
+   file, and the current pathname of this file.
+   Returns it, freshly allocated.  Returns NULL upon failure.  */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+char *
+compute_curr_prefix (const char *orig_installprefix,
+                     const char *orig_installdir,
+                     const char *curr_pathname)
+{
+  char *curr_installdir;
+  const char *rel_installdir;
+
+  if (curr_pathname == NULL)
+    return NULL;
+
+  /* Determine the relative installation directory, relative to the prefix.
+     This is simply the difference between orig_installprefix and
+     orig_installdir.  */
+  if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+      != 0)
+    /* Shouldn't happen - nothing should be installed outside $(prefix).  */
+    return NULL;
+  rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+  /* Determine the current installation directory.  */
+  {
+    const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname);
+    const char *p = curr_pathname + strlen (curr_pathname);
+    char *q;
+
+    while (p > p_base)
+      {
+        p--;
+        if (ISSLASH (*p))
+          break;
+      }
+
+    q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+    if (q == NULL)
+      return NULL;
+#endif
+    memcpy (q, curr_pathname, p - curr_pathname);
+    q[p - curr_pathname] = '\0';
+    curr_installdir = q;
+  }
+
+  /* Compute the current installation prefix by removing the trailing
+     rel_installdir from it.  */
+  {
+    const char *rp = rel_installdir + strlen (rel_installdir);
+    const char *cp = curr_installdir + strlen (curr_installdir);
+    const char *cp_base =
+      curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir);
+
+    while (rp > rel_installdir && cp > cp_base)
+      {
+        bool same = false;
+        const char *rpi = rp;
+        const char *cpi = cp;
+
+        while (rpi > rel_installdir && cpi > cp_base)
+          {
+            rpi--;
+            cpi--;
+            if (ISSLASH (*rpi) || ISSLASH (*cpi))
+              {
+                if (ISSLASH (*rpi) && ISSLASH (*cpi))
+                  same = true;
+                break;
+              }
+            /* Do case-insensitive comparison if the file system is always or
+               often case-insensitive.  It's better to accept the comparison
+               if the difference is only in case, rather than to fail.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+            /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */
+            if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+                != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+              break;
+#else
+            if (*rpi != *cpi)
+              break;
+#endif
+          }
+        if (!same)
+          break;
+        /* The last pathname component was the same.  rpi and cpi now point
+           to the slash before it.  */
+        rp = rpi;
+        cp = cpi;
+      }
+
+    if (rp > rel_installdir)
+      {
+        /* Unexpected: The curr_installdir does not end with rel_installdir.  */
+        free (curr_installdir);
+        return NULL;
+      }
+
+    {
+      size_t computed_curr_prefix_len = cp - curr_installdir;
+      char *computed_curr_prefix;
+
+      computed_curr_prefix = (char *) xmalloc (computed_curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+      if (computed_curr_prefix == NULL)
+        {
+          free (curr_installdir);
+          return NULL;
+        }
+#endif
+      memcpy (computed_curr_prefix, curr_installdir, computed_curr_prefix_len);
+      computed_curr_prefix[computed_curr_prefix_len] = '\0';
+
+      free (curr_installdir);
+
+      return computed_curr_prefix;
+    }
+  }
+}
+
+#endif /* !IN_LIBRARY || PIC */
+
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+
+/* Full pathname of shared library, or NULL.  */
+static char *shared_library_fullname;
+
+#if defined _WIN32 && !defined __CYGWIN__
+/* Native Windows only.
+   On Cygwin, it is better to use the Cygwin provided /proc interface, than
+   to use native Windows API and cygwin_conv_to_posix_path, because it
+   supports longer file names
+   (see <https://cygwin.com/ml/cygwin/2011-01/msg00410.html>).  */
+
+/* Determine the full pathname of the shared library when it is loaded.  */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+  (void) reserved;
+
+  if (event == DLL_PROCESS_ATTACH)
+    {
+      /* The DLL is being loaded into an application's address range.  */
+      static char location[MAX_PATH];
+
+      if (!GetModuleFileName (module_handle, location, sizeof (location)))
+        /* Shouldn't happen.  */
+        return FALSE;
+
+      if (!IS_PATH_WITH_DIR (location))
+        /* Shouldn't happen.  */
+        return FALSE;
+
+      shared_library_fullname = strdup (location);
+    }
+
+  return TRUE;
+}
+
+#elif defined __EMX__
+
+extern int  _CRT_init (void);
+extern void _CRT_term (void);
+extern void __ctordtorInit (void);
+extern void __ctordtorTerm (void);
+
+unsigned long _System
+_DLL_InitTerm (unsigned long hModule, unsigned long ulFlag)
+{
+  static char location[CCHMAXPATH];
+
+  switch (ulFlag)
+    {
+      case 0:
+        if (_CRT_init () == -1)
+          return 0;
+
+        __ctordtorInit();
+
+        /* See http://cyberkinetica.homeunix.net/os2tk45/cp1/1247_L2H_DosQueryModuleNameSy.html
+           for specification of DosQueryModuleName(). */
+        if (DosQueryModuleName (hModule, sizeof (location), location))
+          return 0;
+
+        _fnslashify (location);
+        shared_library_fullname = strdup (location);
+        break;
+
+      case 1:
+        __ctordtorTerm();
+
+        _CRT_term ();
+        break;
+    }
+
+  return 1;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__
+  /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline()
+     function.
+     Cygwin >= 1.5 has /proc/self/maps and the getline() function too.
+     But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on
+     Cygwin 1.7.  */
+  FILE *fp;
+
+  /* Open the current process' maps file.  It describes one VMA per line.  */
+  fp = fopen ("/proc/self/maps", "r");
+  if (fp)
+    {
+      unsigned long address = (unsigned long) &find_shared_library_fullname;
+      for (;;)
+        {
+          unsigned long start, end;
+          int c;
+
+          if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+            break;
+          if (address >= start && address <= end - 1)
+            {
+              /* Found it.  Now see if this line contains a filename.  */
+              while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+                continue;
+              if (c == '/')
+                {
+                  size_t size;
+                  int len;
+
+                  ungetc (c, fp);
+                  shared_library_fullname = NULL; size = 0;
+                  len = getline (&shared_library_fullname, &size, fp);
+                  if (len >= 0)
+                    {
+                      /* Success: filled shared_library_fullname.  */
+                      if (len > 0 && shared_library_fullname[len - 1] == '\n')
+                        shared_library_fullname[len - 1] = '\0';
+                    }
+                }
+              break;
+            }
+          while (c = getc (fp), c != EOF && c != '\n')
+            continue;
+        }
+      fclose (fp);
+    }
+#endif
+}
+
+#endif /* Native Windows / EMX / Unix */
+
+/* Return the full pathname of the current shared library.
+   Return NULL if unknown.
+   Guaranteed to work only on Linux, EMX, Cygwin, and native Windows.  */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 && !defined __CYGWIN__) && !defined __EMX__
+  static bool tried_find_shared_library_fullname;
+  if (!tried_find_shared_library_fullname)
+    {
+      find_shared_library_fullname ();
+      tried_find_shared_library_fullname = true;
+    }
+#endif
+  return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+   directory.
+   The returned string is either PATHNAME unmodified or a freshly allocated
+   string that you can free with free() after casting it to 'char *'.  */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE
+  static int initialized;
+
+  /* Initialization code for a shared library.  */
+  if (!initialized)
+    {
+      /* At this point, orig_prefix and curr_prefix likely have already been
+         set through the main program's set_program_name_and_installdir
+         function.  This is sufficient in the case that the library has
+         initially been installed in the same orig_prefix.  But we can do
+         better, to also cover the cases that 1. it has been installed
+         in a different prefix before being moved to orig_prefix and (later)
+         to curr_prefix, 2. unlike the program, it has not moved away from
+         orig_prefix.  */
+      const char *orig_installprefix = INSTALLPREFIX;
+      const char *orig_installdir = INSTALLDIR;
+      char *curr_prefix_better;
+
+      curr_prefix_better =
+        compute_curr_prefix (orig_installprefix, orig_installdir,
+                             get_shared_library_fullname ());
+
+      set_relocation_prefix (orig_installprefix,
+                             curr_prefix_better != NULL
+                             ? curr_prefix_better
+                             : curr_prefix);
+
+      if (curr_prefix_better != NULL)
+        free (curr_prefix_better);
+
+      initialized = 1;
+    }
+#endif
+
+  /* Note: It is not necessary to perform case insensitive comparison here,
+     even for DOS-like file systems, because the pathname argument was
+     typically created from the same Makefile variable as orig_prefix came
+     from.  */
+  if (orig_prefix != NULL && curr_prefix != NULL
+      && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+    {
+      if (pathname[orig_prefix_len] == '\0')
+        {
+          /* pathname equals orig_prefix.  */
+          char *result = (char *) xmalloc (strlen (curr_prefix) + 1);
+
+#ifdef NO_XMALLOC
+          if (result != NULL)
+#endif
+            {
+              strcpy (result, curr_prefix);
+              return result;
+            }
+        }
+      else if (ISSLASH (pathname[orig_prefix_len]))
+        {
+          /* pathname starts with orig_prefix.  */
+          const char *pathname_tail = &pathname[orig_prefix_len];
+          char *result =
+            (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+          if (result != NULL)
+#endif
+            {
+              memcpy (result, curr_prefix, curr_prefix_len);
+              strcpy (result + curr_prefix_len, pathname_tail);
+              return result;
+            }
+        }
+    }
+
+#ifdef __EMX__
+# ifdef __KLIBC__
+#  undef strncmp
+
+  if (strncmp (pathname, "/@unixroot", 10) == 0
+      && (pathname[10] == '\0' || ISSLASH (pathname[10])))
+    {
+      /* kLIBC itself processes /@unixroot prefix */
+      return pathname;
+    }
+  else
+# endif
+  if (ISSLASH (pathname[0]))
+    {
+      const char *unixroot = getenv ("UNIXROOT");
+
+      if (unixroot && HAS_DEVICE (unixroot) && unixroot[2] == '\0')
+        {
+          char *result = (char *) xmalloc (2 + strlen (pathname) + 1);
+#ifdef NO_XMALLOC
+          if (result != NULL)
+#endif
+            {
+              memcpy (result, unixroot, 2);
+              strcpy (result + 2, pathname);
+              return result;
+            }
+        }
+    }
+#endif
+
+  /* Nothing to relocate.  */
+  return pathname;
+}
+
+/* Returns the pathname, relocated according to the current installation
+   directory.
+   This function sets *ALLOCATEDP to the allocated memory, or to NULL if
+   no memory allocation occurs.  So that, after you're done with the return
+   value, to reclaim allocated memory, you can do: free (*ALLOCATEDP).  */
+const char *
+relocate2 (const char *pathname, char **allocatedp)
+{
+  const char *result = relocate (pathname);
+  *allocatedp = (result != pathname ? (char *) result : NULL);
+  return result;
+}
+
+#endif
diff --git a/lib/relocatable.h b/lib/relocatable.h
new file mode 100644
index 0000000..896a7e5
--- /dev/null
+++ b/lib/relocatable.h
@@ -0,0 +1,101 @@
+/* Provide relocatable packages.
+   Copyright (C) 2003, 2005, 2008-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This can be enabled through the configure --enable-relocatable option.  */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions.  Note that because
+   this is a private .h file, we don't need to use __declspec(dllimport)
+   in any case.  */
+#if HAVE_VISIBILITY && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default")))
+#elif defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+extern RELOCATABLE_DLL_EXPORTED void
+       set_relocation_prefix (const char *orig_prefix,
+                              const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+   directory.
+   The returned string is either PATHNAME unmodified or a freshly allocated
+   string that you can free with free() after casting it to 'char *'.  */
+extern const char * relocate (const char *pathname);
+
+/* Returns the pathname, relocated according to the current installation
+   directory.
+   This function sets *ALLOCATEDP to the allocated memory, or to NULL if
+   no memory allocation occurs.  So that, after you're done with the return
+   value, to reclaim allocated memory, you can do: free (*ALLOCATEDP).  */
+extern const char * relocate2 (const char *pathname, char **allocatedp);
+
+/* Memory management: relocate() potentially allocates memory, because it has
+   to construct a fresh pathname.  If this is a problem because your program
+   calls relocate() frequently or because you want to fix all potential memory
+   leaks anyway, you have three options:
+   1) Use this idiom:
+        const char *pathname = ...;
+        const char *rel_pathname = relocate (pathname);
+        ...
+        if (rel_pathname != pathname)
+          free ((char *) rel_pathname);
+   2) Use this idiom:
+        char *allocated;
+        const char *rel_pathname = relocate2 (..., &allocated);
+        ...
+        free (allocated);
+   3) Think about caching the result.  */
+
+/* Convenience function:
+   Computes the current installation prefix, based on the original
+   installation prefix, the original installation directory of a particular
+   file, and the current pathname of this file.
+   Returns it, freshly allocated.  Returns NULL upon failure.  */
+extern char * compute_curr_prefix (const char *orig_installprefix,
+                                   const char *orig_installdir,
+                                   const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames.  */
+#define relocate(pathname) (pathname)
+#define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname))
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/lib/relocwrapper.c b/lib/relocwrapper.c
new file mode 100644
index 0000000..421b4b5
--- /dev/null
+++ b/lib/relocwrapper.c
@@ -0,0 +1,206 @@
+/* Relocating wrapper program.
+   Copyright (C) 2003, 2005-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Dependencies:
+   relocwrapper
+    -> progname
+    -> progreloc
+       -> areadlink
+          -> careadlinkat
+             -> allocator
+          -> readlink
+             -> stat
+                -> dosname
+                -> pathmax
+                -> verify
+       -> canonicalize-lgpl
+          -> malloca
+          -> lstat
+          -> readlink
+    -> relocatable
+    -> setenv
+       -> malloca
+    -> fprintf-posix [ignore, cut dependency tree here]
+    -> strerror [ignore, cut dependency tree here]
+    -> c-ctype
+
+   Macros that need to be set while compiling this file:
+     - ENABLE_RELOCATABLE 1
+     - INSTALLPREFIX the base installation directory
+     - INSTALLDIR the directory into which this program is installed
+     - LIBPATHVAR the platform dependent runtime library path variable
+     - LIBDIRS a comma-terminated list of strings representing the list of
+       directories that contain the libraries at installation time
+
+   We don't want to internationalize this wrapper because then it would
+   depend on libintl and therefore need relocation itself.  So use only
+   libc functions, no gettext(), no error(), no xmalloc(), no xsetenv().
+ */
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "progname.h"
+#include "relocatable.h"
+#include "c-ctype.h"
+#include "verify.h"
+
+/* Use the system functions, not the gnulib overrides in this file.  */
+#undef fprintf
+#undef strerror
+
+/* Return a copy of the filename, with an extra ".bin" at the end.
+   More generally, it replaces "${EXEEXT}" at the end with ".bin${EXEEXT}".  */
+static char *
+add_dotbin (const char *filename)
+{
+  size_t filename_len = strlen (filename);
+  char *result = (char *) malloc (filename_len + 4 + 1);
+
+  if (result != NULL)
+    {
+      if (sizeof (EXEEXT) > sizeof (""))
+        {
+          /* EXEEXT handling.  */
+          const size_t exeext_len = sizeof (EXEEXT) - sizeof ("");
+          static const char exeext[] = EXEEXT;
+          if (filename_len > exeext_len)
+            {
+              /* Compare using an inlined copy of c_strncasecmp(), because
+                 the filenames may have undergone a case conversion since
+                 they were packaged.  In other words, EXEEXT may be ".exe"
+                 on one system and ".EXE" on another.  */
+              const char *s1 = filename + filename_len - exeext_len;
+              const char *s2 = exeext;
+              for (; *s1 != '\0'; s1++, s2++)
+                {
+                  unsigned char c1 = *s1;
+                  unsigned char c2 = *s2;
+                  if (c_tolower (c1) != c_tolower (c2))
+                    goto simple_append;
+                }
+              /* Insert ".bin" before EXEEXT or its equivalent.  */
+              memcpy (result, filename, filename_len - exeext_len);
+              memcpy (result + filename_len - exeext_len, ".bin", 4);
+              memcpy (result + filename_len - exeext_len + 4,
+                      filename + filename_len - exeext_len,
+                      exeext_len + 1);
+              return result;
+            }
+        }
+     simple_append:
+      /* Simply append ".bin".  */
+      memcpy (result, filename, filename_len);
+      memcpy (result + filename_len, ".bin", 4 + 1);
+      return result;
+    }
+  else
+    {
+      fprintf (stderr, "%s: %s\n", program_name, "memory exhausted");
+      exit (1);
+    }
+}
+
+/* List of directories that contain the libraries.  */
+static const char *libdirs[] = { LIBDIRS NULL };
+/* Verify that at least one directory is given.  */
+verify (sizeof (libdirs) / sizeof (libdirs[0]) > 1);
+
+/* Relocate the list of directories that contain the libraries.  */
+static void
+relocate_libdirs ()
+{
+  size_t i;
+
+  for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++)
+    libdirs[i] = relocate (libdirs[i]);
+}
+
+/* Activate the list of directories in the LIBPATHVAR.  */
+static void
+activate_libdirs ()
+{
+  const char *old_value;
+  size_t total;
+  size_t i;
+  char *value;
+  char *p;
+
+  old_value = getenv (LIBPATHVAR);
+  if (old_value == NULL)
+    old_value = "";
+
+  total = 0;
+  for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++)
+    total += strlen (libdirs[i]) + 1;
+  total += strlen (old_value) + 1;
+
+  value = (char *) malloc (total);
+  if (value == NULL)
+    {
+      fprintf (stderr, "%s: %s\n", program_name, "memory exhausted");
+      exit (1);
+    }
+  p = value;
+  for (i = 0; i < sizeof (libdirs) / sizeof (libdirs[0]) - 1; i++)
+    {
+      size_t len = strlen (libdirs[i]);
+      memcpy (p, libdirs[i], len);
+      p += len;
+      *p++ = ':';
+    }
+  if (old_value[0] != '\0')
+    strcpy (p, old_value);
+  else
+    p[-1] = '\0';
+
+  if (setenv (LIBPATHVAR, value, 1) < 0)
+    {
+      fprintf (stderr, "%s: %s\n", program_name, "memory exhausted");
+      exit (1);
+    }
+}
+
+int
+main (int argc, char *argv[])
+{
+  char *full_program_name;
+
+  /* Set the program name and perform preparations for
+     get_full_program_name() and relocate().  */
+  set_program_name_and_installdir (argv[0], INSTALLPREFIX, INSTALLDIR);
+
+  /* Get the full program path.  (Important if accessed through a symlink.)  */
+  full_program_name = get_full_program_name ();
+  if (full_program_name == NULL)
+    full_program_name = argv[0];
+
+  /* Invoke the real program, with suffix ".bin".  */
+  argv[0] = add_dotbin (full_program_name);
+  relocate_libdirs ();
+  activate_libdirs ();
+  execv (argv[0], argv);
+  fprintf (stderr, "%s: could not execute %s: %s\n",
+           program_name, argv[0], strerror (errno));
+  exit (127);
+}
diff --git a/lib/rename.c b/lib/rename.c
new file mode 100644
index 0000000..9d88e5c
--- /dev/null
+++ b/lib/rename.c
@@ -0,0 +1,475 @@
+/* Work around rename bugs in some systems.
+
+   Copyright (C) 2001-2003, 2005-2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Volker Borchert, Eric Blake.  */
+
+#include <config.h>
+
+#include <stdio.h>
+
+#undef rename
+
+#if defined _WIN32 && ! defined __CYGWIN__
+/* The mingw rename has problems with trailing slashes; it also
+   requires use of native Windows calls to allow atomic renames over
+   existing files.  */
+
+# include <errno.h>
+# include <stdbool.h>
+# include <stdlib.h>
+# include <sys/stat.h>
+# include <unistd.h>
+
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+# include "dirname.h"
+
+/* Rename the file SRC to DST.  This replacement is necessary on
+   Windows, on which the system rename function will not replace
+   an existing DST.  */
+int
+rpl_rename (char const *src, char const *dst)
+{
+  int error;
+  size_t src_len = strlen (src);
+  size_t dst_len = strlen (dst);
+  char *src_base = last_component (src);
+  char *dst_base = last_component (dst);
+  bool src_slash;
+  bool dst_slash;
+  bool dst_exists;
+  struct stat src_st;
+  struct stat dst_st;
+
+  /* Filter out dot as last component.  */
+  if (!src_len || !dst_len)
+    {
+      errno = ENOENT;
+      return -1;
+    }
+  if (*src_base == '.')
+    {
+      size_t len = base_len (src_base);
+      if (len == 1 || (len == 2 && src_base[1] == '.'))
+        {
+          errno = EINVAL;
+          return -1;
+        }
+    }
+  if (*dst_base == '.')
+    {
+      size_t len = base_len (dst_base);
+      if (len == 1 || (len == 2 && dst_base[1] == '.'))
+        {
+          errno = EINVAL;
+          return -1;
+        }
+    }
+
+  /* Presence of a trailing slash requires directory semantics.  If
+     the source does not exist, or if the destination cannot be turned
+     into a directory, give up now.  Otherwise, strip trailing slashes
+     before calling rename.  There are no symlinks on mingw, so stat
+     works instead of lstat.  */
+  src_slash = ISSLASH (src[src_len - 1]);
+  dst_slash = ISSLASH (dst[dst_len - 1]);
+  if (stat (src, &src_st))
+    return -1;
+  if (stat (dst, &dst_st))
+    {
+      if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash))
+        return -1;
+      dst_exists = false;
+    }
+  else
+    {
+      if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode))
+        {
+          errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR;
+          return -1;
+        }
+      dst_exists = true;
+    }
+
+  /* There are no symlinks, so if a file existed with a trailing
+     slash, it must be a directory, and we don't have to worry about
+     stripping strip trailing slash.  However, mingw refuses to
+     replace an existing empty directory, so we have to help it out.
+     And canonicalize_file_name is not yet ported to mingw; however,
+     for directories, getcwd works as a viable alternative.  Ensure
+     that we can get back to where we started before using it; later
+     attempts to return are fatal.  Note that we can end up losing a
+     directory if rename then fails, but it was empty, so not much
+     damage was done.  */
+  if (dst_exists && S_ISDIR (dst_st.st_mode))
+    {
+      char *cwd = getcwd (NULL, 0);
+      char *src_temp;
+      char *dst_temp;
+      if (!cwd || chdir (cwd))
+        return -1;
+      if (IS_ABSOLUTE_FILE_NAME (src))
+        {
+          dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0);
+          src_temp = chdir (src) ? NULL : getcwd (NULL, 0);
+        }
+      else
+        {
+          src_temp = chdir (src) ? NULL : getcwd (NULL, 0);
+          if (!IS_ABSOLUTE_FILE_NAME (dst) && chdir (cwd))
+            abort ();
+          dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0);
+        }
+      if (chdir (cwd))
+        abort ();
+      free (cwd);
+      if (!src_temp || !dst_temp)
+        {
+          free (src_temp);
+          free (dst_temp);
+          errno = ENOMEM;
+          return -1;
+        }
+      src_len = strlen (src_temp);
+      if (strncmp (src_temp, dst_temp, src_len) == 0
+          && (ISSLASH (dst_temp[src_len]) || dst_temp[src_len] == '\0'))
+        {
+          error = dst_temp[src_len];
+          free (src_temp);
+          free (dst_temp);
+          if (error)
+            {
+              errno = EINVAL;
+              return -1;
+            }
+          return 0;
+        }
+      if (rmdir (dst))
+        {
+          error = errno;
+          free (src_temp);
+          free (dst_temp);
+          errno = error;
+          return -1;
+        }
+      free (src_temp);
+      free (dst_temp);
+    }
+
+  /* MoveFileEx works if SRC is a directory without any flags, but
+     fails with MOVEFILE_REPLACE_EXISTING, so try without flags first.
+     Thankfully, MoveFileEx handles hard links correctly, even though
+     rename() does not.  */
+  if (MoveFileEx (src, dst, 0))
+    return 0;
+
+  /* Retry with MOVEFILE_REPLACE_EXISTING if the move failed
+     due to the destination already existing.  */
+  error = GetLastError ();
+  if (error == ERROR_FILE_EXISTS || error == ERROR_ALREADY_EXISTS)
+    {
+      if (MoveFileEx (src, dst, MOVEFILE_REPLACE_EXISTING))
+        return 0;
+
+      error = GetLastError ();
+    }
+
+  switch (error)
+    {
+    case ERROR_FILE_NOT_FOUND:
+    case ERROR_PATH_NOT_FOUND:
+    case ERROR_BAD_PATHNAME:
+    case ERROR_DIRECTORY:
+      errno = ENOENT;
+      break;
+
+    case ERROR_ACCESS_DENIED:
+    case ERROR_SHARING_VIOLATION:
+      errno = EACCES;
+      break;
+
+    case ERROR_OUTOFMEMORY:
+      errno = ENOMEM;
+      break;
+
+    case ERROR_CURRENT_DIRECTORY:
+      errno = EBUSY;
+      break;
+
+    case ERROR_NOT_SAME_DEVICE:
+      errno = EXDEV;
+      break;
+
+    case ERROR_WRITE_PROTECT:
+      errno = EROFS;
+      break;
+
+    case ERROR_WRITE_FAULT:
+    case ERROR_READ_FAULT:
+    case ERROR_GEN_FAILURE:
+      errno = EIO;
+      break;
+
+    case ERROR_HANDLE_DISK_FULL:
+    case ERROR_DISK_FULL:
+    case ERROR_DISK_TOO_FRAGMENTED:
+      errno = ENOSPC;
+      break;
+
+    case ERROR_FILE_EXISTS:
+    case ERROR_ALREADY_EXISTS:
+      errno = EEXIST;
+      break;
+
+    case ERROR_BUFFER_OVERFLOW:
+    case ERROR_FILENAME_EXCED_RANGE:
+      errno = ENAMETOOLONG;
+      break;
+
+    case ERROR_INVALID_NAME:
+    case ERROR_DELETE_PENDING:
+      errno = EPERM;        /* ? */
+      break;
+
+# ifndef ERROR_FILE_TOO_LARGE
+/* This value is documented but not defined in all versions of windows.h.  */
+#  define ERROR_FILE_TOO_LARGE 223
+# endif
+    case ERROR_FILE_TOO_LARGE:
+      errno = EFBIG;
+      break;
+
+    default:
+      errno = EINVAL;
+      break;
+    }
+
+  return -1;
+}
+
+#else /* ! W32 platform */
+
+# include <errno.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <sys/stat.h>
+# include <unistd.h>
+
+# include "dirname.h"
+# include "same-inode.h"
+
+/* Rename the file SRC to DST, fixing any trailing slash bugs.  */
+
+int
+rpl_rename (char const *src, char const *dst)
+{
+  size_t src_len = strlen (src);
+  size_t dst_len = strlen (dst);
+  char *src_temp = (char *) src;
+  char *dst_temp = (char *) dst;
+  bool src_slash;
+  bool dst_slash;
+  bool dst_exists _GL_UNUSED;
+  int ret_val = -1;
+  int rename_errno = ENOTDIR;
+  struct stat src_st;
+  struct stat dst_st;
+
+  if (!src_len || !dst_len)
+    return rename (src, dst); /* Let strace see the ENOENT failure.  */
+
+# if RENAME_DEST_EXISTS_BUG
+  {
+    char *src_base = last_component (src);
+    char *dst_base = last_component (dst);
+    if (*src_base == '.')
+      {
+        size_t len = base_len (src_base);
+        if (len == 1 || (len == 2 && src_base[1] == '.'))
+          {
+            errno = EINVAL;
+            return -1;
+          }
+      }
+    if (*dst_base == '.')
+      {
+        size_t len = base_len (dst_base);
+        if (len == 1 || (len == 2 && dst_base[1] == '.'))
+          {
+            errno = EINVAL;
+            return -1;
+          }
+      }
+  }
+# endif /* RENAME_DEST_EXISTS_BUG */
+
+  src_slash = src[src_len - 1] == '/';
+  dst_slash = dst[dst_len - 1] == '/';
+
+# if !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG
+  /* If there are no trailing slashes, then trust the native
+     implementation unless we also suspect issues with hard link
+     detection or file/directory conflicts.  */
+  if (!src_slash && !dst_slash)
+    return rename (src, dst);
+# endif /* !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG */
+
+  /* Presence of a trailing slash requires directory semantics.  If
+     the source does not exist, or if the destination cannot be turned
+     into a directory, give up now.  Otherwise, strip trailing slashes
+     before calling rename.  */
+  if (lstat (src, &src_st))
+    return -1;
+  if (lstat (dst, &dst_st))
+    {
+      if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash))
+        return -1;
+      dst_exists = false;
+    }
+  else
+    {
+      if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode))
+        {
+          errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR;
+          return -1;
+        }
+# if RENAME_HARD_LINK_BUG
+      if (SAME_INODE (src_st, dst_st))
+        return 0;
+# endif /* RENAME_HARD_LINK_BUG */
+      dst_exists = true;
+    }
+
+# if (RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG        \
+      || RENAME_HARD_LINK_BUG)
+  /* If the only bug was that a trailing slash was allowed on a
+     non-existing file destination, as in Solaris 10, then we've
+     already covered that situation.  But if there is any problem with
+     a trailing slash on an existing source or destination, as in
+     Solaris 9, or if a directory can overwrite a symlink, as on
+     Cygwin 1.5, or if directories cannot be created with trailing
+     slash, as on NetBSD 1.6, then we must strip the offending slash
+     and check that we have not encountered a symlink instead of a
+     directory.
+
+     Stripping a trailing slash interferes with POSIX semantics, where
+     rename behavior on a symlink with a trailing slash operates on
+     the corresponding target directory.  We prefer the GNU semantics
+     of rejecting any use of a symlink with trailing slash, but do not
+     enforce them, since Solaris 10 is able to obey POSIX semantics
+     and there might be clients expecting it, as counter-intuitive as
+     those semantics are.
+
+     Technically, we could also follow the POSIX behavior by chasing a
+     readlink trail, but that is harder to implement.  */
+  if (src_slash)
+    {
+      src_temp = strdup (src);
+      if (!src_temp)
+        {
+          /* Rather than rely on strdup-posix, we set errno ourselves.  */
+          rename_errno = ENOMEM;
+          goto out;
+        }
+      strip_trailing_slashes (src_temp);
+      if (lstat (src_temp, &src_st))
+        {
+          rename_errno = errno;
+          goto out;
+        }
+      if (S_ISLNK (src_st.st_mode))
+        goto out;
+    }
+  if (dst_slash)
+    {
+      dst_temp = strdup (dst);
+      if (!dst_temp)
+        {
+          rename_errno = ENOMEM;
+          goto out;
+        }
+      strip_trailing_slashes (dst_temp);
+      if (lstat (dst_temp, &dst_st))
+        {
+          if (errno != ENOENT)
+            {
+              rename_errno = errno;
+              goto out;
+            }
+        }
+      else if (S_ISLNK (dst_st.st_mode))
+        goto out;
+    }
+# endif /* RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG
+           || RENAME_HARD_LINK_BUG */
+
+# if RENAME_DEST_EXISTS_BUG
+  /* Cygwin 1.5 sometimes behaves oddly when moving a non-empty
+     directory on top of an empty one (the old directory name can
+     reappear if the new directory tree is removed).  Work around this
+     by removing the target first, but don't remove the target if it
+     is a subdirectory of the source.  Note that we can end up losing
+     a directory if rename then fails, but it was empty, so not much
+     damage was done.  */
+  if (dst_exists && S_ISDIR (dst_st.st_mode))
+    {
+      if (src_st.st_dev != dst_st.st_dev)
+        {
+          rename_errno = EXDEV;
+          goto out;
+        }
+      if (src_temp != src)
+        free (src_temp);
+      src_temp = canonicalize_file_name (src);
+      if (dst_temp != dst)
+        free (dst_temp);
+      dst_temp = canonicalize_file_name (dst);
+      if (!src_temp || !dst_temp)
+        {
+          rename_errno = ENOMEM;
+          goto out;
+        }
+      src_len = strlen (src_temp);
+      if (strncmp (src_temp, dst_temp, src_len) == 0
+          && dst_temp[src_len] == '/')
+        {
+          rename_errno = EINVAL;
+          goto out;
+        }
+      if (rmdir (dst))
+        {
+          rename_errno = errno;
+          goto out;
+        }
+    }
+# endif /* RENAME_DEST_EXISTS_BUG */
+
+  ret_val = rename (src_temp, dst_temp);
+  rename_errno = errno;
+
+ out: _GL_UNUSED_LABEL;
+
+  if (src_temp != src)
+    free (src_temp);
+  if (dst_temp != dst)
+    free (dst_temp);
+  errno = rename_errno;
+  return ret_val;
+}
+#endif /* ! W32 platform */
diff --git a/lib/rmdir.c b/lib/rmdir.c
new file mode 100644
index 0000000..1d08822
--- /dev/null
+++ b/lib/rmdir.c
@@ -0,0 +1,53 @@
+/* Work around rmdir bugs.
+
+   Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <string.h>
+
+#include "dosname.h"
+
+#undef rmdir
+
+/* Remove directory DIR.
+   Return 0 if successful, -1 if not.  */
+
+int
+rpl_rmdir (char const *dir)
+{
+  /* Work around cygwin 1.5.x bug where rmdir("dir/./") succeeds.  */
+  size_t len = strlen (dir);
+  int result;
+  while (len && ISSLASH (dir[len - 1]))
+    len--;
+  if (len && dir[len - 1] == '.' && (1 == len || ISSLASH (dir[len - 2])))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  result = rmdir (dir);
+  /* Work around mingw bug, where rmdir("file/") fails with EINVAL
+     instead of ENOTDIR.  We've already filtered out trailing ., the
+     only reason allowed by POSIX for EINVAL.  */
+  if (result == -1 && errno == EINVAL)
+    errno = ENOTDIR;
+  return result;
+}
diff --git a/lib/same-inode.h b/lib/same-inode.h
new file mode 100644
index 0000000..06655b6
--- /dev/null
+++ b/lib/same-inode.h
@@ -0,0 +1,47 @@
+/* Determine whether two stat buffers are known to refer to the same file.
+
+   Copyright (C) 2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef SAME_INODE_H
+# define SAME_INODE_H 1
+
+# include <sys/types.h>
+
+# if defined __VMS && __CRTL_VER < 80200000
+#  define SAME_INODE(a, b)             \
+    ((a).st_ino[0] == (b).st_ino[0]    \
+     && (a).st_ino[1] == (b).st_ino[1] \
+     && (a).st_ino[2] == (b).st_ino[2] \
+     && (a).st_dev == (b).st_dev)
+# elif defined _WIN32 && ! defined __CYGWIN__
+   /* Native Windows.  */
+#  if _GL_WINDOWS_STAT_INODES
+    /* stat() and fstat() set st_dev and st_ino to 0 if information about
+       the inode is not available.  */
+#   define SAME_INODE(a, b) \
+     (!((a).st_ino == 0 && (a).st_dev == 0) \
+      && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev)
+#  else
+    /* stat() and fstat() set st_ino to 0 always.  */
+#   define SAME_INODE(a, b) 0
+#  endif
+# else
+#  define SAME_INODE(a, b)    \
+    ((a).st_ino == (b).st_ino \
+     && (a).st_dev == (b).st_dev)
+# endif
+
+#endif
diff --git a/lib/sched.in.h b/lib/sched.in.h
index 3955f07..af4b55a 100644
--- a/lib/sched.in.h
+++ b/lib/sched.in.h
@@ -1,5 +1,5 @@
-/* Replacement <sched.h> for platforms that lack it.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+/* A GNU-like <sched.h>.
+   Copyright (C) 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_SCHED_H
 
@@ -23,6 +23,9 @@
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_SCHED_H@
+# if @HAVE_SYS_CDEFS_H@
+#  include <sys/cdefs.h>
+# endif
 # @INCLUDE_NEXT@ @NEXT_SCHED_H@
 #endif
 
@@ -31,10 +34,24 @@
 
 /* Get pid_t.
    This is needed on glibc 2.11 (see
-   glibc bug <http://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
+   glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
    and Mac OS X 10.5.  */
 #include <sys/types.h>
 
+#ifdef __KLIBC__
+/* On OS/2 kLIBC, struct sched_param is in spawn.h.  */
+# include <spawn.h>
+#endif
+
+#ifdef __VMS
+/* On OpenVMS, struct sched_param is in <pthread.h>.  */
+# include <pthread.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
 #if !@HAVE_STRUCT_SCHED_PARAM@
 
 # if !GNULIB_defined_struct_sched_param
@@ -53,5 +70,28 @@
 # define SCHED_OTHER  0
 #endif
 
+#if @GNULIB_SCHED_YIELD@
+# if @REPLACE_SCHED_YIELD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sched_yield
+#   define sched_yield rpl_sched_yield
+#  endif
+_GL_FUNCDECL_RPL (sched_yield, int, (void));
+_GL_CXXALIAS_RPL (sched_yield, int, (void));
+# else
+#  if !@HAVE_SCHED_YIELD@
+_GL_FUNCDECL_SYS (sched_yield, int, (void));
+#  endif
+_GL_CXXALIAS_SYS (sched_yield, int, (void));
+# endif
+_GL_CXXALIASWARN (sched_yield);
+#elif defined GNULIB_POSIXCHECK
+# undef sched_yield
+# if HAVE_RAW_DECL_SCHED_YIELD
+_GL_WARN_ON_USE (sched_yield, "sched_yield is not portable - "
+                 "use gnulib module sched_yield for portability");
+# endif
+#endif
+
 #endif /* _@GUARD_PREFIX@_SCHED_H */
 #endif /* _@GUARD_PREFIX@_SCHED_H */
diff --git a/lib/setenv.c b/lib/setenv.c
new file mode 100644
index 0000000..733b257
--- /dev/null
+++ b/lib/setenv.c
@@ -0,0 +1,390 @@
+/* Copyright (C) 1992, 1995-2003, 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#if !_LIBC
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the name == NULL test below.  */
+# define _GL_ARG_NONNULL(params)
+
+# define _GL_USE_STDLIB_ALLOC 1
+# include <config.h>
+#endif
+
+#include <alloca.h>
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !_LIBC
+# include "malloca.h"
+#endif
+
+#if _LIBC || !HAVE_SETENV
+
+#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 setenv __setenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+   allow arbitrarily many changes of the environment given that the used
+   values are from a small set.  Outside glibc this will eat up all
+   memory after a while.  */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+                      && defined __GNUC__)
+# define USE_TSEARCH    1
+# include <search.h>
+typedef int (*compar_fn_t) (const void *, const void *);
+
+/* This is a pointer to the root of the search tree with the known
+   values.  */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+  ({                                                                          \
+    void *value = tfind (Str, &known_values, (compar_fn_t) strcmp);           \
+    value != NULL ? *(char **) value : NULL;                                  \
+  })
+# define STORE_VALUE(Str) \
+  tsearch (Str, &known_values, (compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+   environment.  */
+static char **last_environ;
+
+
+/* This function is used by 'setenv' and 'putenv'.  The difference between
+   the two functions is that for the former must create a new string which
+   is then placed in the environment, while the argument of 'putenv'
+   must be used directly.  This is all complicated by the fact that we try
+   to reuse values once generated for a 'setenv' call since we can never
+   free the strings.  */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+                  int replace)
+{
+  char **ep;
+  size_t size;
+  const size_t namelen = strlen (name);
+  const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
+
+  LOCK;
+
+  /* We have to get the pointer now that we have the lock and not earlier
+     since another thread might have created a new environment.  */
+  ep = __environ;
+
+  size = 0;
+  if (ep != NULL)
+    {
+      for (; *ep != NULL; ++ep)
+        if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+          break;
+        else
+          ++size;
+    }
+
+  if (ep == NULL || *ep == NULL)
+    {
+      char **new_environ;
+#ifdef USE_TSEARCH
+      char *new_value;
+#endif
+
+      /* We allocated this space; we can extend it.  */
+      new_environ =
+        (char **) (last_environ == NULL
+                   ? malloc ((size + 2) * sizeof (char *))
+                   : realloc (last_environ, (size + 2) * sizeof (char *)));
+      if (new_environ == NULL)
+        {
+          /* It's easier to set errno to ENOMEM than to rely on the
+             'malloc-posix' and 'realloc-posix' gnulib modules.  */
+          __set_errno (ENOMEM);
+          UNLOCK;
+          return -1;
+        }
+
+      /* If the whole entry is given add it.  */
+      if (combined != NULL)
+        /* We must not add the string to the search tree since it belongs
+           to the user.  */
+        new_environ[size] = (char *) combined;
+      else
+        {
+          /* See whether the value is already known.  */
+#ifdef USE_TSEARCH
+# ifdef _LIBC
+          new_value = (char *) alloca (namelen + 1 + vallen);
+          __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+                     value, vallen);
+# else
+          new_value = (char *) malloca (namelen + 1 + vallen);
+          if (new_value == NULL)
+            {
+              __set_errno (ENOMEM);
+              UNLOCK;
+              return -1;
+            }
+          memcpy (new_value, name, namelen);
+          new_value[namelen] = '=';
+          memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+          new_environ[size] = KNOWN_VALUE (new_value);
+          if (new_environ[size] == NULL)
+#endif
+            {
+              new_environ[size] = (char *) malloc (namelen + 1 + vallen);
+              if (new_environ[size] == NULL)
+                {
+#if defined USE_TSEARCH && !defined _LIBC
+                  freea (new_value);
+#endif
+                  __set_errno (ENOMEM);
+                  UNLOCK;
+                  return -1;
+                }
+
+#ifdef USE_TSEARCH
+              memcpy (new_environ[size], new_value, namelen + 1 + vallen);
+#else
+              memcpy (new_environ[size], name, namelen);
+              new_environ[size][namelen] = '=';
+              memcpy (&new_environ[size][namelen + 1], value, vallen);
+#endif
+              /* And save the value now.  We cannot do this when we remove
+                 the string since then we cannot decide whether it is a
+                 user string or not.  */
+              STORE_VALUE (new_environ[size]);
+            }
+#if defined USE_TSEARCH && !defined _LIBC
+          freea (new_value);
+#endif
+        }
+
+      if (__environ != last_environ)
+        memcpy ((char *) new_environ, (char *) __environ,
+                size * sizeof (char *));
+
+      new_environ[size + 1] = NULL;
+
+      last_environ = __environ = new_environ;
+    }
+  else if (replace)
+    {
+      char *np;
+
+      /* Use the user string if given.  */
+      if (combined != NULL)
+        np = (char *) combined;
+      else
+        {
+#ifdef USE_TSEARCH
+          char *new_value;
+# ifdef _LIBC
+          new_value = alloca (namelen + 1 + vallen);
+          __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+                     value, vallen);
+# else
+          new_value = malloca (namelen + 1 + vallen);
+          if (new_value == NULL)
+            {
+              __set_errno (ENOMEM);
+              UNLOCK;
+              return -1;
+            }
+          memcpy (new_value, name, namelen);
+          new_value[namelen] = '=';
+          memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+          np = KNOWN_VALUE (new_value);
+          if (np == NULL)
+#endif
+            {
+              np = (char *) malloc (namelen + 1 + vallen);
+              if (np == NULL)
+                {
+#if defined USE_TSEARCH && !defined _LIBC
+                  freea (new_value);
+#endif
+                  __set_errno (ENOMEM);
+                  UNLOCK;
+                  return -1;
+                }
+
+#ifdef USE_TSEARCH
+              memcpy (np, new_value, namelen + 1 + vallen);
+#else
+              memcpy (np, name, namelen);
+              np[namelen] = '=';
+              memcpy (&np[namelen + 1], value, vallen);
+#endif
+              /* And remember the value.  */
+              STORE_VALUE (np);
+            }
+#if defined USE_TSEARCH && !defined _LIBC
+          freea (new_value);
+#endif
+        }
+
+      *ep = np;
+    }
+
+  UNLOCK;
+
+  return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  return __add_to_environ (name, value, NULL, replace);
+}
+
+/* The 'clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+int
+clearenv (void)
+{
+  LOCK;
+
+  if (__environ == last_environ && __environ != NULL)
+    {
+      /* We allocated this environment so we can free it.  */
+      free (__environ);
+      last_environ = NULL;
+    }
+
+  /* Clear the environment pointer removes the whole environment.  */
+  __environ = NULL;
+
+  UNLOCK;
+
+  return 0;
+}
+
+#ifdef _LIBC
+static void
+free_mem (void)
+{
+  /* Remove all traces.  */
+  clearenv ();
+
+  /* Now remove the search tree.  */
+  __tdestroy (known_values, free);
+  known_values = NULL;
+}
+text_set_element (__libc_subfreeres, free_mem);
+
+
+# undef setenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__clearenv, clearenv)
+#endif
+
+#endif /* _LIBC || !HAVE_SETENV */
+
+/* The rest of this file is called into use when replacing an existing
+   but buggy setenv.  Known bugs include failure to diagnose invalid
+   name, and consuming a leading '=' from value.  */
+#if HAVE_SETENV
+
+# undef setenv
+# if !HAVE_DECL_SETENV
+extern int setenv (const char *, const char *, int);
+# endif
+# define STREQ(a, b) (strcmp (a, b) == 0)
+
+int
+rpl_setenv (const char *name, const char *value, int replace)
+{
+  int result;
+  if (!name || !*name || strchr (name, '='))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  /* Call the real setenv even if replace is 0, in case implementation
+     has underlying data to update, such as when environ changes.  */
+  result = setenv (name, value, replace);
+  if (result == 0 && replace && *value == '=')
+    {
+      char *tmp = getenv (name);
+      if (!STREQ (tmp, value))
+        {
+          int saved_errno;
+          size_t len = strlen (value);
+          tmp = malloca (len + 2);
+          /* Since leading '=' is eaten, double it up.  */
+          *tmp = '=';
+          memcpy (tmp + 1, value, len + 1);
+          result = setenv (name, tmp, replace);
+          saved_errno = errno;
+          freea (tmp);
+          errno = saved_errno;
+        }
+    }
+  return result;
+}
+
+#endif /* HAVE_SETENV */
diff --git a/lib/sig-handler.h b/lib/sig-handler.h
index 5bba138..b289473 100644
--- a/lib/sig-handler.h
+++ b/lib/sig-handler.h
@@ -1,6 +1,6 @@
 /* Convenience declarations when working with <signal.h>.
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -13,13 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _GL_SIG_HANDLER_H
 #define _GL_SIG_HANDLER_H
 
 #include <signal.h>
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef SIG_HANDLER_INLINE
 # define SIG_HANDLER_INLINE _GL_INLINE
@@ -31,18 +34,15 @@
 /* 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
+SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE
 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
+     is ignored if sa_sigaction (after casting) equals SIG_IGN.  In
+     this case, this implementation relies on the fact that the two
+     are aliases, and simply returns sa_handler.  */
   return a->sa_handler;
 }
 
diff --git a/lib/sigaction.c b/lib/sigaction.c
index 659c4ec..abedfdc 100644
--- a/lib/sigaction.c
+++ b/lib/sigaction.c
@@ -1,5 +1,5 @@
 /* POSIX compatible signal blocking.
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
    Written by Eric Blake <ebb9@byu.net>, 2008.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -67,7 +67,7 @@
 /* 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__
+#if defined _WIN32 && ! defined __CYGWIN__
 # undef SIGABRT_COMPAT
 # define SIGABRT_COMPAT 6
 #endif
diff --git a/lib/signal.in.h b/lib/signal.in.h
index 8fb1ad1..b4e432d 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <signal.h>.
 
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
@@ -55,11 +55,13 @@
 #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>.
+/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android
+   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 __APPLE__ && defined __MACH__) \
+        || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \
+        || defined __sun || defined __ANDROID__) \
     && ! defined __GLIBC__
 # include <pthread.h>
 #endif
@@ -135,14 +137,16 @@
 _GL_CXXALIAS_RPL (pthread_sigmask, int,
                   (int how, const sigset_t *new_mask, sigset_t *old_mask));
 # else
-#  if !@HAVE_PTHREAD_SIGMASK@
+#  if !(@HAVE_PTHREAD_SIGMASK@ || defined 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
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (pthread_sigmask);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef pthread_sigmask
 # if HAVE_RAW_DECL_PTHREAD_SIGMASK
@@ -166,7 +170,9 @@
 #  endif
 _GL_CXXALIAS_SYS (raise, int, (int sig));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (raise);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef raise
 /* Assume raise is always declared.  */
@@ -195,6 +201,20 @@
 
 # endif
 
+/* When also using extern inline, suppress the use of static inline in
+   standard headers of problematic Apple configurations, as Libc at
+   least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
+   <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \
+     && (defined __i386__ || defined __x86_64__))
+# undef sigaddset
+# undef sigdelset
+# undef sigemptyset
+# undef sigfillset
+# undef sigismember
+#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.  */
@@ -305,7 +325,9 @@
 _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
                   (int sig, _gl_function_taking_int_returning_void_t func));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (signal);
+# endif
 
 # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE
 /* Raise signal SIGPIPE.  */
diff --git a/lib/signbitd.c b/lib/signbitd.c
index 7629ff5..9eb7d3a 100644
--- a/lib/signbitd.c
+++ b/lib/signbitd.c
@@ -1,5 +1,5 @@
 /* signbit() macro: Determine the sign bit of a floating-point number.
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/signbitf.c b/lib/signbitf.c
index f99f992..86595e5 100644
--- a/lib/signbitf.c
+++ b/lib/signbitf.c
@@ -1,5 +1,5 @@
 /* signbit() macro: Determine the sign bit of a floating-point number.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/signbitl.c b/lib/signbitl.c
index 35afcf1..79f4992 100644
--- a/lib/signbitl.c
+++ b/lib/signbitl.c
@@ -1,5 +1,5 @@
 /* signbit() macro: Determine the sign bit of a floating-point number.
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/sigprocmask.c b/lib/sigprocmask.c
index aff3b29..d6cd3f8 100644
--- a/lib/sigprocmask.c
+++ b/lib/sigprocmask.c
@@ -1,5 +1,5 @@
 /* POSIX compatible signal blocking.
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2006.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -50,7 +50,7 @@
 /* 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__
+#if defined _WIN32 && ! defined __CYGWIN__
 # undef SIGABRT_COMPAT
 # define SIGABRT_COMPAT 6
 #endif
diff --git a/lib/size_max.h b/lib/size_max.h
index 9642441..e265fb9 100644
--- a/lib/size_max.h
+++ b/lib/size_max.h
@@ -1,5 +1,5 @@
 /* size_max.h -- declare SIZE_MAX through system headers
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 Free Software Foundation, Inc.
    Written by Simon Josefsson.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef GNULIB_SIZE_MAX_H
 #define GNULIB_SIZE_MAX_H
diff --git a/lib/snprintf.c b/lib/snprintf.c
index 3908442..5cf1ede 100644
--- a/lib/snprintf.c
+++ b/lib/snprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 Free Software Foundation, Inc.
    Written by Simon Josefsson and Paul Eggert.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawn-pipe.c b/lib/spawn-pipe.c
index e163257..3af5167 100644
--- a/lib/spawn-pipe.c
+++ b/lib/spawn-pipe.c
@@ -1,5 +1,5 @@
 /* Creation of subprocesses, communicating via pipes.
-   Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2006-2019 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
@@ -13,9 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
+/* Tell clang not to warn about the 'child' variable, below.  */
+#if defined __clang__
+# pragma clang diagnostic ignored "-Wconditional-uninitialized"
+#endif
+
 #include <config.h>
 
 /* Specification.  */
@@ -35,7 +40,7 @@
 
 #define _(str) gettext (str)
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if (defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__
 
 /* Native Windows API.  */
 # include <process.h>
@@ -48,11 +53,6 @@
 
 #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
 
@@ -71,9 +71,10 @@
 
   return retval;
 }
+#undef close /* avoid warning related to gnulib module unistd */
 #define close nonintr_close
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 static int
 nonintr_open (const char *pathname, int oflag, mode_t mode)
 {
@@ -114,7 +115,7 @@
              bool slave_process, bool exit_on_error,
              int fd[2])
 {
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if (defined _WIN32 && ! defined __CYGWIN__) || defined __KLIBC__
 
   /* Native Windows API.
      This uses _pipe(), dup2(), and spawnv().  It could also be implemented
diff --git a/lib/spawn-pipe.h b/lib/spawn-pipe.h
index ea8ae8f..0d70968 100644
--- a/lib/spawn-pipe.h
+++ b/lib/spawn-pipe.h
@@ -1,5 +1,5 @@
 /* Creation of subprocesses, communicating via pipes.
-   Copyright (C) 2001-2003, 2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2006, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _SPAWN_PIPE_H
 #define _SPAWN_PIPE_H
@@ -130,7 +130,7 @@
                                int fd[2]);
 
 /* The name of the "always silent" device.  */
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 /* Native Windows API.  */
 # define DEV_NULL "NUL"
 #else
diff --git a/lib/spawn.in.h b/lib/spawn.in.h
index 0f25d17..09c66f5 100644
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -1,5 +1,5 @@
 /* Definitions for POSIX spawn interface.
-   Copyright (C) 2000, 2003-2004, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2003-2004, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _@GUARD_PREFIX@_SPAWN_H
 
@@ -79,10 +79,10 @@
 
 
 /* Data structure to contain attributes for thread creation.  */
-#if @REPLACE_POSIX_SPAWN@
+#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@)
 # define posix_spawnattr_t rpl_posix_spawnattr_t
 #endif
-#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@
+#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@
 # if !GNULIB_defined_posix_spawnattr_t
 typedef struct
 {
@@ -101,10 +101,10 @@
 
 /* Data structure to contain information about the actions to be
    performed in the new process with respect to file descriptors.  */
-#if @REPLACE_POSIX_SPAWN@
+#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && !@HAVE_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 @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || !@HAVE_POSIX_SPAWN@
 # if !GNULIB_defined_posix_spawn_file_actions_t
 typedef struct
 {
@@ -142,7 +142,8 @@
 # endif
 #endif
 /* A GNU extension.  Use the next free bit position.  */
-#define POSIX_SPAWN_USEVFORK \
+#ifndef POSIX_SPAWN_USEVFORK
+# 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)                 \
@@ -152,6 +153,7 @@
     | POSIX_SPAWN_SETSCHEDULER                                            \
     | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0))  \
    + 1)
+#endif
 #if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
 typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
             [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
@@ -800,7 +802,9 @@
                    int __fd,
                    const char *_Restrict_ __path, int __oflag, mode_t __mode));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (posix_spawn_file_actions_addopen);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef posix_spawn_file_actions_addopen
 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN
@@ -831,7 +835,9 @@
 _GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int,
                   (posix_spawn_file_actions_t *__file_actions, int __fd));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (posix_spawn_file_actions_addclose);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef posix_spawn_file_actions_addclose
 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE
@@ -866,7 +872,9 @@
                   (posix_spawn_file_actions_t *__file_actions,
                    int __fd, int __newfd));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (posix_spawn_file_actions_adddup2);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef posix_spawn_file_actions_adddup2
 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2
@@ -876,6 +884,76 @@
 # endif
 #endif
 
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'chdir' to the given directory during the 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addchdir rpl_posix_spawn_file_actions_addchdir
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const char *_Restrict_ __path)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const char *_Restrict_ __path));
+# else
+#  if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const char *_Restrict_ __path)
+                  __THROW _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   const char *_Restrict_ __path));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addchdir
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR
+_GL_WARN_ON_USE (posix_spawn_file_actions_addchdir,
+                 "posix_spawn_file_actions_addchdir is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addchdir for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
+/* Add an action to FILE-ACTIONS which tells the implementation to call
+   'fchdir' to the given directory during the 'spawn' call.  */
+# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define posix_spawn_file_actions_addfchdir rpl_posix_spawn_file_actions_addfchdir
+#  endif
+_GL_FUNCDECL_RPL (posix_spawn_file_actions_addfchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_spawn_file_actions_addfchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd));
+# else
+#  if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@
+_GL_FUNCDECL_SYS (posix_spawn_file_actions_addfchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd)
+                  __THROW _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (posix_spawn_file_actions_addfchdir, int,
+                  (posix_spawn_file_actions_t *_Restrict_ __file_actions,
+                   int __fd));
+# endif
+_GL_CXXALIASWARN (posix_spawn_file_actions_addfchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addfchdir
+# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR
+_GL_WARN_ON_USE (posix_spawn_file_actions_addfchdir,
+                 "posix_spawn_file_actions_addfchdir is unportable - "
+                 "use gnulib module posix_spawn_file_actions_addfchdir 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
index 8326bbb..3ad244a 100644
--- a/lib/spawn_faction_addclose.c
+++ b/lib/spawn_faction_addclose.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -26,7 +26,7 @@
 # define __sysconf(open_max) getdtablesize ()
 #endif
 
-#if !HAVE_WORKING_POSIX_SPAWN
+#if REPLACE_POSIX_SPAWN
 # include "spawn_int.h"
 #endif
 
@@ -43,7 +43,7 @@
   if (fd < 0 || fd >= maxfd)
     return EBADF;
 
-#if HAVE_WORKING_POSIX_SPAWN
+#if !REPLACE_POSIX_SPAWN
   return posix_spawn_file_actions_addclose (file_actions, fd);
 #else
   /* Allocate more memory if needed.  */
diff --git a/lib/spawn_faction_adddup2.c b/lib/spawn_faction_adddup2.c
index 08daa52..cbc97e0 100644
--- a/lib/spawn_faction_adddup2.c
+++ b/lib/spawn_faction_adddup2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -26,7 +26,7 @@
 # define __sysconf(open_max) getdtablesize ()
 #endif
 
-#if !HAVE_WORKING_POSIX_SPAWN
+#if REPLACE_POSIX_SPAWN
 # include "spawn_int.h"
 #endif
 
@@ -43,7 +43,7 @@
   if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd)
     return EBADF;
 
-#if HAVE_WORKING_POSIX_SPAWN
+#if !REPLACE_POSIX_SPAWN
   return posix_spawn_file_actions_adddup2 (file_actions, fd, newfd);
 #else
   /* Allocate more memory if needed.  */
diff --git a/lib/spawn_faction_addopen.c b/lib/spawn_faction_addopen.c
index d13fc2c..ab4f727 100644
--- a/lib/spawn_faction_addopen.c
+++ b/lib/spawn_faction_addopen.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -20,13 +20,15 @@
 #include <spawn.h>
 
 #include <errno.h>
+#include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 
 #if !_LIBC
 # define __sysconf(open_max) getdtablesize ()
 #endif
 
-#if !HAVE_WORKING_POSIX_SPAWN
+#if REPLACE_POSIX_SPAWN
 # include "spawn_int.h"
 #endif
 
@@ -44,30 +46,41 @@
   if (fd < 0 || fd >= maxfd)
     return EBADF;
 
-#if HAVE_WORKING_POSIX_SPAWN
+#if !REPLACE_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;
+    /* Copy PATH, because the caller may free it before calling posix_spawn()
+       or posix_spawnp().  */
+    char *path_copy = strdup (path);
+    if (path_copy == NULL)
+      return ENOMEM;
 
-    /* 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;
+    /* 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.  */
+        free (path_copy);
+        return ENOMEM;
+      }
 
-    /* Account for the new entry.  */
-    ++file_actions->_used;
+    {
+      struct __spawn_action *rec;
 
-    return 0;
+      /* 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_copy;
+      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
index 774d3d9..d7156a0 100644
--- a/lib/spawn_faction_destroy.c
+++ b/lib/spawn_faction_destroy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -21,11 +21,39 @@
 
 #include <stdlib.h>
 
+#if REPLACE_POSIX_SPAWN
+# include "spawn_int.h"
+#endif
+
 /* Initialize data structure for file attribute for 'spawn' call.  */
 int
 posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions)
+#undef posix_spawn_file_actions_destroy
 {
-  /* Free the memory allocated.  */
+#if !REPLACE_POSIX_SPAWN
+  return posix_spawn_file_actions_destroy (file_actions);
+#else
+  int i;
+
+  /* Free the paths in the open actions.  */
+  for (i = 0; i < file_actions->_used; ++i)
+    {
+      struct __spawn_action *sa = &file_actions->_actions[i];
+      switch (sa->tag)
+        {
+        case spawn_do_open:
+        case spawn_do_chdir:
+          free (sa->action.open_action.path);
+          break;
+        default:
+          /* No cleanup required.  */
+          break;
+        }
+    }
+
+  /* Free the array of actions.  */
   free (file_actions->_actions);
+
   return 0;
+#endif
 }
diff --git a/lib/spawn_faction_init.c b/lib/spawn_faction_init.c
index 373c7da..72e2c73 100644
--- a/lib/spawn_faction_init.c
+++ b/lib/spawn_faction_init.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawn_int.h b/lib/spawn_int.h
index f85c6f7..bcf8bbf 100644
--- a/lib/spawn_int.h
+++ b/lib/spawn_int.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2008-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2008-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <sys/types.h>
 
@@ -23,7 +23,9 @@
   {
     spawn_do_close,
     spawn_do_dup2,
-    spawn_do_open
+    spawn_do_open,
+    spawn_do_chdir,
+    spawn_do_fchdir
   } tag;
 
   union
@@ -40,10 +42,18 @@
     struct
     {
       int fd;
-      const char *path;
+      char *path;
       int oflag;
       mode_t mode;
     } open_action;
+    struct
+    {
+      char *path;
+    } chdir_action;
+    struct
+    {
+      int fd;
+    } fchdir_action;
   } action;
 };
 
diff --git a/lib/spawnattr_destroy.c b/lib/spawnattr_destroy.c
index 6025ee4..01bd927 100644
--- a/lib/spawnattr_destroy.c
+++ b/lib/spawnattr_destroy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawnattr_init.c b/lib/spawnattr_init.c
index 7451b4e..6fd6ca9 100644
--- a/lib/spawnattr_init.c
+++ b/lib/spawnattr_init.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawnattr_setflags.c b/lib/spawnattr_setflags.c
index 0def40a..a8f557c 100644
--- a/lib/spawnattr_setflags.c
+++ b/lib/spawnattr_setflags.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2004, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2004, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawnattr_setsigmask.c b/lib/spawnattr_setsigmask.c
index 7f8e61c..e1713c5 100644
--- a/lib/spawnattr_setsigmask.c
+++ b/lib/spawnattr_setsigmask.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/spawni.c b/lib/spawni.c
index 649a4b9..087f45c 100644
--- a/lib/spawni.c
+++ b/lib/spawni.c
@@ -1,5 +1,5 @@
 /* Guts of POSIX spawn interface.  Generic POSIX.1 version.
-   Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2006, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -32,7 +32,7 @@
 #if _LIBC || HAVE_PATHS_H
 # include <paths.h>
 #else
-# define _PATH_BSHELL "/bin/sh"
+# define _PATH_BSHELL BOURNE_SHELL
 #endif
 
 #include <signal.h>
@@ -89,7 +89,7 @@
 #define SPAWN_ERROR     127
 
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 
 /* Native Windows API.  */
 int
@@ -284,6 +284,18 @@
                 /* The 'dup2' call failed.  */
                 _exit (SPAWN_ERROR);
               break;
+
+            case spawn_do_chdir:
+              if (chdir (action->action.chdir_action.path) < 0)
+                /* The 'chdir' call failed.  */
+                _exit (SPAWN_ERROR);
+              break;
+
+            case spawn_do_fchdir:
+              if (fchdir (action->action.fchdir_action.fd) < 0)
+                /* The 'fchdir' call failed.  */
+                _exit (SPAWN_ERROR);
+              break;
             }
         }
     }
diff --git a/lib/spawnp.c b/lib/spawnp.c
index 25493eb..0f15069 100644
--- a/lib/spawnp.c
+++ b/lib/spawnp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/sprintf.c b/lib/sprintf.c
index 68c9762..6f49cdd 100644
--- a/lib/sprintf.c
+++ b/lib/sprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/stat-time.c b/lib/stat-time.c
new file mode 100644
index 0000000..81b83dd
--- /dev/null
+++ b/lib/stat-time.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE
+#include "stat-time.h"
diff --git a/lib/stat-time.h b/lib/stat-time.h
new file mode 100644
index 0000000..38a1f55
--- /dev/null
+++ b/lib/stat-time.h
@@ -0,0 +1,252 @@
+/* stat-related time functions.
+
+   Copyright (C) 2005, 2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef STAT_TIME_H
+#define STAT_TIME_H 1
+
+#include "intprops.h"
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STAT_TIME_INLINE
+# define _GL_STAT_TIME_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
+   struct timespec, if available.  If not, then STAT_TIMESPEC_NS (ST,
+   ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
+   if available.  ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim
+   for access, status change, data modification, or birth (creation)
+   time respectively.
+
+   These macros are private to stat-time.h.  */
+#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+#  define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
+# else
+#  define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)
+# endif
+#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)
+#endif
+
+/* Return the nanosecond component of *ST's access time.  */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_atime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_atim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_atim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's status change time.  */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_ctime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_ctim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_ctim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's data modification time.  */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_mtime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_mtim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_mtim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's birth time.  */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_birthtime_ns (struct stat const *st _GL_UNUSED)
+{
+# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+  return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
+# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+  return STAT_TIMESPEC_NS (st, st_birthtim);
+# else
+  return 0;
+# endif
+}
+
+/* Return *ST's access time.  */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_atime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_atim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_atime;
+  t.tv_nsec = get_stat_atime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's status change time.  */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_ctime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_ctim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_ctime;
+  t.tv_nsec = get_stat_ctime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's data modification time.  */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_mtime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_mtim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_mtime;
+  t.tv_nsec = get_stat_mtime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's birth time, if available; otherwise return a value
+   with tv_sec and tv_nsec both equal to -1.  */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_birthtime (struct stat const *st _GL_UNUSED)
+{
+  struct timespec t;
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
+  t = STAT_TIMESPEC (st, st_birthtim);
+#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+  t.tv_sec = st->st_birthtime;
+  t.tv_nsec = st->st_birthtimensec;
+#elif defined _WIN32 && ! defined __CYGWIN__
+  /* Native Windows platforms (but not Cygwin) put the "file creation
+     time" in st_ctime (!).  See
+     <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>.  */
+# if _GL_WINDOWS_STAT_TIMESPEC
+  t = st->st_ctim;
+# else
+  t.tv_sec = st->st_ctime;
+  t.tv_nsec = 0;
+# endif
+#else
+  /* Birth time is not supported.  */
+  t.tv_sec = -1;
+  t.tv_nsec = -1;
+#endif
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
+  /* FreeBSD and NetBSD sometimes signal the absence of knowledge by
+     using zero.  Attempt to work around this problem.  Alas, this can
+     report failure even for valid timestamps.  Also, NetBSD
+     sometimes returns junk in the birth time fields; work around this
+     bug if it is detected.  */
+  if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000))
+    {
+      t.tv_sec = -1;
+      t.tv_nsec = -1;
+    }
+#endif
+
+  return t;
+}
+
+/* If a stat-like function returned RESULT, normalize the timestamps
+   in *ST, in case this platform suffers from the Solaris 11 bug where
+   tv_nsec might be negative.  Return the adjusted RESULT, setting
+   errno to EOVERFLOW if normalization overflowed.  This function
+   is intended to be private to this .h file.  */
+_GL_STAT_TIME_INLINE int
+stat_time_normalize (int result, struct stat *st _GL_UNUSED)
+{
+#if defined __sun && defined STAT_TIMESPEC
+  if (result == 0)
+    {
+      long int timespec_hz = 1000000000;
+      short int const ts_off[] = { offsetof (struct stat, st_atim),
+                                   offsetof (struct stat, st_mtim),
+                                   offsetof (struct stat, st_ctim) };
+      int i;
+      for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++)
+        {
+          struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]);
+          long int q = ts->tv_nsec / timespec_hz;
+          long int r = ts->tv_nsec % timespec_hz;
+          if (r < 0)
+            {
+              r += timespec_hz;
+              q--;
+            }
+          ts->tv_nsec = r;
+          /* Overflow is possible, as Solaris 11 stat can yield
+             tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000.
+             INT_ADD_WRAPV is OK, since time_t is signed on Solaris.  */
+          if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec))
+            {
+              errno = EOVERFLOW;
+              return -1;
+            }
+        }
+    }
+#endif
+  return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif
diff --git a/lib/stat-w32.c b/lib/stat-w32.c
new file mode 100644
index 0000000..60fe5f6
--- /dev/null
+++ b/lib/stat-w32.c
@@ -0,0 +1,425 @@
+/* Core of implementation of fstat and stat for native Windows.
+   Copyright (C) 2017-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible.  */
+
+#include <config.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* Ensure that <windows.h> defines FILE_ID_INFO.  */
+#undef _WIN32_WINNT
+#define _WIN32_WINNT _WIN32_WINNT_WIN8
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <unistd.h>
+#include <windows.h>
+
+/* Specification.  */
+#include "stat-w32.h"
+
+#include "pathmax.h"
+#include "verify.h"
+
+/* Avoid warnings from gcc -Wcast-function-type.  */
+#define GetProcAddress \
+  (void *) GetProcAddress
+
+#if _GL_WINDOWS_STAT_INODES == 2
+/* GetFileInformationByHandleEx was introduced only in Windows Vista.  */
+typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile,
+                                                               FILE_INFO_BY_HANDLE_CLASS fiClass,
+                                                               LPVOID lpBuffer,
+                                                               DWORD dwBufferSize);
+static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL;
+#endif
+/* GetFinalPathNameByHandle was introduced only in Windows Vista.  */
+typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile,
+                                                           LPTSTR lpFilePath,
+                                                           DWORD lenFilePath,
+                                                           DWORD dwFlags);
+static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL;
+static BOOL initialized = FALSE;
+
+static void
+initialize (void)
+{
+  HMODULE kernel32 = LoadLibrary ("kernel32.dll");
+  if (kernel32 != NULL)
+    {
+#if _GL_WINDOWS_STAT_INODES == 2
+      GetFileInformationByHandleExFunc =
+        (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx");
+#endif
+      GetFinalPathNameByHandleFunc =
+        (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA");
+    }
+  initialized = TRUE;
+}
+
+/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00.  */
+#if _GL_WINDOWS_STAT_TIMESPEC
+struct timespec
+_gl_convert_FILETIME_to_timespec (const FILETIME *ft)
+{
+  struct timespec result;
+  /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */
+  unsigned long long since_1601 =
+    ((unsigned long long) ft->dwHighDateTime << 32)
+    | (unsigned long long) ft->dwLowDateTime;
+  if (since_1601 == 0)
+    {
+      result.tv_sec = 0;
+      result.tv_nsec = 0;
+    }
+  else
+    {
+      /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
+         leap years, in total 134774 days.  */
+      unsigned long long since_1970 =
+        since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
+      result.tv_sec = since_1970 / (unsigned long long) 10000000;
+      result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100;
+    }
+  return result;
+}
+#else
+time_t
+_gl_convert_FILETIME_to_POSIX (const FILETIME *ft)
+{
+  /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */
+  unsigned long long since_1601 =
+    ((unsigned long long) ft->dwHighDateTime << 32)
+    | (unsigned long long) ft->dwLowDateTime;
+  if (since_1601 == 0)
+    return 0;
+  else
+    {
+      /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
+         leap years, in total 134774 days.  */
+      unsigned long long since_1970 =
+        since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
+      return since_1970 / (unsigned long long) 10000000;
+    }
+}
+#endif
+
+/* Fill *BUF with information about the file designated by H.
+   PATH is the file name, if known, otherwise NULL.
+   Return 0 if successful, or -1 with errno set upon failure.  */
+int
+_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf)
+{
+  /* GetFileType
+     <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */
+  DWORD type = GetFileType (h);
+  if (type == FILE_TYPE_DISK)
+    {
+      if (!initialized)
+        initialize ();
+
+      /* st_mode can be determined through
+         GetFileAttributesEx
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+         or through
+         GetFileInformationByHandle
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+         or through
+         GetFileInformationByHandleEx with argument FileBasicInfo
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info>
+         The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher.  */
+      BY_HANDLE_FILE_INFORMATION info;
+      if (! GetFileInformationByHandle (h, &info))
+        goto failed;
+
+      /* Test for error conditions before starting to fill *buf.  */
+      if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
+        {
+          errno = EOVERFLOW;
+          return -1;
+        }
+
+#if _GL_WINDOWS_STAT_INODES
+      /* st_ino can be determined through
+         GetFileInformationByHandle
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+         as 64 bits, or through
+         GetFileInformationByHandleEx with argument FileIdInfo
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info>
+         as 128 bits.
+         The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher.  */
+      /* Experiments show that GetFileInformationByHandleEx does not provide
+         much more information than GetFileInformationByHandle:
+           * The dwVolumeSerialNumber from GetFileInformationByHandle is equal
+             to the low 32 bits of the 64-bit VolumeSerialNumber from
+             GetFileInformationByHandleEx, and is apparently sufficient for
+             identifying the device.
+           * The nFileIndex from GetFileInformationByHandle is equal to the low
+             64 bits of the 128-bit FileId from GetFileInformationByHandleEx,
+             and the high 64 bits of this 128-bit FileId are zero.
+           * On a FAT file system, GetFileInformationByHandleEx fails with error
+             ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle
+             succeeds.
+           * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with
+             error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle
+             succeeds.  */
+# if _GL_WINDOWS_STAT_INODES == 2
+      if (GetFileInformationByHandleExFunc != NULL)
+        {
+          FILE_ID_INFO id;
+          if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id)))
+            {
+              buf->st_dev = id.VolumeSerialNumber;
+              verify (sizeof (ino_t) == sizeof (id.FileId));
+              memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t));
+              goto ino_done;
+            }
+          else
+            {
+              switch (GetLastError ())
+                {
+                case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */
+                case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */
+                  goto fallback;
+                default:
+                  goto failed;
+                }
+            }
+        }
+     fallback: ;
+      /* Fallback for older Windows versions.  */
+      buf->st_dev = info.dwVolumeSerialNumber;
+      buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
+      buf->st_ino._gl_ino[1] = 0;
+     ino_done: ;
+# else /* _GL_WINDOWS_STAT_INODES == 1 */
+      buf->st_dev = info.dwVolumeSerialNumber;
+      buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
+# endif
+#else
+      /* st_ino is not wide enough for identifying a file on a device.
+         Without st_ino, st_dev is pointless.  */
+      buf->st_dev = 0;
+      buf->st_ino = 0;
+#endif
+
+      /* st_mode.  */
+      unsigned int mode =
+        /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ?  */
+        ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
+        | S_IREAD_UGO
+        | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
+      if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+        {
+          /* Determine whether the file is executable by looking at the file
+             name suffix.
+             If the file name is already known, use it. Otherwise, for
+             non-empty files, it can be determined through
+             GetFinalPathNameByHandle
+             <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea>
+             or through
+             GetFileInformationByHandleEx with argument FileNameInfo
+             <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+             <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info>
+             Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher.  */
+          if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
+            {
+              char fpath[PATH_MAX];
+              if (path != NULL
+                  || (GetFinalPathNameByHandleFunc != NULL
+                      && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE)
+                         < sizeof (fpath)
+                      && (path = fpath, 1)))
+                {
+                  const char *last_dot = NULL;
+                  const char *p;
+                  for (p = path; *p != '\0'; p++)
+                    if (*p == '.')
+                      last_dot = p;
+                  if (last_dot != NULL)
+                    {
+                      const char *suffix = last_dot + 1;
+                      if (_stricmp (suffix, "exe") == 0
+                          || _stricmp (suffix, "bat") == 0
+                          || _stricmp (suffix, "cmd") == 0
+                          || _stricmp (suffix, "com") == 0)
+                        mode |= S_IEXEC_UGO;
+                    }
+                }
+              else
+                /* Cannot determine file name.  Pretend that it is executable.  */
+                mode |= S_IEXEC_UGO;
+            }
+        }
+      buf->st_mode = mode;
+
+      /* st_nlink can be determined through
+         GetFileInformationByHandle
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+         or through
+         GetFileInformationByHandleEx with argument FileStandardInfo
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info>
+         The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher.  */
+      buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks);
+
+      /* There's no easy way to map the Windows SID concept to an integer.  */
+      buf->st_uid = 0;
+      buf->st_gid = 0;
+
+      /* st_rdev is irrelevant for normal files and directories.  */
+      buf->st_rdev = 0;
+
+      /* st_size can be determined through
+         GetFileSizeEx
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex>
+         or through
+         GetFileAttributesEx
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+         or through
+         GetFileInformationByHandle
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+         or through
+         GetFileInformationByHandleEx with argument FileStandardInfo
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info>
+         The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher.  */
+      if (sizeof (buf->st_size) <= 4)
+        /* Range check already done above.  */
+        buf->st_size = info.nFileSizeLow;
+      else
+        buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
+
+      /* st_atime, st_mtime, st_ctime can be determined through
+         GetFileTime
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime>
+         or through
+         GetFileAttributesEx
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+         or through
+         GetFileInformationByHandle
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+         or through
+         GetFileInformationByHandleEx with argument FileBasicInfo
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info>
+         The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher.  */
+#if _GL_WINDOWS_STAT_TIMESPEC
+      buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
+      buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
+      buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
+#else
+      buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
+      buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
+      buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
+#endif
+
+      return 0;
+    }
+  else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE)
+    {
+      buf->st_dev = 0;
+#if _GL_WINDOWS_STAT_INODES == 2
+      buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
+#else
+      buf->st_ino = 0;
+#endif
+      buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR);
+      buf->st_nlink = 1;
+      buf->st_uid = 0;
+      buf->st_gid = 0;
+      buf->st_rdev = 0;
+      if (type == FILE_TYPE_PIPE)
+        {
+          /* PeekNamedPipe
+             <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */
+          DWORD bytes_available;
+          if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL))
+            buf->st_size = bytes_available;
+          else
+            buf->st_size = 0;
+        }
+      else
+        buf->st_size = 0;
+#if _GL_WINDOWS_STAT_TIMESPEC
+      buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0;
+      buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0;
+      buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0;
+#else
+      buf->st_atime = 0;
+      buf->st_mtime = 0;
+      buf->st_ctime = 0;
+#endif
+      return 0;
+    }
+  else
+    {
+      errno = ENOENT;
+      return -1;
+    }
+
+ failed:
+  {
+    DWORD error = GetLastError ();
+    #if 0
+    fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error);
+    #endif
+    switch (error)
+      {
+      case ERROR_ACCESS_DENIED:
+      case ERROR_SHARING_VIOLATION:
+        errno = EACCES;
+        break;
+
+      case ERROR_OUTOFMEMORY:
+        errno = ENOMEM;
+        break;
+
+      case ERROR_WRITE_FAULT:
+      case ERROR_READ_FAULT:
+      case ERROR_GEN_FAILURE:
+        errno = EIO;
+        break;
+
+      default:
+        errno = EINVAL;
+        break;
+      }
+    return -1;
+  }
+}
+
+#else
+
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+
+#endif
diff --git a/lib/stat-w32.h b/lib/stat-w32.h
new file mode 100644
index 0000000..6b961d7
--- /dev/null
+++ b/lib/stat-w32.h
@@ -0,0 +1,37 @@
+/* Core of implementation of fstat and stat for native Windows.
+   Copyright (C) 2017-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#ifndef _STAT_W32_H
+#define _STAT_W32_H 1
+
+/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00.  */
+#if _GL_WINDOWS_STAT_TIMESPEC
+extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft);
+#else
+extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft);
+#endif
+
+/* Fill *BUF with information about the file designated by H.
+   PATH is the file name, if known, otherwise NULL.
+   Return 0 if successful, or -1 with errno set upon failure.  */
+extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf);
+
+/* Bitmasks for st_mode.  */
+#define S_IREAD_UGO  (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6))
+#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
+#define S_IEXEC_UGO  (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6))
+
+#endif /* _STAT_W32_H */
diff --git a/lib/stat.c b/lib/stat.c
index c0bcb88..e3248a8 100644
--- a/lib/stat.c
+++ b/lib/stat.c
@@ -1,5 +1,5 @@
 /* Work around platform bugs in stat.
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 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
@@ -12,9 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-/* written by Eric Blake */
+/* Written by Eric Blake and Bruno Haible.  */
 
 /* 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
@@ -27,47 +27,72 @@
 #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
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WINDOWS_NATIVE
 #endif
 
+#if !defined WINDOWS_NATIVE
+
 static int
 orig_stat (const char *filename, struct stat *buf)
 {
   return stat (filename, buf);
 }
 
+#endif
+
 /* Specification.  */
+#ifdef __osf__
 /* 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 "sys/stat.h"
+#else
+# include <sys/stat.h>
+#endif
+
+#include "stat-time.h"
 
 #include <errno.h>
 #include <limits.h>
 #include <stdbool.h>
 #include <string.h>
-#include "dosname.h"
+#include "filename.h"
+#include "malloca.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
+#ifdef WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "stat-w32.h"
+#endif
+
+#ifdef WINDOWS_NATIVE
+/* Return TRUE if the given file name denotes an UNC root.  */
+static BOOL
+is_unc_root (const char *rname)
+{
+  /* Test whether it has the syntax '\\server\share'.  */
+  if (ISSLASH (rname[0]) && ISSLASH (rname[1]))
+    {
+      /* It starts with two slashes.  Find the next slash.  */
+      const char *p = rname + 2;
+      const char *q = p;
+      while (*q != '\0' && !ISSLASH (*q))
+        q++;
+      if (q > p && *q != '\0')
+        {
+          /* Found the next slash at q.  */
+          q++;
+          const char *r = q;
+          while (*r != '\0' && !ISSLASH (*r))
+            r++;
+          if (r > q && *r == '\0')
+            return TRUE;
+        }
+    }
+  return FALSE;
+}
 #endif
 
 /* Store information about NAME into ST.  Work around bugs with
@@ -77,62 +102,332 @@
    correctly.  */
 
 int
-rpl_stat (char const *name, struct stat *st)
+rpl_stat (char const *name, struct stat *buf)
 {
-  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))
+#ifdef WINDOWS_NATIVE
+  /* Fill the fields ourselves, because the original stat function returns
+     values for st_atime, st_mtime, st_ctime that depend on the current time
+     zone.  See
+     <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html>  */
+  /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work
+     around length limitations
+     <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ?  */
+
+  /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>
+     specifies: "More than two leading <slash> characters shall be treated as
+     a single <slash> character."  */
+  if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2]))
     {
-      size_t len = strlen (name);
-      if (ISSLASH (name[len - 1]))
+      name += 2;
+      while (ISSLASH (name[1]))
+        name++;
+    }
+
+  size_t len = strlen (name);
+  size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0);
+
+  /* Remove trailing slashes (except the very first one, at position
+     drive_prefix_len), but remember their presence.  */
+  size_t rlen;
+  bool check_dir = false;
+
+  rlen = len;
+  while (rlen > drive_prefix_len && ISSLASH (name[rlen-1]))
+    {
+      check_dir = true;
+      if (rlen == drive_prefix_len + 1)
+        break;
+      rlen--;
+    }
+
+  /* Handle '' and 'C:'.  */
+  if (!check_dir && rlen == drive_prefix_len)
+    {
+      errno = ENOENT;
+      return -1;
+    }
+
+  /* Handle '\\'.  */
+  if (rlen == 1 && ISSLASH (name[0]) && len >= 2)
+    {
+      errno = ENOENT;
+      return -1;
+    }
+
+  const char *rname;
+  char *malloca_rname;
+  if (rlen == len)
+    {
+      rname = name;
+      malloca_rname = NULL;
+    }
+  else
+    {
+      malloca_rname = malloca (rlen + 1);
+      if (malloca_rname == NULL)
         {
-          errno = ENOTDIR;
+          errno = ENOMEM;
           return -1;
         }
+      memcpy (malloca_rname, name, rlen);
+      malloca_rname[rlen] = '\0';
+      rname = malloca_rname;
     }
-#endif /* REPLACE_FUNC_STAT_FILE */
-#if REPLACE_FUNC_STAT_DIR
 
-  if (result == -1 && errno == ENOENT)
+  /* There are two ways to get at the requested information:
+       - by scanning the parent directory and examining the relevant
+         directory entry,
+       - by opening the file directly.
+     The first approach fails for root directories (e.g. 'C:\') and
+     UNC root directories (e.g. '\\server\share').
+     The second approach fails for some system files (e.g. 'C:\pagefile.sys'
+     and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION.
+     The second approach gives more information (in particular, correct
+     st_dev, st_ino, st_nlink fields).
+     So we use the second approach and, as a fallback except for root and
+     UNC root directories, also the first approach.  */
+  {
+    int ret;
+
     {
-      /* 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)
+      /* Approach based on the file.  */
+
+      /* Open a handle to the file.
+         CreateFile
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea>
+         <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files>  */
+      HANDLE h =
+        CreateFile (rname,
+                    FILE_READ_ATTRIBUTES,
+                    FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                    NULL,
+                    OPEN_EXISTING,
+                    /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only
+                       in case as different) makes sense only when applied to *all*
+                       filesystem operations.  */
+                    FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */,
+                    NULL);
+      if (h != INVALID_HANDLE_VALUE)
         {
-          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;
-            }
+          ret = _gl_fstat_by_handle (h, rname, buf);
+          CloseHandle (h);
+          goto done;
         }
     }
-#endif /* REPLACE_FUNC_STAT_DIR */
+
+    /* Test for root and UNC root directories.  */
+    if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len]))
+        || is_unc_root (rname))
+      goto failed;
+
+    /* Fallback.  */
+    {
+      /* Approach based on the directory entry.  */
+
+      if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL)
+        {
+          /* Other Windows API functions would fail with error
+             ERROR_INVALID_NAME.  */
+          if (malloca_rname != NULL)
+            freea (malloca_rname);
+          errno = ENOENT;
+          return -1;
+        }
+
+      /* Get the details about the directory entry.  This can be done through
+         FindFirstFile
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa>
+         or through
+         FindFirstFileEx with argument FindExInfoBasic
+         <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels>
+         <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa>  */
+      WIN32_FIND_DATA info;
+      HANDLE h = FindFirstFile (rname, &info);
+      if (h == INVALID_HANDLE_VALUE)
+        goto failed;
+
+      /* Test for error conditions before starting to fill *buf.  */
+      if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
+        {
+          FindClose (h);
+          if (malloca_rname != NULL)
+            freea (malloca_rname);
+          errno = EOVERFLOW;
+          return -1;
+        }
+
+# if _GL_WINDOWS_STAT_INODES
+      buf->st_dev = 0;
+#  if _GL_WINDOWS_STAT_INODES == 2
+      buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
+#  else /* _GL_WINDOWS_STAT_INODES == 1 */
+      buf->st_ino = 0;
+#  endif
+# else
+      /* st_ino is not wide enough for identifying a file on a device.
+         Without st_ino, st_dev is pointless.  */
+      buf->st_dev = 0;
+      buf->st_ino = 0;
+# endif
+
+      /* st_mode.  */
+      unsigned int mode =
+        /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ?  */
+        ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
+        | S_IREAD_UGO
+        | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
+      if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+        {
+          /* Determine whether the file is executable by looking at the file
+             name suffix.  */
+          if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
+            {
+              const char *last_dot = NULL;
+              const char *p;
+              for (p = info.cFileName; *p != '\0'; p++)
+                if (*p == '.')
+                  last_dot = p;
+              if (last_dot != NULL)
+                {
+                  const char *suffix = last_dot + 1;
+                  if (_stricmp (suffix, "exe") == 0
+                      || _stricmp (suffix, "bat") == 0
+                      || _stricmp (suffix, "cmd") == 0
+                      || _stricmp (suffix, "com") == 0)
+                    mode |= S_IEXEC_UGO;
+                }
+            }
+        }
+      buf->st_mode = mode;
+
+      /* st_nlink.  Ignore hard links here.  */
+      buf->st_nlink = 1;
+
+      /* There's no easy way to map the Windows SID concept to an integer.  */
+      buf->st_uid = 0;
+      buf->st_gid = 0;
+
+      /* st_rdev is irrelevant for normal files and directories.  */
+      buf->st_rdev = 0;
+
+      /* st_size.  */
+      if (sizeof (buf->st_size) <= 4)
+        /* Range check already done above.  */
+        buf->st_size = info.nFileSizeLow;
+      else
+        buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
+
+      /* st_atime, st_mtime, st_ctime.  */
+# if _GL_WINDOWS_STAT_TIMESPEC
+      buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
+      buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
+      buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
+# else
+      buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
+      buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
+      buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
+# endif
+
+      FindClose (h);
+
+      ret = 0;
+    }
+
+   done:
+    if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode))
+      {
+        errno = ENOTDIR;
+        ret = -1;
+      }
+    if (malloca_rname != NULL)
+      {
+        int saved_errno = errno;
+        freea (malloca_rname);
+        errno = saved_errno;
+      }
+    return ret;
+  }
+
+ failed:
+  {
+    DWORD error = GetLastError ();
+    #if 0
+    fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error);
+    #endif
+
+    if (malloca_rname != NULL)
+      freea (malloca_rname);
+
+    switch (error)
+      {
+      /* Some of these errors probably cannot happen with the specific flags
+         that we pass to CreateFile.  But who knows...  */
+      case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist.  */
+      case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist.  */
+      case ERROR_BAD_PATHNAME:   /* rname is such as '\\server'.  */
+      case ERROR_BAD_NET_NAME:   /* rname is such as '\\server\nonexistentshare'.  */
+      case ERROR_INVALID_NAME:   /* rname contains wildcards, misplaced colon, etc.  */
+      case ERROR_DIRECTORY:
+        errno = ENOENT;
+        break;
+
+      case ERROR_ACCESS_DENIED:  /* rname is such as 'C:\System Volume Information\foo'.  */
+      case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only).  */
+                                    /* XXX map to EACCES or EPERM? */
+        errno = EACCES;
+        break;
+
+      case ERROR_OUTOFMEMORY:
+        errno = ENOMEM;
+        break;
+
+      case ERROR_WRITE_PROTECT:
+        errno = EROFS;
+        break;
+
+      case ERROR_WRITE_FAULT:
+      case ERROR_READ_FAULT:
+      case ERROR_GEN_FAILURE:
+        errno = EIO;
+        break;
+
+      case ERROR_BUFFER_OVERFLOW:
+      case ERROR_FILENAME_EXCED_RANGE:
+        errno = ENAMETOOLONG;
+        break;
+
+      case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */
+        errno = EPERM;
+        break;
+
+      default:
+        errno = EINVAL;
+        break;
+      }
+
+    return -1;
+  }
+#else
+  int result = orig_stat (name, buf);
+  if (result == 0)
+    {
+# if REPLACE_FUNC_STAT_FILE
+      /* Solaris 9 mistakenly succeeds when given a non-directory with a
+         trailing slash.  */
+      if (!S_ISDIR (buf->st_mode))
+        {
+          size_t len = strlen (name);
+          if (ISSLASH (name[len - 1]))
+            {
+              errno = ENOTDIR;
+              return -1;
+            }
+        }
+# endif /* REPLACE_FUNC_STAT_FILE */
+      result = stat_time_normalize (result, buf);
+    }
   return result;
+#endif
 }
diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
index 1f8caee..8158b00 100644
--- a/lib/stdbool.in.h
+++ b/lib/stdbool.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2003, 2006-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2003, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _GL_STDBOOL_H
 #define _GL_STDBOOL_H
@@ -82,9 +82,9 @@
    /* 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
+          https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html
+          https://lists.gnu.org/r/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.
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index 17fcaea..945f192 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -1,6 +1,6 @@
 /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 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
@@ -13,13 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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>
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html>
  */
 
 #if __GNUC__ >= 3
@@ -39,7 +39,6 @@
 
 # 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@
@@ -54,33 +53,62 @@
 
 #  @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
+#  if (@REPLACE_NULL@ \
+       && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
+#   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
+#    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
+#     define NULL __null
+#    else
+#     define NULL 0L
+#    endif
+#   else
+#    define NULL ((void *) 0)
+#   endif
 #  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
+
+#  ifndef _@GUARD_PREFIX@_STDDEF_H
+#   define _@GUARD_PREFIX@_STDDEF_H
 
 /* Some platforms lack wchar_t.  */
 #if !@HAVE_WCHAR_T@
 # define wchar_t int
 #endif
 
+/* Some platforms lack max_align_t.  The check for _GCC_MAX_ALIGN_T is
+   a hack in case the configure-time test was done with g++ even though
+   we are currently compiling with gcc.  */
+#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
+# if !GNULIB_defined_max_align_t
+/* On the x86, the maximum storage alignment of double, long, etc. is 4,
+   but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
+   and the C11 standard allows this.  Work around this problem by
+   using __alignof__ (which returns 8 for double) rather than _Alignof
+   (which returns 4), and align each union member accordingly.  */
+#  ifdef __GNUC__
+#   define _GL_STDDEF_ALIGNAS(type) \
+      __attribute__ ((__aligned__ (__alignof__ (type))))
+#  else
+#   define _GL_STDDEF_ALIGNAS(type) /* */
+#  endif
+typedef union
+{
+  char *__p _GL_STDDEF_ALIGNAS (char *);
+  double __d _GL_STDDEF_ALIGNAS (double);
+  long double __ld _GL_STDDEF_ALIGNAS (long double);
+  long int __i _GL_STDDEF_ALIGNAS (long int);
+} rpl_max_align_t;
+#  define max_align_t rpl_max_align_t
+#  define GNULIB_defined_max_align_t 1
+# endif
+#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
index e2a0eb1..39b6a4f 100644
--- a/lib/stdint.in.h
+++ b/lib/stdint.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2012 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc.
    Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
    This file is part of gnulib.
 
@@ -13,11 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /*
  * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html>
  */
 
 #ifndef _@GUARD_PREFIX@_STDINT_H
@@ -38,8 +38,7 @@
    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_
+#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
 # @INCLUDE_NEXT@ @NEXT_STDINT_H@
 #else
 
@@ -80,54 +79,65 @@
 #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
 #define _@GUARD_PREFIX@_STDINT_H
 
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+   LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH.  */
+#include <limits.h>
+
+/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
+   wint_t.  */
+#if @GNULIB_OVERRIDES_WINT_T@
+# undef WINT_MIN
+# undef WINT_MAX
+# define WINT_MIN 0x0U
+# define WINT_MAX 0xffffffffU
+#endif
+
+#if ! @HAVE_C99_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
+# 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@
+# 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@
+#  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
+#  include <sys/inttypes.h>
+# endif
 
-#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+# 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
+#  include <sys/bitypes.h>
+# endif
 
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# 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))
+/* These are separate macros, because if you try to merge these macros into
+   a single one, HP-UX cc rejects the resulting expression in constant
+   expressions.  */
+# define _STDINT_UNSIGNED_MIN(bits, zero) \
+    (zero)
+# define _STDINT_SIGNED_MIN(bits, zero) \
+    (~ _STDINT_MAX (1, bits, 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)
+# define _STDINT_MAX(signed, bits, zero) \
+    (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
 
 #if !GNULIB_defined_stdint_types
 
@@ -136,26 +146,26 @@
 /* Here we assume a standard architecture where the hardware integer
    types have 8, 16, 32, optionally 64 bits.  */
 
-#undef int8_t
-#undef uint8_t
+# 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
+# define int8_t gl_int8_t
+# define uint8_t gl_uint8_t
 
-#undef int16_t
-#undef uint16_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
+# define int16_t gl_int16_t
+# define uint16_t gl_uint16_t
 
-#undef int32_t
-#undef uint32_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
+# 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
@@ -163,54 +173,54 @@
    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
+# 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
+#  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
+#   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
+#   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
+#   define int64_t gl_int64_t
+#   define GL_INT64_T
+#  endif
 # endif
-#endif
 
-#ifdef UINT64_MAX
-# define GL_UINT64_T
-#else
-# if ULONG_MAX >> 31 >> 31 >> 1 == 1
-#  undef uint64_t
+# 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
+#   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
+#   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
+#   define uint64_t gl_uint64_t
+#   define GL_UINT64_T
+#  endif
 # endif
-#endif
 
 /* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
+# define _UINT8_T
+# define _UINT32_T
+# define _UINT64_T
 
 
 /* 7.18.1.2. Minimum-width integer types */
@@ -219,26 +229,26 @@
    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
+# 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 */
 
@@ -251,50 +261,65 @@
    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
+# 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
+# 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
+# else
 typedef long int gl_int_fast32_t;
 typedef unsigned long int gl_uint_fast32_t;
-#endif
+# 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
+# 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
+/* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own
+   definitions of intptr_t and uintptr_t (which use int and unsigned)
+   to avoid clashes with declarations of system functions like sbrk.
+   Similarly, mingw 5.22 <crtdefs.h> defines _INTPTR_T_DEFINED and
+   _UINTPTR_T_DEFINED and needs its own definitions of intptr_t and
+   uintptr_t to avoid conflicting declarations of system functions like
+   _findclose in <io.h>.  */
+# if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \
+       || (defined __MINGW32__ && defined _INTPTR_T_DEFINED && defined _UINTPTR_T_DEFINED))
+#  undef intptr_t
+#  undef uintptr_t
+#  ifdef _WIN64
+typedef long long int gl_intptr_t;
+typedef unsigned long long int gl_uintptr_t;
+#  else
 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
+#  endif
+#  define intptr_t gl_intptr_t
+#  define uintptr_t gl_uintptr_t
+# endif
 
 /* 7.18.1.5. Greatest-width integer types */
 
@@ -305,33 +330,33 @@
    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
+# 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
+#   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
+#   define intmax_t gl_intmax_t
+#  endif
 # endif
-#endif
 
-#ifndef UINTMAX_MAX
-# undef UINTMAX_C
-# undef uintmax_t
-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+# 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
+#   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
+#   define uintmax_t gl_uintmax_t
+#  endif
 # 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
@@ -339,8 +364,8 @@
 typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
                                 ? 1 : -1];
 
-#define GNULIB_defined_stdint_types 1
-#endif /* !GNULIB_defined_stdint_types */
+# define GNULIB_defined_stdint_types 1
+# endif /* !GNULIB_defined_stdint_types */
 
 /* 7.18.2. Limits of specified-width integer types */
 
@@ -349,37 +374,37 @@
 /* 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 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 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
+# 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
+# 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
+#  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
+# 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 */
 
@@ -387,38 +412,38 @@
    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_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_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_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 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
+# 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 */
 
@@ -426,117 +451,127 @@
    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_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_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_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 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
+# 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
+# undef INTPTR_MIN
+# undef INTPTR_MAX
+# undef UINTPTR_MAX
+# ifdef _WIN64
+#  define INTPTR_MIN  LLONG_MIN
+#  define INTPTR_MAX  LLONG_MAX
+#  define UINTPTR_MAX  ULLONG_MAX
+# else
+#  define INTPTR_MIN  LONG_MIN
+#  define INTPTR_MAX  LONG_MAX
+#  define UINTPTR_MAX  ULONG_MAX
+# endif
 
 /* 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
+# 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
-#endif
 
-#ifndef UINTMAX_MAX
-# ifdef UINT64_MAX
-#  define UINTMAX_MAX  UINT64_MAX
-# else
-#  define UINTMAX_MAX  UINT32_MAX
+# ifndef UINTMAX_MAX
+#  ifdef UINT64_MAX
+#   define UINTMAX_MAX  UINT64_MAX
+#  else
+#   define UINTMAX_MAX  UINT32_MAX
+#  endif
 # 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)
+# undef PTRDIFF_MIN
+# undef PTRDIFF_MAX
+# if @APPLE_UNIVERSAL_BUILD@
+#  ifdef _LP64
+#   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (64, 0l)
+#   define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+#  else
+#   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (32, 0)
+#   define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+#  endif
 # 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  \
+#  define PTRDIFF_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#  define PTRDIFF_MAX  \
     _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-#endif
+# 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  \
+# undef SIG_ATOMIC_MIN
+# undef SIG_ATOMIC_MAX
+# if @HAVE_SIGNED_SIG_ATOMIC_T@
+#  define SIG_ATOMIC_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# else
+#  define SIG_ATOMIC_MIN  \
+    _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# endif
+# 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)
+# 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, 32, 0ul)
+#  define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
 # endif
-#else
-# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
-#endif
 
 /* wchar_t limits */
 /* Get WCHAR_MIN, WCHAR_MAX.
@@ -544,30 +579,44 @@
    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)
+# 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  \
+#  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
+# if @HAVE_SIGNED_WCHAR_T@
+#  define WCHAR_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# else
+#  define WCHAR_MIN  \
+    _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# endif
+# 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@)
+/* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
+   accurate, therefore use the definitions from above.  */
+# if !@GNULIB_OVERRIDES_WINT_T@
+#  undef WINT_MIN
+#  undef WINT_MAX
+#  if @HAVE_SIGNED_WINT_T@
+#   define WINT_MIN  \
+     _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#  else
+#   define WINT_MIN  \
+     _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#  endif
+#  define WINT_MAX  \
+    _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# endif
 
 /* 7.18.4. Macros for integer constants */
 
@@ -577,59 +626,120 @@
 /* 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 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 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 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
+# 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
+# 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
-#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
+# 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
+
+#endif /* !@HAVE_C99_STDINT_H@ */
+
+/* Macros specified by ISO/IEC TS 18661-1:2014.  */
+
+#if (!defined UINTMAX_WIDTH \
+     && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+# ifdef INT8_MAX
+#  define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
+# endif
+# ifdef UINT8_MAX
+#  define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
+# endif
+# ifdef INT16_MAX
+#  define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
+# endif
+# ifdef UINT16_MAX
+#  define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
+# endif
+# ifdef INT32_MAX
+#  define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
+# endif
+# ifdef UINT32_MAX
+#  define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
+# endif
+# ifdef INT64_MAX
+#  define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
+# endif
+# ifdef UINT64_MAX
+#  define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
+# endif
+# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
+# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
+# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
+# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
+# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
+# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
+# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
+# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
+# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
+# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
+# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
+# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
+# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
+# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
+# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
+# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
+# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
+# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
+# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
+# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
+# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
+# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
+# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
+# ifdef WINT_MAX
+#  define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
+# endif
+# ifdef SIG_ATOMIC_MAX
+#  define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
+# endif
+#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
 
 #endif /* _@GUARD_PREFIX@_STDINT_H */
 #endif /* !(defined __ANDROID__ && ...) */
diff --git a/lib/stdio--.h b/lib/stdio--.h
index 307fbde..fb63d30 100644
--- a/lib/stdio--.h
+++ b/lib/stdio--.h
@@ -1,6 +1,6 @@
 /* Like stdio.h, but redefine some names to avoid glitches.
 
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
index 920b4d4..d496257 100644
--- a/lib/stdio-impl.h
+++ b/lib/stdio-impl.h
@@ -1,5 +1,5 @@
 /* Implementation details of FILE streams.
-   Copyright (C) 2007-2008, 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2008, 2010-2019 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
@@ -12,12 +12,23 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://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.  */
 
+/* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private.  For now, work
+   around this problem by defining them ourselves.  FIXME: Do not rely on glibc
+   internals.  */
+#if defined _IO_EOF_SEEN
+# if !defined _IO_UNBUFFERED
+#  define _IO_UNBUFFERED 0x2
+# endif
+# if !defined _IO_IN_BACKUP
+#  define _IO_IN_BACKUP 0x100
+# endif
+#endif
 
 /* BSD stdio derived implementations.  */
 
@@ -28,10 +39,11 @@
 
 #include <errno.h>                             /* For detecting Plan9.  */
 
-#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */
+#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 
 # 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>.  */
+  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>.  */
 #  define fp_ ((struct { struct __FILE_public pub; \
                          struct { unsigned char *_base; int _size; } _bf; \
                          void *cookie; \
@@ -48,30 +60,89 @@
                          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>.  */
+  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>.  */
 #  define _p pub._p
 #  define _flags pub._flags
 #  define _r pub._r
 #  define _w pub._w
+# elif defined __ANDROID__ /* Android */
+#  ifdef __LP64__
+#   define _gl_flags_file_t int
+#  else
+#   define _gl_flags_file_t short
+#  endif
+  /* Up to this commit from 2015-10-12
+     <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
+     the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
+     see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
+     and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
+     After this commit, the innards of FILE are hidden.  */
+#  define fp_ ((struct { unsigned char *_p; \
+                         int _r; \
+                         int _w; \
+                         _gl_flags_file_t _flags; \
+                         _gl_flags_file_t _file; \
+                         struct { unsigned char *_base; size_t _size; } _bf; \
+                         int _lbfsize; \
+                         void *_cookie; \
+                         void *_close; \
+                         void *_read; \
+                         void *_seek; \
+                         void *_write; \
+                         struct { unsigned char *_base; size_t _size; } _ext; \
+                         unsigned char *_up; \
+                         int _ur; \
+                         unsigned char _ubuf[3]; \
+                         unsigned char _nbuf[1]; \
+                         struct { unsigned char *_base; size_t _size; } _lb; \
+                         int _blksize; \
+                         fpos_t _offset; \
+                         /* More fields, not relevant here.  */ \
+                       } *) fp)
 # else
 #  define fp_ fp
 # endif
 
-# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ /* NetBSD >= 1.5ZA, OpenBSD */
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
   /* 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> */
+     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+     and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
   struct __sfileext
     {
       struct  __sbuf _ub; /* ungetc buffer */
       /* More fields, not relevant here.  */
     };
 #  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+# elif defined __ANDROID__                     /* Android */
+  struct __sfileext
+    {
+      struct { unsigned char *_base; size_t _size; } _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)
 
+# if defined __ANDROID__ /* Android */
+  /* Needed after this commit from 2016-01-25
+     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
+#  ifndef __SEOF
+#   define __SLBF 1
+#   define __SNBF 2
+#   define __SRD 4
+#   define __SWR 8
+#   define __SRW 0x10
+#   define __SEOF 0x20
+#   define __SERR 0x40
+#  endif
+#  ifndef __SOFF
+#   define __SOFF 0x1000
+#  endif
+# endif
+
 #endif
 
 
@@ -80,7 +151,7 @@
 #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>.  */
+   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
 #  define _IOERR   0x40
 #  define _IOREAD  0x80
 #  define _IOWRT    0x4
@@ -98,6 +169,8 @@
                          int _file; \
                          unsigned int _flag; \
                        } *) fp)
+# elif defined __VMS                /* OpenVMS */
+#  define fp_ ((struct _iobuf *) fp)
 # else
 #  define fp_ fp
 # endif
@@ -109,4 +182,31 @@
 #  define _flag __flag
 # endif
 
+#elif defined _WIN32 && ! defined __CYGWIN__  /* newer Windows with MSVC */
+
+/* <stdio.h> does not define the innards of FILE any more.  */
+# define WINDOWS_OPAQUE_FILE
+
+struct _gl_real_FILE
+{
+  /* Note: Compared to older Windows and to mingw, it has the fields
+     _base and _cnt swapped. */
+  unsigned char *_ptr;
+  unsigned char *_base;
+  int _cnt;
+  int _flag;
+  int _file;
+  int _charbuf;
+  int _bufsiz;
+};
+# define fp_ ((struct _gl_real_FILE *) fp)
+
+/* These values were determined by a program similar to the one at
+   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
+# define _IOREAD   0x1
+# define _IOWRT    0x2
+# define _IORW     0x4
+# define _IOEOF    0x8
+# define _IOERR   0x10
+
 #endif
diff --git a/lib/stdio-safer.h b/lib/stdio-safer.h
index ac8a450..790846c 100644
--- a/lib/stdio-safer.h
+++ b/lib/stdio-safer.h
@@ -1,6 +1,6 @@
 /* Invoke stdio functions, but avoid some glitches.
 
-   Copyright (C) 2001, 2003, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2006, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/stdio.c b/lib/stdio.c
deleted file mode 100644
index e6ed829..0000000
--- a/lib/stdio.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#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
index f3b52d2..7c283ad 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdio.h>.
 
-   Copyright (C) 2004, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
@@ -46,11 +46,6 @@
 #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>
 
@@ -89,8 +84,13 @@
    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) \
+#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument)
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
 
 /* _GL_ATTRIBUTE_FORMAT_SCANF
    indicates to GCC that the function takes a format string and arguments,
@@ -111,13 +111,40 @@
 #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>.  */
+/* Solaris 10 and NetBSD 7.0 declare 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 \
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
     && ! defined __GLIBC__
 # include <unistd.h>
 #endif
 
+/* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
+    && ! defined __GLIBC__
+# include <sys/stat.h>
+#endif
+
+/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>.  We must include
+   it before we  #define perror rpl_perror.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* MSVC declares 'remove' in <io.h>, not in <stdio.h>.  We must include
+   it before we  #define remove rpl_remove.  */
+/* MSVC declares 'rename' in <io.h>, not in <stdio.h>.  We must include
+   it before we  #define rename rpl_rename.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <io.h>
+#endif
+
 
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
@@ -129,6 +156,15 @@
 #define _GL_STDIO_STRINGIZE(token) #token
 #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
 
+/* When also using extern inline, suppress the use of static inline in
+   standard headers of problematic Apple configurations, as Libc at
+   least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
+   <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \
+     && defined __GNUC__ && defined __STDC__)
+# undef putc_unlocked
+#endif
 
 #if @GNULIB_DPRINTF@
 # if @REPLACE_DPRINTF@
@@ -167,7 +203,9 @@
 # else
 _GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fclose);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef fclose
 /* Assume fclose is always declared.  */
@@ -211,7 +249,9 @@
 # else
 _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fflush);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef fflush
 /* Assume fflush is always declared.  */
@@ -230,7 +270,9 @@
 # else
 _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fgetc);
+# endif
 #endif
 
 #if @GNULIB_FGETS@
@@ -245,7 +287,9 @@
 # else
 _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fgets);
+# endif
 #endif
 
 #if @GNULIB_FOPEN@
@@ -260,7 +304,9 @@
 # else
 _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fopen);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef fopen
 /* Assume fopen is always declared.  */
@@ -288,7 +334,9 @@
 # else
 _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fprintf);
+# endif
 #endif
 #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
 # if !GNULIB_overrides_fprintf
@@ -339,7 +387,9 @@
 # else
 _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fputc);
+# endif
 #endif
 
 #if @GNULIB_FPUTS@
@@ -354,7 +404,9 @@
 # else
 _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fputs);
+# endif
 #endif
 
 #if @GNULIB_FREAD@
@@ -369,7 +421,9 @@
 # else
 _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fread);
+# endif
 #endif
 
 #if @GNULIB_FREOPEN@
@@ -387,7 +441,9 @@
 _GL_CXXALIAS_SYS (freopen, FILE *,
                   (const char *filename, const char *mode, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (freopen);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef freopen
 /* Assume freopen is always declared.  */
@@ -409,7 +465,9 @@
 # else
 _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fscanf);
+# endif
 #endif
 
 
@@ -460,7 +518,9 @@
 # else
 _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fseek);
+# endif
 #endif
 
 #if @GNULIB_FSEEKO@
@@ -523,7 +583,9 @@
 # else
 _GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (ftell);
+# endif
 #endif
 
 #if @GNULIB_FTELLO@
@@ -580,24 +642,32 @@
 _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>,
+/* Work around bug 11959 when fortifying glibc 2.4 through 2.15
+   <https://sourceware.org/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;
-}
+   This affects only function declaration attributes under certain
+   versions of gcc and clang, and is not needed for C++.  */
+#  if (0 < __USE_FORTIFY_LEVEL                                          \
+       && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \
+       && 3 < __GNUC__ + (4 <= __GNUC_MINOR__)                          \
+       && !defined __cplusplus)
 #   undef fwrite
+#   undef fwrite_unlocked
+extern size_t __REDIRECT (rpl_fwrite,
+                          (const void *__restrict, size_t, size_t,
+                           FILE *__restrict),
+                          fwrite);
+extern size_t __REDIRECT (rpl_fwrite_unlocked,
+                          (const void *__restrict, size_t, size_t,
+                           FILE *__restrict),
+                          fwrite_unlocked);
 #   define fwrite rpl_fwrite
+#   define fwrite_unlocked rpl_fwrite_unlocked
 #  endif
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (fwrite);
+# endif
 #endif
 
 #if @GNULIB_GETC@
@@ -611,7 +681,9 @@
 # else
 _GL_CXXALIAS_SYS (getc, int, (FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (getc);
+# endif
 #endif
 
 #if @GNULIB_GETCHAR@
@@ -625,7 +697,9 @@
 # else
 _GL_CXXALIAS_SYS (getchar, int, (void));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (getchar);
+# endif
 #endif
 
 #if @GNULIB_GETDELIM@
@@ -708,11 +782,10 @@
    so any use of gets warrants an unconditional warning; besides, C11
    removed it.  */
 #undef gets
-#if HAVE_RAW_DECL_GETS
+#if HAVE_RAW_DECL_GETS && !defined __cplusplus
 _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
@@ -791,7 +864,9 @@
 # else
 _GL_CXXALIAS_SYS (perror, void, (const char *string));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (perror);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef perror
 /* Assume perror is always declared.  */
@@ -862,7 +937,9 @@
 # else
 _GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (printf);
+# endif
 #endif
 #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
 # if !GNULIB_overrides_printf
@@ -885,7 +962,9 @@
 # else
 _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (putc);
+# endif
 #endif
 
 #if @GNULIB_PUTCHAR@
@@ -899,7 +978,9 @@
 # else
 _GL_CXXALIAS_SYS (putchar, int, (int c));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (putchar);
+# endif
 #endif
 
 #if @GNULIB_PUTS@
@@ -913,7 +994,9 @@
 # else
 _GL_CXXALIAS_SYS (puts, int, (const char *string));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (puts);
+# endif
 #endif
 
 #if @GNULIB_REMOVE@
@@ -927,7 +1010,9 @@
 # else
 _GL_CXXALIAS_SYS (remove, int, (const char *name));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (remove);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef remove
 /* Assume remove is always declared.  */
@@ -950,7 +1035,9 @@
 _GL_CXXALIAS_SYS (rename, int,
                   (const char *old_filename, const char *new_filename));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (rename);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef rename
 /* Assume rename is always declared.  */
@@ -1015,7 +1102,9 @@
 # else
 _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (scanf);
+# endif
 #endif
 
 #if @GNULIB_SNPRINTF@
@@ -1069,7 +1158,9 @@
 # else
 _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (sprintf);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef sprintf
 /* Assume sprintf is always declared.  */
@@ -1088,7 +1179,9 @@
 # else
 _GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (tmpfile);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef tmpfile
 # if HAVE_RAW_DECL_TMPFILE
@@ -1199,7 +1292,9 @@
 _GL_CXXALIAS_SYS_CAST (vfprintf, int,
                        (FILE *fp, const char *format, va_list args));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (vfprintf);
+# endif
 #endif
 #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
 # if !GNULIB_overrides_vfprintf
@@ -1253,7 +1348,9 @@
    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
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (vprintf);
+# endif
 #endif
 #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
 # if !GNULIB_overrides_vprintf
@@ -1329,7 +1426,9 @@
 _GL_CXXALIAS_SYS_CAST (vsprintf, int,
                        (char *str, const char *format, va_list args));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (vsprintf);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef vsprintf
 /* Assume vsprintf is always declared.  */
@@ -1338,8 +1437,6 @@
                       "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
index 6555840..2d02b4b 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2019 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
@@ -13,15 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://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.  */
+#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc
+/* Special invocation conventions inside some gnulib header files,
+   and inside some glibc header files, respectively.  */
 
 #@INCLUDE_NEXT@ @NEXT_STDLIB_H@
 
@@ -46,11 +47,14 @@
 
 /* Solaris declares getloadavg() in <sys/loadavg.h>.  */
 #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@
+/* OpenIndiana has a bug: <sys/time.h> must be included before
+   <sys/loadavg.h>.  */
+# include <sys/time.h>
 # include <sys/loadavg.h>
 #endif
 
 /* Native Windows platforms declare mktemp() in <io.h>.  */
-#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+#if 0 && (defined _WIN32 && ! defined __CYGWIN__)
 # include <io.h>
 #endif
 
@@ -86,9 +90,10 @@
 # endif
 #endif
 
-#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(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 Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps.  */
 /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
 /* But avoid namespace pollution on glibc systems and native Windows.  */
 # include <unistd.h>
@@ -171,7 +176,9 @@
 # else
 _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (calloc);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef calloc
 /* Assume calloc is always declared.  */
@@ -233,8 +240,8 @@
        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 */
+   For more details see the POSIX specification.
+   https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */
 # if !@HAVE_GETSUBOPT@
 _GL_FUNCDECL_SYS (getsubopt, int,
                   (char **optionp, char *const *tokens, char **valuep)
@@ -283,7 +290,9 @@
 # else
 _GL_CXXALIAS_SYS (malloc, void *, (size_t size));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (malloc);
+# endif
 #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 # undef malloc
 /* Assume malloc is always declared.  */
@@ -301,9 +310,20 @@
 _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
+#  if !@HAVE_MBTOWC@
+_GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
+#  endif
 _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mbtowc);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbtowc
+# if HAVE_RAW_DECL_MBTOWC
+_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - "
+                 "use gnulib module mbtowc for portability");
+# endif
 #endif
 
 #if @GNULIB_MKDTEMP@
@@ -519,6 +539,44 @@
 _GL_CXXALIASWARN (putenv);
 #endif
 
+#if @GNULIB_QSORT_R@
+/* Sort an array of NMEMB elements, starting at address BASE, each element
+   occupying SIZE bytes, in ascending order according to the comparison
+   function COMPARE.  */
+# if @REPLACE_QSORT_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef qsort_r
+#   define qsort_r rpl_qsort_r
+#  endif
+_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg) _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg));
+# else
+#  if !@HAVE_QSORT_R@
+_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg) _GL_ARG_NONNULL ((1, 4)));
+#  endif
+_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
+                                  int (*compare) (void const *, void const *,
+                                                  void *),
+                                  void *arg));
+# endif
+_GL_CXXALIASWARN (qsort_r);
+#elif defined GNULIB_POSIXCHECK
+# undef qsort_r
+# if HAVE_RAW_DECL_QSORT_R
+_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - "
+                 "use gnulib module qsort_r for portability");
+# endif
+#endif
+
 
 #if @GNULIB_RANDOM_R@
 # if !@HAVE_RANDOM_R@
@@ -530,10 +588,19 @@
 
 
 #if @GNULIB_RANDOM@
-# if !@HAVE_RANDOM@
+# if @REPLACE_RANDOM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef random
+#   define random rpl_random
+#  endif
+_GL_FUNCDECL_RPL (random, long, (void));
+_GL_CXXALIAS_RPL (random, long, (void));
+# else
+#  if !@HAVE_RANDOM@
 _GL_FUNCDECL_SYS (random, long, (void));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (random, long, (void));
+# endif
 _GL_CXXALIASWARN (random);
 #elif defined GNULIB_POSIXCHECK
 # undef random
@@ -544,10 +611,21 @@
 #endif
 
 #if @GNULIB_RANDOM@
-# if !@HAVE_RANDOM@
+# if @REPLACE_RANDOM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef srandom
+#   define srandom rpl_srandom
+#  endif
+_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed));
+_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed));
+# else
+#  if !@HAVE_RANDOM@
 _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
+#  endif
+/* Need to cast, because on FreeBSD, the first parameter is
+                                       unsigned long seed.  */
+_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed));
 # endif
-_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed));
 _GL_CXXALIASWARN (srandom);
 #elif defined GNULIB_POSIXCHECK
 # undef srandom
@@ -558,31 +636,56 @@
 #endif
 
 #if @GNULIB_RANDOM@
-# if !@HAVE_RANDOM@
+# if @REPLACE_INITSTATE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef initstate
+#   define initstate rpl_initstate
+#  endif
+_GL_FUNCDECL_RPL (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (initstate, char *,
+                  (unsigned int seed, char *buf, size_t buf_size));
+# else
+#  if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@
 _GL_FUNCDECL_SYS (initstate, char *,
                   (unsigned int seed, char *buf, size_t buf_size)
                   _GL_ARG_NONNULL ((2)));
+#  endif
+/* Need to cast, because on FreeBSD, the first parameter is
+                        unsigned long seed.  */
+_GL_CXXALIAS_SYS_CAST (initstate, char *,
+                       (unsigned int seed, char *buf, size_t buf_size));
 # 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
+# if HAVE_RAW_DECL_INITSTATE
 _GL_WARN_ON_USE (initstate, "initstate is unportable - "
                  "use gnulib module random for portability");
 # endif
 #endif
 
 #if @GNULIB_RANDOM@
-# if !@HAVE_RANDOM@
+# if @REPLACE_SETSTATE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setstate
+#   define setstate rpl_setstate
+#  endif
+_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state));
+# else
+#  if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@
 _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter
+   is                                     const char *arg_state.  */
+_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state));
 # endif
-_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state));
 _GL_CXXALIASWARN (setstate);
 #elif defined GNULIB_POSIXCHECK
 # undef setstate
-# if HAVE_RAW_DECL_SETSTATE_R
+# if HAVE_RAW_DECL_SETSTATE
 _GL_WARN_ON_USE (setstate, "setstate is unportable - "
                  "use gnulib module random for portability");
 # endif
@@ -718,7 +821,9 @@
 # else
 _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (realloc);
+# endif
 #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 # undef realloc
 /* Assume realloc is always declared.  */
@@ -726,6 +831,23 @@
                  "use gnulib module realloc-posix for portability");
 #endif
 
+
+#if @GNULIB_REALLOCARRAY@
+# if ! @HAVE_REALLOCARRAY@
+_GL_FUNCDECL_SYS (reallocarray, void *,
+                  (void *ptr, size_t nmemb, size_t size));
+# endif
+_GL_CXXALIAS_SYS (reallocarray, void *,
+                  (void *ptr, size_t nmemb, size_t size));
+_GL_CXXALIASWARN (reallocarray);
+#elif defined GNULIB_POSIXCHECK
+# undef reallocarray
+# if HAVE_RAW_DECL_REALLOCARRAY
+_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - "
+                 "use gnulib module reallocarray for portability");
+# endif
+#endif
+
 #if @GNULIB_REALPATH@
 # if @REPLACE_REALPATH@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -766,6 +888,22 @@
 # endif
 #endif
 
+#if @GNULIB_SECURE_GETENV@
+/* Look up NAME in the environment, returning 0 in insecure situations.  */
+# if !@HAVE_SECURE_GETENV@
+_GL_FUNCDECL_SYS (secure_getenv, char *,
+                  (char const *name) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name));
+_GL_CXXALIASWARN (secure_getenv);
+#elif defined GNULIB_POSIXCHECK
+# undef secure_getenv
+# if HAVE_RAW_DECL_SECURE_GETENV
+_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - "
+                 "use gnulib module secure_getenv for portability");
+# endif
+#endif
+
 #if @GNULIB_SETENV@
 /* Set NAME to VALUE in the environment.
    If REPLACE is nonzero, overwrite an existing value.  */
@@ -805,6 +943,7 @@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   define strtod rpl_strtod
 #  endif
+#  define GNULIB_defined_strtod_function 1
 _GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
                                   _GL_ARG_NONNULL ((1)));
 _GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
@@ -815,7 +954,9 @@
 #  endif
 _GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (strtod);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef strtod
 # if HAVE_RAW_DECL_STRTOD
@@ -824,6 +965,32 @@
 # endif
 #endif
 
+#if @GNULIB_STRTOLD@
+ /* Parse a 'long double' from STRING, updating ENDP if appropriate.  */
+# if @REPLACE_STRTOLD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtold rpl_strtold
+#  endif
+#  define GNULIB_defined_strtold_function 1
+_GL_FUNCDECL_RPL (strtold, long double, (const char *str, char **endp)
+                                        _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtold, long double, (const char *str, char **endp));
+# else
+#  if !@HAVE_STRTOLD@
+_GL_FUNCDECL_SYS (strtold, long double, (const char *str, char **endp)
+                                        _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtold, long double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtold);
+#elif defined GNULIB_POSIXCHECK
+# undef strtold
+# if HAVE_RAW_DECL_STRTOLD
+_GL_WARN_ON_USE (strtold, "strtold is unportable - "
+                 "use gnulib module strtold 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,
@@ -928,7 +1095,9 @@
 # else
 _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wctomb);
+# endif
 #endif
 
 
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
index e857abe..a1d32fd 100644
--- a/lib/stpcpy.c
+++ b/lib/stpcpy.c
@@ -1,5 +1,5 @@
 /* stpcpy.c -- copy a string and return pointer to end of new string
-   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2012 Free Software
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2019 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
@@ -16,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/strchrnul.c b/lib/strchrnul.c
index 1be4249..0f5dd81 100644
--- a/lib/strchrnul.c
+++ b/lib/strchrnul.c
@@ -1,5 +1,5 @@
 /* Searching in a string.
-   Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/strchrnul.valgrind b/lib/strchrnul.valgrind
index b14fa13..781d037 100644
--- a/lib/strchrnul.valgrind
+++ b/lib/strchrnul.valgrind
@@ -1,4 +1,20 @@
 # Suppress a valgrind message about use of uninitialized memory in strchrnul().
+
+# Copyright (C) 2008-2019 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 <https://www.gnu.org/licenses/>.
+
 # This use is OK because it provides only a speedup.
 {
     strchrnul-value4
diff --git a/lib/strdup.c b/lib/strdup.c
index a3f8c86..717cf65 100644
--- a/lib/strdup.c
+++ b/lib/strdup.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2012 Free Software
+/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2019 Free Software
    Foundation, Inc.
 
    This file is part of the GNU C Library.
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBC
 # include <config.h>
diff --git a/lib/streq.h b/lib/streq.h
index b312f7f..326537b 100644
--- a/lib/streq.h
+++ b/lib/streq.h
@@ -1,5 +1,5 @@
 /* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002, 2007, 2009-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>.  */
 
diff --git a/lib/strerror-override.c b/lib/strerror-override.c
index f7cac65..558a010 100644
--- a/lib/strerror-override.c
+++ b/lib/strerror-override.c
@@ -1,6 +1,6 @@
 /* strerror-override.c --- POSIX compatible system error routine
 
-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
 
diff --git a/lib/strerror-override.h b/lib/strerror-override.h
index 6468681..255febc 100644
--- a/lib/strerror-override.h
+++ b/lib/strerror-override.h
@@ -1,6 +1,6 @@
 /* strerror-override.h --- POSIX compatible system error routine
 
-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _GL_STRERROR_OVERRIDE_H
 # define _GL_STRERROR_OVERRIDE_H
@@ -48,7 +48,7 @@
      || GNULIB_defined_EOWNERDEAD \
      || GNULIB_defined_ENOTRECOVERABLE \
      || GNULIB_defined_EILSEQ
-extern const char *strerror_override (int errnum);
+extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST;
 # else
 #  define strerror_override(ignored) NULL
 # endif
diff --git a/lib/strerror.c b/lib/strerror.c
index 587bd21..f5900fd 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -1,6 +1,6 @@
 /* strerror.c --- POSIX compatible system error routine
 
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -66,5 +66,6 @@
   if (sizeof buf <= len)
     abort ();
 
-  return memcpy (buf, msg, len + 1);
+  memcpy (buf, msg, len + 1);
+  return buf;
 }
diff --git a/lib/strerror_r.c b/lib/strerror_r.c
index 76f6fc6..85b9c6b 100644
--- a/lib/strerror_r.c
+++ b/lib/strerror_r.c
@@ -1,6 +1,6 @@
 /* strerror_r.c --- POSIX compatible system error routine
 
-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
 
@@ -28,13 +28,20 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#if !HAVE_SNPRINTF
+# include <stdarg.h>
+#endif
 
 #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);
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int __xpg_strerror_r (int errnum, char *buf, size_t buflen);
 
 #elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__)
 
@@ -54,7 +61,7 @@
 
 # define USE_SYSTEM_STRERROR 1
 
-# if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__
+# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__
 
 /* No locking needed.  */
 
@@ -63,6 +70,10 @@
 #   include <nl_types.h>
 #  endif
 
+#ifdef __cplusplus
+extern "C" {
+#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
@@ -75,6 +86,10 @@
 extern int sys_nerr;
 #  endif
 
+#ifdef __cplusplus
+}
+#endif
+
 # else
 
 #  include "glthread/lock.h"
@@ -114,22 +129,13 @@
 safe_copy (char *buf, size_t buflen, const char *msg)
 {
   size_t len = strlen (msg);
-  int ret;
+  size_t moved = len < buflen ? len : buflen - 1;
 
-  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;
+  /* Although POSIX lets memmove corrupt errno, we don't
+     know of any implementation where this is a real problem.  */
+  memmove (buf, msg, moved);
+  buf[moved] = '\0';
+  return len < buflen ? 0 : ERANGE;
 }
 
 
@@ -197,13 +203,16 @@
 # else
     ret = strerror_r (errnum, buf, buflen);
 
-    /* Some old implementations may return (-1, EINVAL) instead of EINVAL.  */
+    /* Some old implementations may return (-1, EINVAL) instead of EINVAL.
+       But on Haiku, valid error numbers are negative.  */
+#  if !defined __HAIKU__
     if (ret < 0)
       ret = errno;
+#  endif
 # endif
 
-# ifdef _AIX
-    /* AIX returns 0 rather than ERANGE when truncating strings; try
+# if defined _AIX || defined __HAIKU__
+    /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try
        again until we are sure we got the entire string.  */
     if (!ret && strlen (buf) == buflen - 1)
       {
@@ -240,7 +249,7 @@
     /* 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 */
+# if defined __NetBSD__ || defined __hpux || (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.
@@ -317,8 +326,124 @@
 
 #endif
 
+#if defined _WIN32 && !defined __CYGWIN__
+    /* MSVC 14 defines names for many error codes in the range 100..140,
+       but _sys_errlist contains strings only for the error codes
+       < _sys_nerr = 43.  */
+    if (ret == EINVAL)
+      {
+        const char *errmsg;
+
+        switch (errnum)
+          {
+          case 100 /* EADDRINUSE */:
+            errmsg = "Address already in use";
+            break;
+          case 101 /* EADDRNOTAVAIL */:
+            errmsg = "Cannot assign requested address";
+            break;
+          case 102 /* EAFNOSUPPORT */:
+            errmsg = "Address family not supported by protocol";
+            break;
+          case 103 /* EALREADY */:
+            errmsg = "Operation already in progress";
+            break;
+          case 105 /* ECANCELED */:
+            errmsg = "Operation canceled";
+            break;
+          case 106 /* ECONNABORTED */:
+            errmsg = "Software caused connection abort";
+            break;
+          case 107 /* ECONNREFUSED */:
+            errmsg = "Connection refused";
+            break;
+          case 108 /* ECONNRESET */:
+            errmsg = "Connection reset by peer";
+            break;
+          case 109 /* EDESTADDRREQ */:
+            errmsg = "Destination address required";
+            break;
+          case 110 /* EHOSTUNREACH */:
+            errmsg = "No route to host";
+            break;
+          case 112 /* EINPROGRESS */:
+            errmsg = "Operation now in progress";
+            break;
+          case 113 /* EISCONN */:
+            errmsg = "Transport endpoint is already connected";
+            break;
+          case 114 /* ELOOP */:
+            errmsg = "Too many levels of symbolic links";
+            break;
+          case 115 /* EMSGSIZE */:
+            errmsg = "Message too long";
+            break;
+          case 116 /* ENETDOWN */:
+            errmsg = "Network is down";
+            break;
+          case 117 /* ENETRESET */:
+            errmsg = "Network dropped connection on reset";
+            break;
+          case 118 /* ENETUNREACH */:
+            errmsg = "Network is unreachable";
+            break;
+          case 119 /* ENOBUFS */:
+            errmsg = "No buffer space available";
+            break;
+          case 123 /* ENOPROTOOPT */:
+            errmsg = "Protocol not available";
+            break;
+          case 126 /* ENOTCONN */:
+            errmsg = "Transport endpoint is not connected";
+            break;
+          case 128 /* ENOTSOCK */:
+            errmsg = "Socket operation on non-socket";
+            break;
+          case 129 /* ENOTSUP */:
+            errmsg = "Not supported";
+            break;
+          case 130 /* EOPNOTSUPP */:
+            errmsg = "Operation not supported";
+            break;
+          case 132 /* EOVERFLOW */:
+            errmsg = "Value too large for defined data type";
+            break;
+          case 133 /* EOWNERDEAD */:
+            errmsg = "Owner died";
+            break;
+          case 134 /* EPROTO */:
+            errmsg = "Protocol error";
+            break;
+          case 135 /* EPROTONOSUPPORT */:
+            errmsg = "Protocol not supported";
+            break;
+          case 136 /* EPROTOTYPE */:
+            errmsg = "Protocol wrong type for socket";
+            break;
+          case 138 /* ETIMEDOUT */:
+            errmsg = "Connection timed out";
+            break;
+          case 140 /* EWOULDBLOCK */:
+            errmsg = "Operation would block";
+            break;
+          default:
+            errmsg = NULL;
+            break;
+          }
+        if (errmsg != NULL)
+          ret = safe_copy (buf, buflen, errmsg);
+      }
+#endif
+
     if (ret == EINVAL && !*buf)
-      snprintf (buf, buflen, "Unknown error %d", errnum);
+      {
+#if defined __HAIKU__
+        /* For consistency with perror().  */
+        snprintf (buf, buflen, "Unknown Application Error (%d)", errnum);
+#else
+        snprintf (buf, buflen, "Unknown error %d", errnum);
+#endif
+      }
 
     errno = saved_errno;
     return ret;
diff --git a/lib/string.in.h b/lib/string.in.h
index f8d7520..9b8ced2 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <string.h>.
 
-   Copyright (C) 1995-1996, 2001-2012 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 2001-2019 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
@@ -13,18 +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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _@GUARD_PREFIX@_STRING_H
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
 #endif
 @PRAGMA_COLUMNS@
 
+#if defined _GL_ALREADY_INCLUDING_STRING_H
+/* Special invocation convention:
+   - On OS X/NetBSD we have a sequence of nested includes
+       <string.h> -> <strings.h> -> "string.h"
+     In this situation system _chk variants due to -D_FORTIFY_SOURCE
+     might be used after any replacements defined here.  */
+
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+
+#define _GL_ALREADY_INCLUDING_STRING_H
+
 /* The include_next requires a split double-inclusion guard.  */
 #@INCLUDE_NEXT@ @NEXT_STRING_H@
 
+#undef _GL_ALREADY_INCLUDING_STRING_H
+
 #ifndef _@GUARD_PREFIX@_STRING_H
 #define _@GUARD_PREFIX@_STRING_H
 
@@ -58,6 +74,23 @@
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
 
+/* Clear a block of memory.  The compiler will not delete a call to
+   this function, even if the block is dead after the call.  */
+#if @GNULIB_EXPLICIT_BZERO@
+# if ! @HAVE_EXPLICIT_BZERO@
+_GL_FUNCDECL_SYS (explicit_bzero, void,
+                  (void *__dest, size_t __n) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
+_GL_CXXALIASWARN (explicit_bzero);
+#elif defined GNULIB_POSIXCHECK
+# undef explicit_bzero
+# if HAVE_RAW_DECL_EXPLICIT_BZERO
+_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
+                 "use gnulib module explicit_bzero for portability");
+# endif
+#endif
+
 /* Find the index of the least-significant set bit.  */
 #if @GNULIB_FFSL@
 # if !@HAVE_FFSL@
@@ -116,7 +149,7 @@
 _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
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (memchr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -384,7 +417,9 @@
 # else
 _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (strncat);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef strncat
 # if HAVE_RAW_DECL_STRNCAT
@@ -400,15 +435,15 @@
 #   undef strndup
 #   define strndup rpl_strndup
 #  endif
-_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n)
                                    _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
 # else
 #  if ! @HAVE_DECL_STRNDUP@
-_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n)
                                    _GL_ARG_NONNULL ((1)));
 #  endif
-_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
 # endif
 _GL_CXXALIASWARN (strndup);
 #elif defined GNULIB_POSIXCHECK
@@ -428,17 +463,17 @@
 #   undef strnlen
 #   define strnlen rpl_strnlen
 #  endif
-_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)
                                    _GL_ATTRIBUTE_PURE
                                    _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen));
 # else
 #  if ! @HAVE_DECL_STRNLEN@
-_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)
                                    _GL_ATTRIBUTE_PURE
                                    _GL_ARG_NONNULL ((1)));
 #  endif
-_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen));
 # endif
 _GL_CXXALIASWARN (strnlen);
 #elif defined GNULIB_POSIXCHECK
@@ -479,7 +514,7 @@
 _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
 _GL_CXXALIASWARN1 (strpbrk, char const *,
                    (char const *__s, char const *__accept));
-# else
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strpbrk);
 # endif
 # if defined GNULIB_POSIXCHECK
@@ -581,7 +616,7 @@
 _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
 _GL_CXXALIASWARN1 (strstr, const char *,
                    (const char *haystack, const char *needle));
-# else
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strstr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -660,7 +695,7 @@
    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
+   https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html
 
    Caveat: It modifies the original string.
    Caveat: These functions cannot be used on constant strings.
@@ -947,7 +982,9 @@
 # else
 _GL_CXXALIAS_SYS (strerror, char *, (int));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (strerror);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef strerror
 /* Assume strerror is always declared.  */
@@ -1027,3 +1064,4 @@
 
 #endif /* _@GUARD_PREFIX@_STRING_H */
 #endif /* _@GUARD_PREFIX@_STRING_H */
+#endif
diff --git a/lib/stripslash.c b/lib/stripslash.c
index ef458c6..dfc15b4 100644
--- a/lib/stripslash.c
+++ b/lib/stripslash.c
@@ -1,6 +1,6 @@
 /* stripslash.c -- remove redundant trailing slashes from a file name
 
-   Copyright (C) 1990, 2001, 2003-2006, 2009-2012 Free Software Foundation,
+   Copyright (C) 1990, 2001, 2003-2006, 2009-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/strndup.c b/lib/strndup.c
index 4053871..5b74828 100644
--- a/lib/strndup.c
+++ b/lib/strndup.c
@@ -1,6 +1,6 @@
 /* A replacement function, for systems that lack strndup.
 
-   Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2012 Free Software
+   Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/strnlen.c b/lib/strnlen.c
index d36180d..9fb6635 100644
--- a/lib/strnlen.c
+++ b/lib/strnlen.c
@@ -1,5 +1,5 @@
 /* Find the length of STRING, but scan at most MAXLEN characters.
-   Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2019 Free Software Foundation, Inc.
    Written by Simon Josefsson.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/strnlen1.c b/lib/strnlen1.c
deleted file mode 100644
index 52dc507..0000000
--- a/lib/strnlen1.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* 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
deleted file mode 100644
index 4c4f0c0..0000000
--- a/lib/strnlen1.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* 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
deleted file mode 100644
index bf992a8..0000000
--- a/lib/strtol.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* Convert string representation of a number into an integer value.
-
-   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
-   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/>.  */
-
-#ifdef _LIBC
-# define USE_NUMBER_GROUPING
-#else
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-#include <limits.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef USE_NUMBER_GROUPING
-# include "../locale/localeinfo.h"
-#endif
-
-/* Nonzero if we are defining 'strtoul' or 'strtoull', operating on
-   unsigned integers.  */
-#ifndef UNSIGNED
-# define UNSIGNED 0
-# define INT LONG int
-#else
-# define INT unsigned LONG int
-#endif
-
-/* Determine the name.  */
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# if UNSIGNED
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol __wcstoull_l
-#   else
-#    define strtol __wcstoul_l
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol __strtoull_l
-#   else
-#    define strtol __strtoul_l
-#   endif
-#  endif
-# else
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol __wcstoll_l
-#   else
-#    define strtol __wcstol_l
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol __strtoll_l
-#   else
-#    define strtol __strtol_l
-#   endif
-#  endif
-# endif
-#else
-# if UNSIGNED
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol wcstoull
-#   else
-#    define strtol wcstoul
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol strtoull
-#   else
-#    define strtol strtoul
-#   endif
-#  endif
-# else
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol wcstoll
-#   else
-#    define strtol wcstol
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol strtoll
-#   endif
-#  endif
-# endif
-#endif
-
-/* 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 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.  */
-
-/* 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 arithmetic type T is signed.  */
-# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* The maximum and minimum values for the integer type T.  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.  */
-# 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)))
-
-# ifndef ULLONG_MAX
-#  define ULLONG_MAX TYPE_MAXIMUM (unsigned long long)
-# endif
-# ifndef LLONG_MAX
-#  define LLONG_MAX TYPE_MAXIMUM (long long int)
-# endif
-# 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 = ULLONG_MAX;
-#  undef STRTOL_ULONG_MAX
-#  define STRTOL_ULONG_MAX maxquad
-# endif
-#else
-# define LONG long
-# define STRTOL_LONG_MIN LONG_MIN
-# define STRTOL_LONG_MAX LONG_MAX
-# define STRTOL_ULONG_MAX ULONG_MAX
-#endif
-
-
-/* We use this code also for the extended locale handling where the
-   function gets as an additional argument the locale which has to be
-   used.  To access the values we have to redefine the _NL_CURRENT
-   macro.  */
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# undef _NL_CURRENT
-# define _NL_CURRENT(category, item) \
-  (current->values[_NL_ITEM_INDEX (item)].string)
-# define LOCALE_PARAM , loc
-# define LOCALE_PARAM_PROTO , __locale_t loc
-#else
-# define LOCALE_PARAM
-# define LOCALE_PARAM_PROTO
-#endif
-
-#ifdef USE_WIDE_CHAR
-# include <wchar.h>
-# include <wctype.h>
-# define L_(Ch) L##Ch
-# define UCHAR_TYPE wint_t
-# define STRING_TYPE wchar_t
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-#  define ISSPACE(Ch) __iswspace_l ((Ch), loc)
-#  define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
-#  define TOUPPER(Ch) __towupper_l ((Ch), loc)
-# else
-#  define ISSPACE(Ch) iswspace (Ch)
-#  define ISALPHA(Ch) iswalpha (Ch)
-#  define TOUPPER(Ch) towupper (Ch)
-# endif
-#else
-# define L_(Ch) Ch
-# define UCHAR_TYPE unsigned char
-# define STRING_TYPE char
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-#  define ISSPACE(Ch) __isspace_l ((Ch), loc)
-#  define ISALPHA(Ch) __isalpha_l ((Ch), loc)
-#  define TOUPPER(Ch) __toupper_l ((Ch), loc)
-# else
-#  define ISSPACE(Ch) isspace (Ch)
-#  define ISALPHA(Ch) isalpha (Ch)
-#  define TOUPPER(Ch) toupper (Ch)
-# endif
-#endif
-
-#define INTERNAL(X) INTERNAL1(X)
-#define INTERNAL1(X) __##X##_internal
-#define WEAKNAME(X) WEAKNAME1(X)
-
-#ifdef USE_NUMBER_GROUPING
-/* This file defines a function to check for correct grouping.  */
-# include "grouping.h"
-#endif
-
-
-
-/* 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.
-   If ENDPTR is not NULL, a pointer to the character after the last
-   one converted is stored in *ENDPTR.  */
-
-INT
-INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-                   int base, int group LOCALE_PARAM_PROTO)
-{
-  int negative;
-  register unsigned LONG int cutoff;
-  register unsigned int cutlim;
-  register unsigned LONG int i;
-  register const STRING_TYPE *s;
-  register UCHAR_TYPE c;
-  const STRING_TYPE *save, *end;
-  int overflow;
-
-#ifdef USE_NUMBER_GROUPING
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-  struct locale_data *current = loc->__locales[LC_NUMERIC];
-# endif
-  /* The thousands character of the current locale.  */
-  wchar_t thousands = L'\0';
-  /* The numeric grouping specification of the current locale,
-     in the format described in <locale.h>.  */
-  const char *grouping;
-
-  if (group)
-    {
-      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
-      if (*grouping <= 0 || *grouping == CHAR_MAX)
-        grouping = NULL;
-      else
-        {
-          /* 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';
-# endif
-          if (thousands == L'\0')
-            grouping = NULL;
-        }
-    }
-  else
-    grouping = NULL;
-#endif
-
-  if (base < 0 || base == 1 || base > 36)
-    {
-      __set_errno (EINVAL);
-      return 0;
-    }
-
-  save = s = nptr;
-
-  /* Skip white space.  */
-  while (ISSPACE (*s))
-    ++s;
-  if (*s == L_('\0'))
-    goto noconv;
-
-  /* Check for a sign.  */
-  if (*s == L_('-'))
-    {
-      negative = 1;
-      ++s;
-    }
-  else if (*s == L_('+'))
-    {
-      negative = 0;
-      ++s;
-    }
-  else
-    negative = 0;
-
-  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
-  if (*s == L_('0'))
-    {
-      if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
-        {
-          s += 2;
-          base = 16;
-        }
-      else if (base == 0)
-        base = 8;
-    }
-  else if (base == 0)
-    base = 10;
-
-  /* Save the pointer so we can check later if anything happened.  */
-  save = s;
-
-#ifdef USE_NUMBER_GROUPING
-  if (group)
-    {
-      /* 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 (*s == thousands)
-        end = s;
-      else
-        end = correctly_grouped_prefix (s, end, thousands, grouping);
-    }
-  else
-#endif
-    end = NULL;
-
-  cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
-  cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
-
-  overflow = 0;
-  i = 0;
-  for (c = *s; c != L_('\0'); c = *++s)
-    {
-      if (s == end)
-        break;
-      if (c >= L_('0') && c <= L_('9'))
-        c -= L_('0');
-      else if (ISALPHA (c))
-        c = TOUPPER (c) - L_('A') + 10;
-      else
-        break;
-      if ((int) c >= base)
-        break;
-      /* Check for overflow.  */
-      if (i > cutoff || (i == cutoff && c > cutlim))
-        overflow = 1;
-      else
-        {
-          i *= (unsigned LONG int) base;
-          i += c;
-        }
-    }
-
-  /* Check if anything actually happened.  */
-  if (s == save)
-    goto noconv;
-
-  /* Store in ENDPTR the address of one character
-     past the last character we converted.  */
-  if (endptr != NULL)
-    *endptr = (STRING_TYPE *) s;
-
-#if !UNSIGNED
-  /* Check for a value that is within the range of
-     '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))
-    overflow = 1;
-#endif
-
-  if (overflow)
-    {
-      __set_errno (ERANGE);
-#if UNSIGNED
-      return STRTOL_ULONG_MAX;
-#else
-      return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
-#endif
-    }
-
-  /* Return the result of the appropriate sign.  */
-  return negative ? -i : i;
-
-noconv:
-  /* 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'.  */
-  if (endptr != NULL)
-    {
-      if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
-          && save[-2] == L_('0'))
-        *endptr = (STRING_TYPE *) &save[-1];
-      else
-        /*  There was no number to convert.  */
-        *endptr = (STRING_TYPE *) nptr;
-    }
-
-  return 0L;
-}
-
-/* External user entry point.  */
-
-
-INT
-#ifdef weak_function
-weak_function
-#endif
-strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-        int base LOCALE_PARAM_PROTO)
-{
-  return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
-}
diff --git a/lib/strverscmp.c b/lib/strverscmp.c
index 490773d..b54898e 100644
--- a/lib/strverscmp.c
+++ b/lib/strverscmp.c
@@ -1,57 +1,43 @@
 /* Compare strings while treating digits characters numerically.
-   Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1997-2019 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 3, or (at your option)
-   any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the 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,
+   The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   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 the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
-#if !_LIBC
-# include <config.h>
+#ifndef _LIBC
+# include <libc-config.h>
+# define __strverscmp strverscmp
 #endif
 
+#include <stdint.h>
 #include <string.h>
 #include <ctype.h>
 
 /* states: S_N: normal, S_I: comparing integral part, S_F: comparing
            fractional parts, S_Z: idem but with leading Zeroes only */
-#define S_N    0x0
-#define S_I    0x4
-#define S_F    0x8
-#define S_Z    0xC
+#define  S_N    0x0
+#define  S_I    0x3
+#define  S_F    0x6
+#define  S_Z    0x9
 
 /* result_type: CMP: return diff; LEN: compare using len_diff/diff */
-#define CMP    2
-#define LEN    3
+#define  CMP    2
+#define  LEN    3
 
 
-/* ISDIGIT differs from isdigit, as follows:
-   - 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 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
-#undef strverscmp
-
-#ifndef weak_alias
-# define __strverscmp strverscmp
-#endif
-
 /* Compare S1 and S2 as strings holding indices/version numbers,
    returning less than, equal to or greater than zero if S1 is less than,
    equal to or greater than S2 (for more info, see the texinfo doc).
@@ -62,70 +48,65 @@
 {
   const unsigned char *p1 = (const unsigned char *) s1;
   const unsigned char *p2 = (const unsigned char *) s2;
-  unsigned char c1, c2;
-  int state;
-  int diff;
 
-  /* Symbol(s)    0       [1-9]   others  (padding)
-     Transition   (10) 0  (01) d  (00) x  (11) -   */
-  static const unsigned int next_state[] =
+  /* Symbol(s)    0       [1-9]   others
+     Transition   (10) 0  (01) d  (00) x   */
+  static const uint_least8_t next_state[] =
   {
-      /* state    x    d    0    - */
-      /* S_N */  S_N, S_I, S_Z, S_N,
-      /* S_I */  S_N, S_I, S_I, S_I,
-      /* S_F */  S_N, S_F, S_F, S_F,
-      /* S_Z */  S_N, S_F, S_Z, S_Z
+      /* state    x    d    0  */
+      /* S_N */  S_N, S_I, S_Z,
+      /* S_I */  S_N, S_I, S_I,
+      /* S_F */  S_N, S_F, S_F,
+      /* S_Z */  S_N, S_F, S_Z
   };
 
-  static const int result_type[] =
+  static const int_least8_t result_type[] =
   {
-      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/-
-                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */
+      /* state   x/x  x/d  x/0  d/x  d/d  d/0  0/x  0/d  0/0  */
 
-      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
-                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
-      /* S_I */  CMP, -1,  -1,  CMP,  1,  LEN, LEN, CMP,
-                  1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP,
-      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
-                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
-      /* S_Z */  CMP,  1,   1,  CMP, -1,  CMP, CMP, CMP,
-                 -1,  CMP, CMP, CMP
+      /* S_N */  CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP,
+      /* S_I */  CMP, -1,  -1,  +1,  LEN, LEN, +1,  LEN, LEN,
+      /* S_F */  CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_Z */  CMP, +1,  +1,  -1,  CMP, CMP, -1,  CMP, CMP
   };
 
   if (p1 == p2)
     return 0;
 
-  c1 = *p1++;
-  c2 = *p2++;
+  unsigned char c1 = *p1++;
+  unsigned char c2 = *p2++;
   /* Hint: '0' is a digit too.  */
-  state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
+  int state = S_N + ((c1 == '0') + (isdigit (c1) != 0));
 
-  while ((diff = c1 - c2) == 0 && c1 != '\0')
+  int diff;
+  while ((diff = c1 - c2) == 0)
     {
+      if (c1 == '\0')
+	return diff;
+
       state = next_state[state];
       c1 = *p1++;
       c2 = *p2++;
-      state |= (c1 == '0') + (ISDIGIT (c1) != 0);
+      state += (c1 == '0') + (isdigit (c1) != 0);
     }
 
-  state = result_type[state << 2 | ((c2 == '0') + (ISDIGIT (c2) != 0))];
+  state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))];
 
   switch (state)
-    {
+  {
     case CMP:
       return diff;
 
     case LEN:
-      while (ISDIGIT (*p1++))
-        if (!ISDIGIT (*p2++))
-          return 1;
+      while (isdigit (*p1++))
+	if (!isdigit (*p2++))
+	  return 1;
 
-      return ISDIGIT (*p2) ? -1 : diff;
+      return isdigit (*p2) ? -1 : diff;
 
     default:
       return state;
-    }
+  }
 }
-#ifdef weak_alias
+libc_hidden_def (__strverscmp)
 weak_alias (__strverscmp, strverscmp)
-#endif
diff --git a/lib/sys_resource.in.h b/lib/sys_resource.in.h
new file mode 100644
index 0000000..69483cf
--- /dev/null
+++ b/lib/sys_resource.in.h
@@ -0,0 +1,123 @@
+/* Substitute for <sys/resource.h>.
+   Copyright (C) 2012-2019 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 <https://www.gnu.org/licenses/>.  */
+
+# if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+# endif
+@PRAGMA_COLUMNS@
+
+#ifndef _@GUARD_PREFIX@_SYS_RESOURCE_H
+
+#if @HAVE_SYS_RESOURCE_H@
+
+/* On FreeBSD 5.0, <sys/resource.h> assumes prior inclusion of <sys/types.h>
+   and <sys/time.h>.  */
+# include <sys/types.h>
+# include <sys/time.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_SYS_RESOURCE_H@
+
+#endif
+
+#ifndef _@GUARD_PREFIX@_SYS_RESOURCE_H
+#define _@GUARD_PREFIX@_SYS_RESOURCE_H
+
+#if !@HAVE_SYS_RESOURCE_H@
+/* A platform that lacks <sys/resource.h>.  */
+
+/* Get 'struct timeval'.  */
+# include <sys/time.h>
+
+/* Define the RUSAGE_* constants.  */
+# define RUSAGE_SELF 0
+# define RUSAGE_CHILDREN -1
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if !GNULIB_defined_struct_rusage
+/* All known platforms that lack <sys/resource.h> also lack any declaration
+   of struct rusage in any other header.  */
+struct rusage
+{
+  struct timeval ru_utime;      /* CPU time used in user mode */
+  struct timeval ru_stime;      /* CPU time used in system mode (kernel) */
+  long ru_maxrss;
+  long ru_ixrss;
+  long ru_idrss;
+  long ru_isrss;
+  long ru_minflt;
+  long ru_majflt;
+  long ru_nswap;
+  long ru_inblock;
+  long ru_oublock;
+  long ru_msgsnd;
+  long ru_msgrcv;
+  long ru_nsignals;
+  long ru_nvcsw;
+  long ru_nivcsw;
+};
+#  define GNULIB_defined_struct_rusage 1
+# endif
+
+# ifdef __cplusplus
+}
+# endif
+
+#else
+
+# ifdef __VMS                      /* OpenVMS */
+/* Define the RUSAGE_* constants.  */
+#  ifndef RUSAGE_SELF
+#   define RUSAGE_SELF 0
+#  endif
+#  ifndef RUSAGE_CHILDREN
+#   define RUSAGE_CHILDREN -1
+#  endif
+# 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.  */
+
+
+/* Declare overridden functions.  */
+
+
+#if @GNULIB_GETRUSAGE@
+# if !@HAVE_GETRUSAGE@
+_GL_FUNCDECL_SYS (getrusage, int, (int who, struct rusage *usage_p)
+                                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (getrusage, int, (int who, struct rusage *usage_p));
+_GL_CXXALIASWARN (getrusage);
+#elif defined GNULIB_POSIXCHECK
+# undef getrusage
+# if HAVE_RAW_DECL_GETRUSAGE
+_GL_WARN_ON_USE (getrusage, "getrusage is unportable - "
+                 "use gnulib module getrusage for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SYS_RESOURCE_H */
+#endif /* _@GUARD_PREFIX@_SYS_RESOURCE_H */
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index ac05ddb..9ddd1a8 100644
--- a/lib/sys_stat.in.h
+++ b/lib/sys_stat.in.h
@@ -1,5 +1,5 @@
-/* Provide a more complete sys/stat header file.
-   Copyright (C) 2005-2012 Free Software Foundation, Inc.
+/* Provide a more complete sys/stat.h header file.
+   Copyright (C) 2005-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
 
@@ -54,16 +54,23 @@
 
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
+/* Before doing "#define mknod rpl_mknod" below, we need to include all
+   headers that may declare mknod().  OS/2 kLIBC declares mknod() in
+   <unistd.h>, not in <sys/stat.h>.  */
+#ifdef __KLIBC__
+# include <unistd.h>
+#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__
+   in <io.h> and/or <direct.h>, not in <sys/stat.h>.  */
+#if 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__)
+#if 0 && (defined _WIN32 && ! defined __CYGWIN__)
 # include <io.h>
 #endif
 
@@ -72,6 +79,75 @@
 # define stat _stati64
 #endif
 
+/* Optionally, override 'struct stat' on native Windows.  */
+#if @GNULIB_OVERRIDES_STRUCT_STAT@
+
+# undef stat
+# if @GNULIB_STAT@
+#  define stat rpl_stat
+# else
+   /* Provoke a clear link error if stat() is used as a function and
+      module 'stat' is not in use.  */
+#  define stat stat_used_without_requesting_gnulib_module_stat
+# endif
+
+# if !GNULIB_defined_struct_stat
+struct stat
+{
+  dev_t st_dev;
+  ino_t st_ino;
+  mode_t st_mode;
+  nlink_t st_nlink;
+#  if 0
+  uid_t st_uid;
+#  else /* uid_t is not defined by default on native Windows.  */
+  short st_uid;
+#  endif
+#  if 0
+  gid_t st_gid;
+#  else /* gid_t is not defined by default on native Windows.  */
+  short st_gid;
+#  endif
+  dev_t st_rdev;
+  off_t st_size;
+#  if 0
+  blksize_t st_blksize;
+  blkcnt_t st_blocks;
+#  endif
+
+#  if @WINDOWS_STAT_TIMESPEC@
+  struct timespec st_atim;
+  struct timespec st_mtim;
+  struct timespec st_ctim;
+#  else
+  time_t st_atime;
+  time_t st_mtime;
+  time_t st_ctime;
+#  endif
+};
+#  if @WINDOWS_STAT_TIMESPEC@
+#   define st_atime st_atim.tv_sec
+#   define st_mtime st_mtim.tv_sec
+#   define st_ctime st_ctim.tv_sec
+    /* Indicator, for gnulib internal purposes.  */
+#   define _GL_WINDOWS_STAT_TIMESPEC 1
+#  endif
+#  define GNULIB_defined_struct_stat 1
+# endif
+
+/* Other possible values of st_mode.  */
+# if 0
+#  define _S_IFBLK  0x6000
+# endif
+# if 0
+#  define _S_IFLNK  0xA000
+# endif
+# if 0
+#  define _S_IFSOCK 0xC000
+# endif
+
+#endif
+
 #ifndef S_IFIFO
 # ifdef _S_IFIFO
 #  define S_IFIFO _S_IFIFO
@@ -150,6 +226,10 @@
 # endif
 #endif
 
+#ifndef S_ISMPX /* AIX */
+# define S_ISMPX(m) 0
+#endif
+
 #ifndef S_ISNAM /* Xenix */
 # ifdef S_IFNAM
 #  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
@@ -341,6 +421,9 @@
 _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
 # endif
 _GL_CXXALIASWARN (fstat);
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef fstat
+# define fstat fstat_used_without_requesting_gnulib_module_fstat
 #elif @WINDOWS_64_BIT_ST_SIZE@
 /* Above, we define stat to _stati64.  */
 # define fstat _fstati64
@@ -374,6 +457,9 @@
                   (int fd, char const *name, struct stat *st, int flags));
 # endif
 _GL_CXXALIASWARN (fstatat);
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef fstatat
+# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat
 #elif defined GNULIB_POSIXCHECK
 # undef fstatat
 # if HAVE_RAW_DECL_FSTATAT
@@ -472,6 +558,9 @@
 # if @HAVE_LSTAT@
 _GL_CXXALIASWARN (lstat);
 # endif
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef lstat
+# define lstat lstat_used_without_requesting_gnulib_module_lstat
 #elif defined GNULIB_POSIXCHECK
 # undef lstat
 # if HAVE_RAW_DECL_LSTAT
@@ -494,7 +583,7 @@
    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 defined _WIN32 && ! defined __CYGWIN__
 
 #  if !GNULIB_defined_rpl_mkdir
 static int
@@ -621,63 +710,69 @@
 
 #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)
+#  if !@GNULIB_OVERRIDES_STRUCT_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 _MSC_VER && defined _stati64
+#   elif defined __MINGW32__ && defined stat
 #    ifdef _USE_32BIT_TIME_T
-      /* The system headers define _stati64 to _stat32i64.  */
+      /* The system headers define stat to _stat32i64.  */
 #     undef _stat32i64
 #     define _stat32i64(name, st) rpl_stat (name, st)
 #    else
-      /* The system headers define _stati64 to _stat64.  */
+      /* The system headers define stat 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 */
+#   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 */
+#  endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */
 _GL_EXTERN_C int stat (const char *name, struct stat *buf)
                       _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+/* see above:
+  #define stat stat_used_without_requesting_gnulib_module_stat
+ */
 #elif defined GNULIB_POSIXCHECK
 # undef stat
 # if HAVE_RAW_DECL_STAT
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h
new file mode 100644
index 0000000..d6c215e
--- /dev/null
+++ b/lib/sys_time.in.h
@@ -0,0 +1,224 @@
+/* Provide a more complete sys/time.h.
+
+   Copyright (C) 2007-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef _@GUARD_PREFIX@_SYS_TIME_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself
+   recursively via <sys/select.h>.
+   Simply delegate to the system's header in this case; it is a no-op.
+   Without this extra ifdef, the C++ gettimeofday declaration below
+   would be a forward declaration in gnulib's nested <sys/time.h>.  */
+#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+#else
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_SYS_TIME_H@
+# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_SYS_TIME_H
+#define _@GUARD_PREFIX@_SYS_TIME_H
+
+#if ! @HAVE_SYS_TIME_H@
+# include <time.h>
+#endif
+
+/* On native Windows with MSVC, get the 'struct timeval' type.
+   Also, on native Windows with a 64-bit time_t, where we are overriding the
+   'struct timeval' type, get all declarations of system functions whose
+   signature contains 'struct timeval'.  */
+#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_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.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@
+
+# if @REPLACE_STRUCT_TIMEVAL@
+#  define timeval rpl_timeval
+# endif
+
+# if !GNULIB_defined_struct_timeval
+struct timeval
+{
+  time_t tv_sec;
+  long int tv_usec;
+};
+#  define GNULIB_defined_struct_timeval 1
+# endif
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#if @GNULIB_GETTIMEOFDAY@
+# if @REPLACE_GETTIMEOFDAY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gettimeofday
+#   define gettimeofday rpl_gettimeofday
+#  endif
+_GL_FUNCDECL_RPL (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict));
+# else
+#  if !@HAVE_GETTIMEOFDAY@
+_GL_FUNCDECL_SYS (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on glibc systems, by default, the second argument is
+                                                  struct timezone *.  */
+_GL_CXXALIAS_SYS_CAST (gettimeofday, int,
+                       (struct timeval *restrict, void *restrict));
+# endif
+_GL_CXXALIASWARN (gettimeofday);
+# if defined __cplusplus && defined GNULIB_NAMESPACE
+namespace GNULIB_NAMESPACE {
+  typedef ::timeval
+#  undef timeval
+    timeval;
+#  if @REPLACE_STRUCT_TIMEVAL@
+#   define timeval rpl_timeval
+  typedef ::timeval timeval;
+#  endif
+}
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef gettimeofday
+# if HAVE_RAW_DECL_GETTIMEOFDAY
+_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - "
+                 "use gnulib module gettimeofday for portability");
+# endif
+#endif
+
+/* Hide some function declarations from <winsock2.h>.  */
+
+#if defined _MSC_VER && @HAVE_WINSOCK2_H@
+# if !defined _@GUARD_PREFIX@_UNISTD_H
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close close_used_without_including_unistd_h
+#  else
+     _GL_WARN_ON_USE (close,
+                      "close() used without including <unistd.h>");
+#  endif
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname gethostname_used_without_including_unistd_h
+#  else
+     _GL_WARN_ON_USE (gethostname,
+                      "gethostname() used without including <unistd.h>");
+#  endif
+# endif
+# 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
+
+#endif /* _@GUARD_PREFIX@_SYS_TIME_H */
+#endif /* _CYGWIN_SYS_TIME_H */
+#endif /* _@GUARD_PREFIX@_SYS_TIME_H */
diff --git a/lib/sys_times.in.h b/lib/sys_times.in.h
new file mode 100644
index 0000000..2010822
--- /dev/null
+++ b/lib/sys_times.in.h
@@ -0,0 +1,80 @@
+/* Provide a sys/times.h header file.
+   Copyright (C) 2008-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Simon Josefsson <simon@josefsson.org>, 2008.  */
+
+/* This file is supposed to be used on platforms where <sys/times.h>
+   is missing.  */
+
+#ifndef _@GUARD_PREFIX@_SYS_TIMES_H
+
+# if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+# endif
+@PRAGMA_COLUMNS@
+
+# if @HAVE_SYS_TIMES_H@
+#  @INCLUDE_NEXT@ @NEXT_SYS_TIMES_H@
+# endif
+
+# define _@GUARD_PREFIX@_SYS_TIMES_H
+
+/* Get clock_t.
+   But avoid namespace pollution on glibc systems.  */
+# ifndef __GLIBC__
+#  include <time.h>
+# endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if !@HAVE_STRUCT_TMS@
+#  if !GNULIB_defined_struct_tms
+  /* Structure describing CPU time used by a process and its children.  */
+  struct tms
+  {
+    clock_t tms_utime;          /* User CPU time.  */
+    clock_t tms_stime;          /* System CPU time.  */
+
+    clock_t tms_cutime;         /* User CPU time of dead children.  */
+    clock_t tms_cstime;         /* System CPU time of dead children.  */
+  };
+#   define GNULIB_defined_struct_tms 1
+#  endif
+# endif
+
+# if @GNULIB_TIMES@
+#  if !@HAVE_TIMES@
+  extern clock_t times (struct tms *buffer) _GL_ARG_NONNULL ((1));
+#  endif
+# elif defined GNULIB_POSIXCHECK
+#  undef times
+#  if HAVE_RAW_DECL_TIMES
+_GL_WARN_ON_USE (times, "times is unportable - "
+                 "use gnulib module times for portability");
+#  endif
+# endif
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif                          /* _@GUARD_PREFIX@_SYS_TIMES_H */
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
index 8139d98..237e206 100644
--- a/lib/sys_types.in.h
+++ b/lib/sys_types.in.h
@@ -1,6 +1,6 @@
 /* Provide a more complete sys/types.h.
 
-   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+   Copyright (C) 2011-2019 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
@@ -13,17 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
 #endif
 @PRAGMA_COLUMNS@
 
+#if defined _WIN32 && !defined __CYGWIN__ \
+    && (defined __need_off_t || defined __need___off64_t \
+        || defined __need_ssize_t || defined __need_time_t)
+
+/* Special invocation convention inside mingw header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+
+#else
+/* Normal invocation convention.  */
+
 #ifndef _@GUARD_PREFIX@_SYS_TYPES_H
 
 /* The include_next requires a split double-inclusion guard.  */
+# define _GL_INCLUDING_SYS_TYPES_H
 #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+# undef _GL_INCLUDING_SYS_TYPES_H
 
 #ifndef _@GUARD_PREFIX@_SYS_TYPES_H
 #define _@GUARD_PREFIX@_SYS_TYPES_H
@@ -40,12 +53,54 @@
 # define _GL_WINDOWS_64_BIT_OFF_T 1
 #endif
 
+/* Override dev_t and ino_t if distinguishable inodes support is requested
+   on native Windows.  */
+#if @WINDOWS_STAT_INODES@
+
+# if @WINDOWS_STAT_INODES@ == 2
+/* Experimental, not useful in Windows 10.  */
+
+/* Define dev_t to a 64-bit type.  */
+#  if !defined GNULIB_defined_dev_t
+typedef unsigned long long int rpl_dev_t;
+#   undef dev_t
+#   define dev_t rpl_dev_t
+#   define GNULIB_defined_dev_t 1
+#  endif
+
+/* Define ino_t to a 128-bit type.  */
+#  if !defined GNULIB_defined_ino_t
+/* MSVC does not have a 128-bit integer type.
+   GCC has a 128-bit integer type __int128, but only on 64-bit targets.  */
+typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t;
+#   undef ino_t
+#   define ino_t rpl_ino_t
+#   define GNULIB_defined_ino_t 1
+#  endif
+
+# else /* @WINDOWS_STAT_INODES@ == 1 */
+
+/* Define ino_t to a 64-bit type.  */
+#  if !defined GNULIB_defined_ino_t
+typedef unsigned long long int rpl_ino_t;
+#   undef ino_t
+#   define ino_t rpl_ino_t
+#   define GNULIB_defined_ino_t 1
+#  endif
+
+# endif
+
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@
+
+#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__
+#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__
 # include <stddef.h>
 #endif
 
 #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
 #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* __need_XXX */
diff --git a/lib/sys_wait.in.h b/lib/sys_wait.in.h
index 9264ebb..0de5d8f 100644
--- a/lib/sys_wait.in.h
+++ b/lib/sys_wait.in.h
@@ -1,5 +1,5 @@
 /* A POSIX-like <sys/wait.h>.
-   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 
 #ifndef _@GUARD_PREFIX@_SYS_WAIT_H
@@ -23,7 +23,7 @@
 @PRAGMA_COLUMNS@
 
 /* The include_next requires a split double-inclusion guard.  */
-#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+#if !(defined _WIN32 && ! defined __CYGWIN__)
 # @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@
 #endif
 
@@ -39,7 +39,7 @@
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
 
-#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+#if !(defined _WIN32 && ! defined __CYGWIN__)
 /* Unix API.  */
 
 /* The following macros apply to an argument x, that is a status of a process,
@@ -111,10 +111,12 @@
 /* Declarations of functions.  */
 
 #if @GNULIB_WAITPID@
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if 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));
+/* Need to cast, because on Cygwin, the second parameter is
+                                                __wait_status_ptr_t statusp.  */
+_GL_CXXALIAS_SYS_CAST (waitpid, pid_t, (pid_t pid, int *statusp, int options));
 _GL_CXXALIASWARN (waitpid);
 #elif defined GNULIB_POSIXCHECK
 # undef waitpid
diff --git a/lib/textstyle.in.h b/lib/textstyle.in.h
new file mode 100644
index 0000000..42abbab
--- /dev/null
+++ b/lib/textstyle.in.h
@@ -0,0 +1,465 @@
+/* Dummy replacement for part of the public API of the libtextstyle library.
+   Copyright (C) 2006-2007, 2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
+
+/* This file is used as replacement when libtextstyle with its include file
+   <textstyle.h> is not found.
+   It supports the essential API and implements it in a way that does not
+   provide text styling.  That is, it produces plain text output via <stdio.h>
+   FILE objects.
+   Thus, it allows a package to be build with or without a dependency to
+   libtextstyle, with very few occurrences of '#if HAVE_LIBTEXTSTYLE'.
+
+   Restriction:
+   It assumes that freopen() is not being called on stdout and stderr.  */
+
+#ifndef _TEXTSTYLE_H
+#define _TEXTSTYLE_H
+
+#include <errno.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#if HAVE_TCDRAIN
+# include <termios.h>
+#endif
+
+/* ----------------------------- From ostream.h ----------------------------- */
+
+/* Describes the scope of a flush operation.  */
+typedef enum
+{
+  /* Flushes buffers in this ostream_t.
+     Use this value if you want to write to the underlying ostream_t.  */
+  FLUSH_THIS_STREAM = 0,
+  /* Flushes all buffers in the current process.
+     Use this value if you want to write to the same target through a
+     different file descriptor or a FILE stream.  */
+  FLUSH_THIS_PROCESS = 1,
+  /* Flushes buffers in the current process and attempts to flush the buffers
+     in the kernel.
+     Use this value so that some other process (or the kernel itself)
+     may write to the same target.  */
+  FLUSH_ALL = 2
+} ostream_flush_scope_t;
+
+
+/* An output stream is an object to which one can feed a sequence of bytes.  */
+
+typedef FILE * ostream_t;
+
+static inline void
+ostream_write_mem (ostream_t stream, const void *data, size_t len)
+{
+  if (len > 0)
+    fwrite (data, 1, len, stream);
+}
+
+static inline void
+ostream_flush (ostream_t stream, ostream_flush_scope_t scope)
+{
+  fflush (stream);
+  if (scope == FLUSH_ALL)
+    {
+      int fd = fileno (stream);
+      if (fd >= 0)
+        {
+          /* For streams connected to a disk file:  */
+          fsync (fd);
+          #if HAVE_TCDRAIN
+          /* For streams connected to a terminal:  */
+          {
+            int retval;
+
+            do
+              retval = tcdrain (fd);
+            while (retval < 0 && errno == EINTR);
+          }
+          #endif
+        }
+    }
+}
+
+static inline void
+ostream_free (ostream_t stream)
+{
+  if (stream == stdin || stream == stderr)
+    fflush (stream);
+  else
+    fclose (stream);
+}
+
+static inline void
+ostream_write_str (ostream_t stream, const char *string)
+{
+  ostream_write_mem (stream, string, strlen (string));
+}
+
+static inline ptrdiff_t ostream_printf (ostream_t stream,
+                                        const char *format, ...)
+#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ > 3
+  __attribute__ ((__format__ (__printf__, 2, 3)))
+#endif
+  ;
+static inline ptrdiff_t
+ostream_printf (ostream_t stream, const char *format, ...)
+{
+  va_list args;
+  char *temp_string;
+  ptrdiff_t ret;
+
+  va_start (args, format);
+  ret = vasprintf (&temp_string, format, args);
+  va_end (args);
+  if (ret >= 0)
+    {
+      if (ret > 0)
+        ostream_write_str (stream, temp_string);
+      free (temp_string);
+    }
+  return ret;
+}
+
+static inline ptrdiff_t ostream_vprintf (ostream_t stream,
+                                         const char *format, va_list args)
+#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ > 3
+  __attribute__ ((__format__ (__printf__, 2, 0)))
+#endif
+  ;
+static inline ptrdiff_t
+ostream_vprintf (ostream_t stream, const char *format, va_list args)
+{
+  char *temp_string;
+  ptrdiff_t ret = vasprintf (&temp_string, format, args);
+  if (ret >= 0)
+    {
+      if (ret > 0)
+        ostream_write_str (stream, temp_string);
+      free (temp_string);
+    }
+  return ret;
+}
+
+/* ------------------------- From styled-ostream.h ------------------------- */
+
+typedef ostream_t styled_ostream_t;
+
+#define styled_ostream_write_mem ostream_write_mem
+#define styled_ostream_flush ostream_flush
+#define styled_ostream_free ostream_free
+
+static inline void
+styled_ostream_begin_use_class (styled_ostream_t stream _GL_UNUSED,
+                                const char *classname _GL_UNUSED)
+{
+}
+
+static inline void
+styled_ostream_end_use_class (styled_ostream_t stream _GL_UNUSED,
+                              const char *classname _GL_UNUSED)
+{
+}
+
+static inline const char *
+styled_ostream_get_hyperlink_ref (styled_ostream_t stream _GL_UNUSED)
+{
+  return NULL;
+}
+
+static inline const char *
+styled_ostream_get_hyperlink_id (styled_ostream_t stream _GL_UNUSED)
+{
+  return NULL;
+}
+
+static inline void
+styled_ostream_set_hyperlink (styled_ostream_t stream _GL_UNUSED,
+                              const char *ref _GL_UNUSED,
+                              const char *id _GL_UNUSED)
+{
+}
+
+static inline void
+styled_ostream_flush_to_current_style (styled_ostream_t stream _GL_UNUSED)
+{
+}
+
+/* -------------------------- From file-ostream.h -------------------------- */
+
+typedef ostream_t file_ostream_t;
+
+#define file_ostream_write_mem ostream_write_mem
+#define file_ostream_flush ostream_flush
+#define file_ostream_free ostream_free
+
+static inline file_ostream_t
+file_ostream_create (FILE *fp)
+{
+  return fp;
+}
+
+/* --------------------------- From fd-ostream.h --------------------------- */
+
+typedef ostream_t fd_ostream_t;
+
+#define fd_ostream_write_mem ostream_write_mem
+#define fd_ostream_flush ostream_flush
+#define fd_ostream_free ostream_free
+
+static inline fd_ostream_t
+fd_ostream_create (int fd, const char *filename _GL_UNUSED,
+                   bool buffered _GL_UNUSED)
+{
+  if (fd == 1)
+    return stdout;
+  else if (fd == 2)
+    return stderr;
+  else
+    return fdopen (fd, "w");
+}
+
+/* -------------------------- From term-ostream.h -------------------------- */
+
+typedef int term_color_t;
+enum
+{
+  COLOR_DEFAULT = -1  /* unknown */
+};
+
+typedef enum
+{
+  WEIGHT_NORMAL = 0,
+  WEIGHT_BOLD,
+  WEIGHT_DEFAULT = WEIGHT_NORMAL
+} term_weight_t;
+
+typedef enum
+{
+  POSTURE_NORMAL = 0,
+  POSTURE_ITALIC, /* same as oblique */
+  POSTURE_DEFAULT = POSTURE_NORMAL
+} term_posture_t;
+
+typedef enum
+{
+  UNDERLINE_OFF = 0,
+  UNDERLINE_ON,
+  UNDERLINE_DEFAULT = UNDERLINE_OFF
+} term_underline_t;
+
+typedef ostream_t term_ostream_t;
+
+#define term_ostream_write_mem ostream_write_mem
+#define term_ostream_flush ostream_flush
+#define term_ostream_free ostream_free
+
+static inline term_color_t
+term_ostream_get_color (term_ostream_t stream _GL_UNUSED)
+{
+  return COLOR_DEFAULT;
+}
+
+static inline void
+term_ostream_set_color (term_ostream_t stream _GL_UNUSED,
+                        term_color_t color _GL_UNUSED)
+{
+}
+
+static inline term_color_t
+term_ostream_get_bgcolor (term_ostream_t stream _GL_UNUSED)
+{
+  return COLOR_DEFAULT;
+}
+
+static inline void
+term_ostream_set_bgcolor (term_ostream_t stream _GL_UNUSED,
+                          term_color_t color _GL_UNUSED)
+{
+}
+
+static inline term_weight_t
+term_ostream_get_weight (term_ostream_t stream _GL_UNUSED)
+{
+  return WEIGHT_DEFAULT;
+}
+
+static inline void
+term_ostream_set_weight (term_ostream_t stream _GL_UNUSED,
+                         term_weight_t weight _GL_UNUSED)
+{
+}
+
+static inline term_posture_t
+term_ostream_get_posture (term_ostream_t stream _GL_UNUSED)
+{
+  return POSTURE_DEFAULT;
+}
+
+static inline void
+term_ostream_set_posture (term_ostream_t stream _GL_UNUSED,
+                          term_posture_t posture _GL_UNUSED)
+{
+}
+
+static inline term_underline_t
+term_ostream_get_underline (term_ostream_t stream _GL_UNUSED)
+{
+  return UNDERLINE_DEFAULT;
+}
+
+static inline void
+term_ostream_set_underline (term_ostream_t stream _GL_UNUSED,
+                            term_underline_t underline _GL_UNUSED)
+{
+}
+
+static inline const char *
+term_ostream_get_hyperlink_ref (term_ostream_t stream _GL_UNUSED)
+{
+  return NULL;
+}
+
+static inline const char *
+term_ostream_get_hyperlink_id (term_ostream_t stream _GL_UNUSED)
+{
+  return NULL;
+}
+
+static inline void
+term_ostream_set_hyperlink (term_ostream_t stream _GL_UNUSED,
+                            const char *ref _GL_UNUSED,
+                            const char *id _GL_UNUSED)
+{
+}
+
+static inline void
+term_ostream_flush_to_current_style (term_ostream_t stream)
+{
+  fflush (stream);
+}
+
+typedef enum
+{
+  TTYCTL_AUTO = 0,  /* Automatic best-possible choice.  */
+  TTYCTL_NONE,      /* No control.
+                       Result: Garbled output can occur, and the terminal can
+                       be left in any state when the program is interrupted.  */
+  TTYCTL_PARTIAL,   /* Signal handling.
+                       Result: Garbled output can occur, but the terminal will
+                       be left in the default state when the program is
+                       interrupted.  */
+  TTYCTL_FULL       /* Signal handling and disabling echo and flush-upon-signal.
+                       Result: No garbled output, and the the terminal will
+                       be left in the default state when the program is
+                       interrupted.  */
+} ttyctl_t;
+
+static inline term_ostream_t
+term_ostream_create (int fd, const char *filename,
+                     ttyctl_t tty_control _GL_UNUSED)
+{
+  return fd_ostream_create (fd, filename, true);
+}
+
+/* ----------------------- From term-styled-ostream.h ----------------------- */
+
+typedef styled_ostream_t term_styled_ostream_t;
+
+#define term_styled_ostream_write_mem ostream_write_mem
+#define term_styled_ostream_flush ostream_flush
+#define term_styled_ostream_free ostream_free
+#define term_styled_ostream_begin_use_class styled_ostream_begin_use_class
+#define term_styled_ostream_end_use_class styled_ostream_end_use_class
+#define term_styled_ostream_get_hyperlink_ref styled_ostream_get_hyperlink_ref
+#define term_styled_ostream_get_hyperlink_id styled_ostream_get_hyperlink_id
+#define term_styled_ostream_set_hyperlink styled_ostream_set_hyperlink
+#define term_styled_ostream_flush_to_current_style styled_ostream_flush_to_current_style
+
+static inline term_styled_ostream_t
+term_styled_ostream_create (int fd, const char *filename,
+                            ttyctl_t tty_control _GL_UNUSED,
+                            const char *css_filename _GL_UNUSED)
+{
+  return fd_ostream_create (fd, filename, true);
+}
+
+/* ----------------------- From html-styled-ostream.h ----------------------- */
+
+typedef styled_ostream_t html_styled_ostream_t;
+
+static inline html_styled_ostream_t
+html_styled_ostream_create (ostream_t destination _GL_UNUSED,
+                            const char *css_filename _GL_UNUSED)
+{
+  abort ();
+  return NULL;
+}
+
+/* ------------------------------ From color.h ------------------------------ */
+
+#define color_test_mode false
+
+enum color_option { color_no, color_tty, color_yes, color_html };
+#define color_mode color_no
+
+#define style_file_name NULL
+
+static inline bool
+handle_color_option (const char *option _GL_UNUSED)
+{
+  return false;
+}
+
+static inline void
+handle_style_option (const char *option _GL_UNUSED)
+{
+}
+
+static inline void
+print_color_test (void)
+{
+  abort ();
+}
+
+static inline void
+style_file_prepare (const char *style_file_envvar _GL_UNUSED,
+                    const char *stylesdir_envvar _GL_UNUSED,
+                    const char *stylesdir_after_install _GL_UNUSED,
+                    const char *default_style_file _GL_UNUSED)
+{
+}
+
+/* ------------------------------ From misc.h ------------------------------ */
+
+static inline styled_ostream_t
+styled_ostream_create (int fd, const char *filename,
+                       ttyctl_t tty_control _GL_UNUSED,
+                       const char *css_filename _GL_UNUSED)
+{
+  return fd_ostream_create (fd, filename, true);
+}
+
+static inline void
+libtextstyle_set_failure_exit_code (int exit_code _GL_UNUSED)
+{
+}
+
+#endif /* _TEXTSTYLE_H */
diff --git a/lib/time.in.h b/lib/time.in.h
index 04cde05..1b3bf3e 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -1,6 +1,6 @@
 /* A more-standard <time.h>.
 
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
@@ -22,11 +22,13 @@
 
 /* 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
+   symbols.  (However, skip this for MinGW as it treats __need_time_t
+   incompatibly.)  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 \
+#if (((defined __need_time_t || defined __need_clock_t \
+       || defined __need_timespec)                     \
+      && !defined __MINGW32__)                         \
      || defined _@GUARD_PREFIX@_TIME_H)
 
 # @INCLUDE_NEXT@ @NEXT_TIME_H@
@@ -35,6 +37,12 @@
 
 # define _@GUARD_PREFIX@_TIME_H
 
+/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r,
+   localtime_r only if <unistd.h> or <pthread.h> has been included before.  */
+# if defined __MINGW32__
+#  include <unistd.h>
+# endif
+
 # @INCLUDE_NEXT@ @NEXT_TIME_H@
 
 /* NetBSD 5.0 mis-defines NULL.  */
@@ -46,22 +54,17 @@
 
 /* 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).
+/* Some systems don't define struct timespec (e.g., AIX 4.1).
    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>.  */
+   (e.g., FreeBSD circa 1997).  Stock Mingw prior to 3.0 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
+#  elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+#   include <unistd.h>
 #  else
 
 #   ifdef __cplusplus
@@ -87,8 +90,8 @@
 # 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
+/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html
+   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.  */
@@ -100,7 +103,7 @@
 
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>.  */
 # if @GNULIB_NANOSLEEP@
 #  if @REPLACE_NANOSLEEP@
 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -123,6 +126,24 @@
 _GL_CXXALIASWARN (nanosleep);
 # endif
 
+/* Initialize time conversion information.  */
+# if @GNULIB_TZSET@
+#  if @REPLACE_TZSET@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef tzset
+#    define tzset rpl_tzset
+#   endif
+_GL_FUNCDECL_RPL (tzset, void, (void));
+_GL_CXXALIAS_RPL (tzset, void, (void));
+#  else
+#   if ! @HAVE_TZSET@
+_GL_FUNCDECL_SYS (tzset, void, (void));
+#   endif
+_GL_CXXALIAS_SYS (tzset, void, (void));
+#  endif
+_GL_CXXALIASWARN (tzset);
+# endif
+
 /* Return the 'time_t' representation of TP and normalize TP.  */
 # if @GNULIB_MKTIME@
 #  if @REPLACE_MKTIME@
@@ -134,12 +155,14 @@
 #  else
 _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
 #  endif
+#  if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mktime);
+#  endif
 # 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>.  */
 # if @GNULIB_TIME_R@
 #  if @REPLACE_LOCALTIME_R@
 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -187,9 +210,44 @@
 #  endif
 # endif
 
-/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
+/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>.  */
+# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@
+#  if @REPLACE_LOCALTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef localtime
+#    define localtime rpl_localtime
+#   endif
+_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer)
+                                          _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer));
+#  else
+_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
+#  endif
+#  if __GLIBC__ >= 2
+_GL_CXXALIASWARN (localtime);
+#  endif
+# endif
+
+# if 0 || @REPLACE_GMTIME@
+#  if @REPLACE_GMTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef gmtime
+#    define gmtime rpl_gmtime
+#   endif
+_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer)
+                                       _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer));
+#  else
+_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer));
+#  endif
+_GL_CXXALIASWARN (gmtime);
+# endif
+
+/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store
    the resulting broken-down time into TM.  See
-   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>.  */
 # if @GNULIB_STRPTIME@
 #  if ! @HAVE_STRPTIME@
 _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
@@ -203,6 +261,64 @@
 _GL_CXXALIASWARN (strptime);
 # endif
 
+/* Convert *TP to a date and time string.  See
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>.  */
+# if @GNULIB_CTIME@
+#  if @REPLACE_CTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define ctime rpl_ctime
+#   endif
+_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
+                                 _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
+#  else
+_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));
+#  endif
+#  if __GLIBC__ >= 2
+_GL_CXXALIASWARN (ctime);
+#  endif
+# endif
+
+/* Convert *TP to a date and time string.  See
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>.  */
+# if @GNULIB_STRFTIME@
+#  if @REPLACE_STRFTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define strftime rpl_strftime
+#   endif
+_GL_FUNCDECL_RPL (strftime, size_t, (char *__buf, size_t __bufsize,
+                                     const char *__fmt, const struct tm *__tp)
+                                    _GL_ARG_NONNULL ((1, 3, 4)));
+_GL_CXXALIAS_RPL (strftime, size_t, (char *__buf, size_t __bufsize,
+                                     const char *__fmt, const struct tm *__tp));
+#  else
+_GL_CXXALIAS_SYS (strftime, size_t, (char *__buf, size_t __bufsize,
+                                     const char *__fmt, const struct tm *__tp));
+#  endif
+#  if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strftime);
+#  endif
+# endif
+
+# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
+typedef struct tm_zone *timezone_t;
+_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
+_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name));
+_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz));
+_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz));
+_GL_FUNCDECL_SYS (localtime_rz, struct tm *,
+                  (timezone_t __tz, time_t const *restrict __timer,
+                   struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_SYS (localtime_rz, struct tm *,
+                  (timezone_t __tz, time_t const *restrict __timer,
+                   struct tm *restrict __result));
+_GL_FUNCDECL_SYS (mktime_z, time_t,
+                  (timezone_t __tz, struct tm *restrict __result)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_SYS (mktime_z, time_t,
+                  (timezone_t __tz, struct tm *restrict __result));
+# endif
+
 /* Convert TM to a time_t value, assuming UTC.  */
 # if @GNULIB_TIMEGM@
 #  if @REPLACE_TIMEGM@
diff --git a/lib/timespec.c b/lib/timespec.c
new file mode 100644
index 0000000..2b6098e
--- /dev/null
+++ b/lib/timespec.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE
+#include "timespec.h"
diff --git a/lib/timespec.h b/lib/timespec.h
new file mode 100644
index 0000000..26f1bc1
--- /dev/null
+++ b/lib/timespec.h
@@ -0,0 +1,136 @@
+/* timespec -- System time interface
+
+   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#if ! defined TIMESPEC_H
+#define TIMESPEC_H
+
+#include <time.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_TIMESPEC_INLINE
+# define _GL_TIMESPEC_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "arg-nonnull.h"
+#include "verify.h"
+
+/* Inverse resolution of timespec timestamps (in units per second),
+   and log base 10 of the inverse resolution.  */
+
+enum { TIMESPEC_HZ = 1000000000 };
+enum { LOG10_TIMESPEC_HZ = 9 };
+
+/* Obsolescent names for backward compatibility.
+   They are misnomers, because TIMESPEC_RESOLUTION is not a resolution.  */
+
+enum { TIMESPEC_RESOLUTION = TIMESPEC_HZ };
+enum { LOG10_TIMESPEC_RESOLUTION = LOG10_TIMESPEC_HZ };
+
+/* Return a timespec with seconds S and nanoseconds NS.  */
+
+_GL_TIMESPEC_INLINE struct timespec
+make_timespec (time_t s, long int ns)
+{
+  struct timespec r;
+  r.tv_sec = s;
+  r.tv_nsec = ns;
+  return r;
+}
+
+/* Return negative, zero, positive if A < B, A == B, A > B, respectively.
+
+   For each timestamp T, this code assumes that either:
+
+     * T.tv_nsec is in the range 0..999999999; or
+     * T.tv_sec corresponds to a valid leap second on a host that supports
+       leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or
+     * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or
+       T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000.
+       This allows for special struct timespec values that are less or
+       greater than all possible valid timestamps.
+
+   In all these cases, it is safe to subtract two tv_nsec values and
+   convert the result to integer without worrying about overflow on
+   any platform of interest to the GNU project, since all such
+   platforms have 32-bit int or wider.
+
+   Replacing "a.tv_nsec - b.tv_nsec" with something like
+   "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause
+   this function to work in some cases where the above assumption is
+   violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2,
+   b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the
+   extra instructions.  Using a subtraction has the advantage of
+   detecting some invalid cases on platforms that detect integer
+   overflow.  */
+
+_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE
+timespec_cmp (struct timespec a, struct timespec b)
+{
+  if (a.tv_sec < b.tv_sec)
+    return -1;
+  if (a.tv_sec > b.tv_sec)
+    return 1;
+
+  /* Pacify gcc -Wstrict-overflow (bleeding-edge circa 2017-10-02).  See:
+     https://lists.gnu.org/r/bug-gnulib/2017-10/msg00006.html  */
+  assume (-1 <= a.tv_nsec && a.tv_nsec <= 2 * TIMESPEC_HZ);
+  assume (-1 <= b.tv_nsec && b.tv_nsec <= 2 * TIMESPEC_HZ);
+
+  return a.tv_nsec - b.tv_nsec;
+}
+
+/* Return -1, 0, 1, depending on the sign of A.  A.tv_nsec must be
+   nonnegative.  */
+_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE
+timespec_sign (struct timespec a)
+{
+  return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec;
+}
+
+struct timespec timespec_add (struct timespec, struct timespec)
+  _GL_ATTRIBUTE_CONST;
+struct timespec timespec_sub (struct timespec, struct timespec)
+  _GL_ATTRIBUTE_CONST;
+struct timespec dtotimespec (double)
+  _GL_ATTRIBUTE_CONST;
+
+/* Return an approximation to A, of type 'double'.  */
+_GL_TIMESPEC_INLINE double
+timespectod (struct timespec a)
+{
+  return a.tv_sec + a.tv_nsec / 1e9;
+}
+
+struct timespec current_timespec (void);
+void gettime (struct timespec *) _GL_ARG_NONNULL ((1));
+int settime (struct timespec const *) _GL_ARG_NONNULL ((1));
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif
diff --git a/lib/timevar.c b/lib/timevar.c
index 355ecb5..511ee9d 100644
--- a/lib/timevar.c
+++ b/lib/timevar.c
@@ -1,6 +1,6 @@
 /* Timing variables for measuring compiler performance.
 
-   Copyright (C) 2000, 2002, 2004, 2006, 2009-2012 Free Software
+   Copyright (C) 2000, 2002, 2004, 2006, 2009-2015, 2018-2019 Free Software
    Foundation, Inc.
 
    Contributed by Alex Samuel <samuel@codesourcery.com>
@@ -16,125 +16,28 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
-#if IN_GCC
-
-#include "system.h"
-#include "intl.h"
-#include "rtl.h"
-
-#else
-
-/* This source file is taken from the GCC source code, with slight
-   modifications that are under control of the IN_GCC preprocessor
-   variable.  The !IN_GCC part of this file is specific to Bison.  */
-
-# include "../src/system.h"
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# endif
-int timevar_report = 0;
-
-#endif
-
-
-#ifdef HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-#ifndef HAVE_CLOCK_T
-typedef int clock_t;
-#endif
-
-#ifndef HAVE_STRUCT_TMS
-struct tms
-{
-  clock_t tms_utime;
-  clock_t tms_stime;
-  clock_t tms_cutime;
-  clock_t tms_cstime;
-};
-#endif
-
-#if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
-extern int getrusage (int, struct rusage *);
-#endif
-#if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES
-extern clock_t times (struct tms *);
-#endif
-#if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK
-extern clock_t clock (void);
-#endif
-
-#ifndef RUSAGE_SELF
-# define RUSAGE_SELF 0
-#endif
-
-/* Calculation of scale factor to convert ticks to microseconds.
-   We mustn't use CLOCKS_PER_SEC except with clock().  */
-#if HAVE_SYSCONF && defined _SC_CLK_TCK
-# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
-#else
-# ifdef CLK_TCK
-#  define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */
-# else
-#  ifdef HZ
-#   define TICKS_PER_SECOND HZ  /* traditional UNIX */
-#  else
-#   define TICKS_PER_SECOND 100 /* often the correct value */
-#  endif
-# endif
-#endif
-
-/* Prefer times to getrusage to clock (each gives successively less
-   information).  */
-#ifdef HAVE_TIMES
-# define USE_TIMES
-# define HAVE_USER_TIME
-# define HAVE_SYS_TIME
-# define HAVE_WALL_TIME
-#else
-#ifdef HAVE_GETRUSAGE
-# define USE_GETRUSAGE
-# define HAVE_USER_TIME
-# define HAVE_SYS_TIME
-#else
-#ifdef HAVE_CLOCK
-# define USE_CLOCK
-# define HAVE_USER_TIME
-#endif
-#endif
-#endif
-
-/* libc is very likely to have snuck a call to sysconf() into one of
-   the underlying constants, and that can be very slow, so we have to
-   precompute them.  Whose wonderful idea was it to make all those
-   _constants_ variable at run time, anyway?  */
-#ifdef USE_TIMES
-static float ticks_to_msec;
-#define TICKS_TO_MSEC (1.0 / TICKS_PER_SECOND)
-#endif
-
-#ifdef USE_CLOCK
-static float clocks_to_msec;
-#define CLOCKS_TO_MSEC (1.0 / CLOCKS_PER_SEC)
-#endif
-
-#if IN_GCC
-#include "flags.h"
-#endif
+/* Specification.  */
 #include "timevar.h"
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/times.h>
+
+#include "gethrxtime.h"
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#include "xalloc.h"
+
 /* See timevar.h for an explanation of timing variables.  */
 
-/* This macro evaluates to nonzero if timing variables are enabled.  */
-#define TIMEVAR_ENABLE (timevar_report)
+int timevar_enabled = 0;
 
 /* A timing variable.  */
 
@@ -187,73 +90,60 @@
    element.  */
 static struct timevar_time_def start_time;
 
-static void get_time (struct timevar_time_def *);
-static void timevar_accumulate (struct timevar_time_def *,
-				struct timevar_time_def *,
-				struct timevar_time_def *);
-
-/* Fill the current times into TIME.  The definition of this function
-   also defines any or all of the HAVE_USER_TIME, HAVE_SYS_TIME, and
-   HAVE_WALL_TIME macros.  */
+/* Fill the current times into TIME.  */
 
 static void
-get_time (now)
-     struct timevar_time_def *now;
+set_to_current_time (struct timevar_time_def *now)
 {
   now->user = 0;
   now->sys  = 0;
   now->wall = 0;
 
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
-  {
-#ifdef USE_TIMES
-    struct tms tms;
-    now->wall = times (&tms)  * ticks_to_msec;
-#if IN_GCC
-    now->user = tms.tms_utime * ticks_to_msec;
-    now->sys  = tms.tms_stime * ticks_to_msec;
-#else
-    now->user = (tms.tms_utime + tms.tms_cutime) * ticks_to_msec;
-    now->sys  = (tms.tms_stime + tms.tms_cstime) * ticks_to_msec;
-#endif
-#endif
-#ifdef USE_GETRUSAGE
-    struct rusage rusage;
-#if IN_GCC
-    getrusage (RUSAGE_SELF, &rusage);
-#else
-    getrusage (RUSAGE_CHILDREN, &rusage);
-#endif
-    now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6;
-    now->sys  = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6;
-#endif
-#ifdef USE_CLOCK
-    now->user = clock () * clocks_to_msec;
-#endif
-  }
+  struct rusage self;
+  getrusage (RUSAGE_SELF, &self);
+  struct rusage chld;
+  getrusage (RUSAGE_CHILDREN, &chld);
+
+  now->user =
+    xtime_make (self.ru_utime.tv_sec + chld.ru_utime.tv_sec,
+                (self.ru_utime.tv_usec + chld.ru_utime.tv_usec) * 1000);
+
+  now->sys =
+    xtime_make (self.ru_stime.tv_sec + chld.ru_stime.tv_sec,
+                (self.ru_stime.tv_usec + chld.ru_stime.tv_usec) * 1000);
+
+  now->wall = gethrxtime();
+}
+
+/* Return the current time.  */
+
+static struct timevar_time_def
+get_current_time (void)
+{
+  struct timevar_time_def now;
+  set_to_current_time (&now);
+  return now;
 }
 
 /* Add the difference between STOP and START to TIMER.  */
 
 static void
-timevar_accumulate (timer, start, stop)
-     struct timevar_time_def *timer;
-     struct timevar_time_def *start;
-     struct timevar_time_def *stop;
+timevar_accumulate (struct timevar_time_def *timer,
+                    const struct timevar_time_def *start,
+                    const struct timevar_time_def *stop)
 {
   timer->user += stop->user - start->user;
   timer->sys += stop->sys - start->sys;
   timer->wall += stop->wall - start->wall;
 }
 
-/* Initialize timing variables.  */
-
 void
-init_timevar ()
+timevar_init ()
 {
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
   /* Zero all elapsed times.  */
@@ -264,33 +154,16 @@
   timevars[identifier__].name = name__;
 #include "timevar.def"
 #undef DEFTIMEVAR
-
-#ifdef USE_TIMES
-  ticks_to_msec = TICKS_TO_MSEC;
-#endif
-#ifdef USE_CLOCK
-  clocks_to_msec = CLOCKS_TO_MSEC;
-#endif
 }
 
-/* Push TIMEVAR onto the timing stack.  No further elapsed time is
-   attributed to the previous topmost timing variable on the stack;
-   subsequent elapsed time is attributed to TIMEVAR, until it is
-   popped or another element is pushed on top.
-
-   TIMEVAR cannot be running as a standalone timer.  */
-
 void
-timevar_push (timevar)
-     timevar_id_t timevar;
+timevar_push (timevar_id_t timevar)
 {
-  struct timevar_def *tv = &timevars[timevar];
-  struct timevar_stack_def *context;
-  struct timevar_time_def now;
-
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
+  struct timevar_def *tv = &timevars[timevar];
+
   /* Mark this timing variable as used.  */
   tv->used = 1;
 
@@ -299,7 +172,7 @@
     abort ();
 
   /* What time is it?  */
-  get_time (&now);
+  struct timevar_time_def const now = get_current_time ();
 
   /* If the stack isn't empty, attribute the current elapsed time to
      the old topmost element.  */
@@ -312,6 +185,7 @@
 
   /* See if we have a previously-allocated stack instance.  If so,
      take it off the list.  If not, malloc a new one.  */
+  struct timevar_stack_def *context = NULL;
   if (unused_stack_instances != NULL)
     {
       context = unused_stack_instances;
@@ -327,29 +201,20 @@
   stack = context;
 }
 
-/* Pop the topmost timing variable element off the timing stack.  The
-   popped variable must be TIMEVAR.  Elapsed time since the that
-   element was pushed on, or since it was last exposed on top of the
-   stack when the element above it was popped off, is credited to that
-   timing variable.  */
-
 void
-timevar_pop (timevar)
-     timevar_id_t timevar;
+timevar_pop (timevar_id_t timevar)
 {
-  struct timevar_time_def now;
-  struct timevar_stack_def *popped = stack;
-
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
   if (&timevars[timevar] != stack->timevar)
     abort ();
 
   /* What time is it?  */
-  get_time (&now);
+  struct timevar_time_def const now = get_current_time ();
 
   /* Attribute the elapsed time to the element we're popping.  */
+  struct timevar_stack_def *popped = stack;
   timevar_accumulate (&popped->timevar->elapsed, &start_time, &now);
 
   /* Reset the start time; from now on, time is attributed to the
@@ -365,19 +230,14 @@
   unused_stack_instances = popped;
 }
 
-/* Start timing TIMEVAR independently of the timing stack.  Elapsed
-   time until timevar_stop is called for the same timing variable is
-   attributed to TIMEVAR.  */
-
 void
-timevar_start (timevar)
-     timevar_id_t timevar;
+timevar_start (timevar_id_t timevar)
 {
-  struct timevar_def *tv = &timevars[timevar];
-
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
+  struct timevar_def *tv = &timevars[timevar];
+
   /* Mark this timing variable as used.  */
   tv->used = 1;
 
@@ -387,72 +247,50 @@
     abort ();
   tv->standalone = 1;
 
-  get_time (&tv->start_time);
+  set_to_current_time (&tv->start_time);
 }
 
-/* Stop timing TIMEVAR.  Time elapsed since timevar_start was called
-   is attributed to it.  */
-
 void
-timevar_stop (timevar)
-     timevar_id_t timevar;
+timevar_stop (timevar_id_t timevar)
 {
-  struct timevar_def *tv = &timevars[timevar];
-  struct timevar_time_def now;
-
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
+  struct timevar_def *tv = &timevars[timevar];
+
   /* TIMEVAR must have been started via timevar_start.  */
   if (!tv->standalone)
     abort ();
 
-  get_time (&now);
+  struct timevar_time_def const now = get_current_time ();
   timevar_accumulate (&tv->elapsed, &tv->start_time, &now);
 }
 
-/* Fill the elapsed time for TIMEVAR into ELAPSED.  Returns
-   update-to-date information even if TIMEVAR is currently running.  */
-
 void
-timevar_get (timevar, elapsed)
-     timevar_id_t timevar;
-     struct timevar_time_def *elapsed;
+timevar_get (timevar_id_t timevar,
+             struct timevar_time_def *elapsed)
 {
   struct timevar_def *tv = &timevars[timevar];
-  struct timevar_time_def now;
-
   *elapsed = tv->elapsed;
 
   /* Is TIMEVAR currently running as a standalone timer?  */
   if (tv->standalone)
     {
-      get_time (&now);
+      struct timevar_time_def const now = get_current_time ();
       timevar_accumulate (elapsed, &tv->start_time, &now);
     }
   /* Or is TIMEVAR at the top of the timer stack?  */
   else if (stack->timevar == tv)
     {
-      get_time (&now);
+      struct timevar_time_def const now = get_current_time ();
       timevar_accumulate (elapsed, &start_time, &now);
     }
 }
 
-/* Summarize timing variables to FP.  The timing variable TV_TOTAL has
-   a special meaning -- it's considered to be the total elapsed time,
-   for normalizing the others, and is displayed last.  */
-
 void
-timevar_print (fp)
-     FILE *fp;
+timevar_print (FILE *fp)
 {
-  /* Only print stuff if we have some sort of time information.  */
-#if defined HAVE_USER_TIME || defined HAVE_SYS_TIME || defined HAVE_WALL_TIME
-  unsigned int /* timevar_id_t */ id;
-  struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed;
-  struct timevar_time_def now;
-
-  if (!TIMEVAR_ENABLE)
+  if (!timevar_enabled)
     return;
 
   /* Update timing information in case we're calling this from GDB.  */
@@ -461,7 +299,7 @@
     fp = stderr;
 
   /* What time is it?  */
-  get_time (&now);
+  struct timevar_time_def const now = get_current_time ();
 
   /* If the stack isn't empty, attribute the current elapsed time to
      the old topmost element.  */
@@ -472,94 +310,42 @@
      TIMEVAR.  */
   start_time = now;
 
-  fputs (_("\nExecution times (seconds)\n"), fp);
-  for (id = 0; id < (unsigned int) TIMEVAR_LAST; ++id)
-    {
-      struct timevar_def *tv = &timevars[(timevar_id_t) id];
-      const float tiny = 5e-3;
+  struct timevar_time_def const* total = &timevars[tv_total].elapsed;
 
+  fprintf (fp, "%-22s\n",
+           _("Execution times (seconds)"));
+  fprintf (fp, " %-22s   %-13s %-13s %-16s\n",
+           "", _("CPU user"), _("CPU system"), _("wall clock"));
+  for (unsigned /* timevar_id_t */ id = 0; id < (unsigned) TIMEVAR_LAST; ++id)
+    {
       /* Don't print the total execution time here; that goes at the
-	 end.  */
-      if ((timevar_id_t) id == TV_TOTAL)
-	continue;
+         end.  */
+      if ((timevar_id_t) id == tv_total)
+        continue;
 
       /* Don't print timing variables that were never used.  */
+      struct timevar_def *tv = &timevars[(timevar_id_t) id];
       if (!tv->used)
-	continue;
+        continue;
 
-      /* Don't print timing variables if we're going to get a row of
-	 zeroes.  */
-      if (tv->elapsed.user < tiny
-	  && tv->elapsed.sys < tiny
-	  && tv->elapsed.wall < tiny)
-	continue;
+      /* Percentages.  */
+      const int usr = total->user ? tv->elapsed.user * 100 / total->user : 0;
+      const int sys = total->sys ? tv->elapsed.sys * 100 / total->sys : 0;
+      const int wall = total->wall ? tv->elapsed.wall * 100 / total->wall : 0;
 
-      /* The timing variable name.  */
-      fprintf (fp, " %-22s:", tv->name);
+      /* Ignore insignificant lines.  */
+      if (!usr && !sys && !wall)
+        continue;
 
-#ifdef HAVE_USER_TIME
-      /* Print user-mode time for this process.  */
-      fprintf (fp, "%7.2f (%2.0f%%) usr",
-	       tv->elapsed.user,
-	       (total->user == 0 ? 0 : tv->elapsed.user / total->user) * 100);
-#endif /* HAVE_USER_TIME */
-
-#ifdef HAVE_SYS_TIME
-      /* Print system-mode time for this process.  */
-      fprintf (fp, "%7.2f (%2.0f%%) sys",
-	       tv->elapsed.sys,
-	       (total->sys == 0 ? 0 : tv->elapsed.sys / total->sys) * 100);
-#endif /* HAVE_SYS_TIME */
-
-#ifdef HAVE_WALL_TIME
-      /* Print wall clock time elapsed.  */
-      fprintf (fp, "%7.2f (%2.0f%%) wall",
-	       tv->elapsed.wall,
-	       (total->wall == 0 ? 0 : tv->elapsed.wall / total->wall) * 100);
-#endif /* HAVE_WALL_TIME */
-
-      putc ('\n', fp);
+      fprintf (fp, " %-22s", tv->name);
+      fprintf (fp, "%8.3f (%2d%%)", tv->elapsed.user * 1e-9, usr);
+      fprintf (fp, "%8.3f (%2d%%)", tv->elapsed.sys * 1e-9, sys);
+      fprintf (fp, "%11.6f (%2d%%)\n", tv->elapsed.wall * 1e-9, wall);
     }
 
   /* Print total time.  */
-  fputs (_(" TOTAL                 :"), fp);
-#ifdef HAVE_USER_TIME
-  fprintf (fp, "%7.2f          ", total->user);
-#endif
-#ifdef HAVE_SYS_TIME
-  fprintf (fp, "%7.2f          ", total->sys);
-#endif
-#ifdef HAVE_WALL_TIME
-  fprintf (fp, "%7.2f\n", total->wall);
-#endif
-
-#endif /* defined (HAVE_USER_TIME) || defined (HAVE_SYS_TIME)
-	  || defined (HAVE_WALL_TIME) */
-}
-
-/* Returns time (user + system) used so far by the compiler process,
-   in microseconds.  */
-
-long
-get_run_time ()
-{
-  struct timevar_time_def total_elapsed;
-  timevar_get (TV_TOTAL, &total_elapsed);
-  return total_elapsed.user + total_elapsed.sys;
-}
-
-/* Prints a message to stderr stating that time elapsed in STR is
-   TOTAL (given in microseconds).  */
-
-void
-print_time (str, total)
-     const char *str;
-     long total;
-{
-  long all_time = get_run_time ();
-  fprintf (stderr,
-	   _("time in %s: %ld.%06ld (%ld%%)\n"),
-	   str, total / 1000000, total % 1000000,
-	   all_time == 0 ? 0
-	   : (long) (((100.0 * (double) total) / (double) all_time) + .5));
+  fprintf (fp, " %-22s", timevars[tv_total].name);
+  fprintf (fp, "%8.3f      ", total->user * 1e-9);
+  fprintf (fp, "%8.3f      ", total->sys * 1e-9);
+  fprintf (fp, "%11.6f\n", total->wall * 1e-9);
 }
diff --git a/lib/timevar.def b/lib/timevar.def
index 1143e99..9de9b81 100644
--- a/lib/timevar.def
+++ b/lib/timevar.def
@@ -1,7 +1,8 @@
 /* This file contains the definitions for timing variables used to -*- C -*-
    measure run-time performance of the compiler.
 
-   Copyright (C) 2002, 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    Contributed by Akim Demaille <akim@freefriends.org>.
 
@@ -27,35 +28,35 @@
 
      DEFTIMEVAR (id, name)
 
-   where ID is the enumeral value used to identify the timing
+   where ID is the enum value used to identify the timing
    variable, and NAME is a character string describing its purpose.  */
 
 /* The total execution time.  */
-DEFTIMEVAR (TV_TOTAL                 , "total time")
+DEFTIMEVAR (tv_total                 , "total time")
 
 /* Time spent in the reader.  */
-DEFTIMEVAR (TV_READER                , "reader")
-DEFTIMEVAR (TV_SCANNING              , "scanner")
-DEFTIMEVAR (TV_PARSING               , "parser")
+DEFTIMEVAR (tv_reader                , "reader")
+DEFTIMEVAR (tv_scanning              , "scanner")
+DEFTIMEVAR (tv_parsing               , "parser")
 
 /* Time spent handling the grammar.  */
-DEFTIMEVAR (TV_REDUCE                , "reducing the grammar")
-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")
+DEFTIMEVAR (tv_reduce                , "reducing the grammar")
+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")
+/* Time spent outputting results.  */
+DEFTIMEVAR (tv_report                , "outputting report")
+DEFTIMEVAR (tv_graph                 , "outputting graph")
+DEFTIMEVAR (tv_xml                   , "outputting xml")
+DEFTIMEVAR (tv_actions               , "parser action tables")
+DEFTIMEVAR (tv_parser                , "outputting parser")
+DEFTIMEVAR (tv_m4                    , "running m4")
 
 /* Time spent by freeing the memory :).  */
-DEFTIMEVAR (TV_FREE                  , "freeing")
+DEFTIMEVAR (tv_free                  , "freeing")
diff --git a/lib/timevar.h b/lib/timevar.h
index a28b4cf..6f7efe2 100644
--- a/lib/timevar.h
+++ b/lib/timevar.h
@@ -1,7 +1,7 @@
-/* Timing variables for measuring compiler performance.
+/* Timing variables for measuring application performance.
 
-   Copyright (C) 2000, 2002, 2004, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000, 2002, 2004, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    Contributed by Alex Samuel <samuel@codesourcery.com>
 
@@ -16,13 +16,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-#ifndef GCC_TIMEVAR_H
-#define GCC_TIMEVAR_H
+#ifndef _TIMEVAR_H
+# define _TIMEVAR_H 1
+
+# include <stdio.h>
+
+# include "xtime.h"
+
+# ifdef  __cplusplus
+extern "C" {
+# endif
 
 /* Timing variables are used to measure elapsed time in various
-   portions of the compiler.  Each measures elapsed user, system, and
+   portions of the application.  Each measures elapsed user, system, and
    wall-clock time, as appropriate to and supported by the host
    system.
 
@@ -36,7 +44,7 @@
        Timing variables may be pushed onto the stack; elapsed time is
        attributed to the topmost timing variable on the stack.  When
        another variable is pushed on, the previous topmost variable is
-       `paused' until the pushed variable is popped back off.
+       'paused' until the pushed variable is popped back off.
 
      - As a standalone timer, using timevar_start and timevar_stop.
        All time elapsed between the two calls is attributed to the
@@ -52,14 +60,14 @@
 struct timevar_time_def
 {
   /* User time in this process.  */
-  float user;
+  xtime_t user;
 
   /* System time (if applicable for this host platform) in this
      process.  */
-  float sys;
+  xtime_t sys;
 
   /* Wall clock time.  */
-  float wall;
+  xtime_t wall;
 };
 
 /* An enumeration of timing variable identifiers.  Constructed from
@@ -75,18 +83,56 @@
 timevar_id_t;
 #undef DEFTIMEVAR
 
-extern void init_timevar (void);
-extern void timevar_push (timevar_id_t);
-extern void timevar_pop (timevar_id_t);
-extern void timevar_start (timevar_id_t);
-extern void timevar_stop (timevar_id_t);
-extern void timevar_get (timevar_id_t, struct timevar_time_def *);
-extern void timevar_print (FILE *);
+/* Initialize timing variables.  */
 
-/* Provided for backward compatibility.  */
-extern long get_run_time (void);
-extern void print_time (const char *, long);
+void timevar_init (void);
 
-extern int timevar_report;
+/* Push TIMEVAR onto the timing stack.  No further elapsed time is
+   attributed to the previous topmost timing variable on the stack;
+   subsequent elapsed time is attributed to TIMEVAR, until it is
+   popped or another element is pushed on top.
 
-#endif /* ! GCC_TIMEVAR_H */
+   TIMEVAR cannot be running as a standalone timer.  */
+
+void timevar_push (timevar_id_t timevar);
+
+/* Pop the topmost timing variable element off the timing stack.  The
+   popped variable must be TIMEVAR.  Elapsed time since the that
+   element was pushed on, or since it was last exposed on top of the
+   stack when the element above it was popped off, is credited to that
+   timing variable.  */
+
+void timevar_pop (timevar_id_t timevar);
+
+/* Start timing TIMEVAR independently of the timing stack.  Elapsed
+   time until timevar_stop is called for the same timing variable is
+   attributed to TIMEVAR.  */
+
+void timevar_start (timevar_id_t timevar);
+
+/* Stop timing TIMEVAR.  Time elapsed since timevar_start was called
+   is attributed to it.  */
+
+void timevar_stop (timevar_id_t timevar);
+
+/* Fill the elapsed time for TIMEVAR into ELAPSED.  Returns
+   update-to-date information even if TIMEVAR is currently running.  */
+
+void timevar_get (timevar_id_t timevar, struct timevar_time_def *elapsed);
+
+/* Summarize timing variables to FP.  The timing variable TV_TOTAL has
+   a special meaning -- it's considered to be the total elapsed time,
+   for normalizing the others, and is displayed last.  */
+
+void timevar_print (FILE *fp);
+
+/* Set to to nonzero to enable timing variables.  All the timevar
+   functions make an early exit if timevar is disabled.  */
+
+extern int timevar_enabled;
+
+# ifdef  __cplusplus
+}
+# endif
+
+#endif /* ! _TIMEVAR_H */
diff --git a/lib/unistd--.h b/lib/unistd--.h
index 78b9e4a..1268854 100644
--- a/lib/unistd--.h
+++ b/lib/unistd--.h
@@ -1,6 +1,6 @@
 /* Like unistd.h, but redefine some names to avoid glitches.
 
-   Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert.  */
 
diff --git a/lib/unistd-safer.h b/lib/unistd-safer.h
index 684bf79..8eebffc 100644
--- a/lib/unistd-safer.h
+++ b/lib/unistd-safer.h
@@ -1,6 +1,6 @@
 /* Invoke unistd-like functions, but avoid some glitches.
 
-   Copyright (C) 2001, 2003, 2005, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert and Eric Blake.  */
 
diff --git a/lib/unistd.c b/lib/unistd.c
index 6c6a8e2..72bad1c 100644
--- a/lib/unistd.c
+++ b/lib/unistd.c
@@ -1,3 +1,4 @@
 #include <config.h>
 #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE
 #include "unistd.h"
+typedef int dummy;
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 6171f77..4700ccb 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -1,5 +1,5 @@
 /* Substitute for and wrapper around <unistd.h>.
-   Copyright (C) 2003-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003-2019 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
@@ -12,34 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_UNISTD_H
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
 #endif
 @PRAGMA_COLUMNS@
 
+#ifdef _GL_INCLUDING_UNISTD_H
 /* 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
+   - On Mac OS X 10.3.9 we have a sequence of nested includes
+     <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h>
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
 
-/* Normal invocation.  */
-#elif !defined _@GUARD_PREFIX@_UNISTD_H
+#@INCLUDE_NEXT@ @NEXT_UNISTD_H@
+
+#else
+/* Normal invocation convention.  */
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_UNISTD_H@
+# define _GL_INCLUDING_UNISTD_H
 # @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# undef _GL_INCLUDING_UNISTD_H
 #endif
 
 /* Get all possible declarations of gethostname().  */
@@ -54,21 +52,30 @@
 #define _@GUARD_PREFIX@_UNISTD_H
 
 /* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
-#include <stddef.h>
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+#endif
 
 /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>.  We must include
+   it before we  #define unlink rpl_unlink.  */
 /* 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_UNLINK@ || defined GNULIB_POSIXCHECK) \
+         && (defined _WIN32 && ! defined __CYGWIN__)) \
      || ((@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>.  */
+/* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in
+   <unistd.h>.  */
 /* But avoid namespace pollution on glibc systems.  */
-#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \
+#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \
+    && (defined __CYGWIN__ || defined __ANDROID__) \
     && ! defined __GLIBC__
 # include <fcntl.h>
 #endif
@@ -77,9 +84,13 @@
 /* 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>.  */
+/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is
+   included here.  */
 /* But avoid namespace pollution on glibc systems.  */
-#ifndef __GLIBC__
+#if !defined __GLIBC__ && !defined __osf__
+# define __need_system_stdlib_h
 # include <stdlib.h>
+# undef __need_system_stdlib_h
 #endif
 
 /* Native Windows platforms declare chdir, getcwd, rmdir in
@@ -88,13 +99,13 @@
    lseek(), read(), unlink(), write() in <io.h>.  */
 #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
       || defined GNULIB_POSIXCHECK) \
-     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+     && (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__)
+      && (defined _WIN32 && ! defined __CYGWIN__)
 # include <io.h>
 #endif
 
@@ -107,31 +118,21 @@
 # include <netdb.h>
 #endif
 
+/* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
+    && !defined __GLIBC__
+# include <sys/stat.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.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+/* Get off_t, ssize_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.  */
@@ -139,6 +140,20 @@
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
 
+/* Get getopt(), optarg, optind, opterr, optopt.  */
+#if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT
+# include <getopt-cdefs.h>
+# include <getopt-pfx-core.h>
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_UNISTD_INLINE
+# define _GL_UNISTD_INLINE _GL_INLINE
+#endif
+
 /* Hide some function declarations from <winsock2.h>.  */
 
 #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
@@ -238,10 +253,28 @@
 /* Declare overridden functions.  */
 
 
-#if defined GNULIB_POSIXCHECK
+#if @GNULIB_ACCESS@
+# if @REPLACE_ACCESS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef access
+#   define access rpl_access
+#  endif
+_GL_FUNCDECL_RPL (access, int, (const char *file, int mode)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (access, int, (const char *file, int mode));
+# else
+_GL_CXXALIAS_SYS (access, int, (const char *file, int mode));
+# endif
+_GL_CXXALIASWARN (access);
+#elif defined GNULIB_POSIXCHECK
+# undef access
+# if HAVE_RAW_DECL_ACCESS
 /* The access() function is a security risk.  */
-_GL_WARN_ON_USE (access, "the access function is a security risk - "
+_GL_WARN_ON_USE (access, "access does not always support X_OK - "
+                 "use gnulib module access for portability; "
+                 "also, this function is a security risk - "
                  "use the gnulib module faccessat instead");
+# endif
 #endif
 
 
@@ -262,7 +295,7 @@
    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.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html.  */
 # if @REPLACE_CHOWN@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef chown
@@ -313,6 +346,24 @@
 #endif
 
 
+#if @GNULIB_COPY_FILE_RANGE@
+# if !@HAVE_COPY_FILE_RANGE@
+_GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+                                             int ofd, off_t *opos,
+                                             size_t len, unsigned flags));
+_GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+                                             int ofd, off_t *opos,
+                                             size_t len, unsigned flags));
+# endif
+_GL_CXXALIASWARN (copy_file_range);
+#elif defined GNULIB_POSIXCHECK
+/* Assume copy_file_range is always declared.  */
+_GL_WARN_ON_USE (copy_file_range,
+                 "copy_file_range is unportable - "
+                 "use gnulib module copy_file_range for portability");
+#endif
+
+
 #if @GNULIB_DUP@
 # if @REPLACE_DUP@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
@@ -338,7 +389,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>.  */
 # if @REPLACE_DUP2@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   define dup2 rpl_dup2
@@ -369,7 +420,7 @@
    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>.  */
+   <https://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
@@ -391,10 +442,23 @@
 
 
 #if @GNULIB_ENVIRON@
+# if defined __CYGWIN__ && !defined __i386__
+/* The 'environ' variable is defined in a DLL. Therefore its declaration needs
+   the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it.
+   This leads to a link error on 64-bit Cygwin when the option
+   -Wl,--disable-auto-import is in use.  */
+_GL_EXTERN_C __declspec(dllimport) char **environ;
+# endif
 # 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 <TargetConditionals.h>
+#   if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
+#    define _GL_USE_CRT_EXTERNS
+#   endif
+#  endif
+#  ifdef _GL_USE_CRT_EXTERNS
 #   include <crt_externs.h>
 #   define environ (*_NSGetEnviron ())
 #  else
@@ -410,12 +474,12 @@
 #elif defined GNULIB_POSIXCHECK
 # if HAVE_RAW_DECL_ENVIRON
 _GL_UNISTD_INLINE char ***
+_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - "
+                           "use gnulib module environ for portability")
 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
@@ -446,13 +510,25 @@
 
 
 #if @GNULIB_FACCESSAT@
-# if !@HAVE_FACCESSAT@
+# if @REPLACE_FACCESSAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef faccessat
+#   define faccessat rpl_faccessat
+#  endif
+_GL_FUNCDECL_RPL (faccessat, int,
+                  (int fd, char const *name, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (faccessat, int,
+                  (int fd, char const *name, int mode, int flag));
+# else
+#  if !@HAVE_FACCESSAT@
 _GL_FUNCDECL_SYS (faccessat, int,
                   (int fd, char const *file, int mode, int flag)
                   _GL_ARG_NONNULL ((2)));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (faccessat, int,
                   (int fd, char const *file, int mode, int flag));
+# endif
 _GL_CXXALIASWARN (faccessat);
 #elif defined GNULIB_POSIXCHECK
 # undef faccessat
@@ -468,7 +544,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>.  */
 # if ! @HAVE_FCHDIR@
 _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
 
@@ -529,7 +605,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>.  */
 # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@
 _GL_FUNCDECL_SYS (fdatasync, int, (int fd));
 # endif
@@ -548,7 +624,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>.  */
 # if !@HAVE_FSYNC@
 _GL_FUNCDECL_SYS (fsync, int, (int fd));
 # endif
@@ -567,7 +643,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>.  */
 # if @REPLACE_FTRUNCATE@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef ftruncate
@@ -597,7 +673,7 @@
    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>.
+   <https://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
@@ -662,10 +738,21 @@
 #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@
+# if @REPLACE_GETDTABLESIZE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdtablesize
+#   define getdtablesize rpl_getdtablesize
+#  endif
+_GL_FUNCDECL_RPL (getdtablesize, int, (void));
+_GL_CXXALIAS_RPL (getdtablesize, int, (void));
+# else
+#  if !@HAVE_GETDTABLESIZE@
 _GL_FUNCDECL_SYS (getdtablesize, int, (void));
+#  endif
+/* Need to cast, because on AIX, the parameter list is
+                                           (...).  */
+_GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void));
 # endif
-_GL_CXXALIAS_SYS (getdtablesize, int, (void));
 _GL_CXXALIASWARN (getdtablesize);
 #elif defined GNULIB_POSIXCHECK
 # undef getdtablesize
@@ -748,14 +835,14 @@
 /* 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>.
+   See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/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@
+# if !@HAVE_DECL_GETLOGIN@
 _GL_FUNCDECL_SYS (getlogin, char *, (void));
 # endif
 _GL_CXXALIAS_SYS (getlogin, char *, (void));
@@ -777,7 +864,7 @@
    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>.
+   See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>.
 
    Most programs don't need to use this function, because the information is
    available through environment variables:
@@ -892,6 +979,36 @@
 #endif
 
 
+#if @GNULIB_GETPASS@
+/* Function getpass() from module 'getpass':
+     Read a password from /dev/tty or stdin.
+   Function getpass() from module 'getpass-gnu':
+     Read a password of arbitrary length from /dev/tty or stdin.  */
+# if @REPLACE_GETPASS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getpass
+#   define getpass rpl_getpass
+#  endif
+_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt));
+# else
+#  if !@HAVE_GETPASS@
+_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt));
+# endif
+_GL_CXXALIASWARN (getpass);
+#elif defined GNULIB_POSIXCHECK
+# undef getpass
+# if HAVE_RAW_DECL_GETPASS
+_GL_WARN_ON_USE (getpass, "getpass is unportable - "
+                 "use gnulib module getpass or getpass-gnu 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.  */
@@ -982,7 +1099,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>.  */
 # if @REPLACE_LCHOWN@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef lchown
@@ -1012,7 +1129,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>.  */
 # if @REPLACE_LINK@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   define link rpl_link
@@ -1078,7 +1195,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>.  */
 # if @REPLACE_LSEEK@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   define lseek rpl_lseek
@@ -1124,7 +1241,7 @@
    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>.  */
+   <https://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
@@ -1150,7 +1267,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>.  */
 # if @REPLACE_PREAD@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef pread
@@ -1185,7 +1302,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>.  */
 # if @REPLACE_PWRITE@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef pwrite
@@ -1218,7 +1335,7 @@
 #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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>.  */
 # if @REPLACE_READ@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef read
@@ -1242,7 +1359,7 @@
    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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>.  */
 # if @REPLACE_READLINK@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   define readlink rpl_readlink
@@ -1272,13 +1389,24 @@
 
 
 #if @GNULIB_READLINKAT@
-# if !@HAVE_READLINKAT@
+# if @REPLACE_READLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlinkat rpl_readlinkat
+#  endif
+_GL_FUNCDECL_RPL (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+# else
+#  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
+#  endif
 _GL_CXXALIAS_SYS (readlinkat, ssize_t,
                   (int fd, char const *file, char *buf, size_t len));
+# endif
 _GL_CXXALIASWARN (readlinkat);
 #elif defined GNULIB_POSIXCHECK
 # undef readlinkat
@@ -1341,7 +1469,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>.  */
 # if @REPLACE_SLEEP@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef sleep
@@ -1392,13 +1520,25 @@
 
 
 #if @GNULIB_SYMLINKAT@
-# if !@HAVE_SYMLINKAT@
+# if @REPLACE_SYMLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlinkat
+#   define symlinkat rpl_symlinkat
+#  endif
+_GL_FUNCDECL_RPL (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+# else
+#  if !@HAVE_SYMLINKAT@
 _GL_FUNCDECL_SYS (symlinkat, int,
                   (char const *contents, int fd, char const *file)
                   _GL_ARG_NONNULL ((1, 3)));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (symlinkat, int,
                   (char const *contents, int fd, char const *file));
+# endif
 _GL_CXXALIASWARN (symlinkat);
 #elif defined GNULIB_POSIXCHECK
 # undef symlinkat
@@ -1409,6 +1549,36 @@
 #endif
 
 
+#if @GNULIB_TRUNCATE@
+/* Change the size of the file designated by FILENAME to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2008 specification
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>.  */
+# if @REPLACE_TRUNCATE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncate
+#   define truncate rpl_truncate
+#  endif
+_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length)
+                                 _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length));
+# else
+#  if !@HAVE_DECL_TRUNCATE@
+_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length)
+                                 _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length));
+# endif
+_GL_CXXALIASWARN (truncate);
+#elif defined GNULIB_POSIXCHECK
+# undef truncate
+# if HAVE_RAW_DECL_TRUNCATE
+_GL_WARN_ON_USE (truncate, "truncate is unportable - "
+                 "use gnulib module truncate 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.  */
@@ -1490,7 +1660,7 @@
 /* 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>.  */
+   <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>.  */
 # if @REPLACE_USLEEP@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef usleep
@@ -1517,7 +1687,7 @@
 #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>.  */
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>.  */
 # if @REPLACE_WRITE@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef write
@@ -1538,4 +1708,5 @@
 _GL_INLINE_HEADER_END
 
 #endif /* _@GUARD_PREFIX@_UNISTD_H */
+#endif /* _GL_INCLUDING_UNISTD_H */
 #endif /* _@GUARD_PREFIX@_UNISTD_H */
diff --git a/lib/unitypes.in.h b/lib/unitypes.in.h
index e642b7a..631654b 100644
--- a/lib/unitypes.in.h
+++ b/lib/unitypes.in.h
@@ -1,5 +1,5 @@
 /* Elementary types and macros for the GNU UniString library.
-   Copyright (C) 2002, 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005-2006, 2009-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _UNITYPES_H
 #define _UNITYPES_H
diff --git a/lib/uniwidth.in.h b/lib/uniwidth.in.h
index b90ce19..80c5eea 100644
--- a/lib/uniwidth.in.h
+++ b/lib/uniwidth.in.h
@@ -1,5 +1,5 @@
 /* Display width functions.
-   Copyright (C) 2001-2002, 2005, 2007, 2009-2012 Free Software Foundation,
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify it
@@ -13,7 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _UNIWIDTH_H
 #define _UNIWIDTH_H
diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h
index d75c94f..9870422 100644
--- a/lib/uniwidth/cjk.h
+++ b/lib/uniwidth/cjk.h
@@ -1,5 +1,5 @@
 /* Test for CJK encoding.
-   Copyright (C) 2001-2002, 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002, 2005-2007, 2009-2019 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
@@ -13,7 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include "streq.h"
 
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
index b6e2c33..a7f59b1 100644
--- a/lib/uniwidth/width.c
+++ b/lib/uniwidth/width.c
@@ -1,5 +1,5 @@
 /* Determine display width of Unicode character.
-   Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002, 2006-2019 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
@@ -13,7 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -32,7 +32,7 @@
  * - Zero width characters; generated from
  *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
  */
-static const unsigned char nonspacing_table_data[27*64] = {
+static const unsigned char nonspacing_table_data[38*64] = {
   /* 0x0000-0x01ff */
   0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
@@ -61,7 +61,7 @@
   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 */
+  0x3f, 0x00, 0xff, 0x17, 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 */
@@ -73,7 +73,7 @@
   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 */
+  0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, /* 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 */
@@ -88,11 +88,11 @@
   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 */
+  0x01, 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 */
+  0x02, 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 */
+  0x02, 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 */
@@ -133,35 +133,35 @@
   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, 0x78, 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 */
+  0x60, 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, 0x80, 0x09, 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, 0xff, 0x7f, /* 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 */
+  0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 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, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 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 */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, /* 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, 0xdf, 0xff, 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 */
@@ -178,7 +178,7 @@
   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, 0x3c, 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 */
@@ -188,8 +188,8 @@
   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, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */
+  0x00, 0x00, 0x00, 0xc0, 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 */
@@ -199,16 +199,16 @@
   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 */
+  0x30, 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 */
+  0x00, 0x00, 0x00, 0x00, 0x20, 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 */
+  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 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 */
@@ -223,7 +223,7 @@
   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 */
+  0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 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 */
@@ -240,24 +240,96 @@
   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 */
+  /* 0x10200-0x103ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */
   /* 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, 0x60, 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 */
+  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 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 */
+  0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */
+  0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
+  /* 0x11200-0x113ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */
+  0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x11300-0x1133f */
+  0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */
+  /* 0x11400-0x115ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */
+  0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */
+  0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */
+  0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */
+  /* 0x11600-0x117ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */
+  0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */
+  /* 0x11c00-0x11dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */
+  0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d00-0x11d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */
+  /* 0x16a00-0x16bff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */
+  /* 0x16e00-0x16fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */
+  0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */
+  /* 0x1bc00-0x1bdff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */
+  0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */
   /* 0x1d000-0x1d1ff */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
@@ -275,9 +347,36 @@
   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 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */
+  /* 0x1da00-0x1dbff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */
+  0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */
+  /* 0x1e000-0x1e1ff */
+  0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e100-0x1e13f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */
+  /* 0x1e800-0x1e9ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */
+  0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */
+  0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1e9c0-0x1e9ff */
 };
-static const signed char nonspacing_table_ind[240] = {
+static const signed char nonspacing_table_ind[248] = {
    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 */
@@ -294,20 +393,21 @@
   -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 */
+  22, 23, -1, -1, -1, 24, -1, -1, /* 0x10000-0x10fff */
+  25, 26, 27, 28, -1, -1, 29, -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, 30, -1, 31, /* 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, 32, -1, /* 0x1b000-0x1bfff */
   -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
-  25, 26, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
+  33, 34, -1, -1, -1, 35, -1, -1, /* 0x1d000-0x1dfff */
+  36, -1, -1, -1, 37, -1, -1, -1  /* 0x1e000-0x1efff */
 };
 
 /* Determine number of column positions required for UC.  */
@@ -315,7 +415,7 @@
 uc_width (ucs4_t uc, const char *encoding)
 {
   /* Test for non-spacing or control character.  */
-  if ((uc >> 9) < 240)
+  if ((uc >> 9) < 248)
     {
       int ind = nonspacing_table_ind[uc >> 9];
       if (ind >= 0)
diff --git a/lib/unlink.c b/lib/unlink.c
new file mode 100644
index 0000000..90dc9d3
--- /dev/null
+++ b/lib/unlink.c
@@ -0,0 +1,97 @@
+/* Work around unlink bugs.
+
+   Copyright (C) 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "dosname.h"
+
+#undef unlink
+
+/* Remove file NAME.
+   Return 0 if successful, -1 if not.  */
+
+int
+rpl_unlink (char const *name)
+{
+  /* Work around Solaris 9 bug where unlink("file/") succeeds.  */
+  size_t len = strlen (name);
+  int result = 0;
+  if (len && ISSLASH (name[len - 1]))
+    {
+      /* We can't unlink(2) something if it doesn't exist.  If it does
+         exist, then it resolved to a directory, due to the trailing
+         slash, and POSIX requires that the unlink attempt to remove
+         that directory (which would leave the symlink dangling).
+         Unfortunately, Solaris 9 is one of the platforms where the
+         root user can unlink directories, and we don't want to
+         cripple this behavior on real directories, even if it is
+         seldom needed (at any rate, it's nicer to let coreutils'
+         unlink(1) give the correct errno for non-root users).  But we
+         don't know whether name was an actual directory, or a symlink
+         to a directory; and due to the bug of ignoring trailing
+         slash, Solaris 9 would end up successfully unlinking the
+         symlink instead of the directory.  Technically, we could use
+         realpath to find the canonical directory name to attempt
+         deletion on.  But that is a lot of work for a corner case; so
+         we instead just use an lstat on the shortened name, and
+         reject symlinks with trailing slashes.  The root user of
+         unlink(1) will just have to live with the rule that they
+         can't delete a directory via a symlink.  */
+      struct stat st;
+      result = lstat (name, &st);
+      if (result == 0)
+        {
+          /* Trailing NUL will overwrite the trailing slash.  */
+          char *short_name = malloc (len);
+          if (!short_name)
+            {
+              errno = EPERM;
+              return -1;
+            }
+          memcpy (short_name, name, len);
+          while (len && ISSLASH (short_name[len - 1]))
+            short_name[--len] = '\0';
+          if (len && (lstat (short_name, &st) || S_ISLNK (st.st_mode)))
+            {
+              free (short_name);
+              errno = EPERM;
+              return -1;
+            }
+          free (short_name);
+        }
+    }
+  if (!result)
+    {
+#if UNLINK_PARENT_BUG
+      if (len >= 2 && name[len - 1] == '.' && name[len - 2] == '.'
+          && (len == 2 || ISSLASH (name[len - 3])))
+        {
+          errno = EISDIR; /* could also use EPERM */
+          return -1;
+        }
+#endif
+      result = unlink (name);
+    }
+  return result;
+}
diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h
index 65bfbc4..ee1c062 100644
--- a/lib/unlocked-io.h
+++ b/lib/unlocked-io.h
@@ -1,6 +1,6 @@
 /* Prefer faster, non-thread-safe stdio functions if available.
 
-   Copyright (C) 2001-2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Jim Meyering.  */
 
diff --git a/lib/unsetenv.c b/lib/unsetenv.c
index ddbe9a4..0199280 100644
--- a/lib/unsetenv.c
+++ b/lib/unsetenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995-2002, 2005-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995-2002, 2005-2019 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
@@ -12,14 +12,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, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
    optimizes away the name == NULL test below.  */
 #define _GL_ARG_NONNULL(params)
 
+#include <config.h>
+
 /* Specification.  */
 #include <stdlib.h>
 
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
index 06a789d..b3854e3 100644
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -1,5 +1,5 @@
 /* vsprintf with automatic memory allocation.
-   Copyright (C) 1999, 2002-2012 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 /* This file can be parametrized with the following macros:
      VASNPRINTF         The name of the function being defined.
@@ -118,6 +118,14 @@
 # include "fpucw.h"
 #endif
 
+#ifndef FALLTHROUGH
+# if __GNUC__ < 7
+#  define FALLTHROUGH ((void) 0)
+# else
+#  define FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+#endif
+
 /* Default parameters.  */
 #ifndef VASNPRINTF
 # if WIDE_CHAR_VERSION
@@ -156,6 +164,7 @@
 #   define SNPRINTF snwprintf
 #  else
 #   define SNPRINTF _snwprintf
+#   define USE_MSVC__SNPRINTF 1
 #  endif
 # else
    /* Unix.  */
@@ -181,7 +190,9 @@
     /* Here we need to call the native snprintf, not rpl_snprintf.  */
 #   undef snprintf
 #  else
+    /* MSVC versions < 14 did not have snprintf, only _snprintf.  */
 #   define SNPRINTF _snprintf
+#   define USE_MSVC__SNPRINTF 1
 #  endif
 # else
    /* Unix.  */
@@ -195,7 +206,7 @@
 
 /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized"
    warnings in this file.  Use -Dlint to suppress them.  */
-#ifdef lint
+#if defined GCC_LINT || defined lint
 # define IF_LINT(Code) Code
 #else
 # define IF_LINT(Code) /* empty */
@@ -208,7 +219,7 @@
 #undef remainder
 #define remainder rem
 
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION
 # if (HAVE_STRNLEN && !defined _AIX)
 #  define local_strnlen strnlen
 # else
@@ -224,7 +235,7 @@
 # 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 (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
 # if HAVE_WCSLEN
 #  define local_wcslen wcslen
 # else
@@ -247,7 +258,7 @@
 # endif
 #endif
 
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
 # if HAVE_WCSNLEN
 #  define local_wcsnlen wcsnlen
 # else
@@ -849,7 +860,9 @@
   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));
+  /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the
+     digits of a, followed by 1 byte for the terminating NUL.  */
+  char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1));
   if (c_ptr != NULL)
     {
       char *d_ptr = c_ptr;
@@ -1517,7 +1530,7 @@
 
 #endif
 
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
 
 /* Use a different function name, to make it possible that the 'wchar_t'
    parametrization and the 'char' parametrization get compiled in the same
@@ -1886,7 +1899,7 @@
             else
               {
                 do
-                  result[length++] = (unsigned char) *cp++;
+                  result[length++] = *cp++;
                 while (--n > 0);
               }
           }
@@ -1957,15 +1970,14 @@
                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
                           abort ();
                         arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
                         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);
+                            width = -width;
                           }
-                        else
-                          width = arg;
                       }
                     else
                       {
@@ -2073,8 +2085,7 @@
                           characters = 0;
                         }
 
-                      if (has_width && width > characters
-                          && !(dp->flags & FLAG_LEFT))
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2127,8 +2138,7 @@
                       }
 # endif
 
-                      if (has_width && width > characters
-                          && (dp->flags & FLAG_LEFT))
+                      if (characters < width && (dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2201,8 +2211,7 @@
                           characters = 0;
                         }
 
-                      if (has_width && width > characters
-                          && !(dp->flags & FLAG_LEFT))
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2255,8 +2264,7 @@
                       }
 # endif
 
-                      if (has_width && width > characters
-                          && (dp->flags & FLAG_LEFT))
+                      if (characters < width && (dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2329,8 +2337,7 @@
                           characters = 0;
                         }
 
-                      if (has_width && width > characters
-                          && !(dp->flags & FLAG_LEFT))
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2383,8 +2390,7 @@
                       }
 # endif
 
-                      if (has_width && width > characters
-                          && (dp->flags & FLAG_LEFT))
+                      if (characters < width && (dp->flags & FLAG_LEFT))
                         {
                           size_t n = width - characters;
                           ENSURE_ALLOCATION (xsum (length, n));
@@ -2399,7 +2405,7 @@
                   }
               }
 #endif
-#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (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
@@ -2435,15 +2441,14 @@
                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
                           abort ();
                         arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
                         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);
+                            width = -width;
                           }
-                        else
-                          width = arg;
                       }
                     else
                       {
@@ -2573,8 +2578,7 @@
                       characters = 0;
                     }
 
-                  if (has_width && width > characters
-                      && !(dp->flags & FLAG_LEFT))
+                  if (characters < width && !(dp->flags & FLAG_LEFT))
                     {
                       size_t n = width - characters;
                       ENSURE_ALLOCATION (xsum (length, n));
@@ -2635,8 +2639,7 @@
                         }
                     }
 
-                  if (has_width && width > characters
-                      && (dp->flags & FLAG_LEFT))
+                  if (characters < width && (dp->flags & FLAG_LEFT))
                     {
                       size_t n = width - characters;
                       ENSURE_ALLOCATION (xsum (length, n));
@@ -2693,7 +2696,7 @@
                               errno = EILSEQ;
                               return NULL;
                             }
-                          if (precision < count)
+                          if (precision < (unsigned int) count)
                             break;
                           arg_end++;
                           characters += count;
@@ -2827,8 +2830,7 @@
                     /* w doesn't matter.  */
                     w = 0;
 
-                  if (has_width && width > w
-                      && !(dp->flags & FLAG_LEFT))
+                  if (w < width && !(dp->flags & FLAG_LEFT))
                     {
                       size_t n = width - w;
                       ENSURE_ALLOCATION (xsum (length, n));
@@ -2911,8 +2913,7 @@
                   length += tmpdst_len;
 #  endif
 
-                  if (has_width && width > w
-                      && (dp->flags & FLAG_LEFT))
+                  if (w < width && (dp->flags & FLAG_LEFT))
                     {
                       size_t n = width - w;
                       ENSURE_ALLOCATION (xsum (length, n));
@@ -2939,17 +2940,16 @@
               {
                 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;
+                size_t count;
                 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)
                   {
@@ -2960,15 +2960,14 @@
                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
                           abort ();
                         arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
                         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);
+                            width = -width;
                           }
-                        else
-                          width = arg;
                       }
                     else
                       {
@@ -2978,7 +2977,6 @@
                           width = xsum (xtimes (width, 10), *digitp++ - '0');
                         while (digitp != dp->width_end);
                       }
-                    has_width = 1;
                   }
 
                 has_precision = 0;
@@ -3354,11 +3352,14 @@
                     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)
+                count = p - tmp;
+
+                if (count < width)
                   {
-                    size_t pad = width - (p - tmp);
+                    size_t pad = width - count;
                     DCHAR_T *end = p + pad;
 
                     if (flags & FLAG_LEFT)
@@ -3391,28 +3392,26 @@
                     p = end;
                   }
 
-                {
-                  size_t count = p - tmp;
+                count = p - tmp;
 
-                  if (count >= tmp_length)
-                    /* tmp_length was incorrectly calculated - fix the
-                       code above!  */
-                    abort ();
+                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);
+                /* Make room for the result.  */
+                if (count >= allocated - length)
+                  {
+                    size_t n = xsum (length, count);
 
-                      ENSURE_ALLOCATION (n);
-                    }
+                    ENSURE_ALLOCATION (n);
+                  }
 
-                  /* Append the result.  */
-                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-                  if (tmp != tmpbuf)
-                    free (tmp);
-                  length += count;
-                }
+                /* 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
@@ -3446,8 +3445,8 @@
                 arg_type type = a.arg[dp->arg_index].type;
 # endif
                 int flags = dp->flags;
-                int has_width;
                 size_t width;
+                size_t count;
                 int has_precision;
                 size_t precision;
                 size_t tmp_length;
@@ -3456,7 +3455,6 @@
                 DCHAR_T *pad_ptr;
                 DCHAR_T *p;
 
-                has_width = 0;
                 width = 0;
                 if (dp->width_start != dp->width_end)
                   {
@@ -3467,15 +3465,14 @@
                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
                           abort ();
                         arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
                         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);
+                            width = -width;
                           }
-                        else
-                          width = arg;
                       }
                     else
                       {
@@ -3485,7 +3482,6 @@
                           width = xsum (xtimes (width, 10), *digitp++ - '0');
                         while (digitp != dp->width_end);
                       }
-                    has_width = 1;
                   }
 
                 has_precision = 0;
@@ -3925,9 +3921,9 @@
                                            digits without trailing zeroes.  */
                                         if (exponent >= 0)
                                           {
-                                            size_t count = exponent + 1;
+                                            size_t ecount = exponent + 1;
                                             /* Note: count <= precision = ndigits.  */
-                                            for (; count > 0; count--)
+                                            for (; ecount > 0; ecount--)
                                               *p++ = digits[--ndigits];
                                             if ((flags & FLAG_ALT) || ndigits > nzeroes)
                                               {
@@ -3941,10 +3937,10 @@
                                           }
                                         else
                                           {
-                                            size_t count = -exponent - 1;
+                                            size_t ecount = -exponent - 1;
                                             *p++ = '0';
                                             *p++ = decimal_point_char ();
-                                            for (; count > 0; count--)
+                                            for (; ecount > 0; ecount--)
                                               *p++ = '0';
                                             while (ndigits > nzeroes)
                                               {
@@ -4249,7 +4245,7 @@
                                   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__
+#    if defined _WIN32 && ! defined __CYGWIN__
                                     { '%', '+', '.', '3', 'd', '\0' };
 #    else
                                     { '%', '+', '.', '2', 'd', '\0' };
@@ -4263,7 +4259,7 @@
                                   static const char decimal_format[] =
                                     /* Produce the same number of exponent digits
                                        as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#    if defined _WIN32 && ! defined __CYGWIN__
                                     "%+.3d";
 #    else
                                     "%+.2d";
@@ -4395,9 +4391,9 @@
                                            digits without trailing zeroes.  */
                                         if (exponent >= 0)
                                           {
-                                            size_t count = exponent + 1;
-                                            /* Note: count <= precision = ndigits.  */
-                                            for (; count > 0; count--)
+                                            size_t ecount = exponent + 1;
+                                            /* Note: ecount <= precision = ndigits.  */
+                                            for (; ecount > 0; ecount--)
                                               *p++ = digits[--ndigits];
                                             if ((flags & FLAG_ALT) || ndigits > nzeroes)
                                               {
@@ -4411,10 +4407,10 @@
                                           }
                                         else
                                           {
-                                            size_t count = -exponent - 1;
+                                            size_t ecount = -exponent - 1;
                                             *p++ = '0';
                                             *p++ = decimal_point_char ();
-                                            for (; count > 0; count--)
+                                            for (; ecount > 0; ecount--)
                                               *p++ = '0';
                                             while (ndigits > nzeroes)
                                               {
@@ -4442,7 +4438,7 @@
                                           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__
+#    if defined _WIN32 && ! defined __CYGWIN__
                                             { '%', '+', '.', '3', 'd', '\0' };
 #    else
                                             { '%', '+', '.', '2', 'd', '\0' };
@@ -4456,7 +4452,7 @@
                                           static const char decimal_format[] =
                                             /* Produce the same number of exponent digits
                                                as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#    if defined _WIN32 && ! defined __CYGWIN__
                                             "%+.3d";
 #    else
                                             "%+.2d";
@@ -4514,7 +4510,7 @@
                                 *p++ = '+';
                                 /* Produce the same number of exponent digits as
                                    the native printf implementation.  */
-#   if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#   if defined _WIN32 && ! defined __CYGWIN__
                                 *p++ = '0';
 #   endif
                                 *p++ = '0';
@@ -4542,9 +4538,11 @@
 
                 /* 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)
+                count = p - tmp;
+
+                if (count < width)
                   {
-                    size_t pad = width - (p - tmp);
+                    size_t pad = width - count;
                     DCHAR_T *end = p + pad;
 
                     if (flags & FLAG_LEFT)
@@ -4577,39 +4575,39 @@
                     p = end;
                   }
 
-                {
-                  size_t count = p - tmp;
+                count = p - tmp;
 
-                  if (count >= tmp_length)
-                    /* tmp_length was incorrectly calculated - fix the
-                       code above!  */
-                    abort ();
+                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);
+                /* Make room for the result.  */
+                if (count >= allocated - length)
+                  {
+                    size_t n = xsum (length, count);
 
-                      ENSURE_ALLOCATION (n);
-                    }
+                    ENSURE_ALLOCATION (n);
+                  }
 
-                  /* Append the result.  */
-                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-                  if (tmp != tmpbuf)
-                    free (tmp);
-                  length += count;
-                }
+                /* 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
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
                 int has_width;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
                 size_t width;
 #endif
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
                 int has_precision;
                 size_t precision;
 #endif
@@ -4635,8 +4633,10 @@
                 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
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
                 has_width = 0;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
                 width = 0;
                 if (dp->width_start != dp->width_end)
                   {
@@ -4647,15 +4647,14 @@
                         if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
                           abort ();
                         arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
                         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);
+                            width = -width;
                           }
-                        else
-                          width = arg;
                       }
                     else
                       {
@@ -4665,11 +4664,13 @@
                           width = xsum (xtimes (width, 10), *digitp++ - '0');
                         while (digitp != dp->width_end);
                       }
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
                     has_width = 1;
+#endif
                   }
 #endif
 
-#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
                 has_precision = 0;
                 precision = 6;
                 if (dp->precision_start != dp->precision_end)
@@ -4805,7 +4806,7 @@
                           {
                             const FCHAR_T *mp = dp->width_start;
                             do
-                              *fbp++ = (unsigned char) *mp++;
+                              *fbp++ = *mp++;
                             while (--n > 0);
                           }
                       }
@@ -4826,7 +4827,7 @@
                           {
                             const FCHAR_T *mp = dp->precision_start;
                             do
-                              *fbp++ = (unsigned char) *mp++;
+                              *fbp++ = *mp++;
                             while (--n > 0);
                           }
                       }
@@ -4837,16 +4838,16 @@
 #if HAVE_LONG_LONG_INT
                   case TYPE_LONGLONGINT:
                   case TYPE_ULONGLONGINT:
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if defined _WIN32 && ! defined __CYGWIN__
                     *fbp++ = 'I';
                     *fbp++ = '6';
                     *fbp++ = '4';
                     break;
 # else
                     *fbp++ = 'l';
-                    /*FALLTHROUGH*/
 # endif
 #endif
+                    FALLTHROUGH;
                   case TYPE_LONGINT:
                   case TYPE_ULONGINT:
 #if HAVE_WINT_T
@@ -4870,7 +4871,11 @@
 #endif
                   *fbp = dp->conversion;
 #if USE_SNPRINTF
-# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3))        \
+         && !defined __UCLIBC__)                                            \
+        || (defined __APPLE__ && defined __MACH__)                          \
+        || defined __ANDROID__                                              \
+        || (defined _WIN32 && ! defined __CYGWIN__))
                 fbp[1] = '%';
                 fbp[2] = 'n';
                 fbp[3] = '\0';
@@ -4884,6 +4889,21 @@
                    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 Mac OS X 10.3 or newer, 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 Mac OS X 10.13 or newer, the use of %n in format strings
+                   in writable memory by default crashes the program, so we
+                   should avoid it in this situation.  */
+                /* On Android, 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.
+                   Starting on 2018-03-07, the use of %n in format strings
+                   produces a fatal error (see
+                   <https://android.googlesource.com/platform/bionic/+/41398d03b7e8e0dfb951660ae713e682e9fc0336>),
+                   so we should avoid it.  */
                 /* On native Windows systems (such as mingw), we can avoid using
                    %n because:
                      - Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
@@ -4896,8 +4916,8 @@
                    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>
+                     <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and
+                     <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-printf-count-output>
                    So we should avoid %n in this situation.  */
                 fbp[1] = '\0';
 # endif
@@ -5116,7 +5136,7 @@
                       {
                         /* Verify that snprintf() has NUL-terminated its
                            result.  */
-                        if (count < maxlen
+                        if ((unsigned int) count < maxlen
                             && ((TCHAR_T *) (result + length)) [count] != '\0')
                           abort ();
                         /* Portability hack.  */
@@ -5139,7 +5159,7 @@
                             /* Look at the snprintf() return value.  */
                             if (retcount < 0)
                               {
-# if !HAVE_SNPRINTF_RETVAL_C99
+# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
                                 /* HP-UX 10.20 snprintf() is doubly deficient:
                                    It doesn't understand the '%n' directive,
                                    *and* it returns -1 (rather than the length
@@ -5153,7 +5173,8 @@
                                 size_t tmp_length =
                                   MAX_ROOM_NEEDED (&a, dp->arg_index,
                                                    dp->conversion, type, flags,
-                                                   width, has_precision,
+                                                   width,
+                                                   has_precision,
                                                    precision, pad_ourselves);
 
                                 if (maxlen < tmp_length)
@@ -5190,18 +5211,21 @@
                         /* SNPRINTF or sprintf failed.  Save and use the errno
                            that it has set, if any.  */
                         int saved_errno = errno;
+                        if (saved_errno == 0)
+                          {
+                            if (dp->conversion == 'c' || dp->conversion == 's')
+                              saved_errno = EILSEQ;
+                            else
+                              saved_errno = EINVAL;
+                          }
 
                         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));
+
+                        errno = saved_errno;
                         return NULL;
                       }
 
@@ -5390,7 +5414,7 @@
                             tmpsrc += count;
                             tmpdst += count;
                             for (n = count; n > 0; n--)
-                              *--tmpdst = (unsigned char) *--tmpsrc;
+                              *--tmpdst = *--tmpsrc;
                           }
                       }
 #endif
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
index dd86914..5b192b2 100644
--- a/lib/vasnprintf.h
+++ b/lib/vasnprintf.h
@@ -1,5 +1,5 @@
 /* vsprintf with automatic memory allocation.
-   Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2004, 2007-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _VASNPRINTF_H
 #define _VASNPRINTF_H
diff --git a/lib/vasprintf.c b/lib/vasprintf.c
new file mode 100644
index 0000000..f5857ca
--- /dev/null
+++ b/lib/vasprintf.c
@@ -0,0 +1,50 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006-2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBASPRINTF
+# include "vasprintf.h"
+#else
+# include <stdio.h>
+#endif
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "vasnprintf.h"
+
+int
+vasprintf (char **resultp, const char *format, va_list args)
+{
+  size_t length;
+  char *result = vasnprintf (NULL, &length, format, args);
+  if (result == NULL)
+    return -1;
+
+  if (length > INT_MAX)
+    {
+      free (result);
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  *resultp = result;
+  /* Return the number of resulting bytes, excluding the trailing NUL.  */
+  return length;
+}
diff --git a/lib/vbitset.c b/lib/vbitset.c
deleted file mode 100644
index fbe6e7c..0000000
--- a/lib/vbitset.c
+++ /dev/null
@@ -1,1140 +0,0 @@
-/* Variable array bitsets.
-
-   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
-   it under the terms of the 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 "vbitset.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-/* This file implements variable size bitsets stored as a variable
-   length array of words.  Any unused bits in the last word must be
-   zero.
-
-   Note that binary or ternary operations assume that each bitset operand
-   has the same size.
-*/
-
-static void vbitset_unused_clear (bitset);
-
-static void vbitset_set (bitset, bitset_bindex);
-static void vbitset_reset (bitset, bitset_bindex);
-static bool vbitset_test (bitset, bitset_bindex);
-static bitset_bindex vbitset_list (bitset, bitset_bindex *,
-				   bitset_bindex, bitset_bindex *);
-static bitset_bindex vbitset_list_reverse (bitset, bitset_bindex *,
-					   bitset_bindex, bitset_bindex *);
-
-#define VBITSET_N_WORDS(N) (((N) + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
-#define VBITSET_WORDS(X) ((X)->b.cdata)
-#define VBITSET_SIZE(X) ((X)->b.csize)
-#define VBITSET_ASIZE(X) ((X)->v.size)
-
-#undef min
-#undef max
-#define min(a, b) ((a) > (b) ? (b) : (a))
-#define max(a, b) ((a) > (b) ? (a) : (b))
-
-static bitset_bindex
-vbitset_resize (bitset src, bitset_bindex n_bits)
-{
-  bitset_windex oldsize;
-  bitset_windex newsize;
-
-  if (n_bits == BITSET_NBITS_ (src))
-    return n_bits;
-
-  oldsize = VBITSET_SIZE (src);
-  newsize = VBITSET_N_WORDS (n_bits);
-
-  if (oldsize < newsize)
-    {
-      bitset_windex size;
-
-      /* The bitset needs to grow.  If we already have enough memory
-	 allocated, then just zero what we need.  */
-      if (newsize > VBITSET_ASIZE (src))
-	{
-	  /* We need to allocate more memory.  When oldsize is
-	     non-zero this means that we are changing the size, so
-	     grow the bitset 25% larger than requested to reduce
-	     number of reallocations.  */
-
-	  if (oldsize == 0)
-	    size = newsize;
-	  else
-	    size = newsize + newsize / 4;
-
-	  VBITSET_WORDS (src)
-	    = realloc (VBITSET_WORDS (src), size * sizeof (bitset_word));
-	  VBITSET_ASIZE (src) = size;
-	}
-
-      memset (VBITSET_WORDS (src) + oldsize, 0,
-	      (newsize - oldsize) * sizeof (bitset_word));
-      VBITSET_SIZE (src) = newsize;
-    }
-  else
-    {
-      /* The bitset needs to shrink.  There's no point deallocating
-	 the memory unless it is shrinking by a reasonable amount.  */
-      if ((oldsize - newsize) >= oldsize / 2)
-	{
-	  VBITSET_WORDS (src)
-	    = realloc (VBITSET_WORDS (src), newsize * sizeof (bitset_word));
-	  VBITSET_ASIZE (src) = newsize;
-	}
-
-      /* Need to prune any excess bits.  FIXME.  */
-
-      VBITSET_SIZE (src) = newsize;
-    }
-
-  BITSET_NBITS_ (src) = n_bits;
-  return n_bits;
-}
-
-
-/* Set bit BITNO in bitset DST.  */
-static void
-vbitset_set (dst, bitno)
-     bitset dst;
-     bitset_bindex bitno;
-{
-  bitset_windex windex = bitno / BITSET_WORD_BITS;
-
-  /* Perhaps we should abort.  The user should explicitly call
-     bitset_resize since this will not catch the case when we set a
-     bit larger than the current size but smaller than the allocated
-     size.  */
-  vbitset_resize (dst, bitno);
-
-  dst->b.cdata[windex - dst->b.cindex] |=
-    (bitset_word) 1 << (bitno % BITSET_WORD_BITS);
-}
-
-
-/* Reset bit BITNO in bitset DST.  */
-static void
-vbitset_reset (dst, bitno)
-     bitset dst ATTRIBUTE_UNUSED;
-     bitset_bindex bitno ATTRIBUTE_UNUSED;
-{
-  /* We must be accessing outside the cache so the bit is
-     zero anyway.  */
-}
-
-
-/* Test bit BITNO in bitset SRC.  */
-static bool
-vbitset_test (src, bitno)
-     bitset src ATTRIBUTE_UNUSED;
-     bitset_bindex bitno ATTRIBUTE_UNUSED;
-{
-  /* We must be accessing outside the cache so the bit is
-     zero anyway.  */
-  return 0;
-}
-
-
-/* Find list of up to NUM bits set in BSET in reverse order, starting
-   from and including NEXT and store in array LIST.  Return with
-   actual number of bits found and with *NEXT indicating where search
-   stopped.  */
-static bitset_bindex
-vbitset_list_reverse (src, list, num, next)
-     bitset src;
-     bitset_bindex *list;
-     bitset_bindex num;
-     bitset_bindex *next;
-{
-  bitset_bindex bitno;
-  bitset_bindex rbitno;
-  bitset_bindex count;
-  bitset_windex windex;
-  unsigned int bitcnt;
-  bitset_bindex bitoff;
-  bitset_word *srcp = VBITSET_WORDS (src);
-  bitset_bindex n_bits = BITSET_SIZE_ (src);
-
-  rbitno = *next;
-
-  /* If num is 1, we could speed things up with a binary search
-     of the word of interest.  */
-
-  if (rbitno >= n_bits)
-    return 0;
-
-  count = 0;
-
-  bitno = n_bits - (rbitno + 1);
-
-  windex = bitno / BITSET_WORD_BITS;
-  bitcnt = bitno % BITSET_WORD_BITS;
-  bitoff = windex * BITSET_WORD_BITS;
-
-  do
-    {
-      bitset_word word;
-
-      word = srcp[windex] << (BITSET_WORD_BITS - 1 - bitcnt);
-      for (; word; bitcnt--)
-	{
-	  if (word & BITSET_MSB)
-	    {
-	      list[count++] = bitoff + bitcnt;
-	      if (count >= num)
-		{
-		  *next = n_bits - (bitoff + bitcnt);
-		  return count;
-		}
-	    }
-	  word <<= 1;
-	}
-      bitoff -= BITSET_WORD_BITS;
-      bitcnt = BITSET_WORD_BITS - 1;
-    }
-  while (windex--);
-
-  *next = n_bits - (bitoff + 1);
-  return count;
-}
-
-
-/* Find list of up to NUM bits set in BSET starting from and including
- *NEXT and store in array LIST.  Return with actual number of bits
- found and with *NEXT indicating where search stopped.  */
-static bitset_bindex
-vbitset_list (src, list, num, next)
-     bitset src;
-     bitset_bindex *list;
-     bitset_bindex num;
-     bitset_bindex *next;
-{
-  bitset_bindex bitno;
-  bitset_bindex count;
-  bitset_windex windex;
-  bitset_bindex bitoff;
-  bitset_windex size = VBITSET_SIZE (src);
-  bitset_word *srcp = VBITSET_WORDS (src);
-  bitset_word word;
-
-  bitno = *next;
-
-  count = 0;
-  if (!bitno)
-    {
-      /* Many bitsets are zero, so make this common case fast.  */
-      for (windex = 0; windex < size && !srcp[windex]; windex++)
-	continue;
-      if (windex >= size)
-	return 0;
-
-      /* If num is 1, we could speed things up with a binary search
-	 of the current word.  */
-
-      bitoff = windex * BITSET_WORD_BITS;
-    }
-  else
-    {
-      if (bitno >= BITSET_SIZE_ (src))
-	return 0;
-
-      windex = bitno / BITSET_WORD_BITS;
-      bitno = bitno % BITSET_WORD_BITS;
-
-      if (bitno)
-	{
-	  /* Handle the case where we start within a word.
-	     Most often, this is executed with large bitsets
-	     with many set bits where we filled the array
-	     on the previous call to this function.  */
-
-	  bitoff = windex * BITSET_WORD_BITS;
-	  word = srcp[windex] >> bitno;
-	  for (bitno = bitoff + bitno; word; bitno++)
-	    {
-	      if (word & 1)
-		{
-		  list[count++] = bitno;
-		  if (count >= num)
-		    {
-		      *next = bitno + 1;
-		      return count;
-		    }
-		}
-	      word >>= 1;
-	    }
-	  windex++;
-	}
-      bitoff = windex * BITSET_WORD_BITS;
-    }
-
-  for (; windex < size; windex++, bitoff += BITSET_WORD_BITS)
-    {
-      if (!(word = srcp[windex]))
-	continue;
-
-      if ((count + BITSET_WORD_BITS) < num)
-	{
-	  for (bitno = bitoff; word; bitno++)
-	    {
-	      if (word & 1)
-		list[count++] = bitno;
-	      word >>= 1;
-	    }
-	}
-      else
-	{
-	  for (bitno = bitoff; word; bitno++)
-	    {
-	      if (word & 1)
-		{
-		  list[count++] = bitno;
-		  if (count >= num)
-		    {
-		      *next = bitno + 1;
-		      return count;
-		    }
-		}
-	      word >>= 1;
-	    }
-	}
-    }
-
-  *next = bitoff;
-  return count;
-}
-
-
-/* Ensure that any unused bits within the last word are clear.  */
-static inline void
-vbitset_unused_clear (dst)
-     bitset dst;
-{
-  unsigned int last_bit;
-
-  last_bit = BITSET_SIZE_ (dst) % BITSET_WORD_BITS;
-  if (last_bit)
-    VBITSET_WORDS (dst)[VBITSET_SIZE (dst) - 1] &=
-      ((bitset_word) 1 << last_bit) - 1;
-}
-
-
-static void
-vbitset_ones (bitset dst)
-{
-  bitset_word *dstp = VBITSET_WORDS (dst);
-  unsigned int bytes;
-
-  bytes = sizeof (bitset_word) * VBITSET_SIZE (dst);
-
-  memset (dstp, -1, bytes);
-  vbitset_unused_clear (dst);
-}
-
-
-static void
-vbitset_zero (bitset dst)
-{
-  bitset_word *dstp = VBITSET_WORDS (dst);
-  unsigned int bytes;
-
-  bytes = sizeof (bitset_word) * VBITSET_SIZE (dst);
-
-  memset (dstp, 0, bytes);
-}
-
-
-static bool
-vbitset_empty_p (bitset dst)
-{
-  unsigned int i;
-  bitset_word *dstp = VBITSET_WORDS (dst);
-
-  for (i = 0; i < VBITSET_SIZE (dst); i++)
-    if (dstp[i])
-      return 0;
-
-  return 1;
-}
-
-
-static void
-vbitset_copy1 (bitset dst, bitset src)
-{
-  bitset_word *srcp;
-  bitset_word *dstp;
-  bitset_windex ssize;
-  bitset_windex dsize;
-
-  if (src == dst)
-      return;
-
-  vbitset_resize (dst, BITSET_SIZE_ (src));
-
-  srcp = VBITSET_WORDS (src);
-  dstp = VBITSET_WORDS (dst);
-  ssize = VBITSET_SIZE (src);
-  dsize = VBITSET_SIZE (dst);
-
-  memcpy (dstp, srcp, sizeof (bitset_word) * ssize);
-
-  memset (dstp + sizeof (bitset_word) * ssize, 0,
-	  sizeof (bitset_word) * (dsize - ssize));
-}
-
-
-static void
-vbitset_not (bitset dst, bitset src)
-{
-  unsigned int i;
-  bitset_word *srcp;
-  bitset_word *dstp;
-  bitset_windex ssize;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, BITSET_SIZE_ (src));
-
-  srcp = VBITSET_WORDS (src);
-  dstp = VBITSET_WORDS (dst);
-  ssize = VBITSET_SIZE (src);
-  dsize = VBITSET_SIZE (dst);
-
-  for (i = 0; i < ssize; i++)
-      *dstp++ = ~(*srcp++);
-
-  vbitset_unused_clear (dst);
-  memset (dstp + sizeof (bitset_word) * ssize, 0,
-	  sizeof (bitset_word) * (dsize - ssize));
-}
-
-
-static bool
-vbitset_equal_p (bitset dst, bitset src)
-{
-  unsigned int i;
-  bitset_word *srcp = VBITSET_WORDS (src);
-  bitset_word *dstp = VBITSET_WORDS (dst);
-  bitset_windex ssize = VBITSET_SIZE (src);
-  bitset_windex dsize = VBITSET_SIZE (dst);
-
-  for (i = 0; i < min (ssize, dsize); i++)
-      if (*srcp++ != *dstp++)
-	  return 0;
-
-  if (ssize > dsize)
-    {
-      for (; i < ssize; i++)
-	if (*srcp++)
-	  return 0;
-    }
-  else
-    {
-      for (; i < dsize; i++)
-	if (*dstp++)
-	  return 0;
-    }
-
-  return 1;
-}
-
-
-static bool
-vbitset_subset_p (bitset dst, bitset src)
-{
-  unsigned int i;
-  bitset_word *srcp = VBITSET_WORDS (src);
-  bitset_word *dstp = VBITSET_WORDS (dst);
-  bitset_windex ssize = VBITSET_SIZE (src);
-  bitset_windex dsize = VBITSET_SIZE (dst);
-
-  for (i = 0; i < min (ssize, dsize); i++, dstp++, srcp++)
-      if (*dstp != (*srcp | *dstp))
-	  return 0;
-
-  if (ssize > dsize)
-    {
-      for (; i < ssize; i++)
-	if (*srcp++)
-	  return 0;
-    }
-
-  return 1;
-}
-
-
-static bool
-vbitset_disjoint_p (bitset dst, bitset src)
-{
-  unsigned int i;
-  bitset_word *srcp = VBITSET_WORDS (src);
-  bitset_word *dstp = VBITSET_WORDS (dst);
-  bitset_windex ssize = VBITSET_SIZE (src);
-  bitset_windex dsize = VBITSET_SIZE (dst);
-
-  for (i = 0; i < min (ssize, dsize); i++)
-      if (*srcp++ & *dstp++)
-	  return 0;
-
-  return 1;
-}
-
-
-static void
-vbitset_and (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++)
-      *dstp++ = *src1p++ & *src2p++;
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - min (ssize1, ssize2)));
-}
-
-
-static bool
-vbitset_and_cmp (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
-    {
-      bitset_word tmp = *src1p++ & *src2p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  if (ssize2 > ssize1)
-    {
-      src1p = src2p;
-      ssize1 = ssize2;
-    }
-
-  for (; i < ssize1; i++, dstp++)
-    {
-      if (*dstp != 0)
-	{
-	  changed = 1;
-	  *dstp = 0;
-	}
-    }
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-
-  return changed;
-}
-
-
-static void
-vbitset_andn (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++)
-      *dstp++ = *src1p++ & ~(*src2p++);
-
-  if (ssize2 > ssize1)
-    {
-      for (; i < ssize2; i++)
-	*dstp++ = 0;
-
-      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));
-    }
-  else
-    {
-      for (; i < ssize1; i++)
-	*dstp++ = *src1p++;
-
-      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-    }
-}
-
-
-static bool
-vbitset_andn_cmp (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
-    {
-      bitset_word tmp = *src1p++ & ~(*src2p++);
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  if (ssize2 > ssize1)
-    {
-      for (; i < ssize2; i++, dstp++)
-	{
-	  if (*dstp != 0)
-	    {
-	      changed = 1;
-	      *dstp = 0;
-	    }
-	}
-
-      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize2));
-    }
-  else
-    {
-      for (; i < ssize1; i++, dstp++)
-	{
-	  bitset_word tmp = *src1p++;
-
-	  if (*dstp != tmp)
-	    {
-	      changed = 1;
-	      *dstp = tmp;
-	    }
-	}
-
-      memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-    }
-
-  return changed;
-}
-
-
-static void
-vbitset_or (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++)
-      *dstp++ = *src1p++ | *src2p++;
-
-  if (ssize2 > ssize1)
-    {
-      src1p = src2p;
-      ssize1 = ssize2;
-    }
-
-  for (; i < ssize1; i++)
-    *dstp++ = *src1p++;
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-}
-
-
-static bool
-vbitset_or_cmp (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
-    {
-      bitset_word tmp = *src1p++ | *src2p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  if (ssize2 > ssize1)
-    {
-      src1p = src2p;
-      ssize1 = ssize2;
-    }
-
-  for (; i < ssize1; i++, dstp++)
-    {
-      bitset_word tmp = *src1p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-
-  return changed;
-}
-
-
-static void
-vbitset_xor (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++)
-      *dstp++ = *src1p++ ^ *src2p++;
-
-  if (ssize2 > ssize1)
-    {
-      src1p = src2p;
-      ssize1 = ssize2;
-    }
-
-  for (; i < ssize1; i++)
-    *dstp++ = *src1p++;
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-}
-
-
-static bool
-vbitset_xor_cmp (bitset dst, bitset src1, bitset src2)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *dstp;
-  bitset_windex ssize1;
-  bitset_windex ssize2;
-  bitset_windex dsize;
-
-  vbitset_resize (dst, max (BITSET_SIZE_ (src1), BITSET_SIZE_ (src2)));
-
-  dsize = VBITSET_SIZE (dst);
-  ssize1 = VBITSET_SIZE (src1);
-  ssize2 = VBITSET_SIZE (src2);
-  dstp = VBITSET_WORDS (dst);
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-
-  for (i = 0; i < min (ssize1, ssize2); i++, dstp++)
-    {
-      bitset_word tmp = *src1p++ ^ *src2p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  if (ssize2 > ssize1)
-    {
-      src1p = src2p;
-      ssize1 = ssize2;
-    }
-
-  for (; i < ssize1; i++, dstp++)
-    {
-      bitset_word tmp = *src1p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-
-  memset (dstp, 0, sizeof (bitset_word) * (dsize - ssize1));
-
-  return changed;
-}
-
-
-/* FIXME, these operations need fixing for different size
-   bitsets.  */
-
-static void
-vbitset_and_or (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    {
-      bitset_and_or_ (dst, src1, src2, src3);
-      return;
-    }
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ & *src2p++) | *src3p++;
-}
-
-
-static bool
-vbitset_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    return bitset_and_or_cmp_ (dst, src1, src2, src3);
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++, dstp++)
-    {
-      bitset_word tmp = (*src1p++ & *src2p++) | *src3p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-  return changed;
-}
-
-
-static void
-vbitset_andn_or (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    {
-      bitset_andn_or_ (dst, src1, src2, src3);
-      return;
-    }
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ & ~(*src2p++)) | *src3p++;
-}
-
-
-static bool
-vbitset_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    return bitset_andn_or_cmp_ (dst, src1, src2, src3);
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++, dstp++)
-    {
-      bitset_word tmp = (*src1p++ & ~(*src2p++)) | *src3p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-  return changed;
-}
-
-
-static void
-vbitset_or_and (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    {
-      bitset_or_and_ (dst, src1, src2, src3);
-      return;
-    }
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++)
-      *dstp++ = (*src1p++ | *src2p++) & *src3p++;
-}
-
-
-static bool
-vbitset_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3)
-{
-  unsigned int i;
-  int changed = 0;
-  bitset_word *src1p;
-  bitset_word *src2p;
-  bitset_word *src3p;
-  bitset_word *dstp;
-  bitset_windex size;
-
-  if (BITSET_NBITS_ (src1) != BITSET_NBITS_ (src2)
-      || BITSET_NBITS_ (src1) != BITSET_NBITS_ (src3))
-    return bitset_or_and_cmp_ (dst, src1, src2, src3);
-
-  vbitset_resize (dst, BITSET_NBITS_ (src1));
-
-  src1p = VBITSET_WORDS (src1);
-  src2p = VBITSET_WORDS (src2);
-  src3p = VBITSET_WORDS (src3);
-  dstp = VBITSET_WORDS (dst);
-  size = VBITSET_SIZE (dst);
-
-  for (i = 0; i < size; i++, dstp++)
-    {
-      bitset_word tmp = (*src1p++ | *src2p++) & *src3p++;
-
-      if (*dstp != tmp)
-	{
-	  changed = 1;
-	  *dstp = tmp;
-	}
-    }
-  return changed;
-}
-
-
-static void
-vbitset_copy (bitset dst, bitset src)
-{
-  if (BITSET_COMPATIBLE_ (dst, src))
-      vbitset_copy1 (dst, src);
-  else
-      bitset_copy_ (dst, src);
-}
-
-
-/* Vector of operations for multiple word bitsets.  */
-struct bitset_vtable vbitset_vtable = {
-  vbitset_set,
-  vbitset_reset,
-  bitset_toggle_,
-  vbitset_test,
-  vbitset_resize,
-  bitset_size_,
-  bitset_count_,
-  vbitset_empty_p,
-  vbitset_ones,
-  vbitset_zero,
-  vbitset_copy,
-  vbitset_disjoint_p,
-  vbitset_equal_p,
-  vbitset_not,
-  vbitset_subset_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_list,
-  vbitset_list_reverse,
-  NULL,
-  BITSET_VARRAY
-};
-
-
-size_t
-vbitset_bytes (n_bits)
-     bitset_bindex n_bits ATTRIBUTE_UNUSED;
-{
-  return sizeof (struct vbitset_struct);
-}
-
-
-bitset
-vbitset_init (bset, n_bits)
-     bitset bset;
-     bitset_bindex n_bits;
-{
-  bset->b.vtable = &vbitset_vtable;
-
-  bset->b.cindex = 0;
-
-  VBITSET_SIZE (bset) = 0;
-  vbitset_resize (bset, n_bits);
-  return bset;
-}
diff --git a/lib/verify.h b/lib/verify.h
index 0c320b1..a58005c 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -1,6 +1,6 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2019 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
@@ -13,32 +13,48 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
 
 #ifndef _GL_VERIFY_H
-# define _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 (R, DIAGNOSTIC)
+   works as per C11.  This is supported by GCC 4.6.0 and later, in C
+   mode.
 
-   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.
+   Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
+   per C2X, and define _GL_HAVE_STATIC_ASSERT1 if static_assert (R)
+   works as per C++17.  This is supported by GCC 9.1 and later.
 
-   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
+   Support compilers claiming conformance to the relevant standard,
+   and also support GCC when not pedantic.  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?  */
+#ifndef __cplusplus
+# if (201112L <= __STDC_VERSION__ \
+      || (!defined __STRICT_ANSI__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__)))
 #  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
+# if (202000L <= __STDC_VERSION__ \
+      || (!defined __STRICT_ANSI__ && 9 <= __GNUC__))
+#  define _GL_HAVE__STATIC_ASSERT1 1
 # endif
+#else
+# if 201703L <= __cplusplus || 9 <= __GNUC__
+#  define _GL_HAVE_STATIC_ASSERT1 1
+# endif
+#endif
+
+/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
+   system headers, defines a conflicting _Static_assert that is no
+   better than ours; override it.  */
+#ifndef _GL_HAVE__STATIC_ASSERT
+# include <stddef.h>
+# undef _Static_assert
+#endif
 
 /* Each of these macros verifies that its argument R is nonzero.  To
    be portable, R should be an integer constant expression.  Unlike
@@ -133,112 +149,152 @@
      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
+   * 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.
+     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
+#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+#define _GL_CONCAT0(x, y) x##y
 
 /* _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
+#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)
+#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)))
+#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
+   (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
 
-# ifdef __cplusplus
-#  if !GNULIB_defined_struct__gl_verify_type
+#ifdef __cplusplus
+# if !GNULIB_defined_struct__gl_verify_type
 template <int w>
   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 _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-     struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
+#  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 _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.
+   trailing ';'.  If R is false, fail at compile-time.
+
+   This macro requires three or more arguments but uses at most the first
+   two, so that the _Static_assert macro optionally defined below supports
+   both the C11 two-argument syntax and the C2X one-argument syntax.
 
    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
+#if defined _GL_HAVE__STATIC_ASSERT
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
+#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
+#ifdef _GL_STATIC_ASSERT_H
+# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
+#  define _Static_assert(...) \
+     _GL_VERIFY (__VA_ARGS__, "static assertion failed", -)
 # endif
+# if !defined _GL_HAVE_STATIC_ASSERT1 && !defined static_assert
+#  define static_assert _Static_assert /* C11 requires this #define.  */
+# endif
+#endif
 
 /* @assert.h omit start@  */
 
+#if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))
+# define _GL_HAS_BUILTIN_TRAP 1
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap)
+#else
+# define _GL_HAS_BUILTIN_TRAP 0
+#endif
+
+#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
+# define _GL_HAS_BUILTIN_UNREACHABLE 1
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
+#else
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+#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
+   contexts in C.  verify_expr (R, E) 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))
+#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 ';'.  */
+   trailing ';'.  verify (R) acts like static_assert (R) except that
+   it is portable to C11/C++14 and earlier, it can issue better
+   diagnostics, and its name is shorter and may be more convenient.  */
 
-# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+#ifdef __PGI
+/* PGI barfs if R is long.  */
+# define verify(R) _GL_VERIFY (R, "verify (...)", -)
+#else
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -)
+#endif
+
+/* Assume that R always holds.  Behavior is undefined if R is false,
+   fails to evaluate, or has side effects.  Although assuming R can
+   help a compiler generate better code or diagnostics, performance
+   can suffer if R uses hard-to-optimize features such as function
+   calls not inlined by the compiler.  */
+
+#if _GL_HAS_BUILTIN_UNREACHABLE
+# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
+#elif 1200 <= _MSC_VER
+# define assume(R) __assume (R)
+#elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP
+  /* Doing it this way helps various packages when configured with
+     --enable-gcc-warnings, which compiles with -Dlint.  It's nicer
+     when 'assume' silences warnings even with older GCCs.  */
+# define assume(R) ((R) ? (void) 0 : __builtin_trap ())
+#else
+  /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6.  */
+# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0)
+#endif
 
 /* @assert.h omit end@  */
 
diff --git a/lib/vfprintf.c b/lib/vfprintf.c
index 4117791..23a90a8 100644
--- a/lib/vfprintf.c
+++ b/lib/vfprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to a stream.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/vsnprintf.c b/lib/vsnprintf.c
index 304b909..3dc7954 100644
--- a/lib/vsnprintf.c
+++ b/lib/vsnprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 0c0ad3e..aa2e089 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1,5 +1,5 @@
 /* Formatted output to strings.
-   Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if 1
 # include <config.h>
diff --git a/lib/w32spawn.h b/lib/w32spawn.h
index 49a3900..941ff1a 100644
--- a/lib/w32spawn.h
+++ b/lib/w32spawn.h
@@ -1,5 +1,5 @@
 /* Auxiliary functions for the creation of subprocesses.  Native Windows API.
-   Copyright (C) 2001, 2003-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -13,11 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+#ifndef __KLIBC__
 /* Get declarations of the native Windows API functions.  */
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
 
 /* Get _open_osfhandle().  */
 #include <io.h>
@@ -28,7 +30,11 @@
 #include <errno.h>
 
 /* Get _get_osfhandle().  */
-#include "msvc-nothrow.h"
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
 
 #include "cloexec.h"
 #include "xalloc.h"
@@ -123,8 +129,13 @@
        - 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"
+#ifndef __KLIBC__
+# 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"
+#else
+# define SHELL_SPECIAL_CHARS ""
+# define SHELL_SPACE_CHARS ""
+#endif
 static char **
 prepare_spawn (char **argv)
 {
diff --git a/lib/wait-process.c b/lib/wait-process.c
index 80ed793..7c69933 100644
--- a/lib/wait-process.c
+++ b/lib/wait-process.c
@@ -1,5 +1,5 @@
 /* Waiting for a subprocess to finish.
-   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
@@ -39,14 +39,14 @@
 #define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
 
 
-#if defined _MSC_VER || defined __MINGW32__
+#if defined _WIN32 && ! defined __CYGWIN__
 
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+# 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)
+# define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig)
 
 #endif
 
@@ -80,7 +80,7 @@
 #endif
 
 /* The cleanup action.  It gets called asynchronously.  */
-static void
+static _GL_ASYNC_SAFE void
 cleanup_slaves (void)
 {
   for (;;)
@@ -102,6 +102,14 @@
     }
 }
 
+/* The cleanup action, taking a signal argument.
+   It gets called asynchronously.  */
+static _GL_ASYNC_SAFE void
+cleanup_slaves_action (int sig _GL_UNUSED)
+{
+  cleanup_slaves ();
+}
+
 /* 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()
@@ -113,7 +121,7 @@
   if (!cleanup_slaves_registered)
     {
       atexit (cleanup_slaves);
-      at_fatal_signal (cleanup_slaves);
+      at_fatal_signal (cleanup_slaves_action);
       cleanup_slaves_registered = true;
     }
 
diff --git a/lib/wait-process.h b/lib/wait-process.h
index bd20431..08470fb 100644
--- a/lib/wait-process.h
+++ b/lib/wait-process.h
@@ -1,5 +1,5 @@
 /* Waiting for a subprocess to finish.
-   Copyright (C) 2001-2003, 2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2006, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _WAIT_PROCESS_H
 #define _WAIT_PROCESS_H
diff --git a/lib/waitpid.c b/lib/waitpid.c
index 9249d4c..a9dace6 100644
--- a/lib/waitpid.c
+++ b/lib/waitpid.c
@@ -1,5 +1,5 @@
 /* Wait for process state change.
-   Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/build-aux/snippet/warn-on-use.h b/lib/warn-on-use.h
similarity index 62%
rename from build-aux/snippet/warn-on-use.h
rename to lib/warn-on-use.h
index 51e69bb..7d11a15 100644
--- a/build-aux/snippet/warn-on-use.h
+++ b/lib/warn-on-use.h
@@ -1,5 +1,5 @@
 /* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 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
@@ -12,7 +12,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* _GL_WARN_ON_USE (function, "literal string") issues a declaration
    for FUNCTION which will then trigger a compiler warning containing
@@ -20,23 +20,32 @@
    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
+   _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the
+   attribute used in _GL_WARN_ON_USE.  If the compiler does not support
+   this feature, it expands to empty.
+
+   These macros are 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.
+   instead.
+   _GL_WARN_ON_USE is for functions with 'extern' linkage.
+   _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'
+   linkage.
+
+   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>]],
@@ -54,12 +63,21 @@
    (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
+     #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
+   or better (avoiding contradictory use of 'static' and 'extern'):
+     #if HAVE_RAW_DECL_ENVIRON
+     static char ***
+     _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared")
+     rpl_environ (void) { return &environ; }
+     # undef environ
+     # define environ (*rpl_environ ())
+     #endif
    */
 #ifndef _GL_WARN_ON_USE
 
@@ -67,13 +85,17 @@
 /* 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)))
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+  __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
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message)
 # else /* Unsupported.  */
 #  define _GL_WARN_ON_USE(function, message) \
 _GL_WARN_EXTERN_C int _gl_warn_on_use
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message)
 # endif
 #endif
 
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index f9bc30c..8a899cd 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
 
-   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007-2019 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
@@ -13,13 +13,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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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>
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html>
  *
  * For now, this just ensures proper prerequisite inclusion order and
  * the declaration of wcwidth().
@@ -30,15 +30,23 @@
 #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
+#if (((defined __need_mbstate_t || defined __need_wint_t)               \
+      && !defined __MINGW32__)                                          \
+     || (defined __hpux                                                 \
+         && ((defined _INTTYPES_INCLUDED && !defined strtoimax)         \
+             || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \
+     || (defined __MINGW32__ && defined __STRING_H_SOURCED__)           \
+     || defined _GL_ALREADY_INCLUDING_WCHAR_H)
 /* Special invocation convention:
-   - Inside glibc and uClibc header files.
+   - Inside glibc and uClibc header files, but not MinGW.
    - 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>.
+   - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of
+     <wchar.h> is actually processed, and that doesn't include 'mbstate_t'.
    - 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.  */
@@ -105,12 +113,16 @@
 #  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
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+   <stddef.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 @GNULIB_OVERRIDES_WINT_T@
 #  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
+#   if @HAVE_CRTDEFS_H@
+#    include <crtdefs.h>
+#   else
+#    include <stddef.h>
+#   endif
 typedef unsigned int rpl_wint_t;
 #   undef wint_t
 #   define wint_t rpl_wint_t
@@ -149,9 +161,12 @@
 #  if !@HAVE_BTOWC@
 _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
 #  endif
-_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+/* Need to cast, because on mingw, the return type is 'unsigned short'.  */
+_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (btowc);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef btowc
 # if HAVE_RAW_DECL_BTOWC
@@ -177,7 +192,9 @@
 #  endif
 _GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wctob);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wctob
 # if HAVE_RAW_DECL_WCTOB
@@ -202,7 +219,9 @@
 #  endif
 _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mbsinit);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef mbsinit
 # if HAVE_RAW_DECL_MBSINIT
@@ -231,7 +250,9 @@
 _GL_CXXALIAS_SYS (mbrtowc, size_t,
                   (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mbrtowc);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef mbrtowc
 # if HAVE_RAW_DECL_MBRTOWC
@@ -256,7 +277,9 @@
 #  endif
 _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mbrlen);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef mbrlen
 # if HAVE_RAW_DECL_MBRLEN
@@ -289,7 +312,9 @@
                   (wchar_t *dest, const char **srcp, size_t len,
                    mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (mbsrtowcs);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef mbsrtowcs
 # if HAVE_RAW_DECL_MBSRTOWCS
@@ -349,7 +374,9 @@
 #  endif
 _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcrtomb);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcrtomb
 # if HAVE_RAW_DECL_WCRTOMB
@@ -382,7 +409,9 @@
                   (char *dest, const wchar_t **srcp, size_t len,
                    mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsrtombs);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsrtombs
 # if HAVE_RAW_DECL_WCSRTOMBS
@@ -407,7 +436,7 @@
                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
                    mbstate_t *ps));
 # else
-#  if !@HAVE_WCSNRTOMBS@
+#  if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun)
 _GL_FUNCDECL_SYS (wcsnrtombs, size_t,
                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
                    mbstate_t *ps)
@@ -417,7 +446,9 @@
                   (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
                    mbstate_t *ps));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsnrtombs);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsnrtombs
 # if HAVE_RAW_DECL_WCSNRTOMBS
@@ -443,7 +474,9 @@
 #  endif
 _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcwidth);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcwidth
 # if HAVE_RAW_DECL_WCWIDTH
@@ -472,7 +505,7 @@
 _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
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (wmemchr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -493,7 +526,9 @@
 # endif
 _GL_CXXALIAS_SYS (wmemcmp, int,
                   (const wchar_t *s1, const wchar_t *s2, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wmemcmp);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wmemcmp
 # if HAVE_RAW_DECL_WMEMCMP
@@ -511,7 +546,9 @@
 # endif
 _GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
                   (wchar_t *dest, const wchar_t *src, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wmemcpy);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wmemcpy
 # if HAVE_RAW_DECL_WMEMCPY
@@ -530,7 +567,9 @@
 # endif
 _GL_CXXALIAS_SYS (wmemmove, wchar_t *,
                   (wchar_t *dest, const wchar_t *src, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wmemmove);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wmemmove
 # if HAVE_RAW_DECL_WMEMMOVE
@@ -546,7 +585,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wmemset);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wmemset
 # if HAVE_RAW_DECL_WMEMSET
@@ -562,7 +603,9 @@
 _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
 # endif
 _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcslen);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcslen
 # if HAVE_RAW_DECL_WCSLEN
@@ -595,7 +638,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcscpy);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcscpy
 # if HAVE_RAW_DECL_WCSCPY
@@ -629,7 +674,9 @@
 # endif
 _GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
                   (wchar_t *dest, const wchar_t *src, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsncpy);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsncpy
 # if HAVE_RAW_DECL_WCSNCPY
@@ -664,7 +711,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcscat);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcscat
 # if HAVE_RAW_DECL_WCSCAT
@@ -682,7 +731,9 @@
 # endif
 _GL_CXXALIAS_SYS (wcsncat, wchar_t *,
                   (wchar_t *dest, const wchar_t *src, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsncat);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsncat
 # if HAVE_RAW_DECL_WCSNCAT
@@ -699,7 +750,9 @@
                                _GL_ATTRIBUTE_PURE);
 # endif
 _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcscmp);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcscmp
 # if HAVE_RAW_DECL_WCSCMP
@@ -718,7 +771,9 @@
 # endif
 _GL_CXXALIAS_SYS (wcsncmp, int,
                   (const wchar_t *s1, const wchar_t *s2, size_t n));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsncmp);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsncmp
 # if HAVE_RAW_DECL_WCSNCMP
@@ -771,7 +826,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcscoll);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcscoll
 # if HAVE_RAW_DECL_WCSCOLL
@@ -789,7 +846,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsxfrm);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsxfrm
 # if HAVE_RAW_DECL_WCSXFRM
@@ -833,7 +892,7 @@
      && (__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
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcschr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -863,7 +922,7 @@
      && (__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
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsrchr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -883,7 +942,9 @@
                                    _GL_ATTRIBUTE_PURE);
 # endif
 _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcscspn);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcscspn
 # if HAVE_RAW_DECL_WCSCSPN
@@ -901,7 +962,9 @@
                                   _GL_ATTRIBUTE_PURE);
 # endif
 _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsspn);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcsspn
 # if HAVE_RAW_DECL_WCSSPN
@@ -932,7 +995,7 @@
                    (wchar_t *wcs, const wchar_t *accept));
 _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
                    (const wchar_t *wcs, const wchar_t *accept));
-# else
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcspbrk);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -965,7 +1028,7 @@
                    (wchar_t *haystack, const wchar_t *needle));
 _GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
                    (const wchar_t *haystack, const wchar_t *needle));
-# else
+# elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcsstr);
 # endif
 #elif defined GNULIB_POSIXCHECK
@@ -979,13 +1042,26 @@
 
 /* Divide WCS into tokens separated by characters in DELIM.  */
 #if @GNULIB_WCSTOK@
-# if !@HAVE_WCSTOK@
+# if @REPLACE_WCSTOK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcstok
+#   define wcstok rpl_wcstok
+#  endif
+_GL_FUNCDECL_RPL (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIAS_RPL (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# else
+#  if !@HAVE_WCSTOK@
 _GL_FUNCDECL_SYS (wcstok, wchar_t *,
                   (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (wcstok, wchar_t *,
                   (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcstok);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcstok
 # if HAVE_RAW_DECL_WCSTOK
@@ -1013,7 +1089,9 @@
 #  endif
 _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wcswidth);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wcswidth
 # if HAVE_RAW_DECL_WCSWIDTH
@@ -1023,6 +1101,40 @@
 #endif
 
 
+/* Convert *TP to a date and time wide string.  See
+   <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>.  */
+#if @GNULIB_WCSFTIME@
+# if @REPLACE_WCSFTIME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsftime
+#   define wcsftime rpl_wcsftime
+#  endif
+_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp)
+                                    _GL_ARG_NONNULL ((1, 3, 4)));
+_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp));
+# else
+#  if !@HAVE_WCSFTIME@
+_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp)
+                                    _GL_ARG_NONNULL ((1, 3, 4)));
+#  endif
+_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsftime);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsftime
+# if HAVE_RAW_DECL_WCSFTIME
+_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
+                 "use gnulib module wcsftime for portability");
+# endif
+#endif
+
+
 #endif /* _@GUARD_PREFIX@_WCHAR_H */
 #endif /* _@GUARD_PREFIX@_WCHAR_H */
 #endif
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
index 3c98fa3..0cc7512 100644
--- a/lib/wctype.in.h
+++ b/lib/wctype.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
 
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2019 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
@@ -13,25 +13,37 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://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>
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/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 (defined __MINGW32__ && defined __CTYPE_H_SOURCED__)
+
+/* Special invocation convention:
+   - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of
+     <wctype.h> is being processed, which doesn't include the idempotency
+     guard.   */
+
+#@INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+
 #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
@@ -44,6 +56,15 @@
 # include <wchar.h>
 #endif
 
+/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and
+   isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>.  Include
+   <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the
+   declarations.  */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <ctype.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.  */
@@ -54,6 +75,9 @@
 #ifndef _@GUARD_PREFIX@_WCTYPE_H
 #define _@GUARD_PREFIX@_WCTYPE_H
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef _GL_WCTYPE_INLINE
 # define _GL_WCTYPE_INLINE _GL_INLINE
@@ -83,12 +107,16 @@
 #  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
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+   <stddef.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 @GNULIB_OVERRIDES_WINT_T@
 #  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
+#   if @HAVE_CRTDEFS_H@
+#    include <crtdefs.h>
+#   else
+#    include <stddef.h>
+#   endif
 typedef unsigned int rpl_wint_t;
 #   undef wint_t
 #   define wint_t rpl_wint_t
@@ -105,33 +133,113 @@
 
 /* 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.
+   mingw and MSVC have <wctype.h> and the functions but they take a wchar_t
+   as argument, not an rpl_wint_t.
    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
+#  if @GNULIB_OVERRIDES_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */
 
-/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
-#  if @REPLACE_ISWCNTRL@
+_GL_WCTYPE_INLINE int
+rpl_iswalnum (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswalpha (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswblank (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswcntrl (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswdigit (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswdigit ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswgraph (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswlower (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswprint (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswpunct (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswspace (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswupper (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswxdigit (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? iswxdigit ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+  return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc);
+}
+
 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    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
 #    define iswalnum rpl_iswalnum
 #    define iswalpha rpl_iswalpha
 #    define iswblank rpl_iswblank
@@ -144,21 +252,62 @@
 #    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
+
+#  else
+
+/* 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@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswalnum
-#  else
+#   else
 iswalnum
-#  endif
+#   endif
          (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
@@ -166,88 +315,88 @@
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswalpha
-#  else
+#   else
 iswalpha
-#  endif
+#   endif
          (wint_t wc)
 {
   return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswblank
-#  else
+#   else
 iswblank
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc == ' ' || wc == '\t';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswcntrl
-#  else
+#   else
 iswcntrl
-#  endif
+#   endif
         (wint_t wc)
 {
   return (wc & ~0x1f) == 0 || wc == 0x7f;
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswdigit
-#  else
+#   else
 iswdigit
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc >= '0' && wc <= '9';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswgraph
-#  else
+#   else
 iswgraph
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc >= '!' && wc <= '~';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswlower
-#  else
+#   else
 iswlower
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc >= 'a' && wc <= 'z';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswprint
-#  else
+#   else
 iswprint
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc >= ' ' && wc <= '~';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswpunct
-#  else
+#   else
 iswpunct
-#  endif
+#   endif
          (wint_t wc)
 {
   return (wc >= '!' && wc <= '~'
@@ -256,11 +405,11 @@
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswspace
-#  else
+#   else
 iswspace
-#  endif
+#   endif
          (wint_t wc)
 {
   return (wc == ' ' || wc == '\t'
@@ -268,22 +417,22 @@
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswupper
-#  else
+#   else
 iswupper
-#  endif
+#   endif
          (wint_t wc)
 {
   return wc >= 'A' && wc <= 'Z';
 }
 
 _GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
+#   if @REPLACE_ISWCNTRL@
 rpl_iswxdigit
-#  else
+#   else
 iswxdigit
-#  endif
+#   endif
           (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
@@ -291,27 +440,29 @@
 }
 
 _GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
+#   if @REPLACE_TOWLOWER@
 rpl_towlower
-#  else
+#   else
 towlower
-#  endif
+#   endif
          (wint_t wc)
 {
   return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
 }
 
 _GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
+#   if @REPLACE_TOWLOWER@
 rpl_towupper
-#  else
+#   else
 towupper
-#  endif
+#   endif
          (wint_t wc)
 {
   return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
 }
 
+#  endif
+
 # elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
 /* Only the iswblank function is missing.  */
 
@@ -326,7 +477,7 @@
 
 # endif
 
-# if defined __MINGW32__
+# if defined __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@
 
 /* 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
@@ -359,7 +510,7 @@
 #   define towupper rpl_towupper
 #  endif
 
-# endif /* __MINGW32__ */
+# endif /* __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ */
 
 # define GNULIB_defined_wctype_functions 1
 #endif
@@ -389,6 +540,7 @@
 _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
 _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
 #endif
+#if __GLIBC__ >= 2
 _GL_CXXALIASWARN (iswalnum);
 _GL_CXXALIASWARN (iswalpha);
 _GL_CXXALIASWARN (iswcntrl);
@@ -400,6 +552,7 @@
 _GL_CXXALIASWARN (iswspace);
 _GL_CXXALIASWARN (iswupper);
 _GL_CXXALIASWARN (iswxdigit);
+#endif
 
 #if @GNULIB_ISWBLANK@
 # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
@@ -407,7 +560,9 @@
 # else
 _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
 # endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (iswblank);
+# endif
 #endif
 
 #if !@HAVE_WCTYPE_T@
@@ -423,7 +578,9 @@
 _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
 # endif
 _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wctype);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wctype
 # if HAVE_RAW_DECL_WCTYPE
@@ -436,11 +593,22 @@
    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@
+# if @GNULIB_OVERRIDES_WINT_T@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef iswctype
+#   define iswctype rpl_iswctype
+#  endif
+_GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc));
+# else
+#  if !@HAVE_WCTYPE_T@
 _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
-# endif
+#  endif
 _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (iswctype);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef iswctype
 # if HAVE_RAW_DECL_ISWCTYPE
@@ -456,8 +624,10 @@
 _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
 _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
 #endif
+#if __GLIBC__ >= 2
 _GL_CXXALIASWARN (towlower);
 _GL_CXXALIASWARN (towupper);
+#endif
 
 #if !@HAVE_WCTRANS_T@
 # if !GNULIB_defined_wctrans_t
@@ -472,7 +642,9 @@
 _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
 # endif
 _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (wctrans);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef wctrans
 # if HAVE_RAW_DECL_WCTRANS
@@ -489,7 +661,9 @@
 _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));
+# if __GLIBC__ >= 2
 _GL_CXXALIASWARN (towctrans);
+# endif
 #elif defined GNULIB_POSIXCHECK
 # undef towctrans
 # if HAVE_RAW_DECL_TOWCTRANS
@@ -502,3 +676,4 @@
 
 #endif /* _@GUARD_PREFIX@_WCTYPE_H */
 #endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif
diff --git a/lib/wcwidth.c b/lib/wcwidth.c
index 44503b0..1f081cc 100644
--- a/lib/wcwidth.c
+++ b/lib/wcwidth.c
@@ -1,5 +1,5 @@
 /* Determine the number of screen columns needed for a character.
-   Copyright (C) 2006-2007, 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2007, 2010-2019 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
@@ -12,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -26,17 +26,40 @@
 #include "streq.h"
 #include "uniwidth.h"
 
+/* Returns 1 if the current locale is an UTF-8 locale, 0 otherwise.  */
+static inline int
+is_locale_utf8 (void)
+{
+  const char *encoding = locale_charset ();
+  return STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0);
+}
+
+#if GNULIB_WCHAR_SINGLE
+/* When we know that the locale does not change, provide a speedup by
+   caching the value of is_locale_utf8.  */
+static int cached_is_locale_utf8 = -1;
+static inline int
+is_locale_utf8_cached (void)
+{
+  if (cached_is_locale_utf8 < 0)
+    cached_is_locale_utf8 = is_locale_utf8 ();
+  return cached_is_locale_utf8;
+}
+#else
+/* By default, don't make assumptions, hence no caching.  */
+# define is_locale_utf8_cached is_locale_utf8
+#endif
+
 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))
+  if (is_locale_utf8_cached ())
     {
       /* We assume that in a UTF-8 locale, a wide character is the same as a
          Unicode character.  */
-      return uc_width (wc, encoding);
+      return uc_width (wc, "UTF-8");
     }
   else
     {
diff --git a/lib/windows-initguard.h b/lib/windows-initguard.h
new file mode 100644
index 0000000..8aefd0b
--- /dev/null
+++ b/lib/windows-initguard.h
@@ -0,0 +1,35 @@
+/* Init guards, somewhat like spinlocks (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#ifndef _WINDOWS_INITGUARD_H
+#define _WINDOWS_INITGUARD_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+typedef struct
+        {
+          volatile int done;
+          volatile LONG started;
+        }
+        glwthread_initguard_t;
+
+#define GLWTHREAD_INITGUARD_INIT { 0, -1 }
+
+#endif /* _WINDOWS_INITGUARD_H */
diff --git a/lib/windows-mutex.c b/lib/windows-mutex.c
new file mode 100644
index 0000000..9433881
--- /dev/null
+++ b/lib/windows-mutex.c
@@ -0,0 +1,95 @@
+/* Plain mutexes (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "windows-mutex.h"
+
+#include <errno.h>
+
+void
+glwthread_mutex_init (glwthread_mutex_t *mutex)
+{
+  InitializeCriticalSection (&mutex->lock);
+  mutex->guard.done = 1;
+}
+
+int
+glwthread_mutex_lock (glwthread_mutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    {
+      if (InterlockedIncrement (&mutex->guard.started) == 0)
+        /* This thread is the first one to need this mutex.  Initialize it.  */
+        glwthread_mutex_init (mutex);
+      else
+        {
+          /* Don't let mutex->guard.started grow and wrap around.  */
+          InterlockedDecrement (&mutex->guard.started);
+          /* Yield the CPU while waiting for another thread to finish
+             initializing this mutex.  */
+          while (!mutex->guard.done)
+            Sleep (0);
+        }
+    }
+  EnterCriticalSection (&mutex->lock);
+  return 0;
+}
+
+int
+glwthread_mutex_trylock (glwthread_mutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    {
+      if (InterlockedIncrement (&mutex->guard.started) == 0)
+        /* This thread is the first one to need this mutex.  Initialize it.  */
+        glwthread_mutex_init (mutex);
+      else
+        {
+          /* Don't let mutex->guard.started grow and wrap around.  */
+          InterlockedDecrement (&mutex->guard.started);
+          /* Let another thread finish initializing this mutex, and let it also
+             lock this mutex.  */
+          return EBUSY;
+        }
+    }
+  if (!TryEnterCriticalSection (&mutex->lock))
+    return EBUSY;
+  return 0;
+}
+
+int
+glwthread_mutex_unlock (glwthread_mutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    return EINVAL;
+  LeaveCriticalSection (&mutex->lock);
+  return 0;
+}
+
+int
+glwthread_mutex_destroy (glwthread_mutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    return EINVAL;
+  DeleteCriticalSection (&mutex->lock);
+  mutex->guard.done = 0;
+  return 0;
+}
diff --git a/lib/windows-mutex.h b/lib/windows-mutex.h
new file mode 100644
index 0000000..5364f92
--- /dev/null
+++ b/lib/windows-mutex.h
@@ -0,0 +1,51 @@
+/* Plain mutexes (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#ifndef _WINDOWS_MUTEX_H
+#define _WINDOWS_MUTEX_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+typedef struct
+        {
+          glwthread_initguard_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock;
+        }
+        glwthread_mutex_t;
+
+#define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_mutex_init (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_lock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_MUTEX_H */
diff --git a/lib/windows-once.c b/lib/windows-once.c
new file mode 100644
index 0000000..455c50e
--- /dev/null
+++ b/lib/windows-once.c
@@ -0,0 +1,62 @@
+/* Once-only control (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "windows-once.h"
+
+#include <stdlib.h>
+
+void
+glwthread_once (glwthread_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
+        {
+          /* Don't let once_control->started grow and wrap around.  */
+          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 ();
+            }
+        }
+    }
+}
diff --git a/lib/windows-once.h b/lib/windows-once.h
new file mode 100644
index 0000000..1599983
--- /dev/null
+++ b/lib/windows-once.h
@@ -0,0 +1,47 @@
+/* Once-only control (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#ifndef _WINDOWS_ONCE_H
+#define _WINDOWS_ONCE_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+typedef struct
+        {
+          volatile int inited;
+          volatile LONG started;
+          CRITICAL_SECTION lock;
+        }
+        glwthread_once_t;
+
+#define GLWTHREAD_ONCE_INIT { -1, -1 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_once (glwthread_once_t *once_control,
+                            void (*initfunction) (void));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_ONCE_H */
diff --git a/lib/windows-recmutex.c b/lib/windows-recmutex.c
new file mode 100644
index 0000000..7e6e446
--- /dev/null
+++ b/lib/windows-recmutex.c
@@ -0,0 +1,127 @@
+/* Plain recursive mutexes (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "windows-recmutex.h"
+
+#include <errno.h>
+
+void
+glwthread_recmutex_init (glwthread_recmutex_t *mutex)
+{
+  mutex->owner = 0;
+  mutex->depth = 0;
+  InitializeCriticalSection (&mutex->lock);
+  mutex->guard.done = 1;
+}
+
+int
+glwthread_recmutex_lock (glwthread_recmutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    {
+      if (InterlockedIncrement (&mutex->guard.started) == 0)
+        /* This thread is the first one to need this mutex.  Initialize it.  */
+        glwthread_recmutex_init (mutex);
+      else
+        {
+          /* Don't let mutex->guard.started grow and wrap around.  */
+          InterlockedDecrement (&mutex->guard.started);
+          /* Yield the CPU while waiting for another thread to finish
+             initializing this mutex.  */
+          while (!mutex->guard.done)
+            Sleep (0);
+        }
+    }
+  {
+    DWORD self = GetCurrentThreadId ();
+    if (mutex->owner != self)
+      {
+        EnterCriticalSection (&mutex->lock);
+        mutex->owner = self;
+      }
+    if (++(mutex->depth) == 0) /* wraparound? */
+      {
+        mutex->depth--;
+        return EAGAIN;
+      }
+  }
+  return 0;
+}
+
+int
+glwthread_recmutex_trylock (glwthread_recmutex_t *mutex)
+{
+  if (!mutex->guard.done)
+    {
+      if (InterlockedIncrement (&mutex->guard.started) == 0)
+        /* This thread is the first one to need this mutex.  Initialize it.  */
+        glwthread_recmutex_init (mutex);
+      else
+        {
+          /* Don't let mutex->guard.started grow and wrap around.  */
+          InterlockedDecrement (&mutex->guard.started);
+          /* Let another thread finish initializing this mutex, and let it also
+             lock this mutex.  */
+          return EBUSY;
+        }
+    }
+  {
+    DWORD self = GetCurrentThreadId ();
+    if (mutex->owner != self)
+      {
+        if (!TryEnterCriticalSection (&mutex->lock))
+          return EBUSY;
+        mutex->owner = self;
+      }
+    if (++(mutex->depth) == 0) /* wraparound? */
+      {
+        mutex->depth--;
+        return EAGAIN;
+      }
+  }
+  return 0;
+}
+
+int
+glwthread_recmutex_unlock (glwthread_recmutex_t *mutex)
+{
+  if (mutex->owner != GetCurrentThreadId ())
+    return EPERM;
+  if (mutex->depth == 0)
+    return EINVAL;
+  if (--(mutex->depth) == 0)
+    {
+      mutex->owner = 0;
+      LeaveCriticalSection (&mutex->lock);
+    }
+  return 0;
+}
+
+int
+glwthread_recmutex_destroy (glwthread_recmutex_t *mutex)
+{
+  if (mutex->owner != 0)
+    return EBUSY;
+  DeleteCriticalSection (&mutex->lock);
+  mutex->guard.done = 0;
+  return 0;
+}
diff --git a/lib/windows-recmutex.h b/lib/windows-recmutex.h
new file mode 100644
index 0000000..d143108
--- /dev/null
+++ b/lib/windows-recmutex.h
@@ -0,0 +1,57 @@
+/* Plain recursive mutexes (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#ifndef _WINDOWS_RECMUTEX_H
+#define _WINDOWS_RECMUTEX_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+/* 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
+        {
+          glwthread_initguard_t guard; /* protects the initialization */
+          DWORD owner;
+          unsigned long depth;
+          CRITICAL_SECTION lock;
+        }
+        glwthread_recmutex_t;
+
+#define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_RECMUTEX_H */
diff --git a/lib/windows-rwlock.c b/lib/windows-rwlock.c
new file mode 100644
index 0000000..9207d1b
--- /dev/null
+++ b/lib/windows-rwlock.c
@@ -0,0 +1,373 @@
+/* Read-write locks (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "windows-rwlock.h"
+
+#include <errno.h>
+#include <stdlib.h>
+
+/* In this file, the waitqueues are implemented as circular arrays.  */
+#define glwthread_waitqueue_t glwthread_carray_waitqueue_t
+
+static void
+glwthread_waitqueue_init (glwthread_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
+glwthread_waitqueue_add (glwthread_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
+glwthread_waitqueue_notify_first (glwthread_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
+glwthread_waitqueue_notify_all (glwthread_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
+glwthread_rwlock_init (glwthread_rwlock_t *lock)
+{
+  InitializeCriticalSection (&lock->lock);
+  glwthread_waitqueue_init (&lock->waiting_readers);
+  glwthread_waitqueue_init (&lock->waiting_writers);
+  lock->runcount = 0;
+  lock->guard.done = 1;
+}
+
+int
+glwthread_rwlock_rdlock (glwthread_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.  */
+        glwthread_rwlock_init (lock);
+      else
+        {
+          /* Don't let lock->guard.started grow and wrap around.  */
+          InterlockedDecrement (&lock->guard.started);
+          /* 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, and whether no writer is waiting.  The latter
+     condition is because POSIX recommends that "write locks shall take
+     precedence over read locks", to avoid "writer starvation".  */
+  if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+         waiting_readers.  */
+      HANDLE event = glwthread_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
+glwthread_rwlock_wrlock (glwthread_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.  */
+        glwthread_rwlock_init (lock);
+      else
+        {
+          /* Don't let lock->guard.started grow and wrap around.  */
+          InterlockedDecrement (&lock->guard.started);
+          /* 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 = glwthread_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
+glwthread_rwlock_tryrdlock (glwthread_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.  */
+        glwthread_rwlock_init (lock);
+      else
+        {
+          /* Don't let lock->guard.started grow and wrap around.  */
+          InterlockedDecrement (&lock->guard.started);
+          /* Yield the CPU while waiting for another thread to finish
+             initializing this lock.  */
+          while (!lock->guard.done)
+            Sleep (0);
+        }
+    }
+  /* It's OK to wait for this critical section, because it is never taken for a
+     long time.  */
+  EnterCriticalSection (&lock->lock);
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow, and whether no writer is waiting.  The latter
+     condition is because POSIX recommends that "write locks shall take
+     precedence over read locks", to avoid "writer starvation".  */
+  if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0))
+    {
+      /* This thread would have to wait for a while.  Return instead.  */
+      LeaveCriticalSection (&lock->lock);
+      return EBUSY;
+    }
+  lock->runcount++;
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glwthread_rwlock_trywrlock (glwthread_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.  */
+        glwthread_rwlock_init (lock);
+      else
+        {
+          /* Don't let lock->guard.started grow and wrap around.  */
+          InterlockedDecrement (&lock->guard.started);
+          /* Yield the CPU while waiting for another thread to finish
+             initializing this lock.  */
+          while (!lock->guard.done)
+            Sleep (0);
+        }
+    }
+  /* It's OK to wait for this critical section, because it is never taken for a
+     long time.  */
+  EnterCriticalSection (&lock->lock);
+  /* Test whether no readers or writers are currently running.  */
+  if (!(lock->runcount == 0))
+    {
+      /* This thread would have to wait for a while.  Return instead.  */
+      LeaveCriticalSection (&lock->lock);
+      return EBUSY;
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glwthread_rwlock_unlock (glwthread_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--;
+          glwthread_waitqueue_notify_first (&lock->waiting_writers);
+        }
+      else
+        {
+          /* Wake up all waiting readers.  */
+          lock->runcount += lock->waiting_readers.count;
+          glwthread_waitqueue_notify_all (&lock->waiting_readers);
+        }
+    }
+  LeaveCriticalSection (&lock->lock);
+  return 0;
+}
+
+int
+glwthread_rwlock_destroy (glwthread_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;
+}
diff --git a/lib/windows-rwlock.h b/lib/windows-rwlock.h
new file mode 100644
index 0000000..9002040
--- /dev/null
+++ b/lib/windows-rwlock.h
@@ -0,0 +1,68 @@
+/* Read-write locks (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+   Based on GCC's gthr-win32.h.  */
+
+#ifndef _WINDOWS_RWLOCK_H
+#define _WINDOWS_RWLOCK_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+/* 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 */
+        }
+        glwthread_carray_waitqueue_t;
+typedef struct
+        {
+          glwthread_initguard_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock; /* protects the remaining fields */
+          glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */
+          glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */
+          int runcount; /* number of readers running, or -1 when a writer runs */
+        }
+        glwthread_rwlock_t;
+
+#define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_rwlock_init (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_RWLOCK_H */
diff --git a/lib/windows-tls.c b/lib/windows-tls.c
new file mode 100644
index 0000000..2e1b702
--- /dev/null
+++ b/lib/windows-tls.c
@@ -0,0 +1,339 @@
+/* Thread-local storage (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "windows-tls.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "windows-once.h"
+
+void *
+glwthread_tls_get (glwthread_tls_key_t key)
+{
+  return TlsGetValue (key);
+}
+
+int
+glwthread_tls_set (glwthread_tls_key_t key, void *value)
+{
+  if (!TlsSetValue (key, value))
+    return EINVAL;
+  return 0;
+}
+
+/* The following variables keep track of TLS keys with non-NULL destructor.  */
+
+static glwthread_once_t dtor_table_init_once = GLWTHREAD_ONCE_INIT;
+
+static CRITICAL_SECTION dtor_table_lock;
+
+struct dtor { glwthread_tls_key_t key; void (*destructor) (void *); };
+
+/* The table of dtors.  */
+static struct dtor *dtor_table;
+/* Number of active entries in the dtor_table.  */
+static unsigned int dtors_count;
+/* Valid indices into dtor_table are 0..dtors_used-1.  */
+static unsigned int dtors_used;
+/* Allocation size of dtor_table.  */
+static unsigned int dtors_allocated;
+/* Invariant: 0 <= dtors_count <= dtors_used <= dtors_allocated.  */
+
+/* Number of threads that are currently processing destructors.  */
+static unsigned int dtor_processing_threads;
+
+static void
+dtor_table_initialize (void)
+{
+  InitializeCriticalSection (&dtor_table_lock);
+  /* The other variables are already initialized to NULL or 0, respectively.  */
+}
+
+static void
+dtor_table_ensure_initialized (void)
+{
+  glwthread_once (&dtor_table_init_once, dtor_table_initialize);
+}
+
+/* Shrinks dtors_used down to dtors_count, by replacing inactive entries
+   with active ones.  */
+static void
+dtor_table_shrink_used (void)
+{
+  unsigned int i = 0;
+  unsigned int j = dtors_used;
+
+  for (;;)
+    {
+      BOOL i_found = FALSE;
+      BOOL j_found = FALSE;
+      /* Find the next inactive entry, from the left.  */
+      for (; i < dtors_count;)
+        {
+          if (dtor_table[i].destructor == NULL)
+            {
+              i_found = TRUE;
+              break;
+            }
+          i++;
+        }
+
+      /* Find the next active entry, from the right.  */
+      for (; j > dtors_count;)
+        {
+          j--;
+          if (dtor_table[j].destructor != NULL)
+            {
+              j_found = TRUE;
+              break;
+            }
+        }
+
+      if (i_found != j_found)
+        /* dtors_count was apparently wrong.  */
+        abort ();
+
+      if (!i_found)
+        break;
+
+      /* i_found and j_found are TRUE.  Swap the two entries.  */
+      dtor_table[i] = dtor_table[j];
+
+      i++;
+    }
+
+  dtors_used = dtors_count;
+}
+
+void
+glwthread_tls_process_destructors (void)
+{
+  unsigned int repeat;
+
+  dtor_table_ensure_initialized ();
+
+  EnterCriticalSection (&dtor_table_lock);
+  if (dtor_processing_threads == 0)
+    {
+      /* Now it's the appropriate time for shrinking dtors_used.  */
+      if (dtors_used > dtors_count)
+        dtor_table_shrink_used ();
+    }
+  dtor_processing_threads++;
+
+  for (repeat = GLWTHREAD_DESTRUCTOR_ITERATIONS; repeat > 0; repeat--)
+    {
+      unsigned int destructors_run = 0;
+
+      /* Iterate across dtor_table.  We don't need to make a copy of dtor_table,
+         because
+           * When another thread calls glwthread_tls_key_create with a non-NULL
+             destructor argument, this will possibly reallocate the dtor_table
+             array and increase dtors_allocated as well as dtors_used and
+             dtors_count, but it will not change dtors_used nor the contents of
+             the first dtors_used entries of dtor_table.
+           * When another thread calls glwthread_tls_key_delete, this will
+             possibly set some 'destructor' member to NULL, thus marking an
+             entry as inactive, but it will not otherwise change dtors_used nor
+             the contents of the first dtors_used entries of dtor_table.  */
+      unsigned int i_limit = dtors_used;
+      unsigned int i;
+
+      for (i = 0; i < i_limit; i++)
+        {
+          struct dtor current = dtor_table[i];
+          if (current.destructor != NULL)
+            {
+              /* The current dtor has not been deleted yet.  */
+              void *current_value = glwthread_tls_get (current.key);
+              if (current_value != NULL)
+                {
+                  /* The current value is non-NULL.  Run the destructor.  */
+                  glwthread_tls_set (current.key, NULL);
+                  LeaveCriticalSection (&dtor_table_lock);
+                  current.destructor (current_value);
+                  EnterCriticalSection (&dtor_table_lock);
+                  destructors_run++;
+                }
+            }
+        }
+
+      /* When all TLS values were already NULL, no further iterations are
+         needed.  */
+      if (destructors_run == 0)
+        break;
+    }
+
+  dtor_processing_threads--;
+  LeaveCriticalSection (&dtor_table_lock);
+}
+
+int
+glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *))
+{
+  if (destructor != NULL)
+    {
+      dtor_table_ensure_initialized ();
+
+      EnterCriticalSection (&dtor_table_lock);
+      if (dtor_processing_threads == 0)
+        {
+          /* Now it's the appropriate time for shrinking dtors_used.  */
+          if (dtors_used > dtors_count)
+            dtor_table_shrink_used ();
+        }
+
+      while (dtors_used == dtors_allocated)
+        {
+          /* Need to grow the dtor_table.  */
+          unsigned int new_allocated = 2 * dtors_allocated + 1;
+          if (new_allocated < 7)
+            new_allocated = 7;
+          if (new_allocated <= dtors_allocated) /* overflow? */
+            new_allocated = UINT_MAX;
+
+          LeaveCriticalSection (&dtor_table_lock);
+          {
+            struct dtor *new_table =
+              (struct dtor *) malloc (new_allocated * sizeof (struct dtor));
+            if (new_table == NULL)
+              return ENOMEM;
+            EnterCriticalSection (&dtor_table_lock);
+            /* Attention! dtors_used, dtors_allocated may have changed!  */
+            if (dtors_used < new_allocated)
+              {
+                if (dtors_allocated < new_allocated)
+                  {
+                    /* The new_table is useful.  */
+                    memcpy (new_table, dtor_table,
+                            dtors_used * sizeof (struct dtor));
+                    dtor_table = new_table;
+                    dtors_allocated = new_allocated;
+                  }
+                else
+                  {
+                    /* The new_table is not useful, since another thread
+                       meanwhile allocated a drop_table that is at least
+                       as large.  */
+                    free (new_table);
+                  }
+                break;
+              }
+            /* The new_table is not useful, since other threads increased
+               dtors_used.  Free it any retry.  */
+            free (new_table);
+          }
+        }
+      /* Here dtors_used < dtors_allocated.  */
+      {
+        /* Allocate a new key.  */
+        glwthread_tls_key_t key = TlsAlloc ();
+        if (key == (DWORD)-1)
+          {
+            LeaveCriticalSection (&dtor_table_lock);
+            return EAGAIN;
+          }
+        /* Store the new dtor in the dtor_table, after all used entries.
+           Do not overwrite inactive entries with indices < dtors_used, in order
+           not to disturb glwthread_tls_process_destructors invocations that may
+           be executing in other threads.  */
+        dtor_table[dtors_used].key = key;
+        dtor_table[dtors_used].destructor = destructor;
+        dtors_used++;
+        dtors_count++;
+        LeaveCriticalSection (&dtor_table_lock);
+        *keyp = key;
+      }
+    }
+  else
+    {
+      /* Allocate a new key.  */
+      glwthread_tls_key_t key = TlsAlloc ();
+      if (key == (DWORD)-1)
+        return EAGAIN;
+      *keyp = key;
+    }
+  return 0;
+}
+
+int
+glwthread_tls_key_delete (glwthread_tls_key_t key)
+{
+  /* Should the destructor be called for all threads that are currently running?
+     Probably not, because
+       - ISO C does not specify when the destructor is to be invoked at all.
+       - In POSIX, the destructor functions specified with pthread_key_create()
+         are invoked at thread exit.
+       - It would be hard to implement, because there are no primitives for
+         accessing thread-specific values from a different thread.  */
+  dtor_table_ensure_initialized ();
+
+  EnterCriticalSection (&dtor_table_lock);
+  if (dtor_processing_threads == 0)
+    {
+      /* Now it's the appropriate time for shrinking dtors_used.  */
+      if (dtors_used > dtors_count)
+        dtor_table_shrink_used ();
+      /* Here dtors_used == dtors_count.  */
+
+      /* Find the key in dtor_table.  */
+      {
+        unsigned int i_limit = dtors_used;
+        unsigned int i;
+
+        for (i = 0; i < i_limit; i++)
+          if (dtor_table[i].key == key)
+            {
+              if (i < dtors_used - 1)
+                /* Swap the entries i and dtors_used - 1.  */
+                dtor_table[i] = dtor_table[dtors_used - 1];
+              dtors_count = dtors_used = dtors_used - 1;
+              break;
+            }
+      }
+    }
+  else
+    {
+      /* Be careful not to disturb the glwthread_tls_process_destructors
+         invocations that are executing in other threads.  */
+      unsigned int i_limit = dtors_used;
+      unsigned int i;
+
+      for (i = 0; i < i_limit; i++)
+        if (dtor_table[i].destructor != NULL /* skip inactive entries */
+            && dtor_table[i].key == key)
+          {
+            /* Mark this entry as inactive.  */
+            dtor_table[i].destructor = NULL;
+            dtors_count = dtors_count - 1;
+            break;
+          }
+    }
+  LeaveCriticalSection (&dtor_table_lock);
+  /* Now we have ensured that glwthread_tls_process_destructors will no longer
+     use this key.  */
+
+  if (!TlsFree (key))
+    return EINVAL;
+  return 0;
+}
diff --git a/lib/windows-tls.h b/lib/windows-tls.h
new file mode 100644
index 0000000..3bccd2e
--- /dev/null
+++ b/lib/windows-tls.h
@@ -0,0 +1,42 @@
+/* Thread-local storage (native Windows implementation).
+   Copyright (C) 2005-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.  */
+
+#ifndef _WINDOWS_TLS_H
+#define _WINDOWS_TLS_H
+
+#define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#include <windows.h>
+
+typedef DWORD glwthread_tls_key_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *));
+extern void *glwthread_tls_get (glwthread_tls_key_t key);
+extern int glwthread_tls_set (glwthread_tls_key_t key, void *value);
+extern int glwthread_tls_key_delete (glwthread_tls_key_t key);
+extern void glwthread_tls_process_destructors (void);
+#define GLWTHREAD_DESTRUCTOR_ITERATIONS 4
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_TLS_H */
diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c
index e85d6df..295f8d8 100644
--- a/lib/xalloc-die.c
+++ b/lib/xalloc-die.c
@@ -1,6 +1,6 @@
 /* Report a memory allocation failure and exit.
 
-   Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2012 Free Software
+   Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2019 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -14,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index ad777d8..e3068c8 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -1,6 +1,6 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2019 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
@@ -13,26 +13,48 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef XALLOC_OVERSIZED_H_
-# define XALLOC_OVERSIZED_H_
+#define XALLOC_OVERSIZED_H_
 
-# include <stddef.h>
+#include <stddef.h>
+#include <stdint.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.
-
+/* True if N * S would overflow in a size_t calculation,
+   or would generate a value larger than PTRDIFF_MAX.
+   This expands to a constant expression if N and S are both constants.
    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.  */
+   calculations, so the conservative size_t-based dividend to use here
+   is SIZE_MAX - 1.  */
+#define __xalloc_oversized(n, s) \
+  ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n))
+
+#if PTRDIFF_MAX < SIZE_MAX
+typedef ptrdiff_t __xalloc_count_type;
+#else
+typedef size_t __xalloc_count_type;
+#endif
+
+/* Return 1 if an array of N objects, each of size S, cannot exist
+   reliably due to size or ptrdiff_t 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.  */
+
+#if 7 <= __GNUC__
 # define xalloc_oversized(n, s) \
-    ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
+   __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1)
+#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__
+# define xalloc_oversized(n, s) \
+   (__builtin_constant_p (n) && __builtin_constant_p (s) \
+    ? __xalloc_oversized (n, s) \
+    : ({ __xalloc_count_type __xalloc_count; \
+         __builtin_mul_overflow (n, s, &__xalloc_count); }))
+
+/* Other compilers use integer division; this may be slower but is
+   more portable.  */
+#else
+# define xalloc_oversized(n, s) __xalloc_oversized (n, s)
+#endif
 
 #endif /* !XALLOC_OVERSIZED_H_ */
diff --git a/lib/xalloc.h b/lib/xalloc.h
index acf30a1..fc7e86b 100644
--- a/lib/xalloc.h
+++ b/lib/xalloc.h
@@ -1,6 +1,6 @@
 /* xalloc.h -- malloc with out-of-memory checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2019 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
@@ -13,15 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef XALLOC_H_
 #define XALLOC_H_
 
 #include <stddef.h>
+#include <stdint.h>
 
 #include "xalloc-oversized.h"
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef XALLOC_INLINE
 # define XALLOC_INLINE _GL_INLINE
@@ -32,13 +36,8 @@
 #endif
 
 
-#if __GNUC__ >= 3
-# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-#else
-# define _GL_ATTRIBUTE_MALLOC
-#endif
-
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+#if ! defined __clang__ && \
+    (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
 # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
 #else
 # define _GL_ATTRIBUTE_ALLOC_SIZE(args)
@@ -61,7 +60,7 @@
       _GL_ATTRIBUTE_ALLOC_SIZE ((2));
 void *x2realloc (void *p, size_t *pn);
 void *xmemdup (void const *p, size_t s)
-      _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2));
+      _GL_ATTRIBUTE_ALLOC_SIZE ((2));
 char *xstrdup (char const *str)
       _GL_ATTRIBUTE_MALLOC;
 
@@ -119,10 +118,9 @@
 
 /* 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.
+   each of S bytes.  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
@@ -190,16 +188,19 @@
           n = DEFAULT_MXFAST / s;
           n += !n;
         }
+      if (xalloc_oversized (n, s))
+        xalloc_die ();
     }
   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)
+      /* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0.
+         Check for overflow, so that N * S stays in both ptrdiff_t and
+         size_t range.  The check may be slightly conservative, but an
+         exact check isn't worth the trouble.  */
+      if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s
+          <= n)
         xalloc_die ();
-      n += (n + 1) / 2;
+      n += n / 2 + 1;
     }
 
   *pn = n;
@@ -256,5 +257,6 @@
 
 #endif
 
+_GL_INLINE_HEADER_END
 
 #endif /* !XALLOC_H_ */
diff --git a/lib/xconcat-filename.c b/lib/xconcat-filename.c
new file mode 100644
index 0000000..ad2d5f6
--- /dev/null
+++ b/lib/xconcat-filename.c
@@ -0,0 +1,41 @@
+/* Construct a full filename from a directory and a relative filename.
+   Copyright (C) 2001-2004, 2006-2019 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 any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <haible@clisp.cons.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "concat-filename.h"
+
+#include "xalloc.h"
+
+/* Concatenate a directory filename, a relative filename and an optional
+   suffix.  The directory may end with the directory separator.  The second
+   argument may not start with the directory separator (it is relative).
+   Return a freshly allocated filename.  */
+char *
+xconcatenated_filename (const char *directory, const char *filename,
+                        const char *suffix)
+{
+  char *result;
+
+  result = concatenated_filename (directory, filename, suffix);
+  if (result == NULL)
+    xalloc_die ();
+
+  return result;
+}
diff --git a/lib/xhash.c b/lib/xhash.c
new file mode 100644
index 0000000..9b2bcdb
--- /dev/null
+++ b/lib/xhash.c
@@ -0,0 +1,38 @@
+/* hash - hashing table processing.
+
+   Copyright (C) 2019 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 <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "hash.h"
+
+#include "xalloc.h"
+
+/* Same as hash_initialize, but invokes xalloc_die on memory
+   exhaustion.  */
+
+Hash_table *
+hash_xinitialize (size_t candidate, const Hash_tuning *tuning,
+                  Hash_hasher hasher, Hash_comparator comparator,
+                  Hash_data_freer data_freer)
+{
+  Hash_table *res =
+    hash_initialize (candidate, tuning, hasher, comparator, data_freer);
+  if (!res)
+    xalloc_die ();
+  return res;
+}
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
index 9755985..cbe9a4f 100644
--- a/lib/xmalloc.c
+++ b/lib/xmalloc.c
@@ -1,6 +1,6 @@
 /* xmalloc.c -- malloc with out of memory checking
 
-   Copyright (C) 1990-2000, 2002-2006, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2002-2006, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -93,11 +93,11 @@
 xcalloc (size_t n, size_t s)
 {
   void *p;
-  /* Test for overflow, since some calloc implementations don't have
-     proper overflow checks.  But omit overflow and size-zero tests if
-     HAVE_GNU_CALLOC, since GNU calloc catches overflow and never
-     returns NULL if successful.  */
-  if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s))
+  /* Test for overflow, since objects with size greater than
+     PTRDIFF_MAX cause pointer subtraction to go awry.  Omit size-zero
+     tests if HAVE_GNU_CALLOC, since GNU calloc never returns NULL if
+     successful.  */
+  if (xalloc_oversized (n, s)
       || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0)))
     xalloc_die ();
   return p;
diff --git a/lib/xmemdup0.c b/lib/xmemdup0.c
index 8a80563..57c1b59 100644
--- a/lib/xmemdup0.c
+++ b/lib/xmemdup0.c
@@ -1,6 +1,6 @@
 /* xmemdup0.c -- copy a block of arbitrary bytes, plus a trailing NUL
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
@@ -38,7 +38,8 @@
 xmemdup0 (void const *p, size_t s)
 {
   char *result = xcharalloc (s + 1);
-  memcpy (result, p, s);
+  if (s > 0)
+    memcpy (result, p, s);
   result[s] = 0;
   return result;
 }
diff --git a/lib/xmemdup0.h b/lib/xmemdup0.h
index 1883b4d..768f0b2 100644
--- a/lib/xmemdup0.h
+++ b/lib/xmemdup0.h
@@ -1,6 +1,6 @@
 /* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef XMEMDUP_H_
 # define XMEMDUP_H_
@@ -25,13 +25,6 @@
 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
diff --git a/lib/xreadlink.c b/lib/xreadlink.c
new file mode 100644
index 0000000..59cfde9
--- /dev/null
+++ b/lib/xreadlink.c
@@ -0,0 +1,44 @@
+/* xreadlink.c -- readlink wrapper to return the link name in malloc'd storage
+
+   Copyright (C) 2001, 2003-2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering <jim@meyering.net>
+   and Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "xreadlink.h"
+
+#include <errno.h>
+
+#include "areadlink.h"
+#include "xalloc.h"
+
+/* Call readlink to get the symbolic link value of FILENAME.
+   Return a pointer to that NUL-terminated string in malloc'd storage.
+   If readlink fails, return NULL and set errno.
+   If realloc fails, or if the link value is longer than SIZE_MAX :-),
+   give a diagnostic and exit.  */
+
+char *
+xreadlink (char const *filename)
+{
+  char *result = areadlink (filename);
+  if (result == NULL && errno == ENOMEM)
+    xalloc_die ();
+  return result;
+}
diff --git a/lib/xreadlink.h b/lib/xreadlink.h
new file mode 100644
index 0000000..583205b
--- /dev/null
+++ b/lib/xreadlink.h
@@ -0,0 +1,25 @@
+/* Reading symbolic links without size limitation.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering <jim@meyering.net>  */
+
+extern char *xreadlink (char const *filename);
+
+#if GNULIB_XREADLINKAT
+extern char *xreadlinkat (int fd, char const *filename);
+#endif
diff --git a/lib/xsize.h b/lib/xsize.h
index a2942b9..ecfd478 100644
--- a/lib/xsize.h
+++ b/lib/xsize.h
@@ -1,6 +1,6 @@
 /* xsize.h -- Checked size_t computations.
 
-   Copyright (C) 2003, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2008-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
 
 #ifndef _XSIZE_H
 #define _XSIZE_H
@@ -27,6 +27,9 @@
 # include <stdint.h>
 #endif
 
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
 _GL_INLINE_HEADER_BEGIN
 #ifndef XSIZE_INLINE
 # define XSIZE_INLINE _GL_INLINE
diff --git a/lib/xstrndup.c b/lib/xstrndup.c
index 40ffdfe..a973829 100644
--- a/lib/xstrndup.c
+++ b/lib/xstrndup.c
@@ -1,6 +1,6 @@
 /* Duplicate a bounded initial segment of a string, with out-of-memory
    checking.
-   Copyright (C) 2003, 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2009-2019 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
@@ -13,7 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/lib/xstrndup.h b/lib/xstrndup.h
index 765e9cb..360ccfd 100644
--- a/lib/xstrndup.h
+++ b/lib/xstrndup.h
@@ -1,6 +1,6 @@
 /* Duplicate a bounded initial segment of a string, with out-of-memory
    checking.
-   Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2009-2019 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
@@ -13,11 +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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
 
 /* Return a newly allocated copy of at most N bytes of STRING.
    In other words, return a copy of the initial segment of length N of
    STRING.  */
-extern char *xstrndup (const char *string, size_t n);
+extern char *xstrndup (const char *string, size_t n) _GL_ATTRIBUTE_MALLOC;
diff --git a/lib/xtime.c b/lib/xtime.c
new file mode 100644
index 0000000..e608f69
--- /dev/null
+++ b/lib/xtime.c
@@ -0,0 +1,3 @@
+#include <config.h>
+#define XTIME_INLINE _GL_EXTERN_INLINE
+#include "xtime.h"
diff --git a/lib/xtime.h b/lib/xtime.h
new file mode 100644
index 0000000..9edd123
--- /dev/null
+++ b/lib/xtime.h
@@ -0,0 +1,105 @@
+/* xtime -- extended-resolution integer timestamps
+
+   Copyright (C) 2005-2006, 2009-2019 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 <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef XTIME_H_
+#define XTIME_H_ 1
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef XTIME_INLINE
+# define XTIME_INLINE _GL_INLINE
+#endif
+
+/* xtime_t is a signed type used for timestamps.  It is an integer
+   type that is a count of nanoseconds -- except for obsolescent hosts
+   without sufficiently-wide integers, where it is a count of
+   seconds.  */
+#if HAVE_LONG_LONG_INT
+typedef long long int xtime_t;
+# define XTIME_PRECISION 1000000000
+#else
+# include <limits.h>
+typedef long int xtime_t;
+# if LONG_MAX >> 31 >> 31 == 0
+#  define XTIME_PRECISION 1
+# else
+#  define XTIME_PRECISION 1000000000
+# endif
+#endif
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* Return an extended time value that contains S seconds and NS
+   nanoseconds.  */
+XTIME_INLINE xtime_t
+xtime_make (xtime_t s, long int ns)
+{
+  const long int giga = 1000 * 1000 * 1000;
+  s += ns / giga;
+  ns %= giga;
+  if (XTIME_PRECISION == 1)
+    return s;
+  else
+    return XTIME_PRECISION * s + ns;
+}
+
+/* Return the number of seconds in T, which must be nonnegative.  */
+XTIME_INLINE xtime_t
+xtime_nonnegative_sec (xtime_t t)
+{
+  return t / XTIME_PRECISION;
+}
+
+/* Return the number of seconds in T.  */
+XTIME_INLINE xtime_t
+xtime_sec (xtime_t t)
+{
+  return (XTIME_PRECISION == 1
+          ? t
+          : t < 0
+          ? (t + XTIME_PRECISION - 1) / XTIME_PRECISION - 1
+          : xtime_nonnegative_sec (t));
+}
+
+/* Return the number of nanoseconds in T, which must be nonnegative.  */
+XTIME_INLINE long int
+xtime_nonnegative_nsec (xtime_t t)
+{
+  return t % XTIME_PRECISION;
+}
+
+/* Return the number of nanoseconds in T.  */
+XTIME_INLINE long int
+xtime_nsec (xtime_t t)
+{
+  long int ns = t % XTIME_PRECISION;
+  if (ns < 0)
+    ns += XTIME_PRECISION;
+  return ns;
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/yyerror.c b/lib/yyerror.c
index 332e91e..4bd9e4b 100644
--- a/lib/yyerror.c
+++ b/lib/yyerror.c
@@ -1,6 +1,7 @@
 /* Yacc library error-printing function.
 
-   Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/linux-lib/alloca.h b/linux-lib/alloca.h
deleted file mode 100644
index a0d618b..0000000
--- a/linux-lib/alloca.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* 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
deleted file mode 100644
index f0dbac7..0000000
--- a/linux-lib/arg-nonnull.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* _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
deleted file mode 100644
index 3fd6322..0000000
--- a/linux-lib/c++defs.h
+++ /dev/null
@@ -1,255 +0,0 @@
-#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
deleted file mode 100644
index d5456d5..0000000
--- a/linux-lib/config.h
+++ /dev/null
@@ -1,2268 +0,0 @@
-/* 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
deleted file mode 100644
index 2a32931..0000000
--- a/linux-lib/configmake.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* 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
deleted file mode 100644
index 9519eed..0000000
--- a/linux-lib/fcntl.h
+++ /dev/null
@@ -1,659 +0,0 @@
-/* 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
deleted file mode 100644
index 5a53dba..0000000
--- a/linux-lib/inttypes.h
+++ /dev/null
@@ -1,1442 +0,0 @@
-/* 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
deleted file mode 100644
index dd1ed98..0000000
--- a/linux-lib/math.h
+++ /dev/null
@@ -1,2587 +0,0 @@
-/* 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
deleted file mode 100644
index 0a15cf3..0000000
--- a/linux-lib/signal.h
+++ /dev/null
@@ -1,759 +0,0 @@
-/* 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
deleted file mode 100644
index 9182ed2..0000000
--- a/linux-lib/spawn.h
+++ /dev/null
@@ -1,1193 +0,0 @@
-/* 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
deleted file mode 100644
index f58f733..0000000
--- a/linux-lib/stdio.h
+++ /dev/null
@@ -1,1657 +0,0 @@
-/* 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
deleted file mode 100644
index 12c9ac1..0000000
--- a/linux-lib/stdlib.h
+++ /dev/null
@@ -1,1259 +0,0 @@
-/* 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
deleted file mode 100644
index eb868ed..0000000
--- a/linux-lib/string.h
+++ /dev/null
@@ -1,1341 +0,0 @@
-/* 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
deleted file mode 100644
index f0ae983..0000000
--- a/linux-lib/sys/stat.h
+++ /dev/null
@@ -1,1040 +0,0 @@
-/* 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
deleted file mode 100644
index 5051902..0000000
--- a/linux-lib/sys/types.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 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
deleted file mode 100644
index c6c63f3..0000000
--- a/linux-lib/sys/wait.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* 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
deleted file mode 100644
index 9bb0188..0000000
--- a/linux-lib/time.h
+++ /dev/null
@@ -1,560 +0,0 @@
-/* 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
deleted file mode 100644
index fabffd6..0000000
--- a/linux-lib/unistd.h
+++ /dev/null
@@ -1,1853 +0,0 @@
-/* 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
deleted file mode 100644
index b85b07a..0000000
--- a/linux-lib/unitypes.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 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
deleted file mode 100644
index c6466b2..0000000
--- a/linux-lib/uniwidth.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 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
deleted file mode 100644
index 9aebda4..0000000
--- a/linux-lib/warn-on-use.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#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
deleted file mode 100644
index 54631a3..0000000
--- a/linux-lib/wchar.h
+++ /dev/null
@@ -1,1340 +0,0 @@
-/* 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
deleted file mode 100644
index 196e4ea..0000000
--- a/linux-lib/wctype.h
+++ /dev/null
@@ -1,806 +0,0 @@
-/* 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
index d978cb8..e3e0fb6 100644
--- a/m4/00gnulib.m4
+++ b/m4/00gnulib.m4
@@ -1,12 +1,28 @@
-# 00gnulib.m4 serial 2
-dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# 00gnulib.m4 serial 3
+dnl Copyright (C) 2009-2019 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.
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and
+dnl m4_divert semantics.
+
+# Until autoconf 2.63, handling of the diversion stack required m4_init
+# to be called first; but this does not happen with aclocal.  Wrapping
+# the entire execution in another layer of the diversion stack fixes this.
+# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4
+# for whether it was FIFO or LIFO; in order to properly balance with
+# m4_init, we need to undo our push just before anything wrapped within
+# the m4_init body.  The way to ensure this is to wrap both sides of
+# m4_init with a one-shot macro that does the pop at the right time.
+m4_ifndef([_m4_divert_diversion],
+[m4_divert_push([KILL])
+m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])])
+m4_define([m4_init],
+  [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])])
+
 
 # AC_DEFUN_ONCE([NAME], VALUE)
 # ----------------------------
diff --git a/m4/__inline.m4 b/m4/__inline.m4
new file mode 100644
index 0000000..e1aa310
--- /dev/null
+++ b/m4/__inline.m4
@@ -0,0 +1,22 @@
+# Test for __inline keyword
+dnl Copyright 2017-2019 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___INLINE],
+[
+  AC_CACHE_CHECK([whether the compiler supports the __inline keyword],
+    [gl_cv_c___inline],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[typedef int foo_t;
+           static __inline foo_t foo (void) { return 0; }]],
+         [[return foo ();]])],
+       [gl_cv_c___inline=yes],
+       [gl_cv_c___inline=no])])
+  if test $gl_cv_c___inline = yes; then
+    AC_DEFINE([HAVE___INLINE], [1],
+      [Define to 1 if the compiler supports the keyword '__inline'.])
+  fi
+])
diff --git a/m4/absolute-header.m4 b/m4/absolute-header.m4
new file mode 100644
index 0000000..a8f2cba
--- /dev/null
+++ b/m4/absolute-header.m4
@@ -0,0 +1,102 @@
+# absolute-header.m4 serial 16
+dnl Copyright (C) 2006-2019 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.
+
+# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
+# ---------------------------------------
+# Find the absolute name of a header file, testing first if the header exists.
+# If the header were sys/inttypes.h, this macro would define
+# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
+# in config.h
+# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
+# 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.
+AC_DEFUN([gl_ABSOLUTE_HEADER],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PREPROC_REQUIRE()dnl
+dnl FIXME: gl_absolute_header and ac_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_absolute_header],
+                  [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
+  AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+    m4_defn([gl_absolute_header]),
+    [AS_VAR_PUSHDEF([ac_header_exists],
+                    [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
+    AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
+    if test AS_VAR_GET(ac_header_exists) = yes; then
+      gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
+    fi
+    AS_VAR_POPDEF([ac_header_exists])dnl
+    ])dnl
+  AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
+                     ["AS_VAR_GET(gl_absolute_header)"],
+                     [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
+  AS_VAR_POPDEF([gl_absolute_header])dnl
+])dnl
+])# gl_ABSOLUTE_HEADER
+
+# gl_ABSOLUTE_HEADER_ONE(HEADER)
+# ------------------------------
+# Like gl_ABSOLUTE_HEADER, except that:
+#   - it assumes that the header exists,
+#   - it uses the current CPPFLAGS,
+#   - it does not cache the result,
+#   - it is silent.
+AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
+  dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+  dnl that contain only a #include of other header files and no
+  dnl non-comment tokens of their own. This leads to a failure to
+  dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+  dnl and others. The workaround is to force preservation of comments
+  dnl through option -C. This ensures all necessary #line directives
+  dnl 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'
+  gl_header_literal_regex=`echo '$1' \
+                           | 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
+    }'
+changequote([,])
+  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_cv_absolute_]AS_TR_SH([[$1]]),
+[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+  sed -n "$gl_absolute_header_sed"`])
+])
diff --git a/m4/alloca.m4 b/m4/alloca.m4
index 656924b..29bd289 100644
--- a/m4/alloca.m4
+++ b/m4/alloca.m4
@@ -1,5 +1,5 @@
-# alloca.m4 serial 14
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2012 Free Software Foundation,
+# alloca.m4 serial 15
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2019 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,
@@ -37,6 +37,13 @@
   fi
   AC_SUBST([ALLOCA_H])
   AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
+
+  if test $ac_cv_working_alloca_h = yes; then
+    HAVE_ALLOCA_H=1
+  else
+    HAVE_ALLOCA_H=0
+  fi
+  AC_SUBST([HAVE_ALLOCA_H])
 ])
 
 # Prerequisites of lib/alloca.c.
@@ -44,12 +51,12 @@
 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>.
+# See <https://lists.gnu.org/r/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
+# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497
 
 # _AC_LIBOBJ_ALLOCA
 # -----------------
diff --git a/m4/asm-underscore.m4 b/m4/asm-underscore.m4
index 478aa03..0f6bee4 100644
--- a/m4/asm-underscore.m4
+++ b/m4/asm-underscore.m4
@@ -1,5 +1,5 @@
-# asm-underscore.m4 serial 2
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+# asm-underscore.m4 serial 4
+dnl Copyright (C) 2010-2019 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.
@@ -14,6 +14,7 @@
 
 AC_DEFUN([gl_ASM_SYMBOL_PREFIX],
 [
+  AC_REQUIRE([AC_PROG_EGREP])
   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.
@@ -29,7 +30,7 @@
 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
+     if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then
        gl_cv_prog_as_underscore=yes
      else
        gl_cv_prog_as_underscore=no
diff --git a/m4/assert.m4 b/m4/assert.m4
index b748e5e..15048a7 100644
--- a/m4/assert.m4
+++ b/m4/assert.m4
@@ -1,6 +1,6 @@
 #serial 7
 
-# Copyright (C) 1998-1999, 2001, 2004, 2008-2012 Free Software Foundation, Inc.
+# Copyright (C) 1998-1999, 2001, 2004, 2008-2019 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.
diff --git a/m4/bison-check-compiler-flag.m4 b/m4/bison-check-compiler-flag.m4
new file mode 100644
index 0000000..7a2db57
--- /dev/null
+++ b/m4/bison-check-compiler-flag.m4
@@ -0,0 +1,45 @@
+# bison-check-compile-flag.m4
+
+# serial 1
+
+# Copyright (C) 2018 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.
+
+
+
+# BISON_CHECK_COMPILER_FLAG(FLAG,
+#                           [ACTION-SUCCESS], [ACTION-FAILURE],
+#                           [EXTRA-FLAGS])
+# -------------------------------------------------------------
+
+# Based on Autoconf Macro Archive's AX_CHECK_COMPILE_FLAG, but using
+# AC_LINK_IFELSE, not just AC_COMPILE_IFELSE to capture failures such
+# as:
+#
+#  ./c++.at:401:  $PREPARSER ./list
+#  stderr:
+#  ./list: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory
+#
+# because we thought '-stdlib=c++' works, as it passes with AC_COMPILE_IFELSE.
+#
+# Not using AX_CHECK_LINK_FLAG, because its message is inappropriate:
+#
+#  checking whether the linker accepts -std=c++11... yes
+#  checking whether the linker accepts -std=c++14... yes
+#  checking whether the linker accepts -std=c++17... no
+AC_DEFUN([BISON_CHECK_COMPILER_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5], [AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], [$2], [$3])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl BISON_CHECK_COMPILER_FLAGS
diff --git a/m4/bison-cxx-std.m4 b/m4/bison-cxx-std.m4
new file mode 100644
index 0000000..afef998
--- /dev/null
+++ b/m4/bison-cxx-std.m4
@@ -0,0 +1,164 @@
+# bison-cxx-std.m4 serial 1
+
+# Copyright (C) 2018 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.
+
+m4_define([_BISON_CXXSTD_98_snippet],
+[#include <vector>
+
+typedef std::vector<int> ints;
+])
+
+m4_define([_BISON_CXXSTD_03_snippet],
+[])
+
+m4_define([_BISON_CXXSTD_11_snippet],
+[#include <algorithm>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <string>
+
+  // C++11
+  template <typename T>
+  struct check
+  {
+    static_assert(sizeof(int) <= sizeof(T), "not big enough");
+  };
+
+  using right_angle_brackets = check<check<bool>>;
+
+  auto f = std::make_shared<std::string>("shared_ptr");
+
+  int a;
+  decltype(a) b;
+
+  typedef check<int> check_type;
+  check_type c;
+  check_type&& cr = static_cast<check_type&&>(c);
+
+  auto d = a;
+
+  // Some versions of libstdc++ do not support std::set::emplace.
+  void foo()
+  {
+    std::set<int> is;
+    is.emplace(42);
+  }
+
+  // Clang++ 3.5, for a while, was unable to process properly
+  // the for-loop because its variable, r, is a typedef...
+  // It failed as follows:
+  //
+  // error: unexpected ':' in nested name specifier; did you mean '::'?
+  //    for (auto r: std::set<int>{1, 2})
+  //               ^
+  //               ::
+  using r = std::set<int>;
+  void bar()
+  {
+    for (int r: std::set<int>{1, 2})
+      continue;
+  }
+
+  // GCC 4.8.2 on Solaris 11.3 does not support to_string.
+  auto e = std::to_string(42);
+])
+
+m4_define([_BISON_CXXSTD_14_snippet],
+[  // C++14
+  void mismatch()
+  {
+    using ints = std::vector<int>;
+    auto v1 = ints{1, 2, 3};
+    auto v2 = ints{1, 2};
+    std::mismatch(std::begin(v1), std::end(v1),
+                  std::begin(v2), std::end(v2));
+  }
+])
+
+m4_define([_BISON_CXXSTD_17_snippet],
+[  // C++17
+  namespace ns1::ns2::ns3 {}
+
+#include <optional>
+  auto opt_string = std::optional<std::string>{};
+  auto out = std::ostringstream{};
+])
+
+m4_define([_BISON_CXXSTD_2A_snippet],
+[  // C++2A
+])
+
+
+m4_define([_BISON_CXXSTD_testbody(98)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+])])
+
+m4_define([_BISON_CXXSTD_testbody(03)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+])])
+
+m4_define([_BISON_CXXSTD_testbody(11)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+])])
+
+m4_define([_BISON_CXXSTD_testbody(14)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
+])])
+
+m4_define([_BISON_CXXSTD_testbody(17)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
+_BISON_CXXSTD_17_snippet
+])])
+
+m4_define([_BISON_CXXSTD_testbody(2a)],
+[AC_LANG_PROGRAM([
+_BISON_CXXSTD_98_snippet
+_BISON_CXXSTD_03_snippet
+_BISON_CXXSTD_11_snippet
+_BISON_CXXSTD_14_snippet
+_BISON_CXXSTD_17_snippet
+_BISON_CXXSTD_2A_snippet
+])])
+
+
+m4_define([_BISON_CXXSTD_testbody],
+[m4_ifdef([$0($1)],
+          [m4_indir([$0($1)], m4_shift2($@))],
+          [m4_fatal([$0: unknown C++ standard: $1])])])
+
+
+# BISON_CXXSTD(STD)
+# -----------------
+# Check whether the C++ compiler support STD (11, 98, 2a, etc.).
+# If it does, AC_SUBST 'CXX<STD>_CXXFLAGS' to the corresponding flags.
+AC_DEFUN([BISON_CXXSTD],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_LANG_PUSH([C++])
+for f in '-std=c++$1' '-std=c++$1 -stdlib=libc++'
+do
+  BISON_CHECK_COMPILER_FLAG([$f],
+                     [AC_SUBST(m4_toupper([CXX$1_CXXFLAGS]), [$f]) break],
+                     [], [],
+                     [_BISON_CXXSTD_testbody($1)])
+done
+AC_LANG_POP([C++])
+])
diff --git a/m4/bison-i18n.m4 b/m4/bison-i18n.m4
index 208cb56..a45df0d 100644
--- a/m4/bison-i18n.m4
+++ b/m4/bison-i18n.m4
@@ -1,6 +1,7 @@
 # bison-i18n.m4 serial 2
 
-dnl Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2009-2015, 2018-2019 Free Software
+dnl Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/c-working.m4 b/m4/c-working.m4
index de1a4c5..33f7d7f 100644
--- a/m4/c-working.m4
+++ b/m4/c-working.m4
@@ -1,6 +1,7 @@
 # Sanity test a C compiler.
 
-# Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2015, 2018-2019 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
@@ -21,7 +22,7 @@
   AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM(
        [[#include <limits.h>
-	 int test_array[CHAR_BIT];]])],
+         int test_array[CHAR_BIT];]])],
     [],
     [AC_MSG_FAILURE([cannot compile a simple C program])])
    AC_SUBST([BISON_C_WORKS], [:])
diff --git a/m4/calloc.m4 b/m4/calloc.m4
index 00c5fe4..15fb07c 100644
--- a/m4/calloc.m4
+++ b/m4/calloc.m4
@@ -1,6 +1,6 @@
-# calloc.m4 serial 15
+# calloc.m4 serial 20
 
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2019 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.
@@ -25,19 +25,27 @@
        [AC_LANG_PROGRAM(
           [AC_INCLUDES_DEFAULT],
           [[int result = 0;
-            if (!calloc (0, 0))
+            char *p = calloc (0, 0);
+            if (!p)
               result |= 1;
-            if (calloc ((size_t) -1 / 8 + 1, 8))
+            free (p);
+            p = calloc ((size_t) -1 / 8 + 1, 8);
+            if (p)
               result |= 2;
+            free (p);
             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" ;;
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                         # Guess yes on musl systems.
+          *-musl*)       ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                         # Guess yes on native Windows.
+          mingw*)        ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                         # If we don't know, obey --enable-cross-guesses.
+          *)             ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;;
         esac
        ])])
   case "$ac_cv_func_calloc_0_nonnull" in
diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
new file mode 100644
index 0000000..cb0896f
--- /dev/null
+++ b/m4/canonicalize.m4
@@ -0,0 +1,133 @@
+# canonicalize.m4 serial 31
+
+dnl Copyright (C) 2003-2007, 2009-2019 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.
+
+# Provides canonicalize_file_name and canonicalize_filename_mode, but does
+# not provide or fix realpath.
+AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
+  AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+  AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+  else
+    case "$gl_cv_func_realpath_works" in
+      *yes) ;;
+      *)    REPLACE_CANONICALIZE_FILE_NAME=1 ;;
+    esac
+  fi
+])
+
+# Provides canonicalize_file_name and realpath.
+AC_DEFUN([gl_CANONICALIZE_LGPL],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE])
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+    if test $ac_cv_func_realpath = no; then
+      HAVE_REALPATH=0
+    else
+      case "$gl_cv_func_realpath_works" in
+        *yes) ;;
+        *)    REPLACE_REALPATH=1 ;;
+      esac
+    fi
+  else
+    case "$gl_cv_func_realpath_works" in
+      *yes)
+        ;;
+      *)
+        REPLACE_CANONICALIZE_FILE_NAME=1
+        REPLACE_REALPATH=1
+        ;;
+    esac
+  fi
+])
+
+# Like gl_CANONICALIZE_LGPL, except prepare for separate compilation
+# (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ).
+AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink])
+  AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+  AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+  AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
+
+# Check whether realpath works.  Assume that if a platform has both
+# realpath and canonicalize_file_name, but the former is broken, then
+# so is the latter.
+AC_DEFUN([gl_FUNC_REALPATH_WORKS],
+[
+  AC_CHECK_FUNCS_ONCE([realpath])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [
+    touch conftest.a
+    mkdir conftest.d
+    AC_RUN_IFELSE([
+      AC_LANG_PROGRAM([[
+        ]GL_NOCRASH[
+        #include <stdlib.h>
+        #include <string.h>
+      ]], [[
+        int result = 0;
+        {
+          char *name = realpath ("conftest.a", NULL);
+          if (!(name && *name == '/'))
+            result |= 1;
+          free (name);
+        }
+        {
+          char *name = realpath ("conftest.b/../conftest.a", NULL);
+          if (name != NULL)
+            result |= 2;
+          free (name);
+        }
+        {
+          char *name = realpath ("conftest.a/", NULL);
+          if (name != NULL)
+            result |= 4;
+          free (name);
+        }
+        {
+          char *name1 = realpath (".", NULL);
+          char *name2 = realpath ("conftest.d//./..", NULL);
+          if (! name1 || ! name2 || strcmp (name1, name2))
+            result |= 8;
+          free (name1);
+          free (name2);
+        }
+        return result;
+      ]])
+     ],
+     [gl_cv_func_realpath_works=yes],
+     [gl_cv_func_realpath_works=no],
+     [case "$host_os" in
+                       # Guess yes on glibc systems.
+        *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
+                       # Guess yes on musl systems.
+        *-musl*)       gl_cv_func_realpath_works="guessing yes" ;;
+                       # Guess no on native Windows.
+        mingw*)        gl_cv_func_realpath_works="guessing no" ;;
+                       # If we don't know, obey --enable-cross-guesses.
+        *)             gl_cv_func_realpath_works="$gl_cross_guess_normal" ;;
+      esac
+     ])
+    rm -rf conftest.a conftest.d
+  ])
+  case "$gl_cv_func_realpath_works" in
+    *yes)
+      AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath()
+        can malloc memory, always gives an absolute path, and handles
+        trailing slash correctly.])
+      ;;
+  esac
+])
diff --git a/m4/clock_time.m4 b/m4/clock_time.m4
new file mode 100644
index 0000000..8f7a7fc
--- /dev/null
+++ b/m4/clock_time.m4
@@ -0,0 +1,31 @@
+# clock_time.m4 serial 10
+dnl Copyright (C) 2002-2006, 2009-2019 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.
+
+# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME.
+# For a program named, say foo, you should add a line like the following
+# in the corresponding Makefile.am file:
+# foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
+
+AC_DEFUN([gl_CLOCK_TIME],
+[
+  dnl Persuade glibc and Solaris <time.h> to declare these functions.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+  # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+
+  # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
+  # programs in the package would end up linked with that potentially-shared
+  # library, inducing unnecessary run-time overhead.
+  LIB_CLOCK_GETTIME=
+  AC_SUBST([LIB_CLOCK_GETTIME])
+  gl_saved_libs=$LIBS
+    AC_SEARCH_LIBS([clock_gettime], [rt posix4],
+                   [test "$ac_cv_search_clock_gettime" = "none required" ||
+                    LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
+    AC_CHECK_FUNCS([clock_gettime clock_settime])
+  LIBS=$gl_saved_libs
+])
diff --git a/m4/close-stream.m4 b/m4/close-stream.m4
deleted file mode 100644
index be0c8a2..0000000
--- a/m4/close-stream.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-#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
index 379e70d..7013a13 100644
--- a/m4/close.m4
+++ b/m4/close.m4
@@ -1,5 +1,5 @@
-# close.m4 serial 8
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# close.m4 serial 9
+dnl Copyright (C) 2008-2019 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,10 +7,12 @@
 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_MSVC_INVAL], [
+    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
diff --git a/m4/closeout.m4 b/m4/closeout.m4
deleted file mode 100644
index 71395c1..0000000
--- a/m4/closeout.m4
+++ /dev/null
@@ -1,12 +0,0 @@
-# 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
index cf53d24..280f556 100644
--- a/m4/codeset.m4
+++ b/m4/codeset.m4
@@ -1,5 +1,6 @@
 # codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019 Free Software
+dnl 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/m4/config-h.m4 b/m4/config-h.m4
index b61e22f..7379df7 100644
--- a/m4/config-h.m4
+++ b/m4/config-h.m4
@@ -1,6 +1,6 @@
 # Say that -DHAVE_CONFIG_H is not needed.
 
-dnl Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2009-2019 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/m4/configmake.m4 b/m4/configmake.m4
index 8c82371..0571952 100644
--- a/m4/configmake.m4
+++ b/m4/configmake.m4
@@ -1,50 +1,27 @@
-# configmake.m4 serial 1
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+# configmake.m4 serial 3
+dnl Copyright (C) 2010-2019 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_PREREQ([2.60])
+
 # 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.).
+# autoconf 2.63 (runstatedir wasn't supported before 2.70) or
+# automake 1.11 (runstatedir isn't supported even in 1.16.1).
 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'])
+  dnl Added in autoconf 2.70.
+  if test "x$runstatedir" = x; then
+    AC_SUBST([runstatedir], ['${localstatedir}/run'])
   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.
+  dnl Automake 1.11 provides pkglibexecdir merely without AC_SUBST.
+  dnl This blind use of AC_SUBST is safe.
   AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
 ])
diff --git a/m4/cxx.m4 b/m4/cxx.m4
index 5e266c9..6e9c891 100644
--- a/m4/cxx.m4
+++ b/m4/cxx.m4
@@ -1,7 +1,8 @@
 # -*- Autoconf -*-
 # Sanity-test a C++ compiler.
 #
-# Copyright (C) 2004, 2006, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2006, 2009-2015, 2018-2019 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
@@ -26,37 +27,35 @@
     bison_cv_cxx_works=no
     AC_COMPILE_IFELSE(
       [AC_LANG_PROGRAM(
-	 [#include <cstdlib>
-	  #include <iostream>
-	  #include <map>
-	  #include <string>
-	  using namespace std;],
+         [#include <cstdlib>
+          #include <iostream>
+          #include <map>
+          #include <string>
+          using namespace std;],
          [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;])],
+          typedef std::pair<unsigned, int> uipair;
+          std::map<unsigned, int> m;
+          std::map<unsigned, int>::iterator i;
+          m.insert (uipair (4, -4));
+          for (i = m.begin (); i != m.end (); ++i)
+            if (i->first != 4)
+              return 1;])],
       [AS_IF([AC_TRY_COMMAND([$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD])],
-	 [AS_IF([test "$cross_compiling" = yes],
-	    [bison_cv_cxx_works=cross],
-	    [AS_IF([AC_TRY_COMMAND(./conftest$ac_exeext)],
-	       [bison_cv_cxx_works=yes])])])
+         [AS_IF([test "$cross_compiling" = yes],
+            [bison_cv_cxx_works=cross],
+            [AS_IF([AC_TRY_COMMAND(./conftest$ac_exeext)],
+               [bison_cv_cxx_works=yes])])])
        rm -f conftest$ac_exeext])
     AC_LANG_POP([C++])])
 
  case $bison_cv_cxx_works in
- yes)
-    BISON_CXX_WORKS=':';;
- no | cross)
-    BISON_CXX_WORKS='exit 77';;
+   yes)        BISON_CXX_WORKS=':';;
+   no | cross) BISON_CXX_WORKS='false';;
  esac
 
  AC_SUBST([BISON_CXX_WORKS])
- AM_CONDITIONAL(BISON_CXX_WORKS, test $bison_cv_cxx_works = yes)
+ AM_CONDITIONAL([ENABLE_CXX], [test $bison_cv_cxx_works = yes])
 ])
 
 # BISON_CXX_COMPILER_POSIXLY_CORRECT
diff --git a/m4/dirname.m4 b/m4/dirname.m4
index 65639ec..32141ae 100644
--- a/m4/dirname.m4
+++ b/m4/dirname.m4
@@ -1,5 +1,5 @@
 #serial 10   -*- autoconf -*-
-dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2019 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/m4/dmalloc.m4 b/m4/dmalloc.m4
deleted file mode 100644
index 90e72f6..0000000
--- a/m4/dmalloc.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-## ----------------------------------- ##
-## Check if --with-dmalloc was given.  ##
-## From Franc,ois Pinard               ##
-## ----------------------------------- ##
-
-# serial 1
-
-AC_DEFUN([AM_WITH_DMALLOC],
-[AC_MSG_CHECKING([if malloc debugging is wanted])
-AC_ARG_WITH(dmalloc,
-[  --with-dmalloc          use dmalloc, as in
-                          http://www.dmalloc.com/dmalloc.tar.gz],
-[if test "$withval" = yes; then
-  AC_MSG_RESULT(yes)
-  AC_DEFINE([WITH_DMALLOC],1,
-            [Define if using the dmalloc debugging malloc package])
-  LIBS="$LIBS -ldmalloc"
-  LDFLAGS="$LDFLAGS -g"
-else
-  AC_MSG_RESULT(no)
-fi], [AC_MSG_RESULT(no)])
-])
diff --git a/m4/double-slash-root.m4 b/m4/double-slash-root.m4
index 1e03751..0c5afb1 100644
--- a/m4/double-slash-root.m4
+++ b/m4/double-slash-root.m4
@@ -1,5 +1,5 @@
 # double-slash-root.m4 serial 4   -*- Autoconf -*-
-dnl Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2008-2019 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/m4/dup2.m4 b/m4/dup2.m4
index fc86e80..b314247 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,5 +1,5 @@
-#serial 18
-dnl Copyright (C) 2002, 2005, 2007, 2009-2012 Free Software Foundation, Inc.
+#serial 25
+dnl Copyright (C) 2002, 2005, 2007, 2009-2019 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,28 +19,60 @@
   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;
-           ])
+         AC_LANG_PROGRAM(
+           [[#include <errno.h>
+             #include <fcntl.h>
+             #include <limits.h>
+             #include <sys/resource.h>
+             #include <unistd.h>
+             #ifndef RLIM_SAVED_CUR
+             # define RLIM_SAVED_CUR RLIM_INFINITY
+             #endif
+             #ifndef RLIM_SAVED_MAX
+             # define RLIM_SAVED_MAX RLIM_INFINITY
+             #endif
+           ]],
+           [[int result = 0;
+             int bad_fd = INT_MAX;
+             struct rlimit rlim;
+             if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                 && rlim.rlim_cur != RLIM_INFINITY
+                 && rlim.rlim_cur != RLIM_SAVED_MAX
+                 && rlim.rlim_cur != RLIM_SAVED_CUR)
+               bad_fd = rlim.rlim_cur;
+             #ifdef FD_CLOEXEC
+               if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+                 result |= 1;
+             #endif
+             if (dup2 (1, 1) != 1)
+               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, bad_fd) == -1 && errno != EBADF)
+               result |= 16;
+             /* Flush out some cygwin core dumps.  */
+             if (dup2 (2, -1) != -1 || errno != EBADF)
+               result |= 32;
+             dup2 (2, 255);
+             dup2 (2, 256);
+             /* On OS/2 kLIBC, dup2() does not work on a directory fd.  */
+             {
+               int fd = open (".", O_RDONLY);
+               if (fd == -1)
+                 result |= 64;
+               else if (dup2 (fd, fd + 1) == -1)
+                 result |= 128;
+
+               close (fd);
+             }
+             return result;]])
         ],
         [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
         [case "$host_os" in
@@ -48,13 +80,16 @@
              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.
+           aix* | freebsd*)
+                   # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) 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" ;;
+           *-android*) # implemented using dup3(), which fails if oldfd == newfd
+             gl_cv_func_dup2_works="guessing no" ;;
+           os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd.
+             gl_cv_func_dup2_works="guessing no" ;;
            *) gl_cv_func_dup2_works="guessing yes" ;;
          esac])
       ])
@@ -62,6 +97,7 @@
       *yes) ;;
       *)
         REPLACE_DUP2=1
+        AC_CHECK_FUNCS([setdtablesize])
         ;;
     esac
   fi
diff --git a/m4/eealloc.m4 b/m4/eealloc.m4
new file mode 100644
index 0000000..2a4b120
--- /dev/null
+++ b/m4/eealloc.m4
@@ -0,0 +1,31 @@
+# eealloc.m4 serial 3
+dnl Copyright (C) 2003, 2009-2019 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_EEALLOC],
+[
+  AC_REQUIRE([gl_EEMALLOC])
+  AC_REQUIRE([gl_EEREALLOC])
+])
+
+AC_DEFUN([gl_EEMALLOC],
+[
+  _AC_FUNC_MALLOC_IF(
+    [gl_cv_func_malloc_0_nonnull=1],
+    [gl_cv_func_malloc_0_nonnull=0])
+  AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull],
+    [If malloc(0) is != NULL, define this to 1.  Otherwise define this
+     to 0.])
+])
+
+AC_DEFUN([gl_EEREALLOC],
+[
+  _AC_FUNC_REALLOC_IF(
+    [gl_cv_func_realloc_0_nonnull=1],
+    [gl_cv_func_realloc_0_nonnull=0])
+  AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull],
+    [If realloc(NULL,0) is != NULL, define this to 1.  Otherwise define this
+     to 0.])
+])
diff --git a/m4/environ.m4 b/m4/environ.m4
index 8eb57c9..c1a6fa3 100644
--- a/m4/environ.m4
+++ b/m4/environ.m4
@@ -1,5 +1,5 @@
-# environ.m4 serial 6
-dnl Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+# environ.m4 serial 7
+dnl Copyright (C) 2001-2004, 2006-2019 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.
@@ -29,16 +29,14 @@
 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])
+  AC_CACHE_CHECK([if $2 is properly declared], [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])])
   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.])
diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
index 4e33ba8..2388854 100644
--- a/m4/errno_h.m4
+++ b/m4/errno_h.m4
@@ -1,9 +1,11 @@
-# errno_h.m4 serial 12
-dnl Copyright (C) 2004, 2006, 2008-2012 Free Software Foundation, Inc.
+# errno_h.m4 serial 13
+dnl Copyright (C) 2004, 2006, 2008-2019 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_PREREQ([2.61])
+
 AC_DEFUN_ONCE([gl_HEADER_ERRNO_H],
 [
   AC_REQUIRE([AC_PROG_CC])
@@ -129,9 +131,3 @@
     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 1190e32..393adb5 100644
--- a/m4/error.m4
+++ b/m4/error.m4
@@ -1,6 +1,6 @@
 #serial 14
 
-# Copyright (C) 1996-1998, 2001-2004, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-1998, 2001-2004, 2009-2019 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/exponentd.m4 b/m4/exponentd.m4
index 0ae4ccf..90870df 100644
--- a/m4/exponentd.m4
+++ b/m4/exponentd.m4
@@ -1,5 +1,5 @@
 # exponentd.m4 serial 3
-dnl Copyright (C) 2007-2008, 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2008, 2010-2019 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/m4/exponentf.m4 b/m4/exponentf.m4
index 94d1167..cf8306b 100644
--- a/m4/exponentf.m4
+++ b/m4/exponentf.m4
@@ -1,5 +1,5 @@
 # exponentf.m4 serial 2
-dnl Copyright (C) 2007-2008, 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2008, 2010-2019 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/m4/exponentl.m4 b/m4/exponentl.m4
index a7cd13b..4064981 100644
--- a/m4/exponentl.m4
+++ b/m4/exponentl.m4
@@ -1,11 +1,12 @@
-# exponentl.m4 serial 3
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# exponentl.m4 serial 4
+dnl Copyright (C) 2007-2019 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_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_CACHE_CHECK([where to find the exponent in a 'long double'],
     [gl_cv_cc_long_double_expbit0],
     [
@@ -79,9 +80,24 @@
         [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 When cross-compiling, in general 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"
+          case "$host_os" in
+            mingw*) # On native Windows (little-endian), we know the result
+                    # in two cases: mingw, MSVC.
+              AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+                ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"])
+              AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"])
+              ;;
+          esac
         ])
       rm -f conftest.out
     ])
diff --git a/m4/extensions.m4 b/m4/extensions.m4
index 6d17d8a..fd1ce81 100644
--- a/m4/extensions.m4
+++ b/m4/extensions.m4
@@ -1,14 +1,14 @@
-# serial 12  -*- Autoconf -*-
+# serial 18  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2019 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 definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
+# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
 # Autoconf.  Perhaps we can remove this once we can assume Autoconf
-# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
+# 2.70 or later everywhere, but since Autoconf mutates rapidly
 # enough in this area it's likely we'll need to redefine
 # AC_USE_SYSTEM_EXTENSIONS for quite some time.
 
@@ -30,6 +30,7 @@
 # ------------------------
 # 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
@@ -38,8 +39,6 @@
 [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],
@@ -50,24 +49,18 @@
        except with this defined.])
     AC_DEFINE([_MINIX], [1],
       [Define to 1 if on MINIX.])
+    AC_DEFINE([_NETBSD_SOURCE], [1],
+      [Define to 1 to make NetBSD features available.  MINIX 3 needs this.])
   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__],
+dnl Use a different key than __EXTENSIONS__, as that name broke existing
+dnl configure.ac when using autoheader 2.62.
+  AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
 [/* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
-/* Enable general extensions on Mac OS X.  */
+/* Enable general extensions on macOS.  */
 #ifndef _DARWIN_C_SOURCE
 # undef _DARWIN_C_SOURCE
 #endif
@@ -75,14 +68,61 @@
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Enable NetBSD extensions on NetBSD.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD extensions on NetBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
 /* Enable threading extensions on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
 #endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
 /* Enable extensions on HP NonStop.  */
 #ifndef _TANDEM_SOURCE
 # undef _TANDEM_SOURCE
 #endif
+/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
+   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
+   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
 /* Enable general extensions on Solaris.  */
 #ifndef __EXTENSIONS__
 # undef __EXTENSIONS__
@@ -101,8 +141,34 @@
   AC_DEFINE([_ALL_SOURCE])
   AC_DEFINE([_DARWIN_C_SOURCE])
   AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([_NETBSD_SOURCE])
+  AC_DEFINE([_OPENBSD_SOURCE])
   AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__])
+  AC_DEFINE([__STDC_WANT_LIB_EXT2__])
+  AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__])
   AC_DEFINE([_TANDEM_SOURCE])
+  AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
+    [ac_cv_should_define__xopen_source],
+    [ac_cv_should_define__xopen_source=no
+     AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+          #include <wchar.h>
+          mbstate_t x;]])],
+       [],
+       [AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM([[
+             #define _XOPEN_SOURCE 500
+             #include <wchar.h>
+             mbstate_t x;]])],
+          [ac_cv_should_define__xopen_source=yes])])])
+  test $ac_cv_should_define__xopen_source = yes &&
+    AC_DEFINE([_XOPEN_SOURCE], [500])
+  AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API])
 ])# AC_USE_SYSTEM_EXTENSIONS
 
 # gl_USE_SYSTEM_EXTENSIONS
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
index 0a9fc9a..84421ce 100644
--- a/m4/extern-inline.m4
+++ b/m4/extern-inline.m4
@@ -1,6 +1,6 @@
 dnl 'extern inline' a la ISO C99.
 
-dnl Copyright 2012 Free Software Foundation, Inc.
+dnl Copyright 2012-2019 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.
@@ -8,40 +8,92 @@
 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.
+[/* Please see the Gnulib manual for how to use these macros.
 
-   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.  */
+   Suppress extern inline with HP-UX cc, as it appears to be broken; see
+   <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+   Suppress extern inline with Sun C in standards-conformance mode, as it
+   mishandles inline functions that call each other.  E.g., for 'inline void f
+   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+   'reference to static identifier "f" in extern inline function'.
+   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions (ISO C 99 section 6.7.4.(3).
+   This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.
+
+   GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  It defines a macro
+   __GNUC_STDC_INLINE__ to indicate this situation or a macro
+   __GNUC_GNU_INLINE__ to indicate the opposite situation.
+   GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+   semantics but warns, unless -fgnu89-inline is used:
+     warning: C99 inline functions are not supported; using GNU89
+     warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+   It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
 #if ((__GNUC__ \
       ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
+      : (199901L <= __STDC_VERSION__ \
+         && !defined __HP_cc \
+         && !defined __PGI \
+         && !(defined __SUNPRO_C && __STDC__))) \
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
 # define _GL_INLINE inline
 # define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __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
+# define _GL_EXTERN_INLINE_IN_USE
 #else
 # define _GL_INLINE static _GL_UNUSED
 # define _GL_EXTERN_INLINE static _GL_UNUSED
 #endif
 
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
 #  define _GL_INLINE_HEADER_CONST_PRAGMA
 # else
diff --git a/m4/fatal-signal.m4 b/m4/fatal-signal.m4
index d102de7..349c1f7 100644
--- a/m4/fatal-signal.m4
+++ b/m4/fatal-signal.m4
@@ -1,5 +1,5 @@
 # fatal-signal.m4 serial 9
-dnl Copyright (C) 2003-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2004, 2006, 2008-2019 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/m4/fcntl-o.m4 b/m4/fcntl-o.m4
index 740e78b..6ab3387 100644
--- a/m4/fcntl-o.m4
+++ b/m4/fcntl-o.m4
@@ -1,23 +1,22 @@
-# fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+# fcntl-o.m4 serial 6
+dnl Copyright (C) 2006, 2009-2019 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_PREREQ([2.60])
+
 # 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_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_CHECK_HEADERS_ONCE([unistd.h])
   AC_CHECK_FUNCS_ONCE([symlink])
   AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
@@ -116,7 +115,13 @@
         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 "$host_os" in
+                  # Guess 'no' on native Windows.
+          mingw*) gl_cv_header_working_fcntl_h='no' ;;
+          *)      gl_cv_header_working_fcntl_h=cross-compiling ;;
+        esac
+       ])
+    ])
 
   case $gl_cv_header_working_fcntl_h in #(
   *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
index 0631bd6..e409e96 100644
--- a/m4/fcntl.m4
+++ b/m4/fcntl.m4
@@ -1,5 +1,5 @@
-# fcntl.m4 serial 5
-dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# fcntl.m4 serial 9
+dnl Copyright (C) 2009-2019 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.
@@ -27,20 +27,51 @@
     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;
-         ]])],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <errno.h>
+              #include <fcntl.h>
+              #include <limits.h>
+              #include <sys/resource.h>
+              #include <unistd.h>
+              #ifndef RLIM_SAVED_CUR
+              # define RLIM_SAVED_CUR RLIM_INFINITY
+              #endif
+              #ifndef RLIM_SAVED_MAX
+              # define RLIM_SAVED_MAX RLIM_INFINITY
+              #endif
+            ]],
+            [[int result = 0;
+              int bad_fd = INT_MAX;
+              struct rlimit rlim;
+              if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                  && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                  && rlim.rlim_cur != RLIM_INFINITY
+                  && rlim.rlim_cur != RLIM_SAVED_MAX
+                  && rlim.rlim_cur != RLIM_SAVED_CUR)
+                bad_fd = rlim.rlim_cur;
+              if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+              if (errno != EINVAL) result |= 2;
+              if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
+              if (errno != EINVAL) result |= 8;
+              /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */
+              {
+                int fd;
+                fd = open (".", O_RDONLY);
+                if (fd == -1)
+                  result |= 16;
+                else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1)
+                  result |= 32;
+
+                close (fd);
+              }
+              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";;
+         [case $host_os in
+            aix* | cygwin* | haiku*)
+               gl_cv_func_fcntl_f_dupfd_works="guessing no" ;;
+            *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;;
           esac])])
     case $gl_cv_func_fcntl_f_dupfd_works in
       *yes) ;;
diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4
index cac28ae..60dc5e2 100644
--- a/m4/fcntl_h.m4
+++ b/m4/fcntl_h.m4
@@ -1,6 +1,6 @@
-# serial 15
+# serial 16
 # Configure fcntl.h.
-dnl Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2019 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.
@@ -37,6 +37,7 @@
 
 AC_DEFUN([gl_FCNTL_H_DEFAULTS],
 [
+  GNULIB_CREAT=0;        AC_SUBST([GNULIB_CREAT])
   GNULIB_FCNTL=0;        AC_SUBST([GNULIB_FCNTL])
   GNULIB_NONBLOCKING=0;  AC_SUBST([GNULIB_NONBLOCKING])
   GNULIB_OPEN=0;         AC_SUBST([GNULIB_OPEN])
@@ -44,6 +45,7 @@
   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_CREAT=0;       AC_SUBST([REPLACE_CREAT])
   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
index 984c514..ed230a2 100644
--- a/m4/flex.m4
+++ b/m4/flex.m4
@@ -1,5 +1,5 @@
 # flex.m4 serial 2
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2012-2015, 2018-2019 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.
@@ -15,7 +15,10 @@
 [AC_CHECK_PROGS([LEX], [flex lex], [:])
 if test "x$LEX" != "x:"; then
   _AC_PROG_LEX_YYTEXT_DECL
-fi])
+fi
+AC_SUBST([LEX_IS_FLEX],
+         [`test "$ac_cv_prog_lex_is_flex" = yes && echo true || echo false`])dnl
+])
 
 
 # _AC_PROG_LEX_YYTEXT_DECL
@@ -37,8 +40,6 @@
   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[
 %%
@@ -78,7 +79,7 @@
     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])
+        [ac_cv_lib_lex=$ac_lib])
       test "$ac_cv_lib_lex" != 'none needed' && break
     done
     LIBS=$ac_save_LIBS
@@ -104,8 +105,8 @@
 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[]'.])
+            [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
index 51c9c7b..1cd28a0 100644
--- a/m4/float_h.m4
+++ b/m4/float_h.m4
@@ -1,5 +1,5 @@
-# float_h.m4 serial 9
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# float_h.m4 serial 12
+dnl Copyright (C) 2007, 2009-2019 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.
@@ -14,7 +14,7 @@
     aix* | beos* | openbsd* | mirbsd* | irix*)
       FLOAT_H=float.h
       ;;
-    freebsd*)
+    freebsd* | dragonfly*)
       case "$host_cpu" in
 changequote(,)dnl
         i[34567]86 )
@@ -24,10 +24,14 @@
         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],
+          AC_COMPILE_IFELSE(
+            [AC_LANG_SOURCE(
+               [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__
+                  int ok;
+                 #else
+                  error fail
+                 #endif
+               ]])],
             [],
             [FLOAT_H=float.h])
           ;;
@@ -42,7 +46,7 @@
       ;;
   esac
   case "$host_os" in
-    aix* | freebsd* | linux*)
+    aix* | freebsd* | dragonfly* | linux*)
       if test -n "$FLOAT_H"; then
         REPLACE_FLOAT_LDBL=1
       fi
@@ -69,14 +73,20 @@
         [gl_cv_func_itold_works=no],
         [case "$host" in
            sparc*-*-linux*)
-             AC_EGREP_CPP([yes],
-               [#if defined __LP64__ || defined __arch64__
-                yes
-                #endif],
+             AC_COMPILE_IFELSE(
+               [AC_LANG_SOURCE(
+                 [[#if defined __LP64__ || defined __arch64__
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
                [gl_cv_func_itold_works="guessing no"],
                [gl_cv_func_itold_works="guessing yes"])
              ;;
-           *) gl_cv_func_itold_works="guessing yes" ;;
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_itold_works="guessing yes" ;;
+           *)      gl_cv_func_itold_works="guessing yes" ;;
          esac
         ])
     ])
diff --git a/m4/fopen.m4 b/m4/fopen.m4
index d56c783..8a6e0ea 100644
--- a/m4/fopen.m4
+++ b/m4/fopen.m4
@@ -1,5 +1,5 @@
-# fopen.m4 serial 9
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# fopen.m4 serial 10
+dnl Copyright (C) 2007-2019 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.
@@ -27,7 +27,11 @@
 #include <stdio.h>
 int main ()
 {
-  return fopen ("conftest.sl/", "w") != NULL;
+  FILE *fp = fopen ("conftest.sl/", "w");
+  int result = (fp != NULL);
+  if (fp != NULL)
+    fclose (fp);
+  return result;
 }]])],
             [gl_cv_func_fopen_slash=yes],
             [gl_cv_func_fopen_slash=no],
diff --git a/m4/fpending.m4 b/m4/fpending.m4
index 33a5c94..402ec40 100644
--- a/m4/fpending.m4
+++ b/m4/fpending.m4
@@ -1,6 +1,6 @@
-# serial 19
+# serial 22
 
-# Copyright (C) 2000-2001, 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2019 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,80 +11,26 @@
 
 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.
+dnl we have to grub around in the (possibly opaque) 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,
+    #include <stdio.h>
+    #if HAVE_STDIO_EXT_H
+    # include <stdio_ext.h>
+    #endif
+  '
+  AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending],
     [
-      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'])
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([$fp_headers],
+           [[return ! __fpending (stdin);]])],
+        [gl_cv_func___fpending=yes],
+        [gl_cv_func___fpending=no])
+    ])
+  if test $gl_cv_func___fpending = yes; then
+    AC_CHECK_DECLS([__fpending], [], [], [$fp_headers])
+  fi
 ])
diff --git a/m4/fpieee.m4 b/m4/fpieee.m4
index 82fd778..ea1d5da 100644
--- a/m4/fpieee.m4
+++ b/m4/fpieee.m4
@@ -1,5 +1,5 @@
-# fpieee.m4 serial 2
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# fpieee.m4 serial 2  -*- coding: utf-8 -*-
+dnl Copyright (C) 2007, 2009-2019 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.
@@ -33,7 +33,7 @@
     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>
+      # <https://backdrift.org/man/tru64/man3/ieee.3.html>
       if test -n "$GCC"; then
         # GCC has the option -mieee.
         # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
diff --git a/m4/fprintf-posix.m4 b/m4/fprintf-posix.m4
index d083dab..17206e6 100644
--- a/m4/fprintf-posix.m4
+++ b/m4/fprintf-posix.m4
@@ -1,5 +1,5 @@
 # fprintf-posix.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/frexp.m4 b/m4/frexp.m4
index fb8db70..990fce6 100644
--- a/m4/frexp.m4
+++ b/m4/frexp.m4
@@ -1,5 +1,5 @@
-# frexp.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# frexp.m4 serial 16
+dnl Copyright (C) 2007-2019 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.
@@ -93,7 +93,7 @@
 [
   AC_REQUIRE([AC_PROG_CC])
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-  AC_CHECK_FUNCS_ONCE([alarm])
+  AC_CHECK_DECLS_ONCE([alarm])
   AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works],
     [
       AC_RUN_IFELSE(
@@ -101,7 +101,8 @@
 #include <float.h>
 #include <math.h>
 #include <string.h>
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
+# include <signal.h>
 # include <unistd.h>
 #endif
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
@@ -124,9 +125,10 @@
   int i;
   volatile double x;
   double zero = 0.0;
-#if HAVE_ALARM
+#if HAVE_DECL_ALARM
   /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
      number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
   alarm (5);
 #endif
   /* Test on denormalized numbers.  */
@@ -162,8 +164,17 @@
         [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";;
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             AC_EGREP_CPP([Good], [
+#ifdef _MSC_VER
+ Good
+#endif
+               ],
+               [gl_cv_func_frexp_works="guessing yes"],
+               [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
index 774d540..53eed55 100644
--- a/m4/frexpl.m4
+++ b/m4/frexpl.m4
@@ -1,5 +1,5 @@
-# frexpl.m4 serial 20
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# frexpl.m4 serial 21
+dnl Copyright (C) 2007-2019 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.
@@ -131,7 +131,7 @@
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
-#if defined __i386__ && defined __FreeBSD__
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
 # undef LDBL_MIN_EXP
 # define LDBL_MIN_EXP    (-16381)
 #endif
diff --git a/m4/fseterr.m4 b/m4/fseterr.m4
index 3eb3197..e2b97a5 100644
--- a/m4/fseterr.m4
+++ b/m4/fseterr.m4
@@ -1,5 +1,5 @@
 # fseterr.m4 serial 1
-dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2019 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/m4/fstat.m4 b/m4/fstat.m4
index a73baa2..2a59c8f 100644
--- a/m4/fstat.m4
+++ b/m4/fstat.m4
@@ -1,22 +1,22 @@
-# fstat.m4 serial 4
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+# fstat.m4 serial 6
+dnl Copyright (C) 2011-2019 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([AC_CANONICAL_HOST])
   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
+  case "$host_os" in
+    mingw* | solaris*)
+      dnl On MinGW, the original stat() returns st_atime, st_mtime,
+      dnl st_ctime values that are affected by the time zone.
+      dnl Solaris stat can return a negative tv_nsec.
+      REPLACE_FSTAT=1
+      ;;
+  esac
 
   dnl Replace fstat() for supporting the gnulib-defined open() on directories.
   m4_ifdef([gl_FUNC_FCHDIR], [
@@ -32,5 +32,8 @@
   ])
 ])
 
-# Prerequisites of lib/fstat.c.
-AC_DEFUN([gl_PREREQ_FSTAT], [:])
+# Prerequisites of lib/fstat.c and lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_FSTAT], [
+  AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+  :
+])
diff --git a/m4/fsync.m4 b/m4/fsync.m4
new file mode 100644
index 0000000..1b94a25
--- /dev/null
+++ b/m4/fsync.m4
@@ -0,0 +1,17 @@
+# fsync.m4 serial 2
+dnl Copyright (C) 2008-2019 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_FSYNC],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([fsync])
+  if test $ac_cv_func_fsync = no; then
+    HAVE_FSYNC=0
+  fi
+])
+
+# Prerequisites of lib/fsync.c.
+AC_DEFUN([gl_PREREQ_FSYNC], [:])
diff --git a/m4/getdelim.m4 b/m4/getdelim.m4
deleted file mode 100644
index a6f4872..0000000
--- a/m4/getdelim.m4
+++ /dev/null
@@ -1,88 +0,0 @@
-# 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
index 88a6117..96aa241 100644
--- a/m4/getdtablesize.m4
+++ b/m4/getdtablesize.m4
@@ -1,5 +1,5 @@
-# getdtablesize.m4 serial 4
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# getdtablesize.m4 serial 7
+dnl Copyright (C) 2008-2019 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,8 +7,51 @@
 AC_DEFUN([gl_FUNC_GETDTABLESIZE],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CHECK_FUNCS_ONCE([getdtablesize])
-  if test $ac_cv_func_getdtablesize != yes; then
+  AC_CHECK_DECLS_ONCE([getdtablesize])
+  if test $ac_cv_func_getdtablesize = yes &&
+     test $ac_cv_have_decl_getdtablesize = yes; then
+    AC_CACHE_CHECK([whether getdtablesize works],
+      [gl_cv_func_getdtablesize_works],
+      [dnl There are two concepts: the "maximum possible file descriptor value + 1"
+       dnl and the "maximum number of open file descriptors in a process".
+       dnl Per SUSv2 and POSIX, getdtablesize() should return the first one.
+       dnl On most platforms, the first and the second concept are the same.
+       dnl On OpenVMS, however, they are different and getdtablesize() returns
+       dnl the second one; thus the test below fails. But we don't care
+       dnl because there's no good way to write a replacement getdtablesize().
+       case "$host_os" in
+         vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;;
+         *)
+           dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft
+           dnl limit up to an unchangeable hard limit; all other platforms
+           dnl correctly require setrlimit before getdtablesize() can report
+           dnl a larger value.
+           AC_RUN_IFELSE([
+             AC_LANG_PROGRAM([[#include <unistd.h>]],
+               [int size = getdtablesize();
+                if (dup2 (0, getdtablesize()) != -1)
+                  return 1;
+                if (size != getdtablesize())
+                  return 2;
+               ])],
+             [gl_cv_func_getdtablesize_works=yes],
+             [gl_cv_func_getdtablesize_works=no],
+             [case "$host_os" in
+                cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows
+                  gl_cv_func_getdtablesize_works="guessing no" ;;
+                *) gl_cv_func_getdtablesize_works="guessing yes" ;;
+              esac
+             ])
+           ;;
+       esac
+      ])
+    case "$gl_cv_func_getdtablesize_works" in
+      *yes | "no (limitation)") ;;
+      *) REPLACE_GETDTABLESIZE=1 ;;
+    esac
+  else
     HAVE_GETDTABLESIZE=0
   fi
 ])
diff --git a/m4/gethrxtime.m4 b/m4/gethrxtime.m4
new file mode 100644
index 0000000..6444fad
--- /dev/null
+++ b/m4/gethrxtime.m4
@@ -0,0 +1,67 @@
+# gethrxtime.m4 serial 12
+dnl Copyright (C) 2005-2006, 2008-2019 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_GETHRXTIME],
+[
+  AC_REQUIRE([gl_ARITHMETIC_HRTIME_T])
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([gl_XTIME])
+  AC_CHECK_DECLS([gethrtime], [], [], [[#include <time.h>]])
+  LIB_GETHRXTIME=
+  if test $ac_cv_have_decl_gethrtime = no \
+     || test $gl_cv_arithmetic_hrtime_t = no; then
+    dnl Find libraries needed to link lib/gethrxtime.c.
+    AC_REQUIRE([gl_CLOCK_TIME])
+    AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+    AC_CHECK_FUNCS_ONCE([microuptime nanouptime])
+    if test $ac_cv_func_nanouptime != yes \
+       && { test $ac_cv_have_decl_gethrtime = no \
+            || test $gl_cv_arithmetic_hrtime_t = no; }; then
+      AC_CACHE_CHECK([whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined],
+        [gl_cv_have_clock_gettime_macro],
+        [AC_EGREP_CPP([have_clock_gettime_macro],
+          [
+#          include <time.h>
+#          if defined CLOCK_MONOTONIC || defined CLOCK_REALTIME
+            have_clock_gettime_macro
+#          endif
+          ],
+          [gl_cv_have_clock_gettime_macro=yes],
+          [gl_cv_have_clock_gettime_macro=no])])
+      if test $gl_cv_have_clock_gettime_macro = yes; then
+        LIB_GETHRXTIME=$LIB_CLOCK_GETTIME
+      fi
+    fi
+  fi
+  AC_SUBST([LIB_GETHRXTIME])
+])
+
+# Test whether hrtime_t is an arithmetic type.
+# It is not arithmetic in older Solaris c89 (which insists on
+# not having a long long int type).
+AC_DEFUN([gl_ARITHMETIC_HRTIME_T],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CACHE_CHECK([for arithmetic hrtime_t], [gl_cv_arithmetic_hrtime_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[#include <time.h>]],
+          [[hrtime_t x = 0; return x/x;]])],
+       [gl_cv_arithmetic_hrtime_t=yes],
+       [gl_cv_arithmetic_hrtime_t=no])])
+  if test $gl_cv_arithmetic_hrtime_t = yes; then
+    AC_DEFINE([HAVE_ARITHMETIC_HRTIME_T], [1],
+      [Define if you have an arithmetic hrtime_t type.])
+  fi
+])
+
+# Prerequisites of lib/xtime.h.
+AC_DEFUN([gl_XTIME],
+[
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  :
+])
diff --git a/m4/getline.m4 b/m4/getline.m4
deleted file mode 100644
index 72fbc9d..0000000
--- a/m4/getline.m4
+++ /dev/null
@@ -1,96 +0,0 @@
-# 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 f6902b5..8cc7827 100644
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,5 +1,5 @@
-# getopt.m4 serial 44
-dnl Copyright (C) 2002-2006, 2008-2012 Free Software Foundation, Inc.
+# getopt.m4 serial 47
+dnl Copyright (C) 2002-2006, 2008-2019 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.
@@ -32,9 +32,16 @@
 # getopt_long_only.
 AC_DEFUN([gl_FUNC_GETOPT_GNU],
 [
+  dnl Set the variable gl_getopt_required, so that all invocations of
+  dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file
+  dnl will check for getopt with GNU extensions.
+  dnl This means that if one gnulib-tool invocation requests getopt-posix
+  dnl and another gnulib-tool invocation requests getopt-gnu, it is as if
+  dnl both had requested getopt-gnu.
   m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
 
-  AC_REQUIRE([gl_FUNC_GETOPT_POSIX])
+  dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically
+  dnl done through the module dependency getopt-gnu -> getopt-posix.
 ])
 
 # Determine whether to replace the entire getopt facility.
@@ -295,8 +302,10 @@
            ]])],
         [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"
+        [dnl Cross compiling.
+         dnl Assume the worst, even on glibc platforms.
+         dnl But obey --enable-cross-guesses.
+         gl_cv_func_getopt_gnu="$gl_cross_guess_normal"
         ])
        case $gl_had_POSIXLY_CORRECT in
          exported) ;;
@@ -354,15 +363,19 @@
 
 AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
 [
-  GETOPT_H=getopt.h
+  AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
+  if test $ac_cv_header_sys_cdefs_h = yes; then
+    HAVE_SYS_CDEFS_H=1
+  else
+    HAVE_SYS_CDEFS_H=0
+  fi
+  AC_SUBST([HAVE_SYS_CDEFS_H])
+
   AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
     [Define to rpl_ if the getopt replacement functions and variables
      should be used.])
+  GETOPT_H=getopt.h
+  GETOPT_CDEFS_H=getopt-cdefs.h
   AC_SUBST([GETOPT_H])
-])
-
-# Prerequisites of lib/getopt*.
-AC_DEFUN([gl_PREREQ_GETOPT],
-[
-  AC_CHECK_DECLS_ONCE([getenv])
+  AC_SUBST([GETOPT_CDEFS_H])
 ])
diff --git a/m4/getprogname.m4 b/m4/getprogname.m4
new file mode 100644
index 0000000..4a96d06
--- /dev/null
+++ b/m4/getprogname.m4
@@ -0,0 +1,43 @@
+# getprogname.m4 - check for getprogname or replacements for it
+
+# Copyright (C) 2016-2019 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
+
+AC_DEFUN([gl_FUNC_GETPROGNAME],
+[
+  AC_CHECK_FUNCS_ONCE([getprogname getexecname])
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  ac_found=0
+  AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [],
+    [#include <errno.h>])
+  AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [],
+    [#include <errno.h>])
+  AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>])
+
+  # Incur the cost of this test only if none of the above worked.
+  if test $ac_found = 0; then
+    # On OpenBSD 5.1, using the global __progname variable appears to be
+    # the only way to implement getprogname.
+    AC_CACHE_CHECK([whether __progname is defined in default libraries],
+      [gl_cv_var___progname],
+      [
+        gl_cv_var___progname=
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+            [[extern char *__progname;]],
+            [[return *__progname;]]
+          )],
+          [gl_cv_var___progname=yes]
+        )
+      ]
+    )
+    if test "$gl_cv_var___progname" = yes; then
+      AC_DEFINE([HAVE_VAR___PROGNAME], 1,
+        [Define if you have a global __progname variable])
+    fi
+  fi
+])
diff --git a/m4/getrusage.m4 b/m4/getrusage.m4
new file mode 100644
index 0000000..181fa22
--- /dev/null
+++ b/m4/getrusage.m4
@@ -0,0 +1,14 @@
+# getrusage.m4 serial 1
+dnl Copyright (C) 2012-2019 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_GETRUSAGE],
+[
+  AC_REQUIRE([gl_SYS_RESOURCE_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([getrusage])
+  if test $ac_cv_func_getrusage = no; then
+    HAVE_GETRUSAGE=0
+  fi
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
index 017d025..be247bf 100644
--- a/m4/gettext.m4
+++ b/m4/gettext.m4
@@ -1,5 +1,5 @@
 # gettext.m4 serial 66 (gettext-0.18.2)
-dnl Copyright (C) 1995-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2014 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/m4/gettime.m4 b/m4/gettime.m4
new file mode 100644
index 0000000..60d8ea1
--- /dev/null
+++ b/m4/gettime.m4
@@ -0,0 +1,13 @@
+# gettime.m4 serial 9
+dnl Copyright (C) 2002, 2004-2006, 2009-2019 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_GETTIME],
+[
+  dnl Prerequisites of lib/gettime.c.
+  AC_REQUIRE([gl_CLOCK_TIME])
+  AC_REQUIRE([gl_TIMESPEC])
+  AC_CHECK_FUNCS_ONCE([gettimeofday])
+])
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
new file mode 100644
index 0000000..7eebabd
--- /dev/null
+++ b/m4/gettimeofday.m4
@@ -0,0 +1,128 @@
+# serial 27
+
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2019 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.
+
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
+[
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+  AC_CHECK_FUNCS_ONCE([gettimeofday])
+
+  gl_gettimeofday_timezone=void
+  if test $ac_cv_func_gettimeofday != yes; then
+    HAVE_GETTIMEOFDAY=0
+  else
+    gl_FUNC_GETTIMEOFDAY_CLOBBER
+    AC_CACHE_CHECK([for gettimeofday with POSIX signature],
+      [gl_cv_func_gettimeofday_posix_signature],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <sys/time.h>
+              struct timeval c;
+              int gettimeofday (struct timeval *restrict, void *restrict);
+            ]],
+            [[/* glibc uses struct timezone * rather than the POSIX void *
+                 if _GNU_SOURCE is defined.  However, since the only portable
+                 use of gettimeofday uses NULL as the second parameter, and
+                 since the glibc definition is actually more typesafe, it is
+                 not worth wrapping this to get a compliant signature.  */
+              int (*f) (struct timeval *restrict, void *restrict)
+                = gettimeofday;
+              int x = f (&c, 0);
+              return !(x | c.tv_sec | c.tv_usec);
+            ]])],
+          [gl_cv_func_gettimeofday_posix_signature=yes],
+          [AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+              [[#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+              ]])],
+            [gl_cv_func_gettimeofday_posix_signature=almost],
+            [gl_cv_func_gettimeofday_posix_signature=no])])])
+    if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+      gl_gettimeofday_timezone='struct timezone'
+    elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+      REPLACE_GETTIMEOFDAY=1
+    fi
+    dnl If we override 'struct timeval', we also have to override gettimeofday.
+    if test $REPLACE_STRUCT_TIMEVAL = 1; then
+      REPLACE_GETTIMEOFDAY=1
+    fi
+    dnl On mingw, the original gettimeofday has only a precision of 15.6
+    dnl milliseconds. So override it.
+    case "$host_os" in
+      mingw*) REPLACE_GETTIMEOFDAY=1 ;;
+    esac
+  fi
+  AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
+    [Define this to 'void' or 'struct timezone' to match the system's
+     declaration of the second argument to gettimeofday.])
+])
+
+
+dnl See if gettimeofday clobbers the static buffer that localtime uses
+dnl for its return value.  The gettimeofday function from Mac OS X 10.0.4
+dnl (i.e., Darwin 1.3.7) has this problem.
+dnl
+dnl If it does, then arrange to use gettimeofday and localtime only via
+dnl the wrapper functions that work around the problem.
+
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
+[
+ AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
+
+ AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer],
+  [gl_cv_func_gettimeofday_clobber],
+  [AC_RUN_IFELSE(
+     [AC_LANG_PROGRAM(
+        [[#include <string.h>
+          #include <sys/time.h>
+          #include <time.h>
+          #include <stdlib.h>
+        ]],
+        [[
+          time_t t = 0;
+          struct tm *lt;
+          struct tm saved_lt;
+          struct timeval tv;
+          lt = localtime (&t);
+          saved_lt = *lt;
+          gettimeofday (&tv, NULL);
+          return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+        ]])],
+     [gl_cv_func_gettimeofday_clobber=no],
+     [gl_cv_func_gettimeofday_clobber=yes],
+     [# When cross-compiling:
+      case "$host_os" in
+                       # Guess all is fine on glibc systems.
+        *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # Guess all is fine on musl systems.
+        *-musl*)       gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # Guess no on native Windows.
+        mingw*)        gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                       # If we don't know, obey --enable-cross-guesses.
+        *)             gl_cv_func_gettimeofday_clobber="$gl_cross_guess_inverted" ;;
+      esac
+     ])])
+
+ case "$gl_cv_func_gettimeofday_clobber" in
+   *yes)
+     REPLACE_GETTIMEOFDAY=1
+     AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1],
+       [Define if gettimeofday clobbers the localtime buffer.])
+     gl_LOCALTIME_BUFFER_NEEDED
+     ;;
+ esac
+])
+
+# Prerequisites of lib/gettimeofday.c.
+AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
deleted file mode 100644
index c938fb1..0000000
--- a/m4/glibc21.m4
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
index 15d2b2b..d8f0d3f 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -1,9 +1,11 @@
-# gnulib-common.m4 serial 33
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# gnulib-common.m4 serial 46
+dnl Copyright (C) 2007-2019 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_PREREQ([2.62])
+
 # gl_COMMON
 # is expanded unconditionally through gnulib-tool magic.
 AC_DEFUN([gl_COMMON], [
@@ -14,12 +16,25 @@
 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)
+#ifndef _Noreturn
+# if (defined __cplusplus \
+      && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+          || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+      && 0)
+    /* [[noreturn]] is not practically usable, because with it the syntax
+         extern _Noreturn void func (...);
+       would not be valid; such a declaration would only be valid with 'extern'
+       and '_Noreturn' swapped, or without the 'extern' keyword.  However, some
+       AIX system header files and several gnulib header files use precisely
+       this syntax with 'extern'.  */
+#  define _Noreturn [[noreturn]]
+# elif ((!defined __cplusplus || defined __clang__) \
+        && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0)  \
+            || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)))
+   /* _Noreturn works as-is.  */
+# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C
 #  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
 #  define _Noreturn __declspec (noreturn)
 # else
 #  define _Noreturn
@@ -49,6 +64,16 @@
    is a misnomer outside of parameter lists.  */
 #define _UNUSED_PARAMETER_ _GL_UNUSED
 
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
 /* The __pure__ attribute was added in gcc 2.96.  */
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
@@ -62,7 +87,68 @@
 #else
 # define _GL_ATTRIBUTE_CONST /* empty */
 #endif
+
+/* The __malloc__ attribute was added in gcc 3.  */
+#if 3 <= __GNUC__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC /* empty */
+#endif
 ])
+  AH_VERBATIM([async_safe],
+[/* The _GL_ASYNC_SAFE marker should be attached to functions that are
+   signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
+   invoked from such signal handlers.  Such functions have some restrictions:
+     * All functions that it calls should be marked _GL_ASYNC_SAFE as well,
+       or should be listed as async-signal-safe in POSIX
+       <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04>
+       section 2.4.3.  Note that malloc(), sprintf(), and fwrite(), in
+       particular, are NOT async-signal-safe.
+     * All memory locations (variables and struct fields) that these functions
+       access must be marked 'volatile'.  This holds for both read and write
+       accesses.  Otherwise the compiler might optimize away stores to and
+       reads from such locations that occur in the program, depending on its
+       data flow analysis.  For example, when the program contains a loop
+       that is intended to inspect a variable set from within a signal handler
+           while (!signal_occurred)
+             ;
+       the compiler is allowed to transform this into an endless loop if the
+       variable 'signal_occurred' is not declared 'volatile'.
+   Additionally, recall that:
+     * A signal handler should not modify errno (except if it is a handler
+       for a fatal signal and ends by raising the same signal again, thus
+       provoking the termination of the process).  If it invokes a function
+       that may clobber errno, it needs to save and restore the value of
+       errno.  */
+#define _GL_ASYNC_SAFE
+])
+  dnl Hint which direction to take regarding cross-compilation guesses:
+  dnl When a user installs a program on a platform they are not intimately
+  dnl familiar with, --enable-cross-guesses=conservative is the appropriate
+  dnl choice.  It implements the "If we don't know, assume the worst" principle.
+  dnl However, when an operating system developer (on a platform which is not
+  dnl yet known to gnulib) builds packages for their platform, they want to
+  dnl expose, not hide, possible platform bugs; in this case,
+  dnl --enable-cross-guesses=risky is the appropriate choice.
+  dnl Sets the variables
+  dnl gl_cross_guess_normal    (to be used when 'yes' is good and 'no' is bad),
+  dnl gl_cross_guess_inverted  (to be used when 'no' is good and 'yes' is bad).
+  AC_ARG_ENABLE([cross-guesses],
+    [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}],
+       [specify policy for cross-compilation guesses])],
+    [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then
+       AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses])
+       enableval=conservative
+     fi
+     gl_cross_guesses="$enableval"],
+    [gl_cross_guesses=conservative])
+  if test $gl_cross_guesses = risky; then
+    gl_cross_guess_normal="guessing yes"
+    gl_cross_guess_inverted="guessing no"
+  else
+    gl_cross_guess_normal="guessing no"
+    gl_cross_guess_inverted="guessing yes"
+  fi
   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
@@ -197,13 +283,6 @@
   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.
@@ -216,15 +295,14 @@
 # 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>,
+#   <https://lists.gnu.org/r/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>.
+#   <https://lists.gnu.org/r/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>.
+#   <https://lists.gnu.org/r/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],
 [
@@ -243,9 +321,11 @@
 [
   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 library formats. In particular, the GNU binutils programs ar and ranlib
   dnl produce libraries that work only with gcc, not with cc.
   AC_REQUIRE([AC_PROG_CC])
+  dnl The '][' hides this use from 'aclocal'.
+  AC_BEFORE([$0], [A][M_PROG_AR])
   AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
     [
       AC_EGREP_CPP([Amsterdam],
@@ -257,25 +337,39 @@
         [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
+
+  dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not
+  dnl building with __ACK__.
+  if test $gl_cv_c_amsterdam_compiler = yes; then
+    if test -z "$AR"; 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
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='-o'
     fi
   else
-    if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
-    fi
+    dnl AM_PROG_AR was added in automake v1.11.2.  AM_PROG_AR does not AC_SUBST
+    dnl ARFLAGS variable (it is filed into Makefile.in directly by automake
+    dnl script on-demand, if not specified by ./configure of course).
+    dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above
+    dnl will be ignored.  Also, pay attention to call AM_PROG_AR in else block
+    dnl because AM_PROG_AR is written so it could re-set AR variable even for
+    dnl __ACK__.  It may seem like its easier to avoid calling the macro here,
+    dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
+    dnl default value and automake should usually know them).
+    dnl
+    dnl The '][' hides this use from 'aclocal'.
+    m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:])
   fi
+
+  dnl In case the code above has not helped with setting AR/ARFLAGS, use
+  dnl Automake-documented default values for AR and ARFLAGS, but prefer
+  dnl ${host}-ar over ar (useful for cross-compiling).
+  AC_CHECK_TOOL([AR], [ar], [ar])
+  if test -z "$ARFLAGS"; then
+    ARFLAGS='cr'
+  fi
+
   AC_SUBST([AR])
   AC_SUBST([ARFLAGS])
   if test -z "$RANLIB"; then
@@ -289,42 +383,29 @@
   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],[
+# This definition is copied from post-2.69 Autoconf and overrides the
+# AC_C_RESTRICT macro from autoconf 2.60..2.69.  It can be removed
+# once autoconf >= 2.70 can be assumed.  It's painful to check version
+# numbers, and in practice this macro is more up-to-date than Autoconf
+# is, so override Autoconf unconditionally.
 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_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[typedef int *int_ptr;
+           int foo (int_ptr $ac_kw ip) { return ip[0]; }
+           int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+           int bar (int ip[$ac_kw]) { return ip[0]; }
+         ]],
+         [[int s[1];
+           int *$ac_kw t = s;
+           t[0] = 0;
+           return foo (t) + bar (t);
+         ]])],
       [ac_cv_c_restrict=$ac_kw])
      test "$ac_cv_c_restrict" != no && break
    done
@@ -334,21 +415,21 @@
    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.  */
+/* 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])
  case $ac_cv_c_restrict in
    restrict) ;;
    no) AC_DEFINE([restrict], []) ;;
    *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
  esac
-])
-])
+])# AC_C_RESTRICT
 
 # gl_BIGENDIAN
 # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
@@ -371,3 +452,7 @@
   AC_CACHE_VAL([$1], [$2])
   as_echo_n="$saved_as_echo_n"
 ])
+
+# AS_VAR_COPY was added in autoconf 2.63b
+m4_define_default([AS_VAR_COPY],
+[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 939b4b0..b92ae9f 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -1,5 +1,5 @@
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2019 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
@@ -12,7 +12,7 @@
 # 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/>.
+# along with this file.  If not, see <https://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
@@ -37,24 +37,43 @@
   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
+
+  # Pre-early section.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_REQUIRE([gl_PROG_AR_RANLIB])
+
   AC_REQUIRE([AM_PROG_CC_C_O])
+  # Code from module absolute-header:
+  # Code from module alignof:
   # Code from module alloca-opt:
+  # Code from module allocator:
   # Code from module announce-gen:
+  # Code from module areadlink:
   # Code from module argmatch:
+  # Code from module array-list:
   # Code from module assert:
+  # Code from module assure:
   # Code from module binary-io:
   # Code from module bitrotate:
+  # Code from module bitset:
+  # Code from module bitsetv:
   # Code from module c-ctype:
   # Code from module c-strcase:
   # Code from module c-strcaseeq:
+  # Code from module c99:
   # Code from module calloc-posix:
+  # Code from module canonicalize-lgpl:
+  # Code from module careadlinkat:
+  # Code from module chdir:
+  # Code from module clock-time:
   # Code from module cloexec:
   # Code from module close:
   # Code from module close-stream:
   # Code from module closeout:
+  # Code from module concat-filename:
   # Code from module config-h:
   # Code from module configmake:
+  # Code from module diffseq:
   # Code from module dirname:
   # Code from module dirname-lgpl:
   # Code from module do-release-commit-and-tag:
@@ -66,7 +85,6 @@
   # 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:
@@ -74,6 +92,7 @@
   # Code from module fd-hook:
   # Code from module fd-safer-flag:
   # Code from module fdl:
+  # Code from module filename:
   # Code from module float:
   # Code from module fopen:
   # Code from module fopen-safer:
@@ -86,20 +105,25 @@
   # Code from module frexpl-nolibm:
   # Code from module fseterr:
   # Code from module fstat:
+  # Code from module fstrcmp:
+  # Code from module fsync:
   # Code from module gendocs:
-  # Code from module getdelim:
   # Code from module getdtablesize:
-  # Code from module getline:
+  # Code from module gethrxtime:
   # Code from module getopt-gnu:
   # Code from module getopt-posix:
-  # Code from module gettext:
+  # Code from module getprogname:
+  # Code from module getrusage:
   # Code from module gettext-h:
+  # Code from module gettime:
+  # Code from module gettimeofday:
   # 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 hard-locale:
   # Code from module hash:
   # Code from module havelib:
   # Code from module include_next:
@@ -120,24 +144,32 @@
   AC_REQUIRE([AC_SYS_LARGEFILE])
   # Code from module ldexp:
   # Code from module ldexpl:
+  # Code from module libc-config:
+  # Code from module libtextstyle:
+  # Code from module libtextstyle-optional:
+  # Code from module limits-h:
+  # Code from module list:
   # Code from module localcharset:
+  # Code from module localtime-buffer:
   # Code from module lock:
+  # Code from module lstat:
   # Code from module maintainer-makefile:
   # Code from module malloc-gnu:
   # Code from module malloc-posix:
+  # Code from module malloca:
   # Code from module math:
   # Code from module mbchar:
+  # Code from module mbfile:
   # 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 minmax:
   # Code from module msvc-inval:
   # Code from module msvc-nothrow:
   # Code from module multiarch:
   # Code from module nocrash:
+  # Code from module non-recursive-gnulib-prefix-hack:
   # Code from module obstack:
   # Code from module obstack-printf:
   # Code from module open:
@@ -166,9 +198,17 @@
   # Code from module quotearg-simple:
   # Code from module raise:
   # Code from module rawmemchr:
+  # Code from module readlink:
   # Code from module readme-release:
   # Code from module realloc-posix:
+  # Code from module relocatable-prog:
+  # Code from module relocatable-prog-wrapper:
+  # Code from module relocatable-script:
+  # Code from module rename:
+  # Code from module rmdir:
+  # Code from module same-inode:
   # Code from module sched:
+  # Code from module sh-filename:
   # Code from module sigaction:
   # Code from module signal-h:
   # Code from module signbit:
@@ -185,6 +225,8 @@
   # Code from module sprintf-posix:
   # Code from module ssize_t:
   # Code from module stat:
+  # Code from module stat-time:
+  # Code from module std-gnu11:
   # Code from module stdbool:
   # Code from module stddef:
   # Code from module stdint:
@@ -200,25 +242,32 @@
   # 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_resource:
   # Code from module sys_stat:
+  # Code from module sys_time:
+  # Code from module sys_times:
   # Code from module sys_types:
   # Code from module sys_wait:
   # Code from module threadlib:
   gl_THREADLIB_EARLY
   # Code from module time:
+  # Code from module timespec:
+  # Code from module timevar:
+  # Code from module tls:
   # 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 unlink:
   # 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 vasprintf:
+  # Code from module vasprintf-posix:
   # Code from module vc-list-files:
   # Code from module verify:
   # Code from module vfprintf-posix:
@@ -231,10 +280,21 @@
   # Code from module wchar:
   # Code from module wctype-h:
   # Code from module wcwidth:
+  # Code from module windows-mutex:
+  # Code from module windows-once:
+  # Code from module windows-recmutex:
+  # Code from module windows-rwlock:
+  # Code from module windows-tls:
+  # Code from module winsz-ioctl:
+  # Code from module winsz-termios:
   # Code from module xalloc:
   # Code from module xalloc-die:
   # Code from module xalloc-oversized:
+  # Code from module xconcat-filename:
+  # Code from module xhash:
+  # Code from module xlist:
   # Code from module xmemdup0:
+  # Code from module xreadlink:
   # Code from module xsize:
   # Code from module xstrndup:
 ])
@@ -262,15 +322,22 @@
     AC_LIBOBJ([calloc])
   fi
   gl_STDLIB_MODULE_INDICATOR([calloc-posix])
+  gl_CANONICALIZE_LGPL
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    AC_LIBOBJ([canonicalize-lgpl])
+  fi
+  gl_MODULE_INDICATOR([canonicalize-lgpl])
+  gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name])
+  gl_STDLIB_MODULE_INDICATOR([realpath])
+  AC_CHECK_FUNCS_ONCE([readlinkat])
+  gl_CLOCK_TIME
   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
@@ -318,9 +385,8 @@
   gl_STDIO_MODULE_INDICATOR([fopen])
   gl_MODULE_INDICATOR([fopen-safer])
   gl_FUNC_FPENDING
-  if test $ac_cv_func___fpending = no; then
+  if test $gl_cv_func___fpending = no; then
     AC_LIBOBJ([fpending])
-    gl_PREREQ_FPENDING
   fi
   gl_FUNC_FPRINTF_POSIX
   gl_STDIO_MODULE_INDICATOR([fprintf-posix])
@@ -334,57 +400,40 @@
     AC_LIBOBJ([frexpl])
   fi
   gl_MATH_MODULE_INDICATOR([frexpl])
-  gl_FUNC_FSETERR
-  if test $ac_cv_func___fseterr = no; then
-    AC_LIBOBJ([fseterr])
+  gl_FUNC_FSYNC
+  if test $HAVE_FSYNC = 0; then
+    AC_LIBOBJ([fsync])
+    gl_PREREQ_FSYNC
   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_UNISTD_MODULE_INDICATOR([fsync])
+  gl_GETHRXTIME
   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])
+  dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required
+  dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are
+  dnl done in the getopt-posix module.
   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])
+  gl_FUNC_GETPROGNAME
+  gl_FUNC_GETRUSAGE
+  if test $HAVE_GETRUSAGE = 0; then
+    AC_LIBOBJ([getrusage])
+  fi
+  gl_SYS_RESOURCE_MODULE_INDICATOR([getrusage])
   AC_SUBST([LIBINTL])
   AC_SUBST([LTLIBINTL])
+  gl_GETTIME
+  gl_FUNC_GETTIMEOFDAY
+  if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
+    AC_LIBOBJ([gettimeofday])
+    gl_PREREQ_GETTIMEOFDAY
+  fi
+  gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
   # 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.
@@ -422,11 +471,6 @@
     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])
@@ -455,18 +499,24 @@
   # 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_LIBTEXTSTYLE
+  gl_LIBTEXTSTYLE_OPTIONAL
+  gl_LIMITS_H
   gl_LOCALCHARSET
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+  dnl For backward compatibility. Some packages still use this.
+  LOCALCHARSET_TESTS_ENVIRONMENT=
   AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
   gl_LOCK
+  gl_MODULE_INDICATOR([lock])
   AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
     [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+  AC_REQUIRE([AC_PROG_SED])
+  AC_REQUIRE([AC_PROG_GREP])
   gl_FUNC_MALLOC_GNU
   if test $REPLACE_MALLOC = 1; then
     AC_LIBOBJ([malloc])
@@ -479,37 +529,45 @@
   gl_STDLIB_MODULE_INDICATOR([malloc-posix])
   gl_MATH_H
   gl_MBCHAR
+  gl_MBFILE
   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
+  gl_MINMAX
+  AC_REQUIRE([gl_MSVC_INVAL])
   if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
     AC_LIBOBJ([msvc-inval])
   fi
-  gl_MSVC_NOTHROW
+  AC_REQUIRE([gl_MSVC_NOTHROW])
   if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
     AC_LIBOBJ([msvc-nothrow])
   fi
+  gl_MODULE_INDICATOR([msvc-nothrow])
   gl_MULTIARCH
+  dnl Run our hack near the end, just before config.status creation.
+  dnl It must happen late, i.e., after gl_LIBOBJS has been finalized.
+  AC_CONFIG_COMMANDS_PRE([
+    dnl Note we can't currently pass $gl_source_base instead of 'lib',
+    dnl because $gl_source_base is unset or the wrong value in the references
+    dnl generated in m4/non-recursive-gnulib-prefix-hack.m4
+    gl_NON_RECURSIVE_GNULIB_PREFIX_HACK([lib])
+    ])
   AC_FUNC_OBSTACK
   dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]).
   gl_FUNC_OBSTACK_PRINTF
@@ -533,17 +591,17 @@
   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
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || 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
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || 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
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
     AC_LIBOBJ([spawn_faction_addopen])
   fi
   gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen])
@@ -580,8 +638,6 @@
   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
@@ -599,17 +655,35 @@
     gl_PREREQ_RAISE
   fi
   gl_SIGNAL_MODULE_INDICATOR([raise])
-  gl_FUNC_RAWMEMCHR
-  if test $HAVE_RAWMEMCHR = 0; then
-    AC_LIBOBJ([rawmemchr])
-    gl_PREREQ_RAWMEMCHR
+  gl_FUNC_READLINK
+  if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+    AC_LIBOBJ([readlink])
+    gl_PREREQ_READLINK
   fi
-  gl_STRING_MODULE_INDICATOR([rawmemchr])
+  gl_UNISTD_MODULE_INDICATOR([readlink])
   gl_FUNC_REALLOC_POSIX
   if test $REPLACE_REALLOC = 1; then
     AC_LIBOBJ([realloc])
   fi
   gl_STDLIB_MODULE_INDICATOR([realloc-posix])
+  gl_RELOCATABLE([$gl_source_base])
+  if test $RELOCATABLE = yes; then
+    AC_LIBOBJ([progreloc])
+    AC_LIBOBJ([relocatable])
+  fi
+  gl_FUNC_READLINK_SEPARATE
+  gl_CANONICALIZE_LGPL_SEPARATE
+  gl_MALLOCA
+  gl_RELOCATABLE_LIBRARY
+  gl_FUNC_SETENV_SEPARATE
+  AC_REQUIRE([gl_RELOCATABLE_NOP])
+  relocatable_sh=$ac_aux_dir/relocatable.sh.in
+  AC_SUBST_FILE([relocatable_sh])
+  gl_FUNC_RENAME
+  if test $REPLACE_RENAME = 1; then
+    AC_LIBOBJ([rename])
+  fi
+  gl_STDIO_MODULE_INDICATOR([rename])
   gl_SCHED_H
   gl_SIGACTION
   if test $HAVE_SIGACTION = 0; then
@@ -641,12 +715,6 @@
   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
@@ -658,12 +726,6 @@
     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])
@@ -676,53 +738,42 @@
   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
+  gl_HEADER_SYS_RESOURCE
+  AC_PROG_MKDIR_P
+  gl_HEADER_SYS_TIME_H
+  AC_PROG_MKDIR_P
+  gl_SYS_TIMES_H
   AC_PROG_MKDIR_P
   gl_SYS_TYPES_H
   AC_PROG_MKDIR_P
   gl_SYS_WAIT_H
   AC_PROG_MKDIR_P
-  gl_THREADLIB
+  AC_REQUIRE([gl_THREADLIB])
   gl_HEADER_TIME_H
+  gl_TIMESPEC
+  gl_TLS
   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_LIBUNISTRING_LIBHEADER([0.9.4], [unitypes.h])
+  gl_LIBUNISTRING_LIBHEADER([0.9.4], [uniwidth.h])
+  gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/width])
+  gl_FUNC_UNLINK
+  if test $REPLACE_UNLINK = 1; then
+    AC_LIBOBJ([unlink])
+  fi
+  gl_UNISTD_MODULE_INDICATOR([unlink])
   gl_FUNC_GLIBC_UNLOCKED_IO
   gl_FUNC_UNSETENV
   if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
@@ -731,8 +782,12 @@
   fi
   gl_STDLIB_MODULE_INDICATOR([unsetenv])
   gl_FUNC_VASNPRINTF
-  gl_FUNC_VFPRINTF_POSIX
-  gl_STDIO_MODULE_INDICATOR([vfprintf-posix])
+  gl_FUNC_VASPRINTF
+  gl_STDIO_MODULE_INDICATOR([vasprintf])
+  m4_ifdef([AM_XGETTEXT_OPTION],
+    [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format])
+     AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])])
+  gl_FUNC_VASPRINTF_POSIX
   gl_FUNC_VSNPRINTF
   gl_STDIO_MODULE_INDICATOR([vsnprintf])
   gl_FUNC_VSNPRINTF_POSIX
@@ -749,12 +804,520 @@
   gl_FUNC_WCWIDTH
   if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
     AC_LIBOBJ([wcwidth])
+    gl_PREREQ_WCWIDTH
   fi
   gl_WCHAR_MODULE_INDICATOR([wcwidth])
+  gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
+  gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H
+  gl_WINSIZE_IN_PTEM
   gl_XALLOC
   AC_LIBOBJ([xmemdup0])
   gl_XSIZE
   gl_XSTRNDUP
+  gl_gnulib_enabled_chdir=false
+  gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239=false
+  gl_gnulib_enabled_fseterr=false
+  gl_gnulib_enabled_fstat=false
+  gl_gnulib_enabled_getdtablesize=false
+  gl_gnulib_enabled_30838f5439487421042f2225bed3af76=false
+  gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=false
+  gl_gnulib_enabled_ldexp=false
+  gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467=false
+  gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9=false
+  gl_gnulib_enabled_lstat=false
+  gl_gnulib_enabled_malloca=false
+  gl_gnulib_enabled_332607f759618fb73dfc3076748afea7=false
+  gl_gnulib_enabled_rawmemchr=false
+  gl_gnulib_enabled_rmdir=false
+  gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62=false
+  gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70=false
+  gl_gnulib_enabled_stat=false
+  gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c=false
+  gl_gnulib_enabled_strchrnul=false
+  gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72=false
+  gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a=false
+  gl_gnulib_enabled_strnlen=false
+  gl_gnulib_enabled_sys_stat=false
+  gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=false
+  gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440=false
+  gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab=false
+  gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354=false
+  gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef=false
+  gl_gnulib_enabled_48b2271240803e4879464b755748a89d=false
+  func_gl_gnulib_m4code_chdir ()
+  {
+    if ! $gl_gnulib_enabled_chdir; then
+      gl_UNISTD_MODULE_INDICATOR([chdir])
+      gl_gnulib_enabled_chdir=true
+    fi
+  }
+  func_gl_gnulib_m4code_43fe87a341d9b4b93c47c3ad819a5239 ()
+  {
+    if ! $gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239; then
+      gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239=true
+    fi
+  }
+  func_gl_gnulib_m4code_fseterr ()
+  {
+    if ! $gl_gnulib_enabled_fseterr; then
+      gl_FUNC_FSETERR
+      if test $ac_cv_func___fseterr = no; then
+        AC_LIBOBJ([fseterr])
+      fi
+      gl_gnulib_enabled_fseterr=true
+    fi
+  }
+  func_gl_gnulib_m4code_fstat ()
+  {
+    if ! $gl_gnulib_enabled_fstat; then
+      gl_FUNC_FSTAT
+      if test $REPLACE_FSTAT = 1; then
+        AC_LIBOBJ([fstat])
+        case "$host_os" in
+          mingw*)
+            AC_LIBOBJ([stat-w32])
+            ;;
+        esac
+        gl_PREREQ_FSTAT
+      fi
+      gl_SYS_STAT_MODULE_INDICATOR([fstat])
+      gl_gnulib_enabled_fstat=true
+      if test $REPLACE_FSTAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_getdtablesize ()
+  {
+    if ! $gl_gnulib_enabled_getdtablesize; then
+      gl_FUNC_GETDTABLESIZE
+      if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
+        AC_LIBOBJ([getdtablesize])
+        gl_PREREQ_GETDTABLESIZE
+      fi
+      gl_UNISTD_MODULE_INDICATOR([getdtablesize])
+      gl_gnulib_enabled_getdtablesize=true
+    fi
+  }
+  func_gl_gnulib_m4code_30838f5439487421042f2225bed3af76 ()
+  {
+    if ! $gl_gnulib_enabled_30838f5439487421042f2225bed3af76; then
+      gl_gnulib_enabled_30838f5439487421042f2225bed3af76=true
+    fi
+  }
+  func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66 ()
+  {
+    if ! $gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66; then
+      gl_FUNC_ISNANF_NO_LIBM
+      if test $gl_func_isnanf_no_libm != yes; then
+        AC_LIBOBJ([isnanf])
+        gl_PREREQ_ISNANF
+      fi
+      gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=true
+    fi
+  }
+  func_gl_gnulib_m4code_ldexp ()
+  {
+    if ! $gl_gnulib_enabled_ldexp; then
+      gl_FUNC_LDEXP
+      gl_gnulib_enabled_ldexp=true
+    fi
+  }
+  func_gl_gnulib_m4code_21ee726a3540c09237a8e70c0baf7467 ()
+  {
+    if ! $gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467; then
+      gl___INLINE
+      gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467=true
+    fi
+  }
+  func_gl_gnulib_m4code_2049e887c7e5308faad27b3f894bb8c9 ()
+  {
+    if ! $gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9; then
+      AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
+      AC_LIBOBJ([localtime-buffer])
+      gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9=true
+    fi
+  }
+  func_gl_gnulib_m4code_lstat ()
+  {
+    if ! $gl_gnulib_enabled_lstat; then
+      gl_FUNC_LSTAT
+      if test $REPLACE_LSTAT = 1; then
+        AC_LIBOBJ([lstat])
+        gl_PREREQ_LSTAT
+      fi
+      gl_SYS_STAT_MODULE_INDICATOR([lstat])
+      gl_gnulib_enabled_lstat=true
+      if test $REPLACE_LSTAT = 1; then
+        func_gl_gnulib_m4code_stat
+      fi
+      if test $REPLACE_LSTAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_malloca ()
+  {
+    if ! $gl_gnulib_enabled_malloca; then
+      gl_MALLOCA
+      gl_gnulib_enabled_malloca=true
+    fi
+  }
+  func_gl_gnulib_m4code_332607f759618fb73dfc3076748afea7 ()
+  {
+    if ! $gl_gnulib_enabled_332607f759618fb73dfc3076748afea7; then
+      gl_POSIX_SPAWN
+      if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+        AC_LIBOBJ([spawni])
+        gl_PREREQ_POSIX_SPAWN_INTERNAL
+      fi
+      gl_gnulib_enabled_332607f759618fb73dfc3076748afea7=true
+      func_gl_gnulib_m4code_cdeb0f2aaf9d280baa6526bfa1b07f70
+      func_gl_gnulib_m4code_strchrnul
+    fi
+  }
+  func_gl_gnulib_m4code_rawmemchr ()
+  {
+    if ! $gl_gnulib_enabled_rawmemchr; then
+      gl_FUNC_RAWMEMCHR
+      if test $HAVE_RAWMEMCHR = 0; then
+        AC_LIBOBJ([rawmemchr])
+        gl_PREREQ_RAWMEMCHR
+      fi
+      gl_STRING_MODULE_INDICATOR([rawmemchr])
+      gl_gnulib_enabled_rawmemchr=true
+    fi
+  }
+  func_gl_gnulib_m4code_rmdir ()
+  {
+    if ! $gl_gnulib_enabled_rmdir; then
+      gl_FUNC_RMDIR
+      if test $REPLACE_RMDIR = 1; then
+        AC_LIBOBJ([rmdir])
+      fi
+      gl_UNISTD_MODULE_INDICATOR([rmdir])
+      gl_gnulib_enabled_rmdir=true
+      if test $REPLACE_RMDIR = 1; then
+        func_gl_gnulib_m4code_sys_stat
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_9bc5f216d57e231e4834049d67d0db62 ()
+  {
+    if ! $gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62; then
+      gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62=true
+    fi
+  }
+  func_gl_gnulib_m4code_cdeb0f2aaf9d280baa6526bfa1b07f70 ()
+  {
+    if ! $gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70; then
+      gl_SH_FILENAME
+      gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70=true
+    fi
+  }
+  func_gl_gnulib_m4code_stat ()
+  {
+    if ! $gl_gnulib_enabled_stat; then
+      gl_FUNC_STAT
+      if test $REPLACE_STAT = 1; then
+        AC_LIBOBJ([stat])
+        case "$host_os" in
+          mingw*)
+            AC_LIBOBJ([stat-w32])
+            ;;
+        esac
+        gl_PREREQ_STAT
+      fi
+      gl_SYS_STAT_MODULE_INDICATOR([stat])
+      gl_gnulib_enabled_stat=true
+      if test $REPLACE_STAT = 1; then
+        func_gl_gnulib_m4code_malloca
+      fi
+      if test $REPLACE_STAT = 1; then
+        func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c
+      fi
+      func_gl_gnulib_m4code_sys_stat
+    fi
+  }
+  func_gl_gnulib_m4code_0137e3d3638b33e5819d132d0b23165c ()
+  {
+    if ! $gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c; then
+      gl_STAT_TIME
+      gl_STAT_BIRTHTIME
+      gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c=true
+    fi
+  }
+  func_gl_gnulib_m4code_strchrnul ()
+  {
+    if ! $gl_gnulib_enabled_strchrnul; then
+      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_gnulib_enabled_strchrnul=true
+      if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then
+        func_gl_gnulib_m4code_rawmemchr
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72 ()
+  {
+    if ! $gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72; then
+      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_gnulib_enabled_dbb57f49352be8fb86869629a254fb72=true
+    fi
+  }
+  func_gl_gnulib_m4code_1f32594a85e6221ba15f884daeee8c2a ()
+  {
+    if ! $gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a; then
+      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])
+      dnl For the modules argp, error.
+      gl_MODULE_INDICATOR([strerror_r-posix])
+      gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a=true
+      if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then
+        func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_strnlen ()
+  {
+    if ! $gl_gnulib_enabled_strnlen; then
+      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_gnulib_enabled_strnlen=true
+    fi
+  }
+  func_gl_gnulib_m4code_sys_stat ()
+  {
+    if ! $gl_gnulib_enabled_sys_stat; then
+      gl_HEADER_SYS_STAT_H
+      AC_PROG_MKDIR_P
+      gl_gnulib_enabled_sys_stat=true
+    fi
+  }
+  func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b ()
+  {
+    if ! $gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b; then
+      gl_FUNC_VFPRINTF_POSIX
+      gl_STDIO_MODULE_INDICATOR([vfprintf-posix])
+      gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=true
+      if test $REPLACE_VFPRINTF = 1; then
+        func_gl_gnulib_m4code_fseterr
+      fi
+    fi
+  }
+  func_gl_gnulib_m4code_503a4cb75d69c787103d0aa2ab7d8440 ()
+  {
+    if ! $gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440; then
+      AC_REQUIRE([AC_CANONICAL_HOST])
+      case "$host_os" in
+        mingw*)
+          AC_LIBOBJ([windows-mutex])
+          ;;
+      esac
+      gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440=true
+    fi
+  }
+  func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab ()
+  {
+    if ! $gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab; then
+      AC_REQUIRE([AC_CANONICAL_HOST])
+      case "$host_os" in
+        mingw*)
+          AC_LIBOBJ([windows-once])
+          ;;
+      esac
+      gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab=true
+    fi
+  }
+  func_gl_gnulib_m4code_f0efff84a70f4afba30902bb8ffe9354 ()
+  {
+    if ! $gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354; then
+      AC_REQUIRE([AC_CANONICAL_HOST])
+      case "$host_os" in
+        mingw*)
+          AC_LIBOBJ([windows-recmutex])
+          ;;
+      esac
+      gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354=true
+    fi
+  }
+  func_gl_gnulib_m4code_8bb827fe37eaccf1b97feb0c87bc92ef ()
+  {
+    if ! $gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef; then
+      AC_REQUIRE([AC_CANONICAL_HOST])
+      case "$host_os" in
+        mingw*)
+          AC_LIBOBJ([windows-rwlock])
+          ;;
+      esac
+      gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef=true
+    fi
+  }
+  func_gl_gnulib_m4code_48b2271240803e4879464b755748a89d ()
+  {
+    if ! $gl_gnulib_enabled_48b2271240803e4879464b755748a89d; then
+      AC_REQUIRE([AC_CANONICAL_HOST])
+      case "$host_os" in
+        mingw*)
+          AC_LIBOBJ([windows-tls])
+          ;;
+      esac
+      gl_gnulib_enabled_48b2271240803e4879464b755748a89d=true
+      func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab
+    fi
+  }
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_malloca
+  fi
+  if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+    func_gl_gnulib_m4code_sys_stat
+  fi
+  if test $REPLACE_CLOSE = 1; then
+    func_gl_gnulib_m4code_43fe87a341d9b4b93c47c3ad819a5239
+  fi
+  if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $REPLACE_FOPEN = 1; then
+    func_gl_gnulib_m4code_fstat
+  fi
+  if test $REPLACE_FPRINTF = 1; then
+    func_gl_gnulib_m4code_fseterr
+  fi
+  if test $NEED_LOCALTIME_BUFFER = 1; then
+    func_gl_gnulib_m4code_2049e887c7e5308faad27b3f894bb8c9
+  fi
+  if { test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+    func_gl_gnulib_m4code_ldexp
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_503a4cb75d69c787103d0aa2ab7d8440
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_68a4501daeca58988392c7e60b4917ab
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_f0efff84a70f4afba30902bb8ffe9354
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_8bb827fe37eaccf1b97feb0c87bc92ef
+  fi
+  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+    func_gl_gnulib_m4code_30838f5439487421042f2225bed3af76
+  fi
+  if test $REPLACE_OPEN = 1; then
+    func_gl_gnulib_m4code_fstat
+  fi
+  if test $REPLACE_OPEN = 1; then
+    func_gl_gnulib_m4code_stat
+  fi
+  if test $REPLACE_PERROR = 1; then
+    func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+  fi
+  if test $REPLACE_PERROR = 1; then
+    func_gl_gnulib_m4code_1f32594a85e6221ba15f884daeee8c2a
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then
+    func_gl_gnulib_m4code_getdtablesize
+  fi
+  if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then
+    func_gl_gnulib_m4code_332607f759618fb73dfc3076748afea7
+  fi
+  if test $REPLACE_PRINTF = 1; then
+    func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b
+  fi
+  if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+    func_gl_gnulib_m4code_stat
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_chdir
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_rmdir
+  fi
+  if test $REPLACE_RENAME = 1; then
+    func_gl_gnulib_m4code_9bc5f216d57e231e4834049d67d0db62
+  fi
+  if test $REPLACE_SIGNBIT = 1; then
+    func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66
+  fi
+  if test $REPLACE_STRERROR = 1; then
+    func_gl_gnulib_m4code_dbb57f49352be8fb86869629a254fb72
+  fi
+  if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then
+    func_gl_gnulib_m4code_strnlen
+  fi
+  if test $HAVE_STRVERSCMP = 0; then
+    func_gl_gnulib_m4code_21ee726a3540c09237a8e70c0baf7467
+  fi
+  if test $gl_threads_api = windows; then
+    func_gl_gnulib_m4code_48b2271240803e4879464b755748a89d
+  fi
+  if test $REPLACE_UNLINK = 1; then
+    func_gl_gnulib_m4code_lstat
+  fi
+  m4_pattern_allow([^gl_GNULIB_ENABLED_])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_chdir], [$gl_gnulib_enabled_chdir])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_43fe87a341d9b4b93c47c3ad819a5239], [$gl_gnulib_enabled_43fe87a341d9b4b93c47c3ad819a5239])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_fseterr], [$gl_gnulib_enabled_fseterr])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_fstat], [$gl_gnulib_enabled_fstat])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_30838f5439487421042f2225bed3af76], [$gl_gnulib_enabled_30838f5439487421042f2225bed3af76])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66], [$gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_ldexp], [$gl_gnulib_enabled_ldexp])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_21ee726a3540c09237a8e70c0baf7467], [$gl_gnulib_enabled_21ee726a3540c09237a8e70c0baf7467])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9], [$gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_lstat], [$gl_gnulib_enabled_lstat])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_malloca], [$gl_gnulib_enabled_malloca])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_332607f759618fb73dfc3076748afea7], [$gl_gnulib_enabled_332607f759618fb73dfc3076748afea7])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_rawmemchr], [$gl_gnulib_enabled_rawmemchr])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_rmdir], [$gl_gnulib_enabled_rmdir])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_9bc5f216d57e231e4834049d67d0db62], [$gl_gnulib_enabled_9bc5f216d57e231e4834049d67d0db62])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_cdeb0f2aaf9d280baa6526bfa1b07f70], [$gl_gnulib_enabled_cdeb0f2aaf9d280baa6526bfa1b07f70])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_0137e3d3638b33e5819d132d0b23165c], [$gl_gnulib_enabled_0137e3d3638b33e5819d132d0b23165c])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_strchrnul], [$gl_gnulib_enabled_strchrnul])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_dbb57f49352be8fb86869629a254fb72], [$gl_gnulib_enabled_dbb57f49352be8fb86869629a254fb72])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_1f32594a85e6221ba15f884daeee8c2a], [$gl_gnulib_enabled_1f32594a85e6221ba15f884daeee8c2a])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_strnlen], [$gl_gnulib_enabled_strnlen])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_sys_stat], [$gl_gnulib_enabled_sys_stat])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b], [$gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_503a4cb75d69c787103d0aa2ab7d8440], [$gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_68a4501daeca58988392c7e60b4917ab], [$gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_f0efff84a70f4afba30902bb8ffe9354], [$gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_8bb827fe37eaccf1b97feb0c87bc92ef], [$gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_48b2271240803e4879464b755748a89d], [$gl_gnulib_enabled_48b2271240803e4879464b755748a89d])
   # End of code from modules
   m4_ifval(gl_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
@@ -801,6 +1364,7 @@
   AC_SUBST([gltests_WITNESS])
   gl_module_indicator_condition=$gltests_WITNESS
   m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  m4_pattern_allow([^gl_GNULIB_ENABLED_])
   m4_popdef([gl_MODULE_INDICATOR_CONDITION])
   m4_ifval(gltests_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
@@ -896,6 +1460,7 @@
 # gnulib-tool and may be removed by future gnulib-tool invocations.
 AC_DEFUN([gl_FILE_LIST], [
   build-aux/announce-gen
+  build-aux/config.libpath
   build-aux/config.rpath
   build-aux/do-release-commit-and-tag
   build-aux/gendocs.sh
@@ -903,28 +1468,56 @@
   build-aux/gitlog-to-changelog
   build-aux/gnu-web-doc-update
   build-aux/gnupload
+  build-aux/install-reloc
   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/libtool-reloc
+  build-aux/prefix-gnulib-mk
+  build-aux/reloc-ldflags
+  build-aux/relocatable.sh.in
   build-aux/update-copyright
   build-aux/useless-if-before-free
   build-aux/vc-list-files
   doc/fdl.texi
   doc/gendocs_template
+  doc/gendocs_template_min
   doc/gpl-3.0.texi
+  doc/relocatable.texi
+  lib/_Noreturn.h
+  lib/alignof.h
   lib/alloca.in.h
+  lib/allocator.c
+  lib/allocator.h
+  lib/areadlink.c
+  lib/areadlink.h
+  lib/arg-nonnull.h
   lib/argmatch.c
   lib/argmatch.h
   lib/asnprintf.c
+  lib/asprintf.c
+  lib/assure.h
   lib/basename-lgpl.c
   lib/basename.c
   lib/binary-io.c
   lib/binary-io.h
   lib/bitrotate.c
   lib/bitrotate.h
+  lib/bitset.c
+  lib/bitset.h
+  lib/bitset/array.c
+  lib/bitset/array.h
+  lib/bitset/base.h
+  lib/bitset/list.c
+  lib/bitset/list.h
+  lib/bitset/stats.c
+  lib/bitset/stats.h
+  lib/bitset/table.c
+  lib/bitset/table.h
+  lib/bitset/vector.c
+  lib/bitset/vector.h
+  lib/bitsetv.c
+  lib/bitsetv.h
+  lib/c++defs.h
   lib/c-ctype.c
   lib/c-ctype.h
   lib/c-strcase.h
@@ -932,6 +1525,10 @@
   lib/c-strcaseeq.h
   lib/c-strncasecmp.c
   lib/calloc.c
+  lib/canonicalize-lgpl.c
+  lib/careadlinkat.c
+  lib/careadlinkat.h
+  lib/cdefs.h
   lib/cloexec.c
   lib/cloexec.h
   lib/close-stream.c
@@ -939,7 +1536,9 @@
   lib/close.c
   lib/closeout.c
   lib/closeout.h
-  lib/config.charset
+  lib/concat-filename.c
+  lib/concat-filename.h
+  lib/diffseq.h
   lib/dirname-lgpl.c
   lib/dirname.c
   lib/dirname.h
@@ -960,6 +1559,7 @@
   lib/fd-hook.h
   lib/fd-safer-flag.c
   lib/fd-safer.c
+  lib/filename.h
   lib/float+.h
   lib/float.c
   lib/float.in.h
@@ -974,17 +1574,40 @@
   lib/fseterr.c
   lib/fseterr.h
   lib/fstat.c
-  lib/getdelim.c
+  lib/fstrcmp.c
+  lib/fstrcmp.h
+  lib/fsync.c
   lib/getdtablesize.c
-  lib/getline.c
+  lib/gethrxtime.c
+  lib/gethrxtime.h
+  lib/getopt-cdefs.in.h
+  lib/getopt-core.h
+  lib/getopt-ext.h
+  lib/getopt-pfx-core.h
+  lib/getopt-pfx-ext.h
   lib/getopt.c
   lib/getopt.in.h
   lib/getopt1.c
   lib/getopt_int.h
+  lib/getprogname.c
+  lib/getprogname.h
+  lib/getrusage.c
   lib/gettext.h
+  lib/gettime.c
+  lib/gettimeofday.c
+  lib/gl_array_list.c
+  lib/gl_array_list.h
+  lib/gl_list.c
+  lib/gl_list.h
+  lib/gl_xlist.c
+  lib/gl_xlist.h
   lib/glthread/lock.c
   lib/glthread/lock.h
   lib/glthread/threadlib.c
+  lib/glthread/tls.c
+  lib/glthread/tls.h
+  lib/hard-locale.c
+  lib/hard-locale.h
   lib/hash.c
   lib/hash.h
   lib/intprops.h
@@ -999,23 +1622,29 @@
   lib/iswblank.c
   lib/itold.c
   lib/ldexpl.c
+  lib/libc-config.h
+  lib/limits.in.h
   lib/localcharset.c
   lib/localcharset.h
+  lib/localtime-buffer.c
+  lib/localtime-buffer.h
+  lib/lstat.c
   lib/malloc.c
+  lib/malloca.c
+  lib/malloca.h
   lib/math.c
   lib/math.in.h
   lib/mbchar.c
   lib/mbchar.h
+  lib/mbfile.c
+  lib/mbfile.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/minmax.h
   lib/msvc-inval.c
   lib/msvc-inval.h
   lib/msvc-nothrow.c
@@ -1040,16 +1669,23 @@
   lib/printf.c
   lib/progname.c
   lib/progname.h
+  lib/progreloc.c
   lib/quote.h
   lib/quotearg.c
   lib/quotearg.h
   lib/raise.c
   lib/rawmemchr.c
   lib/rawmemchr.valgrind
+  lib/readlink.c
   lib/realloc.c
-  lib/ref-add.sin
-  lib/ref-del.sin
+  lib/relocatable.c
+  lib/relocatable.h
+  lib/relocwrapper.c
+  lib/rename.c
+  lib/rmdir.c
+  lib/same-inode.h
   lib/sched.in.h
+  lib/setenv.c
   lib/sig-handler.c
   lib/sig-handler.h
   lib/sigaction.c
@@ -1076,6 +1712,10 @@
   lib/spawni.c
   lib/spawnp.c
   lib/sprintf.c
+  lib/stat-time.c
+  lib/stat-time.h
+  lib/stat-w32.c
+  lib/stat-w32.h
   lib/stat.c
   lib/stdbool.in.h
   lib/stddef.in.h
@@ -1083,7 +1723,6 @@
   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
@@ -1099,15 +1738,19 @@
   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_resource.in.h
   lib/sys_stat.in.h
+  lib/sys_time.in.h
+  lib/sys_times.in.h
   lib/sys_types.in.h
   lib/sys_wait.in.h
+  lib/textstyle.in.h
   lib/time.in.h
+  lib/timespec.c
+  lib/timespec.h
+  lib/timevar.c
+  lib/timevar.h
   lib/unistd--.h
   lib/unistd-safer.h
   lib/unistd.c
@@ -1116,10 +1759,12 @@
   lib/uniwidth.in.h
   lib/uniwidth/cjk.h
   lib/uniwidth/width.c
+  lib/unlink.c
   lib/unlocked-io.h
   lib/unsetenv.c
   lib/vasnprintf.c
   lib/vasnprintf.h
+  lib/vasprintf.c
   lib/verify.h
   lib/vfprintf.c
   lib/vsnprintf.c
@@ -1128,34 +1773,55 @@
   lib/wait-process.c
   lib/wait-process.h
   lib/waitpid.c
+  lib/warn-on-use.h
   lib/wchar.in.h
   lib/wctype-h.c
   lib/wctype.in.h
   lib/wcwidth.c
+  lib/windows-initguard.h
+  lib/windows-mutex.c
+  lib/windows-mutex.h
+  lib/windows-once.c
+  lib/windows-once.h
+  lib/windows-recmutex.c
+  lib/windows-recmutex.h
+  lib/windows-rwlock.c
+  lib/windows-rwlock.h
+  lib/windows-tls.c
+  lib/windows-tls.h
   lib/xalloc-die.c
   lib/xalloc-oversized.h
   lib/xalloc.h
+  lib/xconcat-filename.c
+  lib/xhash.c
   lib/xmalloc.c
   lib/xmemdup0.c
   lib/xmemdup0.h
+  lib/xreadlink.c
+  lib/xreadlink.h
   lib/xsize.c
   lib/xsize.h
   lib/xstrndup.c
   lib/xstrndup.h
+  lib/xtime.c
+  lib/xtime.h
   m4/00gnulib.m4
+  m4/__inline.m4
+  m4/absolute-header.m4
   m4/alloca.m4
   m4/asm-underscore.m4
   m4/assert.m4
   m4/calloc.m4
-  m4/close-stream.m4
+  m4/canonicalize.m4
+  m4/clock_time.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/eealloc.m4
   m4/environ.m4
   m4/errno_h.m4
   m4/error.m4
@@ -1177,21 +1843,17 @@
   m4/frexpl.m4
   m4/fseterr.m4
   m4/fstat.m4
-  m4/getdelim.m4
+  m4/fsync.m4
   m4/getdtablesize.m4
-  m4/getline.m4
+  m4/gethrxtime.m4
   m4/getopt.m4
-  m4/gettext.m4
-  m4/glibc2.m4
-  m4/glibc21.m4
+  m4/getprogname.m4
+  m4/getrusage.m4
+  m4/gettime.m4
+  m4/gettimeofday.m4
   m4/gnulib-common.m4
-  m4/iconv.m4
+  m4/host-cpu-c-abi.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
@@ -1203,57 +1865,72 @@
   m4/iswblank.m4
   m4/javacomp.m4
   m4/javaexec.m4
+  m4/jm-winsz1.m4
+  m4/jm-winsz2.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/libtextstyle-optional.m4
+  m4/libtextstyle.m4
   m4/libunistring-base.m4
+  m4/limits-h.m4
   m4/localcharset.m4
   m4/locale-fr.m4
   m4/locale-ja.m4
   m4/locale-zh.m4
+  m4/localtime-buffer.m4
   m4/lock.m4
   m4/longlong.m4
+  m4/lstat.m4
   m4/malloc.m4
+  m4/malloca.m4
   m4/math_h.m4
   m4/mbchar.m4
-  m4/mbiter.m4
+  m4/mbfile.m4
   m4/mbrtowc.m4
   m4/mbsinit.m4
   m4/mbstate_t.m4
   m4/mbswidth.m4
   m4/memchr.m4
+  m4/minmax.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/non-recursive-gnulib-prefix-hack.m4
   m4/obstack-printf.m4
+  m4/obstack.m4
   m4/off_t.m4
+  m4/open-cloexec.m4
+  m4/open-slash.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/pthread_rwlock_rdlock.m4
   m4/quote.m4
   m4/quotearg.m4
   m4/raise.m4
   m4/rawmemchr.m4
+  m4/readlink.m4
   m4/realloc.m4
+  m4/relocatable-lib.m4
+  m4/relocatable.m4
+  m4/rename.m4
+  m4/rmdir.m4
   m4/sched_h.m4
   m4/setenv.m4
+  m4/sh-filename.m4
   m4/sig_atomic_t.m4
   m4/sigaction.m4
   m4/signal_h.m4
@@ -1266,7 +1943,9 @@
   m4/spawn_h.m4
   m4/sprintf-posix.m4
   m4/ssize_t.m4
+  m4/stat-time.m4
   m4/stat.m4
+  m4/std-gnu11.m4
   m4/stdbool.m4
   m4/stddef_h.m4
   m4/stdint.m4
@@ -1281,21 +1960,26 @@
   m4/string_h.m4
   m4/strndup.m4
   m4/strnlen.m4
-  m4/strtoul.m4
   m4/strverscmp.m4
+  m4/sys_resource_h.m4
   m4/sys_socket_h.m4
   m4/sys_stat_h.m4
+  m4/sys_time_h.m4
+  m4/sys_times_h.m4
   m4/sys_types_h.m4
   m4/sys_wait_h.m4
   m4/threadlib.m4
   m4/time_h.m4
-  m4/uintmax_t.m4
+  m4/timespec.m4
+  m4/tls.m4
   m4/unistd-safer.m4
   m4/unistd_h.m4
+  m4/unlink.m4
   m4/unlocked-io.m4
   m4/vasnprintf.m4
+  m4/vasprintf-posix.m4
+  m4/vasprintf.m4
   m4/vfprintf-posix.m4
-  m4/visibility.m4
   m4/vsnprintf-posix.m4
   m4/vsnprintf.m4
   m4/vsprintf-posix.m4
diff --git a/m4/host-cpu-c-abi.m4 b/m4/host-cpu-c-abi.m4
new file mode 100644
index 0000000..6fc31bc
--- /dev/null
+++ b/m4/host-cpu-c-abi.m4
@@ -0,0 +1,675 @@
+# host-cpu-c-abi.m4 serial 13
+dnl Copyright (C) 2002-2019 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 and Sam Steingold.
+
+dnl Sets the HOST_CPU variable to the canonical name of the CPU.
+dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
+dnl C language ABI (application binary interface).
+dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
+dnl config.h.
+dnl
+dnl This canonical name can be used to select a particular assembly language
+dnl source file that will interoperate with C code on the given host.
+dnl
+dnl For example:
+dnl * 'i386' and 'sparc' are different canonical names, because code for i386
+dnl   will not run on SPARC CPUs and vice versa. They have different
+dnl   instruction sets.
+dnl * 'sparc' and 'sparc64' are different canonical names, because code for
+dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
+dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
+dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
+dnl   mode, but not both.
+dnl * 'mips' and 'mipsn32' are different canonical names, because they use
+dnl   different argument passing and return conventions for C functions, and
+dnl   although the instruction set of 'mips' is a large subset of the
+dnl   instruction set of 'mipsn32'.
+dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
+dnl   different sizes for the C types like 'int' and 'void *', and although
+dnl   the instruction sets of 'mipsn32' and 'mips64' are the same.
+dnl * The same canonical name is used for different endiannesses. You can
+dnl   determine the endianness through preprocessor symbols:
+dnl   - 'arm': test __ARMEL__.
+dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
+dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
+dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
+dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
+dnl   - Instructions that do not exist on all of these CPUs (cmpxchg,
+dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
+dnl     assembly language source files use such instructions, you will
+dnl     need to make the distinction.
+dnl   - Speed of execution of the common instruction set is reasonable across
+dnl     the entire family of CPUs. If you have assembly language source files
+dnl     that are optimized for particular CPU types (like GNU gmp has), you
+dnl     will need to make the distinction.
+dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
+AC_DEFUN([gl_HOST_CPU_C_ABI],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_C_ASM])
+  AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
+    [case "$host_cpu" in
+
+changequote(,)dnl
+       i[34567]86 )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=i386
+         ;;
+
+       x86_64 )
+         # On x86_64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+         # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+         #   with native Windows (mingw, MSVC).
+         # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if (defined __x86_64__ || defined __amd64__ \
+                     || defined _M_X64 || defined _M_AMD64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __ILP32__ || defined _ILP32
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=x86_64-x32],
+              [gl_cv_host_cpu_c_abi=x86_64])],
+           [gl_cv_host_cpu_c_abi=i386])
+         ;;
+
+changequote(,)dnl
+       alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=alpha
+         ;;
+
+       arm* | aarch64 )
+         # Assume arm with EABI.
+         # On arm64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+         # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __aarch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                [[#if defined __ILP32__ || defined _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+              [gl_cv_host_cpu_c_abi=arm64-ilp32],
+              [gl_cv_host_cpu_c_abi=arm64])],
+           [# Don't distinguish little-endian and big-endian arm, since they
+            # don't require different machine code for simple operations and
+            # since the user can distinguish them through the preprocessor
+            # defines __ARMEL__ vs. __ARMEB__.
+            # But distinguish arm which passes floating-point arguments and
+            # return values in integer registers (r0, r1, ...) - this is
+            # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
+            # passes them in float registers (s0, s1, ...) and double registers
+            # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
+            # sets the preprocessor defines __ARM_PCS (for the first case) and
+            # __ARM_PCS_VFP (for the second case), but older GCC does not.
+            echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
+            # Look for a reference to the register d0 in the .s file.
+            AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+            if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
+              gl_cv_host_cpu_c_abi=armhf
+            else
+              gl_cv_host_cpu_c_abi=arm
+            fi
+            rm -f conftest*
+           ])
+         ;;
+
+       hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+         # On hppa, the C compiler may be generating 32-bit code or 64-bit
+         # code. In the latter case, it defines _LP64 and __LP64__.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __LP64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=hppa64],
+           [gl_cv_host_cpu_c_abi=hppa])
+         ;;
+
+       ia64* )
+         # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+         # 32-bit code. In the latter case, it defines _ILP32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef _ILP32
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=ia64-ilp32],
+           [gl_cv_host_cpu_c_abi=ia64])
+         ;;
+
+       mips* )
+         # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+         # at 32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=mips64],
+           [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
+            # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if (_MIPS_SIM == _ABIN32)
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=mipsn32],
+              [gl_cv_host_cpu_c_abi=mips])])
+         ;;
+
+       powerpc* )
+         # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+         # No need to distinguish them here; the caller may distinguish
+         # them based on the OS.
+         # On powerpc64 systems, the C compiler may still be generating
+         # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+         # be generating 64-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [# On powerpc64, there are two ABIs on Linux: The AIX compatible
+            # one and the ELFv2 one. The latter defines _CALL_ELF=2.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined _CALL_ELF && _CALL_ELF == 2
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
+              [gl_cv_host_cpu_c_abi=powerpc64])
+           ],
+           [gl_cv_host_cpu_c_abi=powerpc])
+         ;;
+
+       rs6000 )
+         gl_cv_host_cpu_c_abi=powerpc
+         ;;
+
+       riscv32 | riscv64 )
+         # There are 2 architectures (with variants): rv32* and rv64*.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if __riscv_xlen == 64
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [cpu=riscv64],
+           [cpu=riscv32])
+         # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+         # Size of 'long' and 'void *':
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [main_abi=lp64],
+           [main_abi=ilp32])
+         # Float ABIs:
+         # __riscv_float_abi_double:
+         #   'float' and 'double' are passed in floating-point registers.
+         # __riscv_float_abi_single:
+         #   'float' are passed in floating-point registers.
+         # __riscv_float_abi_soft:
+         #   No values are passed in floating-point registers.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __riscv_float_abi_double
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [float_abi=d],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __riscv_float_abi_single
+                     int ok;
+                   #else
+                     error fail
+                   #endif
+                 ]])],
+              [float_abi=f],
+              [float_abi=''])
+           ])
+         gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
+         ;;
+
+       s390* )
+         # On s390x, the C compiler may be generating 64-bit (= s390x) code
+         # or 31-bit (= s390) code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__ || defined __s390x__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=s390x],
+           [gl_cv_host_cpu_c_abi=s390])
+         ;;
+
+       sparc | sparc64 )
+         # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+         # C compiler still generates 32-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __sparcv9 || defined __arch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=sparc64],
+           [gl_cv_host_cpu_c_abi=sparc])
+         ;;
+
+       *)
+         gl_cv_host_cpu_c_abi="$host_cpu"
+         ;;
+     esac
+    ])
+
+  dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
+  HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
+  HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
+  AC_SUBST([HOST_CPU])
+  AC_SUBST([HOST_CPU_C_ABI])
+
+  # This was
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
+  # earlier, but KAI C++ 3.2d doesn't like this.
+  sed -e 's/-/_/g' >> confdefs.h <<EOF
+#ifndef __${HOST_CPU}__
+#define __${HOST_CPU}__ 1
+#endif
+#ifndef __${HOST_CPU_C_ABI}__
+#define __${HOST_CPU_C_ABI}__ 1
+#endif
+EOF
+  AH_TOP([/* CPU and C ABI indicator */
+#ifndef __i386__
+#undef __i386__
+#endif
+#ifndef __x86_64_x32__
+#undef __x86_64_x32__
+#endif
+#ifndef __x86_64__
+#undef __x86_64__
+#endif
+#ifndef __alpha__
+#undef __alpha__
+#endif
+#ifndef __arm__
+#undef __arm__
+#endif
+#ifndef __armhf__
+#undef __armhf__
+#endif
+#ifndef __arm64_ilp32__
+#undef __arm64_ilp32__
+#endif
+#ifndef __arm64__
+#undef __arm64__
+#endif
+#ifndef __hppa__
+#undef __hppa__
+#endif
+#ifndef __hppa64__
+#undef __hppa64__
+#endif
+#ifndef __ia64_ilp32__
+#undef __ia64_ilp32__
+#endif
+#ifndef __ia64__
+#undef __ia64__
+#endif
+#ifndef __m68k__
+#undef __m68k__
+#endif
+#ifndef __mips__
+#undef __mips__
+#endif
+#ifndef __mipsn32__
+#undef __mipsn32__
+#endif
+#ifndef __mips64__
+#undef __mips64__
+#endif
+#ifndef __powerpc__
+#undef __powerpc__
+#endif
+#ifndef __powerpc64__
+#undef __powerpc64__
+#endif
+#ifndef __powerpc64_elfv2__
+#undef __powerpc64_elfv2__
+#endif
+#ifndef __riscv32__
+#undef __riscv32__
+#endif
+#ifndef __riscv64__
+#undef __riscv64__
+#endif
+#ifndef __riscv32_ilp32__
+#undef __riscv32_ilp32__
+#endif
+#ifndef __riscv32_ilp32f__
+#undef __riscv32_ilp32f__
+#endif
+#ifndef __riscv32_ilp32d__
+#undef __riscv32_ilp32d__
+#endif
+#ifndef __riscv64_ilp32__
+#undef __riscv64_ilp32__
+#endif
+#ifndef __riscv64_ilp32f__
+#undef __riscv64_ilp32f__
+#endif
+#ifndef __riscv64_ilp32d__
+#undef __riscv64_ilp32d__
+#endif
+#ifndef __riscv64_lp64__
+#undef __riscv64_lp64__
+#endif
+#ifndef __riscv64_lp64f__
+#undef __riscv64_lp64f__
+#endif
+#ifndef __riscv64_lp64d__
+#undef __riscv64_lp64d__
+#endif
+#ifndef __s390__
+#undef __s390__
+#endif
+#ifndef __s390x__
+#undef __s390x__
+#endif
+#ifndef __sh__
+#undef __sh__
+#endif
+#ifndef __sparc__
+#undef __sparc__
+#endif
+#ifndef __sparc64__
+#undef __sparc64__
+#endif
+])
+
+])
+
+
+dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI
+dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit
+dnl one, or to 'unknown' if unknown.
+dnl This is a simplified variant of gl_HOST_CPU_C_ABI.
+AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit],
+    [if test -n "$gl_cv_host_cpu_c_abi"; then
+       case "$gl_cv_host_cpu_c_abi" in
+         i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
+           gl_cv_host_cpu_c_abi_32bit=yes ;;
+         x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 )
+           gl_cv_host_cpu_c_abi_32bit=no ;;
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown ;;
+       esac
+     else
+       case "$host_cpu" in
+
+         # CPUs that only support a 32-bit ABI.
+         arc \
+         | bfin \
+         | cris* \
+         | csky \
+         | epiphany \
+         | ft32 \
+         | h8300 \
+         | m68k \
+         | microblaze | microblazeel \
+         | nds32 | nds32le | nds32be \
+         | nios2 | nios2eb | nios2el \
+         | or1k* \
+         | or32 \
+         | sh | sh[1234] | sh[1234]e[lb] \
+         | tic6x \
+         | xtensa* )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         # CPUs that only support a 64-bit ABI.
+changequote(,)dnl
+         alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \
+         | mmix )
+changequote([,])dnl
+           gl_cv_host_cpu_c_abi_32bit=no
+           ;;
+
+changequote(,)dnl
+         i[34567]86 )
+changequote([,])dnl
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         x86_64 )
+           # On x86_64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+           # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+           #   with native Windows (mingw, MSVC).
+           # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if (defined __x86_64__ || defined __amd64__ \
+                       || defined _M_X64 || defined _M_AMD64) \
+                      && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         arm* | aarch64 )
+           # Assume arm with EABI.
+           # On arm64 systems, the C compiler may be generating code in one of
+           # these ABIs:
+           # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+           # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+           # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+           # On hppa, the C compiler may be generating 32-bit code or 64-bit
+           # code. In the latter case, it defines _LP64 and __LP64__.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#ifdef __LP64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         ia64* )
+           # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+           # 32-bit code. In the latter case, it defines _ILP32.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#ifdef _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=yes],
+             [gl_cv_host_cpu_c_abi_32bit=no])
+           ;;
+
+         mips* )
+           # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+           # at 32.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         powerpc* )
+           # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+           # No need to distinguish them here; the caller may distinguish
+           # them based on the OS.
+           # On powerpc64 systems, the C compiler may still be generating
+           # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+           # be generating 64-bit code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         rs6000 )
+           gl_cv_host_cpu_c_abi_32bit=yes
+           ;;
+
+         riscv32 | riscv64 )
+           # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+           # Size of 'long' and 'void *':
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __LP64__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         s390* )
+           # On s390x, the C compiler may be generating 64-bit (= s390x) code
+           # or 31-bit (= s390) code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __LP64__ || defined __s390x__
+                    int ok;
+                  #else
+                    error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         sparc | sparc64 )
+           # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+           # C compiler still generates 32-bit code.
+           AC_COMPILE_IFELSE(
+             [AC_LANG_SOURCE(
+                [[#if defined __sparcv9 || defined __arch64__
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+             [gl_cv_host_cpu_c_abi_32bit=no],
+             [gl_cv_host_cpu_c_abi_32bit=yes])
+           ;;
+
+         *)
+           gl_cv_host_cpu_c_abi_32bit=unknown
+           ;;
+       esac
+     fi
+    ])
+
+  HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
+])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
index 6a47236..4b29c5f 100644
--- a/m4/iconv.m4
+++ b/m4/iconv.m4
@@ -1,5 +1,5 @@
 # iconv.m4 serial 18 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2007-2014 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/m4/include_next.m4 b/m4/include_next.m4
index a60a261..86eb2c9 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,12 +1,13 @@
-# include_next.m4 serial 23
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# include_next.m4 serial 24
+dnl Copyright (C) 2006-2019 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 Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER,
+dnl and PRAGMA_COLUMNS.
 dnl
 dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
 dnl 'include' otherwise.
@@ -192,56 +193,9 @@
              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"`'"'])
+           gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+           AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+           AS_VAR_SET(gl_next_header, ['"'$gl_header'"'])
           m4_if([$2], [check],
             [else
                AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
index d4da190..8a045f6 100644
--- a/m4/intlmacosx.m4
+++ b/m4/intlmacosx.m4
@@ -1,5 +1,5 @@
 # intlmacosx.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2004-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2014 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/m4/intmax_t.m4 b/m4/intmax_t.m4
index c1a4a75..5ded16e 100644
--- a/m4/intmax_t.m4
+++ b/m4/intmax_t.m4
@@ -1,5 +1,5 @@
 # intmax_t.m4 serial 8
-dnl Copyright (C) 1997-2004, 2006-2007, 2009-2012 Free Software Foundation,
+dnl Copyright (C) 1997-2004, 2006-2007, 2009-2019 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,
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
index 977206f..38fe118 100644
--- a/m4/inttypes-pri.m4
+++ b/m4/inttypes-pri.m4
@@ -1,5 +1,5 @@
 # inttypes-pri.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1997-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2002, 2006, 2008-2019 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/m4/inttypes.m4 b/m4/inttypes.m4
index eec4f41..c58a1be 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,5 +1,5 @@
-# inttypes.m4 serial 26
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# inttypes.m4 serial 27
+dnl Copyright (C) 2006-2019 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.
@@ -147,7 +147,9 @@
   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])
+  HAVE_IMAXDIV_T=1;      AC_SUBST([HAVE_IMAXDIV_T])
   REPLACE_STRTOIMAX=0;   AC_SUBST([REPLACE_STRTOIMAX])
+  REPLACE_STRTOUMAX=0;   AC_SUBST([REPLACE_STRTOUMAX])
   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])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
index 91c7bca..d20422a 100644
--- a/m4/inttypes_h.m4
+++ b/m4/inttypes_h.m4
@@ -1,5 +1,5 @@
 # inttypes_h.m4 serial 10
-dnl Copyright (C) 1997-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2004, 2006, 2008-2019 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/m4/isnan.m4 b/m4/isnan.m4
index 7ad7127..f4d185b 100644
--- a/m4/isnan.m4
+++ b/m4/isnan.m4
@@ -1,5 +1,5 @@
 # isnan.m4 serial 5
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/isnand.m4 b/m4/isnand.m4
index 54b64a4..31af024 100644
--- a/m4/isnand.m4
+++ b/m4/isnand.m4
@@ -1,5 +1,5 @@
 # isnand.m4 serial 11
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/isnanf.m4 b/m4/isnanf.m4
index 97f638a..f03f37d 100644
--- a/m4/isnanf.m4
+++ b/m4/isnanf.m4
@@ -1,5 +1,5 @@
-# isnanf.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# isnanf.m4 serial 15
+dnl Copyright (C) 2007-2019 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.
@@ -180,8 +180,17 @@
         [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";;
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+               ],
+               [gl_cv_func_isnanf_works="guessing yes"],
+               [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
index 81469ab..3bef867 100644
--- a/m4/isnanl.m4
+++ b/m4/isnanl.m4
@@ -1,5 +1,5 @@
-# isnanl.m4 serial 17
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# isnanl.m4 serial 20
+dnl Copyright (C) 2007-2019 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.
@@ -108,11 +108,8 @@
     ])
 ])
 
-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.
+dnl Test whether isnanl() recognizes all canonical numbers which are neither
+dnl finite nor infinite.
 AC_DEFUN([gl_FUNC_ISNANL_WORKS],
 [
   AC_REQUIRE([AC_PROG_CC])
@@ -177,7 +174,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -197,41 +194,35 @@
     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"
-   */
+  /* isnanl should return something even for noncanonical values.  */
   { /* Pseudo-NaN.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 4;
   }
   { /* Pseudo-Infinity.  */
     static memory_long_double x =
       { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 8;
   }
   { /* Pseudo-Zero.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 16;
   }
   { /* Unnormalized number.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 32;
   }
   { /* Pseudo-Denormal.  */
     static memory_long_double x =
       { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
-    if (!isnanl (x.value))
+    if (isnanl (x.value) && !isnanl (x.value))
       result |= 64;
   }
 #endif
@@ -240,15 +231,17 @@
 }]])],
         [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
+        [case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+               ],
+               [gl_cv_func_isnanl_works="guessing yes"],
+               [gl_cv_func_isnanl_works="guessing no"])
              ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
          esac
         ])
     ])
diff --git a/m4/iswblank.m4 b/m4/iswblank.m4
index 8e63a03..ad216cc 100644
--- a/m4/iswblank.m4
+++ b/m4/iswblank.m4
@@ -1,5 +1,5 @@
 # iswblank.m4 serial 4
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2019 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/m4/javacomp.m4 b/m4/javacomp.m4
index 8213c9f..a6bb708 100644
--- a/m4/javacomp.m4
+++ b/m4/javacomp.m4
@@ -1,5 +1,5 @@
-# javacomp.m4 serial 12
-dnl Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software Foundation,
+# javacomp.m4 serial 17
+dnl Copyright (C) 2001-2003, 2006-2007, 2009-2019 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,
@@ -15,7 +15,15 @@
 #           1.3             inner classes
 #           1.4             assert keyword
 #           1.5             generic classes and methods
-#           1.6             (not yet supported)
+#           1.6             (not supported)
+#           1.7             switch(string)
+#           1.8             lambdas
+#           9               private interface methods
+#          10               type inference for local variables
+#          11               'var' in parameters of lambda expressions
+# Instead of source-version 1.6, use 1.5, since Java 6 did not introduce any
+# language changes. See
+# https://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html
 #
 # target-version can be:  classfile version:
 #           1.1                 45.3
@@ -24,6 +32,11 @@
 #           1.4                 48.0
 #           1.5                 49.0
 #           1.6                 50.0
+#           1.7                 51.0
+#           1.8                 52.0
+#           9                   53.0
+#          10                   54.0
+#          11                   55.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".
@@ -33,12 +46,19 @@
 #           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
+#           1.4         JDK/JRE 1.4, gij 4.0 ... 4.2
+#           1.5         JDK/JRE 5, gij 4.3 ... 6
+#           1.6         JDK/JRE 6
+#           1.7         JDK/JRE 7
+#           1.8         JDK/JRE 8
+#           9           JDK/JRE 9
+#          10           JDK/JRE 10
+#          11           JDK/JRE 11
 # 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.
+# -target 1.5, but I have no idea how complete this support is. Similarly,
+# gcj >= 4.3 supports -ftarget=1.6, and gij >= 4.3 can in some cases handle
+# classes compiled with -target 1.6.
 #
 # Specifying target-version is useful when building a library (.jar) that is
 # useful outside the given package. Omitting target-version is useful when
@@ -47,20 +67,27 @@
 # 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.
+#   - target_version < 1.6 with source_version >= 1.6, or
+#   - target_version < 1.7 with source_version >= 1.7, or
+#   - target_version < 1.8 with source_version >= 1.8, or
+#   - target_version < 9 with source_version >= 9, or
+#   - target_version < 10 with source_version >= 10, or
+#   - target_version < 11 with source_version >= 11,
+# because even Sun's/Oracle'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.
+# support the older target-versions too. Except for the cases
+#   - target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0
+#     to 3.2 to be used,
+#   - target-version = 1.6, source-version = 1.5, which allows gcj versions
+#     >= 4.3 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__
+#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
   yes
 #endif
 ], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
@@ -99,7 +126,11 @@
          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) ;;
+         1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 | 9 | 10 | 11) ;;
+         12 | 13 | 14 | 15 | 16 | 17)
+           dnl Assume that these (not yet released) Java versions will behave
+           dnl like the preceding ones.
+           target_version=11 ;;
          null)
            dnl JDK 1.1.X returns null.
            target_version=1.1 ;;
@@ -117,6 +148,16 @@
     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 { void foo () { switch ("A") {} } }' ;;
+    1.7) goodcode='class conftest     { void foo () { switch ("A") {} } }'
+         failcode='class conftestfail { void foo () { Runnable r = () -> {}; } }' ;;
+    1.8) goodcode='class conftest     { void foo () { Runnable r = () -> {}; } }'
+         failcode='interface conftestfail { private void foo () {} }' ;;
+    9)   goodcode='interface conftest     { private void foo () {} }'
+         failcode='class conftestfail { public void m() { var i = new Integer(0); } }' ;;
+    10)  goodcode='class conftest     { public void m() { var i = new Integer(0); } }'
+         failcode='class conftestfail { Readable r = (var b) -> 0; }' ;;
+    11)  goodcode='class conftest     { Readable r = (var b) -> 0; }'
          failcode='class conftestfail syntax error' ;;
     *) AC_MSG_ERROR([invalid source-version argument to gt_@&t@JAVACOMP: $source_version]) ;;
   esac
@@ -127,6 +168,11 @@
     1.4) cfversion=48 ;;
     1.5) cfversion=49 ;;
     1.6) cfversion=50 ;;
+    1.7) cfversion=51 ;;
+    1.8) cfversion=52 ;;
+    9)   cfversion=53 ;;
+    10)  cfversion=54 ;;
+    11)  cfversion=55 ;;
     *) 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.
@@ -153,15 +199,16 @@
   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   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066
+  dnl   gcj 4.3 and newer has an option -ftarget=1.X; the maximum supported
+  dnl   target-version is 1.6.
   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 The support of Sun/Oracle 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
@@ -181,6 +228,42 @@
   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   javac 1.7:   -target 1.1 1.2 1.3 1.4 1.5 1.6 1.7  default: 1.7
+  dnl                -source 1.3 1.4 1.5 1.6 1.7          default: 1.7
+  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
+  dnl                -target 1.6 only possible with -source 1.3/1.4/1.5/1.6
+  dnl
+  dnl   javac 1.8:   -target 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8  default: 1.8
+  dnl                -source 1.3 1.4 1.5 1.6 1.7 1.8          default: 1.8
+  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
+  dnl                -target 1.6 only possible with -source 1.3/1.4/1.5/1.6
+  dnl                -target 1.7 only possible with -source 1.3/1.4/1.5/1.6/1.7
+  dnl
+  dnl   javac 9:     -target 1.6 1.7 1.8 9  default: 9
+  dnl                -source 1.6 1.7 1.8 9  default: 9
+  dnl                -target 1.6 only possible with -source 1.6
+  dnl                -target 1.7 only possible with -source 1.6/1.7
+  dnl                -target 1.8 only possible with -source 1.6/1.7/1.8
+  dnl
+  dnl   javac 10:    -target 1.6 1.7 1.8 9 10  default: 10
+  dnl                -source 1.6 1.7 1.8 9 10  default: 10
+  dnl                -target 1.6 only possible with -source 1.6
+  dnl                -target 1.7 only possible with -source 1.6/1.7
+  dnl                -target 1.8 only possible with -source 1.6/1.7/1.8
+  dnl                -target 9 only possible with -source 1.6/1.7/1.8/9
+  dnl
+  dnl   javac 11:    -target 1.6 1.7 1.8 9 10 11  default: 11
+  dnl                -source 1.6 1.7 1.8 9 10 11  default: 11
+  dnl                -target 1.6 only possible with -source 1.6
+  dnl                -target 1.7 only possible with -source 1.6/1.7
+  dnl                -target 1.8 only possible with -source 1.6/1.7/1.8
+  dnl                -target 9 only possible with -source 1.6/1.7/1.8/9
+  dnl                -target 10 only possible with -source 1.6/1.7/1.8/9/10
+  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
@@ -322,6 +405,15 @@
     else
       dnl It's not gcj. Assume the classfile versions are correct.
       dnl Try $JAVAC.
+      dnl The javac option '-source 1.5' has the same meaning as '-source 1.6',
+      dnl but since Java 9 supports only the latter, prefer the latter if a
+      dnl target_version >= 1.6 is requested.
+      if test "$source_version" = 1.5; then
+        case "$target_version" in
+          1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;;
+          *) source_version='1.6' ;;
+        esac
+      fi
       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
@@ -517,6 +609,15 @@
       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 The javac option '-source 1.5' has the same meaning as '-source 1.6',
+        dnl but since Java 9 supports only the latter, prefer the latter if a
+        dnl target_version >= 1.6 is requested.
+        if test "$source_version" = 1.5; then
+          case "$target_version" in
+            1.1 | 1.2 | 1.3 | 1.4 | 1.5) ;;
+            *) source_version='1.6' ;;
+          esac
+        fi
         dnl Now test whether it supports the desired target-version and
         dnl source-version.
         rm -f conftest.class
diff --git a/m4/javaexec.m4 b/m4/javaexec.m4
index 18947ad..82d1853 100644
--- a/m4/javaexec.m4
+++ b/m4/javaexec.m4
@@ -1,5 +1,5 @@
-# javaexec.m4 serial 5
-dnl Copyright (C) 2001-2003, 2006, 2009-2012 Free Software Foundation, Inc.
+# javaexec.m4 serial 6
+dnl Copyright (C) 2001-2003, 2006, 2009-2019 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.
@@ -12,7 +12,7 @@
 [
   AC_MSG_CHECKING([for Java virtual machine])
   AC_EGREP_CPP([yes], [
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
   yes
 #endif
 ], CLASSPATH_SEPARATOR=';', CLASSPATH_SEPARATOR=':')
diff --git a/m4/jm-winsz1.m4 b/m4/jm-winsz1.m4
new file mode 100644
index 0000000..3ec0130
--- /dev/null
+++ b/m4/jm-winsz1.m4
@@ -0,0 +1,50 @@
+# serial 12
+
+# Copyright (C) 1996, 1999, 2001-2002, 2004, 2006, 2009-2019 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 and Paul Eggert.
+AC_DEFUN([gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H],
+[AC_REQUIRE([AC_SYS_POSIX_TERMIOS])
+ AC_CACHE_CHECK([whether use of TIOCGWINSZ requires termios.h],
+                [gl_cv_sys_tiocgwinsz_needs_termios_h],
+  [gl_cv_sys_tiocgwinsz_needs_termios_h=no
+
+   if test $ac_cv_sys_posix_termios = yes; then
+     AC_EGREP_CPP([yes],
+     [#include <sys/types.h>
+#      include <termios.h>
+#      ifdef TIOCGWINSZ
+         yes
+#      endif
+     ], [gl_cv_sys_tiocgwinsz_needs_termios_h=yes])
+   fi
+  ])
+])
+
+AC_DEFUN([gl_WINSIZE_IN_PTEM],
+[
+   AC_REQUIRE([AC_SYS_POSIX_TERMIOS])
+   AC_CACHE_CHECK([whether use of struct winsize requires sys/ptem.h],
+     [gl_cv_sys_struct_winsize_needs_sys_ptem_h],
+     [gl_cv_sys_struct_winsize_needs_sys_ptem_h=yes
+      if test $ac_cv_sys_posix_termios = yes; then
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <termios.h>]],
+          [[struct winsize x;
+            if (sizeof x > 0) return 0;]])],
+          [gl_cv_sys_struct_winsize_needs_sys_ptem_h=no])
+      fi
+      if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/ptem.h>]],
+          [[struct winsize x;
+            if (sizeof x > 0) return 0;]])],
+          [], [gl_cv_sys_struct_winsize_needs_sys_ptem_h=no])
+      fi])
+   if test $gl_cv_sys_struct_winsize_needs_sys_ptem_h = yes; then
+     AC_DEFINE([WINSIZE_IN_PTEM], [1],
+       [Define if sys/ptem.h is required for struct winsize.])
+   fi
+])
diff --git a/m4/jm-winsz2.m4 b/m4/jm-winsz2.m4
new file mode 100644
index 0000000..b0aa9dd
--- /dev/null
+++ b/m4/jm-winsz2.m4
@@ -0,0 +1,29 @@
+# serial 8
+
+# Copyright (C) 1996, 1999, 2001, 2004, 2009-2019 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_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL],
+[AC_REQUIRE([gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H])
+ AC_CACHE_CHECK([whether use of TIOCGWINSZ requires sys/ioctl.h],
+                [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h],
+  [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=no
+
+   if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no; then
+     AC_EGREP_CPP([yes],
+       [#include <sys/types.h>
+#        include <sys/ioctl.h>
+#        ifdef TIOCGWINSZ
+           yes
+#        endif
+       ], [gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h=yes])
+   fi
+  ])
+  if test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = yes; then
+    AC_DEFINE([GWINSZ_IN_SYS_IOCTL], [1],
+      [Define if your system defines TIOCGWINSZ in sys/ioctl.h.])
+  fi
+])
diff --git a/m4/largefile.m4 b/m4/largefile.m4
index a88850a..c6dd9a1 100644
--- a/m4/largefile.m4
+++ b/m4/largefile.m4
@@ -1,13 +1,14 @@
 # Enable large files on systems where this is not the default.
 
-# Copyright 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright 1992-1996, 1998-2019 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], [] ,[
+# The following implementation works around a problem in autoconf <= 2.69;
+# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+# or configures them incorrectly in some cases.
+m4_version_prereq([2.70], [] ,[
 
 # _AC_SYS_LARGEFILE_TEST_INCLUDES
 # -------------------------------
@@ -25,9 +26,9 @@
 
 
 # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
-#				CACHE-VAR,
-#				DESCRIPTION,
-#				PROLOGUE, [FUNCTION-BODY])
+#                               CACHE-VAR,
+#                               DESCRIPTION,
+#                               PROLOGUE, [FUNCTION-BODY])
 # --------------------------------------------------------
 m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
 [AC_CACHE_CHECK([for $1 value needed for large files], [$3],
@@ -55,7 +56,7 @@
 # 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
+# http://www.unix.org/version2/whatsnew/lfs20mar.html
 AC_DEFUN([AC_SYS_LARGEFILE],
 [AC_ARG_ENABLE(largefile,
                [  --disable-largefile     omit support for large files])
@@ -93,15 +94,11 @@
       [_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])
+  AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1],
+    [Enable large inode numbers on Mac OS X 10.5.])
 fi
 ])# AC_SYS_LARGEFILE
-
-])# m4_version_prereq 2.69
+])# m4_version_prereq 2.70
 
 # Enable large files on systems where this is implemented by Gnulib, not by the
 # system headers.
@@ -129,9 +126,24 @@
       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 Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat'
+      dnl to 'struct _stat32i64' or 'struct _stat64' (depending on
+      dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member.
+      AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64],
+        [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM(
+              [[#include <sys/types.h>
+                struct stat buf;
+                int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1];
+              ]],
+              [[]])],
+           [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no])
+        ])
+      if test $gl_cv_member_st_size_64 = no; then
+        WINDOWS_64_BIT_ST_SIZE=1
+      else
+        WINDOWS_64_BIT_ST_SIZE=0
+      fi
       ;;
     *)
       dnl Nothing to do on gnulib's side.
diff --git a/m4/ldexp.m4 b/m4/ldexp.m4
index 6d26b56..3763168 100644
--- a/m4/ldexp.m4
+++ b/m4/ldexp.m4
@@ -1,5 +1,5 @@
 # ldexp.m4 serial 1
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2019 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/m4/ldexpl.m4 b/m4/ldexpl.m4
index 6ecdd4f..bae6de3 100644
--- a/m4/ldexpl.m4
+++ b/m4/ldexpl.m4
@@ -1,5 +1,5 @@
-# ldexpl.m4 serial 16
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# ldexpl.m4 serial 17
+dnl Copyright (C) 2007-2019 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.
@@ -124,8 +124,10 @@
         [
 changequote(,)dnl
          case "$host_os" in
-           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no";;
-           *)               gl_cv_func_ldexpl_works="guessing yes";;
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
+           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
          esac
 changequote([,])dnl
         ])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
index e1feab5..a187196 100644
--- a/m4/lib-ld.m4
+++ b/m4/lib-ld.m4
@@ -1,5 +1,5 @@
-# lib-ld.m4 serial 6
-dnl Copyright (C) 1996-2003, 2009-2012 Free Software Foundation, Inc.
+# lib-ld.m4 serial 9
+dnl Copyright (C) 1996-2003, 2009-2019 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.
@@ -47,73 +47,122 @@
        }
 fi
 
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
+if test -n "$LD"; then
+  AC_MSG_CHECKING([for ld])
+elif test "$GCC" = yes; then
   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
-        ;;
+if test -n "$LD"; then
+  # Let the user override the test with a path.
+  :
+else
+  AC_CACHE_VAL([acl_cv_path_LD],
+  [
+    acl_cv_path_LD= # Final result of this test
+    ac_prog=ld # Program to search in $PATH
+    if test "$GCC" = yes; then
+      # Check if gcc -print-prog-name=ld gives a path.
+      case $host in
+        *-*-mingw*)
+          # gcc leaves a trailing carriage return which upsets mingw
+          acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+        *)
+          acl_output=`($CC -print-prog-name=ld) 2>&5` ;;
+      esac
+      case $acl_output in
+        # Accept absolute paths.
+        [[\\/]]* | ?:[[\\/]]*)
+          re_direlt='/[[^/]][[^/]]*/\.\./'
+          # Canonicalize the pathname of ld
+          acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'`
+          while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do
+            acl_output=`echo $acl_output | sed "s%$re_direlt%/%"`
+          done
+          # Got the pathname. No search in PATH is needed.
+          acl_cv_path_LD="$acl_output"
+          ac_prog=
+          ;;
+        "")
+          # If it fails, then pretend we aren't using GCC.
+          ;;
+        *)
+          # If it is relative, then search for the first ld in PATH.
+          with_gnu_ld=unknown
+          ;;
       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 "$ac_prog"; then
+      # Search for $ac_prog in $PATH.
+      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"
+    fi
+    case $host in
+      *-*-aix*)
+        AC_COMPILE_IFELSE(
+          [AC_LANG_SOURCE(
+             [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                int ok;
+               #else
+                error fail
+               #endif
+             ]])],
+          [# The compiler produces 64-bit code. Add option '-b64' so that the
+           # linker groks 64-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -b64 "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;;
+           esac
+          ], [])
+        ;;
+      sparc64-*-netbsd*)
+        AC_COMPILE_IFELSE(
+          [AC_LANG_SOURCE(
+             [[#if defined __sparcv9 || defined __arch64__
+                int ok;
+               #else
+                error fail
+               #endif
+             ]])],
+          [],
+          [# The compiler produces 32-bit code. Add option '-m elf32_sparc'
+           # so that the linker groks 32-bit object files.
+           case "$acl_cv_path_LD " in
+             *" -m elf32_sparc "*) ;;
+             *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;;
+           esac
+          ])
+        ;;
+    esac
+  ])
+  LD="$acl_cv_path_LD"
+fi
 if test -n "$LD"; then
   AC_MSG_RESULT([$LD])
 else
   AC_MSG_RESULT([no])
+  AC_MSG_ERROR([no acceptable ld found in \$PATH])
 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 d11b4b4..b9fa364 100644
--- a/m4/lib-link.m4
+++ b/m4/lib-link.m4
@@ -1,12 +1,12 @@
-# lib-link.m4 serial 26 (gettext-0.18.2)
-dnl Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# lib-link.m4 serial 31
+dnl Copyright (C) 2001-2019 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.54])
+AC_PREREQ([2.61])
 
 dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
 dnl the libraries corresponding to explicit and implicit dependencies.
@@ -124,8 +124,8 @@
 dnl   acl_hardcode_minus_L.
 AC_DEFUN([AC_LIB_RPATH],
 [
-  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
-  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  dnl Complain if config.rpath is missing.
+  AC_REQUIRE_AUX_FILE([config.rpath])
   AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
   AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
   AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
@@ -187,17 +187,17 @@
   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\"
+    eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+    eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
   ])
-  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]],
+  AC_ARG_WITH(PACK[-prefix],
+[[  --with-]]PACK[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
+  --without-]]PACK[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -206,17 +206,23 @@
         AC_LIB_WITH_FINAL_PREFIX([
           eval additional_includedir=\"$includedir\"
           eval additional_libdir=\"$libdir\"
+          eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\"
+          eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
         ])
       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
+        additional_libdir2="$withval/$acl_libdirstem2"
+        additional_libdir3="$withval/$acl_libdirstem3"
       fi
     fi
 ])
+  if test "X$additional_libdir2" = "X$additional_libdir"; then
+    additional_libdir2=
+  fi
+  if test "X$additional_libdir3" = "X$additional_libdir"; then
+    additional_libdir3=
+  fi
   dnl Search the library and its dependencies in $additional_libdir and
   dnl $LDFLAGS. Using breadth-first-seach.
   LIB[]NAME=
@@ -272,58 +278,14 @@
             shrext=
           fi
           if test $use_additional = yes; then
-            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
-              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-              case "$x" in
-                -L*)
-                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+            for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do
+              if test "X$found_dir" = "X"; then
+                eval dir=\$$additional_libdir_variable
+                if test -n "$dir"; then
+                  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
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then
                       found_dir="$dir"
                       found_so="$dir/$libname$shrext"
                     else
@@ -333,14 +295,14 @@
                               | 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
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$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
+                          if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then
                             found_dir="$dir"
                             found_so="$dir/$f"
                             break
@@ -351,7 +313,57 @@
                   fi
                   dnl Then look for a static library.
                   if test "X$found_dir" = "X"; then
-                    if test -f "$dir/$libname.$acl_libext"; then
+                    if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; 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
+              fi
+            done
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && acl_is_expected_elfclass < "$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" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then
                       found_dir="$dir"
                       found_a="$dir/$libname.$acl_libext"
                     fi
@@ -377,7 +389,8 @@
               dnl standard /usr/lib.
               if test "$enable_rpath" = no \
                  || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2" \
+                 || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then
                 dnl No hardcoding is needed.
                 LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
               else
@@ -477,6 +490,13 @@
                 fi
                 additional_includedir="$basedir/include"
                 ;;
+              */$acl_libdirstem3 | */$acl_libdirstem3/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'`
+                if test "$name" = '$1'; then
+                  LIB[]NAME[]_PREFIX="$basedir"
+                fi
+                additional_includedir="$basedir/include"
+                ;;
             esac
             if test "X$additional_includedir" != "X"; then
               dnl Potentially add $additional_includedir to $INCNAME.
@@ -527,19 +547,21 @@
               for dep in $dependency_libs; do
                 case "$dep" in
                   -L*)
-                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME.
                     dnl But don't add it
                     dnl   1. if it's the standard /usr/lib,
                     dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
                     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" \
-                       && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+                    if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \
+                       && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then
                       haveit=
-                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
-                         || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+                      if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \
+                         || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then
                         if test -n "$GCC"; then
                           case $host_os in
                             linux* | gnu* | k*bsd*-gnu) haveit=yes;;
@@ -550,29 +572,29 @@
                         haveit=
                         for x in $LDFLAGS $LIB[]NAME; do
                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LIBNAME.
-                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                            dnl Really add $dependency_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir"
                           fi
                         fi
                         haveit=
                         for x in $LDFLAGS $LTLIB[]NAME; do
                           AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-                          if test "X$x" = "X-L$additional_libdir"; then
+                          if test "X$x" = "X-L$dependency_libdir"; then
                             haveit=yes
                             break
                           fi
                         done
                         if test -z "$haveit"; then
-                          if test -d "$additional_libdir"; then
-                            dnl Really add $additional_libdir to $LTLIBNAME.
-                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          if test -d "$dependency_libdir"; then
+                            dnl Really add $dependency_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir"
                           fi
                         fi
                       fi
@@ -670,7 +692,6 @@
       LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
     done
   fi
-  popdef([P_A_C_K])
   popdef([PACKLIBS])
   popdef([PACKUP])
   popdef([PACK])
@@ -721,7 +742,8 @@
           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
+             && test "X$dir" != "X/usr/$acl_libdirstem2" \
+             && test "X$dir" != "X/usr/$acl_libdirstem3"; then
             rpathdirs="$rpathdirs $dir"
           fi
           next=
@@ -731,7 +753,8 @@
             -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
+                    && test "X$dir" != "X/usr/$acl_libdirstem2" \
+                    && test "X$dir" != "X/usr/$acl_libdirstem3"; then
                    rpathdirs="$rpathdirs $dir"
                  fi
                  next= ;;
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
index 007aa05..52ea5ae 100644
--- a/m4/lib-prefix.m4
+++ b/m4/lib-prefix.m4
@@ -1,18 +1,11 @@
-# lib-prefix.m4 serial 7 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008-2012 Free Software Foundation, Inc.
+# lib-prefix.m4 serial 17
+dnl Copyright (C) 2001-2005, 2008-2019 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
@@ -32,9 +25,9 @@
     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],
+  AC_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
@@ -154,71 +147,174 @@
 ])
 
 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".
+dnl - a function acl_is_expected_elfclass, that tests whether standard input
+dn;   has a 32-bit or 64-bit ELF header, depending on the host CPU ABI,
+dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing
+dnl   the basename of the libdir to try in turn, either "lib" or "lib64" or
+dnl   "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar.
 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 There is no formal standard regarding lib, lib32, and lib64.
+  dnl On most 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 $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on
+  dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go
+  dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib.
+  dnl We determine the compiler's default mode by looking at the compiler's
+  dnl library search path. If at least one of its elements ends in /lib64 or
+  dnl points to a directory whose absolute pathname ends in /lib64, we use that
+  dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default,
+  dnl 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"
+  AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT])
+
+  AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
+    [AC_EGREP_CPP([Extensible Linking Format],
+       [#ifdef __ELF__
+        Extensible Linking Format
+        #endif
+       ],
+       [gl_cv_elf=yes],
+       [gl_cv_elf=no])
+     ])
+  if test $gl_cv_elf; then
+    # Extract the ELF class of a file (5th byte) in decimal.
+    # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
+    if od -A x < /dev/null >/dev/null 2>/dev/null; then
+      # Use POSIX od.
+      func_elfclass ()
+      {
+        od -A n -t d1 -j 4 -N 1
+      }
+    else
+      # Use BSD hexdump.
+      func_elfclass ()
+      {
+        dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "'
+        echo
+      }
+    fi
+changequote(,)dnl
+    case $HOST_CPU_C_ABI_32BIT in
+      yes)
+        # 32-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[ 	]//g'`" = 1
+        }
+        ;;
+      no)
+        # 64-bit ABI.
+        acl_is_expected_elfclass ()
+        {
+          test "`func_elfclass | sed -e 's/[ 	]//g'`" = 2
+        }
+        ;;
+      *)
+        # Unknown.
+        acl_is_expected_elfclass ()
+        {
+          :
+        }
+        ;;
+    esac
+changequote([,])dnl
+  else
+    acl_is_expected_elfclass ()
+    {
+      :
+    }
+  fi
+
+  dnl Allow the user to override the result by setting acl_cv_libdirstems.
+  AC_CACHE_CHECK([for the common suffixes of directories in the library search path],
+    [acl_cv_libdirstems],
+    [dnl Try 'lib' first, because that's the default for libdir in GNU, see
+     dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>.
+     acl_libdirstem=lib
+     acl_libdirstem2=
+     acl_libdirstem3=
+     case "$host_os" in
+       solaris*)
+         dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+         dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>.
+         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.
+         if test $HOST_CPU_C_ABI_32BIT = no; then
+           acl_libdirstem2=lib/64
+           case "$host_cpu" in
+             sparc*)        acl_libdirstem3=lib/sparcv9 ;;
+             i*86 | x86_64) acl_libdirstem3=lib/amd64 ;;
+           esac
+         fi
+         ;;
+       *)
+         dnl If $CC generates code for a 32-bit ABI, the libraries are
+         dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64.
+         dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries
+         dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32.
+         dnl Find the compiler's search path. However, non-system compilers
+         dnl sometimes have odd library search paths. But we can't simply invoke
+         dnl '/usr/bin/gcc -print-search-dirs' because that would not take into
+         dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS.
+         searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \
+                     | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+         if test $HOST_CPU_C_ABI_32BIT != no; then
+           # 32-bit or unknown ABI.
+           if test -d /usr/lib32; then
+             acl_libdirstem2=lib32
+           fi
+         fi
+         if test $HOST_CPU_C_ABI_32BIT != yes; then
+           # 64-bit or unknown ABI.
+           if test -d /usr/lib64; then
+             acl_libdirstem3=lib64
+           fi
+         fi
+         if test -n "$searchpath"; then
+           acl_save_IFS="${IFS= 	}"; IFS=":"
+           for searchdir in $searchpath; do
+             if test -d "$searchdir"; then
+               case "$searchdir" in
+                 */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;;
+                 */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;;
+                 */../ | */.. )
+                   # Better ignore directories of this form. They are misleading.
+                   ;;
+                 *) searchdir=`cd "$searchdir" && pwd`
+                    case "$searchdir" in
+                      */lib32 ) acl_libdirstem2=lib32 ;;
+                      */lib64 ) acl_libdirstem3=lib64 ;;
+                    esac ;;
+               esac
+             fi
+           done
+           IFS="$acl_save_IFS"
+           if test $HOST_CPU_C_ABI_32BIT = yes; then
+             # 32-bit ABI.
+             acl_libdirstem3=
+           fi
+           if test $HOST_CPU_C_ABI_32BIT = no; then
+             # 64-bit ABI.
+             acl_libdirstem2=
+           fi
+         fi
+         ;;
+     esac
+     test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+     test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem"
+     acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3"
+    ])
+  dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and
+  dnl acl_libdirstem3.
+changequote(,)dnl
+  acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
+  acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'`
+  acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'`
+changequote([,])dnl
 ])
diff --git a/m4/libtextstyle-optional.m4 b/m4/libtextstyle-optional.m4
new file mode 100644
index 0000000..16c8f16
--- /dev/null
+++ b/m4/libtextstyle-optional.m4
@@ -0,0 +1,30 @@
+# libtextstyle-optional.m4 serial 1
+dnl Copyright (C) 2019 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_LIBTEXTSTYLE_OPTIONAL
+dnl Searches for an installed libtextstyle or uses the included source code
+dnl parts that define only part of the API and does not do any styling.
+dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE
+dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIBTEXTSTYLE to 1.
+dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=no and LIBTEXTSTYLE and
+dnl LTLIBTEXTSTYLE to empty.
+
+AC_DEFUN([gl_LIBTEXTSTYLE_OPTIONAL],
+[
+  AC_REQUIRE([gl_LIBTEXTSTYLE])
+  if test $HAVE_LIBTEXTSTYLE = yes; then
+    TEXTSTYLE_H=
+  else
+    TEXTSTYLE_H=textstyle.h
+    AC_REQUIRE([AC_C_INLINE])
+    AC_CHECK_FUNCS_ONCE([tcdrain])
+  fi
+  AC_SUBST([TEXTSTYLE_H])
+  AM_CONDITIONAL([GL_GENERATE_TEXTSTYLE_H], [test -n "$TEXTSTYLE_H"])
+])
diff --git a/m4/libtextstyle.m4 b/m4/libtextstyle.m4
new file mode 100644
index 0000000..b71e786
--- /dev/null
+++ b/m4/libtextstyle.m4
@@ -0,0 +1,22 @@
+# libtextstyle.m4 serial 1
+dnl Copyright (C) 2019 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_LIBTEXTSTYLE
+dnl Searches for an installed libtextstyle.
+dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE
+dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIBTEXTSTYLE to 1.
+dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=no and LIBTEXTSTYLE and
+dnl LTLIBTEXTSTYLE to empty.
+
+AC_DEFUN([gl_LIBTEXTSTYLE],
+[
+  AC_LIB_HAVE_LINKFLAGS([textstyle], [],
+    [#include <textstyle.h>], [term_styled_ostream_create(1,"",TTYCTL_AUTO,"");],
+    [no])
+])
diff --git a/m4/libunistring-base.m4 b/m4/libunistring-base.m4
index d91c42b..829e71c 100644
--- a/m4/libunistring-base.m4
+++ b/m4/libunistring-base.m4
@@ -1,5 +1,5 @@
 # libunistring-base.m4 serial 5
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2019 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/m4/limits-h.m4 b/m4/limits-h.m4
new file mode 100644
index 0000000..68f724c
--- /dev/null
+++ b/m4/limits-h.m4
@@ -0,0 +1,43 @@
+dnl Check whether limits.h has needed features.
+
+dnl Copyright 2016-2019 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_DEFUN_ONCE([gl_LIMITS_H],
+[
+  gl_CHECK_NEXT_HEADERS([limits.h])
+
+  AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.],
+    [gl_cv_header_limits_width],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+             #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+            #endif
+            #include <limits.h>
+            long long llm = LLONG_MAX;
+            int wb = WORD_BIT;
+            int ullw = ULLONG_WIDTH;
+          ]])],
+       [gl_cv_header_limits_width=yes],
+       [gl_cv_header_limits_width=no])])
+  if test "$gl_cv_header_limits_width" = yes; then
+    LIMITS_H=
+  else
+    LIMITS_H=limits.h
+  fi
+  AC_SUBST([LIMITS_H])
+  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+])
+
+dnl Unconditionally enables the replacement of <limits.h>.
+AC_DEFUN([gl_REPLACE_LIMITS_H],
+[
+  AC_REQUIRE([gl_LIMITS_H])
+  LIMITS_H='limits.h'
+  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+])
diff --git a/m4/localcharset.m4 b/m4/localcharset.m4
index 8010379..2a7f82d 100644
--- a/m4/localcharset.m4
+++ b/m4/localcharset.m4
@@ -1,5 +1,5 @@
-# localcharset.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2009-2012 Free Software Foundation, Inc.
+# localcharset.m4 serial 8
+dnl Copyright (C) 2002, 2004, 2006, 2009-2019 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.
@@ -8,10 +8,4 @@
 [
   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
index 71b6847..cfa068d 100644
--- a/m4/locale-fr.m4
+++ b/m4/locale-fr.m4
@@ -1,5 +1,5 @@
-# locale-fr.m4 serial 17
-dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+# locale-fr.m4 serial 19
+dnl Copyright (C) 2003, 2005-2019 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.
@@ -24,8 +24,14 @@
 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__
+  return 1;
+#else
   /* Check whether the given locale name is recognized by the system.  */
-#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+# if 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
@@ -33,9 +39,9 @@
   if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
       || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
     return 1;
-#else
+# else
   if (setlocale (LC_ALL, "") == NULL) return 1;
-#endif
+# 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.
@@ -44,32 +50,33 @@
      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
+# 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__
+# 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
+# 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.  */
+# 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
+# endif
   return 0;
+#endif
 }
 changequote([,])dnl
       ])])
@@ -153,7 +160,7 @@
      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__
+# if 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
diff --git a/m4/locale-ja.m4 b/m4/locale-ja.m4
index 5ba0e43..487f68b 100644
--- a/m4/locale-ja.m4
+++ b/m4/locale-ja.m4
@@ -1,5 +1,5 @@
-# locale-ja.m4 serial 12
-dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+# locale-ja.m4 serial 14
+dnl Copyright (C) 2003, 2005-2019 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.
@@ -25,9 +25,14 @@
 char buf[16];
 int main ()
 {
-  const char *p;
+  /* 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__
+  return 1;
+#else
   /* Check whether the given locale name is recognized by the system.  */
-#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+# if 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
@@ -35,9 +40,9 @@
   if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
       || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
     return 1;
-#else
+# else
   if (setlocale (LC_ALL, "") == NULL) return 1;
-#endif
+# 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.
@@ -46,32 +51,36 @@
      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
+# 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__
+# 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
+# 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;
+  {
+    const char *p;
+    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;
+#endif
 }
 changequote([,])dnl
       ])])
diff --git a/m4/locale-zh.m4 b/m4/locale-zh.m4
index e5502b2..8b81326 100644
--- a/m4/locale-zh.m4
+++ b/m4/locale-zh.m4
@@ -1,5 +1,5 @@
-# locale-zh.m4 serial 12
-dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+# locale-zh.m4 serial 14
+dnl Copyright (C) 2003, 2005-2019 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.
@@ -26,9 +26,14 @@
 char buf[16];
 int main ()
 {
-  const char *p;
+  /* 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__
+  return 1;
+#else
   /* Check whether the given locale name is recognized by the system.  */
-#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+# if 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
@@ -36,9 +41,9 @@
   if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
       || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
     return 1;
-#else
+# else
   if (setlocale (LC_ALL, "") == NULL) return 1;
-#endif
+# 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.
@@ -47,32 +52,36 @@
      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
+# 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__
+# 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
+# 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;
+  {
+    const char *p;
+    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;
+#endif
 }
 changequote([,])dnl
       ])])
diff --git a/m4/localtime-buffer.m4 b/m4/localtime-buffer.m4
new file mode 100644
index 0000000..6d99828
--- /dev/null
+++ b/m4/localtime-buffer.m4
@@ -0,0 +1,21 @@
+# localtime-buffer.m4 serial 1
+dnl Copyright (C) 2017-2019 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_LOCALTIME_BUFFER_DEFAULTS],
+[
+  NEED_LOCALTIME_BUFFER=0
+])
+
+dnl Macro invoked from other modules, to signal that the compilation of
+dnl module 'localtime-buffer' is needed.
+AC_DEFUN([gl_LOCALTIME_BUFFER_NEEDED],
+[
+  AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS])
+  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
+  NEED_LOCALTIME_BUFFER=1
+  REPLACE_GMTIME=1
+  REPLACE_LOCALTIME=1
+])
diff --git a/m4/lock.m4 b/m4/lock.m4
index 83da6cc..93b76fa 100644
--- a/m4/lock.m4
+++ b/m4/lock.m4
@@ -1,5 +1,5 @@
-# lock.m4 serial 13 (gettext-0.18.2)
-dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# lock.m4 serial 14
+dnl Copyright (C) 2005-2019 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.
@@ -12,11 +12,16 @@
   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.
+    has_rwlock=false
     AC_CHECK_TYPE([pthread_rwlock_t],
-      [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
+      [has_rwlock=true
+       AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
          [Define if the POSIX multithreading library has read/write locks.])],
       [],
       [#include <pthread.h>])
+    if $has_rwlock; then
+      gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+    fi
     # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
     AC_COMPILE_IFELSE([
       AC_LANG_PROGRAM(
@@ -24,6 +29,9 @@
         [[
 #if __FreeBSD__ == 4
 error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
+       && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
 #else
 int x = (int)PTHREAD_MUTEX_RECURSIVE;
 return !x;
diff --git a/m4/longlong.m4 b/m4/longlong.m4
index b9c65c7..08d0e36 100644
--- a/m4/longlong.m4
+++ b/m4/longlong.m4
@@ -1,14 +1,15 @@
-# longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2012 Free Software Foundation, Inc.
+# longlong.m4 serial 18
+dnl Copyright (C) 1999-2007, 2009-2019 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.62])
+
 # 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.
+# This 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
@@ -56,8 +57,7 @@
 ])
 
 # 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.
+# This 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
diff --git a/m4/lstat.m4 b/m4/lstat.m4
new file mode 100644
index 0000000..be6d3f2
--- /dev/null
+++ b/m4/lstat.m4
@@ -0,0 +1,79 @@
+# serial 33
+
+# Copyright (C) 1997-2001, 2003-2019 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.
+
+AC_DEFUN([gl_FUNC_LSTAT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  dnl If lstat does not exist, the replacement <sys/stat.h> does
+  dnl "#define lstat stat", and lstat.c is a no-op.
+  AC_CHECK_FUNCS_ONCE([lstat])
+  if test $ac_cv_func_lstat = yes; then
+    AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+    case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in
+      solaris* | *no)
+        REPLACE_LSTAT=1
+        ;;
+    esac
+  else
+    HAVE_LSTAT=0
+  fi
+])
+
+# Prerequisites of lib/lstat.c.
+AC_DEFUN([gl_PREREQ_LSTAT], [:])
+
+AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
+[
+  dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
+  dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
+    [gl_cv_func_lstat_dereferences_slashed_symlink],
+    [rm -f conftest.sym conftest.file
+     echo >conftest.file
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [AC_INCLUDES_DEFAULT],
+          [[struct stat sbuf;
+            if (symlink ("conftest.file", "conftest.sym") != 0)
+              return 1;
+            /* Linux will dereference the symlink and fail, as required by
+               POSIX.  That is better in the sense that it means we will not
+               have to compile and use the lstat wrapper.  */
+            return lstat ("conftest.sym/", &sbuf) == 0;
+          ]])],
+       [gl_cv_func_lstat_dereferences_slashed_symlink=yes],
+       [gl_cv_func_lstat_dereferences_slashed_symlink=no],
+       [case "$host_os" in
+          linux-* | linux)
+            # Guess yes on Linux systems.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+          *-gnu* | gnu*)
+            # Guess yes on glibc systems.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+          mingw*)
+            # Guess no on native Windows.
+            gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
+          *)
+            # If we don't know, obey --enable-cross-guesses.
+            gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;;
+        esac
+       ])
+     rm -f conftest.sym conftest.file
+    ])
+  case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
+    *yes)
+      AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
+        [Define to 1 if 'lstat' dereferences a symlink specified
+         with a trailing slash.])
+      ;;
+  esac
+])
diff --git a/m4/m4.m4 b/m4/m4.m4
index 7657458..e10197b 100644
--- a/m4/m4.m4
+++ b/m4/m4.m4
@@ -1,6 +1,6 @@
 # m4.m4 serial 12
 
-# Copyright (C) 2000, 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2006-2017 Free Software Foundation, Inc.
 
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
@@ -11,8 +11,8 @@
 # --------------
 # 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
+# https://lists.gnu.org/archive/html/bug-gnu-utils/2006-11/msg00096.html
+# https://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.
diff --git a/m4/malloc.m4 b/m4/malloc.m4
index 8fa48e9..6555dee 100644
--- a/m4/malloc.m4
+++ b/m4/malloc.m4
@@ -1,13 +1,11 @@
-# malloc.m4 serial 14
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# malloc.m4 serial 20
+dnl Copyright (C) 2007, 2009-2019 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
+# This is adapted with modifications from upstream Autoconf here:
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c
 AC_DEFUN([_AC_FUNC_MALLOC_IF],
 [
   AC_REQUIRE([AC_HEADER_STDC])dnl
@@ -23,25 +21,33 @@
             char *malloc ();
             #endif
           ]],
-          [[return ! malloc (0);]])
+          [[char *p = malloc (0);
+            int result = !p;
+            free (p);
+            return result;]])
        ],
        [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* \
+          *-gnu* | gnu* | *-musl* | 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 ;;
+            ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+          # If we don't know, obey --enable-cross-guesses.
+          *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
         esac
        ])
     ])
-  AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2])
+  case "$ac_cv_func_malloc_0_nonnull" in
+    *yes)
+      $1
+      ;;
+    *)
+      $2
+      ;;
+  esac
 ])# _AC_FUNC_MALLOC_IF
 
-])
-
 # gl_FUNC_MALLOC_GNU
 # ------------------
 # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
@@ -88,7 +94,7 @@
       AC_COMPILE_IFELSE(
         [AC_LANG_PROGRAM(
            [[]],
-           [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+           [[#if defined _WIN32 && ! defined __CYGWIN__
              choke me
              #endif
             ]])],
diff --git a/m4/malloca.m4 b/m4/malloca.m4
new file mode 100644
index 0000000..820f40a
--- /dev/null
+++ b/m4/malloca.m4
@@ -0,0 +1,15 @@
+# malloca.m4 serial 1
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2019 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_MALLOCA],
+[
+  dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables
+  dnl @ALLOCA@ and @LTALLOCA@.
+  dnl gl_FUNC_ALLOCA   dnl Already brought in by the module dependencies.
+  AC_REQUIRE([gl_EEMALLOC])
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+])
diff --git a/m4/math_h.m4 b/m4/math_h.m4
index 338e80d..3d5af84 100644
--- a/m4/math_h.m4
+++ b/m4/math_h.m4
@@ -1,5 +1,5 @@
-# math_h.m4 serial 114
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# math_h.m4 serial 119
+dnl Copyright (C) 2007-2019 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.
@@ -256,13 +256,22 @@
   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_ACOSF=0;             AC_SUBST([REPLACE_ACOSF])
+  REPLACE_ASINF=0;             AC_SUBST([REPLACE_ASINF])
+  REPLACE_ATANF=0;             AC_SUBST([REPLACE_ATANF])
+  REPLACE_ATAN2F=0;            AC_SUBST([REPLACE_ATAN2F])
   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_COSF=0;              AC_SUBST([REPLACE_COSF])
+  REPLACE_COSHF=0;             AC_SUBST([REPLACE_COSHF])
+  REPLACE_EXPF=0;              AC_SUBST([REPLACE_EXPF])
+  REPLACE_EXPL=0;              AC_SUBST([REPLACE_EXPL])
   REPLACE_EXPM1=0;             AC_SUBST([REPLACE_EXPM1])
   REPLACE_EXPM1F=0;            AC_SUBST([REPLACE_EXPM1F])
+  REPLACE_EXPM1L=0;            AC_SUBST([REPLACE_EXPM1L])
   REPLACE_EXP2=0;              AC_SUBST([REPLACE_EXP2])
   REPLACE_EXP2L=0;             AC_SUBST([REPLACE_EXP2L])
   REPLACE_FABSL=0;             AC_SUBST([REPLACE_FABSL])
@@ -284,6 +293,7 @@
   REPLACE_HYPOTL=0;            AC_SUBST([REPLACE_HYPOTL])
   REPLACE_ILOGB=0;             AC_SUBST([REPLACE_ILOGB])
   REPLACE_ILOGBF=0;            AC_SUBST([REPLACE_ILOGBF])
+  REPLACE_ILOGBL=0;            AC_SUBST([REPLACE_ILOGBL])
   REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
   REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
   REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
@@ -310,12 +320,18 @@
   REPLACE_REMAINDER=0;         AC_SUBST([REPLACE_REMAINDER])
   REPLACE_REMAINDERF=0;        AC_SUBST([REPLACE_REMAINDERF])
   REPLACE_REMAINDERL=0;        AC_SUBST([REPLACE_REMAINDERL])
+  REPLACE_RINTL=0;             AC_SUBST([REPLACE_RINTL])
   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_SINF=0;              AC_SUBST([REPLACE_SINF])
+  REPLACE_SINHF=0;             AC_SUBST([REPLACE_SINHF])
+  REPLACE_SQRTF=0;             AC_SUBST([REPLACE_SQRTF])
   REPLACE_SQRTL=0;             AC_SUBST([REPLACE_SQRTL])
+  REPLACE_TANF=0;              AC_SUBST([REPLACE_TANF])
+  REPLACE_TANHF=0;             AC_SUBST([REPLACE_TANHF])
   REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
   REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
   REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
diff --git a/m4/mbchar.m4 b/m4/mbchar.m4
index 5650381..3d16342 100644
--- a/m4/mbchar.m4
+++ b/m4/mbchar.m4
@@ -1,5 +1,5 @@
 # mbchar.m4 serial 9
-dnl Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2019 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/m4/mbiter.m4 b/m4/mbfile.m4
similarity index 62%
rename from m4/mbiter.m4
rename to m4/mbfile.m4
index 29a1ef3..2797a57 100644
--- a/m4/mbiter.m4
+++ b/m4/mbfile.m4
@@ -1,13 +1,13 @@
-# mbiter.m4 serial 7
-dnl Copyright (C) 2005, 2008-2012 Free Software Foundation, Inc.
+# mbfile.m4 serial 7
+dnl Copyright (C) 2005, 2008-2019 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 autoconf tests required for use of mbfile.h
 dnl From Bruno Haible.
 
-AC_DEFUN([gl_MBITER],
+AC_DEFUN([gl_MBFILE],
 [
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
   :
diff --git a/m4/mbrtowc.m4 b/m4/mbrtowc.m4
index 8f829c8..16e166b 100644
--- a/m4/mbrtowc.m4
+++ b/m4/mbrtowc.m4
@@ -1,5 +1,5 @@
-# mbrtowc.m4 serial 25
-dnl Copyright (C) 2001-2002, 2004-2005, 2008-2012 Free Software Foundation,
+# mbrtowc.m4 serial 33  -*- coding: utf-8 -*-
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2019 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,
@@ -39,6 +39,8 @@
       gl_MBRTOWC_NULL_ARG2
       gl_MBRTOWC_RETVAL
       gl_MBRTOWC_NUL_RETVAL
+      gl_MBRTOWC_EMPTY_INPUT
+      gl_MBRTOWC_C_LOCALE
       case "$gl_cv_func_mbrtowc_null_arg1" in
         *yes) ;;
         *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1],
@@ -67,6 +69,21 @@
            REPLACE_MBRTOWC=1
            ;;
       esac
+      case "$gl_cv_func_mbrtowc_empty_input" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1],
+             [Define if the mbrtowc function does not return (size_t) -2
+              for empty input.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case $gl_cv_C_locale_sans_EILSEQ in
+        *yes) ;;
+        *) AC_DEFINE([C_LOCALE_MAYBE_EILSEQ], [1],
+             [Define to 1 if the C locale may have encoding errors.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
     fi
   fi
 ])
@@ -109,6 +126,7 @@
 [
   AC_REQUIRE([AC_PROG_CC])
   AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_CACHE_CHECK([whether mbrtowc handles incomplete characters],
     [gl_cv_func_mbrtowc_incomplete_state],
@@ -147,13 +165,46 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
         if (mbsinit (&state))
-          return 1;
+          return 2;
     }
   return 0;
 }]])],
           [gl_cv_func_mbrtowc_incomplete_state=yes],
           [gl_cv_func_mbrtowc_incomplete_state=no],
           [:])
+      else
+        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)
+    {
+      const 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))
+        if (mbsinit (&state))
+          return 2;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_incomplete_state=yes],
+          [gl_cv_func_mbrtowc_incomplete_state=no],
+          [:])
+        fi
       fi
     ])
 ])
@@ -207,7 +258,7 @@
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 3, 6, &state) != 4
           && mbtowc (&wc, input + 3, 6) == 4)
-        return 1;
+        return 2;
     }
   return 0;
 }]])],
@@ -335,7 +386,7 @@
       mbrtowc (&wc, NULL, 5, &state);
       /* Check that wc was not modified.  */
       if (wc != (wchar_t) 0xBADFACE)
-        return 1;
+        return 2;
     }
   return 0;
 }]])],
@@ -522,7 +573,7 @@
 
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, "", 1, &state) != 0)
-        return 1;
+        return 2;
     }
   return 0;
 }]])],
@@ -533,8 +584,91 @@
     ])
 ])
 
+dnl Test whether mbrtowc returns the correct value on empty input.
+
+AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc works on empty input],
+    [gl_cv_func_mbrtowc_empty_input],
+    [
+      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 glibc systems.
+        aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+                              # Guess yes on native Windows.
+        mingw*)               gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+        *)                    gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+      esac
+changequote([,])dnl
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+           #include <wchar.h>
+           static wchar_t wc;
+           static mbstate_t mbs;
+           int
+           main (void)
+           {
+             return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2;
+           }]])],
+        [gl_cv_func_mbrtowc_empty_input=yes],
+        [gl_cv_func_mbrtowc_empty_input=no],
+        [:])
+    ])
+])
+
+dnl Test whether mbrtowc reports encoding errors in the C locale.
+dnl Although POSIX was never intended to allow this, the GNU C Library
+dnl and other implementations do it.  See:
+dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932
+
+AC_DEFUN([gl_MBRTOWC_C_LOCALE],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether the C locale is free of encoding errors],
+    [gl_cv_C_locale_sans_EILSEQ],
+    [
+     dnl Initial guess, used when cross-compiling or when no suitable locale
+     dnl is present.
+     gl_cv_C_locale_sans_EILSEQ="$gl_cross_guess_normal"
+
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <limits.h>
+            #include <locale.h>
+            #include <wchar.h>
+          ]], [[
+            int i;
+            char *locale = setlocale (LC_ALL, "C");
+            if (! locale)
+              return 2;
+            for (i = CHAR_MIN; i <= CHAR_MAX; i++)
+              {
+                char c = i;
+                wchar_t wc;
+                mbstate_t mbs = { 0, };
+                size_t ss = mbrtowc (&wc, &c, 1, &mbs);
+                if (1 < ss)
+                  return 3;
+              }
+            return 0;
+          ]])],
+      [gl_cv_C_locale_sans_EILSEQ=yes],
+      [gl_cv_C_locale_sans_EILSEQ=no],
+      [case "$host_os" in
+                 # Guess yes on native Windows.
+         mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;;
+       esac
+      ])
+    ])
+])
+
 # Prerequisites of lib/mbrtowc.c.
 AC_DEFUN([gl_PREREQ_MBRTOWC], [
+  AC_REQUIRE([AC_C_INLINE])
   :
 ])
 
@@ -547,7 +681,7 @@
 [
   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,
+    [gl_cv_func_mbrtowc],
     [AC_LINK_IFELSE(
        [AC_LANG_PROGRAM(
             [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
@@ -563,8 +697,8 @@
               size_t n = 1;
               mbstate_t state;
               return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
-       gl_cv_func_mbrtowc=yes,
-       gl_cv_func_mbrtowc=no)])
+       [gl_cv_func_mbrtowc=yes],
+       [gl_cv_func_mbrtowc=no])])
   if test $gl_cv_func_mbrtowc = yes; then
     AC_DEFINE([HAVE_MBRTOWC], [1],
       [Define to 1 if mbrtowc and mbstate_t are properly declared.])
diff --git a/m4/mbsinit.m4 b/m4/mbsinit.m4
index da56c3d..e2f45e7 100644
--- a/m4/mbsinit.m4
+++ b/m4/mbsinit.m4
@@ -1,5 +1,5 @@
 # mbsinit.m4 serial 8
-dnl Copyright (C) 2008, 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2008, 2010-2019 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/m4/mbstate_t.m4 b/m4/mbstate_t.m4
index 61a8190..f669753 100644
--- a/m4/mbstate_t.m4
+++ b/m4/mbstate_t.m4
@@ -1,5 +1,5 @@
 # mbstate_t.m4 serial 13
-dnl Copyright (C) 2000-2002, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2019 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/m4/mbswidth.m4 b/m4/mbswidth.m4
index e5d0457..bf0860c 100644
--- a/m4/mbswidth.m4
+++ b/m4/mbswidth.m4
@@ -1,5 +1,5 @@
 # mbswidth.m4 serial 18
-dnl Copyright (C) 2000-2002, 2004, 2006-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2004, 2006-2019 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/m4/memchr.m4 b/m4/memchr.m4
index 0040294..c12d20a 100644
--- a/m4/memchr.m4
+++ b/m4/memchr.m4
@@ -1,11 +1,13 @@
-# memchr.m4 serial 12
-dnl Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+# memchr.m4 serial 15
+dnl Copyright (C) 2002-2004, 2009-2019 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],
 [
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
   dnl Check for prerequisites for memory fence checks.
   gl_FUNC_MMAP_ANON
   AC_CHECK_HEADERS_ONCE([sys/mman.h])
@@ -23,10 +25,12 @@
   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
+    #   https://bugzilla.redhat.com/show_bug.cgi?id=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
+    #   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # memchr should cast the second argument to 'unsigned char'.
+    #   This bug exists in Android 4.3.
     # 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([[
@@ -72,13 +76,33 @@
       if (memchr (fence - 1, 0, 3) != fence - 1)
         result |= 4;
     }
+  /* Test against bug on Android 4.3.  */
+  {
+    char input[3];
+    input[0] = 'a';
+    input[1] = 'b';
+    input[2] = 'c';
+    if (memchr (input, 0x789abc00 | 'b', 3) != input + 1)
+      result |= 8;
+  }
   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
+]])],
+         [gl_cv_func_memchr_works=yes],
+         [gl_cv_func_memchr_works=no],
+         [case "$host_os" in
+                             # Guess no on Android.
+            linux*-android*) gl_cv_func_memchr_works="guessing no" ;;
+                             # Guess yes on native Windows.
+            mingw*)          gl_cv_func_memchr_works="guessing yes" ;;
+                             # If we don't know, obey --enable-cross-guesses.
+            *)               gl_cv_func_memchr_works="$gl_cross_guess_normal" ;;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_memchr_works" in
+      *yes) ;;
+      *) REPLACE_MEMCHR=1 ;;
+    esac
   fi
 ])
 
diff --git a/m4/minmax.m4 b/m4/minmax.m4
new file mode 100644
index 0000000..1e0d30b
--- /dev/null
+++ b/m4/minmax.m4
@@ -0,0 +1,44 @@
+# minmax.m4 serial 4
+dnl Copyright (C) 2005, 2009-2019 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_PREREQ([2.53])
+
+AC_DEFUN([gl_MINMAX],
+[
+  AC_REQUIRE([gl_PREREQ_MINMAX])
+])
+
+# Prerequisites of lib/minmax.h.
+AC_DEFUN([gl_PREREQ_MINMAX],
+[
+  gl_MINMAX_IN_HEADER([limits.h])
+  gl_MINMAX_IN_HEADER([sys/param.h])
+])
+
+dnl gl_MINMAX_IN_HEADER(HEADER)
+dnl The parameter has to be a literal header name; it cannot be macro,
+dnl nor a shell variable. (Because autoheader collects only AC_DEFINE
+dnl invocations with a literal macro name.)
+AC_DEFUN([gl_MINMAX_IN_HEADER],
+[
+  m4_pushdef([header], AS_TR_SH([$1]))
+  m4_pushdef([HEADER], AS_TR_CPP([$1]))
+  AC_CACHE_CHECK([whether <$1> defines MIN and MAX],
+    [gl_cv_minmax_in_]header,
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <$1>
+            int x = MIN (42, 17);]],
+          [[]])],
+       [gl_cv_minmax_in_]header[=yes],
+       [gl_cv_minmax_in_]header[=no])])
+  if test $gl_cv_minmax_in_[]header = yes; then
+    AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1,
+      [Define to 1 if <$1> defines the MIN and MAX macros.])
+  fi
+  m4_popdef([HEADER])
+  m4_popdef([header])
+])
diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4
index 748b17d..50c3808 100644
--- a/m4/mmap-anon.m4
+++ b/m4/mmap-anon.m4
@@ -1,5 +1,5 @@
 # mmap-anon.m4 serial 10
-dnl Copyright (C) 2005, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2007, 2009-2019 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/m4/mode_t.m4 b/m4/mode_t.m4
index 40f612a..ba840dc 100644
--- a/m4/mode_t.m4
+++ b/m4/mode_t.m4
@@ -1,5 +1,5 @@
 # mode_t.m4 serial 2
-dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2019 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/m4/msvc-inval.m4 b/m4/msvc-inval.m4
index 8db4617..4b95876 100644
--- a/m4/msvc-inval.m4
+++ b/m4/msvc-inval.m4
@@ -1,5 +1,5 @@
 # msvc-inval.m4 serial 1
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2019 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/m4/msvc-nothrow.m4 b/m4/msvc-nothrow.m4
index 0125050..7e73b40 100644
--- a/m4/msvc-nothrow.m4
+++ b/m4/msvc-nothrow.m4
@@ -1,5 +1,5 @@
 # msvc-nothrow.m4 serial 1
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2019 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/m4/multiarch.m4 b/m4/multiarch.m4
index 0c288b8..d48316e 100644
--- a/m4/multiarch.m4
+++ b/m4/multiarch.m4
@@ -1,5 +1,5 @@
 # multiarch.m4 serial 7
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2019 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/m4/nls.m4 b/m4/nls.m4
index 0866677..53cdc8b 100644
--- a/m4/nls.m4
+++ b/m4/nls.m4
@@ -1,5 +1,5 @@
 # nls.m4 serial 5 (gettext-0.18)
-dnl Copyright (C) 1995-2003, 2005-2006, 2008-2012 Free Software Foundation,
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 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,
diff --git a/m4/nocrash.m4 b/m4/nocrash.m4
index c2638df..8577038 100644
--- a/m4/nocrash.m4
+++ b/m4/nocrash.m4
@@ -1,5 +1,5 @@
-# nocrash.m4 serial 4
-dnl Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+# nocrash.m4 serial 5
+dnl Copyright (C) 2005, 2009-2019 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.
@@ -53,7 +53,7 @@
   /* 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.  */
+    /* See https://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) {
@@ -72,14 +72,14 @@
            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.  */
+           See https://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__
+#elif defined _WIN32 && ! defined __CYGWIN__
 /* Avoid a crash on native Windows.  */
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -110,11 +110,12 @@
 #else
 /* Avoid a crash on POSIX systems.  */
 #include <signal.h>
+#include <unistd.h>
 /* A POSIX signal handler.  */
 static void
 exception_handler (int sig)
 {
-  exit (1);
+  _exit (1);
 }
 static void
 nocrash_init (void)
diff --git a/m4/non-recursive-gnulib-prefix-hack.m4 b/m4/non-recursive-gnulib-prefix-hack.m4
new file mode 100644
index 0000000..eef7e75
--- /dev/null
+++ b/m4/non-recursive-gnulib-prefix-hack.m4
@@ -0,0 +1,32 @@
+dnl Copyright (C) 2012-2019 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 gl_NON_RECURSIVE_GNULIB_PREFIX_HACK LIB_DIR
+dnl Adjust configure-set $gl_LIBOBJS and each AC_SUBST'd *_H variable
+dnl with a value ending in ".h" to reflect that these files are located
+dnl in the directory specified by LIB_DIR.
+AC_DEFUN([gl_NON_RECURSIVE_GNULIB_PREFIX_HACK],
+[
+  # Tell AC_LIBSOURCES where to find source files like alloca.c.
+  AC_CONFIG_LIBOBJ_DIR([$1])
+
+  # This hack originated in bison.  It is required when using non-recursive
+  # automake rules to build from gnulib-provided lib/ sources.  Hence, LIB_DIR
+  # is usually simply "lib".  Those rules use the list of names like "fchdir.o"
+  # and "strstr.o" in gl_LIBOBJS.  With non-recursive make, we must prefix each
+  # such file name with the "lib/" prefix.  See also build-aux/prefix-gnulib-mk.
+  gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , $1/,g'`
+
+  # Listing the names of the variables to prefix is error-prone.
+  # Rather, adjust each AC_SUBST'd variable whose name ends in '_H'
+  # and whose value ends in '.h'.
+  for ac_var in $ac_subst_vars
+  do
+    eval "ac_val=\$$ac_var"
+    case $ac_var:$ac_val in
+      *_H:*.h) eval "$ac_var=$1/\$$ac_var";;
+    esac
+  done
+])
diff --git a/m4/obstack-printf.m4 b/m4/obstack-printf.m4
index a57513e..deea045 100644
--- a/m4/obstack-printf.m4
+++ b/m4/obstack-printf.m4
@@ -1,5 +1,5 @@
 # obstack-printf.m4 serial 4
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2019 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/m4/obstack.m4 b/m4/obstack.m4
new file mode 100644
index 0000000..b56fca4
--- /dev/null
+++ b/m4/obstack.m4
@@ -0,0 +1,35 @@
+# See if we need to provide obstacks.
+
+dnl Copyright 1996-2019 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 replaces Autoconf's AC_FUNC_OBSTACK.
+dnl The Autoconf version should be marked obsolete at some point.
+
+AC_DEFUN([AC_FUNC_OBSTACK],
+  [AC_LIBSOURCES([obstack.h, obstack.c])dnl
+   AC_CACHE_CHECK([for obstacks that work with any size object],
+     [ac_cv_func_obstack],
+     [AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include "obstack.h"
+             void *obstack_chunk_alloc (size_t n) { return 0; }
+             void obstack_chunk_free (void *p) { }
+             /* Check that an internal function returns size_t, not int.  */
+             size_t _obstack_memory_used (struct obstack *);
+            ]],
+           [[struct obstack mem;
+             obstack_init (&mem);
+             obstack_free (&mem, 0);
+           ]])],
+        [ac_cv_func_obstack=yes],
+        [ac_cv_func_obstack=no])])
+   if test "$ac_cv_func_obstack" = yes; then
+     AC_DEFINE([HAVE_OBSTACK], 1,
+       [Define to 1 if the system has obstacks that work with any size object.])
+   else
+     AC_LIBOBJ([obstack])
+   fi
+])
diff --git a/m4/off_t.m4 b/m4/off_t.m4
index dfca2df..711a2d4 100644
--- a/m4/off_t.m4
+++ b/m4/off_t.m4
@@ -1,5 +1,5 @@
 # off_t.m4 serial 1
-dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2019 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/m4/open-cloexec.m4 b/m4/open-cloexec.m4
new file mode 100644
index 0000000..52498d9
--- /dev/null
+++ b/m4/open-cloexec.m4
@@ -0,0 +1,21 @@
+# Test whether O_CLOEXEC is defined.
+
+dnl Copyright 2017-2019 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_PREPROC_O_CLOEXEC],
+[
+  AC_CACHE_CHECK([for O_CLOEXEC],
+    [gl_cv_macro_O_CLOEXEC],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[#include <fcntl.h>
+                          #ifndef O_CLOEXEC
+                            choke me;
+                          #endif
+                        ]],
+                        [[return O_CLOEXEC;]])],
+       [gl_cv_macro_O_CLOEXEC=yes],
+       [gl_cv_macro_O_CLOEXEC=no])])
+])
diff --git a/m4/open-slash.m4 b/m4/open-slash.m4
new file mode 100644
index 0000000..a8756ae
--- /dev/null
+++ b/m4/open-slash.m4
@@ -0,0 +1,59 @@
+# open-slash.m4 serial 1
+dnl Copyright (C) 2007-2019 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 open() and creat() recognize a trailing slash.
+dnl Sets gl_cv_func_open_slash.
+AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  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.])
+      ;;
+  esac
+])
diff --git a/m4/open.m4 b/m4/open.m4
index 2577a22..6cf0beb 100644
--- a/m4/open.m4
+++ b/m4/open.m4
@@ -1,5 +1,5 @@
-# open.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# open.m4 serial 15
+dnl Copyright (C) 2007-2019 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,6 +7,7 @@
 AC_DEFUN([gl_FUNC_OPEN],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_PREPROC_O_CLOEXEC])
   case "$host_os" in
     mingw* | pw*)
       REPLACE_OPEN=1
@@ -15,48 +16,12 @@
       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
-        ])
+      if test "$gl_cv_macro_O_CLOEXEC" != yes; then
+        REPLACE_OPEN=1
+      fi
+      gl_OPEN_TRAILING_SLASH_BUG
       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
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
index 0117861..0770aca 100644
--- a/m4/pathmax.m4
+++ b/m4/pathmax.m4
@@ -1,5 +1,5 @@
-# pathmax.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation,
+# pathmax.m4 serial 11
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 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,
@@ -29,7 +29,7 @@
 # undef PATH_MAX
 # define PATH_MAX 1024
 #endif
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#if defined _WIN32 && ! defined __CYGWIN__
 # undef PATH_MAX
 # define PATH_MAX 260
 #endif
diff --git a/m4/perror.m4 b/m4/perror.m4
index 369a824..8e9a3a8 100644
--- a/m4/perror.m4
+++ b/m4/perror.m4
@@ -1,5 +1,5 @@
-# perror.m4 serial 6
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# perror.m4 serial 9
+dnl Copyright (C) 2008-2019 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.
@@ -10,6 +10,7 @@
   AC_REQUIRE([gl_HEADER_ERRNO_H])
   AC_REQUIRE([gl_FUNC_STRERROR_R])
   AC_REQUIRE([gl_FUNC_STRERROR_0])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   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
@@ -46,13 +47,20 @@
             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"
+           [case "$host_os" in
+                       # Guess yes on musl systems.
+              *-musl*) gl_cv_func_perror_works="guessing yes" ;;
+                       # Guess yes on native Windows.
+              mingw*)  gl_cv_func_perror_works="guessing yes" ;;
+                       # Otherwise obey --enable-cross-guesses.
+              *)       gl_cv_func_perror_works="$gl_cross_guess_normal" ;;
+            esac
            ])
         ])
-      if test "$gl_cv_func_perror_works" != yes; then
-        REPLACE_PERROR=1
-      fi
+      case "$gl_cv_func_perror_works" in
+        *yes) ;;
+        *) REPLACE_PERROR=1 ;;
+      esac
       ;;
     *)
       dnl The system's perror() probably inherits the bugs in the
diff --git a/m4/pipe2.m4 b/m4/pipe2.m4
index 00ad82b..03008eb 100644
--- a/m4/pipe2.m4
+++ b/m4/pipe2.m4
@@ -1,5 +1,5 @@
 # pipe2.m4 serial 2
-dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2019 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/m4/po.m4 b/m4/po.m4
index 05d8f7b..84659ea 100644
--- a/m4/po.m4
+++ b/m4/po.m4
@@ -1,5 +1,5 @@
-# po.m4 serial 17b
-dnl Copyright (C) 1995-2012 Free Software Foundation, Inc.
+# po.m4 serial 22 (gettext-0.19)
+dnl Copyright (C) 1995-2014 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.
@@ -17,19 +17,20 @@
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
 dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
 
-AC_PREREQ([2.50])
+AC_PREREQ([2.60])
 
 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([AC_PROG_MKDIR_P])dnl
+  AC_REQUIRE([AC_PROG_SED])dnl
   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])
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.19])
 
   dnl Perform the following tests also if --disable-nls has been given,
   dnl because they are needed for "make dist" to work.
@@ -102,7 +103,7 @@
       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_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.
@@ -227,7 +228,7 @@
 changequote(,)dnl
   # Adjust a relative srcdir.
   ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-  ac_dir_suffix="/`echo "$ac_dir"|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.
diff --git a/m4/posix_spawn.m4 b/m4/posix_spawn.m4
index 57928eb..0128390 100644
--- a/m4/posix_spawn.m4
+++ b/m4/posix_spawn.m4
@@ -1,5 +1,5 @@
-# posix_spawn.m4 serial 11
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# posix_spawn.m4 serial 17
+dnl Copyright (C) 2008-2019 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.
@@ -33,45 +33,66 @@
   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], [
+    m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR],
+      [dnl Module 'posix_spawn_file_actions_addchdir' is present.
+       AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir_np])
+       if test $ac_cv_func_posix_spawn_file_actions_addchdir_np = no; then
+         dnl In order to implement the posix_spawn_file_actions_addchdir
+         dnl function, we need to replace the entire posix_spawn facility.
+         REPLACE_POSIX_SPAWN=1
+       fi
+      ])
+    m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR],
+      [dnl Module 'posix_spawn_file_actions_addfchdir' is present.
+       AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addfchdir_np])
+       if test $ac_cv_func_posix_spawn_file_actions_addfchdir_np = no; then
+         dnl In order to implement the posix_spawn_file_actions_addfchdir
+         dnl function, we need to replace the entire posix_spawn facility.
+         REPLACE_POSIX_SPAWN=1
+       fi
+      ])
+    if test $REPLACE_POSIX_SPAWN = 0; then
+      gl_POSIX_SPAWN_WORKS
+      case "$gl_cv_func_posix_spawn_works" in
+        *yes)
+          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], [
+               [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
+               [gl_cv_func_spawnattr_setschedparam=yes],
+               [gl_cv_func_spawnattr_setschedparam=no])
+            ])
+          ;;
+        *) REPLACE_POSIX_SPAWN=1 ;;
+      esac
+    fi
+  fi
+  if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then
+    AC_DEFINE([REPLACE_POSIX_SPAWN], [1],
+      [Define if gnulib uses its own posix_spawn and posix_spawnp functions.])
   fi
 ])
 
@@ -224,7 +245,7 @@
          [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
+             && cmp conftest.out conftest.ok >/dev/null 2>&1; then
             gl_cv_func_posix_spawn_works=yes
           else
             gl_cv_func_posix_spawn_works=no
@@ -410,8 +431,8 @@
   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.
+    dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_addclose
+    dnl succeeds even 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(
@@ -428,10 +449,13 @@
 }]])],
          [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.
+         [# Guess no on musl libc and 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";;
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+            solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;;
+            *)        gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes" ;;
           esac
          ])
       ])
@@ -451,8 +475,8 @@
   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.
+    dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_adddup2
+    dnl succeeds even 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(
@@ -469,9 +493,12 @@
 }]])],
          [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.
+         [# Guess no on musl libc and Solaris, yes otherwise.
           case "$host_os" in
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
             solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no" ;;
             *)        gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";;
           esac
          ])
@@ -492,8 +519,8 @@
   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.
+    dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_addopen
+    dnl succeeds even 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(
@@ -512,9 +539,12 @@
 }]])],
          [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.
+         [# Guess no on musl libc and Solaris, yes otherwise.
           case "$host_os" in
+            *-musl*)  gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
             solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";;
+                      # Guess no on native Windows.
+            mingw*)   gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;;
             *)        gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";;
           esac
          ])
diff --git a/m4/printf-frexp.m4 b/m4/printf-frexp.m4
index de5d641..4d4aae5 100644
--- a/m4/printf-frexp.m4
+++ b/m4/printf-frexp.m4
@@ -1,5 +1,5 @@
 # printf-frexp.m4 serial 5
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2019 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/m4/printf-frexpl.m4 b/m4/printf-frexpl.m4
index c960a49..6835612 100644
--- a/m4/printf-frexpl.m4
+++ b/m4/printf-frexpl.m4
@@ -1,5 +1,5 @@
 # printf-frexpl.m4 serial 10
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2019 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/m4/printf-posix-rpl.m4 b/m4/printf-posix-rpl.m4
index 5bac077..b98da6f 100644
--- a/m4/printf-posix-rpl.m4
+++ b/m4/printf-posix-rpl.m4
@@ -1,5 +1,5 @@
 # printf-posix-rpl.m4 serial 4
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/printf.m4 b/m4/printf.m4
index 751e896..d59db20 100644
--- a/m4/printf.m4
+++ b/m4/printf.m4
@@ -1,5 +1,5 @@
-# printf.m4 serial 50
-dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+# printf.m4 serial 62
+dnl Copyright (C) 2003, 2007-2019 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.
@@ -38,6 +38,8 @@
   if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
       || strcmp (buf, "12345671 33") != 0)
     result |= 1;
+#else
+  result |= 1;
 #endif
   buf[0] = '\0';
   if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
@@ -56,12 +58,14 @@
         [gl_cv_func_printf_sizes_c99=yes],
         [gl_cv_func_printf_sizes_c99=no],
         [
-changequote(,)dnl
          case "$host_os" in
+changequote(,)dnl
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_sizes_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -77,10 +81,21 @@
            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
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_printf_sizes_c99="guessing yes";;
 changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_sizes_c99="guessing yes"],
+                                   [gl_cv_func_printf_sizes_c99="guessing no"])
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";;
+         esac
         ])
     ])
 ])
@@ -120,14 +135,22 @@
 }]])],
         [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";;
+        [case "$host_os" in
+                            # Guess no on BeOS.
+           beos*)           gl_cv_func_printf_long_double="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_long_double="guessing yes";;
+                            # Guess yes on MSVC, no on mingw.
+           mingw*)          AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                              ],
+                              [gl_cv_func_printf_long_double="guessing yes"],
+                              [gl_cv_func_printf_long_double="guessing no"])
+                            ;;
+           *)               gl_cv_func_printf_long_double="guessing yes";;
          esac
-changequote([,])dnl
         ])
     ])
 ])
@@ -215,12 +238,14 @@
         [gl_cv_func_printf_infinite=yes],
         [gl_cv_func_printf_infinite=no],
         [
-changequote(,)dnl
          case "$host_os" in
+changequote(,)dnl
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_infinite="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              gl_cv_func_printf_infinite="guessing yes";;
                                  # Guess yes on FreeBSD >= 6.
-           freebsd[1-5]*)        gl_cv_func_printf_infinite="guessing no";;
+           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";;
@@ -234,10 +259,21 @@
            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
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_infinite="guessing no";;
 changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_infinite="guessing yes"],
+                                   [gl_cv_func_printf_infinite="guessing no"])
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_infinite="$gl_cross_guess_normal";;
+         esac
         ])
     ])
 ])
@@ -328,7 +364,7 @@
 # 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) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
        (unsigned int) (mantlo) << 16                                        \
      }
 # else
@@ -365,66 +401,51 @@
   { /* 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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 4;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 4;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 8;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 8;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 16;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 16;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 32;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 32;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       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)))
+    if (sprintf (buf, "%Lf", x.value) <= 0)
       result |= 64;
-    if (sprintf (buf, "%Le", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Le", x.value) <= 0)
       result |= 64;
-    if (sprintf (buf, "%Lg", x.value) < 0
-        || !strisnan (buf, 0, strlen (buf)))
+    if (sprintf (buf, "%Lg", x.value) <= 0)
       result |= 64;
   }
 #endif
@@ -432,27 +453,39 @@
 }]])],
             [gl_cv_func_printf_infinite_long_double=yes],
             [gl_cv_func_printf_infinite_long_double=no],
-            [
-changequote(,)dnl
-             case "$host_cpu" in
+            [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
+changequote(,)dnl
                                          # Guess yes on glibc systems.
-                   *-gnu*)               gl_cv_func_printf_infinite_long_double="guessing yes";;
+                   *-gnu* | gnu*)        gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on musl systems.
+                   *-musl*)              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[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";;
+                                         # Guess no on Android.
+                   linux*-android*)      gl_cv_func_printf_infinite_long_double="guessing no";;
+changequote([,])dnl
+                                         # Guess yes on MSVC, no on mingw.
+                   mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                           ],
+                                           [gl_cv_func_printf_infinite_long_double="guessing yes"],
+                                           [gl_cv_func_printf_infinite_long_double="guessing no"])
+                                         ;;
+                                         # If we don't know, obey --enable-cross-guesses.
+                   *)                    gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";;
                  esac
                  ;;
              esac
-changequote([,])dnl
             ])
         ])
       ;;
@@ -502,8 +535,15 @@
           && strcmp (buf, "0x6.0ap-2 33") != 0
           && strcmp (buf, "0xc.14p-3 33") != 0))
     result |= 4;
+  /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round.  */
+  if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x2p+0 33") != 0
+          && strcmp (buf, "0x3p-1 33") != 0
+          && strcmp (buf, "0x6p-2 33") != 0
+          && strcmp (buf, "0xcp-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> */
+     <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */
   if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
       || buf[0] == '0')
     result |= 8;
@@ -515,7 +555,7 @@
           && 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>.  */
+     glibc 2.4 bug <https://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
@@ -529,7 +569,7 @@
         [
          case "$host_os" in
                                  # Guess yes on glibc >= 2.5 systems.
-           *-gnu*)
+           *-gnu* | gnu*)
              AC_EGREP_CPP([BZ2908], [
                #include <features.h>
                #ifdef __GNU_LIBRARY__
@@ -541,8 +581,14 @@
                [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";;
+                                 # Guess yes on musl systems.
+           *-musl*)              gl_cv_func_printf_directive_a="guessing yes";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_directive_a="guessing no";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_printf_directive_a="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_directive_a="$gl_cross_guess_normal";;
          esac
         ])
     ])
@@ -583,23 +629,36 @@
         [gl_cv_func_printf_directive_f=yes],
         [gl_cv_func_printf_directive_f=no],
         [
-changequote(,)dnl
          case "$host_os" in
+changequote(,)dnl
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_printf_directive_f="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
+           solaris*)             gl_cv_func_printf_directive_f="guessing no";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_printf_directive_f="guessing no";;
 changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_directive_f="guessing yes"],
+                                   [gl_cv_func_printf_directive_f="guessing no"])
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_printf_directive_f="$gl_cross_guess_normal";;
+         esac
         ])
     ])
 ])
@@ -651,13 +710,13 @@
 }]])],
         [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";;
+        [case "$host_os" in
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_directive_n="guessing no";;
+                            # Guess no on native Windows.
+           mingw*)          gl_cv_func_printf_directive_n="guessing no";;
+           *)               gl_cv_func_printf_directive_n="guessing yes";;
          esac
-changequote([,])dnl
         ])
     ])
 ])
@@ -737,6 +796,10 @@
            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";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_directive_ls="guessing no";;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_printf_directive_ls="guessing yes";;
            *)               gl_cv_func_printf_directive_ls="guessing yes";;
          esac
 changequote([,])dnl
@@ -774,10 +837,13 @@
 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";;
+                            gl_cv_func_printf_positions="guessing no";;
+           beos*)           gl_cv_func_printf_positions="guessing no";;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_positions="guessing yes";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_positions="guessing no";;
+           *)               gl_cv_func_printf_positions="guessing yes";;
          esac
 changequote([,])dnl
         ])
@@ -812,10 +878,13 @@
         [
 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";;
+           cygwin*)         gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)         gl_cv_func_printf_flag_grouping="guessing no";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";;
+                            # Guess no on native Windows.
+           mingw* | pw*)    gl_cv_func_printf_flag_grouping="guessing no";;
+           *)               gl_cv_func_printf_flag_grouping="guessing yes";;
          esac
 changequote([,])dnl
         ])
@@ -824,7 +893,7 @@
 
 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 <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html>
 dnl Result is gl_cv_func_printf_flag_leftadjust.
 
 AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST],
@@ -852,12 +921,16 @@
         [
 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";;
+                            # 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 on Android.
+           linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                            # Guess yes otherwise.
+           *)               gl_cv_func_printf_flag_leftadjust="guessing yes";;
          esac
 changequote([,])dnl
         ])
@@ -866,7 +939,7 @@
 
 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 <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html>
 dnl Result is gl_cv_func_printf_flag_zero.
 
 AC_DEFUN([gl_PRINTF_FLAG_ZERO],
@@ -895,12 +968,18 @@
         [
 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";;
+                            # Guess yes on glibc systems.
+           *-gnu* | gnu*)   gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess yes on musl systems.
+           *-musl*)         gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess yes on BeOS.
+           beos*)           gl_cv_func_printf_flag_zero="guessing yes";;
+                            # Guess no on Android.
+           linux*-android*) gl_cv_func_printf_flag_zero="guessing no";;
+                            # Guess no on native Windows.
+           mingw*)          gl_cv_func_printf_flag_zero="guessing no";;
+                            # If we don't know, obey --enable-cross-guesses.
+           *)               gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";;
          esac
 changequote([,])dnl
         ])
@@ -953,10 +1032,12 @@
 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" ;;
+           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" ;;
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_printf_precision="guessing yes" ;;
+           *)               gl_cv_func_printf_precision="guessing yes" ;;
          esac
 changequote([,])dnl
         ])
@@ -1053,28 +1134,30 @@
       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";;
+                           # Guess yes on glibc systems.
+          *-gnu* | 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";;
+                           # Guess no on Android.
+          linux*-android*) gl_cv_func_printf_enomem="guessing no";;
+                           # If we don't know, obey --enable-cross-guesses.
+          *)               gl_cv_func_printf_enomem="$gl_cross_guess_normal";;
         esac
 changequote([,])dnl
       fi
@@ -1134,9 +1217,11 @@
 changequote(,)dnl
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_truncation_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -1166,8 +1251,12 @@
            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";;
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_truncation_c99="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";;
          esac
 changequote([,])dnl
         ])
@@ -1229,13 +1318,14 @@
 }]])],
         [gl_cv_func_snprintf_retval_c99=yes],
         [gl_cv_func_snprintf_retval_c99=no],
-        [
+        [case "$host_os" in
 changequote(,)dnl
-         case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_retval_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -1256,10 +1346,21 @@
            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
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_snprintf_retval_c99="guessing yes";;
 changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_snprintf_retval_c99="guessing yes"],
+                                   [gl_cv_func_snprintf_retval_c99="guessing no"])
+                                 ;;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";;
+         esac
         ])
     ])
 ])
@@ -1314,9 +1415,11 @@
 changequote(,)dnl
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_snprintf_directive_n="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -1339,8 +1442,12 @@
            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";;
+                                 # Guess no on Android.
+           linux*-android*)      gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";;
          esac
 changequote([,])dnl
         ])
@@ -1355,6 +1462,7 @@
 AC_DEFUN([gl_SNPRINTF_SIZE1],
 [
   AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_REQUIRE([gl_SNPRINTF_PRESENCE])
   AC_CACHE_CHECK([whether snprintf respects a size of 1],
     [gl_cv_func_snprintf_size1],
@@ -1384,7 +1492,14 @@
 }]])],
         [gl_cv_func_snprintf_size1=yes],
         [gl_cv_func_snprintf_size1=no],
-        [gl_cv_func_snprintf_size1="guessing yes"])
+        [case "$host_os" in
+                            # Guess yes on Android.
+           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+        ])
     ])
 ])
 
@@ -1456,9 +1571,11 @@
 changequote(,)dnl
          case "$host_os" in
                                  # Guess yes on glibc systems.
-           *-gnu*)               gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+           *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on musl systems.
+           *-musl*)              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[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";;
@@ -1480,10 +1597,12 @@
            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.
+                                 # Guess yes on Android.
+           linux*-android*)      gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on native Windows.
            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";;
+                                 # If we don't know, obey --enable-cross-guesses.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";;
          esac
 changequote([,])dnl
         ])
@@ -1546,7 +1665,9 @@
 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 11.4                   .  .  #  #  #  .  .  #  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Solaris 11.3                   .  .  .  .  #  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   Solaris 11.0                   .  .  #  #  #  .  .  #  .  .  .  #  .  .  .  .  .  .  .  .
 dnl   Solaris 10                     .  .  #  #  #  .  .  #  .  .  .  #  #  .  .  .  .  .  .  .
 dnl   Solaris 2.6 ... 9              #  .  #  #  #  #  .  #  .  .  .  #  #  .  .  .  #  .  .  .
 dnl   Solaris 2.5.1                  #  .  #  #  #  #  .  #  .  .  .  #  .  .  #  #  #  #  #  #
@@ -1564,6 +1685,7 @@
 dnl   NetBSD 3.0                     .  .  .  .  #  #  .  ?  #  #  ?  #  .  #  .  .  .  .  .  .
 dnl   Haiku                          .  .  .  #  #  #  .  #  .  .  .  .  .  ?  .  .  ?  .  .  .
 dnl   BeOS                           #  #  .  #  #  #  .  ?  #  .  ?  .  #  ?  .  .  ?  .  .  .
+dnl   Android 4.3                    .  .  #  #  #  #  #  #  .  #  .  #  .  #  .  .  .  #  .  .
 dnl   old mingw / msvcrt             #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
 dnl   MSVC 9                         #  #  #  #  #  #  #  .  #  #  .  #  #  ?  #  #  #  #  .  .
 dnl   mingw 2009-2011                .  #  .  #  .  .  .  .  #  #  .  .  .  ?  .  .  .  .  .  .
diff --git a/m4/progtest.m4 b/m4/progtest.m4
index ce3abbc..b499f79 100644
--- a/m4/progtest.m4
+++ b/m4/progtest.m4
@@ -1,5 +1,5 @@
 # progtest.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1996-2003, 2005, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 1996-2003, 2005, 2008-2014 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/m4/pthread_rwlock_rdlock.m4 b/m4/pthread_rwlock_rdlock.m4
new file mode 100644
index 0000000..87886a3
--- /dev/null
+++ b/m4/pthread_rwlock_rdlock.m4
@@ -0,0 +1,185 @@
+# pthread_rwlock_rdlock.m4 serial 4
+dnl Copyright (C) 2017-2019 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 Inspired by
+dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c
+dnl by Intel Corporation.
+
+dnl Test whether in a situation where
+dnl   - an rwlock is taken by a reader and has a writer waiting,
+dnl   - an additional reader requests the lock,
+dnl   - the waiting writer and the requesting reader threads have the same
+dnl     priority,
+dnl the requesting reader thread gets blocked, so that at some point the
+dnl waiting writer can acquire the lock.
+dnl Without such a guarantee, when there a N readers and each of the readers
+dnl spends more than 1/Nth of the time with the lock held, there is a high
+dnl probability that the waiting writer will not get the lock in a given finite
+dnl time, a phenomenon called "writer starvation".
+dnl Without such a guarantee, applications have a hard time avoiding writer
+dnl starvation.
+dnl
+dnl POSIX:2017 makes this requirement only for implementations that support TPS
+dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO
+dnl and SCHED_RR, see
+dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html
+dnl but this test verifies the guarantee regardless of TPS and regardless of
+dnl scheduling policy.
+dnl Glibc does not provide this guarantee (and never will on Linux), see
+dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701
+dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052
+AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER],
+[
+  AC_REQUIRE([gl_THREADLIB_EARLY])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader],
+    [gl_cv_pthread_rwlock_rdlock_prefer_writer],
+    [save_LIBS="$LIBS"
+     LIBS="$LIBS $LIBMULTITHREAD"
+     AC_RUN_IFELSE(
+       [AC_LANG_SOURCE([[
+#include <errno.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define SUCCEED() exit (0)
+#define FAILURE() exit (1)
+#define UNEXPECTED(n) (exit (10 + (n)))
+
+/* The main thread creates the waiting writer and the requesting reader threads
+   in the default way; this guarantees that they have the same priority.
+   We can reuse the main thread as first reader thread.  */
+
+static pthread_rwlock_t lock;
+static pthread_t reader1;
+static pthread_t writer;
+static pthread_t reader2;
+static pthread_t timer;
+/* Used to pass control from writer to reader2 and from reader2 to timer,
+   as in a relay race.
+   Passing control from one running thread to another running thread
+   is most likely faster than to create the second thread.  */
+static pthread_mutex_t baton;
+
+static void *
+timer_func (void *ignored)
+{
+  /* Step 13 (can be before or after step 12):
+     The timer thread takes the baton, then waits a moment to make sure
+     it can tell whether the second reader thread is blocked at step 12.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (13);
+  usleep (100000);
+  /* By the time we get here, it's clear that the second reader thread is
+     blocked at step 12.  This is the desired behaviour.  */
+  SUCCEED ();
+}
+
+static void *
+reader2_func (void *ignored)
+{
+  int err;
+
+  /* Step 8 (can be before or after step 7):
+     The second reader thread takes the baton, then waits a moment to make sure
+     the writer thread has reached step 7.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (8);
+  usleep (100000);
+  /* Step 9: The second reader thread requests the lock.  */
+  err = pthread_rwlock_tryrdlock (&lock);
+  if (err == 0)
+    FAILURE ();
+  else if (err != EBUSY)
+    UNEXPECTED (9);
+  /* Step 10: Launch a timer, to test whether the next call blocks.  */
+  if (pthread_create (&timer, NULL, timer_func, NULL))
+    UNEXPECTED (10);
+  /* Step 11: Release the baton.  */
+  if (pthread_mutex_unlock (&baton))
+    UNEXPECTED (11);
+  /* Step 12: The second reader thread requests the lock.  */
+  err = pthread_rwlock_rdlock (&lock);
+  if (err == 0)
+    FAILURE ();
+  else
+    UNEXPECTED (12);
+}
+
+static void *
+writer_func (void *ignored)
+{
+  /* Step 4: Take the baton, so that the second reader thread does not go ahead
+     too early.  */
+  if (pthread_mutex_lock (&baton))
+    UNEXPECTED (4);
+  /* Step 5: Create the second reader thread.  */
+  if (pthread_create (&reader2, NULL, reader2_func, NULL))
+    UNEXPECTED (5);
+  /* Step 6: Release the baton.  */
+  if (pthread_mutex_unlock (&baton))
+    UNEXPECTED (6);
+  /* Step 7: The writer thread requests the lock.  */
+  if (pthread_rwlock_wrlock (&lock))
+    UNEXPECTED (7);
+  return NULL;
+}
+
+int
+main ()
+{
+  reader1 = pthread_self ();
+
+  /* Step 1: The main thread initializes the lock and the baton.  */
+  if (pthread_rwlock_init (&lock, NULL))
+    UNEXPECTED (1);
+  if (pthread_mutex_init (&baton, NULL))
+    UNEXPECTED (1);
+  /* Step 2: The main thread acquires the lock as a reader.  */
+  if (pthread_rwlock_rdlock (&lock))
+    UNEXPECTED (2);
+  /* Step 3: Create the writer thread.  */
+  if (pthread_create (&writer, NULL, writer_func, NULL))
+    UNEXPECTED (3);
+  /* Job done.  Go to sleep.  */
+  for (;;)
+    {
+      sleep (1);
+    }
+}
+]])],
+       [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes],
+       [gl_cv_pthread_rwlock_rdlock_prefer_writer=no],
+       [case "$host_os" in
+                         # Guess no on glibc systems.
+          *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess no on musl systems.
+          *-musl*)       gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess no on bionic systems.
+          *-android*)    gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+                         # Guess yes on native Windows with the mingw-w64 winpthreads library.
+                         # Guess no on native Windows with the gnulib windows-rwlock module.
+          mingw*)        if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+                           gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
+                         else
+                           gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no"
+                         fi
+                         ;;
+                         # If we don't know, obey --enable-cross-guesses.
+          *)             gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;;
+         esac
+       ])
+     LIBS="$save_LIBS"
+    ])
+  case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in
+    *yes)
+      AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1],
+        [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.])
+      ;;
+  esac
+])
diff --git a/m4/quote.m4 b/m4/quote.m4
index 7b05584..feaa735 100644
--- a/m4/quote.m4
+++ b/m4/quote.m4
@@ -1,5 +1,5 @@
 # quote.m4 serial 6
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2012 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 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,
diff --git a/m4/quotearg.m4 b/m4/quotearg.m4
index 09c36bb..c478f50 100644
--- a/m4/quotearg.m4
+++ b/m4/quotearg.m4
@@ -1,5 +1,5 @@
 # quotearg.m4 serial 9
-dnl Copyright (C) 2002, 2004-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2019 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/m4/raise.m4 b/m4/raise.m4
index 95e9fc4..f7661e6 100644
--- a/m4/raise.m4
+++ b/m4/raise.m4
@@ -1,5 +1,5 @@
-# raise.m4 serial 3
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+# raise.m4 serial 4
+dnl Copyright (C) 2011-2019 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.
@@ -8,14 +8,16 @@
 [
   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_MSVC_INVAL], [
+      AC_REQUIRE([gl_MSVC_INVAL])
+      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
diff --git a/m4/rawmemchr.m4 b/m4/rawmemchr.m4
index 1930164..03a8804 100644
--- a/m4/rawmemchr.m4
+++ b/m4/rawmemchr.m4
@@ -1,5 +1,5 @@
 # rawmemchr.m4 serial 2
-dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007-2019 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/m4/readlink.m4 b/m4/readlink.m4
new file mode 100644
index 0000000..7aa6ce0
--- /dev/null
+++ b/m4/readlink.m4
@@ -0,0 +1,73 @@
+# readlink.m4 serial 15
+dnl Copyright (C) 2003, 2007, 2009-2019 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_READLINK],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CHECK_FUNCS_ONCE([readlink])
+  if test $ac_cv_func_readlink = no; then
+    HAVE_READLINK=0
+  else
+    AC_CACHE_CHECK([whether readlink signature is correct],
+      [gl_cv_decl_readlink_works],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <unistd.h>
+      /* Cause compilation failure if original declaration has wrong type.  */
+      ssize_t readlink (const char *, char *, size_t);]])],
+         [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
+    dnl Solaris 9 ignores trailing slash.
+    dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
+    AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
+      [gl_cv_func_readlink_works],
+      [# We have readlink, so assume ln -s works.
+       ln -s conftest.no-such conftest.link
+       ln -s conftest.link conftest.lnk2
+       AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <unistd.h>
+]], [[char buf[20];
+      return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
+         [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no],
+         [case "$host_os" in
+                             # Guess yes on Linux systems.
+            linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;;
+                             # Guess yes on glibc systems.
+            *-gnu* | gnu*)   gl_cv_func_readlink_works="guessing yes" ;;
+                             # If we don't know, obey --enable-cross-guesses.
+            *)               gl_cv_func_readlink_works="$gl_cross_guess_normal" ;;
+          esac
+         ])
+      rm -f conftest.link conftest.lnk2])
+    case "$gl_cv_func_readlink_works" in
+      *yes)
+        if test "$gl_cv_decl_readlink_works" != yes; then
+          REPLACE_READLINK=1
+        fi
+        ;;
+      *)
+        AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink
+          fails to recognize a trailing slash.])
+        REPLACE_READLINK=1
+        ;;
+    esac
+  fi
+])
+
+# Like gl_FUNC_READLINK, except prepare for separate compilation
+# (no REPLACE_READLINK, no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_READLINK_SEPARATE],
+[
+  AC_CHECK_FUNCS_ONCE([readlink])
+  gl_PREREQ_READLINK
+])
+
+# Prerequisites of lib/readlink.c.
+AC_DEFUN([gl_PREREQ_READLINK],
+[
+  :
+])
diff --git a/m4/realloc.m4 b/m4/realloc.m4
index 954c2f0..05e7243 100644
--- a/m4/realloc.m4
+++ b/m4/realloc.m4
@@ -1,13 +1,11 @@
-# realloc.m4 serial 13
-dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# realloc.m4 serial 18
+dnl Copyright (C) 2007, 2009-2019 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
+# This is adapted with modifications from upstream Autoconf here:
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c
 AC_DEFUN([_AC_FUNC_REALLOC_IF],
 [
   AC_REQUIRE([AC_HEADER_STDC])dnl
@@ -23,25 +21,33 @@
             char *realloc ();
             #endif
           ]],
-          [[return ! realloc (0, 0);]])
+          [[char *p = realloc (0, 0);
+            int result = !p;
+            free (p);
+            return result;]])
        ],
        [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* \
+          *-gnu* | gnu* | *-musl* | 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 ;;
+            ac_cv_func_realloc_0_nonnull="guessing yes" ;;
+          # If we don't know, obey --enable-cross-guesses.
+          *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
         esac
        ])
     ])
-  AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2])
+  case "$ac_cv_func_realloc_0_nonnull" in
+    *yes)
+      $1
+      ;;
+    *)
+      $2
+      ;;
+  esac
 ])# AC_FUNC_REALLOC
 
-])
-
 # gl_FUNC_REALLOC_GNU
 # -------------------
 # Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace
diff --git a/m4/relocatable-lib.m4 b/m4/relocatable-lib.m4
new file mode 100644
index 0000000..25944f5
--- /dev/null
+++ b/m4/relocatable-lib.m4
@@ -0,0 +1,47 @@
+# relocatable-lib.m4 serial 6
+dnl Copyright (C) 2003, 2005-2007, 2009-2019 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 Support for relocatable libraries.
+AC_DEFUN([gl_RELOCATABLE_LIBRARY],
+[
+  AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY])
+])
+AC_DEFUN([gl_RELOCATABLE_LIBRARY_BODY],
+[
+  AC_REQUIRE([gl_RELOCATABLE_NOP])
+  dnl Easier to put this here once, instead of into the DEFS of each Makefile.
+  if test "X$prefix" = "XNONE"; then
+    reloc_final_prefix="$ac_default_prefix"
+  else
+    reloc_final_prefix="$prefix"
+  fi
+  AC_DEFINE_UNQUOTED([INSTALLPREFIX], ["${reloc_final_prefix}"],
+    [Define to the value of ${prefix}, as a string.])
+  if test $RELOCATABLE = yes; then
+    AC_DEFINE([ENABLE_RELOCATABLE], [1],
+      [Define to 1 if the package shall run at any location in the file
+       system.])
+  fi
+])
+
+dnl Support for relocatable packages for which it is a nop.
+AC_DEFUN([gl_RELOCATABLE_NOP],
+[
+  AC_MSG_CHECKING([whether to activate relocatable installation])
+  AC_ARG_ENABLE([relocatable],
+    [AS_HELP_STRING([--enable-relocatable],
+      [install a package that can be moved in the file system])],
+    [if test "$enableval" != no; then
+       RELOCATABLE=yes
+     else
+       RELOCATABLE=no
+     fi
+    ], RELOCATABLE=no)
+  AC_SUBST([RELOCATABLE])
+  AC_MSG_RESULT([$RELOCATABLE])
+])
diff --git a/m4/relocatable.m4 b/m4/relocatable.m4
new file mode 100644
index 0000000..0ba1352
--- /dev/null
+++ b/m4/relocatable.m4
@@ -0,0 +1,159 @@
+# relocatable.m4 serial 23
+dnl Copyright (C) 2003, 2005-2007, 2009-2019 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_RELOCATABLE([RELOCWRAPPER-DIR])
+dnl ----------------------------------------------------------
+dnl Support for relocatable programs.
+dnl Supply RELOCWRAPPER-DIR as the directory where relocwrapper.c may be found.
+AC_DEFUN([gl_RELOCATABLE],
+[
+  AC_REQUIRE([gl_RELOCATABLE_BODY])
+  gl_RELOCATABLE_LIBRARY
+  : ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'}
+  RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base"
+  RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base"
+])
+dnl The guts of gl_RELOCATABLE. Needs to be expanded only once.
+AC_DEFUN([gl_RELOCATABLE_BODY],
+[
+  AC_REQUIRE([AC_PROG_INSTALL])
+
+  dnl This AC_BEFORE invocation leads to unjustified autoconf warnings
+  dnl when gl_RELOCATABLE_BODY is invoked more than once.
+  dnl
+  dnl We need this AC_BEFORE because AC_PROG_INSTALL is documented to
+  dnl overwrite earlier settings of INSTALL and INSTALL_PROGRAM (even
+  dnl though in autoconf-2.52..2.60 it doesn't do so), but we want this
+  dnl macro's setting of INSTALL_PROGRAM to persist.
+  dnl Arghh: AC_BEFORE does not work in this setting :-(
+  dnl AC_BEFORE([AC_PROG_INSTALL],[gl_RELOCATABLE_BODY])
+  dnl
+  dnl LT_INIT sets LIBTOOL, but we want this macro's setting of LIBTOOL to
+  dnl persist.
+  dnl Arghh: AC_BEFORE does not work in this setting :-(
+  dnl AC_BEFORE([LT_INIT],[gl_RELOCATABLE_BODY])
+
+  AC_REQUIRE([AC_LIB_LIBPATH])
+  AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  is_noop=no
+  use_elf_origin_trick=no
+  use_macos_tools=no
+  use_wrapper=no
+  if test $RELOCATABLE = yes; then
+    # --enable-relocatable implies --disable-rpath
+    enable_rpath=no
+    AC_CHECK_HEADERS([mach-o/dyld.h])
+    AC_CHECK_FUNCS([_NSGetExecutablePath])
+    case "$host_os" in
+      mingw*) is_noop=yes ;;
+      # For the platforms that support $ORIGIN, see
+      # <https://lekensteyn.nl/rpath.html>.
+      # glibc systems, Linux with musl libc: yes. Android: no.
+      linux*-android*) ;;
+      linux* | kfreebsd*) use_elf_origin_trick=yes ;;
+      # Hurd: <https://lists.gnu.org/r/bug-hurd/2019-02/msg00049.html>
+      # only after the glibc commit from 2018-01-08
+      # <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=311ba8dc4416467947eff2ab327854f124226309>
+      gnu*)
+        # Test for a glibc version >= 2.27.
+        AC_CHECK_FUNCS([copy_file_range])
+        if test $ac_cv_func_copy_file_range = yes; then
+          use_elf_origin_trick=yes
+        fi
+        ;;
+changequote(,)dnl
+      # FreeBSD >= 7.3, DragonFly >= 3.0: yes.
+      freebsd | freebsd[1-7] | freebsd[1-6].* | freebsd7.[0-2]) ;;
+      dragonfly | dragonfly[1-2] | dragonfly[1-2].*) ;;
+      freebsd* | dragonfly*) use_elf_origin_trick=yes ;;
+      # NetBSD >= 8.0: yes.
+      netbsd | netbsd[1-7] | netbsd[1-7].*) ;;
+      netbsdelf | netbsdelf[1-7] | netbsdelf[1-7].*) ;;
+      netbsd*) use_elf_origin_trick=yes ;;
+      # OpenBSD >= 5.4: yes.
+      openbsd | openbsd[1-5] | openbsd[1-4].* | openbsd5.[0-3]) ;;
+      openbsd*) use_elf_origin_trick=yes ;;
+      # Solaris >= 10: yes.
+      solaris | solaris2.[1-9] | solaris2.[1-9].*) ;;
+      solaris*) use_elf_origin_trick=yes ;;
+      # Haiku: yes.
+      haiku*) use_elf_origin_trick=yes ;;
+      # On Mac OS X 10.4 or newer, use Mac OS X tools. See
+      # <https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath>.
+      darwin | darwin[1-7].*) ;;
+      darwin*) use_macos_tools=yes ;;
+changequote([,])dnl
+    esac
+    if test $is_noop = yes; then
+      RELOCATABLE_LDFLAGS=:
+      AC_SUBST([RELOCATABLE_LDFLAGS])
+    else
+      if test $use_elf_origin_trick = yes || test $use_macos_tools = yes; then
+        dnl Use the dynamic linker's support for relocatable programs.
+        case "$ac_aux_dir" in
+          /*) reloc_ldflags="$ac_aux_dir/reloc-ldflags" ;;
+          *) reloc_ldflags="\$(top_builddir)/$ac_aux_dir/reloc-ldflags" ;;
+        esac
+        RELOCATABLE_LDFLAGS="\"$reloc_ldflags\" \"\$(host)\" \"\$(RELOCATABLE_LIBRARY_PATH)\""
+        AC_SUBST([RELOCATABLE_LDFLAGS])
+        if test $use_macos_tools = yes; then
+          dnl Use a libtool wrapper that uses Mac OS X tools.
+          case "$ac_aux_dir" in
+            /*) LIBTOOL="${CONFIG_SHELL-$SHELL} $ac_aux_dir/libtool-reloc $LIBTOOL" ;;
+            *) LIBTOOL="${CONFIG_SHELL-$SHELL} \$(top_builddir)/$ac_aux_dir/libtool-reloc $LIBTOOL" ;;
+          esac
+        fi
+      else
+        use_wrapper=yes
+        dnl Unfortunately we cannot define INSTALL_PROGRAM to a command
+        dnl consisting of more than one word - libtool doesn't support this.
+        dnl So we abuse the INSTALL_PROGRAM_ENV hook, originally meant for the
+        dnl 'install-strip' target.
+        INSTALL_PROGRAM_ENV="RELOC_LIBRARY_PATH_VAR=\"$shlibpath_var\" RELOC_LIBRARY_PATH_VALUE=\"\$(RELOCATABLE_LIBRARY_PATH)\" RELOC_PREFIX=\"\$(prefix)\" RELOC_DESTDIR=\"\$(DESTDIR)\" RELOC_COMPILE_COMMAND=\"\$(CC) \$(CPPFLAGS) \$(CFLAGS) \$(LDFLAGS)\" RELOC_SRCDIR=\"\$(RELOCATABLE_SRC_DIR)\" RELOC_BUILDDIR=\"\$(RELOCATABLE_BUILD_DIR)\" RELOC_CONFIG_H_DIR=\"\$(RELOCATABLE_CONFIG_H_DIR)\" RELOC_EXEEXT=\"\$(EXEEXT)\" RELOC_STRIP_PROG=\"\$(RELOCATABLE_STRIP)\" RELOC_INSTALL_PROG=\"$INSTALL_PROGRAM\""
+        AC_SUBST([INSTALL_PROGRAM_ENV])
+        case "$ac_aux_dir" in
+          /*) INSTALL_PROGRAM="$ac_aux_dir/install-reloc" ;;
+          *) INSTALL_PROGRAM="\$(top_builddir)/$ac_aux_dir/install-reloc" ;;
+        esac
+      fi
+    fi
+  fi
+  AM_CONDITIONAL([RELOCATABLE_VIA_LD],
+    [test $is_noop = yes || test $use_elf_origin_trick = yes || test $use_macos_tools = yes])
+  AM_CONDITIONAL([RELOCATABLE_VIA_WRAPPER], [test $use_wrapper = yes])
+
+  dnl RELOCATABLE_LIBRARY_PATH can be set in configure.ac. Default is empty.
+  AC_SUBST([RELOCATABLE_LIBRARY_PATH])
+
+  AC_SUBST([RELOCATABLE_CONFIG_H_DIR])
+  AC_SUBST([RELOCATABLE_SRC_DIR])
+  AC_SUBST([RELOCATABLE_BUILD_DIR])
+
+  dnl Ensure RELOCATABLE_STRIP is defined in Makefiles (at least those
+  dnl generated by automake), with value ':'.
+  RELOCATABLE_STRIP=':'
+  AC_SUBST([RELOCATABLE_STRIP])
+])
+
+dnl Determine the platform dependent parameters needed to use relocatability:
+dnl shlibpath_var.
+AC_DEFUN([AC_LIB_LIBPATH],
+[
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $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 path variable], [acl_cv_libpath], [
+    LD="$LD" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.libpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_libpath=${acl_cv_shlibpath_var:-none}
+  ])
+  shlibpath_var="$acl_cv_shlibpath_var"
+])
diff --git a/m4/rename.m4 b/m4/rename.m4
new file mode 100644
index 0000000..b453666
--- /dev/null
+++ b/m4/rename.m4
@@ -0,0 +1,255 @@
+# serial 32
+
+# Copyright (C) 2001, 2003, 2005-2006, 2009-2019 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 Volker Borchert.
+dnl Determine whether rename works for source file names with a trailing slash.
+dnl The rename from SunOS 4.1.1_U1 doesn't.
+dnl
+dnl If it doesn't, then define RENAME_TRAILING_SLASH_BUG and arrange
+dnl to compile the wrapper function.
+dnl
+
+AC_DEFUN([gl_FUNC_RENAME],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([lstat])
+
+  dnl Solaris 11.3, AIX 7.1 mistakenly allow rename("file","name/").
+  dnl NetBSD 1.6 mistakenly forbids rename("dir","name/").
+  dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/").
+  dnl The Solaris bug can be worked around without stripping
+  dnl trailing slash, while the NetBSD bug requires stripping;
+  dnl the two conditions can be distinguished by whether hard
+  dnl links are also broken.
+  AC_CACHE_CHECK([whether rename honors trailing slash on destination],
+    [gl_cv_func_rename_slash_dst_works],
+    [rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk
+    touch conftest.f && touch conftest.f1 && mkdir conftest.d1 ||
+      AC_MSG_ERROR([cannot create temporary files])
+    # Assume that if we have lstat, we can also check symlinks.
+    if test $ac_cv_func_lstat = yes; then
+      ln -s conftest.f conftest.lnk
+    fi
+    AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM([[
+#        include <stdio.h>
+#        include <stdlib.h>
+         ]],
+         [[int result = 0;
+           if (rename ("conftest.f1", "conftest.f2/") == 0)
+             result |= 1;
+           if (rename ("conftest.d1", "conftest.d2/") != 0)
+             result |= 2;
+#if HAVE_LSTAT
+           if (rename ("conftest.f", "conftest.lnk/") == 0)
+             result |= 4;
+#endif
+           return result;
+         ]])],
+      [gl_cv_func_rename_slash_dst_works=yes],
+      [gl_cv_func_rename_slash_dst_works=no],
+      dnl When crosscompiling, assume rename is broken.
+      [case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_slash_dst_works="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_rename_slash_dst_works="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;;
+       esac
+      ])
+    rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk
+  ])
+  case "$gl_cv_func_rename_slash_dst_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+      AC_DEFINE([RENAME_TRAILING_SLASH_DEST_BUG], [1],
+        [Define if rename does not correctly handle slashes on the destination
+         argument, such as on Solaris 11 or NetBSD 1.6.])
+      ;;
+  esac
+
+  dnl SunOS 4.1.1_U1 mistakenly forbids rename("dir/","name").
+  dnl Solaris 9 mistakenly allows rename("file/","name").
+  dnl FreeBSD 7.2 mistakenly allows rename("link-to-file/","name").
+  dnl These bugs require stripping trailing slash to avoid corrupting
+  dnl symlinks with a trailing slash.
+  AC_CACHE_CHECK([whether rename honors trailing slash on source],
+    [gl_cv_func_rename_slash_src_works],
+    [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk
+    touch conftest.f && touch conftest.f1 && mkdir conftest.d1 ||
+      AC_MSG_ERROR([cannot create temporary files])
+    # Assume that if we have lstat, we can also check symlinks.
+    if test $ac_cv_func_lstat = yes; then
+      ln -s conftest.f conftest.lnk
+    fi
+    AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM([[
+#        include <stdio.h>
+#        include <stdlib.h>
+         ]],
+         [[int result = 0;
+           if (rename ("conftest.f1/", "conftest.d3") == 0)
+             result |= 1;
+           if (rename ("conftest.d1/", "conftest.d2") != 0)
+             result |= 2;
+#if HAVE_LSTAT
+           if (rename ("conftest.lnk/", "conftest.f") == 0)
+             result |= 4;
+#endif
+           return result;
+         ]])],
+      [gl_cv_func_rename_slash_src_works=yes],
+      [gl_cv_func_rename_slash_src_works=no],
+      dnl When crosscompiling, assume rename is broken.
+      [case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # Guess yes on native Windows.
+         mingw*)          gl_cv_func_rename_slash_src_works="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;;
+       esac
+      ])
+    rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk
+  ])
+  case "$gl_cv_func_rename_slash_src_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+      AC_DEFINE([RENAME_TRAILING_SLASH_SOURCE_BUG], [1],
+        [Define if rename does not correctly handle slashes on the source
+         argument, such as on Solaris 9 or cygwin 1.5.])
+      ;;
+  esac
+
+  dnl NetBSD 1.6 and cygwin 1.5.x mistakenly reduce hard link count
+  dnl on rename("h1","h2").
+  dnl This bug requires stat'ting targets prior to attempting rename.
+  AC_CHECK_FUNCS_ONCE([link])
+  AC_CACHE_CHECK([whether rename manages hard links correctly],
+    [gl_cv_func_rename_link_works],
+    [if test $ac_cv_func_link = yes; then
+       if test $cross_compiling != yes; then
+         rm -rf conftest.f conftest.f1 conftest.f2
+         if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 &&
+             set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then
+           AC_RUN_IFELSE(
+             [AC_LANG_PROGRAM([[
+#               include <errno.h>
+#               include <stdio.h>
+#               include <stdlib.h>
+#               include <unistd.h>
+                ]],
+                [[int result = 0;
+                  if (rename ("conftest.f", "conftest.f1"))
+                    result |= 1;
+                  if (unlink ("conftest.f1"))
+                    result |= 2;
+
+                  /* Allow either the POSIX-required behavior, where the
+                     previous rename kept conftest.f, or the (better) NetBSD
+                     behavior, where it removed conftest.f.  */
+                  if (rename ("conftest.f", "conftest.f") != 0
+                      && errno != ENOENT)
+                    result |= 4;
+
+                  if (rename ("conftest.f1", "conftest.f1") == 0)
+                    result |= 8;
+                  if (rename ("conftest.f2", "conftest.f2") != 0)
+                    result |= 16;
+                  return result;
+                ]])],
+             [gl_cv_func_rename_link_works=yes],
+             [gl_cv_func_rename_link_works=no],
+             [dnl We don't get here.
+              :
+             ])
+         else
+           gl_cv_func_rename_link_works="guessing no"
+         fi
+         rm -rf conftest.f conftest.f1 conftest.f2
+       else
+         dnl When crosscompiling, assume rename is broken.
+         case "$host_os" in
+                            # Guess yes on Linux systems.
+           linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;;
+                            # Guess yes on glibc systems.
+           *-gnu*)          gl_cv_func_rename_link_works="guessing yes" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_rename_link_works="guessing yes" ;;
+                            # If we don't know, obey --enable-cross-guesses.
+           *)               gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;;
+         esac
+       fi
+     else
+       gl_cv_func_rename_link_works=yes
+     fi
+    ])
+  case "$gl_cv_func_rename_link_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+      AC_DEFINE([RENAME_HARD_LINK_BUG], [1],
+        [Define if rename fails to leave hard links alone, as on NetBSD 1.6
+         or Cygwin 1.5.])
+      ;;
+  esac
+
+  dnl Cygwin 1.5.x mistakenly allows rename("dir","file").
+  dnl mingw mistakenly forbids rename("dir1","dir2").
+  dnl These bugs require stripping trailing slash to avoid corrupting
+  dnl symlinks with a trailing slash.
+  AC_CACHE_CHECK([whether rename manages existing destinations correctly],
+    [gl_cv_func_rename_dest_works],
+    [rm -rf conftest.f conftest.d1 conftest.d2
+    touch conftest.f && mkdir conftest.d1 conftest.d2 ||
+      AC_MSG_ERROR([cannot create temporary files])
+    AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM([[
+#        include <stdio.h>
+#        include <stdlib.h>
+         ]],
+         [[int result = 0;
+           if (rename ("conftest.d1", "conftest.d2") != 0)
+             result |= 1;
+           if (rename ("conftest.d2", "conftest.f") == 0)
+             result |= 2;
+           return result;
+         ]])],
+      [gl_cv_func_rename_dest_works=yes],
+      [gl_cv_func_rename_dest_works=no],
+      dnl When crosscompiling, assume rename is broken.
+      [case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_rename_dest_works="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_rename_dest_works="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;;
+       esac
+      ])
+    rm -rf conftest.f conftest.d1 conftest.d2
+  ])
+  case "$gl_cv_func_rename_dest_works" in
+    *yes) ;;
+    *)
+      REPLACE_RENAME=1
+      AC_DEFINE([RENAME_DEST_EXISTS_BUG], [1],
+        [Define if rename does not work when the destination file exists,
+         as on Cygwin 1.5 or Windows.])
+      ;;
+  esac
+])
diff --git a/m4/rmdir.m4 b/m4/rmdir.m4
new file mode 100644
index 0000000..bc01778
--- /dev/null
+++ b/m4/rmdir.m4
@@ -0,0 +1,53 @@
+# rmdir.m4 serial 17
+dnl Copyright (C) 2002, 2005, 2009-2019 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_RMDIR],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  dnl Detect cygwin 1.5.x bug.
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CACHE_CHECK([whether rmdir works], [gl_cv_func_rmdir_works],
+    [mkdir conftest.dir
+     touch conftest.file
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[#include <stdio.h>
+           #include <errno.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <direct.h>
+           #endif
+]], [[int result = 0;
+      if (!rmdir ("conftest.file/"))
+        result |= 1;
+      else if (errno != ENOTDIR)
+        result |= 2;
+      if (!rmdir ("conftest.dir/./"))
+        result |= 4;
+      return result;
+    ]])],
+       [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no],
+       [case "$host_os" in
+                           # Guess yes on Linux systems.
+          linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;;
+                           # Guess yes on glibc systems.
+          *-gnu* | gnu*)   gl_cv_func_rmdir_works="guessing yes" ;;
+                           # Guess no on native Windows.
+          mingw*)          gl_cv_func_rmdir_works="guessing no" ;;
+                           # If we don't know, obey --enable-cross-guesses.
+          *)               gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;;
+        esac
+       ])
+     rm -rf conftest.dir conftest.file])
+  case "$gl_cv_func_rmdir_works" in
+    *yes) ;;
+    *)
+      REPLACE_RMDIR=1
+      ;;
+  esac
+])
diff --git a/m4/sched_h.m4 b/m4/sched_h.m4
index 5346146..2cc814e 100644
--- a/m4/sched_h.m4
+++ b/m4/sched_h.m4
@@ -1,5 +1,5 @@
-# sched_h.m4 serial 6
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# sched_h.m4 serial 12
+dnl Copyright (C) 2008-2019 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.
@@ -8,33 +8,84 @@
 
 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'
+  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_SCHED_H_DEFAULTS])
 
-     gl_CHECK_NEXT_HEADERS([sched.h])
+  AC_REQUIRE([AC_CANONICAL_HOST])
 
-     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_HEADERS_ONCE([sys/cdefs.h])
+  AC_CHECK_HEADERS([sched.h], [], [],
+    [[#if HAVE_SYS_CDEFS_H
+       #include <sys/cdefs.h>
+      #endif
+    ]])
+  gl_NEXT_HEADERS([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])
+  if test "$ac_cv_header_sched_h" = yes; then
+    HAVE_SCHED_H=1
+  else
+    HAVE_SCHED_H=0
+  fi
+  AC_SUBST([HAVE_SCHED_H])
 
-     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"])
+  if test "$HAVE_SCHED_H" = 1; then
+    AC_CHECK_TYPE([struct sched_param],
+      [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0],
+      [[#if HAVE_SYS_CDEFS_H
+         #include <sys/cdefs.h>
+        #endif
+        #include <sched.h>
+      ]])
+  else
+    HAVE_STRUCT_SCHED_PARAM=0
+    case "$host_os" in
+      os2*)
+        dnl On OS/2 kLIBC, struct sched_param is in spawn.h.
+        AC_CHECK_TYPE([struct sched_param],
+          [HAVE_STRUCT_SCHED_PARAM=1], [],
+          [#include <spawn.h>])
+        ;;
+      vms)
+        dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h.
+        AC_CHECK_TYPE([struct sched_param],
+          [HAVE_STRUCT_SCHED_PARAM=1], [],
+          [#include <pthread.h>])
+        ;;
+    esac
+  fi
+  AC_SUBST([HAVE_STRUCT_SCHED_PARAM])
+
+  if test "$ac_cv_header_sys_cdefs_h" = yes; then
+    HAVE_SYS_CDEFS_H=1
+  else
+    HAVE_SYS_CDEFS_H=0
+  fi
+  AC_SUBST([HAVE_SYS_CDEFS_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, if it is not common
+  dnl enough to be declared everywhere.
+  gl_WARN_ON_USE_PREPARE([[#include <sched.h>
+    ]], [sched_yield])
+])
+
+AC_DEFUN([gl_SCHED_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SCHED_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_SCHED_H_DEFAULTS],
+[
+  GNULIB_SCHED_YIELD=0;  AC_SUBST([GNULIB_SCHED_YIELD])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_SCHED_YIELD=1;    AC_SUBST([HAVE_SCHED_YIELD])
+  REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD])
 ])
diff --git a/m4/setenv.m4 b/m4/setenv.m4
index e1931e7..6755459 100644
--- a/m4/setenv.m4
+++ b/m4/setenv.m4
@@ -1,5 +1,5 @@
-# setenv.m4 serial 26
-dnl Copyright (C) 2001-2004, 2006-2012 Free Software Foundation, Inc.
+# setenv.m4 serial 29
+dnl Copyright (C) 2001-2004, 2006-2019 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.
@@ -35,10 +35,12 @@
       ]])],
       [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" ;;
+                        # Guess yes on glibc systems.
+         *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;;
+                        # Guess yes on musl systems.
+         *-musl*)       gl_cv_func_setenv_works="guessing yes" ;;
+                        # If we don't know, obey --enable-cross-guesses.
+         *)             gl_cv_func_setenv_works="$gl_cross_guess_normal" ;;
        esac
       ])])
     case "$gl_cv_func_setenv_works" in
@@ -129,8 +131,8 @@
       [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" ;;
+                 # If we don't know, obey --enable-cross-guesses.
+         *)      gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;;
        esac
       ])])
     case "$gl_cv_func_unsetenv_works" in
diff --git a/m4/sh-filename.m4 b/m4/sh-filename.m4
new file mode 100644
index 0000000..dc5f26d
--- /dev/null
+++ b/m4/sh-filename.m4
@@ -0,0 +1,22 @@
+# sh-filename.m4 serial 2
+dnl Copyright (C) 2018-2019 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_SH_FILENAME],
+[
+  AH_VERBATIM([SH_FILENAME],
+[/* File name of the Bourne shell.  */
+#if defined __CYGWIN__ || defined __ANDROID__
+/* Omit the directory part because
+   - For 32-bit Cygwin programs in a 64-bit Cygwin environment, the Cygwin
+     mounts are not visible.
+   - On Android, /bin/sh does not exist. It's /system/bin/sh instead.  */
+# define BOURNE_SHELL "sh"
+#else
+# define BOURNE_SHELL "/bin/sh"
+#endif])
+])
diff --git a/m4/sig_atomic_t.m4 b/m4/sig_atomic_t.m4
index acda356..2a31575 100644
--- a/m4/sig_atomic_t.m4
+++ b/m4/sig_atomic_t.m4
@@ -1,5 +1,5 @@
 # sig_atomic_t.m4 serial 3
-dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2019 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/m4/sigaction.m4 b/m4/sigaction.m4
index 18bfd03..6117d1b 100644
--- a/m4/sigaction.m4
+++ b/m4/sigaction.m4
@@ -1,5 +1,5 @@
 # sigaction.m4 serial 7
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2019 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/m4/signal_h.m4 b/m4/signal_h.m4
index ed4d730..3acec64 100644
--- a/m4/signal_h.m4
+++ b/m4/signal_h.m4
@@ -1,5 +1,5 @@
 # signal_h.m4 serial 18
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/signalblocking.m4 b/m4/signalblocking.m4
index d3cbb84..d722f65 100644
--- a/m4/signalblocking.m4
+++ b/m4/signalblocking.m4
@@ -1,5 +1,5 @@
 # signalblocking.m4 serial 14
-dnl Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2002, 2006-2019 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/m4/signbit.m4 b/m4/signbit.m4
index fb707c9..2718aef 100644
--- a/m4/signbit.m4
+++ b/m4/signbit.m4
@@ -1,5 +1,5 @@
-# signbit.m4 serial 13
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# signbit.m4 serial 19
+dnl Copyright (C) 2007-2019 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,7 +7,7 @@
 AC_DEFUN([gl_SIGNBIT],
 [
   AC_REQUIRE([gl_MATH_H_DEFAULTS])
-  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit],
     [
       AC_RUN_IFELSE(
@@ -29,10 +29,14 @@
         [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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on native Windows.
+           mingw*)        gl_cv_func_signbit="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_signbit="$gl_cross_guess_normal" ;;
          esac
         ])
     ])
@@ -58,10 +62,19 @@
         [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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on mingw, no on MSVC.
+           mingw*)        if test -n "$GCC"; then
+                            gl_cv_func_signbit_gcc="guessing yes"
+                          else
+                            gl_cv_func_signbit_gcc="guessing no"
+                          fi
+                          ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_signbit_gcc="$gl_cross_guess_normal" ;;
          esac
         ])
     ])
@@ -77,79 +90,90 @@
         *)
           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
+  dnl On Solaris 10, with CC in C++ mode, signbit is not available although
+  dnl is with cc in C mode. This cannot be worked around by defining
+  dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on
+  dnl Solaris 11.0. Therefore use the replacement functions on Solaris.
+  case "$host_os" in
+    solaris*)
+      REPLACE_SIGNBIT=1
+      ;;
+  esac
+  if test $REPLACE_SIGNBIT = 1; then
+    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
+  fi
 ])
 
 AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
@@ -272,6 +296,7 @@
         {
           /* More than one bit difference.  */
           fprintf (fp, "unknown");
+          fclose (fp);
           return 2;
         }
       if (x)
@@ -284,6 +309,7 @@
     {
       /* No difference.  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 3;
     }
   /* Now m = plus.word[k] ^ ~minus.word[k].  */
@@ -292,6 +318,7 @@
       /* Oh? The sign bit is set in the positive and cleared in the negative
          numbers?  */
       fprintf (fp, "unknown");
+      fclose (fp);
       return 4;
     }
   for (i = 0; ; i++)
diff --git a/m4/size_max.m4 b/m4/size_max.m4
index 5a8162b..ab79052 100644
--- a/m4/size_max.m4
+++ b/m4/size_max.m4
@@ -1,11 +1,13 @@
-# size_max.m4 serial 10
-dnl Copyright (C) 2003, 2005-2006, 2008-2012 Free Software Foundation, Inc.
+# size_max.m4 serial 11
+dnl Copyright (C) 2003, 2005-2006, 2008-2019 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.61])
+
 AC_DEFUN([gl_SIZE_MAX],
 [
   AC_CHECK_HEADERS([stdint.h])
@@ -71,9 +73,3 @@
 # 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
index fc6c24b..07d48d7 100644
--- a/m4/snprintf-posix.m4
+++ b/m4/snprintf-posix.m4
@@ -1,5 +1,5 @@
 # snprintf-posix.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/snprintf.m4 b/m4/snprintf.m4
index de94edd..6fd566d 100644
--- a/m4/snprintf.m4
+++ b/m4/snprintf.m4
@@ -1,5 +1,5 @@
-# snprintf.m4 serial 6
-dnl Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+# snprintf.m4 serial 7
+dnl Copyright (C) 2002-2004, 2007-2019 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.
@@ -46,6 +46,14 @@
   AC_LIBOBJ([snprintf])
   if test $ac_cv_func_snprintf = yes; then
     REPLACE_SNPRINTF=1
+  else
+    AC_CHECK_DECLS_ONCE([snprintf])
+    if test $ac_cv_have_decl_snprintf = yes; then
+      dnl If the function is declared but does not appear to exist, it may be
+      dnl defined as an inline function. In order to avoid a conflict, we have
+      dnl to define rpl_snprintf, not snprintf.
+      REPLACE_SNPRINTF=1
+    fi
   fi
   gl_PREREQ_SNPRINTF
 ])
diff --git a/m4/spawn-pipe.m4 b/m4/spawn-pipe.m4
index d598ddd..40edebd 100644
--- a/m4/spawn-pipe.m4
+++ b/m4/spawn-pipe.m4
@@ -1,5 +1,5 @@
 # spawn-pipe.m4 serial 2
-dnl Copyright (C) 2004, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2004, 2008-2019 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/m4/spawn_h.m4 b/m4/spawn_h.m4
index 26fec8e..95cb25d 100644
--- a/m4/spawn_h.m4
+++ b/m4/spawn_h.m4
@@ -1,5 +1,5 @@
-# spawn_h.m4 serial 16
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# spawn_h.m4 serial 18
+dnl Copyright (C) 2008-2019 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.
@@ -53,7 +53,8 @@
     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])
+    posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addchdir
+    posix_spawn_file_actions_addfchdir])
 ])
 
 dnl Checks whether the system has the functions posix_spawn.
@@ -64,7 +65,15 @@
   dnl once only, before all statements that occur in other macros.
   AC_REQUIRE([gl_SPAWN_H_DEFAULTS])
 
-  AC_CHECK_FUNCS_ONCE([posix_spawn])
+  LIB_POSIX_SPAWN=
+  AC_SUBST([LIB_POSIX_SPAWN])
+  gl_saved_libs=$LIBS
+    AC_SEARCH_LIBS([posix_spawn], [rt],
+                   [test "$ac_cv_search_posix_spawn" = "none required" ||
+                    LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn])
+    AC_CHECK_FUNCS([posix_spawn])
+  LIBS=$gl_saved_libs
+
   if test $ac_cv_func_posix_spawn != yes; then
     HAVE_POSIX_SPAWN=0
   fi
@@ -81,37 +90,47 @@
 
 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])
+  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_ADDCHDIR=0;  AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR])
+  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_ADDFCHDIR=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR])
+  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])
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1;
+                             AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR])
+  HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1;
+                             AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR])
   REPLACE_POSIX_SPAWN=0;     AC_SUBST([REPLACE_POSIX_SPAWN])
+  REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0;
+                             AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR])
   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_ADDFCHDIR=0;
+                             AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR])
   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
index 2ef5222..b3c36b6 100644
--- a/m4/sprintf-posix.m4
+++ b/m4/sprintf-posix.m4
@@ -1,5 +1,5 @@
 # sprintf-posix.m4 serial 12
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/ssize_t.m4 b/m4/ssize_t.m4
index 209d64c..38bcee1 100644
--- a/m4/ssize_t.m4
+++ b/m4/ssize_t.m4
@@ -1,5 +1,5 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2019 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/m4/stat-time.m4 b/m4/stat-time.m4
new file mode 100644
index 0000000..1685788
--- /dev/null
+++ b/m4/stat-time.m4
@@ -0,0 +1,83 @@
+# Checks for stat-related time functions.
+
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2019 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 Paul Eggert.
+
+# st_atim.tv_nsec - Linux, Solaris, Cygwin
+# st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE
+# st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE
+# st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1)
+
+# st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway)
+# st_birthtim - Cygwin 1.7.0+
+
+AC_DEFUN([gl_STAT_TIME],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_HEADERS_ONCE([sys/time.h])
+
+  AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec],
+    [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec],
+       [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec],
+       [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+          [[
+            #include <sys/types.h>
+            #include <sys/stat.h>
+            #if HAVE_SYS_TIME_H
+            # include <sys/time.h>
+            #endif
+            #include <time.h>
+            struct timespec ts;
+            struct stat st;
+          ]],
+          [[
+            st.st_atim = ts;
+          ]])],
+          [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes],
+          [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])])
+     if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
+       AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1],
+         [Define to 1 if the type of the st_atim member of a struct stat is
+          struct timespec.])
+     fi],
+    [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [],
+       [AC_CHECK_MEMBERS([struct stat.st_atimensec], [],
+          [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [],
+             [#include <sys/types.h>
+              #include <sys/stat.h>])],
+          [#include <sys/types.h>
+           #include <sys/stat.h>])],
+       [#include <sys/types.h>
+        #include <sys/stat.h>])],
+    [#include <sys/types.h>
+     #include <sys/stat.h>])
+])
+
+# Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.)
+# and NTFS (Cygwin).
+# There was a time when this field was named st_createtime (21 June
+# 2002 to 16 July 2002) But that window is very small and applied only
+# to development code, so systems still using that configuration are
+# not supported.  See revisions 1.10 and 1.11 of FreeBSD's
+# src/sys/ufs/ufs/dinode.h.
+#
+AC_DEFUN([gl_STAT_BIRTHTIME],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_HEADERS_ONCE([sys/time.h])
+  AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [],
+    [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [],
+      [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [],
+         [#include <sys/types.h>
+          #include <sys/stat.h>])],
+       [#include <sys/types.h>
+        #include <sys/stat.h>])],
+    [#include <sys/types.h>
+     #include <sys/stat.h>])
+])
diff --git a/m4/stat.m4 b/m4/stat.m4
index 0fd117e..752661f 100644
--- a/m4/stat.m4
+++ b/m4/stat.m4
@@ -1,6 +1,6 @@
-# serial 11
+# serial 16
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2019 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -8,64 +8,67 @@
 
 AC_DEFUN([gl_FUNC_STAT],
 [
-  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([AC_CANONICAL_HOST])
   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>
+  case "$host_os" in
+    mingw*)
+      dnl On this platform, the original stat() returns st_atime, st_mtime,
+      dnl st_ctime values that are affected by the time zone.
+      REPLACE_STAT=1
+      ;;
+    *)
+      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;
+               struct stat st;
+               if (!stat ("conftest.tmp/", &st))
+                 result |= 1;
 #if HAVE_LSTAT
-      if (!stat ("conftest.lnk/", &st))
-        result |= 2;
+               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]);;
+               return result;
+             ]])],
+           [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
+           [case "$host_os" in
+                               # Guess yes on Linux systems.
+              linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;;
+                               # Guess yes on glibc systems.
+              *-gnu* | gnu*)   gl_cv_func_stat_file_slash="guessing yes" ;;
+                               # If we don't know, obey --enable-cross-guesses.
+              *)               gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;;
+            esac
+           ])
+         rm -f conftest.tmp conftest.lnk])
+      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
+      case $host_os in
+        dnl Solaris stat can return a negative tv_nsec.
+        solaris*)
+          REPLACE_FSTAT=1 ;;
+      esac
+      ;;
   esac
 ])
 
-# Prerequisites of lib/stat.c.
-AC_DEFUN([gl_PREREQ_STAT], [:])
+# Prerequisites of lib/stat.c and lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_STAT], [
+  AC_REQUIRE([gl_HEADER_SYS_STAT_H])
+  :
+])
diff --git a/m4/std-gnu11.m4 b/m4/std-gnu11.m4
new file mode 100644
index 0000000..23e7f75
--- /dev/null
+++ b/m4/std-gnu11.m4
@@ -0,0 +1,824 @@
+# Prefer GNU C11 and C++11 to earlier versions.  -*- coding: utf-8 -*-
+
+# This implementation is taken from GNU Autoconf lib/autoconf/c.m4
+# commit 017d5ddd82854911f0119691d91ea8a1438824d6
+# dated Sun Apr 3 13:57:17 2016 -0700
+# This implementation will be obsolete once we can assume Autoconf 2.70
+# or later is installed everywhere a Gnulib program might be developed.
+
+
+# Copyright (C) 2001-2019 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 <https://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Akim Demaille, Paul Eggert,
+# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# AC_PROG_CC([COMPILER ...])
+# --------------------------
+# COMPILER ... is a space separated list of C compilers to search for.
+# This just gives the user an opportunity to specify an alternative
+# search list for the C compiler.
+AC_DEFUN_ONCE([AC_PROG_CC],
+[AC_LANG_PUSH(C)dnl
+AC_ARG_VAR([CC],     [C compiler command])dnl
+AC_ARG_VAR([CFLAGS], [C compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+m4_ifval([$1],
+      [AC_CHECK_TOOLS(CC, [$1])],
+[AC_CHECK_TOOL(CC, gcc)
+if test -z "$CC"; then
+  dnl Here we want:
+  dnl	AC_CHECK_TOOL(CC, cc)
+  dnl but without the check for a tool without the prefix.
+  dnl Until the check is removed from there, copy the code:
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc])
+  fi
+fi
+if test -z "$CC"; then
+  AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+fi
+if test -z "$CC"; then
+  AC_CHECK_TOOLS(CC, cl.exe)
+fi
+if test -z "$CC"; then
+  AC_CHECK_TOOL(CC, clang)
+fi
+])
+
+test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion -version; do
+  m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+_AC_PROG_CC_G
+dnl
+dnl Set ac_prog_cc_stdc to the supported C version.
+dnl Also set the documented variable ac_cv_prog_cc_stdc;
+dnl its name was chosen when it was cached, but it is no longer cached.
+_AC_PROG_CC_C11([ac_prog_cc_stdc=c11
+		 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11],
+  [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99
+		    ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99],
+     [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89
+		       ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89],
+		      [ac_prog_cc_stdc=no
+		       ac_cv_prog_cc_stdc=no])])])
+dnl
+AC_LANG_POP(C)dnl
+])# AC_PROG_CC
+
+
+
+# AC_PROG_CXX([LIST-OF-COMPILERS])
+# --------------------------------
+# LIST-OF-COMPILERS is a space separated list of C++ compilers to search
+# for (if not specified, a default list is used).  This just gives the
+# user an opportunity to specify an alternative search list for the C++
+# compiler.
+# aCC	HP-UX C++ compiler much better than `CC', so test before.
+# FCC   Fujitsu C++ compiler
+# KCC	KAI C++ compiler
+# RCC	Rational C++
+# xlC_r	AIX C Set++ (with support for reentrant code)
+# xlC	AIX C Set++
+AC_DEFUN([AC_PROG_CXX],
+[AC_LANG_PUSH(C++)dnl
+AC_ARG_VAR([CXX],      [C++ compiler command])dnl
+AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([CCC])dnl
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    AC_CHECK_TOOLS(CXX,
+		   [m4_default([$1],
+			       [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])],
+		   g++)
+  fi
+fi
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+  m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+_AC_PROG_CXX_G
+_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11
+		    ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
+		    ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11],
+   [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98
+		        ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98],
+		       [ac_prog_cxx_stdcxx=no
+		        ac_cv_prog_cxx_stdcxx=no])])
+AC_LANG_POP(C++)dnl
+])# AC_PROG_CXX
+
+
+# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+#		ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# --------------------------------------------------------------
+# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99')
+# by trying to compile a program of TEST-PROLOGUE and TEST-BODY.  If this fails,
+# try again with each compiler option in the space-separated OPTION-LIST; if one
+# helps, append it to CC.  If eventually successful, run ACTION-IF-AVAILABLE,
+# else ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_C_STD_TRY],
+[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features])
+AC_CACHE_VAL(ac_cv_prog_cc_$1,
+[ac_cv_prog_cc_$1=no
+ac_save_CC=$CC
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+  CC="$ac_save_CC $ac_arg"
+  _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg])
+  test "x$ac_cv_prog_cc_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+])# AC_CACHE_VAL
+ac_prog_cc_stdc_options=
+case "x$ac_cv_prog_cc_$1" in
+  x)
+    AC_MSG_RESULT([none needed]) ;;
+  xno)
+    AC_MSG_RESULT([unsupported]) ;;
+  *)
+    ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1"
+    CC=$CC$ac_prog_cc_stdc_options
+    AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;;
+esac
+AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6])
+])# _AC_C_STD_TRY
+
+# _AC_C_C99_TEST_HEADER
+# ---------------------
+# A C header suitable for testing for C99.
+AC_DEFUN([_AC_C_C99_TEST_HEADER],
+[[#include <stdarg.h>
+#include <stdbool.h>
+#include <stddef.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 bool
+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 = 0;
+  float fnumber = 0;
+
+  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);
+
+  return *str && number && fnumber;
+}]])# _AC_C_C99_TEST_HEADER
+
+# _AC_C_C99_TEST_BODY
+# -------------------
+# A C body suitable for testing for C99, assuming the corresponding header.
+AC_DEFUN([_AC_C_C99_TEST_BODY],
+[[
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= 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);
+]])
+
+# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C99 mode by default, try to add an
+# option to output variable CC to make it so.  This macro tries
+# various options that select ISO C99 on some system or another.  It
+# considers the compiler to be in ISO C99 mode if it handles _Bool,
+# // comments, flexible array members, inline, long long int, mixed
+# code and declarations, named initialization of structs, restrict,
+# va_copy, varargs macros, variable declarations in for loops and
+# variable length arrays.
+AC_DEFUN([_AC_PROG_CC_C99],
+[_AC_C_STD_TRY([c99],
+[_AC_C_C99_TEST_HEADER],
+[_AC_C_C99_TEST_BODY],
+dnl Try
+dnl GCC		-std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999)
+dnl IBM XL C	-qlanglvl=extc1x (V12.1; does not pass C11 test)
+dnl IBM XL C	-qlanglvl=extc99
+dnl		(pre-V12.1; unused restrictive mode: -qlanglvl=stdc99)
+dnl HP cc	-AC99
+dnl Intel ICC	-std=c99, -c99 (deprecated)
+dnl IRIX	-c99
+dnl Solaris	-D_STDC_C99=
+dnl		cc's -xc99 option uses linker magic to define the external
+dnl		symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99
+dnl		behavior for C library functions.  This is not wanted here,
+dnl		because it means that a single module compiled with -xc99
+dnl		alters C runtime behavior for the entire program, not for
+dnl		just the module.  Instead, define the (private) symbol
+dnl		_STDC_C99, which suppresses a bogus failure in <stdbool.h>.
+dnl		The resulting compiler passes the test case here, and that's
+dnl		good enough.  For more, please see the thread starting at:
+dnl            https://lists.gnu.org/r/autoconf/2010-12/msg00059.html
+dnl Tru64	-c99
+dnl with extended modes being tried first.
+[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C99
+
+
+# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C11 mode by default, try to add an
+# option to output variable CC to make it so.  This macro tries
+# various options that select ISO C11 on some system or another.  It
+# considers the compiler to be in ISO C11 mode if it handles _Alignas,
+# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals,
+# duplicate typedefs, and anonymous structures and unions.
+AC_DEFUN([_AC_PROG_CC_C11],
+[_AC_C_STD_TRY([c11],
+[_AC_C_C99_TEST_HEADER[
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+]],
+[_AC_C_C99_TEST_BODY[
+  v1.i = 2;
+  v1.w.k = 5;
+  _Static_assert ((offsetof (struct anonymous, i)
+		   == offsetof (struct anonymous, w.k)),
+		  "Anonymous union alignment botch");
+]],
+dnl Try
+dnl GCC		-std=gnu11 (unused restrictive mode: -std=c11)
+dnl with extended modes being tried first.
+dnl
+dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as
+dnl of September 2012) does not pass the C11 test.  For now, try extc1x when
+dnl compiling the C99 test instead, since it enables _Static_assert and
+dnl _Noreturn, which is a win.  If -qlanglvl=extc11 or -qlanglvl=extc1x passes
+dnl the C11 test in some future version of IBM XL C, we'll add it here,
+dnl preferably extc11.
+[[-std=gnu11]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C11
+
+
+# AC_PROG_CC_C89
+# --------------
+# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC,
+# as that'd be incompatible with how Automake redefines AC_PROG_CC.  See
+# <https://lists.gnu.org/r/autoconf/2012-10/msg00048.html>.
+AU_DEFUN([AC_PROG_CC_C89],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_C99
+# --------------
+AU_DEFUN([AC_PROG_CC_C99],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+# AC_PROG_CC_STDC
+# ---------------
+AU_DEFUN([AC_PROG_CC_STDC],
+  [AC_REQUIRE([AC_PROG_CC])],
+  [$0 is obsolete; use AC_PROG_CC]
+)
+
+
+# AC_C_PROTOTYPES
+# ---------------
+# Check if the C compiler supports prototypes, included if it needs
+# options.
+AC_DEFUN([AC_C_PROTOTYPES],
+[AC_REQUIRE([AC_PROG_CC])dnl
+if test "$ac_prog_cc_stdc" != no; then
+  AC_DEFINE(PROTOTYPES, 1,
+	    [Define to 1 if the C compiler supports function prototypes.])
+  AC_DEFINE(__PROTOTYPES, 1,
+	    [Define like PROTOTYPES; this can be used by system headers.])
+fi
+])# AC_C_PROTOTYPES
+
+
+# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+#		  ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# ----------------------------------------------------------------
+# Check whether the C++ compiler accepts features of STANDARD (e.g
+# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE
+# and TEST-BODY.  If this fails, try again with each compiler option
+# in the space-separated OPTION-LIST; if one helps, append it to CXX.
+# If eventually successful, run ACTION-IF-AVAILABLE, else
+# ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_CXX_STD_TRY],
+[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features])
+AC_LANG_PUSH(C++)dnl
+AC_CACHE_VAL(ac_cv_prog_cxx_$1,
+[ac_cv_prog_cxx_$1=no
+ac_save_CXX=$CXX
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+  CXX="$ac_save_CXX $ac_arg"
+  _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg])
+  test "x$ac_cv_prog_cxx_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CXX=$ac_save_CXX
+])# AC_CACHE_VAL
+ac_prog_cxx_stdcxx_options=
+case "x$ac_cv_prog_cxx_$1" in
+  x)
+    AC_MSG_RESULT([none needed]) ;;
+  xno)
+    AC_MSG_RESULT([unsupported]) ;;
+  *)
+    ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1"
+    CXX=$CXX$ac_prog_cxx_stdcxx_options
+    AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;;
+esac
+AC_LANG_POP(C++)dnl
+AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6])
+])# _AC_CXX_STD_TRY
+
+# _AC_CXX_CXX98_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX98.
+AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER],
+[[
+#include <algorithm>
+#include <cstdlib>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace test {
+  typedef std::vector<std::string> string_vec;
+  typedef std::pair<int,bool> map_value;
+  typedef std::map<std::string,map_value> map_type;
+  typedef std::set<int> set_type;
+
+  template<typename T>
+  class printer {
+  public:
+    printer(std::ostringstream& os): os(os) {}
+    void operator() (T elem) { os << elem << std::endl; }
+  private:
+    std::ostringstream& os;
+  };
+}
+]])# _AC_CXX_CXX98_TEST_HEADER
+
+# _AC_CXX_CXX98_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX98, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX98_TEST_BODY],
+[[
+
+try {
+  // Basic string.
+  std::string teststr("ASCII text");
+  teststr += " string";
+
+  // Simple vector.
+  test::string_vec testvec;
+  testvec.push_back(teststr);
+  testvec.push_back("foo");
+  testvec.push_back("bar");
+  if (testvec.size() != 3) {
+    throw std::runtime_error("vector size is not 1");
+  }
+
+  // Dump vector into stringstream and obtain string.
+  std::ostringstream os;
+  for (test::string_vec::const_iterator i = testvec.begin();
+       i != testvec.end(); ++i) {
+    if (i + 1 != testvec.end()) {
+      os << teststr << '\n';
+    }
+  }
+  // Check algorithms work.
+  std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os));
+  std::string os_out = os.str();
+
+  // Test pair and map.
+  test::map_type testmap;
+  testmap.insert(std::make_pair(std::string("key"),
+                                std::make_pair(53,false)));
+
+  // Test set.
+  int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  test::set_type testset(values, values + sizeof(values)/sizeof(values[0]));
+  std::list<int> testlist(testset.begin(), testset.end());
+  std::copy(testset.begin(), testset.end(), std::back_inserter(testlist));
+} catch (const std::exception& e) {
+  std::cerr << "Caught exception: " << e.what() << std::endl;
+
+  // Test fstream
+  std::ofstream of("test.txt");
+  of << "Test ASCII text\n" << std::flush;
+  of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl;
+  of.close();
+}
+std::exit(0);
+]])
+
+# _AC_CXX_CXX11_TEST_HEADER
+# -------------------------
+# A C++ header suitable for testing for CXX11.
+AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER],
+[[
+#include <deque>
+#include <functional>
+#include <memory>
+#include <tuple>
+#include <array>
+#include <regex>
+#include <iostream>
+
+namespace cxx11test
+{
+  typedef std::shared_ptr<std::string> sptr;
+  typedef std::weak_ptr<std::string> wptr;
+
+  typedef std::tuple<std::string,int,double> tp;
+  typedef std::array<int, 20> int_array;
+
+  constexpr int get_val() { return 20; }
+
+  struct testinit
+  {
+    int i;
+    double d;
+  };
+
+  class delegate  {
+  public:
+    delegate(int n) : n(n) {}
+    delegate(): delegate(2354) {}
+
+    virtual int getval() { return this->n; };
+  protected:
+    int n;
+  };
+
+  class overridden : public delegate {
+  public:
+    overridden(int n): delegate(n) {}
+    virtual int getval() override final { return this->n * 2; }
+  };
+
+  class nocopy {
+  public:
+    nocopy(int i): i(i) {}
+    nocopy() = default;
+    nocopy(const nocopy&) = delete;
+    nocopy & operator=(const nocopy&) = delete;
+  private:
+    int i;
+  };
+}
+]])# _AC_CXX_CXX11_TEST_HEADER
+
+# _AC_CXX_CXX11_TEST_BODY
+# -----------------------
+# A C++ body suitable for testing for CXX11, assuming the corresponding header.
+AC_DEFUN([_AC_CXX_CXX11_TEST_BODY],
+[[
+{
+  // Test auto and decltype
+  std::deque<int> d;
+  d.push_front(43);
+  d.push_front(484);
+  d.push_front(3);
+  d.push_front(844);
+  int total = 0;
+  for (auto i = d.begin(); i != d.end(); ++i) { total += *i; }
+
+  auto a1 = 6538;
+  auto a2 = 48573953.4;
+  auto a3 = "String literal";
+
+  decltype(a2) a4 = 34895.034;
+}
+{
+  // Test constexpr
+  short sa[cxx11test::get_val()] = { 0 };
+}
+{
+  // Test initializer lists
+  cxx11test::testinit il = { 4323, 435234.23544 };
+}
+{
+  // Test range-based for and lambda
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  for (int &x : array) { x += 23; }
+  std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; });
+}
+{
+  using cxx11test::sptr;
+  using cxx11test::wptr;
+
+  sptr sp(new std::string("ASCII string"));
+  wptr wp(sp);
+  sptr sp2(wp);
+}
+{
+  cxx11test::tp tuple("test", 54, 45.53434);
+  double d = std::get<2>(tuple);
+  std::string s;
+  int i;
+  std::tie(s,i,d) = tuple;
+}
+{
+  static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$");
+  std::string testmatch("Test if this string matches");
+  bool match = std::regex_search(testmatch, filename_regex);
+}
+{
+  cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
+  cxx11test::int_array::size_type size = array.size();
+}
+{
+  // Test constructor delegation
+  cxx11test::delegate d1;
+  cxx11test::delegate d2();
+  cxx11test::delegate d3(45);
+}
+{
+  // Test override and final
+  cxx11test::overridden o1(55464);
+}
+{
+  // Test nullptr
+  char *c = nullptr;
+}
+{
+  // Test template brackets
+  std::vector<std::pair<int,char*>> v1;
+}
+{
+  // Unicode literals
+  char const *utf8 = u8"UTF-8 string \u2500";
+  char16_t const *utf16 = u"UTF-8 string \u2500";
+  char32_t const *utf32 = U"UTF-32 string \u2500";
+}
+]])
+
+# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+
+# If the C++ compiler is not in ISO C++98 mode by default, try to add
+# an option to output variable CXX to make it so.  This macro tries
+# various options that select ISO C++98 on some system or another.  It
+# considers the compiler to be in ISO C++98 mode if it handles basic
+# features of the std namespace including: string, containers (list,
+# map, set, vector), streams (fstreams, iostreams, stringstreams,
+# iomanip), pair, exceptions and algorithms.
+
+
+AC_DEFUN([_AC_PROG_CXX_CXX98],
+[_AC_CXX_STD_TRY([cxx98],
+[_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC		-std=gnu++98 (unused restrictive mode: -std=c++98)
+dnl IBM XL C	-qlanglvl=extended
+dnl HP aC++	-AA
+dnl Intel ICC	-std=gnu++98
+dnl Solaris	N/A (default)
+dnl Tru64	N/A (default, but -std gnu could be used)
+dnl with extended modes being tried first.
+[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX98
+
+# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# -------------------------------------------------------------------
+# If the C++ compiler is not in ISO CXX11 mode by default, try to add
+# an option to output variable CXX to make it so.  This macro tries
+# various options that select ISO C++11 on some system or another.  It
+# considers the compiler to be in ISO C++11 mode if it handles all the
+# tests from the C++98 checks, plus the following: Language features
+# (auto, constexpr, decltype, default/deleted constructors, delegate
+# constructors, final, initializer lists, lambda functions, nullptr,
+# override, range-based for loops, template brackets without spaces,
+# unicode literals) and library features (array, memory (shared_ptr,
+# weak_ptr), regex and tuple types).
+AC_DEFUN([_AC_PROG_CXX_CXX11],
+[_AC_CXX_STD_TRY([cxx11],
+[_AC_CXX_CXX11_TEST_HEADER
+_AC_CXX_CXX98_TEST_HEADER],
+[_AC_CXX_CXX11_TEST_BODY
+_AC_CXX_CXX98_TEST_BODY],
+dnl Try
+dnl GCC		-std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants]
+dnl IBM XL C	-qlanglvl=extended0x
+dnl		(pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11)
+dnl HP aC++	-AA
+dnl Intel ICC	-std=c++11 -std=c++0x
+dnl Solaris	N/A (no support)
+dnl Tru64	N/A (no support)
+dnl with extended modes being tried first.
+[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl
+])# _AC_PROG_CXX_CXX11
diff --git a/m4/stdbool.m4 b/m4/stdbool.m4
index eabfa64..acb8522 100644
--- a/m4/stdbool.m4
+++ b/m4/stdbool.m4
@@ -1,11 +1,11 @@
 # Check for stdbool.h that conforms to C99.
 
-dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2019 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
+#serial 7
 
 # Prepare for substituting <stdbool.h> if it is not supported.
 
@@ -43,56 +43,64 @@
         [AC_LANG_PROGRAM(
            [[
              #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
+
+             #ifdef __cplusplus
+              typedef bool Bool;
+             #else
+              typedef _Bool Bool;
+              #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
              #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; bool u: 1; bool v; } 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 f[(Bool) 0.0 == false ? 1 : -1];
              char g[true];
-             char h[sizeof (_Bool)];
+             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];
+             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];
+             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
+                https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html
               */
-             _Bool q = true;
-             _Bool *pq = &q;
+             Bool q = true;
+             Bool *pq = &q;
+             bool *qq = &q;
            ]],
            [[
              bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
+             *pq |= q; *pq |= ! q;
+             *qq |= q; *qq |= ! 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);
+                     + !m + !n + !o + !p + !q + !pq + !qq);
            ]])],
         [ac_cv_header_stdbool_h=yes],
         [ac_cv_header_stdbool_h=no])])
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index cc11609..979e3cf 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,6 +1,6 @@
-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 A placeholder for <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 6
+dnl Copyright (C) 2009-2019 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.
@@ -10,10 +10,33 @@
   AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
   AC_REQUIRE([gt_TYPE_WCHAR_T])
   STDDEF_H=
+
+  dnl Test whether the type max_align_t exists and whether its alignment
+  dnl "is as great as is supported by the implementation in all contexts".
+  AC_CACHE_CHECK([for good max_align_t],
+    [gl_cv_type_max_align_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            unsigned int s = sizeof (max_align_t);
+            #if defined __GNUC__ || defined __IBM__ALIGNOF__
+            int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+            int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+            #endif
+          ]])],
+       [gl_cv_type_max_align_t=yes],
+       [gl_cv_type_max_align_t=no])
+    ])
+  if test $gl_cv_type_max_align_t = no; then
+    HAVE_MAX_ALIGN_T=0
+    STDDEF_H=stddef.h
+  fi
+
   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>
@@ -25,6 +48,7 @@
     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
@@ -43,5 +67,6 @@
 [
   dnl Assume proper GNU behavior unless another module says otherwise.
   REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_MAX_ALIGN_T=1;            AC_SUBST([HAVE_MAX_ALIGN_T])
   HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
 ])
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index 28d342e..11d8e8e 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,5 +1,5 @@
-# stdint.m4 serial 43
-dnl Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# stdint.m4 serial 53
+dnl Copyright (C) 2001-2019 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,9 +7,15 @@
 dnl From Paul Eggert and Bruno Haible.
 dnl Test whether <stdint.h> is supported or must be substituted.
 
+AC_PREREQ([2.61])
+
 AC_DEFUN_ONCE([gl_STDINT_H],
 [
   AC_PREREQ([2.59])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  AC_REQUIRE([gl_LIMITS_H])
+  AC_REQUIRE([gt_TYPE_WINT_T])
 
   dnl Check for long long int and unsigned long long int.
   AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
@@ -70,6 +76,8 @@
        AC_COMPILE_IFELSE([
          AC_LANG_PROGRAM([[
 #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
 #include <stdint.h>
 /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
 #if !(defined WCHAR_MIN && defined WCHAR_MAX)
@@ -150,6 +158,15 @@
 intmax_t i = INTMAX_MAX;
 uintmax_t j = UINTMAX_MAX;
 
+/* Check that SIZE_MAX has the correct type, if possible.  */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
+       || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
 #include <limits.h> /* for CHAR_BIT */
 #define TYPE_MINIMUM(t) \
   ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
@@ -218,6 +235,8 @@
           AC_RUN_IFELSE([
             AC_LANG_PROGRAM([[
 #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
 #include <stdint.h>
 ]
 gl_STDINT_INCLUDES
@@ -272,34 +291,86 @@
 ]])],
               [gl_cv_header_working_stdint_h=yes],
               [],
-              [dnl When cross-compiling, assume it works.
-               gl_cv_header_working_stdint_h=yes
+              [case "$host_os" in
+                         # Guess yes on native Windows.
+                 mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+                         # In general, assume it works.
+                 *)      gl_cv_header_working_stdint_h="guessing yes" ;;
+               esac
               ])
          ])
       ])
   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
+  HAVE_C99_STDINT_H=0
+  HAVE_SYS_BITYPES_H=0
+  HAVE_SYS_INTTYPES_H=0
+  STDINT_H=stdint.h
+  case "$gl_cv_header_working_stdint_h" in
+    *yes)
+      HAVE_C99_STDINT_H=1
+      dnl Now see whether the system <stdint.h> works without
+      dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
+      AC_CACHE_CHECK([whether stdint.h predates C++11],
+        [gl_cv_header_stdint_predates_cxx11_h],
+        [gl_cv_header_stdint_predates_cxx11_h=yes
+         AC_COMPILE_IFELSE([
+           AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+           ]])],
+           [gl_cv_header_stdint_predates_cxx11_h=no])])
+
+      if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+        AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
+                  [Define to 1 if the system <stdint.h> predates C++11.])
+        AC_DEFINE([__STDC_LIMIT_MACROS], [1],
+                  [Define to 1 if the system <stdint.h> predates C++11.])
+      fi
+      AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
+        [gl_cv_header_stdint_width],
+        [gl_cv_header_stdint_width=no
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([[
+              /* Work if build is not clean.  */
+              #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+              #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+               #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+              #endif
+              #include <stdint.h>
+              ]gl_STDINT_INCLUDES[
+              int iw = UINTMAX_WIDTH;
+              ]])],
+           [gl_cv_header_stdint_width=yes])])
+      if test "$gl_cv_header_stdint_width" = yes; then
+        STDINT_H=
+      fi
+      ;;
+    *)
+      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
+      fi
+      if test $ac_cv_header_sys_bitypes_h = yes; then
+        HAVE_SYS_BITYPES_H=1
+      fi
+      gl_STDINT_TYPE_PROPERTIES
+      ;;
+  esac
+
+  dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
+  gl_REPLACE_LIMITS_H
+
+  AC_SUBST([HAVE_C99_STDINT_H])
+  AC_SUBST([HAVE_SYS_BITYPES_H])
+  AC_SUBST([HAVE_SYS_INTTYPES_H])
   AC_SUBST([STDINT_H])
   AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
 ])
@@ -467,18 +538,7 @@
   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
+  if test $GNULIB_OVERRIDES_WINT_T = 1; 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
index 581de96..6d5f1af 100644
--- a/m4/stdint_h.m4
+++ b/m4/stdint_h.m4
@@ -1,5 +1,5 @@
 # stdint_h.m4 serial 9
-dnl Copyright (C) 1997-2004, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2004, 2006, 2008-2019 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/m4/stdio_h.m4 b/m4/stdio_h.m4
index 3bd6580..6c9c104 100644
--- a/m4/stdio_h.m4
+++ b/m4/stdio_h.m4
@@ -1,14 +1,45 @@
-# stdio_h.m4 serial 43
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# stdio_h.m4 serial 49
+dnl Copyright (C) 2007-2019 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],
 [
+  AH_VERBATIM([MINGW_ANSI_STDIO],
+[/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+])
+  AC_DEFINE([__USE_MINGW_ANSI_STDIO])
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
   gl_NEXT_HEADERS([stdio.h])
 
+  dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
+  dnl inttypes.h behave like gnu instead of system; we must give our
+  dnl printf wrapper the right attribute to match.
+  AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros],
+    [gl_cv_func_printf_attribute_flavor],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+       #define __STDC_FORMAT_MACROS 1
+       #include <stdio.h>
+       #include <inttypes.h>
+       /* For non-mingw systems, compilation will trivially succeed.
+          For mingw, compilation will succeed for older mingw (system
+          printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+       #if (defined _WIN32 && ! defined __CYGWIN__) && \
+         (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+       extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+       #endif
+      ]])], [gl_cv_func_printf_attribute_flavor=system],
+      [gl_cv_func_printf_attribute_flavor=gnu])])
+  if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+    AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
+      [Define to 1 if printf and friends should be labeled with
+       attribute "__gnu_printf__" instead of "__printf__"])
+  fi
+
   dnl No need to create extra modules for these functions. Everyone who uses
   dnl <stdio.h> likely needs them.
   GNULIB_FSCANF=1
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 9c69f2e..6121602 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -1,5 +1,5 @@
-# stdlib_h.m4 serial 41
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# stdlib_h.m4 serial 48
+dnl Copyright (C) 2007-2019 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.
@@ -14,16 +14,19 @@
   dnl guaranteed by C89.
   gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
 #if HAVE_SYS_LOADAVG_H
+/* OpenIndiana has a bug: <sys/time.h> must be included before
+   <sys/loadavg.h>.  */
+# include <sys/time.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])
+    initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps
+    posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray
+    realpath rpmatch secure_getenv setenv setstate setstate_r srandom
+    srandom_r strtod strtold strtoll strtoull unlockpt unsetenv])
 ])
 
 AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
@@ -55,13 +58,17 @@
   GNULIB_PTSNAME=0;       AC_SUBST([GNULIB_PTSNAME])
   GNULIB_PTSNAME_R=0;     AC_SUBST([GNULIB_PTSNAME_R])
   GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
+  GNULIB_QSORT_R=0;       AC_SUBST([GNULIB_QSORT_R])
   GNULIB_RANDOM=0;        AC_SUBST([GNULIB_RANDOM])
   GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
+  GNULIB_REALLOCARRAY=0;  AC_SUBST([GNULIB_REALLOCARRAY])
   GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
   GNULIB_REALPATH=0;      AC_SUBST([GNULIB_REALPATH])
   GNULIB_RPMATCH=0;       AC_SUBST([GNULIB_RPMATCH])
+  GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV])
   GNULIB_SETENV=0;        AC_SUBST([GNULIB_SETENV])
   GNULIB_STRTOD=0;        AC_SUBST([GNULIB_STRTOD])
+  GNULIB_STRTOLD=0;       AC_SUBST([GNULIB_STRTOLD])
   GNULIB_STRTOLL=0;       AC_SUBST([GNULIB_STRTOLL])
   GNULIB_STRTOULL=0;      AC_SUBST([GNULIB_STRTOULL])
   GNULIB_SYSTEM_POSIX=0;  AC_SUBST([GNULIB_SYSTEM_POSIX])
@@ -75,6 +82,9 @@
   HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
   HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
   HAVE_GRANTPT=1;            AC_SUBST([HAVE_GRANTPT])
+  HAVE_INITSTATE=1;          AC_SUBST([HAVE_INITSTATE])
+  HAVE_DECL_INITSTATE=1;     AC_SUBST([HAVE_DECL_INITSTATE])
+  HAVE_MBTOWC=1;             AC_SUBST([HAVE_MBTOWC])
   HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
   HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
   HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
@@ -83,14 +93,20 @@
   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_QSORT_R=1;            AC_SUBST([HAVE_QSORT_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_REALLOCARRAY=1;       AC_SUBST([HAVE_REALLOCARRAY])
   HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
   HAVE_RPMATCH=1;            AC_SUBST([HAVE_RPMATCH])
+  HAVE_SECURE_GETENV=1;      AC_SUBST([HAVE_SECURE_GETENV])
   HAVE_SETENV=1;             AC_SUBST([HAVE_SETENV])
   HAVE_DECL_SETENV=1;        AC_SUBST([HAVE_DECL_SETENV])
+  HAVE_SETSTATE=1;           AC_SUBST([HAVE_SETSTATE])
+  HAVE_DECL_SETSTATE=1;      AC_SUBST([HAVE_DECL_SETSTATE])
   HAVE_STRTOD=1;             AC_SUBST([HAVE_STRTOD])
+  HAVE_STRTOLD=1;            AC_SUBST([HAVE_STRTOLD])
   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])
@@ -99,17 +115,22 @@
   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_INITSTATE=0;       AC_SUBST([REPLACE_INITSTATE])
   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_QSORT_R=0;         AC_SUBST([REPLACE_QSORT_R])
+  REPLACE_RANDOM=0;          AC_SUBST([REPLACE_RANDOM])
   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_SETSTATE=0;        AC_SUBST([REPLACE_SETSTATE])
   REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
+  REPLACE_STRTOLD=0;         AC_SUBST([REPLACE_STRTOLD])
   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 8e95457..7af2e81 100644
--- a/m4/stpcpy.m4
+++ b/m4/stpcpy.m4
@@ -1,5 +1,5 @@
 # stpcpy.m4 serial 8
-dnl Copyright (C) 2002, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2007, 2009-2019 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/m4/strchrnul.m4 b/m4/strchrnul.m4
index d3dfb9a..93cf112 100644
--- a/m4/strchrnul.m4
+++ b/m4/strchrnul.m4
@@ -1,5 +1,5 @@
 # strchrnul.m4 serial 9
-dnl Copyright (C) 2003, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2019 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/m4/strdup.m4 b/m4/strdup.m4
index db0c8c1..82d7420 100644
--- a/m4/strdup.m4
+++ b/m4/strdup.m4
@@ -1,6 +1,6 @@
 # strdup.m4 serial 13
 
-dnl Copyright (C) 2002-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2019 Free Software Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
diff --git a/m4/strerror.m4 b/m4/strerror.m4
index 1c96e52..fbfb4e1 100644
--- a/m4/strerror.m4
+++ b/m4/strerror.m4
@@ -1,5 +1,5 @@
-# strerror.m4 serial 17
-dnl Copyright (C) 2002, 2007-2012 Free Software Foundation, Inc.
+# strerror.m4 serial 21
+dnl Copyright (C) 2002, 2007-2019 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.
@@ -24,10 +24,12 @@
         [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" ;;
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+                          # Guess yes on musl systems.
+           *-musl*)       gl_cv_func_working_strerror="guessing yes" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+           *)             gl_cv_func_working_strerror="$gl_cross_guess_normal" ;;
          esac
         ])
     ])
@@ -78,10 +80,14 @@
       [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" ;;
+                        # Guess yes on glibc systems.
+         *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # Guess yes on musl systems.
+         *-musl*)       gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # Guess yes on native Windows.
+         mingw*)        gl_cv_func_strerror_0_works="guessing yes" ;;
+                        # If we don't know, obey --enable-cross-guesses.
+         *)             gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;;
        esac
       ])
   ])
diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4
index bb035eb..9907113 100644
--- a/m4/strerror_r.m4
+++ b/m4/strerror_r.m4
@@ -1,5 +1,5 @@
-# strerror_r.m4 serial 15
-dnl Copyright (C) 2002, 2007-2012 Free Software Foundation, Inc.
+# strerror_r.m4 serial 20
+dnl Copyright (C) 2002, 2007-2019 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.
@@ -163,7 +163,7 @@
                [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"
+                gl_cv_func_strerror_r_works="$gl_cross_guess_normal"
                ])
             ])
         fi
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index 5677e09..0c0e3a7 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -1,11 +1,11 @@
 # Configure a GNU-like replacement for <string.h>.
 
-# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007-2019 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
+# serial 22
 
 # Written by Paul Eggert.
 
@@ -43,6 +43,7 @@
 
 AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
 [
+  GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
   GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
   GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
   GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
@@ -82,6 +83,7 @@
   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_EXPLICIT_BZERO=1;        AC_SUBST([HAVE_EXPLICIT_BZERO])
   HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
   HAVE_FFSLL=1;                 AC_SUBST([HAVE_FFSLL])
   HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
@@ -105,16 +107,16 @@
   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_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
   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_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
   REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRERROR_R=0;         AC_SUBST([REPLACE_STRERROR_R])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
   UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
 ])
diff --git a/m4/strndup.m4 b/m4/strndup.m4
index cef6889..325af5d 100644
--- a/m4/strndup.m4
+++ b/m4/strndup.m4
@@ -1,5 +1,5 @@
-# strndup.m4 serial 21
-dnl Copyright (C) 2002-2003, 2005-2012 Free Software Foundation, Inc.
+# strndup.m4 serial 22
+dnl Copyright (C) 2002-2003, 2005-2019 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.
@@ -31,11 +31,14 @@
   #endif
   char *strndup (const char *, size_t);
 #endif
+  int result;
   char *s;
   s = strndup ("some longer string", 15);
   free (s);
   s = strndup ("shorter string", 13);
-  return s[13] != '\0';]])],
+  result = s[13] != '\0';
+  free (s);
+  return result;]])],
          [gl_cv_func_strndup_works=yes],
          [gl_cv_func_strndup_works=no],
          [
diff --git a/m4/strnlen.m4 b/m4/strnlen.m4
index d97e307..c283c3e 100644
--- a/m4/strnlen.m4
+++ b/m4/strnlen.m4
@@ -1,5 +1,5 @@
 # strnlen.m4 serial 13
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2019 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,
diff --git a/m4/strtoul.m4 b/m4/strtoul.m4
deleted file mode 100644
index 93e2248..0000000
--- a/m4/strtoul.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-# 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_CHECK_FUNCS([strtoul])
-])
diff --git a/m4/strverscmp.m4 b/m4/strverscmp.m4
index d744647..ec66cdf 100644
--- a/m4/strverscmp.m4
+++ b/m4/strverscmp.m4
@@ -1,5 +1,5 @@
 # strverscmp.m4 serial 8
-dnl Copyright (C) 2002, 2005-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2019 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/m4/sys_resource_h.m4 b/m4/sys_resource_h.m4
new file mode 100644
index 0000000..d6225d5
--- /dev/null
+++ b/m4/sys_resource_h.m4
@@ -0,0 +1,47 @@
+# sys_resource_h.m4 serial 2
+dnl Copyright (C) 2012-2019 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_HEADER_SYS_RESOURCE],
+[
+  AC_REQUIRE([gl_SYS_RESOURCE_H_DEFAULTS])
+  dnl <sys/resource.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([sys/resource.h])
+  if test $ac_cv_header_sys_resource_h = yes; then
+    HAVE_SYS_RESOURCE_H=1
+  else
+    HAVE_SYS_RESOURCE_H=0
+  fi
+  AC_SUBST([HAVE_SYS_RESOURCE_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([[
+#if HAVE_SYS_RESOURCE_H
+/* At least FreeBSD 5.0 needs extra headers before <sys/resource.h>
+   will compile.  */
+# include <sys/types.h>
+# include <sys/time.h>
+# include <sys/resource.h>
+#endif
+    ]],
+    [getrusage])
+])
+
+AC_DEFUN([gl_SYS_RESOURCE_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SYS_RESOURCE_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_RESOURCE_H_DEFAULTS],
+[
+  GNULIB_GETRUSAGE=0;     AC_SUBST([GNULIB_GETRUSAGE])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_GETRUSAGE=1;       AC_SUBST([HAVE_GETRUSAGE])
+])
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
index acfae41..d0a9020 100644
--- a/m4/sys_socket_h.m4
+++ b/m4/sys_socket_h.m4
@@ -1,5 +1,5 @@
-# sys_socket_h.m4 serial 23
-dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# sys_socket_h.m4 serial 24
+dnl Copyright (C) 2005-2019 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.
@@ -104,17 +104,11 @@
   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])
+  gl_PREREQ_SYS_H_WS2TCPIP
 ])
 
 # Common prerequisites of the <sys/socket.h> replacement and of the
@@ -142,6 +136,24 @@
   AC_SUBST([HAVE_WINSOCK2_H])
 ])
 
+# Common prerequisites of the <sys/socket.h> replacement and of the
+# <arpa/inet.h> replacement.
+# Sets and substitutes HAVE_WS2TCPIP_H.
+AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP],
+[
+  AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
+  if test $ac_cv_header_sys_socket_h = yes; then
+    HAVE_WS2TCPIP_H=0
+  else
+    if test $ac_cv_header_ws2tcpip_h = yes; then
+      HAVE_WS2TCPIP_H=1
+    else
+      HAVE_WS2TCPIP_H=0
+    fi
+  fi
+  AC_SUBST([HAVE_WS2TCPIP_H])
+])
+
 AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
 [
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
index 8af3353..361ac3f 100644
--- a/m4/sys_stat_h.m4
+++ b/m4/sys_stat_h.m4
@@ -1,5 +1,5 @@
-# sys_stat_h.m4 serial 28   -*- Autoconf -*-
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# sys_stat_h.m4 serial 31   -*- Autoconf -*-
+dnl Copyright (C) 2006-2019 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,18 +19,21 @@
   dnl Ensure the type mode_t gets defined.
   AC_REQUIRE([AC_TYPE_MODE_T])
 
-  dnl Whether to override 'struct stat'.
+  dnl Whether to enable precise timestamps in 'struct stat'.
+  m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [
+    AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC])
+  ], [
+    WINDOWS_STAT_TIMESPEC=0
+  ])
+  AC_SUBST([WINDOWS_STAT_TIMESPEC])
+
+  dnl Whether to ensure that struct stat.st_size is 64-bit wide.
   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>.
@@ -72,6 +75,7 @@
   GNULIB_MKNODAT=0;     AC_SUBST([GNULIB_MKNODAT])
   GNULIB_STAT=0;        AC_SUBST([GNULIB_STAT])
   GNULIB_UTIMENSAT=0;   AC_SUBST([GNULIB_UTIMENSAT])
+  GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT])
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE_FCHMODAT=1;      AC_SUBST([HAVE_FCHMODAT])
   HAVE_FSTATAT=1;       AC_SUBST([HAVE_FSTATAT])
diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4
new file mode 100644
index 0000000..3d9233a
--- /dev/null
+++ b/m4/sys_time_h.m4
@@ -0,0 +1,110 @@
+# Configure a replacement for <sys/time.h>.
+# serial 9
+
+# Copyright (C) 2007, 2009-2019 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 Paul Eggert and Martin Lambers.
+
+AC_DEFUN([gl_HEADER_SYS_TIME_H],
+[
+  dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement
+  dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1
+  dnl statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+  AC_CHECK_HEADERS_ONCE([sys/time.h])
+  gl_CHECK_NEXT_HEADERS([sys/time.h])
+
+  if test $ac_cv_header_sys_time_h != yes; then
+    HAVE_SYS_TIME_H=0
+  fi
+
+  dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h>
+  dnl only. So include that header in the list.
+  gl_PREREQ_SYS_H_WINSOCK2
+  AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#if HAVE_SYS_TIME_H
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
+            #if HAVE_WINSOCK2_H
+            # include <winsock2.h>
+            #endif
+          ]],
+          [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
+       [gl_cv_sys_struct_timeval=yes],
+       [gl_cv_sys_struct_timeval=no])
+    ])
+  if test $gl_cv_sys_struct_timeval != yes; then
+    HAVE_STRUCT_TIMEVAL=0
+  else
+    dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined
+    dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only
+    dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is
+    dnl smaller than the 'time_t' type mandated by POSIX.
+    dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but
+    dnl that is good enough.
+    AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member],
+      [gl_cv_sys_struct_timeval_tv_sec],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#if HAVE_SYS_TIME_H
+               #include <sys/time.h>
+              #endif
+              #include <time.h>
+              #if HAVE_WINSOCK2_H
+              # include <winsock2.h>
+              #endif
+            ]],
+            [[static struct timeval x;
+              typedef int verify_tv_sec_type[
+                sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1
+              ];
+            ]])],
+         [gl_cv_sys_struct_timeval_tv_sec=yes],
+         [gl_cv_sys_struct_timeval_tv_sec=no])
+      ])
+    if test $gl_cv_sys_struct_timeval_tv_sec != yes; then
+      REPLACE_STRUCT_TIMEVAL=1
+    fi
+  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([[
+#if HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <time.h>
+    ]], [gettimeofday])
+])
+
+AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_SYS_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_SYS_TIME_H_DEFAULTS],
+[
+  GNULIB_GETTIMEOFDAY=0;     AC_SUBST([GNULIB_GETTIMEOFDAY])
+  dnl Assume POSIX behavior unless another module says otherwise.
+  HAVE_GETTIMEOFDAY=1;       AC_SUBST([HAVE_GETTIMEOFDAY])
+  HAVE_STRUCT_TIMEVAL=1;     AC_SUBST([HAVE_STRUCT_TIMEVAL])
+  HAVE_SYS_TIME_H=1;         AC_SUBST([HAVE_SYS_TIME_H])
+  REPLACE_GETTIMEOFDAY=0;    AC_SUBST([REPLACE_GETTIMEOFDAY])
+  REPLACE_STRUCT_TIMEVAL=0;  AC_SUBST([REPLACE_STRUCT_TIMEVAL])
+])
diff --git a/m4/sys_times_h.m4 b/m4/sys_times_h.m4
new file mode 100644
index 0000000..86481be
--- /dev/null
+++ b/m4/sys_times_h.m4
@@ -0,0 +1,51 @@
+# Configure a replacement for <sys/times.h>.
+# serial 8
+
+# Copyright (C) 2008-2019 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 Simon Josefsson.
+
+AC_DEFUN([gl_SYS_TIMES_H],
+[
+  AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS])
+
+  dnl <sys/times.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([sys/times.h])
+  if test $ac_cv_header_sys_times_h = yes; then
+    HAVE_SYS_TIMES_H=1
+    AC_CHECK_TYPES([struct tms], [], [HAVE_STRUCT_TMS=0], [[
+#include <sys/times.h>
+      ]])
+  else
+    HAVE_SYS_TIMES_H=0
+    HAVE_STRUCT_TMS=0
+  fi
+  AC_SUBST([HAVE_SYS_TIMES_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([[
+/* Some systems have incomplete headers.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <time.h>
+#endif
+#include <sys/times.h>
+    ]], [times])
+])
+
+AC_DEFUN([gl_SYS_TIMES_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_SYS_TIMES_H_DEFAULTS],
+[
+  GNULIB_TIMES=0;     AC_SUBST([GNULIB_TIMES])
+  HAVE_STRUCT_TMS=1;  AC_SUBST([HAVE_STRUCT_TMS])
+  HAVE_TIMES=1;       AC_SUBST([HAVE_TIMES])
+])
diff --git a/m4/sys_types_h.m4 b/m4/sys_types_h.m4
index f11eef2..be06559 100644
--- a/m4/sys_types_h.m4
+++ b/m4/sys_types_h.m4
@@ -1,11 +1,14 @@
-# sys_types_h.m4 serial 4
-dnl Copyright (C) 2011-2012 Free Software Foundation, Inc.
+# sys_types_h.m4 serial 9
+dnl Copyright (C) 2011-2019 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_DEFUN_ONCE([gl_SYS_TYPES_H],
 [
+  dnl Use sane struct stat types in OpenVMS 8.2 and later.
+  AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
+
   AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
   gl_NEXT_HEADERS([sys/types.h])
 
@@ -17,8 +20,41 @@
 
   dnl Whether to override the 'off_t' type.
   AC_REQUIRE([gl_TYPE_OFF_T])
+
+  dnl Whether to override the 'dev_t' and 'ino_t' types.
+  m4_ifdef([gl_WINDOWS_STAT_INODES], [
+    AC_REQUIRE([gl_WINDOWS_STAT_INODES])
+  ], [
+    WINDOWS_STAT_INODES=0
+  ])
+  AC_SUBST([WINDOWS_STAT_INODES])
 ])
 
 AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
 [
 ])
+
+# This works around a buggy version in autoconf <= 2.69.
+# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html>
+
+m4_version_prereq([2.70], [], [
+
+# This is taken from the following Autoconf patch:
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974
+
+m4_undefine([AC_HEADER_MAJOR])
+AC_DEFUN([AC_HEADER_MAJOR],
+[AC_CHECK_HEADERS_ONCE([sys/types.h])
+AC_CHECK_HEADER([sys/mkdev.h],
+  [AC_DEFINE([MAJOR_IN_MKDEV], [1],
+    [Define to 1 if `major', `minor', and `makedev' are declared in
+     <mkdev.h>.])])
+if test $ac_cv_header_sys_mkdev_h = no; then
+  AC_CHECK_HEADER([sys/sysmacros.h],
+    [AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
+      [Define to 1 if `major', `minor', and `makedev' are declared in
+       <sysmacros.h>.])])
+fi
+])
+
+])
diff --git a/m4/sys_wait_h.m4 b/m4/sys_wait_h.m4
index c0bba86..6532959 100644
--- a/m4/sys_wait_h.m4
+++ b/m4/sys_wait_h.m4
@@ -1,5 +1,5 @@
 # sys_wait_h.m4 serial 6
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2019 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/m4/threadlib.m4 b/m4/threadlib.m4
index cb93391..d22e0d6 100644
--- a/m4/threadlib.m4
+++ b/m4/threadlib.m4
@@ -1,11 +1,24 @@
-# threadlib.m4 serial 10 (gettext-0.18.2)
-dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
+# threadlib.m4 serial 22
+dnl Copyright (C) 2005-2019 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.60])
+
+dnl gl_PTHREADLIB
+dnl -------------
+dnl Tests for the libraries needs for using the POSIX threads API.
+dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile.
+dnl Sets the variable LIBPMULTITHREAD, for programs that really need
+dnl multithread functionality. The difference between LIBPTHREAD and
+dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically
+dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not.
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
 dnl gl_THREADLIB
 dnl ------------
 dnl Tests for a multithreading library to be used.
@@ -14,73 +27,30 @@
 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 Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS,
+dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS.
+dnl The choice --enable-threads=isoc+posix is available only on platforms that
+dnl have both the ISO C and the POSIX threads APIs. It has the effect of using
+dnl the ISO C API for most things and the POSIX API only for creating and
+dnl controlling threads (because there is no equivalent to pthread_atfork in
+dnl the ISO C API).
 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 symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not.
 dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
 dnl multithread-safe programs.
+dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the
+dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the
+dnl same value. Only system libraries are needed.
 
-AC_DEFUN([gl_THREADLIB_EARLY],
+AC_DEFUN([gl_ANYTHREADLIB_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>:
+  if test -z "$gl_anythreadlib_early_done"; then
     case "$host_os" in
       osf*)
         # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
@@ -99,6 +69,158 @@
       aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
       solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
     esac
+    gl_anythreadlib_early_done=done
+  fi
+])
+
+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.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  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=])])
+  m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=])
+  AC_ARG_ENABLE([threads],
+AC_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|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().
+         osf*) gl_use_threads=no ;;
+         dnl Disable multithreading by default on Cygwin 1.5.x, because it has
+         dnl bugs that lead to endless loops or crashes. See
+         dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
+         cygwin*)
+               case `uname -r` in
+                 1.[0-5].*) gl_use_threads=no ;;
+                 *)         gl_use_threads=yes ;;
+               esac
+               ;;
+         dnl Obey gl_AVOID_WINPTHREAD on mingw.
+         mingw*)
+               case "$gl_use_winpthreads_default" in
+                 yes) gl_use_threads=posix ;;
+                 no)  gl_use_threads=windows ;;
+                 *)   gl_use_threads=yes ;;
+               esac
+               ;;
+         *)    gl_use_threads=yes ;;
+       esac
+changequote([,])dnl
+     fi
+    ])
+  if test "$gl_use_threads" = yes \
+     || test "$gl_use_threads" = isoc \
+     || test "$gl_use_threads" = posix \
+     || test "$gl_use_threads" = isoc+posix; then
+    # For using <threads.h> or <pthread.h>:
+    gl_ANYTHREADLIB_EARLY
+  fi
+])
+
+dnl The guts of gl_PTHREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_PTHREADLIB_BODY],
+[
+  AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+  if test -z "$gl_threadlib_body_done"; then
+    gl_pthread_api=no
+    LIBPTHREAD=
+    LIBPMULTITHREAD=
+    # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+    # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+    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
+      # 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.
+      #
+      # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+      # needs -pthread for some reason.  See:
+      # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+      save_LIBS=$LIBS
+      for gl_pthread in '' '-pthread'; do
+        LIBS="$LIBS $gl_pthread"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <pthread.h>
+               pthread_mutex_t m;
+               pthread_mutexattr_t ma;
+             ]],
+             [[pthread_mutex_lock (&m);
+               pthread_mutexattr_init (&ma);]])],
+          [gl_pthread_api=yes
+           LIBPTHREAD=$gl_pthread
+           LIBPMULTITHREAD=$gl_pthread])
+        LIBS=$save_LIBS
+        test $gl_pthread_api = yes && break
+      done
+
+      # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+      # since it is defined as a macro on OSF/1.)
+      if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; 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],
+          [LIBPMULTITHREAD=-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.
+           # On Solaris 10 or newer, this test is no longer needed, because
+           # libc contains the fully functional pthread functions.
+           case "$host_os" in
+             solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+               AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+                 [Define if the pthread_in_use() detection is hard.])
+           esac
+          ])
+      elif test $gl_pthread_api != yes; then
+        # Some library is needed. Try libpthread and libc_r.
+        AC_CHECK_LIB([pthread], [pthread_kill],
+          [gl_pthread_api=yes
+           LIBPTHREAD=-lpthread
+           LIBPMULTITHREAD=-lpthread])
+        if test $gl_pthread_api != yes; then
+          # For FreeBSD 4.
+          AC_CHECK_LIB([c_r], [pthread_kill],
+            [gl_pthread_api=yes
+             LIBPTHREAD=-lc_r
+             LIBPMULTITHREAD=-lc_r])
+        fi
+      fi
+    fi
+    AC_MSG_CHECKING([whether POSIX threads API is available])
+    AC_MSG_RESULT([$gl_pthread_api])
+    AC_SUBST([LIBPTHREAD])
+    AC_SUBST([LIBPMULTITHREAD])
+    gl_threadlib_body_done=done
   fi
 ])
 
@@ -148,58 +270,48 @@
               [gl_cv_have_weak="guessing no"])
            ])
        fi
+       dnl But when linking statically, weak symbols don't work.
+       case " $LDFLAGS " in
+         *" -static "*) gl_cv_have_weak=no ;;
+       esac
       ])
-    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.
+    if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+      dnl If we use weak symbols to implement pthread_in_use / pth_in_use /
+      dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create
+      dnl facility is in use.
+      AC_CHECK_HEADERS_ONCE([threads.h])
+      :
+    fi
+    if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then
+      AC_CHECK_HEADERS_ONCE([threads.h])
+      if test $ac_cv_header_threads_h = yes; then
+        gl_have_isoc_threads=
+        # Test whether both mtx_lock and cnd_timedwait exist in libc.
         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
-            ])
+             [[#include <threads.h>
+               #include <stddef.h>
+               mtx_t m;
+               cnd_t c;
+             ]],
+             [[mtx_lock (&m);
+               cnd_timedwait (&c, &m, NULL);]])],
+          [gl_have_isoc_threads=yes])
+      fi
+    fi
+    if test "$gl_use_threads" = yes \
+       || test "$gl_use_threads" = posix \
+       || test "$gl_use_threads" = isoc+posix; then
+      gl_PTHREADLIB_BODY
+      LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD
+      LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD
+      if test $gl_pthread_api = yes; then
+        if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then
+          gl_threads_api='isoc+posix'
+          AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1],
+            [Define if the combination of the ISO C and POSIX multithreading APIs can be used.])
+          LIBTHREAD= LTLIBTHREAD=
         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.])
@@ -207,75 +319,20 @@
             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=
+              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
+    if test $gl_threads_api = none; then
+      if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then
+        gl_threads_api=isoc
+        AC_DEFINE([USE_ISOC_THREADS], [1],
+          [Define if the ISO C multithreading library can be used.])
       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
+    if test $gl_threads_api = none; then
       case "$gl_use_threads" in
         yes | windows | win32) # The 'win32' is for backward compatibility.
           if { case "$host_os" in
@@ -299,6 +356,12 @@
   AC_SUBST([LTLIBMULTITHREAD])
 ])
 
+AC_DEFUN([gl_PTHREADLIB],
+[
+  AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+  gl_PTHREADLIB_BODY
+])
+
 AC_DEFUN([gl_THREADLIB],
 [
   AC_REQUIRE([gl_THREADLIB_EARLY])
@@ -317,6 +380,18 @@
 ])
 
 
+dnl gl_AVOID_WINPTHREAD
+dnl -------------------
+dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the
+dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided.
+dnl The user can still override it at installation time, by using the
+dnl configure option '--enable-threads'.
+
+AC_DEFUN([gl_AVOID_WINPTHREAD], [
+  m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no])
+])
+
+
 dnl Survey of platforms:
 dnl
 dnl Platform           Available  Compiler    Supports   test-lock
@@ -326,6 +401,8 @@
 dnl
 dnl GNU Hurd/glibc     posix
 dnl
+dnl Ubuntu 14.04       posix      -pthread        Y      OK
+dnl
 dnl FreeBSD 5.3        posix      -lc_r           Y
 dnl                    posix      -lkse ?         Y
 dnl                    posix      -lpthread ?     Y
@@ -344,7 +421,6 @@
 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)
@@ -358,8 +434,6 @@
 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             --
diff --git a/m4/time_h.m4 b/m4/time_h.m4
index 6415bfb..f08f29b 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,8 +1,8 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2019 Free Software Foundation, Inc.
 
-# serial 7
+# serial 11
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -26,7 +26,7 @@
 ])
 
 dnl Check whether 'struct timespec' is declared
-dnl in time.h, sys/time.h, or pthread.h.
+dnl in time.h, sys/time.h, pthread.h, or unistd.h.
 
 AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
 [
@@ -44,6 +44,7 @@
   TIME_H_DEFINES_STRUCT_TIMESPEC=0
   SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
   PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+  UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
   if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
     TIME_H_DEFINES_STRUCT_TIMESPEC=1
   else
@@ -70,12 +71,26 @@
            [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
+      else
+        AC_CACHE_CHECK([for struct timespec in <unistd.h>],
+          [gl_cv_sys_struct_timespec_in_unistd_h],
+          [AC_COMPILE_IFELSE(
+             [AC_LANG_PROGRAM(
+                [[#include <unistd.h>
+                ]],
+                [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+             [gl_cv_sys_struct_timespec_in_unistd_h=yes],
+             [gl_cv_sys_struct_timespec_in_unistd_h=no])])
+        if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
+          UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
+        fi
       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_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
 ])
 
 AC_DEFUN([gl_TIME_MODULE_INDICATOR],
@@ -89,21 +104,41 @@
 
 AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
 [
+  GNULIB_CTIME=0;                        AC_SUBST([GNULIB_CTIME])
   GNULIB_MKTIME=0;                       AC_SUBST([GNULIB_MKTIME])
+  GNULIB_LOCALTIME=0;                    AC_SUBST([GNULIB_LOCALTIME])
   GNULIB_NANOSLEEP=0;                    AC_SUBST([GNULIB_NANOSLEEP])
+  GNULIB_STRFTIME=0;                     AC_SUBST([GNULIB_STRFTIME])
   GNULIB_STRPTIME=0;                     AC_SUBST([GNULIB_STRPTIME])
   GNULIB_TIMEGM=0;                       AC_SUBST([GNULIB_TIMEGM])
   GNULIB_TIME_R=0;                       AC_SUBST([GNULIB_TIME_R])
+  GNULIB_TIME_RZ=0;                      AC_SUBST([GNULIB_TIME_RZ])
+  GNULIB_TZSET=0;                        AC_SUBST([GNULIB_TZSET])
   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])
+  HAVE_TZSET=1;                          AC_SUBST([HAVE_TZSET])
+  dnl Even GNU libc does not have timezone_t yet.
+  HAVE_TIMEZONE_T=0;                     AC_SUBST([HAVE_TIMEZONE_T])
   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_CTIME=GNULIB_PORTCHECK;        AC_SUBST([REPLACE_CTIME])
   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_STRFTIME=GNULIB_PORTCHECK;     AC_SUBST([REPLACE_STRFTIME])
   REPLACE_TIMEGM=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_TIMEGM])
+  REPLACE_TZSET=GNULIB_PORTCHECK;        AC_SUBST([REPLACE_TZSET])
+
+  dnl Hack so that the time module doesn't depend on the sys_time module.
+  dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent.
+  : ${GNULIB_GETTIMEOFDAY=0};            AC_SUBST([GNULIB_GETTIMEOFDAY])
+  dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME
+  dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier
+  dnl is no longer a big deal.
+  REPLACE_GMTIME=0;                      AC_SUBST([REPLACE_GMTIME])
+  REPLACE_LOCALTIME=0;                   AC_SUBST([REPLACE_LOCALTIME])
 ])
diff --git a/m4/timespec.m4 b/m4/timespec.m4
new file mode 100644
index 0000000..3db9943
--- /dev/null
+++ b/m4/timespec.m4
@@ -0,0 +1,11 @@
+#serial 15
+
+# Copyright (C) 2000-2001, 2003-2007, 2009-2019 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
+
+AC_DEFUN([gl_TIMESPEC], [:])
diff --git a/m4/timevar.m4 b/m4/timevar.m4
deleted file mode 100644
index f8d3606..0000000
--- a/m4/timevar.m4
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- Autoconf -*-
-# Checks required to run `timevar', a time tracker.
-#
-# Copyright (C) 2002-2003, 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/>.
-
-# serial 2
-
-AC_DEFUN([BISON_PREREQ_TIMEVAR],
-[AC_CHECK_HEADERS([sys/time.h sys/times.h])
- AC_CHECK_HEADERS([sys/resource.h],,,
-   [$ac_includes_default
-#if HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-])
-AC_CHECK_FUNCS([times])
-
-AC_CHECK_DECLS([getrusage, times, clock, sysconf], [], [],
-[$ac_includes_default
-#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
-])
-
-AC_CHECK_TYPES([clock_t, struct tms], [], [],
-[$ac_includes_default
-#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
-])
-])
diff --git a/m4/tls.m4 b/m4/tls.m4
new file mode 100644
index 0000000..bfdc608
--- /dev/null
+++ b/m4/tls.m4
@@ -0,0 +1,12 @@
+# tls.m4 serial 2 (gettext-0.18)
+dnl Copyright (C) 2005, 2008-2019 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_TLS],
+[
+  AC_REQUIRE([gl_THREADLIB])
+])
diff --git a/m4/unistd-safer.m4 b/m4/unistd-safer.m4
index 62e295b..5e2a1be 100644
--- a/m4/unistd-safer.m4
+++ b/m4/unistd-safer.m4
@@ -1,5 +1,5 @@
 #serial 9
-dnl Copyright (C) 2002, 2005-2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2019 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/m4/unistd_h.m4 b/m4/unistd_h.m4
index f68fbff..18b7140 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,5 +1,5 @@
-# unistd_h.m4 serial 66
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# unistd_h.m4 serial 76
+dnl Copyright (C) 2006-2019 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.
@@ -37,17 +37,17 @@
 # include <fcntl.h>
 # include <stdio.h>
 # include <stdlib.h>
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# if 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
+    ]], [access chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir
+    fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize
+    getgroups gethostname getlogin getlogin_r getpagesize getpass
     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])
+    readlink readlinkat rmdir sethostname sleep symlink symlinkat
+    truncate ttyname_r unlink unlinkat usleep])
 ])
 
 AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
@@ -61,9 +61,11 @@
 
 AC_DEFUN([gl_UNISTD_H_DEFAULTS],
 [
+  GNULIB_ACCESS=0;               AC_SUBST([GNULIB_ACCESS])
   GNULIB_CHDIR=0;                AC_SUBST([GNULIB_CHDIR])
   GNULIB_CHOWN=0;                AC_SUBST([GNULIB_CHOWN])
   GNULIB_CLOSE=0;                AC_SUBST([GNULIB_CLOSE])
+  GNULIB_COPY_FILE_RANGE=0;      AC_SUBST([GNULIB_COPY_FILE_RANGE])
   GNULIB_DUP=0;                  AC_SUBST([GNULIB_DUP])
   GNULIB_DUP2=0;                 AC_SUBST([GNULIB_DUP2])
   GNULIB_DUP3=0;                 AC_SUBST([GNULIB_DUP3])
@@ -83,6 +85,7 @@
   GNULIB_GETLOGIN=0;             AC_SUBST([GNULIB_GETLOGIN])
   GNULIB_GETLOGIN_R=0;           AC_SUBST([GNULIB_GETLOGIN_R])
   GNULIB_GETPAGESIZE=0;          AC_SUBST([GNULIB_GETPAGESIZE])
+  GNULIB_GETPASS=0;              AC_SUBST([GNULIB_GETPASS])
   GNULIB_GETUSERSHELL=0;         AC_SUBST([GNULIB_GETUSERSHELL])
   GNULIB_GROUP_MEMBER=0;         AC_SUBST([GNULIB_GROUP_MEMBER])
   GNULIB_ISATTY=0;               AC_SUBST([GNULIB_ISATTY])
@@ -102,6 +105,7 @@
   GNULIB_SLEEP=0;                AC_SUBST([GNULIB_SLEEP])
   GNULIB_SYMLINK=0;              AC_SUBST([GNULIB_SYMLINK])
   GNULIB_SYMLINKAT=0;            AC_SUBST([GNULIB_SYMLINKAT])
+  GNULIB_TRUNCATE=0;             AC_SUBST([GNULIB_TRUNCATE])
   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])
@@ -111,6 +115,7 @@
   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_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
   HAVE_DUP2=1;            AC_SUBST([HAVE_DUP2])
   HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
   HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
@@ -125,6 +130,7 @@
   HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
   HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
   HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
+  HAVE_GETPASS=1;         AC_SUBST([HAVE_GETPASS])
   HAVE_GROUP_MEMBER=1;    AC_SUBST([HAVE_GROUP_MEMBER])
   HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
   HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
@@ -145,24 +151,30 @@
   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=1;   AC_SUBST([HAVE_DECL_GETLOGIN])
   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_TRUNCATE=1;   AC_SUBST([HAVE_DECL_TRUNCATE])
   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_ACCESS=0;       AC_SUBST([REPLACE_ACCESS])
   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_FACCESSAT=0;    AC_SUBST([REPLACE_FACCESSAT])
   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_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
   REPLACE_GETLOGIN_R=0;   AC_SUBST([REPLACE_GETLOGIN_R])
   REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
   REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
+  REPLACE_GETPASS=0;      AC_SUBST([REPLACE_GETPASS])
   REPLACE_ISATTY=0;       AC_SUBST([REPLACE_ISATTY])
   REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
   REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
@@ -172,9 +184,12 @@
   REPLACE_PWRITE=0;       AC_SUBST([REPLACE_PWRITE])
   REPLACE_READ=0;         AC_SUBST([REPLACE_READ])
   REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
+  REPLACE_READLINKAT=0;   AC_SUBST([REPLACE_READLINKAT])
   REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
   REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
   REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_SYMLINKAT=0;    AC_SUBST([REPLACE_SYMLINKAT])
+  REPLACE_TRUNCATE=0;     AC_SUBST([REPLACE_TRUNCATE])
   REPLACE_TTYNAME_R=0;    AC_SUBST([REPLACE_TTYNAME_R])
   REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
   REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
diff --git a/m4/unlink.m4 b/m4/unlink.m4
new file mode 100644
index 0000000..fec63c1
--- /dev/null
+++ b/m4/unlink.m4
@@ -0,0 +1,134 @@
+# unlink.m4 serial 14
+dnl Copyright (C) 2009-2019 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_UNLINK],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+
+  dnl Detect FreeBSD 7.2, AIX 7.1, Solaris 9 bug.
+  AC_CACHE_CHECK([whether unlink honors trailing slashes],
+    [gl_cv_func_unlink_honors_slashes],
+    [touch conftest.file
+     # Assume that if we have lstat, we can also check symlinks.
+     if test $ac_cv_func_lstat = yes; then
+       ln -s conftest.file conftest.lnk
+     fi
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[#if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           #endif
+           #include <errno.h>
+         ]],
+         [[int result = 0;
+           if (!unlink ("conftest.file/"))
+             result |= 1;
+           else if (errno != ENOTDIR)
+             result |= 2;
+#if HAVE_LSTAT
+           if (!unlink ("conftest.lnk/"))
+             result |= 4;
+           else if (errno != ENOTDIR)
+             result |= 8;
+#endif
+           return result;
+         ]])],
+      [gl_cv_func_unlink_honors_slashes=yes],
+      [gl_cv_func_unlink_honors_slashes=no],
+      [case "$host_os" in
+                          # Guess yes on Linux systems.
+         linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+                          # Guess yes on glibc systems.
+         *-gnu*)          gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+                          # Guess no on native Windows.
+         mingw*)          gl_cv_func_unlink_honors_slashes="guessing no" ;;
+                          # If we don't know, obey --enable-cross-guesses.
+         *)               gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;;
+       esac
+      ])
+     rm -f conftest.file conftest.lnk])
+  case "$gl_cv_func_unlink_honors_slashes" in
+    *no)
+      REPLACE_UNLINK=1
+      ;;
+  esac
+
+  dnl Detect Mac OS X 10.5.6 bug: On read-write HFS mounts, unlink("..") or
+  dnl unlink("../..") succeeds without doing anything.
+  AC_CACHE_CHECK([whether unlink of a parent directory fails as it should],
+    [gl_cv_func_unlink_parent_fails],
+    [case "$host_os" in
+       darwin*)
+         dnl Try to unlink a subdirectory of /tmp, because /tmp is usually on a
+         dnl HFS mount on Mac OS X. Use a subdirectory, owned by the current
+         dnl user, because otherwise unlink() may fail due to permissions
+         dnl reasons, and because when running as root we don't want to risk
+         dnl destroying the entire /tmp.
+         if {
+              # Use the mktemp program if available. If not available, hide the error
+              # message.
+              tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&
+              test -n "$tmp" && test -d "$tmp"
+            } ||
+            {
+              # Use a simple mkdir command. It is guaranteed to fail if the directory
+              # already exists.  $RANDOM is bash specific and expands to empty in shells
+              # other than bash, ksh and zsh.  Its use does not increase security;
+              # rather, it minimizes the probability of failure in a very cluttered /tmp
+              # directory.
+              tmp=/tmp/gt$$-$RANDOM
+              (umask 077 && mkdir "$tmp")
+            }; then
+           mkdir "$tmp/subdir"
+           GL_SUBDIR_FOR_UNLINK="$tmp/subdir"
+           export GL_SUBDIR_FOR_UNLINK
+           AC_RUN_IFELSE(
+             [AC_LANG_SOURCE([[
+                #include <stdlib.h>
+                #if HAVE_UNISTD_H
+                # include <unistd.h>
+                #else /* on Windows with MSVC */
+                # include <direct.h>
+                # include <io.h>
+                #endif
+                int main ()
+                {
+                  int result = 0;
+                  if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0)
+                    result |= 1;
+                  else if (unlink ("..") == 0)
+                    result |= 2;
+                  return result;
+                }
+              ]])],
+             [gl_cv_func_unlink_parent_fails=yes],
+             [gl_cv_func_unlink_parent_fails=no],
+             [# If we don't know, obey --enable-cross-guesses.
+              gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal"
+             ])
+           unset GL_SUBDIR_FOR_UNLINK
+           rm -rf "$tmp"
+         else
+           gl_cv_func_unlink_parent_fails="guessing no"
+         fi
+         ;;
+       *)
+         gl_cv_func_unlink_parent_fails="guessing yes"
+         ;;
+     esac
+    ])
+  case "$gl_cv_func_unlink_parent_fails" in
+    *no)
+      REPLACE_UNLINK=1
+      AC_DEFINE([UNLINK_PARENT_BUG], [1],
+        [Define to 1 if unlink() on a parent directory may succeed])
+      ;;
+  esac
+])
diff --git a/m4/unlocked-io.m4 b/m4/unlocked-io.m4
index c44adae..ea55a1a 100644
--- a/m4/unlocked-io.m4
+++ b/m4/unlocked-io.m4
@@ -1,6 +1,6 @@
 # unlocked-io.m4 serial 15
 
-# Copyright (C) 1998-2006, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 1998-2006, 2009-2019 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
diff --git a/m4/vasnprintf.m4 b/m4/vasnprintf.m4
index 00308c4..b763a3d 100644
--- a/m4/vasnprintf.m4
+++ b/m4/vasnprintf.m4
@@ -1,5 +1,5 @@
 # vasnprintf.m4 serial 36
-dnl Copyright (C) 2002-2004, 2006-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006-2019 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/m4/vasprintf-posix.m4 b/m4/vasprintf-posix.m4
new file mode 100644
index 0000000..3b8de2a
--- /dev/null
+++ b/m4/vasprintf-posix.m4
@@ -0,0 +1,101 @@
+# vasprintf-posix.m4 serial 13
+dnl Copyright (C) 2007-2019 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_VASPRINTF_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_vasprintf_posix=no
+  AC_CHECK_FUNCS([vasprintf])
+  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)
+                                                          if test $ac_cv_func_vasprintf = yes; then
+                                                            # vasprintf exists and is
+                                                            # already POSIX compliant.
+                                                            gl_cv_func_vasprintf_posix=yes
+                                                          fi
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_vasprintf_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_VASPRINTF
+  fi
+])
diff --git a/m4/vasprintf.m4 b/m4/vasprintf.m4
new file mode 100644
index 0000000..cd96229
--- /dev/null
+++ b/m4/vasprintf.m4
@@ -0,0 +1,46 @@
+# vasprintf.m4 serial 6
+dnl Copyright (C) 2002-2003, 2006-2007, 2009-2019 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_VASPRINTF],
+[
+  AC_CHECK_FUNCS([vasprintf])
+  if test $ac_cv_func_vasprintf = no; then
+    gl_REPLACE_VASPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VASPRINTF],
+[
+  AC_LIBOBJ([vasprintf])
+  AC_LIBOBJ([asprintf])
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  if test $ac_cv_func_vasprintf = yes; then
+    REPLACE_VASPRINTF=1
+  else
+    HAVE_VASPRINTF=0
+  fi
+  gl_PREREQ_VASPRINTF_H
+  gl_PREREQ_VASPRINTF
+  gl_PREREQ_ASPRINTF
+])
+
+# Prerequisites of the vasprintf portion of lib/stdio.h.
+AC_DEFUN([gl_PREREQ_VASPRINTF_H],
+[
+  dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
+
+# Prerequisites of lib/vasprintf.c.
+AC_DEFUN([gl_PREREQ_VASPRINTF],
+[
+])
+
+# Prerequisites of lib/asprintf.c.
+AC_DEFUN([gl_PREREQ_ASPRINTF],
+[
+])
diff --git a/m4/vfprintf-posix.m4 b/m4/vfprintf-posix.m4
index 441bd57..94d1621 100644
--- a/m4/vfprintf-posix.m4
+++ b/m4/vfprintf-posix.m4
@@ -1,5 +1,5 @@
 # vfprintf-posix.m4 serial 14
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/vsnprintf-posix.m4 b/m4/vsnprintf-posix.m4
index 3e99e5a..f5a15be 100644
--- a/m4/vsnprintf-posix.m4
+++ b/m4/vsnprintf-posix.m4
@@ -1,5 +1,5 @@
 # vsnprintf-posix.m4 serial 15
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/vsnprintf.m4 b/m4/vsnprintf.m4
index 22ec57b..739c904 100644
--- a/m4/vsnprintf.m4
+++ b/m4/vsnprintf.m4
@@ -1,5 +1,5 @@
-# vsnprintf.m4 serial 6
-dnl Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+# vsnprintf.m4 serial 7
+dnl Copyright (C) 2002-2004, 2007-2019 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.
@@ -46,6 +46,14 @@
   AC_LIBOBJ([vsnprintf])
   if test $ac_cv_func_vsnprintf = yes; then
     REPLACE_VSNPRINTF=1
+  else
+    AC_CHECK_DECLS_ONCE([vsnprintf])
+    if test $ac_cv_have_decl_vsnprintf = yes; then
+      dnl If the function is declared but does not appear to exist, it may be
+      dnl defined as an inline function. In order to avoid a conflict, we have
+      dnl to define rpl_vsnprintf, not vsnprintf.
+      REPLACE_VSNPRINTF=1
+    fi
   fi
   gl_PREREQ_VSNPRINTF
 ])
diff --git a/m4/vsprintf-posix.m4 b/m4/vsprintf-posix.m4
index a6a8692..7545ab7 100644
--- a/m4/vsprintf-posix.m4
+++ b/m4/vsprintf-posix.m4
@@ -1,5 +1,5 @@
 # vsprintf-posix.m4 serial 12
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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/m4/wait-process.m4 b/m4/wait-process.m4
index 24524b0..8d579eb 100644
--- a/m4/wait-process.m4
+++ b/m4/wait-process.m4
@@ -1,5 +1,5 @@
 # wait-process.m4 serial 6
-dnl Copyright (C) 2003, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2008-2019 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/m4/waitpid.m4 b/m4/waitpid.m4
index 42a83bb..ead350c 100644
--- a/m4/waitpid.m4
+++ b/m4/waitpid.m4
@@ -1,5 +1,5 @@
 # waitpid.m4 serial 2
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2010-2019 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/m4/warn-on-use.m4 b/m4/warn-on-use.m4
index a77802e..7ebe2d3 100644
--- a/m4/warn-on-use.m4
+++ b/m4/warn-on-use.m4
@@ -1,11 +1,13 @@
-# warn-on-use.m4 serial 5
-dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+# warn-on-use.m4 serial 6
+dnl Copyright (C) 2010-2019 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)
 # ---------------------------------------
+# If the module 'posixcheck' is in use:
+#
 # 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.
@@ -23,25 +25,27 @@
 # 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
+  m4_ifdef([gl_POSIXCHECK],
+    [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],
+     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
+           [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/warnings.m4 b/m4/warnings.m4
index 28b8294..235cac6 100644
--- a/m4/warnings.m4
+++ b/m4/warnings.m4
@@ -1,5 +1,5 @@
-# warnings.m4 serial 7
-dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+# warnings.m4 serial 14
+dnl Copyright (C) 2008-2019 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.
@@ -20,40 +20,94 @@
 # -----------------------------------------------------------------
 # 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.
+# The effects of this macro depend on the current language (_AC_LANG).
 AC_DEFUN([gl_COMPILER_OPTION_IF],
-[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
+[
+dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf
+dnl 2.64 or newer.
+AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
 AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
+AS_LITERAL_IF([$1],
+  [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
+  [gl_positive="$1"
+case $gl_positive in
+  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+m4_pushdef([gl_Positive], [$gl_positive])])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_AS_VAR_APPEND(m4_defn([gl_Flags]),
+    [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
+  AC_LINK_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])
+m4_popdef([gl_Positive])dnl
 AS_VAR_POPDEF([gl_Flags])dnl
 AS_VAR_POPDEF([gl_Warn])dnl
 ])
 
+# gl_UNKNOWN_WARNINGS_ARE_ERRORS
+# ------------------------------
+# Clang doesn't complain about unknown warning options unless one also
+# specifies -Wunknown-warning-option -Werror.  Detect this.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
 
-# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS],
+# Specialization for _AC_LANG = C. This macro can be AC_REQUIREd.
+# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
+m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)],
+[
+  AC_LANG_PUSH([C])
+  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+  AC_LANG_POP([C])
+])
+
+# Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd.
+# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
+m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)],
+[
+  AC_LANG_PUSH([C++])
+  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+  AC_LANG_POP([C++])
+])
+
+# Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd.
+# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
+m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)],
+[
+  AC_LANG_PUSH([Objective C])
+  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+  AC_LANG_POP([Objective C])
+])
+
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL],
+[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
+   [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
+   [gl_unknown_warnings_are_errors=])])
+
+# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS],
 #             [PROGRAM = AC_LANG_PROGRAM()])
-# ---------------------------------------------
-# Adds parameter to WARN_CFLAGS if the compiler supports it when
-# compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
+# -----------------------------------------------------------
+# Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it
+# when compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
 #
 # If VARIABLE is a variable name, AC_SUBST it.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
 AC_DEFUN([gl_WARN_ADD],
-[gl_COMPILER_OPTION_IF([$1],
-  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])],
+[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)])
+gl_COMPILER_OPTION_IF([$1],
+  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])],
   [],
   [$3])
 m4_ifval([$2],
          [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
-         [AC_SUBST([WARN_CFLAGS])])dnl
+         [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl
 ])
 
 # Local Variables:
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
index c7a8b2d..8c6ebcc 100644
--- a/m4/wchar_h.m4
+++ b/m4/wchar_h.m4
@@ -1,13 +1,13 @@
 dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
 
-dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2019 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
+# wchar_h.m4 serial 44
 
 AC_DEFUN([gl_WCHAR_H],
 [
@@ -35,6 +35,8 @@
   fi
   AC_SUBST([HAVE_WINT_T])
 
+  AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
   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([[
@@ -53,7 +55,7 @@
      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
+     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime
     ])
 ])
 
@@ -61,8 +63,8 @@
 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 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <https://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],
@@ -81,8 +83,15 @@
 extern int zero (void);
 int main () { return zero(); }
 ]])])
-     if AC_TRY_EVAL([ac_compile]); then
-       mv conftest.$ac_objext conftest1.$ac_objext
+     dnl Do not rename the object file from conftest.$ac_objext to
+     dnl conftest1.$ac_objext, as this will cause the link to fail on
+     dnl z/OS when using the XPLINK object format (due to duplicate
+     dnl CSECT names). Instead, temporarily redefine $ac_compile so
+     dnl that the object file has the latter name from the start.
+     save_ac_compile="$ac_compile"
+     ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+     if echo '#include "conftest.c"' >conftest1.c &&
+        AC_TRY_EVAL([ac_compile]); then
        AC_LANG_CONFTEST([
          AC_LANG_SOURCE([[#define wcstod renamed_wcstod
 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
@@ -95,8 +104,10 @@
 #include <wchar.h>
 int zero (void) { return 0; }
 ]])])
-       if AC_TRY_EVAL([ac_compile]); then
-         mv conftest.$ac_objext conftest2.$ac_objext
+       dnl See note above about renaming object files.
+       ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+       if echo '#include "conftest.c"' >conftest2.c &&
+          AC_TRY_EVAL([ac_compile]); then
          if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
            :
          else
@@ -104,7 +115,8 @@
          fi
        fi
      fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+     ac_compile="$save_ac_compile"
+     rm -f conftest[12].c conftest[12].$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).
@@ -112,7 +124,7 @@
 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
+    <https://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.])
@@ -169,6 +181,7 @@
   GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
   GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
   GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
+  GNULIB_WCSFTIME=0;    AC_SUBST([GNULIB_WCSFTIME])
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
   HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
@@ -207,6 +220,7 @@
   HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
   HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
   HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
+  HAVE_WCSFTIME=1;      AC_SUBST([HAVE_WCSFTIME])
   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])
@@ -222,4 +236,6 @@
   REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
   REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
   REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
+  REPLACE_WCSFTIME=0;   AC_SUBST([REPLACE_WCSFTIME])
+  REPLACE_WCSTOK=0;     AC_SUBST([REPLACE_WCSTOK])
 ])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
index 534735d..5db5815 100644
--- a/m4/wchar_t.m4
+++ b/m4/wchar_t.m4
@@ -1,5 +1,5 @@
 # wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2019 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/m4/wctype_h.m4 b/m4/wctype_h.m4
index 885e6fc..d5acb72 100644
--- a/m4/wctype_h.m4
+++ b/m4/wctype_h.m4
@@ -1,8 +1,8 @@
-# wctype_h.m4 serial 18
+# wctype_h.m4 serial 22
 
 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
 
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2019 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.
@@ -30,6 +30,8 @@
   fi
   AC_SUBST([HAVE_WINT_T])
 
+  AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
   gl_CHECK_NEXT_HEADERS([wctype.h])
   if test $ac_cv_header_wctype_h = yes; then
     if test $ac_cv_func_iswcntrl = yes; then
@@ -51,7 +53,8 @@
                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>
+            [dnl Guess no on Linux libc5, yes otherwise.
+             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
                           #if __GNU_LIBRARY__ == 1
                           Linux libc5 i18n is broken.
                           #endif]], [])],
@@ -66,10 +69,14 @@
   fi
   AC_SUBST([HAVE_WCTYPE_H])
 
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
+  if test $GNULIB_OVERRIDES_WINT_T = 1; then
+    REPLACE_ISWCNTRL=1
+  else
+    case "$gl_cv_func_iswcntrl_works" in
+      *yes) REPLACE_ISWCNTRL=0 ;;
+      *)    REPLACE_ISWCNTRL=1 ;;
+    esac
+  fi
   AC_SUBST([REPLACE_ISWCNTRL])
 
   if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4
index 5f40bcc..cb5935a 100644
--- a/m4/wcwidth.m4
+++ b/m4/wcwidth.m4
@@ -1,5 +1,5 @@
-# wcwidth.m4 serial 23
-dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# wcwidth.m4 serial 30
+dnl Copyright (C) 2006-2019 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.
@@ -34,12 +34,28 @@
     HAVE_DECL_WCWIDTH=0
   fi
 
-  if test $ac_cv_func_wcwidth = yes; then
+  if test $ac_cv_func_wcwidth != yes; then
+    AC_CACHE_CHECK([whether wcwidth is a macro],
+      [gl_cv_func_wcwidth_macro],
+      [AC_EGREP_CPP([wchar_header_defines_wcwidth], [
+#include <wchar.h>
+#ifdef wcwidth
+ wchar_header_defines_wcwidth
+#endif],
+         [gl_cv_func_wcwidth_macro=yes],
+         [gl_cv_func_wcwidth_macro=no])
+      ])
+  fi
+
+  if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = 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 On OpenBSD 5.8, wcwidth(0xFF1A) (FULLWIDTH COLON) returns 0.
     dnl This leads to bugs in 'ls' (coreutils).
+    dnl On Solaris 11.4, wcwidth(0x2202) (PARTIAL DIFFERENTIAL) returns 2,
+    dnl even in Western locales.
     AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
       [gl_cv_func_wcwidth_works],
       [
@@ -66,7 +82,7 @@
 int main ()
 {
   int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+  if (setlocale (LC_ALL, "en_US.UTF-8") != NULL)
     {
       if (wcwidth (0x0301) > 0)
         result |= 1;
@@ -74,6 +90,10 @@
         result |= 2;
       if (wcwidth (0x200B) > 0)
         result |= 4;
+      if (wcwidth (0xFF1A) == 0)
+        result |= 8;
+      if (wcwidth (0x2202) > 1)
+        result |= 16;
     }
   return result;
 }]])],
@@ -82,9 +102,13 @@
           [
 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";;
+                            # Guess yes on glibc systems.
+             *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";;
+                            # Guess yes on musl systems.
+             *-musl*)       gl_cv_func_wcwidth_works="guessing yes";;
+                            # Guess yes on AIX 7 systems.
+             aix[7-9]*)     gl_cv_func_wcwidth_works="guessing yes";;
+             *)             gl_cv_func_wcwidth_works="$gl_cross_guess_normal";;
            esac
 changequote([,])dnl
           ])
@@ -99,3 +123,9 @@
   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.
 ])
+
+# Prerequisites of lib/wcwidth.c.
+AC_DEFUN([gl_PREREQ_WCWIDTH], [
+  AC_REQUIRE([AC_C_INLINE])
+  :
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
index 3260cce..61e8a23 100644
--- a/m4/wint_t.m4
+++ b/m4/wint_t.m4
@@ -1,11 +1,12 @@
-# wint_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+# wint_t.m4 serial 7
+dnl Copyright (C) 2003, 2007-2019 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 Test whether <wchar.h> has the 'wint_t' type and whether gnulib's
+dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'.
 dnl Prerequisite: AC_PROG_CC
 
 AC_DEFUN([gt_TYPE_WINT_T],
@@ -28,5 +29,46 @@
        [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.])
+
+    dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present,
+    dnl override 'wint_t'.
+    AC_CACHE_CHECK([whether wint_t is too small],
+      [gl_cv_type_wint_t_too_small],
+      [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>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+              int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+              ]])],
+           [gl_cv_type_wint_t_too_small=no],
+           [gl_cv_type_wint_t_too_small=yes])])
+    if test $gl_cv_type_wint_t_too_small = yes; then
+      GNULIB_OVERRIDES_WINT_T=1
+    else
+      GNULIB_OVERRIDES_WINT_T=0
+    fi
+  else
+    GNULIB_OVERRIDES_WINT_T=0
   fi
+  AC_SUBST([GNULIB_OVERRIDES_WINT_T])
+])
+
+dnl Prerequisites of the 'wint_t' override.
+AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
+[
+  AC_CHECK_HEADERS_ONCE([crtdefs.h])
+  if test $ac_cv_header_crtdefs_h = yes; then
+    HAVE_CRTDEFS_H=1
+  else
+    HAVE_CRTDEFS_H=0
+  fi
+  AC_SUBST([HAVE_CRTDEFS_H])
 ])
diff --git a/m4/xalloc.m4 b/m4/xalloc.m4
index 6c2d5d0..dfff943 100644
--- a/m4/xalloc.m4
+++ b/m4/xalloc.m4
@@ -1,5 +1,5 @@
 # xalloc.m4 serial 18
-dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2019 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/m4/xsize.m4 b/m4/xsize.m4
index d85a5f1..f2898ba 100644
--- a/m4/xsize.m4
+++ b/m4/xsize.m4
@@ -1,5 +1,5 @@
 # xsize.m4 serial 5
-dnl Copyright (C) 2003-2004, 2008-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2004, 2008-2019 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/m4/xstrndup.m4 b/m4/xstrndup.m4
index 1642ca5..32dc51b 100644
--- a/m4/xstrndup.m4
+++ b/m4/xstrndup.m4
@@ -1,5 +1,5 @@
 # xstrndup.m4 serial 2
-dnl Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2019 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
index 93c2508..b4c2762 100644
--- a/maint.mk
+++ b/maint.mk
@@ -2,7 +2,7 @@
 # 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.
+## Copyright (C) 2001-2019 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
@@ -15,18 +15,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, see <http://www.gnu.org/licenses/>.
+## along with this program.  If not, see <https://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
+# These variables ought to be defined through the configure.ac section
+# of the module description. But some packages import this file directly,
+# ignoring the module description.
+AWK ?= awk
+GREP ?= grep
+SED ?= sed
 
 # Helper variables.
 _empty =
@@ -53,7 +53,7 @@
 # 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 \
+  $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \
     && printf %s --rsyncable)
 GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
 
@@ -62,6 +62,10 @@
 
 VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir)
 
+# You can override this variable in cfg.mk if your gnulib submodule lives
+# in a different location.
+gnulib_dir ?= $(srcdir)/gnulib
+
 # You can override this variable in cfg.mk to set your own regexp
 # matching files to ignore.
 VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$
@@ -76,7 +80,7 @@
 ifeq ($(srcdir),.)
   _prepend_srcdir_prefix =
 else
-  _prepend_srcdir_prefix = | sed 's|^|$(srcdir)/|'
+  _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|'
 endif
 
 # In order to be able to consistently filter "."-relative names,
@@ -85,10 +89,10 @@
 _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))' \
+  $(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)
@@ -133,8 +137,8 @@
 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))
+                     https://ftpmirror.gnu.org/$(PACKAGE),		\
+                     https://$(gnu_rel_host)/gnu/$(PACKAGE))
 
 # Override this in cfg.mk if you are using a different format in your
 # NEWS file.
@@ -155,11 +159,12 @@
 ## Sanity checks.  ##
 ## --------------- ##
 
+ifneq ($(_gl-Makefile),)
 _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)))
+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)
@@ -186,7 +191,7 @@
 	@end=$$(date +%s.%N);						\
 	start=$$(cat .sc-start-$*);					\
 	rm -f .sc-start-$*;						\
-	awk -v s=$$start -v e=$$end					\
+	$(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
@@ -196,6 +201,7 @@
     $(filter-out $(local-checks-to-skip), $(local-checks-available)))
 
 syntax-check: $(local-check)
+endif
 
 # _sc_search_regexp
 #
@@ -293,42 +299,56 @@
 									\
    : Filter by file name;						\
    if test -n "$$in_files"; then					\
-     files=$$(find $(srcdir) | grep -E "$$in_files"			\
-              | grep -Ev '$(_sc_excl)');				\
+     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");		\
+       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); } || :;	\
+   test -n "$$files"							\
+     && test -n "$$containing"						\
+     && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); }	\
+     || :;								\
+   test -n "$$files"							\
+     && test -n "$$non_containing"					\
+     && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \
+     || :;								\
 									\
    : 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) } || :;			\
+       echo "$$files"							\
+         | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE	\
+		"$$prohibit" /dev/null					\
+         | $(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) } || :;			\
+       echo "$$files"							\
+         | xargs							\
+             $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \
+         | $(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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | $(GREP) -v useless-if-before-free				\
+	  | xargs							\
+	      $(srcdir)/$(_build-aux)/useless-if-before-free		\
+	      $(useless_free_options)					\
+	  && { printf '$(ME): found useless "if"'			\
+		      ' before "free" above\n' 1>&2;			\
+	       exit 1; }						\
+	  || :
 
 sc_cast_of_argument_to_free:
 	@prohibit='\<free *\( *\(' halt="don't cast free argument"	\
@@ -389,6 +409,43 @@
 	halt='use EXIT_* values rather than magic number'		\
 	  $(_sc_search_regexp)
 
+# Check that we don't use $< in non-implicit Makefile rules.
+#
+# To find the Makefiles, trace AC_CONFIG_FILES.  Using VC_LIST would
+# miss the Makefiles that are not under VC control (e.g., symlinks
+# installed for gettext).  "Parsing" (recursive) uses of SUBDIRS seems
+# too delicate.
+#
+# Use GNU Make's --print-data-base to normalize the rules into some
+# easy to parse format: they are separated by two \n.  Look for the
+# "section" about non-pattern rules (marked with "# Files") inside
+# which there are still the POSIX Make like implicit rules (".c.o").
+sc_prohibit_gnu_make_extensions_awk_ =					\
+  BEGIN {								\
+      RS = "\n\n";							\
+      in_rules = 0;							\
+  }									\
+  /^\# Files/ {								\
+      in_rules = 1;							\
+  }									\
+  /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ {		\
+      print "Error: " file ": $$< in a non implicit rule\n" $$0;	\
+      status = 1;							\
+  }									\
+  END {									\
+     exit status;							\
+  }
+sc_prohibit_gnu_make_extensions:
+	@if $(AWK) --version | grep GNU >/dev/null 2>&1; then		\
+	  (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') |	\
+	    tr ' ' '\n' |						\
+	    $(SED) -ne '/Makefile/{s/\.in$$//;p;}' |			\
+	    while read m; do						\
+	      $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null |		\
+	        $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1;		\
+	    done;							\
+	fi
+
 # 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:
@@ -400,28 +457,35 @@
 # "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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null		\
+	  | $(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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null		\
+	  | $(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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null		\
+	  | $(GREP) -E '[^."]\."'					\
+	  && { echo '$(ME): found error message ending in period' 1>&2;	\
+	       exit 1; }						\
+	  || :
 
 sc_file_system:
 	@prohibit=file''system						\
+	exclude='/proc/filesystems'					\
 	ignore_case=1							\
 	halt='found use of "file''system"; spell it "file system"'	\
 	  $(_sc_search_regexp)
@@ -442,17 +506,26 @@
 	halt='the above files do not include <config.h>'		\
 	  $(_sc_search_regexp)
 
+# Print each file name for which the first #include does not match
+# $(config_h_header).  Like grep -m 1, this only looks at the first match.
+perl_config_h_first_ =							\
+  -e 'BEGIN {$$ret = 0}'						\
+  -e 'if (/^\# *include\b/) {'						\
+  -e '  if (not m{^\# *include $(config_h_header)}) {'			\
+  -e '    print "$$ARGV\n";'						\
+  -e '    $$ret = 1;'							\
+  -e '  }'								\
+  -e '  \# Move on to next file after first include'			\
+  -e '  close ARGV;'							\
+  -e '}'								\
+  -e 'END {exit $$ret}'
+
 # 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 &&						\
+	@if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then	\
+	  files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') &&		\
+	  perl -n $(perl_config_h_first_) $$files ||			\
 	    { echo '$(ME): the above files include some other header'	\
 		'before <config.h>' 1>&2; exit 1; } || :;		\
 	else :;								\
@@ -468,11 +541,11 @@
 # 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 . &&					\
+  h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`;			\
+  if $(VC_LIST_EXCEPT) | $(GREP) '\.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 :;								\
@@ -502,7 +575,7 @@
 
 # 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 *\(' \
+	@h='long-options.h' re='\<parse_(long_options|gnu_standard_options_only) *\(' \
 	  $(_sc_header_without_use)
 
 # Don't include this header unless you use one of its functions.
@@ -563,7 +636,7 @@
 	@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)
+	@h='same.h' re='\<same_name(at)? *\(' $(_sc_header_without_use)
 
 sc_prohibit_hash_pjw_without_use:
 	@h='hash-pjw.h' \
@@ -576,7 +649,7 @@
 
 sc_prohibit_argmatch_without_use:
 	@h='argmatch.h' \
-	re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \
+	re='(\<(ARGMATCH_DEFINE_GROUP|ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \
 	  $(_sc_header_without_use)
 
 sc_prohibit_canonicalize_without_use:
@@ -591,7 +664,7 @@
 
 sc_prohibit_openat_without_use:
 	@h='openat.h' \
-	re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat)\>' \
+	re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \
 	  $(_sc_header_without_use)
 
 # Prohibit the inclusion of c-ctype.h without an actual use.
@@ -653,18 +726,14 @@
 	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
+# Extract the raw list of symbol names with this:
+gl_extract_define_simple = \
+  /^\# *define ([A-Z]\w+)\(/ and print $$1
+# Filter out duplicates and convert to a space-separated list:
+_intprops_names = \
+  $(shell f=$(gnulib_dir)/lib/intprops.h;				\
+    perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ')
+# Remove trailing space and convert to a regular expression:
 _intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names)))
 # Prohibit the inclusion of intprops.h without an actual use.
 sc_prohibit_intprops_without_use:
@@ -692,7 +761,7 @@
 # Prohibit the inclusion of verify.h without an actual use.
 sc_prohibit_verify_without_use:
 	@h='verify.h'							\
-	re='\<(verify(true|expr)?|static_assert) *\('			\
+	re='\<(verify(true|expr)?|assume|static_assert) *\('		\
 	  $(_sc_header_without_use)
 
 # Don't include xfreopen.h unless you use one of its functions.
@@ -714,15 +783,6 @@
 	  $(_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 *\('					\
@@ -739,9 +799,9 @@
 sc_require_test_exit_idiom:
 	@if test -f $(srcdir)/$(Exit_witness_file); then		\
 	  die=0;							\
-	  for i in $$(grep -l -F 'srcdir/$(Exit_base)'			\
+	  for i in $$($(GREP) -l -F 'srcdir/$(Exit_base)'		\
 		$$($(VC_LIST) tests)); do				\
-	    tail -n1 $$i | grep '^Exit .' > /dev/null			\
+	    tail -n1 $$i | $(GREP) '^Exit .' > /dev/null		\
 	      && : || { die=1; echo $$i; }				\
 	  done;								\
 	  test $$die = 1 &&						\
@@ -789,7 +849,7 @@
 # #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'
+  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
@@ -809,7 +869,7 @@
 	  $(_sc_search_regexp)
 
 sc_prohibit_defined_have_decl_tests:
-	@prohibit='#[	 ]*if(n?def|.*\<defined)\>[	 (]+HAVE_DECL_'	\
+	@prohibit='(#[	 ]*ifn?def|\<defined)\>[	 (]+HAVE_DECL_'	\
 	halt='HAVE_DECL macros are always defined'			\
 	  $(_sc_search_regexp)
 
@@ -840,24 +900,29 @@
 	      && perl -lne '$(gl_extract_significant_defines_)' $$f;	\
 	  done;								\
 	) | sort -u							\
-	  | sed 's/^/^ *# *(define|undef)  */;s/$$/\\>/'
+	  | $(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);; *)	\
+	  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; } || :;				\
+	  regex=$$($(def_sym_regex)); export regex;			\
+	  $(VC_LIST_EXCEPT)						\
+	    | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"'	\
+		dummy /dev/null						\
+	    && { printf '$(ME): define the above'			\
+			' via some gnulib .h file\n' 1>&2;		\
+	         exit 1; }						\
+	    || :;							\
 	fi
 # ==================================================================
 
 # Prohibit checked in backup files.
 sc_prohibit_backup_files:
-	@$(VC_LIST) | grep '~$$' &&				\
+	@$(VC_LIST) | $(GREP) '~$$' &&					\
 	  { echo '$(ME): found version controlled backup file' 1>&2;	\
 	    exit 1; } || :
 
@@ -876,7 +941,7 @@
 	  $(_sc_search_regexp)
 
 # Don't use Texinfo's @acronym{}.
-# http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html
+# https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html
 texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$
 sc_texinfo_acronym:
 	@prohibit='@acronym\{'						\
@@ -931,9 +996,11 @@
     }									\
   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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs perl -le '$(require_exactly_one_NL_at_EOF_)'		\
+	  || { 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
@@ -959,8 +1026,13 @@
     -e '    print "$$ARGV:$$n:$$v\n";'					\
     -e '  }'
 
+prohibit_doubled_words_ = \
+    the then in an on if is it but for or at and do to
+# expand the regex before running the check to avoid using expensive captures
+prohibit_doubled_word_expanded_ = \
+    $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_)))
 prohibit_doubled_word_RE_ ?= \
-  /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims
+    /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims
 prohibit_doubled_word_ =						\
     -e 'while ($(prohibit_doubled_word_RE_))'				\
     $(perl_filename_lineno_text_)
@@ -971,9 +1043,12 @@
 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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs perl -n -0777 $(prohibit_doubled_word_)		\
+	  | $(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
@@ -983,10 +1058,11 @@
 # Also prohibit a prefix matching "\w+ +".
 # @pxref gets the same see/also treatment and should be parenthesized;
 # presume it must *not* start a sentence.
+# POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too.
 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
+  /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims
 prohibit_undesirable_word_seq_ =					\
     -e 'while ($(prohibit_undesirable_word_seq_RE_))'			\
     $(perl_filename_lineno_text_)
@@ -996,10 +1072,20 @@
 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; } || :
+	@$(VC_LIST_EXCEPT)						\
+	  | xargs perl -n -0777 $(prohibit_undesirable_word_seq_)	\
+	  | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)'	\
+	  | $(GREP) .							\
+	  && { echo '$(ME): undesirable word sequence' >&2; exit 1; }   \
+	  || :
+
+# Except for shell files and for loops, double semicolon is probably a mistake
+sc_prohibit_double_semicolon:
+	@prohibit='; *;[	{} \]*(/[/*]|$$)'			\
+	in_vc_files='\.[chly]$$'					\
+	exclude='\bfor *\(.*\)'						\
+	halt="Double semicolon detected"				\
+	  $(_sc_search_regexp)
 
 _ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
 _ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
@@ -1023,7 +1109,8 @@
 # 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)));\
+	@progs=$$($(VC_LIST_EXCEPT)					\
+		    | xargs $(GREP) -l 'proper_name_utf8 ''("');	\
 	if test "x$$progs" != x; then					\
 	  fail=0;							\
 	  for p in $$progs; do						\
@@ -1032,7 +1119,7 @@
 	      -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)'	\
 	      $$dir/Makefile.am && continue;				\
 	    base=$$(basename "$$p" .c);					\
-	    grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null	\
+	    $(GREP) "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null	\
 	      || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
 	  done;								\
 	  test $$fail = 1 &&						\
@@ -1054,12 +1141,12 @@
 	  $(_sc_search_regexp)
 
 NEWS_hash =								\
-  $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p'		\
+  $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p'		\
        $(srcdir)/NEWS							\
      | perl -0777 -pe							\
 	's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms'	\
      | md5sum -								\
-     | sed 's/ .*//')
+     | $(SED) 's/ .*//')
 
 # Ensure that we don't accidentally insert an entry into an old NEWS block.
 sc_immutable_NEWS:
@@ -1093,12 +1180,12 @@
           -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)$$') \
+	    $$($(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		\
+	$(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;	\
@@ -1121,6 +1208,21 @@
 'you have changed the set of files with translatable diagnostics;\n\
 apply the above patch\n'
 
+# Generate a list of files in which to search for translatable strings.
+perl_translatable_files_list_ =						\
+  -e 'foreach $$file (@ARGV) {'						\
+  -e '	\# Consider only file extensions with one or two letters'	\
+  -e '	$$file =~ /\...?$$/ or next;'					\
+  -e '	\# Ignore m4 and mk files'					\
+  -e '	$$file =~ /\.m[4k]$$/ and next;'				\
+  -e '	\# Ignore a .c or .h file with a corresponding .l or .y file'	\
+  -e '	$$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")'	\
+  -e '	  and next;'							\
+  -e '	\# Skip unreadable files'					\
+  -e '	-r $$file or next;'						\
+  -e '	print "$$file ";'						\
+  -e '}'
+
 # 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
@@ -1128,25 +1230,13 @@
 _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;	\
+	  $(GREP) -E -v '^(#|$$)' $(po_file)				\
+	    | $(GREP) -v '^src/false\.c$$' | sort > $@-1;		\
+	  { $(VC_LIST_EXCEPT); echo $(generated_files); }		\
+	    | xargs perl $(perl_translatable_files_list_)		\
+	    | xargs $(GREP) -E -l '$(_gl_translatable_string_re)'	\
+	    | $(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;						\
@@ -1192,7 +1282,7 @@
 	in_vc_files=$(sample-test)					\
 	halt='out of date copyright in $(sample-test); update it'	\
 	  $(_sc_search_regexp)
-	@require='Copyright @copyright\{\} .*'$$(date +%Y)' Free'	\
+	@require='Copyright @copyright\{\} .*'$$(date +%Y)		\
 	in_vc_files=$(texi)						\
 	halt='out of date copyright in $(texi); update it'		\
 	  $(_sc_search_regexp)
@@ -1210,18 +1300,21 @@
 _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		\
+	  $(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		\
+	  $(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; } || :;					\
+	  good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file));	\
+	  $(VC_LIST_EXCEPT)						\
+	    | xargs $(GREP) -lE '$(_hv_regex_weak)'			\
+	    | xargs $(GREP) -LFx "$$good"				\
+	    | $(GREP) .							\
+	    && { printf "$(ME): the above files use"			\
+			" path_prepend_ inconsistently\n" 1>&2;		\
+		 exit 1; }						\
+	    || :;							\
 	fi
 
 # BRE regex of file contents to identify a test script.
@@ -1258,7 +1351,7 @@
 	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')	\
+	  '  see https://bugzilla.redhat.com/show_bug.cgi?id=542609 for details') \
 	  $(_sc_search_regexp)
 
 sc_vulnerable_makefile_CVE-2012-3386:
@@ -1267,7 +1360,7 @@
 	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')	\
+	  '  see https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3386 for details') \
 	  $(_sc_search_regexp)
 
 vc-diff-check:
@@ -1282,17 +1375,18 @@
 
 rel-files = $(DIST_ARCHIVES)
 
-gnulib_dir ?= $(srcdir)/gnulib
-gnulib-version = $$(cd $(gnulib_dir) && git describe)
+gnulib-version = $$(cd $(gnulib_dir)				\
+                    && { git describe || git rev-parse --short=10 HEAD; } )
 bootstrap-tools ?= autoconf,automake,gnulib
 
+gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv)
 # 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}')
+        | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null	\
+        | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
 
 translation_project_ ?= coordinator@translationproject.org
 
@@ -1341,8 +1435,8 @@
 ## Updating files.  ##
 ## ---------------- ##
 
-ftp-gnu = ftp://ftp.gnu.org/gnu
-www-gnu = http://www.gnu.org
+ftp-gnu = https://ftp.gnu.org/gnu
+www-gnu = https://www.gnu.org
 
 upload_dest_dir_ ?= $(PACKAGE)
 upload_command =						\
@@ -1370,7 +1464,8 @@
 
 .PHONY: no-submodule-changes
 no-submodule-changes:
-	$(AM_V_GEN)if test -d $(srcdir)/.git; then			\
+	$(AM_V_GEN)if test -d $(srcdir)/.git				\
+		&& git --version >/dev/null 2>&1; then			\
 	  diff=$$(cd $(srcdir) && git submodule -q foreach		\
 		  git diff-index --name-only HEAD)			\
 	    || exit 1;							\
@@ -1388,11 +1483,12 @@
 # cannot be built from a fresh clone.
 .PHONY: public-submodule-commit
 public-submodule-commit:
-	$(AM_V_GEN)if test -d $(srcdir)/.git; then			\
+	$(AM_V_GEN)if test -d $(srcdir)/.git				\
+		&& git --version >/dev/null 2>&1; then			\
 	  cd $(srcdir) &&						\
 	  git submodule --quiet foreach					\
-	      test '"$$(git rev-parse "$$sha1")"'			\
-	      = '"$$(git merge-base origin "$$sha1")"'			\
+	      'test "$$(git rev-parse "$$sha1")"			\
+		  = "$$(git merge-base origin "$$sha1")"'		\
 	    || { echo '$(ME): found non-public submodule commit' >&2;	\
 		 exit 1; };						\
 	else								\
@@ -1411,7 +1507,7 @@
 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 $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$'	\
 	       || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
 	  || :
 	$(AM_V_at)$(MAKE) vc-diff-check
@@ -1422,6 +1518,7 @@
 	$(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
 
 release:
+	$(AM_V_GEN)$(MAKE) _version
 	$(AM_V_GEN)$(MAKE) $(release-type)
 
 # Override this in cfg.mk if you follow different procedures.
@@ -1487,7 +1584,10 @@
 		--highlight --frames --legend \
 		--title "$(PACKAGE_NAME)"
 
-coverage: init-coverage build-coverage gen-coverage
+coverage:
+	$(MAKE) init-coverage
+	$(MAKE) build-coverage
+	$(MAKE) 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
@@ -1505,8 +1605,8 @@
 	       -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$$//');			\
+	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;					\
@@ -1517,7 +1617,7 @@
 # Update gettext files.
 PACKAGE ?= $(shell basename $(PWD))
 PO_DOMAIN ?= $(PACKAGE)
-POURL = http://translationproject.org/latest/$(PO_DOMAIN)/
+POURL = https://translationproject.org/latest/$(PO_DOMAIN)/
 PODIR ?= po
 refresh-po:
 	rm -f $(PODIR)/*.po && \
@@ -1525,7 +1625,8 @@
 	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
+	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)
@@ -1547,7 +1648,7 @@
 # in the file .x-update-copyright.
 .PHONY: update-copyright
 update-copyright:
-	$(AM_V_GEN)grep -l -w Copyright                                  \
+	$(AM_V_GEN)$(GREP) -l -w Copyright                               \
 	  $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
 	  | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@
 
@@ -1561,9 +1662,9 @@
 ALL_RECURSIVE_TARGETS += sc_tight_scope
 sc_tight_scope: tight-scope.mk
 	@fail=0;							\
-	if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk	\
+	if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk	\
 		> /dev/null						\
-	   && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \
+	   && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \
 		> /dev/null 2>&1; then					\
 	    echo '$(ME): skipping $@';					\
 	else								\
@@ -1591,7 +1692,7 @@
 # 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+) *\(/
+_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/
 
 # If your project uses a macro like "XTERN", then put
 # the following in cfg.mk to override this default:
@@ -1624,6 +1725,7 @@
 
 .PHONY: _gl_tight_scope
 _gl_tight_scope: $(bin_PROGRAMS)
+	sed_wrap='s/^/^_?/;s/$$/$$/';					\
 	t=exceptions-$$$$;						\
 	trap 's=$$?; rm -f $$t; exit $$s' 0;				\
 	for sig in 1 2 3 13 15; do					\
@@ -1633,21 +1735,21 @@
 	       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/ .*//';			\
+	( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions);	\
+	  $(GREP) -h -A1 '^extern .*[^;]$$' $$src			\
+	    | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d';	\
 	  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	\
+	     '$(_gl_TS_function_match) and print $$1' $$hdr;		\
+	) | sort -u | $(SED) "$$sed_wrap" > $$t;			\
+	nm -g $(_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\$$"'		\
+	( printf '%s\n' '__.*' main $(_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					\
+	) | sort -u | $(SED) "$$sed_wrap" > $$t;			\
+	nm -g $(_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
diff --git a/po/LINGUAS b/po/LINGUAS
index d3a9d62..2d42529 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,3 +1,5 @@
+bg
+ca
 da
 de
 el
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index 2a71983..65184f6 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -8,13 +8,14 @@
 # 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
+# Origin: gettext-0.19
+GETTEXT_MACRO_VERSION = 0.19
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 
+SED = @SED@
 SHELL = /bin/sh
 @SET_MAKE@
 
@@ -76,6 +77,16 @@
 
 CATALOGS = @CATALOGS@
 
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
 # Makevars gets inserted here. (Don't remove this line!)
 
 .SUFFIXES:
@@ -138,11 +149,29 @@
 
 # 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.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
 $(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 '; \
+	package_gnu="$(PACKAGE_GNU)"; \
+	test -n "$$package_gnu" || { \
+	  if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+		 LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+			       -size -10000000c -exec grep 'GNU @PACKAGE@' \
+			       /dev/null '{}' ';' 2>/dev/null; \
+	       else \
+		 LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+	       fi; \
+	     } | grep -v 'libtool:' >/dev/null; then \
+	     package_gnu=yes; \
+	   else \
+	     package_gnu=no; \
+	   fi; \
+	}; \
+	if test "$$package_gnu" = "yes"; then \
+	  package_prefix='GNU '; \
 	else \
-	  package_gnu=''; \
+	  package_prefix=''; \
 	fi; \
 	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
 	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
@@ -162,7 +191,7 @@
 	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
 	      --files-from=$(srcdir)/POTFILES.in \
 	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
-	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-name="$${package_prefix}@PACKAGE@" \
 	      --package-version='@VERSION@' \
 	      --msgid-bugs-address="$$msgid_bugs_address" \
 	    ;; \
@@ -190,9 +219,10 @@
 
 # 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
+$(POFILES): $(POFILESDEPS)
 	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
 	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
 	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
 	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
 	  cd $(srcdir) \
@@ -266,7 +296,6 @@
 
 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@
@@ -354,7 +383,7 @@
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 dist distdir:
-	$(MAKE) update-po
+	test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
 	@$(MAKE) dist2
 # This is a separate target because 'update-po' must be executed before.
 dist2: stamp-po $(DISTFILES)
diff --git a/po/Makevars b/po/Makevars
index dd6544b..fb07f6a 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -9,18 +9,17 @@
 
 # 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\
 \
---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+}
+ --from-code=UTF-8\
+ --flag=asprintf:2:c-format\
+ --flag=complain:3:c-format\
+ --flag=complain_indent:4: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
@@ -51,3 +50,15 @@
 # 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 = 
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ee34879..97f2473 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,7 @@
 src/complain.c
 src/conflicts.c
 src/files.c
+src/fixits.c
 src/getargs.c
 src/gram.c
 src/graphviz.c
@@ -8,26 +9,11 @@
 src/main.c
 src/muscle-tab.c
 src/parse-gram.y
+src/print-graph.c
 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
index af52487..7b92c7e 100644
--- a/po/Rules-quot
+++ b/po/Rules-quot
@@ -1,3 +1,4 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
 # 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
@@ -14,13 +15,23 @@
 
 .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; \
+	if test "$(PACKAGE)" = "gettext-tools"; 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 $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+	   | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+	   { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	     '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+	       $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+	       ;; \
+	     *) \
+	       $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+	       ;; \
+	     esac } 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 \
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644
index 0000000..38d1889
--- /dev/null
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..9801037
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,1164 @@
+# Bulgarian translation of bison po-file.
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Alexander Shopov <ash@kambanaria.org>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 3.4.91\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-23 00:03+0100\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "конфликти преместване/заместване (стандартно включени)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "конфликти заместване/заместване (стандартно включени)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "низови литерали без връзка към символ"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "остарели конструкции"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "празни правила без декларация „%empty“"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "незададени или неизползвани стойности във вътрешни правила"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "непотребни и приоритет, и асоциативност за „%s“"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "несъвместимости с „yacc“ по POSIX"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "всички други предупреждения (стандартно включени)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "всички други предупреждения без „dangling-alias“ и „yacc“"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "изключване на всички предупреждения от КАТЕГОРИЯта"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "изключване на всички предупреждения"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "предупрежденията от КАТЕГОРИЯта да са грешки"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Категориите предупреждения включват:"
+
+#: src/complain.c:256
+msgid "warning"
+msgstr "предупреждение"
+
+#: src/complain.c:258
+msgid "error"
+msgstr "грешка"
+
+#: src/complain.c:260
+msgid "fatal error"
+msgstr "фатална грешка"
+
+#: src/complain.c:547
+#, c-format
+msgid "POSIX Yacc does not support %s"
+msgstr "„yacc“ по POSIX не поддържа „%s“"
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "остаряла директива „%s“, използвайте „%s“"
+
+#: src/complain.c:571
+#, c-format
+msgid "duplicate directive"
+msgstr "повторена директива"
+
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "повторена директива „%s“"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "предишна декларация"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "позволено е само еднократно ползване на „%s“ за всяко правило"
+
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "Конфликтът между правило %d и лексема „%s“ се решава като преместване"
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "Конфликтът между правило %d и лексема „%s“ се решава като извеждане"
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "Конфликтът между правило %d и лексема „%s“ се решава като грешка"
+
+#: src/conflicts.c:602
+#, c-format
+msgid "State %d "
+msgstr "Състояние %d "
+
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "конфликти: %d преместване/опростяване, %d извеждане/извеждане\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "конфликти: %d преместване/извеждане\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "конфликти: %d извеждане/извеждане\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"конфликти преместване/извеждане за правило %d: открити са %d, а се очакват %d"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"конфликти извеждане/извеждане за правило %d: открити са %d, а се очакват %d"
+
+#: src/conflicts.c:669
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "„%%expect-rr“ се отнася само за анализаторите GLR"
+
+#: src/conflicts.c:686
+#, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "конфликти преместване/извеждане: открити са %d, а се очакват %d"
+
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d конфликт преместване/извеждане"
+msgstr[1] "%d конфликти преместване/извеждане"
+
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "конфликти извеждане/извеждане: открити са %d, а се очакват %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d конфликт извеждане/извеждане"
+msgstr[1] "%d конфликти извеждане/извеждане"
+
+#: src/files.c:124
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: не може да се отвори"
+
+#: src/files.c:140
+#, c-format
+msgid "input/output error"
+msgstr "вх./изх. грешка"
+
+#: src/files.c:143
+#, c-format
+msgid "cannot close file"
+msgstr "файл не може да се затвори"
+
+#: src/files.c:374
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "отказ за презаписване на входния файл „%s“"
+
+#: src/files.c:382
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "противоречащи си извеждания към файла „%s“"
+
+#: src/fixits.c:122
+#, c-format
+msgid "%s: cannot backup"
+msgstr "%s: неуспешно резервно копиране"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "оцветяване на изхода"
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "без оцветяване на изхода"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "оцветяване на изхода, ако той е на терминал"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "стойността на КОГАТО е една от следните:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "описание на състоянията"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+"прибавяне на небходимото за затваряне на основните множества от елементи"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "изрично асоцииране на проверяваните последващи лексеми с елементите"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "извеждане на решенията на конфликтите преместване/извеждане"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "включване на цялата информация (всичко по-горе)"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "без извеждане на информация"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "ВИДОВЕте са списък от думи, разделени с „,“, измежду:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr "СЪОБЩЕНИЯта са списък от думи, разделени с „,“, измежду:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "посочване на грешките с указател"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "корекции подходящи за четене от програми"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "без генериране на файлове"
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr "всичко по-горе"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "нищо от това по-горе"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr "ФУНКЦИОНАЛНОСТите са списък от думи, разделени с „,“, измежду:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "За повече информация изпълнете „%s --help“.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Употреба: %s [ОПЦИЯ]… ФАЙЛ\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Генериране на детерминиран LR или обобщен LR (GLR) анализатор\n"
+"ползващ таблици LALR(1), IELR(1) или канонични LR(1).\n"
+
+#: src/getargs.c:362
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"Аргументите, които са задължителни за дългите опции, са задължителни и за "
+"късите\n"
+"варианти.\n"
+
+#: src/getargs.c:365
+msgid "The same is true for optional arguments.\n"
+msgstr "Същото се отнася и за незадължителните аргументи.\n"
+
+#: src/getargs.c:370
+msgid ""
+"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"
+"                             and exit\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
+"\n"
+msgstr ""
+"Режим на работа:\n"
+"  -h, --help                 извеждане на помощта и изход\n"
+"  -V, --version              извеждане на версията и изход\n"
+"      --print-localedir      извеждане на директорията с данни зависещи от\n"
+"                             локала и изход\n"
+"      --print-datadir        извеждане на директорията със скелетни файлове "
+"и\n"
+"                             XSLT и изход\n"
+"  -u, --update               прилагане на поправки към входния файл с "
+"граматика\n"
+"                             и изход\n"
+"  -f, --feature[=ФУНКЦИОНАЛНОСТ…]\n"
+"                             включване на различни ФУНКЦИОНАЛНОСТи\n"
+"\n"
+
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Диагностични съобщения:\n"
+"  -W, --warnings[=КАТЕГОРИЯ] доклад за предупрежденията в тази КАТЕГОРИЯ\n"
+"      --color[=КОГАТО]       дали и кога диагностичните съобщения\n"
+"                             да се оцветяват\n"
+"      --style=ФАЙЛ           файл със стилове CSS за оцветяване на\n"
+"                             диагностичните съобщения\n"
+
+#: src/getargs.c:400
+#, c-format
+msgid ""
+"Tuning the 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 tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
+msgstr ""
+"Настройки на анализатора:\n"
+"  -L, --language=ЕЗИК              указване на изходен програмен ЕЗИК\n"
+"  -S, --skeleton=ФАЙЛ              указване на скелетния ФАЙЛ\n"
+"  -t, --debug                      включване на трасиране в анализатора,\n"
+"                                   същото като „-Dparse.trace“\n"
+"      --locations                  поддръжка на местоположения\n"
+"  -D, --define=ИМЕ[=СТОЙНОСТ]      същото като „%define ИМЕ \"СТОЙНОСТ\"“\n"
+"  -F, --force-define=ИМЕ[=СТОЙНОСТ]\n"
+"                                   същото, но с превес над\n"
+"                                   „%define ИМЕ \"СТОЙНОСТ\"“\n"
+"  -p, --name-prefix=ПРЕФИКС        добавяне на този ПРЕФИКС към външните "
+"имена,\n"
+"                                   остаряло и заменено от „-Dapi."
+"prefix=ПРЕФИКС“\n"
+"  -l, --no-lines                   без генерирането на директиви „#line“\n"
+"  -k, --token-table                включване на таблица с имената на "
+"лексемите\n"
+"  -y, --yacc                       режим „yacc“ по POSIX\n"
+
+#: src/getargs.c:419
+msgid ""
+"Output Files:\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"
+msgstr ""
+"ИЗХОД:\n"
+"      --defines[=ФАЙЛ]       генериране и на заглавен ФАЙЛ\n"
+"  -d                         генериране и на заглавен ФАЙЛ без указване на "
+"име\n"
+"                             (за съвместимост с „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[=ФАЙЛ]           извеждане на информация за автомата във формат\n"
+"                             XML\n"
+
+#: src/getargs.c:436
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr ""
+"Съобщавайте за програмни грешки на %s.\n"
+"За грешки в българския превод на <dict@fsa-bg.org>.\n"
+
+#: src/getargs.c:437
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "Уеб страница на „%s“: <%s>\n"
+
+#: src/getargs.c:438
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr "Обща помощ за програмите на GNU: <https://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:453
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Докладвайте за грешки и проблеми с превода на <https://translationproject."
+"org/team/bg.html>\n"
+
+#: src/getargs.c:456
+msgid "For complete documentation, run: info bison.\n"
+msgstr ""
+"За пълната документация изпълнете:\n"
+"  info bison.\n"
+
+#: src/getargs.c:472
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (Bison от GNU) %s"
+
+#: src/getargs.c:474
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Създаден от Robert Corbett и Richard Stallman.\n"
+
+#: src/getargs.c:478
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Авторски права © %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:481
+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:503
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "грешка е да има повече от една скелетна декларация"
+
+#: src/getargs.c:520
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: неправилен език"
+
+#: src/getargs.c:523
+msgid "multiple language declarations are invalid"
+msgstr "декларирането на множество езици е грешка"
+
+#: src/getargs.c:816
+#, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "остаряла опция „%s“, използвайте „%s“"
+
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "липсващ операнд"
+
+#: src/getargs.c:852
+#, c-format
+msgid "extra operand %s"
+msgstr "излишен операнд: „%s“"
+
+#: src/gram.c:218
+msgid "Grammar"
+msgstr "Граматика"
+
+#: src/graphviz.c:46
+#, 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:150 src/scan-gram.l:909
+#, c-format
+msgid "line number overflow"
+msgstr "препълване на но̀мера на ред"
+
+#: src/location.c:152
+#, c-format
+msgid "column number overflow"
+msgstr "препълване на но̀мера на колона"
+
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "препълване на но̀мера на байт"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "…"
+
+#: src/main.c:155
+msgid "rule useless in parser due to conflicts"
+msgstr "безполезно правило за анализатора: има конфликти"
+
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+"може да се приложат автоматични поправки.  Изпълнете отново с опцията „--"
+"update“."
+
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "повторна дефиниция на обявена с „%%define“ променлива: %s"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
+msgid "previous definition"
+msgstr "предишна дефиниция"
+
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: обявена с „%%define“ променлива няма стойност: %s"
+
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "обявената с „%%define“ променлива „%s“ изисква стойности — „{…}“"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr ""
+"обявената с „%%define“ променлива „%s“ изисква стойности — ключови думи"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "обявената с „%%define“ променлива „%s“ изисква стойности — „\"{…}\"“"
+
+#: src/muscle-tab.c:690
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "обявена с „%%define“ булева променлива е с неправилна стойност: %s"
+
+#: src/muscle-tab.c:744
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "обявената с „%%define“ променлива „%s“ е с неправилна стойност: %s"
+
+#: src/muscle-tab.c:749
+#, c-format
+msgid "accepted value: %s"
+msgstr "приета стойност: „%s“"
+
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "знакови литерали не може да са нетерминали"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "знаковите литерали са несъвместими с „%s“"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "дефиниция на „%s“"
+
+#: src/parse-gram.y:889
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "в декларацията на параметър липсва идентификатор"
+
+#: src/parse-gram.y:1018
+#, c-format
+msgid "invalid version requirement: %s"
+msgstr "неправилно изискване за версия: „%s“"
+
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "изисква се версия „%s“ на bison, но наличната е „%s“"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Състояние %d"
+
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "преместване и преминаване към състояние %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "преминаване към състояние %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "грешка (липсва асоциативност)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "заместване чрез правило %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "приемане"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$стандартно"
+
+#: src/print.c:364
+msgid "Terminals, with rules where they appear"
+msgstr "Терминали и правилата, в които са"
+
+#: src/print.c:391
+msgid "Nonterminals, with rules where they appear"
+msgstr "Нетерминали и правилата, в които са"
+
+#: src/print.c:416
+msgid "on left:"
+msgstr "отляво:"
+
+#: src/print.c:425
+msgid "on right:"
+msgstr "отдясно:"
+
+#: src/print.c:447
+msgid "Rules useless in parser due to conflicts"
+msgstr "Неизползваеми правила в анализатора поради конфликти"
+
+#: src/reader.c:60
+#, c-format
+msgid "multiple %s declarations"
+msgstr "множество декларации на „%s“"
+
+#: src/reader.c:129
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr ""
+"конфликт при типа на резултата при сливащата функция „%s“: <%s> != <%s>"
+
+#: src/reader.c:202
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "повтарящото се име на символа „%s“ се прескача"
+
+#: src/reader.c:238
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "за лексемата „%s“ е дадено правило"
+
+#: src/reader.c:295
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "конфликт в типовете за стандартното действие: <%s> != <%s>"
+
+#: src/reader.c:318
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "празно правило за типизиран нетерминал, липсва действие"
+
+#: src/reader.c:334
+#, c-format
+msgid "unused value: $%d"
+msgstr "неизползвана стойност: $%d"
+
+#: src/reader.c:336
+#, c-format
+msgid "unset value: $$"
+msgstr "изчистване на стойността: $$"
+
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "декларация „%%empty“ при непразно правило"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "празно правило без декларация „%%empty“"
+
+#: src/reader.c:372
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "не е дефинирана лексема за „%%prec“: %s"
+
+#: src/reader.c:377
+#, c-format
+msgid "only midrule actions can be typed: %s"
+msgstr "само при вътрешни правила действията може да са типизирани: „%s“"
+
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "„%s“ се отнася само за анализаторите GLR"
+
+#: src/reader.c:507
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "„%s“ трябва да се следва от положително число"
+
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "„yacc“ по POSIX не поддържа типизирани действия и при вътрешни правила"
+
+#: src/reader.c:666
+#, c-format
+msgid "rule is too long"
+msgstr "правилото е твърде дълго"
+
+#: src/reader.c:779
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "няма правила във входната граматика"
+
+#: src/reduce.c:225
+msgid "rule useless in grammar"
+msgstr "безполезно правило в граматика"
+
+#: src/reduce.c:280
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "безполезни нетерминали в граматиката: „%s“"
+
+#: src/reduce.c:321
+msgid "Nonterminals useless in grammar"
+msgstr "Безполезни нетерминали в граматиката"
+
+#: src/reduce.c:333
+msgid "Terminals unused in grammar"
+msgstr "Неизползвани терминали в граматиката"
+
+#: src/reduce.c:342
+msgid "Rules useless in grammar"
+msgstr "Безполезни правила в граматиката"
+
+#: src/reduce.c:355
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d безполезeн нетерминал в граматиката"
+msgstr[1] "%d безполезни нетерминали в граматиката"
+
+#: src/reduce.c:360
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d безполезно правило в граматиката"
+msgstr[1] "%d безполезни правила в граматиката"
+
+#: src/reduce.c:386
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "началният символ „%s“ не води до никакво изречение"
+
+#: src/scan-code.l:158
+#, c-format
+msgid "stray '%s'"
+msgstr "излишна поява на „%s“"
+
+#: src/scan-code.l:330
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "се отнася за „%c%s“ при „%s“"
+
+#: src/scan-code.l:354
+#, c-format
+msgid "possibly meant: %c"
+msgstr "вероятно става дума за „%c“"
+
+#: src/scan-code.l:363
+#, c-format
+msgid ", hiding %c"
+msgstr ", крие „%c“"
+
+#: src/scan-code.l:371
+#, c-format
+msgid " at %s"
+msgstr "при „%s“"
+
+#: src/scan-code.l:375
+#, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", не може да се достъпи от действието при вътрешно правило при $%d"
+
+#: src/scan-code.l:423 src/scan-gram.l:831
+#, c-format
+msgid "integer out of range: %s"
+msgstr "цяло число извън диапазона: %s"
+
+#: src/scan-code.l:498
+#, c-format
+msgid "invalid reference: %s"
+msgstr "неправилна препратка: „%s“"
+
+#: src/scan-code.l:506
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"синтактична грешка след „%c“, очаква се цяло число, буква, „_“, „[“ или „$“"
+
+#: src/scan-code.l:512
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "символът липсва в правилото преди $%d: %.*s"
+
+#: src/scan-code.l:517
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "символът липсва в правилото: %.*s"
+
+#: src/scan-code.l:532
+#, c-format
+msgid "misleading reference: %s"
+msgstr "заблуждаващ указател: „%s“"
+
+#: src/scan-code.l:548
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "нееднозначен указател: „%s“"
+
+#: src/scan-code.l:584
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "зададен е изричен тип в граматика без типове"
+
+#: src/scan-code.l:639
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "„$$“ за вътрешното правило при $%d от %s не е с обявен тип"
+
+#: src/scan-code.l:645
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "„$$“ от „%s“ е без обявен тип"
+
+#: src/scan-code.l:671
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "„$%s“ от „%s“ е без обявен ти"
+
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "множество появи на $%d със „api.value.automove“"
+
+#: src/scan-gram.l:198
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "излишна „,“ — приема се за празен знак"
+
+#: src/scan-gram.l:292
+#, c-format
+msgid "invalid directive: %s"
+msgstr "неправилна директива: „%s“"
+
+#: src/scan-gram.l:313
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "неправилен идентификатор: „%s“"
+
+#: src/scan-gram.l:365
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "неправилни знаци"
+msgstr[1] "неправилен клас знаци"
+
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "неправилен знак „null“"
+
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "неочакван идентификатор в име в квадратни скоби: „%s“"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "очаква се идентификатор"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "неправилен знак в име в квадратни скоби"
+msgstr[1] "неправилни знаци в име в квадратни скоби"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "„yacc“ по POSIX не поддържа низови литерали"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "празен знаков литерал"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "излишни знаци в знаковия литерал"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "грешно число след екраниране с „\\“: „%s“"
+
+#: src/scan-gram.l:652
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "неправилен знак след екраниране с „\\“: „%s“"
+
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "„yacc“ по POSIX не поддържа шестнайсетични литерали"
+
+#: src/scan-gram.l:962
+#, c-format
+msgid "missing %s at end of file"
+msgstr "в края на файл липсва „%s“"
+
+#: src/scan-gram.l:973
+#, c-format
+msgid "missing %s at end of line"
+msgstr "в края на ред липсва „%s“"
+
+#: src/scan-skel.l:140
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "директива „%s“ в скелета не е затворена"
+
+#: src/scan-skel.l:258
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "прекалено малко аргументи към директива „%s“ в скелета"
+
+#: src/scan-skel.l:265
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "прекалено много аргументи към директива „%s“ в скелета"
+
+#: src/symtab.c:108
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "„yacc“ по POSIX не позволява „-“ в имената на символите: „%s“"
+
+#: src/symtab.c:118
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "прекалено много символи във входната граматика (максимумът е %d)"
+
+#: src/symtab.c:300
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "„%s“ е повторно деклариране на „%s“"
+
+#: src/symtab.c:313
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "„%s“ е повторно деклариране на „<%s>“"
+
+#: src/symtab.c:325
+#, c-format
+msgid "symbol %s redeclared as a token"
+msgstr "символът „%s“ е повторно деклариран като лексема"
+
+#: src/symtab.c:326
+#, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "повторна декларация на символа „%s“ като нетерминал"
+
+#: src/symtab.c:370
+#, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"използваният символ „%s“, не е указан като лексема и няма дефинирани "
+"правила.  „%s“ ли искате да ползвате?"
+
+#: src/symtab.c:380
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"използваният символ „%s“, не е указан като лексема и няма дефинирани правила"
+
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "„yacc“ по POSIX ползва „%%type“ само за нетерминали"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "повторна декларация на символа „%s“"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "не може да се задава изричен номер на нетерминалите"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "повторна дефиниция на но̀мера на потребителската лексема „%s“"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "номерът на потребителска лексема на „%s“е прекалено голям"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "низовият литерал „%s“ е без връзка към символ"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "непотребна декларация „%s“ за типа <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "ползван е типът <%s>, който не е свързан с никой символ"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "нетерминалите не могат да имат низови псевдоними"
+
+#: src/symtab.c:698
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "символът „%s“ е използван повече от веднъж като низ-литерал"
+
+#: src/symtab.c:701
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "символът „%s“ отговаря на повече от един низ-литерал"
+
+#: src/symtab.c:736
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "потребителска лексема №%d е повторна декларация на „%s“"
+
+#: src/symtab.c:740
+#, c-format
+msgid "previous declaration for %s"
+msgstr "предишна декларация на „%s“"
+
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "номерът на лексема е прекалено голям"
+
+#: src/symtab.c:1119
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "началният символ „%s“ не е дефиниран"
+
+#: src/symtab.c:1123
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "началният символ „%s“ е лексема"
+
+#: src/symtab.c:1294
+#, c-format
+msgid "useless precedence and associativity for %s"
+msgstr "непотребни и приоритет, и асоциативност за „%s“"
+
+#: src/symtab.c:1297
+#, c-format
+msgid "useless precedence for %s"
+msgstr "непотребен приоритет за „%s“"
+
+#: src/symtab.c:1301
+#, c-format
+msgid "useless associativity for %s, use %%precedence"
+msgstr "непотребна асоциативност за „%s, укажете приоритет с „%%precedence“"
diff --git a/po/bison.pot b/po/bison.pot
index 6f02c2a..223e920 100644
--- a/po/bison.pot
+++ b/po/bison.pot
@@ -1,235 +1,400 @@
 # SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the GNU bison package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.7\n"
+"Project-Id-Version: GNU bison 3.5\n"
 "Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
-"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"POT-Creation-Date: 2019-12-11 07:43+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-Type: text/plain; charset=UTF-8\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr ""
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr ""
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr ""
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr ""
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
 msgstr ""
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
+msgid "deprecated directive: %s, use %s"
 msgstr ""
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
+msgid "duplicate directive"
 msgstr ""
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgid "duplicate directive: %s"
 msgstr ""
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
+msgid "previous declaration"
 msgstr ""
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
+msgid "only one %s allowed per rule"
 msgstr ""
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr ""
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr ""
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr ""
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr ""
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/files.c:114
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr ""
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr ""
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr ""
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr ""
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "%s: cannot backup"
 msgstr ""
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr ""
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr ""
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr ""
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr ""
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
-#, c-format
+#: src/getargs.c:386
 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"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
 msgstr ""
 
-#: src/getargs.c:346
+#: src/getargs.c:400
+#, c-format
 msgid ""
-"Output:\n"
+"Tuning the 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 tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
+msgstr ""
+
+#: src/getargs.c:419
+msgid ""
+"Output Files:\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"
+"  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -238,67 +403,68 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr ""
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr ""
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr ""
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr ""
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
+msgid "deprecated option: %s, use %s"
 msgstr ""
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr ""
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr ""
 
-#: src/gram.c:112
-msgid "empty"
-msgstr ""
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr ""
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -307,788 +473,612 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr ""
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr ""
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr ""
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr ""
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr ""
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr ""
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr ""
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr ""
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr ""
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr ""
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr ""
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr ""
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr ""
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
+msgid "invalid version requirement: %s"
 msgstr ""
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
+msgid "require bison %s, but have %s"
 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr ""
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr ""
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr ""
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr ""
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr ""
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr ""
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr ""
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr ""
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr ""
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+msgid "on left:"
 msgstr ""
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+msgid "on right:"
 msgstr ""
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr ""
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr ""
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr ""
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr ""
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr ""
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr ""
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr ""
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
 msgstr ""
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
+msgid "only midrule actions can be typed: %s"
 msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr ""
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr ""
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr ""
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr ""
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr ""
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr ""
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr ""
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr ""
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr ""
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr ""
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr ""
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr ""
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr ""
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr ""
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr ""
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
 msgstr ""
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr ""
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr ""
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr ""
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr ""
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr ""
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr ""
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr ""
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr ""
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr ""
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr ""
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr ""
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr ""
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr ""
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr ""
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
+msgid "symbol %s redeclared as a token"
 msgstr ""
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
+msgid "symbol %s redeclared as a nonterminal"
 msgstr ""
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
 msgstr ""
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
 msgstr ""
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr ""
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr ""
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr ""
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
 msgstr ""
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
 msgstr ""
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr ""
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr ""
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr ""
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr ""
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
+msgid "useless precedence and associativity for %s"
 msgstr ""
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
+msgid "useless precedence for %s"
 msgstr ""
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
 msgstr ""
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..4bde54f
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..c6fbab7
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,1456 @@
+# Missatges en català per a GNU Bison.
+# Copyright (C) 2017 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Walter Garcia-Fontes <walter.garcia@upf.edu>, 2017
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison 3.0.4\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2017-02-26 20:29+0100\n"
+"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "regla buida sense %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "precedència i associativitat inútils per a %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
+msgid "warning"
+msgstr "advertiment"
+
+#: src/complain.c:258
+msgid "error"
+msgstr "error"
+
+#: src/complain.c:260
+msgid "fatal error"
+msgstr "error fatal"
+
+#: src/complain.c:547
+#, c-format
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "directiva obsoleta: %s, useu %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "directiva obsoleta, useu %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "directiva obsoleta, useu %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "declaració prèvia"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "sols es permet una %s per regla"
+
+#: src/conflicts.c:81
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr ""
+"    Conflicte entre la regla %d i el testimoni %s resolt com a desplaçament"
+
+#: src/conflicts.c:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr ""
+"    Conflicte entre la regla %d i el testimoni %s resolt com a reducció"
+
+#: src/conflicts.c:100
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "    Conflicte entre la regla %d i el testimoni %s resolt com un error"
+
+#: src/conflicts.c:602
+#, c-format
+msgid "State %d "
+msgstr "Estat %d"
+
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflictes: %d shift/reduce, %d reduce/reduce\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflictes: %d shift/reduce\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflictes: %d reduce/reduce\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "conflictes shift/reduce: %d trobats, %d esperats"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "conflictes reduce/reduce: %d trobats, %d esperats"
+
+#: src/conflicts.c:669
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr s'aplica sols a analitzadors GLR"
+
+#: src/conflicts.c:686
+#, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "conflictes shift/reduce: %d trobats, %d esperats"
+
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d conflicte shift/reduce"
+msgstr[1] "%d conflictes shift/reduce"
+
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "conflictes reduce/reduce: %d trobats, %d esperats"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d conflicte reduce/reduce"
+msgstr[1] "%d conflictes reduce/reduce"
+
+#: src/files.c:124
+#, c-format
+msgid "%s: cannot open"
+msgstr "%s: no es pot obrir"
+
+#: src/files.c:140
+#, c-format
+msgid "input/output error"
+msgstr "error d'entrada/sortida"
+
+#: src/files.c:143
+#, c-format
+msgid "cannot close file"
+msgstr "no es pot tancar el fitxer"
+
+#: src/files.c:374
+#, c-format
+msgid "refusing to overwrite the input file %s"
+msgstr "no se sobreescriurà el fitxer d'entrada %s"
+
+#: src/files.c:382
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "sortides conflictives cap al fitxer %s"
+
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: no es pot obrir"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d conflicte shift/reduce"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Proveu «%s --help» per a més informació.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Ús: %s [OPCIÓ].. FITXER\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Genera un analitzador LR determinístic o un LR (GLR) generalitzat usant "
+"taules d'analitzador LALR(1), IELR(1) o LR(1) canònic. El suport per a "
+"IELR(1) i LR(1) canònic és experimental.\n"
+
+#: src/getargs.c:362
+msgid ""
+"Mandatory arguments to long options are mandatory for short options too.\n"
+msgstr ""
+"El arguments obligatoris per a opcions llargues són obligatoris també per a "
+"opcions curtes.\n"
+
+#: src/getargs.c:365
+msgid "The same is true for optional arguments.\n"
+msgstr "El mateix és veritat per a arguments opcionals.\n"
+
+#: src/getargs.c:370
+#, fuzzy
+msgid ""
+"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"
+"                             and exit\n"
+"      --print-datadir        output directory containing skeletons and XSLT\n"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Modes d'operació:\n"
+"  -h, --help                 mostra aquesta ajuda i surt\n"
+"  -V, --version              mostra la informació de versió i surt\n"
+"      --print-localedir      mostra el directori contenint les dades "
+"depenents de la configuració regional\n"
+"      --print-datadir        mostra el directori contenint esquelets i XSLT\n"
+"  -y, --yacc                 emula POSIX Yacc\n"
+"  -W, --warnings[=CATEGORIA] informa dels advertiments classificats a "
+"CATEGORIA\n"
+"report the warnings falling in CATEGORY\n"
+"  -f, --feature[=CARACTERISTICA] activa característiques miscel·lànies\n"
+"\n"
+
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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 tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
+msgstr ""
+"Analitzador:\n"
+"  -L, --language=LLENGUATGE        especifica el llenguatge de programació "
+"de la sortida   \n"
+"  -S, --skeleton=FITXER            especifica l'esquelet a usar\n"
+"  -t, --debug                      instrumenta l'analitzador per al "
+"seguiment\n"
+"                                   el mateix que '-Dparse.trace'\n"
+"      --locations                  habilita el suport per a ubicacions\n"
+"  -D, --define=NOM[=VALOR]         semblant a '%define NOM «VALOR»'\n"
+"  -F, --force-define=NOM[=VALOR]   anul·la '%define NOM «VALOR»'\n"
+"  -p, --name-prefix=PREFIX         anteposa PREFIX als símbols externs\n"
+"                                   obsolet per '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                   no generis directives «#line»\n"
+"  -k, --token-table                inclou una taula amb els noms dels "
+"testimonis\n"
+"\n"
+
+#: src/getargs.c:419
+#, fuzzy
+msgid ""
+"Output Files:\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"
+msgstr ""
+"Sortida:\n"
+"      --defines[=FITXER]     produeix també un fitxer de capçalera\n"
+"  -d                         semblant però no es pot especificar FITXER (per "
+"a POSIX Yacc)\n"
+"  -r, --report=COSES         produeix també detalls sobre l'automaton\n"
+"      --report-file=FITXER   escriu l'informe a FITXER\n"
+"  -v, --verbose              igual que «--report=state»\n"
+"  -b, --file-prefix=PREFIX   especifica un PREFIX per a fitxers de sortida\n"
+"  -o, --output=FITXER        deixa la sortida a FITXER\n"
+"  -g, --graph[=FITXER]       també treu una gràfica a l'automaton\n"
+"  -x, --xml[=FITXER]         treu també un informe XML de l'automaton\n"
+"                             (l'esquema XML és experimental)\n"
+
+#: src/getargs.c:436
+#, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Informa dels errors a <%s>.\n"
+
+#: src/getargs.c:437
+#, c-format
+msgid "%s home page: <%s>.\n"
+msgstr "%s pàgina web: <%s>.\n"
+
+#: src/getargs.c:438
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+msgstr ""
+"Ajuda general per usar el programari 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:453
+msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
+msgstr ""
+"Informa dels errors de traducció a <http://translationproject.org/team/ca."
+"html>.\n"
+
+#: src/getargs.c:456
+msgid "For complete documentation, run: info bison.\n"
+msgstr "Per a la documentació completa, executeu: info bison.\n"
+
+#: src/getargs.c:472
+#, c-format
+msgid "bison (GNU Bison) %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/getargs.c:474
+msgid "Written by Robert Corbett and Richard Stallman.\n"
+msgstr "Escrit per Robert Corbett i Richard Stallman.\n"
+
+#: src/getargs.c:478
+#, c-format
+msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
+
+#: src/getargs.c:481
+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 ""
+"Això és programari lliure; vegeu la font per a les condicions de còpia. NO\n"
+"hi ha cap garantia; ni tan sols de COMERCIABILITAT o ADEQUACIÓ A UN PROPÒSIT "
+"PARTICULAR.\n"
+
+#: src/getargs.c:503
+#, c-format
+msgid "multiple skeleton declarations are invalid"
+msgstr "les declaracions múltiples d'esquelet no són vàlides"
+
+#: src/getargs.c:520
+#, c-format
+msgid "%s: invalid language"
+msgstr "%s: llenguatge no vàlid"
+
+#: src/getargs.c:523
+msgid "multiple language declarations are invalid"
+msgstr "les declaracions múltiples de llenguatge no són válides"
+
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "directiva obsoleta: %s, useu %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
+msgstr "%s: manca un operand"
+
+#: src/getargs.c:852
+#, c-format
+msgid "extra operand %s"
+msgstr "operand extra %s"
+
+#: src/gram.c:218
+msgid "Grammar"
+msgstr "Gramàtica"
+
+#: src/graphviz.c:46
+#, c-format
+msgid ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
+msgstr ""
+"// Generat per %s.\n"
+"// Informeu els errors a <%s>.\n"
+"// Pàgina web: <%s>.\n"
+"\n"
+
+#: src/location.c:150 src/scan-gram.l:909
+#, c-format
+msgid "line number overflow"
+msgstr "desbordament del número de línia"
+
+#: src/location.c:152
+#, c-format
+msgid "column number overflow"
+msgstr "desbordament del número de columna"
+
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "desbordament del número de línia"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
+msgid "rule useless in parser due to conflicts"
+msgstr "la regla és inútil a l'analitzador a causa de conflictes"
+
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "variable %%define %s redefinida"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
+msgid "previous definition"
+msgstr "definició prèvia"
+
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
+msgid "%s: undefined %%define variable %s"
+msgstr "%s: variable %%define no definida %s"
+
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "variable %%define %s redefinida"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "variable %%define %s redefinida"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "variable %%define %s redefinida"
+
+#: src/muscle-tab.c:690
+#, c-format
+msgid "invalid value for %%define Boolean variable %s"
+msgstr "valor no vàlid per a la variable booleana %s"
+
+#: src/muscle-tab.c:744
+#, c-format
+msgid "invalid value for %%define variable %s: %s"
+msgstr "valor no vàlid per a la variable %%define %s: %s"
+
+#: src/muscle-tab.c:749
+#, c-format
+msgid "accepted value: %s"
+msgstr "valor acceptat: %s"
+
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "s'està redefinint el número de testimoni d'usuari per a %s"
+
+#: src/parse-gram.y:889
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "manca l'identificador a la declaració del paràmetre"
+
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "referència no vàlida: %s"
+
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr ""
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Estat %d"
+
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "fes un shift, i ves a l'estat %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "ves a l'estat %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "error (no-associatiu)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redueix usant la regla %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "accepta"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
+msgid "Terminals, with rules where they appear"
+msgstr "Terminals, amb regles on apareixen"
+
+#: src/print.c:391
+msgid "Nonterminals, with rules where they appear"
+msgstr "No-terminals, amb regles on apareixen"
+
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
+msgstr " a l'esquerra:"
+
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
+msgstr " a la dreta:"
+
+#: src/print.c:447
+msgid "Rules useless in parser due to conflicts"
+msgstr "Les regles són inútils a l'analitzador a causa de conflictes"
+
+#: src/reader.c:60
+#, c-format
+msgid "multiple %s declarations"
+msgstr "declaracions %s múltiples"
+
+#: src/reader.c:129
+#, c-format
+msgid "result type clash on merge function %s: <%s> != <%s>"
+msgstr "col·lisió de tipus de resultat a la funció merge %s: <%s> != <%s>"
+
+#: src/reader.c:202
+#, c-format
+msgid "duplicated symbol name for %s ignored"
+msgstr "nom de símbol duplicat per a %s ignorat"
+
+#: src/reader.c:238
+#, c-format
+msgid "rule given for %s, which is a token"
+msgstr "regla donada per a %s, que és un testimoni"
+
+#: src/reader.c:295
+#, c-format
+msgid "type clash on default action: <%s> != <%s>"
+msgstr "col·lisió de tipus a l'acció predeterminada: <%s> != <%s>"
+
+#: src/reader.c:318
+#, c-format
+msgid "empty rule for typed nonterminal, and no action"
+msgstr "regla buida per a la no-terminal entrada, i cap acció"
+
+#: src/reader.c:334
+#, c-format
+msgid "unused value: $%d"
+msgstr "valor sense usar: $%d"
+
+#: src/reader.c:336
+#, c-format
+msgid "unset value: $$"
+msgstr "valor no establert: $$"
+
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty a regla no buida"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "regla buida sense %%empty"
+
+#: src/reader.c:372
+#, c-format
+msgid "token for %%prec is not defined: %s"
+msgstr "no està definit el testimoni per a %%prec: %s"
+
+#: src/reader.c:377
+#, c-format
+msgid "only midrule actions can be typed: %s"
+msgstr ""
+
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
+#, c-format
+msgid "%s affects only GLR parsers"
+msgstr "%s afecta sols ela analitzadors GLR"
+
+#: src/reader.c:507
+#, c-format
+msgid "%s must be followed by positive number"
+msgstr "%s ha d'estar seguit per un nombre positiu"
+
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
+#, c-format
+msgid "rule is too long"
+msgstr "la regla és massa llarga"
+
+#: src/reader.c:779
+#, c-format
+msgid "no rules in the input grammar"
+msgstr "no hi ea regles a la gramàtica d'entrada"
+
+#: src/reduce.c:225
+msgid "rule useless in grammar"
+msgstr "la regla no és útil a la gramàtica"
+
+#: src/reduce.c:280
+#, c-format
+msgid "nonterminal useless in grammar: %s"
+msgstr "la no-terminal no és útil a la gramàtica: %s"
+
+#: src/reduce.c:321
+msgid "Nonterminals useless in grammar"
+msgstr "Les no-terminals no són útils a la gramàtica"
+
+#: src/reduce.c:333
+msgid "Terminals unused in grammar"
+msgstr "Hi ha terminal sense usar a la gramàtica"
+
+#: src/reduce.c:342
+msgid "Rules useless in grammar"
+msgstr "Les regles són inútils a la gramàtica"
+
+#: src/reduce.c:355
+#, c-format
+msgid "%d nonterminal useless in grammar"
+msgid_plural "%d nonterminals useless in grammar"
+msgstr[0] "%d no-terminal no útil a la gramàtica"
+msgstr[1] "%d no-terminals no útils a la gramàtica"
+
+#: src/reduce.c:360
+#, c-format
+msgid "%d rule useless in grammar"
+msgid_plural "%d rules useless in grammar"
+msgstr[0] "%d regla no útil a la gramàtica"
+msgstr[1] "%d no regles no útils a la gramàtica"
+
+#: src/reduce.c:386
+#, c-format
+msgid "start symbol %s does not derive any sentence"
+msgstr "el símbol d'entrada %s no deriva cap oració"
+
+#: src/scan-code.l:158
+#, c-format
+msgid "stray '%s'"
+msgstr "«%s» extraviat"
+
+#: src/scan-code.l:330
+#, c-format
+msgid "refers to: %c%s at %s"
+msgstr "refereix a: %c%s a %s"
+
+#: src/scan-code.l:354
+#, c-format
+msgid "possibly meant: %c"
+msgstr "possiblement significava: %c"
+
+#: src/scan-code.l:363
+#, c-format
+msgid ", hiding %c"
+msgstr ", amagant %c"
+
+#: src/scan-code.l:371
+#, c-format
+msgid " at %s"
+msgstr " a %s"
+
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", no es pot accedir des de l'acció de regla intermèdia a $%d"
+
+#: src/scan-code.l:423 src/scan-gram.l:831
+#, c-format
+msgid "integer out of range: %s"
+msgstr "l'enter està fora de rang: %s"
+
+#: src/scan-code.l:498
+#, c-format
+msgid "invalid reference: %s"
+msgstr "referència no vàlida: %s"
+
+#: src/scan-code.l:506
+#, c-format
+msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
+msgstr ""
+"error de sintaxi després de «%c», s'esperava un enter, lletra, «_», «[» o «$»"
+
+#: src/scan-code.l:512
+#, c-format
+msgid "symbol not found in production before $%d: %.*s"
+msgstr "no s'ha trobat el símbol en producció abans de $%d: %.*s"
+
+#: src/scan-code.l:517
+#, c-format
+msgid "symbol not found in production: %.*s"
+msgstr "no s'ha trobat el símbol en producció: %.*s"
+
+#: src/scan-code.l:532
+#, c-format
+msgid "misleading reference: %s"
+msgstr "referència enganyosa: %s"
+
+#: src/scan-code.l:548
+#, c-format
+msgid "ambiguous reference: %s"
+msgstr "referència ambigua: %s"
+
+#: src/scan-code.l:584
+#, c-format
+msgid "explicit type given in untyped grammar"
+msgstr "s'ha donat un tipus explicit a una gramàtica sense tipus"
+
+#: src/scan-code.l:639
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ per a la regla intermèdia a $%d de %s no té cap tipus declarat"
+
+#: src/scan-code.l:645
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de %s no té cap tipus declarat"
+
+#: src/scan-code.l:671
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s de %s no té cap tipus declarat"
+
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
+#, c-format
+msgid "stray ',' treated as white space"
+msgstr "«,» extraviat serà tractat com a espai en blanc"
+
+#: src/scan-gram.l:292
+#, c-format
+msgid "invalid directive: %s"
+msgstr "directiva no vàlida: %s"
+
+#: src/scan-gram.l:313
+#, c-format
+msgid "invalid identifier: %s"
+msgstr "identificador no vàlida: %s"
+
+#: src/scan-gram.l:365
+msgid "invalid character"
+msgid_plural "invalid characters"
+msgstr[0] "caràcter no vàlid"
+msgstr[1] "caràcters no vàlids"
+
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "caràcter nul no vàlid"
+
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "identificador no esperat al nom entre parèntesis: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "s'esperava un identificador"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "caràcter no vàlid al nom entre parèntesis"
+msgstr[1] "caràcters no vàlids al nom entre parèntesis"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "literal de caràcters buit"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "caràcters extra al literal de caràcters"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
+msgid "invalid number after \\-escape: %s"
+msgstr "nombre no vàlid després de \\-escap: %s"
+
+#: src/scan-gram.l:652
+#, c-format
+msgid "invalid character after \\-escape: %s"
+msgstr "caràcter no vàlid després de \\-escap: %s"
+
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
+#, c-format
+msgid "missing %s at end of file"
+msgstr "falta %s al final del fitxer"
+
+#: src/scan-gram.l:973
+#, c-format
+msgid "missing %s at end of line"
+msgstr "falta %s al final de la línia"
+
+#: src/scan-skel.l:140
+#, c-format
+msgid "unclosed %s directive in skeleton"
+msgstr "directiva %s sense tancar a l'esquelet"
+
+#: src/scan-skel.l:258
+#, c-format
+msgid "too few arguments for %s directive in skeleton"
+msgstr "massa pocs argumentse per a la directiva %s a l'esquelet"
+
+#: src/scan-skel.l:265
+#, c-format
+msgid "too many arguments for %s directive in skeleton"
+msgstr "massa arguments per a la directiva %s a l'esquelet"
+
+#: src/symtab.c:108
+#, c-format
+msgid "POSIX Yacc forbids dashes in symbol names: %s"
+msgstr "POSIX Yacc no permet guionets als noms de símbols: %s"
+
+#: src/symtab.c:118
+#, c-format
+msgid "too many symbols in input grammar (limit is %d)"
+msgstr "massa símbols a la gramàtica d'entrada (el límit és %d)"
+
+#: src/symtab.c:300
+#, c-format
+msgid "%s redeclaration for %s"
+msgstr "redeclaració %s per a %s"
+
+#: src/symtab.c:313
+#, c-format
+msgid "%s redeclaration for <%s>"
+msgstr "redeclaració %s per a <%s>"
+
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
+msgstr "símbol %s redeclarat"
+
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "símbol %s redeclarat"
+
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"s'usa el símbol %s, però no està definit com un testimoni i no té cap regla"
+
+#: src/symtab.c:380
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr ""
+"s'usa el símbol %s, però no està definit com un testimoni i no té cap regla"
+
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "símbol %s redeclarat"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "s'està redefinint el número de testimoni d'usuari per a %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "s'està redefinint el número de testimoni d'usuari per a %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s inútil per al tipus <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "s'usa el tipus <%s>, però no està associat a cap símbol"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "el símbol %s s'usa més d'un cop com a una cadena de literals"
+
+#: src/symtab.c:701
+#, c-format
+msgid "symbol %s given more than one literal string"
+msgstr "se li ha donat al símbol %s mes d'una cadena de literals"
+
+#: src/symtab.c:736
+#, c-format
+msgid "user token number %d redeclaration for %s"
+msgstr "redeclaració número %d de testimoni d'usuari per a %s"
+
+#: src/symtab.c:740
+#, c-format
+msgid "previous declaration for %s"
+msgstr "declaració prèvia per a %s"
+
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
+#, c-format
+msgid "the start symbol %s is undefined"
+msgstr "el símbol d'inici %s no està definit"
+
+#: src/symtab.c:1123
+#, c-format
+msgid "the start symbol %s is a token"
+msgstr "el símbol d'inici %s és un testimoni"
+
+#: src/symtab.c:1294
+#, c-format
+msgid "useless precedence and associativity for %s"
+msgstr "precedència i associativitat inútils per a %s"
+
+#: src/symtab.c:1297
+#, c-format
+msgid "useless precedence for %s"
+msgstr "precedència inútil per a %s"
+
+#: src/symtab.c:1301
+#, c-format
+msgid "useless associativity for %s, use %%precedence"
+msgstr "associativitat inútil per a %s, useu  %%precedence"
+
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "la no-terminal no és útil a la gramàtica: %s"
+
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "directiva obsoleta, useu %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Les categories d'advertiment inclouen:\n"
+#~ "  'midrule-values'    valors no establerts o no usats de midrule\n"
+#~ "  'yacc'              incompatibilitats amb el POSIX Yacc\n"
+#~ "  'conflicts-sr'      conflictes S/R (habilitats per defecte)\n"
+#~ "  'conflicts-rr'      conflictes R/R (habilitats per defecte)\n"
+#~ "  'deprecated'        construccions obsoletes\n"
+#~ "  'empty-rule'        regles buides sense %empty\n"
+#~ "  'precedence'        precedència i associativitat inútils\n"
+#~ "  'other'             tots els altres advertiments (habilitat per "
+#~ "defecte)\n"
+#~ "  'all'               tots els advertiments excepte «yacc»\n"
+#~ "  'no-CATEGORIA'      desactiva els advertiments a CATEGORIA\n"
+#~ "  'none'              desactiva tots els advertiments\n"
+#~ "  'error[=CATEGORIA]' tracta els advertiments com a errors\n"
+
+#~ 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 ""
+#~ "COSES és una llista de paraules separades amb comes que pot incloure:\n"
+#~ "  'state'        descriu els estats\n"
+#~ "  'itemset'      completa els elements del nucli amb el seu tancament\n"
+#~ "  'lookahead'    associa explícitament els testimonis de recerca cap "
+#~ "endavant als elements\n"
+#~ "  'solved'       descriu la solució a conflictes shift/reduce\n"
+#~ "  'all'          inclou tota la informació de dalt\n"
+#~ "  'none'         inhabilita l'informe\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FUNCIONALITAT és una llista de paraules separades amb comes que pot "
+#~ "incloure:\n"
+#~ "  'caret'        mostra els errors amb accents circumflexos\n"
+#~ "  'all'          tot el de dalt\n"
+#~ "  'none'         inhabilita tot el de dalt\n"
+#~ "  "
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argument no vàlid %s per a %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argument ambigu %s per a %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Els arguments vàlids són:"
+
+#~ msgid "write error"
+#~ msgstr "error d'escriptura"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Error desconegut de sistema"
+
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: l'opció «-W %s» és ambigua\n"
+
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: l'opció «%s» és ambigua; possibilitats:"
+
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opció no reconeguda «%c%s»\n"
+
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opció «%c%s» no permet un argument\n"
+
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: l'opció «--%s» requereix un argument\n"
+
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: opció no vàlida -- «%c»\n"
+
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: l'opció requereix un argument -- «%c»\n"
+
+#~ msgid "memory exhausted"
+#~ msgstr "memòria exhaurida"
+
+#~ msgid "cannot create pipe"
+#~ msgstr "no es pot crear la canonada"
+
+#~ msgid "%s subprocess failed"
+#~ msgstr "ha fallat el subprocés %s"
+
+#~ msgid "`"
+#~ msgstr "«"
+
+#~ msgid "'"
+#~ msgstr "»"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Temps d'execució (segons)\n"
+
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "ha fallat _open_osfhandle"
+
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "no es pot restaurar fd %d: ha fallat dup2"
+
+#~ msgid "%s subprocess"
+#~ msgstr "subprocés %s"
+
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "el subprocés %s ha produït el senyal fatal %d"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u alliberats (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u en cau (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u en cau (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u en cau (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma del registre de recompte\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "Histograma de registre de mida\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densitat\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estadístiques de bitset: \n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Execucions acumulades = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "no es pot llegir el fitxer d'estadístiques"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "mida incorrecta de de fitxer d'estadístiques\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "no es pot escriure el fitxer d'estadístiques"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "no es pot obrir el fitxer d'estadístiques per a escriptura"
+
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "falta %s al final del fitxer"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "identificador no vàlida: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "literal de caràcters buit"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "identificador no vàlida: %s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "identificador no vàlida: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "literal de caràcters buit"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "se redefinit el símbol %s"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "ha fallat la supressió de «%s»"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "ha fallat la creació d'un fitxer temporari"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "ha fallat el desament de l'entrada estàndard"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "ha fallat el desament de la sortida estàndard"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "ha fallat l'obertura del fitxer temporari"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "ha fallat el redireccionament de la sortida estàndard del bison cap a un "
+#~ "fitxer temporal"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "ha fallat el redireccionament de la sortida estàndard de m4 cap a un "
+#~ "fitxer temporari"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "ha fallat l'obertura d'un fitxer temporari"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "ha fallat el redireccionament de la sortida estàndard de stdout cap a un "
+#~ "fitxer temporal"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "s'ha interromput el programa subsidiari «%s»"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "no s'ha trobat el programa subsidiari «%s»"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "ha fallat la redirecció de l'entrada estàndard del bison a un fitxer "
+#~ "temporari"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " tipus %d és %s\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opsció «--%s» no permet un argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opció no reconeguda «--%s»\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opció «-W %s» no permet un argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: l'opció «-W %s» requereix un argument\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "temps en %s: %ld.%06ld (%ld%%)\n"
diff --git a/po/da.gmo b/po/da.gmo
index 5cab6d6..740361e 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index bc6e892..09741bb 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1,335 +1,526 @@
 # Danish messages for bison.
-# Copyright © 2001, 2002 Free Software Foundation, Inc.
+# Copyright © 2019 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>, 2015, 2018, 2019.
+#
+# stray -> malplaceret (måske vildfaren)
+# token -> element (ikke symbol?, symbol -> symbol indgår også i oversættelen)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 1.875d\n"
+"Project-Id-Version: bison 3.3.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-04-30 11:15+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "tom regel uden %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "forrang og associativitet for %s kan ikke bruges"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "advarsel"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Fejl ved ind- eller udlæsning"
+msgstr "fejl"
 
-#: src/complain.c:208 src/complain.c:215
-#, fuzzy
+#: src/complain.c:260
 msgid "fatal error"
-msgstr "fatal fejl: "
+msgstr "fatal fejl"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc understøtter ikke %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, 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"
+msgid "deprecated directive: %s, use %s"
+msgstr "forældet direktiv: %s, brug %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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"
+msgid "duplicate directive"
+msgstr "duplikeret direktiv"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "konflikter: %d skift/reducér, %d reducér/reducér\n"
+msgid "duplicate directive: %s"
+msgstr "duplikeret direktiv: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "konflikter:  %d skift/reducér\n"
+msgid "previous declaration"
+msgstr "forrige deklaration"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "konflikter:  %d reducér/reducér\n"
+msgid "only one %s allowed per rule"
+msgstr "kun en %s tilladt per regel"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, fuzzy, 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:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Konflikt mellem regel %d og element %s løstes som reducer"
+
+#: src/conflicts.c:100
+#, fuzzy, 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:602
 #, c-format
 msgid "State %d "
 msgstr "Tilstand %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skift/reducer, %d reducer/reducer\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter: %d skift/reducer\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter: %d reducer/reducer\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "skift/reducer konflikter for regel %d: %d fundet, %d forventet"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "reducer/reducer-konflikter for regel %d: %d fundet, %d forventet"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr kan kun bruges ved GLR-fortolkere"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "skift/reducer konflikter: %d fundet, %d forventet"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d skift/reducer-konflikt"
+msgstr[1] "%d skift/reducer-konflikter"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "reducer/reducer-konflikter: %d fundet, %d forventet"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d reducer/reducer-konflikt"
+msgstr[1] "%d reducer/reducer-konflikter"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "kan ikke åbne filen \"%s\""
+msgstr "%s: kan ikke åbne"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "inddata/uddata-fejl"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "kan ikke lukke fil"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "nægter at overskrive inddatafilen %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "konfliktende uddata til filen %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Prøv med \"%s --help\" for mere information.\n"
+msgid "%s: cannot backup"
+msgstr "%s: kan ikke lave sikkerhedskopi"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Brug: %s [FLAG]... FIL\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d skift/reducer-konflikt"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Prøv med »%s --help« for yderligere information.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Brug: %s [TILVALG]... FIL\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Opret en deterministisk LR- eller generaliseret LR-fortolker (GLR) der\n"
+"anvender LALR(1)-, IELR(1) eller kanonisk LR(1)-fortolkertabeller. "
+"IELR(1)- \n"
+"og kanonisk LR(1)-understøttelse er eksperimentel.\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
+"Tvungne argumenter til lange tilvalg er også krævet for korte tilvalg.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "Det samme er gældende for valgfrie argumenter.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\n"
 "      --print-datadir        output directory containing skeletons and XSLT\n"
-"  -y, --yacc                 emulate POSIX Yacc\n"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
+"\n"
+msgstr ""
+"\n"
+"Operationstilstande:\n"
+"  -h, --help                 vis denne hjælpetekst og afslut\n"
+"  -V, --version              vis versionsinformation og afslut\n"
+"      --print-localedir      vis mappe der indeholder sprogafhængige data\n"
+"                             og afslut\n"
+"      --print-datadir        vis mappe der indeholder skeletter og XSLT\n"
+"                             og afslut\n"
+"  -u, --update               opdater kildegrammatikfilen med rettelser og\n"
+"                             afslut\n"
+"  -y, --yacc                 emuler POSIX Yacc\n"
+"  -W, --warnings[=KATEGORI]  rapporter advarsler fra KATEGORI\n"
+"  -f, --feature[=FUNKTION]   aktiver diverse funktioner\n"
+"\n"
+
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
 "  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
-"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -L, --language=SPROG             specificer uddataprogrammeringssproget\n"
+"  -S, --skeleton=FIL               angiv skeletfilen som skal bruges\n"
+"  -t, --debug                      indstil fortolkeren til fejlsøgning\n"
+"                                   samme som »-Dparse.trace«      --"
+"locations                  aktiver tilstandsberegning\n"
+"  -D, --define=NAVN[=VÆRDI]        svarer til »%define NAVN \"VÆRDI\"«\n"
+"  -F, --force-define=NAVN[=VÆRDI]  overskriv »%define NAVN \"VÆRDI\"«\n"
+"  -p, --name-prefix=PRÆFIKS        tilføj PRÆFIKS for eksterne symboler\n"
+"                                   forældet af »-Dapi.prefix=PRÆFIKS«  -l, --"
+"no-lines                   opret ikke »#line«-direktiver\n"
+"  -k, --token-table                inkluder en tabel over elementnavne\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"      --defines[=FIL]        lav også en teksthovedfil\n"
+"  -d                         på samme måde men kan ikke specificere FIL\n"
+"                             (for POSIX Yacc)\n"
+"  -r, --report=SAGER         lav også detaljer om automaten\n"
+"      --report-file=FIL      skriv rapport til FIL\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[=FIL]          lav også en graf for automaten\n"
+"  -x, --xml[=FIL]            lav også en XML-rapport for "
+"automaten<n                             (XML-skemaet er eksperimentel)\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
+#: src/getargs.c:436
+#, 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"
+msgstr "Rapporter fejl til <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s hjemmeside: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+msgstr "Generel hjælp til GNU-programmer: <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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "Rapporter oversættelsesfejl til <dansk@dansk-gruppen.dk>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "For fuldstændig dokumentation, kør: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Skrevet af Robert Corbett og Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
-msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+msgstr "Ophavsret %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"Dette er et frit program; betingelserne for kopiering kan ses i kilden. Der\n"
+"gives INGEN garanti; selv ikke for SALGBARHED eller EGNETHED FOR ET\n"
+"BESTEMT FORMÅL.\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "flere %s-deklarationer"
+msgstr "flere skeletdeklarationer er ugyldige"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "fejlagtig værdi: %s"
+msgstr "%s: ugyldigt sprog"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "flere %s-deklarationer"
+msgstr "flere sprogdeklarationer er ugyldige"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "manglende operand efter \"%s\""
+msgid "deprecated option: %s, use %s"
+msgstr "forældet direktiv: %s, brug %s"
 
-#: src/getargs.c:749
-#, fuzzy, c-format
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "manglende operand"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "overtallig operand \"%s\""
+msgstr "ekstra operand %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "tom"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatik"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -337,907 +528,885 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Oprettet af %s.\n"
+"// Rapporter fejl til <%s>.\n"
+"// Hjemmeside: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr ""
+msgstr "linjenummeroverløb"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
+msgstr "kolonnenummeroverløb"
+
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "bytenummeroverløb"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
 msgstr ""
 
-#: src/main.c:146
-#, fuzzy
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "regel aldrig reduceret på grund af konflikter"
+msgstr "regel kan ikke bruges i fortolker på grund af konflikter"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "fix-its kan anvendes. Kør igen med tilvalget »--update«."
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "symbol %s redefineret"
+msgstr "%%define variabel %s redefineret"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr ""
+msgstr "forrige definition"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: ikke defineret %%define variabel %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define variabel %s redefineret"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define variabel %s redefineret"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define variabel %s redefineret"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "ugyldig værdi for %%define boolesk variabel %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "ugyldig værdi for %%define variabel %s: %s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "fejlagtig værdi: %s"
+msgstr "accepteret værdi: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "tegnbogstaver kan ikke være ikketerminaler"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "tegnbogstaver kan ikke være ikketerminaler"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "redefinition af elementnummer for %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "manglende identifikator i parameterdeklaration"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " type %d er %s\n"
+msgid "invalid version requirement: %s"
+msgstr "ugyldigt versionskrav: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "kræver bison %s, men har %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Tilstand %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
-msgstr "skift, og gå til tilstand %d\n"
+msgstr "skift, og gå til tilstand %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
-msgstr "gå til tilstand %d\n"
+msgstr "gå til tilstand %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
-msgstr "fejl (ikke-associativ)\n"
+msgstr "fejl (ikkeassociativ)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
-msgstr "reducér med regel %d (%s)"
+msgstr "reducer med regel %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
-msgstr "acceptér"
+msgstr "accepter"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminaler, med regler hvor de forekommer"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
-msgstr "Ikke-terminaler, med regler hvor de forekommer"
+msgstr "Ikketerminaler, med regler hvor de forekommer"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
-msgstr " til venstre:"
+#: src/print.c:416
+msgid "on left:"
+msgstr "til venstre:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " til højre:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "til højre:"
 
-#: src/print.c:510
-#, fuzzy
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "regel aldrig reduceret på grund af konflikter"
+msgstr "Regel kan ikke bruges i fortolker på grund af konflikter"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "flere %s-deklarationer"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "duplikeret symbolnavn for %s ignoreret"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "regel givet for %s som er et element"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "typekonflikt for standardhandling: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr "tom regel for typet ikke-terminal, og ingen handling"
+msgstr "tom regel for typet ikketerminal, og ingen handling"
 
-#: src/reader.c:328
-#, fuzzy, c-format
+#: src/reader.c:334
+#, c-format
 msgid "unused value: $%d"
-msgstr "fejlagtig værdi: %s"
+msgstr "værdi er ikke anvendt: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr ""
+msgstr "fjern indstilling for værdi: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty på regel der ikke er tom"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "tom regel uden %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "element for %%prec er ikke defineret: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "kun en %s tilladt per regel"
+msgid "only midrule actions can be typed: %s"
+msgstr "kun midtregel-handlinger kan indtastes: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr "%s påvirker kun GLR-fortolkere"
+msgstr "%s påvirker kun GLR-fortolkere"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s skal følges af et positivt tal"
+msgstr "%s skal følges af et positivt tal"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc understøtter ikke indtastede midtregel-handlinger"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
-msgstr ""
+msgstr "regel er for lang"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "ingen regler i inddatagrammatikken"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "ingen regler i inddatagrammatikken"
+msgstr "regel ubrugelig i grammatik"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "ikketerminal kan ikke bruges i grammatik: %s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Ikke-terminaler, med regler hvor de forekommer"
+msgstr "Ikketerminaler kan ikke bruges i grammatik"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "ingen regler i inddatagrammatikken"
+msgstr "Terminaler brugt i grammatik"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "ingen regler i inddatagrammatikken"
+msgstr "Regler kan ikke bruges i grammatik"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d ikketerminal kan ikke bruges i grammatik"
+msgstr[1] "%d ikketerminaler kan ikke bruges i grammatik"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, 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"
+msgstr[0] "%d regel kan ikke bruges i grammatik"
+msgstr[1] "%d regler kan ikke bruges i grammatik"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "startsymbolet %s genererer ingen sætninger"
+msgstr "startsymbolet %s udleder ingen sætninger"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+msgstr "malplaceret »%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 ""
-
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "refererer til: %c%s ved %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "betyder sandsynligvis: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", skjuler %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " ved %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", kan ikke tilgås fra midtregel-handling på $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "heltal uden for gyldigshedsområdet: %s"
+msgstr "heltal uden for interval: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "ugyldigt direktiv: %s"
+msgstr "ugyldig reference: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr ""
+msgstr "syntaksfejl efter »%c«, forventer heltal, bogstav, »_«, »[« eller »$«"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "symbol blev ikke fundet i produktion før $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "symbol blev ikke fundet i produktion: %.*s"
 
-#: src/scan-code.l:648
-#, fuzzy, c-format
+#: src/scan-code.l:532
+#, c-format
 msgid "misleading reference: %s"
-msgstr "redefinition af præcedens for %s"
+msgstr "vildledende reference: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "flertydigt argument %s til %s"
+msgstr "tvetydig reference: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "eksplicit type angivet i utypet grammatik"
 
-#: src/scan-code.l:759
-#, fuzzy, c-format
+#: src/scan-code.l:639
+#, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$%d for \"%s\" har ingen erklæret type"
+msgstr "$$ for midtreglen ved $%d for %s har ingen erklæret type"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ for \"%s\" har ingen erklæret type"
+msgstr "$$ for %s har ingen erklæret type"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d for \"%s\" har ingen erklæret type"
+msgstr "$%s for %s har ingen erklæret type"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "flere forekomster af $%d med api.value.automove"
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "Malplaceret \",\" behandlet som blanktegn"
+msgstr "malplaceret »,« behandlet som blanktegn"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "ugyldigt direktiv: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "ugyldigt direktiv: %s"
+msgstr "ugyldig identifikator: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "ugyldigt tegn: %s"
-msgstr[1] "ugyldigt tegn: %s"
+msgstr[0] "ugyldigt tegn"
+msgstr[1] "ugyldige tegn"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "uventet identifikator i navn i parentes: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "en identifikator var ventet"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ugyldigt tegn i navn i parentes"
+msgstr[1] "ugyldige tegn i navn i parentes"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yaccc understøtter ikke strengbogstaver"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "tomt tegnbogstav"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "ekstra tegn i tegnbogstav"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "ugyldigt NUL-tegn: %s"
+msgstr "ugyldigt nummer efter \\-escape: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "ugyldigt tegn: %s"
+msgstr "ugyldigt tegn efter \\-escape: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc understøtter ikke heksadecimale bogstaver"
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "manglende \"%s\" ved slutningen af filen"
+msgstr "manglende %s ved slutningen af filen"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "manglende \"%s\" ved slutningen af linjen"
+msgstr "manglende %s ved slutningen af linjen"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "uafsluttet %s-direktiv i skelet"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "for få argumenter for %s-direktiv i skelet"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "for mange argumenter for %s-direktiv i skelet"
 
-#: src/symlist.c:211
-#, fuzzy, c-format
-msgid "invalid $ value: $%d"
-msgstr "fejlagtig værdi: %s"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc forbyder skråstreger i symbolnavne: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr ""
+msgstr "for mange symboler i inddatagrammatik (grænsen er %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr "gentagen %s-erklæring for %s"
+msgstr "gentagen %s-erklæring for %s"
 
-#: src/symtab.c:164
-#, fuzzy, c-format
+#: src/symtab.c:313
+#, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "gentagen %s-erklæring for %s"
+msgstr "gentagen %s-erklæring for <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "symbol %s redefineret"
+msgid "symbol %s redeclared as a token"
+msgstr "symbolet %s er erklæret igen som et symbol"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
+#, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "symbolet %s er erklæret igen som ikketerminal"
+
+#: src/symtab.c:370
 #, fuzzy, c-format
-msgid "symbol %s redeclared"
-msgstr "symbol %s redefineret"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"symbol %s bruges, men er ikke defineret som et element og har ingen regler"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "redefinition af elementnummer for %s"
-
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbolet %s er erklæret igen"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "ikketerminaler kan ikke gives et eksplicit nummer"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinition af elementnummer for %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "redefinition af elementnummer for %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s kan ikke bruges for type <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "typen <%s> bruges, men er ikke associeret til et symbol"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "ikketerminaler kan ikke gives et strengalias"
+
+#: src/symtab.c:698
+#, 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"
+msgstr "symbol %s bruges mere end en gang som en bogstavelig streng"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "symbol \"%s\" har fået mere end én bogstavelig streng"
+msgstr "symbol %s har fået mere end en bogstavelig streng"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "gentagen typeerklæring for %s"
+msgstr "brugerelementnummer %d gentagen erklæring for %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "gentagen typeerklæring for %s"
+msgstr "forrige erklæring for %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr "startsymbolet %s er udefineret"
+msgstr "startsymbolet %s er ikke defineret"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "startsymbolet %s er et element"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "forrang og associativitet for %s kan ikke bruges"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "forrang for %s kan ikke bruges"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "associativitet for %s kan ikke bruges, brug %%precedence"
 
-#: 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."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "ikketerminal kan ikke bruges i grammatik: %s"
 
-#: lib/bitset_stats.c:261
-#, fuzzy, c-format
-msgid "bad stats file size\n"
-msgstr "Dårlig statistikfilstørrelse.\n"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "forældet direktiv, brug %s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-#, fuzzy
-msgid "cannot write stats file"
-msgstr "Kunne ikke skrive statistikfil."
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Advarselskategorier inkluderer:\n"
+#~ "  »conflicts-sr«      S/R-konflikter (aktiveret som standard)\n"
+#~ "  »conflicts-rr«      R/R-konflikter (aktiveret som standard)\n"
+#~ "  »deprecated«        forældede konstruktioner\n"
+#~ "  »empty-rule«        tomme regler uden %empty\n"
+#~ "  »midrule-values«    usatte eller ubrugte midrule-værdier\n"
+#~ "  »precedence«        ubrugelig forrang og associativitet\n"
+#~ "  »yacc«              inkompatibiliteter med POSIX Yacc\n"
+#~ "  »other«             alle andre advarsler (aktiveret som standard)\n"
+#~ "  »all«               alle advarslerne undtagen »yacc«\n"
+#~ "  »no-CATEGORY«       sluk for advarsler i KATEGORI\n"
+#~ "  »none«              sluk for alle advarsler\n"
+#~ "  »error[=KATEGORI]«  opfat advarsler som fejl\n"
 
-#: lib/bitset_stats.c:292
-#, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Kunne ikke åbne statistikfil for skrivning."
+#~ 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«      færdiggør kerneobjektmængderne med deres afslutninger\n"
+#~ "  »lookahead«    kobl udtrykkeligt fremadkigelementer til objekter\n"
+#~ "  »solved«       beskriv løsninger af skift/reducer-konflikter\n"
+#~ "  »all«          inkluder al ovenstående information\n"
+#~ "  »none«         deaktiver rapporten\n"
 
-#: lib/closeout.c:112
-#, fuzzy
-msgid "write error"
-msgstr "fatal fejl: "
+# http://en.wikipedia.org/wiki/Caret (har den et dansk navn?)
+# a mark (‸, ⁁) placed below the line to indicate a proposed insertion in a printed or written text.
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FUNKTION er en liste over kommaadskilte ord, som kan inkludere:\n"
+#~ "  »caret«, »diagnostics-show-caret«\n"
+#~ "    vis fejl med caret'er\n"
+#~ "  »fixit«, »diagnostics-parseable-fixits«\n"
+#~ "    vis maskinlæsbare rettelser\n"
+#~ "  »syntax-only«\n"
+#~ "    opret ikke en fil\n"
+#~ "  »all«\n"
+#~ "    alle ovenstående\n"
+#~ "  »none«\n"
+#~ "    deaktiver alle ovenstående\n"
+#~ "  "
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Ukendt systemfejl"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "ugyldigt argument %s til %s"
 
-#: 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"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "tvetydigt argument %s til %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Gyldige argumenter er:"
 
-#: 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"
+#~ msgid "write error"
+#~ msgstr "skrivefejl"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Ukendt systemfejl"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, fuzzy, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: ukendt flag \"--%s\"\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: tilvalget »%s%s« er tvetydigt\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"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: tilvalget »%s%s« er tvetydigt. Muligheder:"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, fuzzy, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: ugyldigt flag --%c\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: ukendt tilvalg »%s%s«\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"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget »%s%s« kan ikke bruge argument\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"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: tilvalget »%s%s« kræver et argument\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"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: ugyldigt tilvalg -- »%c«\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"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: tilvalget kræver et argument -- »%c«\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "hukommelsen opbrugt"
+#~ 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "kan ikke oprette datakanal"
 
-#: 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 ""
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s underproces mislykkedes"
 
-# 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?
+# 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 "\""
+#~ msgid "`"
+#~ msgstr "»"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "\""
+#~ msgid "'"
+#~ msgstr "«"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Udførelsestider (sekunder)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Kørselstider (sekunder)"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTALT                :"
+#~ msgid "CPU user"
+#~ msgstr "CPU-bruger"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU-system"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "wall clock"
+#~ msgstr "vægur"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle mislykkedes"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "kan ikke gendanne fd %d: dup2 mislykkedes"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#~ msgid "%s subprocess"
+#~ msgstr "%s underproces"
 
-#~ msgid "state %d"
-#~ msgstr "tilstand %d"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s underproces modtog fatal signal %d"
 
-#~ msgid "warning: "
-#~ msgstr "advarsel: "
+#~ msgid " type %d is %s\n"
+#~ msgstr " type %d er %s\n"
 
-#~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
-#~ msgstr "GNU bison genererer fortolkere til LALR(1)-grammatiker.\n"
+#~ msgid "symbol %s redefined"
+#~ msgstr "symbolet %s er defineret igen"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "fjernelse af »%s« mislykkedes"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "oprettelse af en midlertidig fil mislykkedes"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "kunne ikke gemme standardind"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "kunne ikke gemme standardud"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "åning af midlertidig fil mislykkedes"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr "kunne ikke sende bisons standardud videre til en midlertidig fil"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "kunne ikke sende m4's standardind videre fra en midlertidig fil"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "kunne ikke åbne en midlertidig fil"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "kunne ikke sende m4's standardud videre til en midlertidig fil"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "hjælpeprogrammet »%s« afbrudt"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "hjælpeprogrammet »%s« blev ikke fundet"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "kunne ikke sende bisons standardind videre fra en midlertidig fil"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitmængdeallokeringer, %u frigjort (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitmængdeindstillinger, %u mellemlagrede (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitmængdenulstillinger, %u mellemlagrede (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitmængdetest, %u mellemlagrede (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitmængdelister\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "antalsloghistogram\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "størrelsesloghistogram\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "densitetshistogram\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"
+#~ "Bitset statistics:\n"
+#~ "\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"
+#~ "Bitmængdestatistik:\n"
+#~ "\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 "Accumulated runs = %u\n"
+#~ msgstr "Akkumulerede kørsler = %u\n"
 
-#~ msgid "POSIX forbids declarations in the grammar"
-#~ msgstr "POSIX forbyder deklarationer i grammatikken"
+#~ msgid "cannot read stats file"
+#~ msgstr "kan ikke læse statistikfil"
 
-#~ msgid "Rules never reduced"
-#~ msgstr "Aldrig reducerede regler"
+#~ msgid "bad stats file size\n"
+#~ msgstr "ugyldig statistikfilstørrelse\n"
 
-#~ msgid "useless rule"
-#~ msgstr "ubrugelig regel"
+#~ msgid "cannot write stats file"
+#~ msgstr "kan ikke skrive statistikfil"
 
-#~ msgid "useless nonterminal: %s"
-#~ msgstr "ubrugelig ikke-terminal: %s"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "kan ikke åbne statistikfil for skrivning"
 
-#~ msgid "Useless nonterminals"
-#~ msgstr "Ubrugelige ikke-terminaler"
+#~ msgid " TOTAL                 :"
+#~ msgstr " I ALT                 :"
 
-#~ msgid "Terminals which are not used"
-#~ msgstr "Terminaler som ikke bruges"
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tid i %s: %ld.%06ld (%ld%%)\n"
 
-#~ msgid "Useless rules"
-#~ msgstr "Ubrugelige regler"
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget »--%s« kan ikke bruge argumenter\n"
 
-#~ 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 "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: ukendt tilvalg »--%s«\n"
 
-#~ msgid "%d useless nonterminal"
-#~ msgid_plural "%d useless nonterminals"
-#~ msgstr[0] "%d ubrugelig ikke-terminal"
-#~ msgstr[1] "%d ubrugelige ikke-terminaler"
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: tilvalget »-W %s« tillader ikke et argument\n"
 
-#~ 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"
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: tilvalget »-W %s« kræver et argument\n"
diff --git a/po/de.gmo b/po/de.gmo
index e68df5f..5d2d584 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 76e1a2a..fd5eb36 100644
--- a/po/de.po
+++ b/po/de.po
@@ -2,132 +2,325 @@
 # 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.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2002, 2003, 2004, 2005, 2006, 2008, 2010, 2011, 2012, 2013, 2018.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 3.3\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-04-16 20:05+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "leere Regel ohne %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "nutzloser Vorrang und Assoziativität für %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "Warnung"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "Fehler"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "fataler Fehler"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX-Yacc akzeptiert %s nicht"
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "veraltete Direktive: %s, benutzen Sie %s"
+
+#: src/complain.c:571
+#, c-format
+msgid "duplicate directive"
+msgstr "doppelte Direktive"
+
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "doppelte Direktive: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "vorhergehende Deklaration"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "nur ein %s pro Regel erlaubt"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Zustand %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "Konflikte: %d Schiebe/Reduziere, %d Reduziere/Reduziere\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "Konflikte: %d Schiebe/Reduziere\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "Konflikte: %d Reduziere/Reduziere\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "Schiebe/Reduzier-Konflikte für Regel %d: %d gefunden, %d erwartet"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "Reduzier/Reduzier-Konflikte für Regel %d: %d gefunden, %d erwartet"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr betrifft nur GLR-Parser"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "Schiebe/Reduzier-Konflikte: %d gefunden, %d erwartet"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d Schiebe/Reduzier-Konflikt"
+msgstr[1] "%d Schiebe/Reduzier-Konflikte"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "Reduzier/Reduzier-Konflikte: %d gefunden, %d erwartet"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d Reduzier/Reduzier-Konflikt"
+msgstr[1] "%d Reduzier/Reduzier-Konflikte"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: kann nicht öffnen"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "Eingabe-/Ausgabe-Fehler"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "kann Datei nicht schließen"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "werde die Eingabedatei %s nicht überschreiben"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "widersprüchliche Ausgaben in Datei %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "%s: cannot backup"
+msgstr "%s: kann keine Sicherung anlegen"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d Schiebe/Reduzier-Konflikt"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "„%s --help“ gibt weitere Informationen.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Aufruf: %s [OPTION]... DATEI\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 "Einen deterministischen LR- oder verallgemeinerten LR-Parser (GLR) "
@@ -135,29 +328,31 @@
 "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
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Das gleiche gilt für optionale Argumente.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -166,31 +361,47 @@
 "  -V, --version              Versionsinformation anzeigen und beenden\n"
 "      --print-localedir      Verzeichnis mit Locale-abhängigen Daten "
 "anzeigen\n"
+"                             und beenden\n"
 "      --print-datadir        Verzeichnis mit Skeletten und XSLT anzeigen\n"
+"                             und beenden\n"
+"  -u, --update               Verbesserungen an der Quellgrammatik "
+"vornehmen                             und beenden\n"
 "  -y, --yacc                 POSIX’ Yacc emulieren\n"
 "  -W, --warnings[=KATEGORIE]  Warnungen, die in KATEGORIE fallen, anzeigen\n"
 "  -f, --feature[=FEATURE]    verschiedene Features aktivieren\n"
+"\n"
 
-#: src/getargs.c:329
-#, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -t, --debug                den Parser auf Ablaufverfolgung vorbereiten\n"
+"                             genau wie „-Dparse.trace“\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"
@@ -199,20 +410,20 @@
 "  -l, --no-lines             keine „#line“-Direktiven erzeugen\n"
 "  -k, --token-table          eine Tabelle der Token-Namen mit einschließen\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -227,76 +438,17 @@
 "  -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
+#: src/getargs.c:436
 #, 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
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "Home-Page von %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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/"
@@ -307,31 +459,31 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 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
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Geschrieben von Robert Corbett und Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -340,39 +492,40 @@
 "gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE "
 "ZWECKE.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "mehrfache Skelett-Deklarationen sind ungültig"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: unzulässige Sprache"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 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:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "veraltete Direktive: %s, benutzen Sie %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "fehlender Operand"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "zusätzlicher Operand %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "leer"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatik"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -385,804 +538,920 @@
 "// Homepage: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "Überlauf bei den Zeilennummern"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "Überlauf bei den Spaltennummern"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "Überlauf bei den Zeilennummern"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "Regel nutzlos im Parser wegen Konflikten"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+"Automatische Korrekturen können angewandt werden. Mit „--update“ erneut "
+"starten."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define-Variable %s noch einmal definiert"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: undefinierte %%define-Variable %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define-Variable %s noch einmal definiert"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define-Variable %s noch einmal definiert"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define-Variable %s noch einmal definiert"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, 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
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "akzeptierte Werte: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "Zeichenliterale können keine Nichtterminale sein"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "Zeichenliterale können keine Nichtterminale sein"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "definiere Nutzertokennummer von %s erneut"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "fehlender Bezeichner in Parameterdeklaration"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " Typ %d ist %s\n"
+msgid "invalid version requirement: %s"
+msgstr "ungültige Versionsanforderung: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "schiebe und gehe zu Zustand %d über\n"
+msgid "require bison %s, but have %s"
+msgstr "erfordere bison %s, habe aber %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Zustand %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "schiebe und gehe zu Zustand %d über\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "gehe zu Zustand %d über\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "Fehler (nicht assoziativ)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduziere mit Regel %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "annehmen"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminale und die Regeln, in denen sie verwendet werden"
 
-#: src/print.c:436
+#: src/print.c:391
 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:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " auf der linken Seite:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " auf der rechten Seite:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Regeln nutzlos im Parser wegen Konflikten"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "mehr als eine %s-Deklaration"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "doppelter Symbolname für %s ignoriert"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "Typkonflikt bei Default-Aktion: <%s> != <%s>) "
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "unbenutzter Wert: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nicht gesetzter Wert: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty bei nicht-leerer Regel"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "leere Regel ohne %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "nur ein %s pro Regel erlaubt"
+msgid "only midrule actions can be typed: %s"
+msgstr "nur Aktionen inmitten einer Regel können typisiert sein: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s betrifft nur GLR-Parser"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s muss von positiver Zahl gefolgt sein"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX-Yacc unterstützt keine Aktion inmitten einer Regel"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "Regel ist zu lang"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "Eingabegrammatik enthält keine Regeln"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "Regeln nutzlos in Grammatik"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "Nicht-Terminal nutzlos in Grammatik: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Nicht-Terminale, die in Grammatik nutzlos sind"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Terminale, die in Grammatik unbenutzt sind"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Regeln, die in Grammatik nutzlos sind"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "verweist auf: %c%s bei %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "meinte möglicherweise: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", versteckt dabei %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " bei %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "Ganzzahl außerhalb des Wertebereichs: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "ungültiger Verweis: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr "Syntaxfehler nach ‚%c‘, erwarte Ganzzahl, Buchstabe, ‚_‘, ‚[‘ oder ‚$‘"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "Symbol nicht in Produktion gefunden: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "irreführender Verweis: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "mehrdeutiger Verweis: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "expliziter Typ angegeben und ungetypter Grammatik"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ von %s hat keinen deklarierten Typ"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s von %s hat keinen deklarierten Typ"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "mehrfaches Auftreten von $%d mit api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "überzähliges „,“ als Freiraum betrachtet"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "ungültige Direktive: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "ungültiger Bezeichner: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "ungültiges Zeichen"
 msgstr[1] "ungültige Zeichen"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "ungültiges Null-Zeichen"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "unerwarteter Bezeichner im geklammerten Namen: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "Bezeichner erwartet"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX-Yacc unterstützt keine Zeichenkettenliterale"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "leeres Zeichenliteral"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "ungültige Zahl hinter \\-Flucht: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "ungültiges Zeichen hinter \\-Flucht: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX-Yacc unterstützt keine hexadezimalen Literale"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "fehlendes %s am Ende der Datei"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "fehlendes %s am Ende der Zeile"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "nicht geschlossene Direktive %s im Skelett"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX-Yacc verbietet Bindestriche in Symbolnamen: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s erneute Deklaration für %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s erneute Deklaration für <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "Symbol %s noch einmal definiert"
+msgid "symbol %s redeclared as a token"
+msgstr "Symbol %s als ein Token redeklariert"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "Symbol %s noch einmal deklariert"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "Symbol %s redeklariert als ein Nichtterminal"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "definiere Nutzertokennummer von %s erneut"
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"Symbol %s wird benutzt, ist aber nicht als Token definiert und hat keine "
+"Regel"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "Symbol %s noch einmal deklariert"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "Nichtterminale können nicht mit expliziter Nummer versehen werden"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "definiere Nutzertokennummer von %s erneut"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "definiere Nutzertokennummer von %s erneut"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "nutzloses %s für Typ <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "Typ <%s> wird benutzt, ist aber mit keinem Symbol verknüpft"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+"Nichtterminale können nicht mit einem Zeichenkettenalias versehen werden"
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "Tokennummer %d erneut deklariert für %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "vorhergehende Deklaration für %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "das Startsymbol %s ist undefiniert"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "das Startsymbol %s ist ein Token"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "erneute Deklaration für voreingestellten markierten %%destructor"
+msgid "useless precedence and associativity for %s"
+msgstr "nutzloser Vorrang und Assoziativität für %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "erneute Deklaration für voreingestellten nicht-markierten %%destructor"
+msgid "useless precedence for %s"
+msgstr "nutzloser Vorrang für %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "erneute Deklaration für voreingestellten markierten %%printer"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "nutzlose Assoziativität für %s, benutzen Sie %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "erneute Deklaration für voreingestellten nicht-markierten %%printer"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "Nicht-Terminal nutzlos in Grammatik: %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr "Entfernen von „%s“ fehlgeschlagen"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "veraltete Direktive, benutzen Sie %s"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr "Erstellen einer temporären Datei fehlgeschlagen"
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  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"
+#~ "  „empty-rule“      leere Regeln ohne %empty\n"
+#~ "  „precedence“      nutzloser Vorrang und Assoziativität\n"
+#~ "  „other“           alle anderen Warnungen (standardmäßig an)\n"
+#~ "  „all“             alle Warnungen außer „yacc“\n"
+#~ "  „no-KATEGORIE“    Warnungen in KATEGORIE abschalten\n"
+#~ "  „none“            alle Warnungen abschalten\n"
+#~ "  „error[=KATEGORIE]“ Warnungen als Fehler behandeln\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "Speichern der Standardeingabe fehlgeschlagen"
+#~ 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"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "Speichern der Standardausgabe fehlgeschlagen"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    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"
+#~ "  "
 
-#: 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"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "unzulässiges Argument %s für %s"
 
-#: 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"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "mehrdeutiges Argument %s für %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Gültige Argumente sind:"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "Öffnen einer temporären Datei fehlgeschlagen"
+#~ msgid "write error"
+#~ msgstr "Schreibfehler"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Unbekannter Systemfehler"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "untergeordnetes Programm „%s“ unterbrochen"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: Option „%s%s“ ist mehrdeutig\n"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "untergeordnetes Programm „%s“ nicht gefunden"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: Option „%s%s“ ist mehrdeutig; möglich sind:"
 
-#: 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"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: unbekannte Option „%s%s“\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "unzulässiges Argument %s für %s"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: Option „%s%s“ erlaubt kein Argument\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "mehrdeutiges Argument %s für %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: Option „%s%s“ erfordert ein Argument\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Gültige Argumente sind:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: ungültige Option -- „%c“\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: Option erfordert ein Argument -- „%c“\n"
 
-#: lib/bitset_stats.c:180
-#, c-format
-msgid "%u bitset_sets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_sets, %u zwischengespeichert (%.2f%%)\n"
+#~ msgid "memory exhausted"
+#~ msgstr "Speicher ausgeschöpft"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u zwischengespeichert (%.2f%%)\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "kann Datei nicht schließen"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr "%u bitset_tests, %u zwischengespeichert (%.2f%%)\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "Unterprozess %s fehlgeschlagen"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "`"
+#~ msgstr "„"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "Zähler-Histogramm\n"
+#~ msgid "'"
+#~ msgstr "“"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "Größe-Histogramm\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Ausführungszeiten (Sekunden)"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "Dichte-Histogramm\n"
+#~ msgid "CPU user"
+#~ msgstr "CPU Nutzer"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Bitset-Statistiken:\n"
-"\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU System"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Gesammelte Durchläufe = %u\n"
+#~ msgid "wall clock"
+#~ msgstr "Wanduhr"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "kann Statistik-Datei nicht lesen"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle fehlgeschlagen"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "ungültige Statistik-Datei-Größe\n"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr ""
+#~ "kann Dateideskriptor %d nicht wieder herstellen: dup2 fehlgeschlagen"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "kann Statistik-Datei nicht schreiben"
+#~ msgid "%s subprocess"
+#~ msgstr "Unterprozess %s"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "kann Statistik-Datei nicht zum Schreiben öffnen"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "Unterprozess %s erhielt tödliches Signal %d"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "Schreibfehler"
+#~ msgid " type %d is %s\n"
+#~ msgstr " Typ %d ist %s\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Unbekannter Systemfehler"
+#~ msgid "symbol %s redefined"
+#~ msgstr "Symbol %s noch einmal definiert"
 
-#: 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:"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "Entfernen von „%s“ fehlgeschlagen"
 
-#: 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"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "Erstellen einer temporären Datei fehlgeschlagen"
 
-#: 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"
+#~ msgid "saving stdin failed"
+#~ msgstr "Speichern der Standardeingabe fehlgeschlagen"
 
-#: 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"
+#~ msgid "saving stdout failed"
+#~ msgstr "Speichern der Standardausgabe fehlgeschlagen"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: unbekannte Option „--%s“\n"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "Öffnen der Datei tmpfile fehlgeschlagen"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: unbekannte Option „%c%s“\n"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "Umleiten der Standardausgabe von Bison in die temporäre Datei "
+#~ "fehlgeschlagen"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: ungültige Option -- „%c“\n"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "Umleiten der Standardeingabe von m4 aus der temporären Datei "
+#~ "fehlgeschlagen"
 
-#: 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"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "Öffnen einer temporären Datei fehlgeschlagen"
 
-#: 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"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "Umleiten der Standardausgabe von m4 in eine temporäre Datei fehlgeschlagen"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "untergeordnetes Programm „%s“ unterbrochen"
 
-#: 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"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "untergeordnetes Programm „%s“ nicht gefunden"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "Speicher ausgeschöpft"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "Umleiten der Standardeingabe von Bison aus der temporären Datei "
+#~ "fehlgeschlagen"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u freigegeben (%.2f%%).\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 "Unterprozess %s fehlgeschlagen"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u zwischengespeichert (%.2f%%)\n"
 
-#. 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 "„"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u zwischengespeichert (%.2f%%)\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "“"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u zwischengespeichert (%.2f%%)\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Ausführungszeiten (Sekunden)\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " ZUSAMMEN              :"
+#~ msgid "count log histogram\n"
+#~ msgstr "Zähler-Histogramm\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "Größe-Histogramm\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle fehlgeschlagen"
+#~ msgid "density histogram\n"
+#~ msgstr "Dichte-Histogramm\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "kann Dateideskriptor %d nicht wieder herstellen: dup2 fehlgeschlagen"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset-Statistiken:\n"
+#~ "\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "Unterprozess %s"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Gesammelte Durchläufe = %u\n"
 
-#: 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 "cannot read stats file"
+#~ msgstr "kann Statistik-Datei nicht lesen"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "ungültige Statistik-Datei-Größe\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "kann Statistik-Datei nicht schreiben"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "kann Statistik-Datei nicht zum Schreiben öffnen"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " ZUSAMMEN              :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "unzulässiger $-Wert: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: Option „--%s“ erlaubt kein Argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: unbekannte Option „--%s“\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: Option „-W %s“ erlaubt kein Argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: Option „-W %s“ erfordert ein Argument\n"
+
+#~ msgid "empty"
+#~ msgstr "leer"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "ein ‚;‘ könnte am Ende von Aktionscode nötig sein"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "zukünftige Versionen von Bison werden das ‚;‘ nicht hinzufügen"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "Benutzung von YYFAIL, was veraltet ist und bald entfernt wird"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "erneute Deklaration für voreingestellten markierten %%destructor"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr ""
+#~ "erneute Deklaration für voreingestellten nicht-markierten %%destructor"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "erneute Deklaration für voreingestellten markierten %%printer"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "erneute Deklaration für voreingestellten nicht-markierten %%printer"
 
 #~ msgid "state %d"
 #~ msgstr "Zustand %d"
@@ -1239,9 +1508,6 @@
 #~ 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"
 
@@ -1281,9 +1547,6 @@
 #~ 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"
 
diff --git a/po/el.gmo b/po/el.gmo
index 3405823..9ec88bf 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 50b4d65..c613cf5 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,164 +1,361 @@
-# translation of bison-2.3b.po to Greek
+# translation of bison 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.
+# Lefteris Dimitroulakis <ledimitro@gmail.com>, 2008, 2013, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-2.4\n"
+"Project-Id-Version: bison-3.3.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-04-30 15:11+0200\n"
+"Last-Translator: Lefteris Dimitroulakis <ledimitro@gmail.com>\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-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=( n !=1);\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 2.0\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "κενός κανόνας χωρίς κενό %%"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "άχρηστη προτεραιότητα και προσεταιριστικότητα για %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "προειδοποίηση"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "σφάλμα I/O"
+msgstr "σφάλμα"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "μοιραίο σφάλμα"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr "Το POSIX Yacc δεν υποστηρίζει %s"
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "οδηγία υπό κατάργηση: %s, χρησιμοποίησε %s"
+
+#: src/complain.c:571
+#, c-format
+msgid "duplicate directive"
+msgstr "ταυτόσημη οδηγία"
+
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "ταυτόσημη οδηγία: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "προηγούμενη δήλωση"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "μόνο ένα %s ανά κανόνα επιτρέπεται"
+
+#: src/conflicts.c:81
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
 msgstr ""
-"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
-"ως ολίσθηση"
+"Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε ως "
+"ολίσθηση"
 
-#: src/conflicts.c:86
-#, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
+#: src/conflicts.c:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
 msgstr ""
-"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
-"ως ελάττωση"
+"Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε ως "
+"ελάττωση"
 
-#: src/conflicts.c:94
-#, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
+#: src/conflicts.c:100
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
 msgstr ""
-"    Η σύγκρουση μεταξύ του κανόνα %d και της λεκτικής μονάδας %s επιλύθηκε "
-"ως σφάλμα"
+"Η σύγκρουση μεταξύ του κανόνα %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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Κατάσταση %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "συγκρούσεις: %d ολίσθηση/ελάττωση, %d ελάττωση/ελάττωση\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "συγκρούσεις: %d ολίσθηση/ελάττωση\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "συγκρούσεις: %d ελάττωση/ελάττωση\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "shift/reduce συγκρούσεις για κανόνα %d: βρέθηκαν %d, αναμενόταν %d"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "reduce/reduce συγκρούσεις για κανόνα %d: βρέθηκαν %d, αναμενόταν %d"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr έχει εφαρμογή μόνο σε συντακτικούς αναλυτές GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] "ανέμενα %d σύγκρουση ολίσθηση/ελάττωση"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "shift/reduce συγκρούσεις: βρέθηκαν %d, αναμενόταν %d"
+
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d σύγκρουση ολίσθηση/ελάττωση"
 msgstr[1] "ανέμενα %d συγκρούσεις ολίσθηση/ελάττωση"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] "ανέμενα %d σύγκρουση ελάττωση/ελάττωση"
-msgstr[1] "ανέμενα %d συγκρούσεις ελάττωση/ελάττωση"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "reduce/reduce συγκρούσεις: βρέθηκαν %d, αναμενόταν %d"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d σύγκρουση ελάττωση/ελάττωση"
+msgstr[1] "%d συγκρούσεις ελάττωση/ελάττωση"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "αδυναμία ανοίγματος του αρχείου «%s»"
+msgstr "%s: αδυναμία ανοίγματος"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "σφάλμα εισόδου/εξόδου"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "δεν μπορώ να κλείσω το αρχείο"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr "άρνηση γραψίματος πάνω στο αρχείο εισόδου %s"
+msgstr "άρνηση εγγραφής πάνω στο αρχείο εισόδου %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "αντικρουόμενες έξοδοι στο αρχείο %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "%s: cannot backup"
+msgstr "%s: αδυναμία δημιουργίας αντιγράφου ασφαλείας"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d σύγκρουση ολίσθηση/ελάττωση"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Δοκίμασε «%s --help» για περισσότερες πληροφορίες.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Χρήση: %s [ΕΠΛΟΓΕΣ]... ΑΡΧΕΙΟ\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 msgid ""
 "Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"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
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 "Υποχρεωτικά ορίσματα σε μακρές επιλογές είναι υποχρεωτικά επίσης και στις "
 "κοντές.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Το ίδιο ισχύει και για τα μη υποχρεωτικά ορίσματα.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -166,56 +363,69 @@
 "  -h, --help                 εμφάνιση αυτής εδώ της βοήθειας κι έξοδος\n"
 "  -V, --version              πληροφορίες έκδοσης κι έξοδος\n"
 "      --print-localedir      ο κατάλογος με τα δεδομένα των locale\n"
-"      --print-datadir        ο κατάλογος με σκελετούς και XSLT\n"
+"      --print-datadir        ο κατάλογος με σκελετούς και XSLT κι έξοδος\n"
+"  -u, --update      εφαρμογή διορθώσεων στο αρχείο γραμματικής κι έξοδος\n"
 "  -y, --yacc                 emulate POSIX Yacc\n"
 "  -W, --warnings=[ΚΑΤΗΓΟΡΙΑ]  παρουσιάζει τις προειδοποιήσεις που ανήκουν "
 "στη ΚΑΤΗΓΟΡΙΑ\n"
+"  -f, --feature[=FEATURES]  ενεργοποίηση διαφόρων features\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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          συμπεριλαμβάνει πίνακα ονομάτων λεκτικών "
+"  -L, --language=LANGUAGE   καθορίζει τη γλώσσα προγραμματισμού\n"
+"  -S, --skeleton=FILE              καθορίζει τον προς χρήση σκελετό\n"
+"  -t, --debug                      ο αναλυτής μπορεί να δώσει τη θέση "
+"σφάλματος\n"
+"                                   το ίδιο με «-Dparse.trace»\n"
+"      --locations        ενεργοποίηση υποστήριξης θέσεως\n"
+"  -D, --define=NAME[=VALUE]        ανάλογο του «%define NAME \"VALUE\"»\n"
+"  -F, --force-define=NAME[=VALUE]  override '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIX    πρόθεση του PREFIX στα εξωτερικά σύμβολα\n"
+"                              προς αντικατάσταση από «-Dapi.prefix=PREFIX»\n"
+"  -l, --no-lines            μη δημιουργήσεις οδηγίες «#line»\n"
+"  -k, --token-table      να συμπεριληφθεί πίνακας με ονόματα λεκτικών "
 "μονάδων\n"
-"\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -228,104 +438,50 @@
 "  -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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"Αναφορά σφαλμάτων σε <%s>.\n"
+msgstr "Αναφορά σφαλμάτων σε <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s home page: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "Αναφορά σφαλμάτων μετάφρασης <http://translationproject.org/team/>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Για πλήρη τεκμηρίωση δώσε: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Γράφτηκε από τους Robert Corbett και Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -333,871 +489,754 @@
 "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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "πολλαπλές δηλώσεις σκελετού είναι μη έγκυρες"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "μη έγκυρη γλώσσα `%s'"
+msgstr "%s: μη έγκυρη γλώσσα"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "πολλαπλές δηλώσεις γλώσσας είναι μη έγκυρες"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "λείπει τελεστέος μετά από «%s»"
+msgid "deprecated option: %s, use %s"
+msgstr "οδηγία υπό κατάργηση: %s, χρησιμοποίησε %s"
 
-#: src/getargs.c:749
-#, fuzzy, c-format
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "λείπει τελεστέος"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "επί πλέον τελεστέος «%s»"
+msgstr "επί πλέον τελεστέος %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "κενό"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Γραμματική"
 
-#: src/graphviz.c:45
-#, c-format
+#: src/graphviz.c:46
+#, fuzzy, c-format
 msgid ""
 "// Generated by %s.\n"
 "// Report bugs to <%s>.\n"
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"\n"
+"// Generated by %s.\n"
+"// Αναφορά σφαλμάτων στο <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "υπερχείλιση αριθμού γραμμών"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "υπερχείλιση αριθμού στηλών"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "υπερχείλιση byte number"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "ο κανόνας είναι άχρηστος στον αναλυτή λόγω συγκρούσεων"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "fix-its μπορεί να εφαρμοστεί.  Ξανατρέξε με την επιλογή '--update'."
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "το σύμβολο %s ανακαθορίστηκε"
+msgstr "%%define variable %s redefined"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr "προηγούμενη δήλωση"
+msgstr "προηγούμενος ορισμός"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: ακαθόριστο %%καθόρισε τη μεταβλητή %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define variable %s redefined"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define variable %s redefined"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define variable %s redefined"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "μη έγκυρη τιμή για %%καθόρισε τη μεταβλητή μπουλ %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "μη έγκυρη τιμή για %%καθόρισε τη μεταβλητή %s: %s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "μη χρησιμοποιούμενη τιμή: $%d"
+msgstr "αποδεκτή τιμή: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "character literals δεν μπορεί να είναι nonterminals"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "character literals δεν μπορεί να είναι nonterminals"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "ορισμός ξανά του αριθμού λεκτικής μονάδας του %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "το όνομα λείπει στη δήλωση παραμέτρου"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr "ο τύπος %d είναι %s\n"
+msgid "invalid version requirement: %s"
+msgstr "invalid version requirement: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "απαιτεί bison %s, αλλά διαθέτει %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Κατάσταση %d "
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "ολίσθηση, και μετάβαση στη κατάσταση %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "πήγαινε στην κατάσταση %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "σφάλμα (μη προσεταιριστικό)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "ελάττωση με χρήση του κανόνα %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "αποδοχή"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Τερματικά σύμβολα, με κανόνες όπου εμφανίζονται"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Μη τερματικά σύμβολα, με κανόνες όπου εμφανίζονται"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+msgid "on left:"
 msgstr "στα αριστερά:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+msgid "on right:"
 msgstr "στα δεξιά:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Κανόνες άχρηστοι στον αναλυτή λόγω συγκρούσεων"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "πολλαπλές δηλώσεις του %s"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr ""
-"σύγκρουση παραγόμενου τύπου στη συνάρτηση συγχώνευσης «%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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "διπλό όνομα συμβόλου για %s αγνοήθηκε"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "κανόνας δοσμένος για %s, που είναι λεκτική μονάδα"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "σύγκρουση τύπων στην προεπιλεγμένη ενέργεια: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "κενός κανόνας για μη τερματικό σύμβολο με τύπο, και ουδεμία ενέργεια"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "μη χρησιμοποιούμενη τιμή: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "μη καθορισμένη τιμή: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%κενός ή μη κενός κανόνας"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "κενός κανόνας χωρίς κενό %%"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "λεκτική μονάδα για %%prec δεν είναικαθορισμένη: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "μόνο ένα %s ανά κανόνα έχει επιτραπεί"
+msgid "only midrule actions can be typed: %s"
+msgstr "only midrule actions can be typed: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s επηρεάζει μόνο αναλυτές GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s πρέπει να ακολουθείται από θετικό αριθμό"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "Το POSIX Yacc δεν υποστηρίζει typed midrule actions"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
-msgstr "κανόνας πολύ επιμήκης"
+msgstr "κανόνας πολύ μεγάλος"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "γραμματική εισόδου χωρίς κανόνες"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "άχρηστος κανόνας στη γραμματική"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "μη τερματικό σύμβολο άχρηστο στη γραμματική: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Μη τερματικά σύμβολα άχρηστα στη γραμματική"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Τερματικά σύμβολα μη χρησιμοποιούμενα στη γραμματική"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Άχρηστοι κανόνες στη γραμματική"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, c-format
-msgid "use of YYFAIL, which is deprecated and will be removed"
-msgstr ""
+msgid "stray '%s'"
+msgstr "stray '%s'"
 
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "refers to: %c%s at %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "πιθανή σημασία: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", απόκρυψη %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr "σε %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", cannot be accessed from midrule action at $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "ακέραιος εκτός ορίων: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "μη έγκυρη οδηγία: %s"
+msgstr "μη έγκυρη αναφορά: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"συντακτικό σφάλμα μετά «%c», αναμενόταν ακέραιος, γράμμα, «_», «[», ή «$»"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "σύμβολο δεν βρέθηκε στην παραγωγή πριν $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "σύμβολο δεν βρέθηκε στην παραγωγή: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "παραπλανητική αναφορά: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "ασαφές όρισμα %s για %s"
+msgstr "διφορούμενη αναφορά: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "ρητή δήλωση τύπου δόθηκε σε γραμματική χωρίς τύπους"
 
-#: src/scan-code.l:759
-#, fuzzy, c-format
+#: src/scan-code.l:639
+#, 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
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ του «%s» δεν έχει δηλωμένο τύπο"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d του «%s» δεν έχει δηλωμένο τύπο"
+msgstr "$%s του %s δεν έχει δηλωμένο τύπο"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "πολλαπλές παρουσίες $%d με api.value.automove"
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
 msgstr "μοναχικό « , » θεωρήθηκε ως λευκό διάστημα"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "μη έγκυρη οδηγία: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
 msgstr "μη έγκυρη οδηγία: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "μη έγκυρος χαρακτήρας: %s"
-msgstr[1] "μη έγκυρος χαρακτήρας: %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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "μη αναμενόμενο identifier στο όνομα εντός αγκυλών: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "αναμενόταν identifier"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "μη έγκυρος χαρακτήρας: %s"
+msgstr[1] "μη έγκυροι χαρακτήρες: %s"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "Το POSIX Yacc δεν υποστηρίζει string literals"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "κενό character literal"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "έξτρα χαρακτήρες σε character literal"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "μη έγκυρος μηδενικός χαρακτήρας: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "μη έγκυρος χαρακτήρας: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "Το POSIX Yacc δεν υποστηρίζει δεκαεξαδικά literals"
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
 msgstr "στο τέλος του αρχείου λείπει «%s»"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
 msgstr "στο τέλος της γραμμής λείπει «%s»"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "unclosed %s οδηγία στο σκελετό"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "πολύ λίγα ορίσματα για την οδηγία %s στο σκελετό"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "πάρα πολλά ορίσματα για την οδηγία %s στο σκελετό"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "τιμή $ μη έγκυρη: $%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc απαγορεύει τις παύλες στα ονόματα συμβόλων: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "πάρα πολλά σύμβολα στη γραμματική εισόδου (το όριο είναι %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "δήλωση ξανά του %s για %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "δήλωση ξανά του %s για <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "το σύμβολο %s ανακαθορίστηκε"
+msgid "symbol %s redeclared as a token"
+msgstr "το σύμβολο %s ξαναδηλώθηκε ως λεκτική μονάδα"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "το σύμβολο %s ξαναδηλώθηκε"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "το σύμβολο %s ξαναδηλώθηκε ως nonterminal"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "ορισμός ξανά του αριθμού λεκτικής μονάδας του %s"
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"το σύμβολο %s χρησιμοποιείται, αλλά δεν καθορίζεται ως λεκτική μονάδα και "
+"δεν διαθέτει κανόνες"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
 msgstr ""
 "το σύμβολο %s χρησιμοποιείται, αλλά δεν καθορίζεται ως λεκτική μονάδα και "
 "δεν διαθέτει κανόνες"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "το σύμβολο %s ξαναδηλώθηκε"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "nonterminals cannot be given an explicit number"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "ορισμός ξανά του αριθμού λεκτικής μονάδας του %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "ορισμός ξανά του αριθμού λεκτικής μονάδας του %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "άχρηστο %s για τύπο <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+"το σύμβολο %s χρησιμοποιείται, αλλά δεν καθορίζεται ως λεκτική μονάδα και "
+"δεν\n"
+" διαθέτει κανόνες"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "nonterminals cannot be given a string alias"
+
+#: src/symtab.c:698
+#, c-format
 msgid "symbol %s used more than once as a literal string"
 msgstr ""
 "το σύμβολο «%s» χρησιμοποιήθηκε περισσότερες από μια φορές ως κυριολεκτικό "
 "αλφαριθμητικό"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr " το σύμβολο «%s» έδωσε περισσότερα του ενός κυριολεκτικά αλφαριθμητικά"
+msgstr "το σύμβολο «%s» έδωσε περισσότερα του ενός κυριολεκτικά αλφαριθμητικά"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "δήλωση ξανά του %s για %s"
+msgstr "δήλωση ξανά του αριθμού λεκτικής μονάδας %d για %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "προηγούμενη δήλωση"
+msgstr "προηγούμενη δήλωση για %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "το σύμβολο εκκίνησης %s δεν είναι καθορισμένο"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "το σύμβολο εκκίνησης  %s είναι λεκτική μονάδα"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "δήλωση ξανά του προεπιλεγμένου καταστροφέα %%"
+msgid "useless precedence and associativity for %s"
+msgstr "άχρηστη προτεραιότητα και προσεταιριστικότητα για %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "δήλωση ξανά του προεπιλεγμένου καταστροφέα %%"
+msgid "useless precedence for %s"
+msgstr "άχρηστη προτεραιότητα για %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "άχρηστη προσεταιριστικότητα για %s, χρήση προτεραιότητας %%"
 
 #, fuzzy
-#~ msgid "stray '@'"
-#~ msgstr "μοναχικό «@»"
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "μη τερματικό σύμβολο άχρηστο στη γραμματική: %s"
+
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "οδηγία υπό κατάργηση, χρησιμοποίησε %s"
 
 #~ msgid ""
-#~ "Generate LALR(1) and GLR parsers.\n"
-#~ "\n"
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
 #~ msgstr ""
-#~ "Δημιουργία αναλυτών LALR(1) και GLR.\n"
-#~ "\n"
+#~ "Οι κατηγορίες προειδοποίησης περιλαμβάνουν:\n"
+#~ "  'conflicts-sr'      συγκρούσεις S/R (προεπιλογή)\n"
+#~ "  'conflicts-rr'      συγκρούσεις R/R (προεπιλογή)\n"
+#~ "  'deprecated'        καταργημένοι\n"
+#~ "  'empty-rule'       κενοί κανόνες χωρίς %empty\n"
+#~ "  'midrule-values'  μη καθορισμένες ή μη χρησιμοποιούμενες midrule "
+#~ "values\n"
+#~ "  'precedence'        άχρηστη προτεραιότητα και προσεταιριστικότητα\n"
+#~ "  'other'             όλες οι άλλες προειδοποιήσεις)\n"
+#~ "  'yacc'            ασυμβατότητες με το POSIX Yacc\n"
+#~ "  'other'    όλες οι άλλες προειδοποιήσεις (προεπιλογή)  "
+#~ "'all'               όλες οι προειδοποιήσεις εκτός «yacc»\n"
+#~ "  'no-CATEGORY'       απενεργοποίηση προειδοποιήσεων στη CATEGORY\n"
+#~ "  'none'              γενική απενεργοποίηση προειδοποιήσεων\n"
+#~ "  'error[=CATEGORY]'  θεωρεί τις προειδοποιήσεις ως σφάλματα\n"
 
-#~ msgid "invalid escape sequence: %s"
-#~ msgstr "μη έγκυρη ακολουθία διαφυγής: %s"
+#~ 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"
 
-#~ 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 ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FEATURES είναι λίστα λέξεων χωριζόμενων από κόμματα που μπορεί να "
+#~ "περιλαμβάνουν:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    εμφάνιση σφαλμάτων με carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    εμφάνιση machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    μην δημιουργήσεις αρχείο\n"
+#~ "  'all'\n"
+#~ "    όλα τα παραπάνω\n"
+#~ "  'none'\n"
+#~ "    απενεργοποίηση όλων των παραπάνω\n"
+#~ "  "
diff --git a/po/eo.gmo b/po/eo.gmo
index 742d9f7..cca0b31 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 88fa298..bf89b5d 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,191 +1,403 @@
 # Esperanto translation
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2012, 2013, 2018, 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bison package.
-# Felipe Castro <fefcas@gmail.com>, 2012.
+# Felipe Castro <fefcas@gmail.com>, 2012, 2013, 2018, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 3.3.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-05-01 10:48-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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 2.0.7\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "vaka regulo sen %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "neutila prioritato kaj asocieco por %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "averto"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "eraro"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "neriparebla eraro"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc ne subtenas %s"
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "evitinda instrukcio: %s, uzu %s"
+
+#: src/complain.c:571
+#, c-format
+msgid "duplicate directive"
+msgstr "duobligita instrukcio"
+
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "duobligita instrukcio: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "antaŭa deklaro"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "nur po unu %s por regulo estas permesata"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
+#, c-format
+msgid "State %d "
+msgstr "Stato %d "
+
+#: src/conflicts.c:605
 #, c-format
 msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
 msgstr "konfliktoj: %d ŝovo/redukto, %d redukto/redukto\n"
 
-#: src/conflicts.c:495
+#: src/conflicts.c:608
 #, c-format
 msgid "conflicts: %d shift/reduce\n"
 msgstr "konfliktoj: %d ŝovo/redukto\n"
 
-#: src/conflicts.c:497
+#: src/conflicts.c:610
 #, c-format
 msgid "conflicts: %d reduce/reduce\n"
 msgstr "konfliktoj: %d redukto/redukto\n"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:645
 #, c-format
-msgid "State %d "
-msgstr "Stato %d"
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konfliktoj de ŝovo/redukto por regulo %d: %d trovitaj, %d atenditaj"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konfliktoj de redukto/redukto por regulo %d: %d trovitaj, %d atenditaj"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr aplikeblas nur al analiziloj GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "konfliktoj de ŝovo/redukto: %d trovitaj, %d atenditaj"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d konflikto de ŝovo/redukto"
+msgstr[1] "%d konfliktoj de ŝovo/redukto"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "konfliktoj de redukto/redukto: %d trovitaj, %d atenditaj"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "estis atendata %d konflikto de redukto/redukto"
+msgstr[1] "estis atendataj %d konfliktoj de redukto/redukto"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: ne eblas malfermi"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "enig/eliga eraro"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "ne eblas fermi dosieron"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "ni rifuzas anstataŭigi la enigan dosieron %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "konfliktantaj eligoj al dosiero %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Provu '%s --help' por pli da informo.\n"
+msgid "%s: cannot backup"
+msgstr "%s: ne eblas sekurkopii"
 
-#: 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"
+#: src/getargs.c:173
+msgid "colorize the output"
 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:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d konflikto de ŝovo/redukto"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Provu '%s --help' por pli da informo.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uzmaniero: %s [MODIFILO]... DOSIERO\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Generi determinecan LR aŭ ĝeneralan LR (GLR) analizilon aplikante\n"
+"analiz-tabelojn LALR(1), IELR(1), aŭ kanonan LR(1).  Subteno al\n"
+"IELR(1) kaj kanona LR(1) estas eksperimenta.\n"
+
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "La samo estas vero por malnepraj argumentoj.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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 "
+"  -h, --help                 montri tiun ĉi helpon kaj eliri\n"
+"  -V, --version              montri versi-informon kaj eliri\n"
+"      --print-localedir      montri dosierujon enhavantan lokaĵar-dependan "
 "datumaron\n"
-"      --print-datadir        eligi dosieron enhavantan skeletojn kaj XSLT\n"
+"                             kaj eliri\n"
+"      --print-datadir        montri dosieron enhavantan skeletojn kaj XSLT\n"
+"                             kaj eliri\n"
+"  -u, --update               apliki riparojn al la fonta gramatika dosiero "
+"kaj eliri\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
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -t, --debug                      ekipigi la analizilon por spursekvado\n"
+"                                   same ol '-Dparse.trace'\n"
+"      --locations                  ebligi subtenon al lokigoj\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 "
@@ -193,22 +405,22 @@
 "                                   anstataŭiginde per '-Dapi."
 "prefix=PREFIKSO'\n"
 "  -l, --no-lines                   ne generi instrukciojn '#line'\n"
-"  -k, --token-table                inkluzivigi tabelon de ĵetono-nomoj\n"
+"  -k, --token-table                inkluzivigi tabelon de ĵeton-nomoj\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -216,82 +428,24 @@
 "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"
+"  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr "Raportu misojn al <%s>.\n"
+msgstr "Raportu program-misojn al <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s hejmpaĝo: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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"
@@ -301,29 +455,30 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr "Raportu mistradukojn al <http://translationproject.org/team/>.\n"
+msgstr ""
+"Raportu traduk-misojn al <http://translationproject.org/team/eo.html>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "Por la tuta dokumentaro, lanĉu: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU-a Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Verkita de Robert Corbett kaj Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Kopirajto (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -332,39 +487,40 @@
 "Ekzistas NENIU\n"
 "garantio; eĉ ne por MERKATIGO aŭ TAŬGO POR PRIVATA CELO.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "multoblaj deklaroj de skeleto ne estas valide"
+msgstr "multoblaj deklaroj de skeleto estas malvalida"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: malvalida lingvo"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "multoblaj deklaroj de lingvo ne estas valide"
+msgstr "multoblaj deklaroj de lingvo estas malvalida"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "evitinda instrukcio: %s, uzu %s"
+
+#: src/getargs.c:850
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: mankas argumento"
+msgid "missing operand"
+msgstr "mankas argumento"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "kroma argumento %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "malplena"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramatiko"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -373,802 +529,909 @@
 "\n"
 msgstr ""
 "// Generita de %s.\n"
-"// Raportu misojn al <%s>.\n"
+"// Raportu program-misojn al <%s>.\n"
 "// Hejmpaĝo: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "troa lini-numero"
 
-#: src/location.c:95
+#: src/location.c:152
 #, 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/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "troa bajt-numero"
 
-#: src/muscle-tab.c:450
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
+msgid "rule useless in parser due to conflicts"
+msgstr "regulo neutilas en analizilo pro konfliktoj"
+
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "fix-its povas esti aplikata. Relanĉu kun la modifilo '--update'."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
-msgstr "'%%define'-variablo %s estis redifinata"
+msgstr "la '%%define'-variablo %s estis redifinata"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: nedifinita '%%define'-variablo %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "la '%%define'-variablo %s estis redifinata"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "la '%%define'-variablo %s estis redifinata"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "la '%%define'-variablo %s estis redifinata"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr "malvalida valoro por bulea '%%define'-variablo %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "malvalida valoro por '%%define'-variablo %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "akceptita valoro: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "signaj literaloj ne povas esti sintaksaj variabloj"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "signaj literaloj ne povas esti sintaksaj variabloj"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "redifinado de uzant-ĵetona nombro da %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "mankas identigilon en deklaro de parametro"
+msgstr "mankas identigilo en deklaro de parametro"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tipo %d estas %s\n"
+msgid "invalid version requirement: %s"
+msgstr "malvalida versio-postulo: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "ŝovi, kaj iri al stato %d\n"
+msgid "require bison %s, but have %s"
+msgstr "postulo de bison %s, tamen estas %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Stato %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "ŝovi, kaj iri al stato %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "iri al stato %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "eraro (ne-asociiga)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redukti uzante regulon %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "akcepti"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminaloj, kun reguloj kie ili aperas"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "maldekstre:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+msgid "on right:"
 msgstr " dekstre:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "Reguloj neutilaj en analizilo pro konfliktoj"
+msgstr "Reguloj neutilas en analizilo pro konfliktoj"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "multoblaj deklaroj %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "duobligita simbol-nomo por %s estas preteratentita"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "regulo celanta %s, kio estas ĵetono"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "kolizio de tipo je la apriora ago: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr "malplena regulo por tipigita neterminalo, kaj neniu ago"
+msgstr "vaka regulo por tipigita neterminalo, kaj neniu ago"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "neuzita valoro: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nedifinita valoro"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty ĉe ne-vaka regulo"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "vaka regulo sen %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "nur po unu %s permesate por regulo"
+msgid "only midrule actions can be typed: %s"
+msgstr "nur agoj midrule povas esti tipigitaj: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s influas nur analizilojn GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s devas estis sekvata de pozitiva numero"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc ne subtenas tipigitaj agoj midrule"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "regulo tro longas"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "neniu regulo en eniga gramatiko"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "regulo neutila en gramatiko"
+msgstr "regulo neutilas en gramatiko"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr "neterminalo neutila en gramatiko: %s"
+msgstr "neterminalo neutilas en gramatiko: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Neterminaloj neutilaj en gramatiko"
+msgstr "Neterminaloj neutilas en gramatiko"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Terminaloj neuzitaj en gramatiko"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "Reguloj neutilaj en gramatiko"
+msgstr "Reguloj neutilas en gramatiko"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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"
+msgstr[0] "%d neterminalo neutilas en gramatiko"
+msgstr[1] "%d neterminaloj neutilas en gramatiko"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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"
+msgstr[0] "%d regulo neutilas en gramatiko"
+msgstr[1] "%d reguloj neutilas en gramatiko"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "referencas al: %c%s ĉe %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "eble signifis: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", kaŝanta %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " ĉe %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ", ne povas esti alirata el mez-regula ago ĉe $%d"
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", ne povas esti alirata el ago midrule ĉe $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "entjero for de limo: %s"
+msgstr "entjero for de intervalo: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "malvalida referenco: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
-"sintaksa eraro post '%c', estas atendata entjero, litero, '_', '[' aŭ '$'"
+"sintaks-eraro post '%c', estas atendata entjero, litero, '_', '[' aŭ '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "simbolo ne trovita en produktado: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "trompiga referenco: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "plursenca referenco: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr "malimplicita tipo liverita en netipigita gramatiko"
+msgstr "malimplica tipo liverita en netipigita gramatiko"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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 "
+msgstr "$$ por la midrule ĉe $%d de %s havas neniun deklaritan tipon"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ de %s havas neniun deklaritan tipon"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s de %s havas neniun deklaritan tipon"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "multoblaj okazoj de $%d kun api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr "perdita ',' traktita kiel blank-spacon"
+msgstr "perdita ',' traktita kiel blank-spaco"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "malvalida instrukcio: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "malvalida identigilo: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "malvalida signo"
 msgstr[1] "malvalidaj signoj"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "malvalida nul-signo"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "neatendata identigilo en rekt-krampigita nomo: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "identigilo estas atendata"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc ne subtenas ĉenajn literalojn"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
-msgstr "malplena signo-litero"
+msgstr "vaka signo-litero"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "malvalida numero post \\-eskapo: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "malvalida signo post \\-eskapo: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc ne subtenas deksesumajn literalojn"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "mankas %s ĉe la dosierfino"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "mankas %s ĉe la linifino"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "nefermita instrukcio %s en skeleto"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX Yacc malpermesas strekojn en simbol-nomoj: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "tro multaj simbolojn en eniga gramatiko (limo estas %d)"
+msgstr "tro multaj simboloj en eniga gramatiko (limo estas %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "redeklaro de %s por %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "redeklaro de %s por <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "simbolo %s estas redifinita"
+msgid "symbol %s redeclared as a token"
+msgstr "simbolo %s estas redeklarita kiel ĵetono"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
+#, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "simbolo %s estas redeklarita kiel sintaksa variablo"
+
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"simbolo %s estas uzata, sed ne estas difinita kiel ĵetono kaj havas neniun "
+"regulon"
+
+#: src/symtab.c:380
+#, 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 ĵetono kaj havas neniun "
+"regulon"
+
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
 #, c-format
 msgid "symbol %s redeclared"
 msgstr "simbolo %s estas redeklarita"
 
-#: src/symtab.c:367
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "sintaksaj variabloj ne povas ricevi malimplicitan numeron"
+
+#: src/symtab.c:575
 #, c-format
 msgid "redefining user token number of %s"
 msgstr "redifinado de uzant-ĵetona nombro da %s"
 
-#: src/symtab.c:395
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "redifinado de uzant-ĵetona nombro da %s"
+
+#: src/symtab.c:617
 #, c-format
-msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgid "string literal %s not attached to a symbol"
 msgstr ""
-"simbolo %s estas uzata, sed ne estas difinita kiel ĵetonon kaj havas neniun "
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "neutila %s por tipo <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+"simbolo <%s> estas uzata, sed ne estas difinita kiel ĵetono kaj havas neniun "
 "regulon"
 
-#: src/symtab.c:415
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "sintaksaj variabloj ne povas ricevi ĉenan kromnomon"
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr "simbolo %s estas uzata pli ol unufoje kiel literan ĉenon"
+msgstr "simbolo %s estas uzata pli ol unufoje kiel litera ĉeno"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "redeklaro de uzant-ĵetono numero %d por %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "antaŭa deklaro por %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "la ekiga simbolo %s estas nedifinita"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "la ekiga simbolo %s estas ĵetono"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "redeklaro por apriore markita '%%destructor'"
+msgid "useless precedence and associativity for %s"
+msgstr "neutila prioritato kaj asocieco por %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "redeklaro por apriore senmarka '%%destructor'"
+msgid "useless precedence for %s"
+msgstr "neutila prioritato por %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "redeklaro por apriore markita '%%printer'"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "neutila asocieco por %s, uzu %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "redeklaro por apriore senmarka '%%printer'"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "neterminalo neutilas en gramatiko: %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr "forigo de '%s' fiaskis"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "evitinda instrukcio, uzu %s"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr "kreado de provizora dosiero fiaskis"
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Avertaj kategorioj inkluzivas:\n"
+#~ "  'conflicts-sr'      konfliktoj Ŝ/R (eblegitaj apriore)\n"
+#~ "  'conflicts-rr'      konfliktoj R/R (ebligitaj apriore)\n"
+#~ "  'deprecated'        evitindaj aranĝoj\n"
+#~ "  'empty-rule'        vakaj reguloj sen %empty\n"
+#~ "  'midrule-values'    nedifinitaj aŭ neuzitaj mezregulaj valoroj\n"
+#~ "  'precedence'        neutilaj prioritato kaj asocieco\n"
+#~ "  'yacc'              malkongruoj kun POSIX Yacc\n"
+#~ "  'other'             ĉiuj aliaj avertoj (ebligitaj apriore)\n"
+#~ "  'all'               ĉiuj avertoj krom 'yacc'\n"
+#~ "  'no-KATEGORIO'      malebligi avertojn en KATEGORIO\n"
+#~ "  'none'              malebligi ĉiujn avertojn\n"
+#~ "  'error[=KATEGORIO]' trakti avertojn kiel erarojn\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "konservado de norm-enigo fiaskis"
+#~ 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'    malimplice asociigi ĵetonojn 'lookahead' al elementoj\n"
+#~ "  'solved'       priskribi solvadon de konfliktoj de ŝovo/redukto\n"
+#~ "  'all'          inkluzivigi la tutan informaron supre\n"
+#~ "  'none'         malebligi la raporton\n"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "konservado de norm-eligo fiaskis"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "APARTAĴO estas listo da kom-apartitaj vortoj, kiuj povas inkluzivigi:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    montri erarojn per tajp-montriloj\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    montri maŝin-legeblajn riparojn\n"
+#~ "  'syntax-only'\n"
+#~ "    ne krei iun ajn dosieron\n"
+#~ "  'all'\n"
+#~ "    ĉio el supre\n"
+#~ "  'none'\n"
+#~ "    malebligi ĉion el supre\n"
+#~ "  "
 
-#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
-#, c-format
-msgid "opening of tmpfile failed"
-msgstr "malfermo de tmpfile fiaskis"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "malvalida argumento %s por %s"
 
-#: 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 "
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "plursenca argumento %s por %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Validaj argumentoj estas:"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "malfermo de provizora dosiero fiaskis"
+#~ msgid "write error"
+#~ msgstr "skrib-eraro"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Nekonata sistem-eraro"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "la helpa programo '%s' ĉesis"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: modifilo '%s%s' estas plursenca\n"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "la helpa programo '%s' ne estis trovata"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: modifilo '%s%s' estas plursenca; eblecoj:"
 
-#: 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"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: nerekonita modifilo '%s%s'\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "malvalida argumento %s por %s"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: modifilo '%s%s' ne permesas argumenton\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "plursenca argumento %s por %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: modifilo '%s%s' postulas argumenton\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Validaj argumentoj estas:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: malvalida modifilo -- '%c'\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u liberigitaj (%.2f%%).\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: la modifilo postulas argumenton -- '%c'\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"
+#~ msgid "memory exhausted"
+#~ msgstr "memoro estas plenigita"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u kaŝmemorigitaj (%.2f%%)\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "ne eblas krei dukton"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr "%u bitset_tests, %u kaŝmemorigitaj (%.2f%%)\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s subprocezo fiaskis"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "`"
+#~ msgstr "‘"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "histogramo pri kalkulo-protokolado\n"
+#~ msgid "'"
+#~ msgstr "’"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "histogramo pri grandeco-protokolado\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempoj de plenumado (sekundoj)"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "histogramo pri denso\n"
+#~ msgid "CPU user"
+#~ msgstr "CPU uzanto"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Statistikoj bitset:\n"
-"\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU sistemo"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Akumulitaj ruloj = %u\n"
+#~ msgid "wall clock"
+#~ msgstr "mur-horloĝo"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "ne eblas legi statistikan dosieron"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle fiaskis"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "malĝusta grando de statistika dosiero\n"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "ne eblas restarigi fd %d: dup2 fiaskis"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "Ne eblas skribi statistikan dosieron"
+#~ msgid "%s subprocess"
+#~ msgstr "subprocezo %s"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "ne eblas malfermi statistikan dosieron por skribado"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "subprocezo %s ricevis neripareblan signalon %d"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "skriba eraro"
+#~ msgid " type %d is %s\n"
+#~ msgstr " tipo %d estas %s\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Nekonata sistem-eraro"
+#~ msgid "symbol %s redefined"
+#~ msgstr "simbolo %s estas redifinita"
 
-#: lib/getopt.c:547 lib/getopt.c:576
-#, c-format
-msgid "%s: option '%s' is ambiguous; possibilities:"
-msgstr "%s: modifilo '%s' estas plursenca; eblecoj:"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "forigo de '%s' fiaskis"
 
-#: 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"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "kreado de provizora dosiero fiaskis"
 
-#: 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"
+#~ msgid "saving stdin failed"
+#~ msgstr "konservado de la ĉefenigujo fiaskis"
 
-#: 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"
+#~ msgid "saving stdout failed"
+#~ msgstr "konservado de la ĉefeligujo fiaskis"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: nerekonita modifilo '--%s'\n"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "malfermo de 'tmpfile' fiaskis"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: nerekonita modifilo '%c%s'\n"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "redirektado de la ĉefeligujo de bison al la provizora dosiero fiaskis"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: malvalida modifilo -- '%c'\n"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "redirektado de la ĉefenigujo de m4 de la provizora dosiero fiaskis"
 
-#: 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"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "malfermo de provizora dosiero fiaskis"
 
-#: 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"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "redirektado de la ĉefeligujo de m4 al provizora dosiero fiaskis"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "la helpa programo '%s' ĉesis"
 
-#: 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"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "la helpa programo '%s' ne estis trovata"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memoro estas plenigita"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "redirektado de la ĉefenigujo de bison al provizora dosiero fiaskis"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberigitaj (%.2f%%).\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 "%s subprocezo fiaskis"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u kaŝmemorigitaj (%.2f%%)\n"
 
-#. 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 "‘"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u kaŝmemorigitaj (%.2f%%)\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "’"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u kaŝmemorigitaj (%.2f%%)\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Tempoj de plenumado (sekundoj)\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTALO                :"
+#~ msgid "count log histogram\n"
+#~ msgstr "histogramo pri kalkul-protokolado\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tempo en %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "histogramo pri grandec-protokolado\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle fiaskis"
+#~ msgid "density histogram\n"
+#~ msgstr "histogramo pri denso\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "ne eblas restarigi fd %d: dup2 fiaskis"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistikoj bitset:\n"
+#~ "\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "subprocezo %s"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Akumulitaj ruloj = %u\n"
 
-#: 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 "cannot read stats file"
+#~ msgstr "ne eblas legi statistikan dosieron"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "malĝusta grando de statistika dosiero\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "ne eblas skribi statistikan dosieron"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "ne eblas malfermi statistikan dosieron por skribado"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tempo en %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: modifilo '--%s' ne permesas argumenton\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: nerekonita modifilo '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: modifilo '-W %s' ne permesas argumenton\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: modifilo '-W %s' postulas argumenton\n"
+
+#~ msgid "empty"
+#~ msgstr "malplena"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "';' povus esti neceza ĉe la fino de ago-kodo"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "estontaj versioj de Bison ne aldonos la ';'"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "uzo de YYFAIL, kio estas malrekomendinda kaj estos forigata"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "redeklaro por apriore markita '%%destructor'"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "redeklaro por apriore senmarka '%%destructor'"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "redeklaro por apriore markita '%%printer'"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "redeklaro por apriore senmarka '%%printer'"
 
 #~ msgid "state %d"
 #~ msgstr "stato %d"
diff --git a/po/es.gmo b/po/es.gmo
index 8916f1d..4d24a6a 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 7336ce0..e812381 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,405 +1,591 @@
-# Mensajes en español para GNU Bison.
+# Mensajes en español para GNU Bison.
 # Copyright (C) 1998 Free Software Foundation, Inc.
-# Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>, 1998.
+# This file is distributed under the same license as the bison package.
 #
 # Corregido por:
 #
-# cll - Carlos Linares López        clinares@acm.org
+# 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' :)
+# 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.
+# 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
+# (¡te lo dice el tío que ha traducido el paquete más grande: 1406
 # mensajes en el clisp!)
 #
 # 						      Carlos Linares
 # --------------------------------------------------------------------
 #
+# Nicolás García-Pedrajas <npedrajas@gmail.com>, 1998.
+# Santiago Vila Doncel <sanvila@unex.es>, 2013.
+# Nicolás García-Pedrajas <npedrajas@gmail.com>, 2014.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 2.2\n"
+"Project-Id-Version: bison 3.0.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2014-01-03 13:48+0100\n"
+"Last-Translator: Nicolás García-Pedrajas <npedrajas@gmail.com>\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "regla vacía sin %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "precedencia y asociatividad inútil para %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "aviso"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Error de E/S"
+msgstr "error"
 
-# Duda: desconozco cuál será el convenio en la lista de correo a
-# propósito de "fatal". Por favor, comprueba que "error grave" es
+# 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
+# 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
+#: src/complain.c:260
 msgid "fatal error"
-msgstr "error grave: "
+msgstr "error grave"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "directiva no válida: %s, use %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "directiva no válida, use %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "directiva no válida, use %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "declaración previa"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "sólo se permite un %s por regla"
+
+#: src/conflicts.c:81
+#, fuzzy, 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."
+"desplazamiento"
 
-#: src/conflicts.c:86
-#, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
+#: src/conflicts.c:91
+#, fuzzy, 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."
+"reducción"
 
-#: src/conflicts.c:94
-#, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
+#: src/conflicts.c:100
+#, fuzzy, 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."
+"    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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Estado %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, 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:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflictos: %d desplazamiento/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 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:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflictos: %d reducción/reducción\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "conflictos desplazamiento/reducción: %d encontrado(s), %d esperado(s)"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "conflictos reducción/reducción: %d encontrado(s), %d esperado(s)"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr "%%expect-rr afecta sólo a los analizadores GLR"
+msgstr "%%expect-rr afecta sólo a los analizadores GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "conflictos desplazamiento/reducción: %d encontrado(s), %d esperado(s)"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+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"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "conflictos reducción/reducción: %d encontrado(s), %d esperado(s)"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d conflicto reducción/reducción"
+msgstr[1] "%d conflictos reducción/reducción"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "no se puede abrir el fichero `%s'"
+msgstr "%s: no se puede abrir"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "error de entrada/salida"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "no se puede cerrar el fichero"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "denegación de sobreescritura del fichero de entrada %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: no se puede abrir"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Utilización: %s [OPCIÓN]... FICHERO\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d conflicto desplazamiento/reducción"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Use '%s --help' para más información.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Utilización: %s [OPCIÓN]... FICHERO\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Genera un analizador determinista LR o generalizado LR (GLR) usando\n"
+"tablas del analizador LALR(1), IELR(1) o LR(1) canónico. El soporte IELR(1)\n"
+"y LR(1) canónico es experimental.\n"
+"\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
+"Los argumentos obligatorios para las opciones largas lo son también para las "
+"opciones cortas.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "Lo mismo es cierto para los argumentos opcionales.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
-"Modos de operación:\n"
+"\n"
+"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"
+"  -V, --version                 informa de la versión y termina\n"
+"      --print-localedir         informa del directorio que contiene los "
+"datosdependientes de la configuración local\n"
+"     --print-datafir             informa del directorio que contiene los "
+"skeletons y XLST\n"
+"  -y, --yacc                    emula POSIX Yacc\n"
+"  -W, --warning[=CATEGORÍA]  informa de los avisos tipo CATEGORÍA\n"
+"  -f, --features[=CARACTERÍSTICA]  activa diversas características\n"
+"\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Analizador:\n"
+"  -L, language=LENGUAJE          especifica el lenguaje de programación de "
+"la salida\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"
+"  -t, --debug                instrumenta al analizador para depuración\n"
+"                                   igual que '-Dparse.trace'\n"
+"      --locations            habilita la computación de localizaciones\n"
+"  -D, --define=NOMBRE[=VALUE]    similar a '%define NAME \"VALUE\"'\n"
+"  -F, --force-define=NOMBRE[=VALOR]  anula '%define NAME \"VALUE\"'\n"
+"  -p, --name-prefix=PREFIJO  preañade PREFIJO a los símbolos externos\n"
+"                                   sustituido por '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines             no genera directivas '#line'\n"
 " --k, --token-table          incluye una tabla de nombres de terminales\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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 "
+"      --defines[=FICHERO]             produce también un fichero de "
+"cabecera\n"
+"  -d                         lo mismo pero no se puede especificar el "
+"fichero (para POSIX Yacc)\n"
+"  -r, --report=COSAS        produce también detalles del automaton\n"
+"      --report-file=FICHERO     escribe el informe en FICHERO\n"
+"  -v, --verbose              también produce una explicación del automaton\n"
+"  -b, --file-prefix=PREFIJO  especifica 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 "
+"  -g, --graph                también produce una gráfico del automaton\n"
+"    -x, --xml[=FICHERO]           produce también un informe XML del "
 "automaton\n"
+"                             (el esquema XML es experimental)\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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr "Informe de los errores a <bug-bison@gnu.org>.\n"
+msgstr "Informe de los errores a <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s página web: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
+"Ayuda General del uso de software 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Informe de los errores de traducción a <http://translationproject.org/team/"
+">.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Para la documentación completa ejecute: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Escrito por Robert Corbett y Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"NINGUNA garantía; ni siquiera para COMERCIALIZACIÓN o ADAPTACIÓN PARA UN\n"
 "USO PARTICULAR\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "múltiples declaraciones de %s"
+msgstr "las múltiples declaraciones de skeleton no son válidas"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "valor no válido: %s"
+msgstr "%s: lenguaje no válido"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "múltiples declaraciones de %s"
+msgstr "las múltiples declaraciones de lenguaje no son válidas"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "falta un operando después de `%s'"
+msgid "deprecated option: %s, use %s"
+msgstr "directiva no válida: %s, use %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
 #, fuzzy, c-format
+msgid "missing operand"
+msgstr "%s: falta un operando"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "operando extra `%s'"
+msgstr "operando extra %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "vacío"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
-msgstr "Gramática"
+msgstr "Gramática"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -407,852 +593,973 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Generado por %s.\n"
+"// Informe de errores a <%s>.\n"
+"// Página web: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr "desbordamiento del número de línea"
+msgstr "desbordamiento del número de línea"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
-msgstr "desbordamiento del número de columna"
+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
+#: src/location.c:155
 #, fuzzy, c-format
-msgid "%%define variable %s redefined"
-msgstr "redefinido el símbolo %s"
+msgid "byte number overflow"
+msgstr "desbordamiento del número de línea"
 
-#: src/muscle-tab.c:453
-msgid "previous definition"
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
 msgstr ""
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/main.c:155
+msgid "rule useless in parser due to conflicts"
+msgstr "la regla no es útil en el analizador debido a los conflictos"
+
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define variable %s redefinida"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
+msgid "previous definition"
+msgstr "definición anterior"
+
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: no definido %%define variable %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define variable %s redefinida"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define variable %s redefinida"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define variable %s redefinida"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "valor no válido para %%define variable lógica %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
+msgstr "valor no válido %%define variable %s: %s"
+
+#: src/muscle-tab.c:749
+#, c-format
+msgid "accepted value: %s"
+msgstr "valor aceptado: %s"
+
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
 msgstr ""
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
-msgid "accepted value: %s"
-msgstr "valor no válido: %s"
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "redefinición del número de símbolo terminal del usuario de %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "falta el identificador el la declaración del parámetro"
+msgstr "falta el identificador el la declaración del parámetro"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "secuencia de escape no válida: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " el tipo %d es %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: src/print.c:164
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Estado %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "desplazar e ir al estado %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "ir al estado %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "error (no asociativo)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "reduce usando la regla %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "aceptar"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminales con las reglas donde aparecen"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "No terminales con las reglas donde aparecen"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " en la izquierda:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " en la derecha:"
 
-#: src/print.c:510
-#, fuzzy
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "la regla nunca se redujo debido a los conflictos"
+msgstr "La regla es inútil debido a los conflictos"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr "múltiples declaraciones de %s"
+msgstr "múltiples declaraciones de %s"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "tipo resultado incompatible en la función combinada %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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "el nombre de símbolo duplicado para %s es ignorado"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "incompatibilidad de tipos en la acción por defecto: <%s> != <%s>"
+msgstr "incompatibilidad de tipos en la acción por defecto: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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"
+msgstr "regla vacía para un no terminal con tipo y no hay ninguna acción"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "valor no usado: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "valor no fijado: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty en regla no vacía"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "regla vacía sin %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
+msgstr "el terminal para %%prec no está definido: %s"
+
+#: src/reader.c:377
+#, c-format
+msgid "only midrule actions can be typed: %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
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr "%s afecta sólo a los analizadores GLR"
+msgstr "%s afecta sólo a los analizadores GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s debe estar seguido por un número positivo"
+msgstr "%s debe estar seguido por un número positivo"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "la regla es demasiado larga"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
-msgstr "no hay reglas en la gramática de entrada"
+msgstr "no hay reglas en la gramática de entrada"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "no hay reglas en la gramática de entrada"
+msgstr "regla inútil en la gramática"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "no terminal inútil en la gramática: %s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "No terminales con las reglas donde aparecen"
+msgstr "No terminales inútiles en la gramática"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "no hay reglas en la gramática de entrada"
+msgstr "Terminales no usados en la gramática"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "no hay reglas en la gramática de entrada"
+msgstr "Reglas inútiles en la gramática"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d no terminal inútil en la gramática"
+msgstr[1] "%d no terminales inútiles en la gramática"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, 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"
+msgstr[0] "%d regla inútil en la gramática"
+msgstr[1] "%d reglas inútiles en la gramática"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "El símbolo de inicio (axioma) %s no deriva ninguna sentencia"
+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
+#: src/scan-code.l:158
 #, c-format
-msgid "use of YYFAIL, which is deprecated and will be removed"
-msgstr ""
+msgid "stray '%s'"
+msgstr "'%s' extraviado"
 
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "se refiera a: %c%s en %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "posiblemente significa: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", %c oculto"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " en %s"
 
-#: src/scan-code.l:472
-#, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", no se puede acceder desde un acción en una regla interna a $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "entero fuera de rango: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "directiva no válida: %s"
+msgstr "referencia no válida: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"error de sintaxis después de '%c', se espera un entero, una letra, '_', '[', "
+"o '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "símbolo no encontrado en producción antes de $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "símbolo con encontrado en producción: %.*s"
 
-#: src/scan-code.l:648
-#, fuzzy, c-format
+#: src/scan-code.l:532
+#, c-format
 msgid "misleading reference: %s"
-msgstr "redefinición de la precedencia de %s"
+msgstr "referencia engañosa: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "argumento %s ambigüo para %s"
+msgstr "referencia ambigua: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
+msgstr "tipo explícito dado en una gramática sin tipos"
+
+#: src/scan-code.l:639
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "$$ para la regla interna en $%d de %s no tiene tipo declarado"
+
+#: src/scan-code.l:645
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$ de '%s' no tiene tipo declarado"
+
+#: src/scan-code.l:671
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s de %s no tiene tipo declarado"
+
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
 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
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "`,' perdido se trato como un espacio en blanco"
+msgstr "',' perdido se trató como un espacio en blanco"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "directiva no válida: %s"
+msgstr "directiva no válida: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "directiva no válida: %s"
+msgstr "identificador no válido: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "carácter no válido: %s"
-msgstr[1] "carácter no válido: %s"
+msgstr[0] "carácter no válido"
+msgstr[1] "caracteres no válidos"
 
-# 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
+#: src/scan-gram.l:383
 #, c-format
 msgid "invalid null character"
-msgstr "carácter nulo no válido"
+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
+# 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:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "identificador inesperado en nombre entre corchetes: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "se espera un identificador"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carácter no válido en nombre entre corchetes"
+msgstr[1] "caracteres no válidos en nombre entre corchetes"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "carácter literal vacío"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "caracteres extra en carácter literal"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "carácter nulo no válido: %s"
+msgstr "número no válido después de \\-escape: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "carácter no válido: %s"
+msgstr "carácter no válido después de \\-escape: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "falta cadena `%s' al final del fichero"
+msgstr "falta %s al final del fichero"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "falta cadena `%s' al final del fichero"
+msgstr "falta %s al final de la línea"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "directiva %s no cerrada en skeleton"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "faltan argumentos para la directiva %s en skeleton"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "sobran argumentos para la directiva %s en skeleton"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "valor $ no válido: $%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc prohíbe guiones en los nombres de símbolos: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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)"
+msgstr "demasiados símbolos en la gramática de entrada (el límite es %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr "%s redeclaración de %s"
+msgstr "%s redeclaración de %s"
 
-#: src/symtab.c:164
-#, fuzzy, c-format
+#: src/symtab.c:313
+#, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "%s redeclaración de %s"
+msgstr "%s redeclaración para <%s>"
 
-#: src/symtab.c:332
-#, c-format
-msgid "symbol %s redefined"
-msgstr "redefinido el símbolo %s"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
+msgstr "redeclarado el símbolo %s"
 
-#: src/symtab.c:346
-#, c-format
-msgid "symbol %s redeclared"
-msgstr "redefinido el símbolo %s"
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "redeclarado 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
+# 'token' se debe traducir como 'literal' - cll
+# en terminología de compiladores token es más un terminal - ngp
 #
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"se usa el símbolo %s, pero no está definido como terminal y no tiene reglas"
+
+# 'token' se debe traducir como 'literal' - cll
+# en terminología de compiladores token es más un terminal - ngp
+#
+#: src/symtab.c:380
 #, 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"
+"se usa el símbolo %s, pero no está definido como terminal y no tiene reglas"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "redeclarado el símbolo %s"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinición del número de símbolo terminal del usuario de %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "redefinición del número de símbolo terminal del usuario de %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s inútil para el tipo <%s>"
+
+# 'token' se debe traducir como 'literal' - cll
+# en terminología de compiladores token es más un terminal - ngp
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "se usa el tipo %s, pero no está asociado a ningún símbolo"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
+#, 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"
+msgstr "el símbolo '%s' es utilizado más de una vez como cadena literal"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, 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"
+msgstr "al símbolo %s se le ha dado más de una cadena literal"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "redeclaración del tipo de %s"
+msgstr "%d redeclaración del número de símbolo terminal del usuario para %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "redeclaración del tipo de %s"
+msgstr "declaración previa para %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr "el símbolo de inicio (axioma) %s no está definido"
+msgstr "el símbolo de inicio (axioma) %s no está definido"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr "el símbolo de inicio (axioma) %s es un terminal"
+msgstr "el símbolo de inicio (axioma) %s es un terminal"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "precedencia y asociatividad inútil para %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "precedencia inútil para %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "asociatividad inútil para %s, use %%precedence"
 
-#: 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"
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "no terminal inútil en la gramática: %s"
 
-#: lib/bitset_stats.c:261
-#, fuzzy, c-format
-msgid "bad stats file size\n"
-msgstr "Fichero de estadística no válido.\n"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "directiva no válida, use %s"
 
-#: 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."
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Las categorías de avisos incluyen:\n"
+#~ "  'midrule-values'    valores de reglas intermedias no fijados o no "
+#~ "usados\n"
+#~ "  'yacc'              incompatibilidades con POSIX Yacc\n"
+#~ "  'conflicts-sr'      conflictos D/R (activa por defecto)\n"
+#~ "  'conflicts-rr'      conflictos R/R (activa por defecto)\n"
+#~ "  'deprecated'        constructor obsoletos\n"
+#~ "  'empty-rule'        reglas vacías sin %empty\n"
+#~ "  'precedence'        precedencia y asociatividad inútiles\n"
+#~ "  'other'             todos los demás avisos (activo por defecto)\n"
+#~ "  'all'               todos los avisos excepto 'yacc'\n"
+#~ "  'no-CATEGORÍA'      desactiva los avisos en CATEGORÍA\n"
+#~ "  'none'              desactiva todos los avisos\n"
+#~ "  'error[=CATEGORÍA]'  trata los avisos como errores\n"
 
-#: lib/bitset_stats.c:292
+#~ 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"
+
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "No pude abrir el fichero de estadísticas para escritura"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "CARACTERÍSTICAS es una lista de palabras separadas por coma que puede "
+#~ "incluir:\n"
+#~ "  'caret'        muestra los errores con signos de intercalación\n"
+#~ "  'all'          todo lo anterior\n"
+#~ "  'none'         deshabilita todo lo anterior\n"
+#~ "  "
 
-# 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
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argumento %s no válido para %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argumento %s ambiguo para %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Los argumentos válidos son:"
+
+#~ msgid "write error"
+#~ msgstr "error de escritura"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Error del sistema desconocido"
+
 #, fuzzy
-msgid "write error"
-msgstr "error grave: "
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: la opción '-W %s' es ambigua\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Error del sistema desconocido"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: la opción '%s' es ambigua; posibilidades:"
 
-#: 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"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opción '%c%s' no reconocida\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"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: la opción '%c%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"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: la opción '--%s' requiere un 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.
+# ¡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"
+# Pongo inválida. sv
+#~ 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"
+#~ 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"
+#~ msgid "memory exhausted"
+#~ msgstr "memoria agotada"
 
-# 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "no se pudo crear la tubería (pipe)"
 
-#: 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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "falló el subproceso %s"
 
-#: 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"
+#~ msgid "'"
+#~ msgstr "\""
 
 #, fuzzy
-#~ msgid "stray '@'"
-#~ msgstr "`@ extraviado"
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Tiempos de ejecución (segundos)\n"
+
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "falló _open_osfhandle"
+
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "no pude restaurar fd %d: falló dup2"
+
+#~ msgid "%s subprocess"
+#~ msgstr "subproceso %s"
+
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "el subproceso %s recibió una señal grave %d"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u en la caché (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u en la caché (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u en la caché (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma del registro de conteo\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histograma del registro de tamaño\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densidad\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estadísticas de bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Ejecuciones acumuladas = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "no pude leer el fichero de estadísticas"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "incorrecto el tamaño del fichero de estadísticas\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "no pude escribir el fichero de estadísticas"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "no pude abrir el fichero de estadísticas para escritura"
+
+#, fuzzy
+#~| msgid "unexpected end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "fin de fichero inesperado"
+
+#, fuzzy
+#~| msgid "unterminated string"
+#~ msgid "translatable string"
+#~ msgstr "cadena sin terminar"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "identificador no válido: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "carácter literal vacío"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "identificador no válido: %s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "identificador no válido: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "carácter literal vacío"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "redefinido el símbolo %s"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "falló la eliminación de '%s'"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "falló la creación de un fichero temporal"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "falló la escritura en stdin"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "falló la escritura en stdout"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "falló la apertura de tmpfile"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr "fallo la redirección del stdout de bison a un fichero temporal"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "falló la redirección del stdin de m4 desde un fichero temporal"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "falló la apertura de un fichero temporal"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "falló la redirección del stdout de m4 a un fichero temporal"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "interrumpido el programa subsidiario '%s'"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "no se encontró el programa subsidiario '%s'"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "falló la redirección del stdin de bison desde un fichero temporal"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " el tipo %d es %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "valor $ no válido: $%d"
+
+# Pongo esto como en otros .po. sv
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: la opción '--%s' no admite ningún argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opción '--%s' no reconocida\n"
+
+# Pongo esto como en otros .po. sv
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: la opción '-W %s' no admite ningún argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: la opción '-W s%s' requiere un argumento\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tiempo en %s: %ld.%06ld (%ld%%)\n"
 
 #~ msgid "warning: "
 #~ msgstr "aviso: "
 
+#~ 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"
+
 #~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
-#~ msgstr "GNU bison genera analizadores para gramáticas LALR(1).\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 "
+#~ "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 "
+#~ "para la opción corta equivalente también. De igual forma para los "
 #~ "argumentos opcionales.\n"
 
+#~ msgid "empty"
+#~ msgstr "vacío"
+
+#~ msgid "state %d"
+#~ msgstr "estado %d"
+
 #~ msgid "Rules never reduced"
 #~ msgstr "Reglas nunca reducidas"
 
@@ -1289,49 +1596,46 @@
 #~ 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 "missing '{' in %s"
+#~ msgstr "falta '{' en %s"
+
+#~ msgid "stray '@'"
+#~ msgstr "'@ extraviado"
 
 #~ msgid "tokens %s and %s both assigned number %d"
-#~ msgstr "los terminales %s y %s tienen asignados ambos el número %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á
+# ¿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
+# 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.
+# 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
+# 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
+# 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"
+#~ 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' 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 "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"
+#~ msgstr "POSIX prohíbe declaraciones en a gramática"
 
 #~ msgid "conflicting precedences for %s and %s"
 #~ msgstr "precedencias en conflicto entre %s y %s"
@@ -1340,7 +1644,7 @@
 #~ msgstr "conflicto de asociaciatividades para %s (%s) y %s (%s)"
 
 #~ msgid "too many states (max %d)"
-#~ msgstr "demasiados estados (máximo %d)"
+#~ msgstr "demasiados estados (máximo %d)"
 
 #~ msgid "reduce"
 #~ msgstr "reduce"
@@ -1348,11 +1652,6 @@
 #~ 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"
 
@@ -1365,43 +1664,40 @@
 #~ msgid "%s contains "
 #~ msgstr "%s contiene "
 
-#~ msgid "`%s' is no longer supported"
-#~ msgstr "`%s' ya no está soportado"
+#~ msgid "'%s' is no longer supported"
+#~ msgstr "'%s' ya no está soportado"
 
-# Me parece menos "computadora" decir "ningún fichero de gramática" - cll
+# 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"
+#~ 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 "%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)"
+#~ 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 "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?
+# ¿unescaped?
 #~ msgid "unescaped newline in constant"
-#~ msgstr "salto de línea en constante sin secuencia de escape"
+#~ 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 "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 "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 "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"
@@ -1409,15 +1705,15 @@
 #~ msgid "unterminated type name"
 #~ msgstr "nombre de tipo sin terminar"
 
-# ¿multicarácter o multicaracteres? sv
+# ¿multicarácter o multicaracteres? sv
 #~ msgid "use \"...\" for multi-character literal tokens"
-#~ msgstr "use \"...\" para terminales literales multicarácter"
+#~ msgstr "use \"...\" para terminales literales multicarácter"
 
-#~ msgid "`%s' supports no argument: %s"
-#~ msgstr "`%s' no soporta el argumento: %s"
+#~ msgid "'%s' supports no argument: %s"
+#~ msgstr "'%s' no soporta el argumento: %s"
 
-#~ msgid "`%s' requires an argument"
-#~ msgstr "`%s' requiere un argumento"
+#~ msgid "'%s' requires an argument"
+#~ msgstr "'%s' requiere un argumento"
 
 #~ msgid "   (rule %d)"
 #~ msgstr "   (regla %d)"
@@ -1448,7 +1744,7 @@
 #~ msgstr "    SIN ACCIONES\n"
 
 #~ msgid "Number, Line, Rule"
-#~ msgstr "Número, Línea, Regla"
+#~ msgstr "Número, Línea, Regla"
 
 #~ msgid "  %3d %3d %s ->"
 #~ msgstr "  %3d %3d %s ->"
@@ -1459,92 +1755,89 @@
 #~ 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"
+#~ msgstr "%s no es válido"
 
-#~ msgid "unterminated `%{' definition"
-#~ msgstr "definición `%{' sin terminar"
+#~ msgid "unterminated '%{' definition"
+#~ msgstr "definición '%{' sin terminar"
 
 #~ msgid "Premature EOF after %s"
-#~ msgstr "EOF prematuro después de %s"
+#~ msgstr "EOF prematuro después de %s"
 
-#~ msgid "`%s' is invalid in %s"
-#~ msgstr "`%s' no es válido en %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>"
+#~ 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"
+#~ 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
+# 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"
+#~ "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
+# 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 :)
+# 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"
+#~ 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"
+#~ 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 :"
+#~ 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"
+#~ 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 "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"
+#~ 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
+# 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"
+#~ 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
+# Ú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)"
+#~ 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
+# 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"
+#~ msgstr "cláusula %guard sin terminar"
diff --git a/po/et.gmo b/po/et.gmo
index 0e02208..90ade2d 100644
--- a/po/et.gmo
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
index 1332c17..e6668af 100644
--- a/po/et.po
+++ b/po/et.po
@@ -1,372 +1,523 @@
 # 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.
+# Toomas Soome <tsoome@me.com>, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-22 15:44+0200\n"
+"Last-Translator: Toomas Soome <tsoome@me.com>\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "N/R konfliktid (vaikimisi lubatud)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "R/R konfliktid (vaikimisi lubatud)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "sõne aliasi ei seostatud sümboliga"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "aegunud konstruktsioonid"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "tühjad reeglid, puudub %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "määramata või kasutamata vahereeglite väärtused"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "kasutu järjekord ja assotsiatiivsus"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "POSIX Yacc mitteühilduvused"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "kõik teised hoiatused (vaikimisi lubatud)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "kõik hoiatused välja arvatud 'dangling-alias' ja 'yacc'"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "blokeeri hoiatused antud KATEGOORIAS"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "blokeeri kõik hoiatused"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "käsitle hoiatusi vigadena"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Hoiatuste kategooriad sisaldavad:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "hoiatus"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "viga"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "fataalne viga"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
-msgstr "    Konflikt reegli %d ja märgi %s vahel lahendatud nihkega"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc ei toeta %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr "    Konflikt reegli %d ja märgi %s vahel lahendatud redutseerimisega"
+msgid "deprecated directive: %s, use %s"
+msgstr "mittesoovitatav direktiiv: %s, kasutage %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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"
+msgid "duplicate directive"
+msgstr "duplikaat direktiiv"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "duplikaat direktiiv: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "eelmine deklaratsioon"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "reeglis on lubatud ainult üks %s"
+
+#: src/conflicts.c:81
+#, 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:91
+#, 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:100
+#, 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:602
+#, c-format
+msgid "State %d "
+msgstr "Olek %d "
+
+#: src/conflicts.c:605
 #, c-format
 msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
 msgstr ""
 "konfliktid: %d nihutamine/redutseerimine, %d redutseerimine/redutseerimine\n"
 
-#: src/conflicts.c:495
+#: src/conflicts.c:608
 #, c-format
 msgid "conflicts: %d shift/reduce\n"
 msgstr "konfliktid:  %d nihutamine/redutseerimine\n"
 
-#: src/conflicts.c:497
+#: src/conflicts.c:610
 #, c-format
 msgid "conflicts: %d reduce/reduce\n"
 msgstr "konfliktid: %d redutseerimine/redutseerimine\n"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:645
 #, c-format
-msgid "State %d "
-msgstr "Olek %d "
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"nihutamine/redutseerimine konfliktid reeglile %d: %d leitud, %d eeldati"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"redutseerimine/redutseerimine konfliktid reeglile %d: %d leitud, %d eeldati"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr puudutab ainult GLR parsereid"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "nihutamine/redutseerimine konfliktid: %d leitud, %d eeldati"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d nihutamine/redutseerimine konflikt"
+msgstr[1] "%d nihutamise/redutseerimise konflikti"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "redutseerimine/redutseerimine konflikti: %d leitud, %d eeldati"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d redutseerimine/redutseerimine konflikt"
+msgstr[1] "%d redutseerimine/redutseerimine konflikti"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: ei saa avada"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr "sisend/väljund viga"
+msgstr "sisend/väljund viga"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "faili ei õnnestu sulgeda"
+msgstr "faili ei õnnestu sulgeda"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr "keeldun sisendfaili %s üle kirjutamast"
+msgstr "keeldun sisendfaili %s üle kirjutamast"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr "konfliktsed väljundid faili %s"
+msgstr "konfliktsed väljundid faili %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
+msgid "%s: cannot backup"
+msgstr "%s: varukoopiat ei saa luua"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Kasuta: %s [VÕTI]...FAIL\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "värvi väljund"
 
-#: 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:174
+msgid "don't colorize the output"
+msgstr "ära värvi väljundit"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "värvi kui väljundseade on terminal"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "MILLAL võib olla üks järgnevaist:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "kirjelda olekud"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "lisa baaselementide hulgale nende ümbrus"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "üheselt seosta edasi vaatamise märgid elementidega"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "kirjelda nihutamine/redutseerimine konfliktide lahendamist"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "kaasa kogu ülal näidatud informatsioon"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "blokeeri raport"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "ASJAD on komadega eraldatud järgnevad sõnad:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr "JÄLJED on komadega eraldatud järgnevad sõnad:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "näita vigu katusega"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "näita masin-loetavaid parandusi"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "ära loo ühtegi faili"
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr "kõik ülaltoodu"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "blokeeri kõik ülaltoodu"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr "OMADUSED on komadega eraldatud järgnevad sõnad:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Lisainfo saamiseks proovige '%s --help'.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Kasuta: %s [VÕTI]...FAIL\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\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.\n"
+"\n"
+
+#: src/getargs.c:362
 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"
+"Kohustuslikud argumendid pikkadele võtmetele on kohustuslikus ka "
+"lühikestele.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Sama ka mittekohustuslike argumentide korral.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"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"
+"                             ja lõpeta töö\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"
+"                             ja lõpeta töö\n"
+"  -u, --update               rakenda parandusi grammatika failile ja lõpeta "
+"töö\n"
+"  -f, --feature[=OMADUSED]   aktiveeri muid omadusi\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Diagnostika:\n"
+"  -W, --warnings[=KATEGOORIA] raporteeri antud kategooria hoiatused\n"
+"      --color[=MILLAL]       millal värvida diagnostika\n"
+"      --style=FAIL           määra diagnostika värvimise CSS FAIL\n"
+"\n"
+
+#: src/getargs.c:400
 #, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Parser:\n"
-"  -L, --language=KEEL        määra väljudi programmeerimise keel\n"
+"  -L, --language=KEEL        määra väljudi programmeerimise keel\n"
 "  -S, --skeleton=FAIL        kasutatava skeleti kirjeldus\n"
 "  -t, --debug                varusta parser silumisinfoga\n"
+"                             sama, kui '-Dparse.trace'\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"
+"  -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"
+"  -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"
+"  -k, --token-table          lisa ka sümbolite nimede tabel\n"
+"  -y, --yacc                 emuleeri POSIX Yacc\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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 "
+"Väljund failid:\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"
+"  -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"
+"  -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[=FAIL]         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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Teatage palun vigadest aadressil <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s koduleht: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr "Üldine abiinfo GNU tarkvara kohta: <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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
-"Tõlkevigadest teatage palun aadressil <http://translationproject.org/team/"
+"Tõlkevigadest teatage palun aadressil <http://translationproject.org/team/"
 ">.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr "Täieliku dokumentatsiooni lugemiseks käivitage: info bison.\n"
+msgstr "Täieliku dokumentatsiooni lugemiseks käivitage: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Kirjutanud Robert Corbett ja Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
-msgstr "Autoriõigus © %d Free Software Foundation, Inc.\n"
+msgstr "Autoriõigus © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "korduvad skeleti deklaratsioonid ei ole lubatud"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: vigane keel"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "korduvad keele deklaratsioonid ei ole lubatud"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: puudub operand"
+msgid "deprecated option: %s, use %s"
+msgstr "mittesoovitatav võti: %s, kasutage %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "puudub operand"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "liigne operand %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "tühi"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatika"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -379,794 +530,616 @@
 "// Koduleht: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr "rea numbri ületäitumine"
+msgstr "rea numbri ületäitumine"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
-msgstr "veeru numbri ületäitumine"
+msgstr "veeru numbri ületäitumine"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "baidi numbri ületäitumine"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "..."
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "reegel on konfliktide tõttu kasutu"
+msgstr "reegel on konfliktide tõttu kasutu"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "saadaval on parandused.  Käivitage uuesti võtmega '--update'."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define muutuja %s deklareeriti uuesti"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: defineerimata %%define muutuja %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define muutuja '%s' nõuab '{...}' väärtuseid"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define muutuja '%s' nõuab võtmesõnade väärtuseid"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define muutuja '%s' nõuab '\"...\"' väärtuseid"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr "vigane %%define tõeväärtus muutuja %s väärtus"
+msgstr "vigane %%define tõeväärtus muutuja %s väärtus"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr "vigane väärtus %%define muutujale %s: %s"
+msgstr "vigane väärtus %%define muutujale %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
-msgstr "lubatud väärtus: %s"
+msgstr "lubatud väärtus: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "sümbol literalid ei saa olla mitteterminalid"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "sümbol literale ei saa %s-ga koos kasutada"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "%s definitsioon"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "parameetri deklaratsioonis puudub identifikaator"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tüüp %d on %s\n"
+msgid "invalid version requirement: %s"
+msgstr "vigane versiooni nõue: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "nihuta ja liigu olekule %d\n"
+msgid "require bison %s, but have %s"
+msgstr "nõuab bison %s, aga on %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Olek %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "nihuta ja liigu olekule %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "liigu olekule %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "viga (mitteassotsiatiivne)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redutseerin kasutades reeglit %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "nõustun"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminalid, koos reeglitega kus nad ilmuvad"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "vasakul:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " paremal:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "paremal:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "Reeglid on parseris konfliktide tõttu kasutud"
+msgstr "Reeglid on parseris konfliktide tõttu kasutud"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "korduvad %s deklaratsioonid"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "tulemuse tüübikonflikt mestimise funktsioonis %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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr "ignoreerin dubleeritud sümboli nime %s"
+msgstr "ignoreerin dubleeritud sümboli nime %s"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "%s jaoks on antud reegel, aga see on märk"
+msgstr "%s jaoks on antud reegel, aga see on märk"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "vaikimisi tegevuse tüübikonflikt: <%s> != <%s>"
+msgstr "vaikimisi tegevuse tüübikonflikt: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
+msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
-msgstr "kasutamata väärtus: $%d"
+msgstr "kasutamata väärtus: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr "seadmata väärtus: $$"
+msgstr "seadmata väärtus: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty mitte-tühjal reeglil"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "tühjal reeglil puudub %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr "%%prec märgend ei ole defineeritud: %s"
+msgstr "%%prec märgend ei ole defineeritud: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "reeglis on lubatud ainult üks %s"
+msgid "only midrule actions can be typed: %s"
+msgstr "ainult vahereeglite tegevused võivad olla tüübitud: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s puudutab ainult GLR parsereid"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s järel peab olema positiivne number"
+msgstr "%s järel peab olema positiivne number"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc ei toeta tüübitud vahereeglite tegevusi"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "reegel on liiga pikk"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "sisendgrammatikas pole reegleid"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "reegel ei ole grammatikas kasutatav"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "mitteterminal on grammatikas kasutu: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Mitteterminalid ei ole grammatikas kasutatavad"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Grammatikas mitte kasutatud terminalid"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Grammatikas kasutud reeglid"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "stardisümbolist %s ei tuletata ühtegi lauset"
+msgstr "stardisümbolist %s ei tuletata ühtegi lauset"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "viitab: %c%s kohal %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr "arvatavasti mõeldi: %c"
+msgstr "arvatavasti mõeldi: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", peidab %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " kohal %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ", ei saa vahe reegli tegevusel kasutada kohal $%d"
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", ei saa vahereegli tegevusel kasutada kohal $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "number piiridest väljas: %s"
+msgstr "number piiridest väljas: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "vigane viide: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr "süntaksi viga peale '%c', ootan numbrit, tähte, '_', '[' või '$'"
+msgstr "süntaksi viga peale '%c', ootan numbrit, tähte, '_', '[' või '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr "sümbol puudub produktsioonis $%d ees: %.*s"
+msgstr "sümbol puudub produktsioonis $%d ees: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr "sümbol puudub produktsioonis: %.*s"
+msgstr "sümbol puudub produktsioonis: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "segadust tekitav viide: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "segane viide: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr "tüüpimata grammatikas kasutati konkreetset tüüpi"
+msgstr "tüüpimata grammatikas kasutati konkreetset tüüpi"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$$ vahereeglis kohal $%d '%s' ei oma deklareeritud tüüpi"
+msgstr "$$ vahereeglis kohal $%d '%s' ei oma deklareeritud tüüpi"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ märgil '%s' ei oma deklareeritud tüüpi"
+msgstr "$$ märgil '%s' ei oma deklareeritud tüüpi"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%s märgil '%s' ei oma deklareeritud tüüpi"
+msgstr "$%s märgil '%s' ei oma deklareeritud tüüpi"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "api.value.automove omab mitut $%d"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr "käsitlen juhuslikku ',' kui tühikut"
+msgstr "käsitlen juhuslikku ',' kui tühikut"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "vigane juhus: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "vigane identifikaator: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "vigane sümbol"
-msgstr[1] "vigased sümbolid"
+msgstr[0] "vigane sümbol"
+msgstr[1] "vigased sümbolid"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "vigane null sümbol"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "nurksulgudes nimes on eeotamatu identifikaator: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "oodati identifikaatorit"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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"
+msgstr[0] "vigane sümbol sulgudega nimes"
+msgstr[1] "vigased sümbolid sulgudega nimes"
 
-#: src/scan-gram.l:481 src/scan-gram.l:502
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc ei toeta sõne literaale"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
-msgstr "tühi sümbol literaal"
+msgstr "tühi sümbol literaal"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, c-format
 msgid "extra characters in character literal"
-msgstr "liigsed sümbolid sümbol literaalis"
+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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "vigane number peale \\-jada: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "vigane sümbol peale \\-jada: %s"
+msgstr "vigane sümbol peale \\-jada: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc ei toeta kuueteistkümnend literaale"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
-msgstr "faili lõpus puudub %s"
+msgstr "faili lõpus puudub %s"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
-msgstr "rea lõpus puudub %s"
+msgstr "rea lõpus puudub %s"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "skeletis on sulgemata %s direktiiv"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr "skeletis on %s direktiivile liiga vähe argumente"
+msgstr "skeletis on %s direktiivile liiga vähe argumente"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr "POSIX Yacc keelab kriipsud sümbolite nimedes: %s"
+msgstr "POSIX Yacc keelab kriipsud sümbolite nimedes: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "sisendgrammatikas on liiga palju sümboleid (piirang on %d)"
+msgstr "sisendgrammatikas on liiga palju sümboleid (piirang on %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s uuesti deklareerimine %s jaoks"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s deklareeriti <%s> jaoks uuesti"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "sümbol %s on uuesti defineeritud"
+msgid "symbol %s redeclared as a token"
+msgstr "sümbol %s on uuesti deklareeritud kui märk"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "sümbol %s on uuesti deklareeritud"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "sümbol %s on uuesti deklareeritud kui mitteterminal"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "%s kasutaja märgi numbri uuesti defineerimine"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"kasutatakse sümbolit %s, aga see ei ole defineeritud märgina ja puuduvad "
+"reeglid; kas te pidasite silmas %s?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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 "
+"kasutatakse sümbolit %s, aga see ei ole defineeritud märgina ja puuduvad "
 "reeglid"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc reserveerib %%type mitteterminalina"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "sümbol %s on uuesti deklareeritud"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "mitteterminalile ei saa anda konkreetset numbrit"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "%s kasutaja märgi numbri uuesti defineerimine"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "kasutaja märgi %s number on liiga suur"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "sõne literali %s ei seostatud sümboliga"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "kasutu %s tüübil <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "kasutatakse tüüpi <%s>, mis ei ole seostatud ühegi sümboliga"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "mitteterminalile ei saa anda sõne aliast"
+
+#: src/symtab.c:698
 #, 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"
+msgstr "sümbolit %s on kasutatud enam kui kord literaal sõnena"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "sümbolile %s on antud enam kui üks literaal sõne"
+msgstr "sümbolile %s on antud enam kui üks literaal sõne"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "kasutaja märgi number %d uuesti deklareerimine %s jaoks"
+msgstr "kasutaja märgi number %d uuesti deklareerimine %s jaoks"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "%s eelmine deklaratsioon"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "märgi number on liiga suur"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr "stardisümbol %s ei ole defineeritud"
+msgstr "stardisümbol %s ei ole defineeritud"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr "stardisümbol %s on märk"
+msgstr "stardisümbol %s on märk"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "vaikimisi märgitud %%destructor uuesti deklareerimine"
+msgid "useless precedence and associativity for %s"
+msgstr "%s jaoks kasutu järjekord ja assotsiatiivsus"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "vaikimisi märkimata %%destructor uuesti deklareerimine"
+msgid "useless precedence for %s"
+msgstr "%s jaoks kasutu järjekord"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "%s jaoks kasutu assotsiatiivsus, kasutage %%precedence"
diff --git a/po/fi.gmo b/po/fi.gmo
index ef39901..8ce397c 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 1e2c98f..99a77a8 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,136 +1,329 @@
 # Finnish messages for bison.
-# Copyright © 2010, 2011, 2012 Free Software Foundation, Inc.
+# Copyright © 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bison package.
-# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2012.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2009-2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 2.7.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-06-13 11:10+0300\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-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Bookmarks: 136,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
+"X-Generator: Poedit 1.5.5\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "tyhjä sääntö ilman %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "kelpaamaton ensisijaisuus ja liitettävyys kohteelle %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "varoitus"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "virhe"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "vakava virhe"
 
+#: src/complain.c:547
+#, c-format
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "vanhentunut direktiivi: %s, käytä %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "vanhentunut direktiivi, käytä %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "vanhentunut direktiivi, käytä %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "edellinen esittely"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "vain yksi %s on sallittu sääntöä kohden"
+
 #  (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"
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Tila %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "ristiriidat: %d siirto/supistaminen, %d supistaminen/supistaminen\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "ristiriidat: %d siirto/supistaminen\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "ristiriidat: %d supistaminen/supistaminen\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "siirto/supistaminen -ristiriitoja: %d löytyi, %d odotettiin"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "supistaminen/supistaminen -ristiriitoja: %d löytyi, %d odotettiin"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr soveltuu vain GLR-jäsentimiin"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "siirto/supistaminen -ristiriitoja: %d löytyi, %d odotettiin"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d siirto/supistaminen -ristiriita"
+msgstr[1] "%d siirto/supistaminen -ristiriitaa"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "supistaminen/supistaminen -ristiriitoja: %d löytyi, %d odotettiin"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d supistaminen/supistaminen -ristiriita"
+msgstr[1] "%d supistaminen/supistaminen -ristiriitaa"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: tiedoston avaus epäonnistui"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "syöttö/tulostevirhe"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "tiedoston sulkeminen epäonnistui"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "kieltäydytään korvaamasta syötetiedostoa %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: tiedoston avaus epäonnistui"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d siirto/supistaminen -ristiriita"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Pyydä lisätietoja komennolla ’%s --help’.\n"
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Käyttö: %s [VALITSIN]... TIEDOSTO\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 "Tuota deterministinen LR- tai yleistetty LR (GLR) -jäsennin, joka käyttää\n"
@@ -138,29 +331,31 @@
 "kanoninen LR(1) -tuki on kokeellinen.\n"
 "\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Sama pätee valinnaisille argumenteille.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -177,50 +372,62 @@
 "  -f, --feature[=OMINAISUUS] aktivoi sekalaiset ominaisuudet\n"
 "\n"
 
-#: src/getargs.c:329
-#, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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” "
+"  -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"
+"                                   sama kuin ’-Dparse.trace’\n"
+"      --locations                  ota käyttöön paikkojen laskenta\n"
+"  -D, --define=NIMI[=ARVO]         samanlainen kuin ’%define NIMI \"ARVO\"’\n"
+"  -F, --force-define=NIMI[=ARVO]   korvaa määrittelyn ’%define NIMI \"ARVO"
+"\"’\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"
+"  -l, --no-lines                   älä tuota ’#line’-direktiivejä\n"
+"  -k, --token-table                sisällytä merkkisymbolinimien taulu\n"
 "\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -228,7 +435,7 @@
 "                                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"
+"  -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"
@@ -236,79 +443,17 @@
 "                             (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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Ilmoita virheistä (englanniksi) osoitteeseen <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s kotisivu: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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/"
@@ -319,31 +464,31 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "Täydellisen dokumentaation saat suorittamalla komennon: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Kirjoittajat: Robert Corbett ja Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -352,39 +497,40 @@
 "OLE MITÄÄN TAKUUTA; ei edes KAUPPAKELPOISUUDELLE tai SOPIVUUDELLE TIETTYYN "
 "TARKOITUKSEEN.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "monirunkoesittelyt ovat virheellisiä"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: virheellinen kieli"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "monikieliesittelyt ovat virheellisiä"
 
-#: src/getargs.c:747
-#, c-format
-msgid "%s: missing operand"
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "vanhentunut direktiivi: %s, käytä %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "%s: puuttuva operandi"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "ylimääräinen operandi %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "tyhjä"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Kielioppi"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -399,802 +545,953 @@
 "// Kotisivu: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "rivinumeron ylivuoto"
 
-#: src/location.c:95
+#: src/location.c:152
 #, 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/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "rivinumeron ylivuoto"
 
-#: src/muscle-tab.c:450
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
+msgid "rule useless in parser due to conflicts"
+msgstr "sääntö ei kelpaa jäsentimessä ristiriitojen vuoksi"
+
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define-muuttuja %s on määritelty uudelleen"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: määrittelemätön %%define-muuttuja %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define-muuttuja %s on määritelty uudelleen"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define-muuttuja %s on määritelty uudelleen"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define-muuttuja %s on määritelty uudelleen"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr "virheellinen arvo kohteelle %%define-booleanmuuttuja %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "virheellinen arvo kohteelle %%define-muuttuja %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "hyväksytty arvo: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "määritellään uudelleen kohteen %s käyttäjämerkkisymbolinumero"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "puuttuva tunniste parametriesittelyssä"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "virheellinen koodinvaihtosekvenssi: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tyyppi %d on %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Tila %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "siirto, ja siirry tilaan %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "siirry tilaan %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "virhe (ei-assosiatiivinen)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "supistaminen käyttäen sääntöä %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "accept"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Päätteet, säännöillä missä niin tarvitaan"
 
-#: src/print.c:436
+#: src/print.c:391
 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:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " vasemmalla:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " oikealla:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "Säännöt ovat hyödyttömiä jäsentimessä ristiriitojen vuoksi"
+msgstr "Säännöt eivät kelpaa jäsentimessä ristiriitojen vuoksi"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "useita %s esittelyjä"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "kaksoiskappalesymbolinimi kohteelle %s ohitettiin"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "sääntö annettu kohteelle %s, joka on merkkisymboli"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "tyyppien törmäys vastakkain oletustoiminassa: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "käyttämätön arvo: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "asettamaton arvo: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty ei-tyhjässä säännössä"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "tyhjä sääntö ilman %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "vain yksi %s on sallittu sääntöä kohden"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s vaikuttaa vain GLR-jäsentimiin"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "kohdetta %s on seurattava postiivinen numero"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "sääntö on liian pitkä"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "ei sääntöjä syötekieliopissa"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "sääntö on hyödytön kieliopissa"
+msgstr "sääntö ei kelpaa kieliopissa"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr "ei-pääte on hyödytön kieliopissa: %s"
+msgstr "ei-pääte ei kelpaa kieliopissa: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Ei-päätteet ovat hyödyttömiä kieliopissa"
+msgstr "Ei-päätteet eivät kelpaa kieliopissa"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Päätteet ovat käyttämättömiä kieliopissa"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "Säännöt ovat hyödyttömiä kieliopissa"
+msgstr "Säännöt eivät kelpaa kieliopissa"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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"
+msgstr[0] "%d ei-pääte ei kelpaa kieliopissa"
+msgstr[1] "%d ei-päätettä eivät kelpaa kieliopissa"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "aloitussymboli %s ei johda lauseeseen"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "viittaa kohteeseen: %c%s osoitteessa %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "mahdollisesti tarkoitti: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", piilotetaan %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, 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"
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "kokonaisluku on lukualueen ulkopuolella: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "virheellinen viite: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, 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
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "symbolia ei löytynyt tuotannosta: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "harhaanjohtava viite: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "ei-yksiselitteinen viite: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "eksplisiittinen tyyppi annettu tyypittömässä kieliopissa"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$/%s ei ole esitelty tyyppi"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s/%s ei ole esitelty tyyppi"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "yksinäinen ’,’ käsitellään tyhjemerkkinä"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "virheellinen direktiivi: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "virheellinen tunniste: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "virheellinen merkki: %s"
 msgstr[1] "virheellisiä merkkejä: %s"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "virheellinen null-merkki"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "odottamaton tunniste sulkumerkillisessä nimessä: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "odotettiin tunnistetta"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "tyhjä merkkiliteraali"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "virheellinen numero \\-koodinvaihtomerkin jälkeen: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "virheellinen merkki \\-koodinvaihtomerkin jälkeen: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "puuttuva %s tiedoston lopussa"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "puuttuva %s rivin lopussa"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "sulkematon %s-direktiivi rungossa"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX Yacc kieltää ajatusviivat symbolinimissä: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s uudelleenesittely kohteelle %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "symboli %s on esitelty uudelleen"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"symbolia %s käytetään, mutta sitä ei ole määritelty merkkisymbolina eikä "
+"sillä ole sääntöjä"
+
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symboli %s on esitelty uudelleen"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "määritellään uudelleen kohteen %s käyttäjämerkkisymbolinumero"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "määritellään uudelleen kohteen %s käyttäjämerkkisymbolinumero"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "kelpaamaton %s tyypille <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "tyyppiä <%s> käytetään, mutta sitä ei ole liitetty mihinkään symboliin"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
 msgstr "symboli %s on annettu useammassa kuin yhdessä literaalimerkkijonossa"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "käyttäjämerkkijononumeron %d uudelleenesittely kohteelle %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "edellinen esittely kohteelle %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "aloitussymboli %s on määrittelemätön"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "aloitussymboli %s on merkkisymboli"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "uudelleenesittely oletusmerkitylle %%destructor"
+msgid "useless precedence and associativity for %s"
+msgstr "kelpaamaton ensisijaisuus ja liitettävyys kohteelle %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "uudelleenesittely oletus-ei-merkitylle %%destructor"
+msgid "useless precedence for %s"
+msgstr "kelpaamaton ensisijaisuus kohteelle %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "uudelleenesittely oletus-merkitylle %%printer"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "kelpaamaton liitettävyys kohteelle %s, käytä %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "uudelleenesittely oletus-ei-merkitylle %%printer"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "ei-pääte ei kelpaa kieliopissa: %s"
 
-#: 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"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "vanhentunut direktiivi, käytä %s"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr "tilapäisen tiedoston luominen epäonnistui"
+#  Koodissa midrule on keskellä oleva lohko, jota edeltää toprule ja jonka alla on bottomrule.
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  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"
+#~ "  'empty-rule'        tyhjät säännöt ilman %empty\n"
+#~ "  'precedence'        kelpaamaton etuoikeus ja liitännäisyys\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 "
+#~ "KATEGORIA\n"
+#~ "  'none'              käännä pois kaikki varoitukset\n"
+#~ "  'error[=KATEGORIA]' käsittele varoituksia virheinä\n"
+#~ "\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "vakiosyötön tallentaminen epäonnistui"
+#~ 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"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "vakiotulosteen tallentaminen epäonnistui"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "OMINAISUUS on pilkulla eroteltu sanojen luettelo, joka voi sisältää:\n"
+#~ "  'caret'        näytä kaikki virheet sirkumfleksillä\n"
+#~ "  'all'          kaikki yllä olevat\n"
+#~ "  'none'         ota pois käytöstä kaikki yllä olevat\n"
+#~ "  "
 
-#: 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"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "virheellinen argumentti %s valitsimelle %s"
 
-#: 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"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "ei-yksiselitteinen argumentti %s valitsimelle %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Mahdolliset argumentit ovat:"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "tilapäisen tiedoston avaaminen epäonnistui"
+#~ msgid "write error"
+#~ msgstr "kirjoitusvirhe"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Tuntematon järjestelmävirhe"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "tytärohjelma ’%s’ on keskeytetty"
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "tytärohjelmaa ’%s’ ei löytynyt"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:"
 
-#: 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"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: tunnistamaton valitsin ’%c%s’\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "virheellinen argumentti %s valitsimelle %s"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "ei-yksiselitteinen argumentti %s valitsimelle %s"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: valitsin ’--%s’ vaatii argumentin\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Mahdolliset argumentit ovat:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: virheellinen valitsin — ’%c’\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u vapautettu (%.2f%%).\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: valitsin vaatii argumentin — ’%c’\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"
+#~ msgid "memory exhausted"
+#~ msgstr "muisti loppui"
 
-#: 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "putken luominen epäonnistui"
 
-#: 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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s-aliprosessi epäonnistui"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "`"
+#~ msgstr "”"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "lukumäärälokihistogrammi\n"
+#~ msgid "'"
+#~ msgstr "”"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "kokolokihistogrammi\n"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Suoritusajat (sekunteja)\n"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "tiheyshistogrammi\n"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle epäonnistui"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Bittivektoritilastot:\n"
-"\n"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "ei voida palauttaa tiedostotunnistetta %d: dup2 epäonnistui"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Kumuloituneet ajot = %u\n"
+#~ msgid "%s subprocess"
+#~ msgstr "%s-aliprosessi"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "stats-tiedoston lukeminen epäonnistui"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s-aliprosessi sai kohtalokkaan signaalin %d"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "virheellinen stats-tiedostokoko\n"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u vapautettu (%.2f%%).\n"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "stats-tiedostoon kirjoittaminen epäonnistui"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u tallennettu välimuistiin (%.2f%%)\n"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "stats-tiedoston avaaminen kirjoittamista varten epäonnistui"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u tallennettu välimuistiin (%.2f%%)\n"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "kirjoitusvirhe"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u tallennettu välimuistiin (%.2f%%)\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Tuntematon järjestelmävirhe"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: 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:"
+#~ msgid "count log histogram\n"
+#~ msgstr "lukumäärälokihistogrammi\n"
 
-#: 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"
+#~ msgid "size log histogram\n"
+#~ msgstr "kokolokihistogrammi\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"
+#~ msgid "density histogram\n"
+#~ msgstr "tiheyshistogrammi\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"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bittivektoritilastot:\n"
+#~ "\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: tunnistamaton valitsin ’--%s’\n"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Kumuloituneet ajot = %u\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"
+#~ msgid "cannot read stats file"
+#~ msgstr "stats-tiedoston lukeminen epäonnistui"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: virheellinen valitsin — ’%c’\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "virheellinen stats-tiedostokoko\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"
+#~ msgid "cannot write stats file"
+#~ msgstr "stats-tiedostoon kirjoittaminen epäonnistui"
 
-#: 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"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "stats-tiedoston avaaminen kirjoittamista varten epäonnistui"
 
-#: 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"
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "puuttuva %s tiedoston lopussa"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "virheellinen tunniste: %s"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "muisti loppui"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "tyhjä merkkiliteraali"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "virheellinen tunniste: %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 "%s-aliprosessi epäonnistui"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "virheellinen tunniste: %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 "”"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "tyhjä merkkiliteraali"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "”"
+#~ msgid "symbol %s redefined"
+#~ msgstr "symboli %s on määritelty uudelleen"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Suoritusajat (sekunteja)\n"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "kohteen ’%s’ poistaminen epäonnistui"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " YHTEENSÄ              :"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "tilapäisen tiedoston luominen epäonnistui"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "aika kohteessa %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "saving stdin failed"
+#~ msgstr "vakiosyötön tallentaminen epäonnistui"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle epäonnistui"
+#~ msgid "saving stdout failed"
+#~ msgstr "vakiotulosteen tallentaminen epäonnistui"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "ei voida palauttaa tiedostotunnistetta %d: dup2 epäonnistui"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "tilapäisen tiedoston tmpfile avaaminen 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"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "bison-vakiotulosteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
 
-#: 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 "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "m4-vakiosyötteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "tilapäisen tiedoston avaaminen epäonnistui"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "m4-vakiotulosteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "tytärohjelma ’%s’ on keskeytetty"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "tytärohjelmaa ’%s’ ei löytynyt"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "bison-vakiosyötteen edelleenohjaaminen tilapäiseen tiedostoon epäonnistui"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " tyyppi %d on %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "virheellinen $-arvo: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: tunnistamaton valitsin ’--%s’\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " YHTEENSÄ              :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "aika kohteessa %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "empty"
+#~ msgstr "tyhjä"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "merkkiä ’;’ saatetaan tarvita toimintakoodin lopussa"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "tulevat Bison-versiot eivät lisää merkkiä ’;’"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "YYFAIL-käyttö, joka on vanhentunut ja poistetaan"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "uudelleenesittely oletusmerkitylle %%destructor"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "uudelleenesittely oletus-ei-merkitylle %%destructor"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "uudelleenesittely oletus-merkitylle %%printer"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "uudelleenesittely oletus-ei-merkitylle %%printer"
 
 #~ msgid "state %d"
 #~ msgstr "tila %d"
@@ -1238,9 +1535,6 @@
 #~ 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"
 
diff --git a/po/fr.gmo b/po/fr.gmo
index 88749f6..76aeada 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 07da4c6..bc6704c 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,200 +1,412 @@
 # Messages français pour Bison.
-# Copyright (C) 2012 Free Software Foundation, Inc.
+# Copyright (C) 2019 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.
+# Frédéric Marchal <fmarchal@perso.be>, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 2.6.90\n"
+"Project-Id-Version: GNU bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-23 17:59+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n >= 2);\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "conflits S/R (activé par défaut)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "conflits R/R (activé par défaut)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "l'alias chaîne n'est pas attaché à un symbole"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "construction obsolète"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "règle vide sans %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "valeurs de règle intermédiaire non définies ou inutilisées"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "priorité et associativité inutiles"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "incompatibilités avec POSIX Yacc"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "tous les autres avertissements (activé par défaut)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "tous les avertissements sauf « dangling-alias » et « yacc »"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "désactiver les avertissements dans CATEGORIE"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "désactiver tous les avertissements"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "traiter les avertissements comme des erreurs"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Les catégories d'avertissements incluent :"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "avertissement"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "erreur"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "erreur fatale"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc ne supporte pas %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, 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"
+msgid "deprecated directive: %s, use %s"
+msgstr "directive dépréciée: %s, utilisez %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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"
+msgid "duplicate directive"
+msgstr "directive dupliquée"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "conflits: %d décalage/réduction, %d réduction/réduction\n"
+msgid "duplicate directive: %s"
+msgstr "directive dupliquée: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "conflits: %d décalage/réduction\n"
+msgid "previous declaration"
+msgstr "déclaration précédente"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "conflits: %d réduction/réduction\n"
+msgid "only one %s allowed per rule"
+msgstr "seul un %s est permis par règle"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, 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:91
+#, 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:100
+#, 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:602
 #, c-format
 msgid "State %d "
 msgstr "État %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, 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:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflits: %d décalage/réduction\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflits: %d réduction/réduction\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"conflits par décalage/réduction pour la règle %d: %d trouvés, %d attendus"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"conflits par réduction/réduction pour la règle %d: %d trouvés, %d attendus"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr affecte seulement les analyseurs GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "conflits par décalage/réduction: %d trouvés, %d attendus"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d conflit par décalage/réduction"
+msgstr[1] "%d conflits par décalage/réduction"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "conflits par réduction/réduction: %d trouvés, %d attendus"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d conflit par réduction/réduction"
+msgstr[1] "%d conflits par réduction/réduction"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: ouverture impossible"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "erreur d'entrée/sortie"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "ne peut fermer le fichier"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "refus d'écraser le fichier d'entrée %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "sorties en conflit vers le fichier %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
+msgid "%s: cannot backup"
+msgstr "%s: archivage impossible"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "coloriser la sortie"
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "ne pas coloriser la sortie"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "coloriser si le périphérique de sortie est un tty"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "QUAND peut prendre l'une des valeurs suivantes :"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "décrire les états"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "compléter les ensembles d'éléments du cœur avec leurs fermetures"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "explicitement associer les jetons lookahead aux éléments"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "décrire la solution aux conflits par décalage/réduction"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "inclure toutes les informations ci-dessus"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "désactiver le rapport"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+"CHOSES est une liste de mots séparés par des virgules pouvant contenir :"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+"TRACES est une liste de mots séparés par des virgules pouvant contenir :"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "montrer les erreurs avec des curseurs"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "montrer les correctifs sous forme machine"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "ne générer aucun fichier"
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr "tous ci-dessus"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "désactiver tous ci-dessus"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+"FONCTIONS est une liste de mots séparés par des virgules pouvant contenir :"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Pour en savoir davantage, faites : « %s --help ».\n"
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Usage: %s [OPTION]... FICHIER\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\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"
+"LALR(1), IELR(1) ou des tables d'analyseur LR(1) canonique.\n"
 "\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 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
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"  -h, --help                 afficher l'aide-mémoire et terminer\n"
+"  -V, --version              afficher le nom et la version du logiciel et\n"
+"                             terminer\n"
 "      --print-localedir      afficher le répertoire contenant les données "
-"avec dépendance des locales\n"
+"avec\n"
+"                             dépendance des locales et terminer\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"
+"et\n"
+"                             XSLT et terminer\n"
+"  -u, --update               appliquer les correctifs au fichier de "
+"grammaire source\n"
+"                             et terminer\n"
+"  -f, --feature[=FONCTIONS]  activer des fonctionnalités diverses\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Diagnostiques :\n"
+"  -W, --warnings[=CATÉGORIE] rapporter les avertissements dans CATÉGORIE\n"
+"      --color[=QUAND]        quand coloriser les diagnostiques\n"
+"      --style=FICHIER        spécifie le FICHIER CSS pour la colorisation "
+"des diagnostiques\n"
+"\n"
+
+#: src/getargs.c:400
 #, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
-"Analyseur:\n"
-"  -L, --language=LANGAGE           indiquer la langage de programmation de "
+"Réglages de l'analyseur:\n"
+"  -L, --language=LANGAGE           indiquer le 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"
+"  -t, --debug                      activer le mode de suivi\n"
+"                                   identique à « -Dparse.trace »\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"
@@ -203,23 +415,23 @@
 "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"
+"  -y, --yacc                       émuler Yacc en mode POSIX\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"Fichiers de 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"
@@ -230,78 +442,18 @@
 "  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Rapportez toutes anomalies à <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "page d'accueil de %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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/"
@@ -312,31 +464,31 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "Pour la documentation complète, exécutez: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Écrit par Robert Corbett et Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -345,39 +497,40 @@
 "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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "déclarations multiples de squelettes sont inacceptables"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: langage inacceptable"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "les déclarations multiples du langage sont interdits"
+msgstr "les déclarations multiples du langage sont inacceptables"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: opérande manquante"
+msgid "deprecated option: %s, use %s"
+msgstr "option dépréciée : %s, utilisez %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "opérande manquante"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "opérande superflu %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "vide"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammaire"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -390,801 +543,914 @@
 "// Page d'accueil: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "débordement du nombre de lignes"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "débordement du nombre de colonnes"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "débordement du nombre sur un octet"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "…"
+
+#: src/main.c:155
 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
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+"des fix-its peuvent être appliqués. Exécutez à nouveau avec l'option « --"
+"update »."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "variable %%define %s redéfinie"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: variable %%define %s non définie"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "variable %%define « %s » requiert des valeurs « {...} »"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "variable %%define « %s » requiert des valeurs mot-clés"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "variable %%define « %s » requiert des valeurs « \"...\" »"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, 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
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "valeur acceptée : %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "les littéraux caractères ne peuvent pas être des non terminaux"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "les littéraux caractères ne peuvent pas être utilisés avec %s"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "définition de %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "identificateur manquant dans la déclaration de paramètres"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " le type %d est %s\n"
+msgid "invalid version requirement: %s"
+msgstr "exigence de version invalide : %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "décalage et aller à l'état %d\n"
+msgid "require bison %s, but have %s"
+msgstr "exige bison %s mais a %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "État %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "décalage et aller à l'état %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "aller à l'état %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "erreur (non-associative)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "réduction par utilisation de la règle %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "accepter"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$défaut"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminaux, suivis des règles où ils apparaissent"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "à gauche:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " à droite:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "à droite:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "La règle est inutile dans l'analyseur à cause de conflits"
+msgstr "Règles inutiles dans l'analyseur à cause de conflits"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "déclarations multiples de %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "doublon dans le nom de symbole %s est ignoré"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "la règle pour %s, qui est un terminal"
+msgstr "règle donnée pour %s, qui est un terminal"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, 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
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr "règle vide pour une catégorie typée et aucune action"
+msgstr "règle vide pour un non terminal typé et aucune action"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
-msgstr "valeur inutilisée: $%d"
+msgstr "valeur inutilisée : $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr "valeur non initialisée: $$"
+msgstr "valeur non initialisée : $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty sur une règle non vide"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "règle vide sans %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr "le jeton pour %%prec n'est pas défini : %s"
+msgstr "le jeton pour %%prec n'est pas défini : %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "seul un %s est permis par règle"
+msgid "only midrule actions can be typed: %s"
+msgstr "seules des actions de règles intermédiaires peuvent être typées: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s affecte seulement les analyseurs GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s doit être suivi d'un nombre positif"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc ne supporte pas les actions de milieu de règle typées"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "règle trop longue"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "la grammaire n'a pas de règles"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "règle inutile dans la grammaire"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr "unité non terminale inutile dans la grammaire : %s"
+msgstr "non terminal inutile dans la grammaire : %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Non-terminaux inutiles dans la grammaire"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Terminaux inutilisés dans la grammaire"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Règles inutiles dans la grammaire"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "voir %c%s à %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr "signifiait probablement: %c"
+msgstr "signifiait probablement : %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", cache %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " à %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "entier hors limite: %s"
+msgstr "entier hors limite : %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
-msgstr "référence invalide: %s"
+msgstr "référence invalide : %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, 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
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr "symbole pas trouvé en production avant $%d: %.*s"
+msgstr "symbole pas trouvé en production avant $%d : %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr "symbole pas trouvé en production: %.*s"
+msgstr "symbole pas trouvé en production : %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr "référence trompeuse: %s"
+msgstr "référence trompeuse : %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
-msgstr "référence ambiguë: %s"
+msgstr "référence ambiguë : %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "type explicitement attribué à une grammaire sans type"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ de %s n'a pas de type déclaré"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "plusieurs occurrences de $%d avec api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "« , » superflue traitée comme un blanc"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "directive invalide: %s"
+msgstr "directive invalide : %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
-msgstr "identificateur invalide: %s"
+msgstr "identificateur invalide : %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "caractère invalide"
 msgstr[1] "caractères invalides"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "caractère nul invalide"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
-msgstr "identificateur inattendu dans un nom entre accolades: %s"
+msgstr "identificateur inattendu dans un nom entre accolades : %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "un identificateur est attendu"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc ne supporte pas les chaînes littérales"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "caractère littéral vide"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "nombre incorrect après la séquence d'échappement \\ : %s"
+msgstr "nombre incorrect après la séquence d'échappement \\ : %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "caractère invalide après la séquence d'échappement \\ : %s"
+msgstr "caractère invalide après la séquence d'échappement \\ : %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc ne supporte pas les nombres hexadécimaux littéraux"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
-msgstr "chaîne de caractères %s manquante en fin de fichier"
+msgstr "%s manquant en fin de fichier"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
-msgstr "%s manquant à la fin de fichier"
+msgstr "%s manquant en fin de fichier"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "directive %s pas fermée dans le squelette"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr "Le Yacc POSIX interdit les tirets dans les noms de symboles: %s"
+msgstr "Le Yacc POSIX interdit les tirets dans les noms de symboles : %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "redéclaration de %s pour %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "redéclaration de %s pour <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "symbole %s est redéfini"
+msgid "symbol %s redeclared as a token"
+msgstr "symbole %s est redéclaré comme un jeton"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "symbole %s est redéclaré"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "symbole %s est redéclaré comme un non terminal"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "redéfinition du jeton usager numéro de %s"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"le symbole %s est utilisé mais ce n'est pas un jeton et il ne possède pas de "
+"règle ; vouliez-vous utiliser %s ?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "yacc POSIX réserve %%type pour les non terminaux"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbole %s est redéclaré"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "les non terminaux ne peuvent pas recevoir un nombre explicite"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redéfinition du numéro utilisateur du jeton de %s"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "le numéro utilisateur du jeton de %s est trop grand"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "le littéral caractère %s n'est pas attaché à un symbole"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s inutile pour le type <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "le type <%s> est utilisé mais n'est pas associé à un symbole"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "les non terminaux ne peuvent pas recevoir une chaîne synonyme"
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, 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
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "déclaration précédente de %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "numéro de jeton trop grand"
+
+#: src/symtab.c:1119
 #, 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
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "le symbole de départ %s est un terminal"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "redéclaration du %%destructeur par défaut avec étiquette"
+msgid "useless precedence and associativity for %s"
+msgstr "priorité et associativité inutiles pour %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "redéclaration pour le %%destructeur par défaut sans étiquette"
+msgid "useless precedence for %s"
+msgstr "priorité inutile pour %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "redéclaration de l'%%imprimante par défaut avec étiquette"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "associativité inutile pour %s, utilisez %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "redéclaration de l'%%imprimante par défaut sans étiquette"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "directive dépréciée, utilisez %s"
 
-#: 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é"
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Les catégories d'avertissements comprennent :\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"
+#~ "  « empty-rule »        règles vides sans %empty\n"
+#~ "  « midrule-values »    valeurs de règles intermédiaires non définies ou "
+#~ "inutilisées\n"
+#~ "  « precedence »        priorité ou associativité inutile\n"
+#~ "  « yacc »              incompatibilités avec le YACC POSIX\n"
+#~ "  « other »             tous les autres avertissements (activé par "
+#~ "défaut)\n"
+#~ "  « all »               tous les avertissements sauf « yacc »\n"
+#~ "  « no-CATÉGORIE »      supprime les avertissements de la CATÉGORIE\n"
+#~ "  « none »              supprime tous les avertissements\n"
+#~ "  « error=[CATÉGORIE] » traite les avertissements comme des erreurs\n"
 
-#: 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é"
+#~ 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 les états de l'automate\n"
+#~ "  « itemset »    compléter le noyau 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"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "la sauvegarde de stdin a échoué"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FONCTION est une liste de mots séparés par des virgules incluant :\n"
+#~ "  « caret », « diagnostics-show-caret »\n"
+#~ "    montrer les erreurs avec des carets\n"
+#~ "  « fixit », « diagnostics-parseable-fixits »\n"
+#~ "    montrer les correctifs sous forme lisible par une machine\n"
+#~ "  « syntax-only »\n"
+#~ "    ne générer aucun fichier\n"
+#~ "  « all »\n"
+#~ "    toutes celles ci-dessus\n"
+#~ "  « none »\n"
+#~ "    aucune de celles ci-dessus\n"
+#~ "  "
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "la sauvegarde de stdout a échoué"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "paramètre %s pas valable pour %s"
 
-#: 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é"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "paramètre %s ambigu pour %s"
 
-#: 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é"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Les paramètres valides sont :"
 
-#: 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é"
+#~ msgid "write error"
+#~ msgstr "erreur d'écriture"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "l'ouverture d'un fichier temporaire a échoué"
+#~ msgid "Unknown system error"
+#~ msgstr "Erreur système inconnue"
 
-#: 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é"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: l'option « %s%s » est ambiguë\n"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "programme subsidiaire « %s » interrompu"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: l'option « %s%s » est ambiguë ; les possibilités sont :"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "programme subsidiaire « %s » pas trouvé"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: l'option « %s%s » est inconnue\n"
 
-#: 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é"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'option « %s%s » n'admet pas de paramètre\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "paramètre %s pas valable pour %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: l'option « %s%s » requiert un paramètre\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "paramètre %s ambigu pour %s"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: option non valide -- « %c »\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Les paramètres valides sont:"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: l'option requiert un paramètre -- « %c »\n"
 
-#: 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"
+#~ msgid "memory exhausted"
+#~ msgstr "mémoire épuisée"
 
-#: 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "ne peut créer le tube"
 
-#: 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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "le sous-processus %s a échoué"
 
-#: 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"
+#~ msgid "`"
+#~ msgstr "« "
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "'"
+#~ msgstr " »"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "histogramme des compteurs\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Temps d'exécution (secondes)"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "taille de l'histogramme des compteurs\n"
+#~ msgid "CPU user"
+#~ msgstr "CPU utilisateur"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "densité de l'histogramme\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU système"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Statistiques des bitset:\n"
-"\n"
+#~ msgid "wall clock"
+#~ msgstr "temps écoulé"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Exécutions accumulées = %u\n"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle a échoué"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "ne peut lire le fichier de stats"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "impossible de rétablir le fd %d : dup2 a échoué"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "taille erronée du fichier de stats\n"
+#~ msgid "%s subprocess"
+#~ msgstr "sous-processus %s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "ne peut écrire le fichier de stats"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "le sous-processus %s a reçu le signal fatal %d"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "impossible d'ouvrir le fichier de stats en écriture"
+#~ msgid "symbol %s redefined"
+#~ msgstr "symbole %s est redéfini"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "erreur d'écriture"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "le suppression de « %s » a échoué"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Erreur système inconnue"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "la création d'un fichier temporaire a échoué"
 
-#: 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:"
+#~ msgid "saving stdin failed"
+#~ msgstr "la sauvegarde de stdin a échoué"
 
-#: 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"
+#~ msgid "saving stdout failed"
+#~ msgstr "la sauvegarde de stdout a échoué"
 
-#: 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"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "l'ouverture de tmpfile a échoué"
 
-#: 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"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "la redirection du stdout de bison vers un fichier temporaire a échoué"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: l'option «--%s» est inconnue\n"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "la redirection du stdin de m4 depuis un fichier temporaire a échoué"
 
-#: 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"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "l'ouverture d'un fichier temporaire a échoué"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: option non valide -- «%c»\n"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "la redirection du stdout de m4 vers un fichier temporaire a échoué"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "programme subsidiaire « %s » interrompu"
 
-#: 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"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "programme subsidiaire « %s » pas trouvé"
 
-#: 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"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "la redirection du stdin de bison depuis un fichier temporaire a échoué"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u libérés (%.2f%%).\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "mémoire épuisée"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u dans le cache (%.2f%%)\n"
 
-#: 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"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u dans le cache (%.2f%%)\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 "le sous-processus %s a échoué"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u dans le cache (%.2f%%)\n"
 
-#. 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 "«"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "»"
+#~ msgid "count log histogram\n"
+#~ msgstr "histogramme des compteurs\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Temps d'exécution (secondes)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "taille de l'histogramme des compteurs\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTAL                 :"
+#~ msgid "density histogram\n"
+#~ msgstr "densité de l'histogramme\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistiques des bitset:\n"
+#~ "\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle a échoué"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Exécutions accumulées = %u\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "impossible de rétablir le fd %d: dup2 a échoué"
+#~ msgid "cannot read stats file"
+#~ msgstr "ne peut lire le fichier de stats"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "sous-processus %s"
+#~ msgid "bad stats file size\n"
+#~ msgstr "taille erronée du fichier de stats\n"
 
-#: 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 "cannot write stats file"
+#~ msgstr "ne peut écrire le fichier de stats"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "impossible d'ouvrir le fichier de stats en écriture"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "temps dans %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " le type %d est %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "valeur $ invalide: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'option « --%s » n'admet pas de paramètre\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: l'option «--%s» est inconnue\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: l'option «-W %s» n'admet pas de paramètre\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: l'option «-W %s» requiert un paramètre\n"
+
+#~ msgid "empty"
+#~ msgstr "vide"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "un « ; » est peut-être nécessaire à la fin du code d'action"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "les versions suivantes de Bison n'ajouteront pas le « ; »"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "l'utilisation de YYFAIL est obsolète et sera supprimée"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "redéclaration du %%destructeur par défaut avec étiquette"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "redéclaration pour le %%destructeur par défaut sans étiquette"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "redéclaration de l'%%imprimante par défaut avec étiquette"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "redéclaration de l'%%imprimante par défaut sans étiquette"
 
 #~ msgid "state %d"
 #~ msgstr "état %d"
diff --git a/po/ga.gmo b/po/ga.gmo
index e91e613..7d02cf2 100644
--- a/po/ga.gmo
+++ b/po/ga.gmo
Binary files differ
diff --git a/po/ga.po b/po/ga.po
index 2191f45..28e99d8 100644
--- a/po/ga.po
+++ b/po/ga.po
@@ -1,172 +1,365 @@
 # 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
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2004, 2006, 2008, 2010, 2012, 2017
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.5\n"
+"Project-Id-Version: bison 3.0.4\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2017-01-09 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"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "riail fholamh gan %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "tosaíocht agus comhthiomsaitheacht gan úsáid le haghaidh %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "rabhadh"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Earráid I/A"
+msgstr "earráid"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "earráid mharfach"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "treoir dulta i léig: %s, úsáid %s ina áit"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "treoir dulta i léig; úsáid %s ina áit"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "treoir dulta i léig; úsáid %s ina áit"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "fógra roimhe seo"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "ní cheadaítear ach %s amháin an riail"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Staid %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "coinbhleachtaí: %d iomlaoid/laghdú, %d laghdú/laghdú\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "coinbhleachtaí: %d iomlaoid/laghdú\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "coinbhleachtaí: %d laghdú/laghdú\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "coinbhleachtaí iomlaoid/laghdú: aimsíodh %d, bhíothas ag súil le %d"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "coinbhleachtaí laghdú/laghdú: aimsíodh %d, bhíothas ag súil le %d"
+
+#: src/conflicts.c:669
 #, 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
+#: src/conflicts.c:686
 #, 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ú"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "coinbhleachtaí iomlaoid/laghdú: aimsíodh %d, bhíothas ag súil le %d"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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ú"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d choinbhleacht iomlaoid/laghdú"
+msgstr[1] "%d choinbhleacht iomlaoid/laghdú"
+msgstr[2] "%d choinbhleacht iomlaoid/laghdú"
+msgstr[3] "%d gcoinbhleacht iomlaoid/laghdú"
+msgstr[4] "%d coinbhleacht iomlaoid/laghdú"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "coinbhleachtaí laghdú/laghdú: aimsíodh %d, bhíothas ag súil le %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d choinbhleacht laghdú/laghdú"
+msgstr[1] "%d choinbhleacht laghdú/laghdú"
+msgstr[2] "%d choinbhleacht laghdú/laghdú"
+msgstr[3] "%d gcoinbhleacht laghdú/laghdú"
+msgstr[4] "%d coinbhleacht laghdú/laghdú"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "ní féidir comhad `%s' a oscailt"
+msgstr "%s: ní féidir oscailt"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "earráid ionchurtha/aschurtha"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "ní féidir comhad a dhúnadh"
+msgstr "ní féidir an comhad a dhúnadh"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "diúltaítear inchomhad %s a fhorscríobh"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: ní féidir oscailt"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d choinbhleacht iomlaoid/laghdú"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, 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:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Úsáid: %s [ROGHA]... COMHAD\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\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
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 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
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -179,165 +372,123 @@
 "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"
+"  -f, --feature[=GNÉ]        cumasaigh gnéithe éagsúla\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Parsálaí:\n"
-"  -L, --language=TEANGA      socraigh an ríomhtheanga le haschur\n"
-"                             (gné thurgnamhach é seo)\n"
+"  -L, --language=TEANGA      socraigh an ríomhtheanga le scríobh amach\n"
 "  -S, --skeleton=COMHAD      socraigh an chreatlach le húsáid\n"
 "  -t, --debug                ullmhaigh an parsálaí le haghaidh "
 "dífhabhtaithe\n"
+"                               is ionann é seo agus '-Dparse.trace'\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"
+"  -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"
+"                                   dulta i léig; úsáid '-Dapi."
+"prefix=RÉIMÍR'\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
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"      --defines[=COMHAD]     scríobh 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"
+"  -r, --report=RUDAÍ         tabhair mionsonraí maidir leis an 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"
+"  -x, --xml[=COMHAD]         scríobh tuairisc XML ar an uathoibreán\n"
+"                             (tá an scéimre XML turgnamhach)\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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"Seol tuairiscí ar fhabhtanna chuig <%s>.\n"
+msgstr "Seol tuairiscí ar fhabhtanna chuig <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "Leathanach baile %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+msgstr "Cúnamh ginearálta le bogearraí 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Seol tuairiscí faoi fhadhbanna leis an aistriúchán chuig <http://"
+"translationproject.org/team/>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Le teacht ar an doiciméadú iomlán, úsáid: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Le Robert Corbett agus Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -346,39 +497,40 @@
 "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
+#: src/getargs.c:503
 #, 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
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "teanga neamhbhailí `%s'"
+msgstr "%s: teanga neamhbhailí"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "ní cheadaítear níos mó ná teanga amháin"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "oibreann ar iarraidh i ndiaidh `%s'"
+msgid "deprecated option: %s, use %s"
+msgstr "treoir dulta i léig: %s, úsáid %s ina áit"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
 #, fuzzy, c-format
+msgid "missing operand"
+msgstr "%s: oibreann ar iarraidh"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "oibreann breise `%s'"
+msgstr "oibreann breise %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "folamh"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramadach"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -391,215 +543,279 @@
 "// Leathanach baile: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "líne-uimhir thar maoil"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "uimhir an cholúin thar maoil"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "líne-uimhir thar maoil"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 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/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "sainmhíniú nua ar athróg %%define %s"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr "luach neamhbhailí ar athróg %%define `%s': `%s'"
+msgstr "%s: athróg %%define %s gan sainmhíniú"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
 #, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "sainmhíniú nua ar athróg %%define %s"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "sainmhíniú nua ar athróg %%define %s"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "sainmhíniú nua ar athróg %%define %s"
+
+#: src/muscle-tab.c:690
+#, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr "luach neamhbhailí ar athróg Boole %%define `%s'"
+msgstr "luach neamhbhailí ar athróg Boole %%define %s"
 
-#: src/muscle-tab.c:609
-#, fuzzy, c-format
+#: src/muscle-tab.c:744
+#, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr "luach neamhbhailí ar athróg %%define `%s': `%s'"
+msgstr "luach neamhbhailí ar athróg %%define %s: %s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "luach glactha: `%s'"
+msgstr "luach glactha: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "sainmhíniú nua ar an uimhir theaghráin do %s"
+
+#: src/parse-gram.y:889
 #, 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/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "éalúchán neamhbhailí: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr ""
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Staid %d"
+
+#: src/print.c:136
 #, 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
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "téigh go staid %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "earráid (neamh-chomhthiomsaitheach)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "laghdaigh, ag úsáid rialach %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "glac leis"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Sloinn dolaghdaithe, le rialacha más cuí"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Sloinn inlaghdaithe, le rialacha más cuí"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " ar clé:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " ar dheis:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Rialacha gan tairbhe sa pharsálaí de bhrí coinbhleachtaí"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, 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
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
 msgstr ""
-"caismirt idir cineálacha toraidh i bhfeidhm chumaiscthe `%s': <%s> != <%s>"
+"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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "rinneadh neamhaird d'ainm dúbailte ar %s"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, 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
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "luach gan úsáid: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "luach gan socrú: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty ar riail nach bhfuil folamh"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "riail fholamh gan %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "ní cheadaítear ach %s amháin an riail"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "Níl %s curtha i bhfeidhm ach ar pharsálaithe GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, 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
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "riail rófhada"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "níl aon riail sa ghramadach ionchurtha"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "riail gan tairbhe sa ghramadach"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "slonn inlaghdaithe gan tairbhe sa ghramadach: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Sloinn inlaghdaithe gan tairbhe sa ghramadach"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Sloinn dolaghdaithe gan úsáid sa ghramadach"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Rialacha gan tairbhe sa ghramadach"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -609,7 +825,7 @@
 msgstr[3] "%d slonn inlaghdaithe gan tairbhe sa ghramadach"
 msgstr[4] "%d slonn inlaghdaithe gan tairbhe sa ghramadach"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -619,602 +835,647 @@
 msgstr[3] "%d riail gan tairbhe sa ghramadach"
 msgstr[4] "%d riail gan tairbhe sa ghramadach"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, c-format
-msgid "use of YYFAIL, which is deprecated and will be removed"
-msgstr "tá YYFAIL i léig agus bainfear amach é sa todhchaí"
+msgid "stray '%s'"
+msgstr "'%s' ar strae"
 
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "déanann sé tagairt do: %c%s ag %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "b'fhéidir: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", %c á chur i bhfolach"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, 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"
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "slánuimhir as raon: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "tagairt neamhbhailí: %s"
 
-#: src/scan-code.l:619
-#, fuzzy, c-format
+#: src/scan-code.l:506
+#, 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 `$'"
+"earráid chomhréire tar éis '%c', bhíothas ag súil le slánuimhir, litir, '_', "
+"'[', nó '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "siombail gan aimsiú i riail ghramadaí: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "tagairt mhíthreorach: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "tagairt dhébhríoch: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, 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
+#: src/scan-code.l:639
+#, 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'"
+msgstr "Níl aon chineál fógartha ag $$ na meánrialach ag $%d de %s"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "Níl aon chineál fógartha ag $$ de `%s'"
+msgstr "Níl aon chineál fógartha ag $$ de %s"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "Níl aon chineál fógartha ag $%s de `%s'"
+msgstr "Níl aon chineál fógartha ag $%s de %s"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "`,' ar seachrán, caith leis mar spás bán"
+msgstr "',' ar seachrán; déileálfar leis mar spás bán"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "treoir neamhbhailí: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "aitheantóir neamhbhailí: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 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"
+msgstr[0] "carachtar neamhbhailí"
+msgstr[1] "carachtair neamhbhailí"
+msgstr[2] "carachtair neamhbhailí"
+msgstr[3] "carachtair neamhbhailí"
+msgstr[4] "carachtair neamhbhailí"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, 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:459
+#, c-format
+msgid "an identifier expected"
+msgstr "bhíothas ag súil le haitheantóir"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carachtar neamhbhailí in ainm idir lúibíní"
+msgstr[1] "carachtair neamhbhailí in ainm idir lúibíní"
+msgstr[2] "carachtair neamhbhailí in ainm idir lúibíní"
+msgstr[3] "carachtair neamhbhailí in ainm idir lúibíní"
+msgstr[4] "carachtair neamhbhailí in ainm idir lúibíní"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "carachtar litriúil folamh"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "carachtair bhreise i gcarachtar litriúil"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "uimhir neamhbhailí tar éis éalúcháin-\\: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, 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
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "`%s' ar iarraidh ag críoch an chomhaid"
+msgstr "%s ar iarraidh ag deireadh an chomhaid"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "`%s' ar iarraidh ag críoch na líne"
+msgstr "%s ar iarraidh ag deireadh na líne"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "treoir %s gan dúnadh i gcreatlach"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, 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
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "athfhógra %s ar %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "athfhógra ar shiombail %s"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"tá siombail %s in úsáid, ach níl sé ina teaghrán comharthach agus níl aon "
+"riail aici"
+
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "athfhógra ar shiombail %s"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "sainmhíniú nua ar an uimhir theaghráin do %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "sainmhíniú nua ar an uimhir theaghráin do %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s gan úsáid le haghaidh cineáil <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "tá cineál <%s> in úsáid, ach níl sé ceangailte le siombail ar bith"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
+#, 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"
+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
+#: src/symtab.c:701
+#, 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'"
+msgstr "tá níos mó ná teaghrán litriúil amháin ag siombail %s"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "athfhógra ar uimhir theaghráin %d do %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "fógra roimhe seo ar %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "siombail tosaigh %s gan sainmhíniú"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "is teaghrán comharthach í an tsiombail tosaigh %s"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "athfhógra ar %%destructor réamhshocraithe clibeáilte"
+msgid "useless precedence and associativity for %s"
+msgstr "tosaíocht agus comhthiomsaitheacht gan úsáid le haghaidh %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "athfhógra ar %%destructor réamhshocraithe gan chlib"
+msgid "useless precedence for %s"
+msgstr "tosaíocht gan úsáid le haghaidh %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "comhthiomsaitheacht gan úsáid le haghaidh %s, úsáid %%precedence"
 
 #, fuzzy
-#~ msgid "stray '@'"
-#~ msgstr "`@' ar strae"
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "slonn inlaghdaithe gan tairbhe sa ghramadach: %s"
+
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "treoir dulta i léig; úsáid %s ina áit"
+
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "I measc na gcatagóirí rabhaidh:\n"
+#~ "  'midrule-values'  luachanna meánrialach gan socrú nó gan úsáid\n"
+#~ "  'yacc'            neamh-chomhoiriúnach le Yacc POSIX\n"
+#~ "  'conflicts-sr'    coinbhleachtaí iomlaoid/laghdú (réamhshocrú)\n"
+#~ "  'conflicts-rr'    coinbhleachtaí laghdú/laghdú (réamhshocrú)\n"
+#~ "  'deprecated'      comhstruchtúir dulta i léig\n"
+#~ "  'empty-rule'      rialacha folmha gan %empty\n"
+#~ "  'precedence'      tosaíocht agus comhthiomsaitheacht gan úsáid\n"
+#~ "  'other'           gach rabhadh eile (réamhshocrú)\n"
+#~ "  'all'             gach rabhadh seachas 'yacc'\n"
+#~ "  'no-CATAGÓIR'     ná taispeáin rabhaidh ó CATAGÓIR\n"
+#~ "  'none'            ná taispeáin rabhadh ar bith\n"
+#~ "  'error[=CATAGÓIR]'  déileáil le rabhaidh mar earráidí\n"
+
+#~ 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 ""
+#~ "Séard atá i RUDAÍ ná liosta focal, scartha le camóga, as na cinn seo a "
+#~ "leanas:\n"
+#~ "  'state'        déan cur síos ar na staideanna\n"
+#~ "  'itemset'      comhlíon na croíthacair míreanna lena gclabhsúr\n"
+#~ "  'look-ahead'   ceangail teaghráin réamhfheiceála le míreanna go "
+#~ "follasach\n"
+#~ "  'solved'       réiteach ar choinbhleachtaí iomlaoid/laghdú\n"
+#~ "  'all'          cuir gach sonra thuas san áireamh\n"
+#~ "  'none'         díchumasaigh an tuairisc\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "Séard atá i GNÉ ná liosta focal scartha le camóga as na cinn seo a "
+#~ "leanas:\n"
+#~ "  'caret'        taispeáin earráidí le carait\n"
+#~ "  'all'          taispeáin gach rud thuas\n"
+#~ "  'none'         díchumasaigh gach rud thuas\n"
+#~ "  "
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argóint neamhbhailí %s chun %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argóint dhébhríoch %s chun %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Na hargóintí bailí:"
+
+#~ msgid "write error"
+#~ msgstr "earráid ag scríobh"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Earráid chórais anaithnid"
+
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: Tá an rogha '-W %s' débhríoch\n"
+
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: Tá an rogha '%s' débhríoch; féidearthachtaí:"
+
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: rogha anaithnid '%c%s'\n"
+
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '%c%s'\n"
+
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: tá argóint de dhíth i ndiaidh na rogha '--%s'\n"
+
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: rogha neamhbhailí -- '%c'\n"
+
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- '%c'\n"
+
+#~ msgid "memory exhausted"
+#~ msgstr "cuimhne ídithe"
+
+#~ msgid "cannot create pipe"
+#~ msgstr "ní féidir píopa a chruthú"
+
+#~ msgid "%s subprocess failed"
+#~ msgstr "theip ar fhophróiseas %s"
+
+#~ msgid "`"
+#~ msgstr "`"
+
+#~ msgid "'"
+#~ msgstr "'"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Agaí rite (soicindí)\n"
+
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "theip ar _open_osfhandle"
+
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "ní féidir fd %d a athchóiriú: theip ar dup2"
+
+#~ msgid "%s subprocess"
+#~ msgstr "fophróiseas %s"
+
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "fuair fophróiseas %s comhartha marfach %d"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u scaoilte (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u curtha i dtaisce (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u curtha i dtaisce (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u curtha i dtaisce (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histeagram loga áirimh\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histeagram loga méid\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histeagram dlúithe\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Staitistic Bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Rití carnacha = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "níorbh fhéidir comhad na staitisticí a léamh"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "méid mhícheart ar chomhad na staitisticí\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "níorbh fhéidir comhad na staitisticí a scríobh"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "níorbh fhéidir comhad na staitisticí a oscailt chun é a léamh"
+
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "%s ar iarraidh ag deireadh an chomhaid"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "aitheantóir neamhbhailí: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "carachtar litriúil folamh"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "aitheantóir neamhbhailí: %s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "aitheantóir neamhbhailí: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "carachtar litriúil folamh"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "sainmhíniú nua ar shiombail %s"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "níorbh fhéidir '%s' a scriosadh"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "níorbh fhéidir comhad sealadach a chruthú"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "níorbh fhéidir stdin a shábháil"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "níorbh fhéidir stdout a shábháil"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "níorbh fhéidir an comhad sealadach a oscailt"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "níorbh fhéidir stdout ó bison a athdhíriú go dtí an comhad sealadach"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "níorbh fhéidir an comhad sealadach a athdhíriú go dtí stdin m4"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "níorbh fhéidir comhad sealadach a oscailt"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "níorbh fhéidir stdout ó m4 a athdhíriú go dtí comhad sealadach"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "cuireadh isteach ar fhochlár '%s'"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "fochlár '%s' gan aimsiú"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "níorbh fhéidir an comhad sealadach a athdhíriú go dtí stdin bison"
+
+# don't know if alignment matters here, so use 4-letter 'sórt' vs. 'cineál'-KPS
+#~ msgid " type %d is %s\n"
+#~ msgstr " de chineál %d is %s\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '--%s'\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: rogha anaithnid '--%s'\n"
+
+#~ 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"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: tá argóint de dhíth i ndiaidh na rogha '-W %s'\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " IOMLÁN                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "aga i %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "empty"
+#~ msgstr "folamh"
 
 #~ msgid ""
 #~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
@@ -1242,6 +1503,36 @@
 #~ "athróg %%define `%s' gan sainmhíniú seolta chuig "
 #~ "muscle_percent_define_check_values"
 
+#~ msgid "state %d"
+#~ msgstr "staid %d"
+
+#~ msgid "stray `@'"
+#~ msgstr "`@' ar strae"
+
+#~ msgid "a `;' might be needed at the end of action code"
+#~ msgstr "seans go bhfuil `;' ar iarraidh ag deireadh an ghnímh"
+
+#~ msgid "future versions of Bison will not add the `;'"
+#~ msgstr "ní chuirfear `;' leis i leaganacha de Bison amach anseo"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "tá YYFAIL i léig agus bainfear amach é sa todhchaí"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "luach neamhbhailí $: $%d"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "athfhógra ar %%destructor réamhshocraithe clibeáilte"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "athfhógra ar %%destructor réamhshocraithe gan chlib"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "athfhógra ar %%printer réamhshocraithe clibeáilte"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "athfhógra ar %%printer réamhshocraithe gan chlib"
+
 #~ msgid ""
 #~ "Generate LALR(1) and GLR parsers.\n"
 #~ "\n"
@@ -1253,9 +1544,6 @@
 #~ 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"
 
@@ -1378,8 +1666,5 @@
 #~ 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
index ddd1c1c..9a7f9e3 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 43f1621..238d29a 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -2,164 +2,357 @@
 # 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.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.5\n"
+"Project-Id-Version: bison 2.7.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-11-09 16:52+0100\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-04-18 00:00+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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"
+"X-Generator: Gtranslator 2.91.6\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "konflikt u prethodnici za %s and %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "upozorenje"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "U/I greška"
+msgstr "greška"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
-msgstr "fatalna greška"
+msgstr "kobna greška"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "neispravan propis: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "neispravan propis: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "neispravan propis: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "prethodna deklaracija"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "samo je jedan %s dozvoljen po pravilu"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Stanje %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikti: %d pomakni/reduciraj, %d reduciraj/reduciraj\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikti: %d pomakni/reduciraj\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikti: %d reduciraj/reduciraj\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "%d pomakni/reduciraj konflikt"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "%d pomakni/reduciraj konflikt"
+
+#: src/conflicts.c:669
 #, 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:686
+#, fuzzy, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "%d pomakni/reduciraj konflikt"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d pomakni/reduciraj konflikt"
+msgstr[1] "%d pomakni/reduciraj konflikta"
+msgstr[2] "%d pomakni/reduciraj konflikata"
+
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%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
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: ne mogu otvoriti"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "ulazno/izlazna greška"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "ne mogu zatvoriti datoteku"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "odbijam pisati preko ulazne datoteke %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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"
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: ne mogu otvoriti"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d pomakni/reduciraj konflikt"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Pokušajte „%s --help” za više informacija.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Uporaba: %s [OPCIJA]... DATOTEKA\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
-"Stvori deterministički LR ili općeniti LR (GLR) analizator koji\n"
+"Napravi 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
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Isto vrijedi i za opcionalne argumente.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -170,26 +363,37 @@
 "      --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"
+"  -f, --feature[=MOGUĆNOST]  aktiviraj razne mogućnosti\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
@@ -201,23 +405,21 @@
 "                                   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
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -230,73 +432,18 @@
 "  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Prijavite greške na <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s početna stranica: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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"
@@ -306,30 +453,30 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "Za prikaz cjelokupne dokumentacije pokrenite „info bison”.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Napisali Robert Corbett i Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -338,39 +485,40 @@
 "jamstava,\n"
 "čak ni za TRGOVINSKU PRIKLADNOST ili ODGOVARANJE ODREĐENOJ SVRSI.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "višestruke deklaracije predloška nisu ispravne"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: neispravan jezik"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "višestruke deklaracije jezika nisu ispravne"
 
-#: src/getargs.c:747
-#, c-format
-msgid "%s: missing operand"
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "neispravan propis: %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "%s: nedostaje operand"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "operand viška %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "prazno"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramatika"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -383,211 +531,276 @@
 "// Početna stranica: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "preljev broja redaka"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "preljev broja stupaca"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "preljev broja redaka"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "pravilo beskorisno u analizatoru zbog konflikata"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define varijabla %s je ponovo definirana"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: nedefinirana %%define varijabla %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define varijabla %s je ponovo definirana"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define varijabla %s je ponovo definirana"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define varijabla %s je ponovo definirana"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr "neispravna vrijednost %%define logičke varijable %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "neispravna vrijednost %%define varijable %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "prihvaćena vrijednost: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "ponovo definiram broj korisničkog simbola od %s"
+
+#: src/parse-gram.y:889
 #, 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/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "neispravna referenca: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr ""
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Stanje %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "pomakni i idi u stanje %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "idi u stanje %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "greška (neasocijativna)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "reduciraj koristeći pravilo %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "prihvati"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Završni znakovi, s pravilima gdje se pojavljuju"
 
-#: src/print.c:436
+#: src/print.c:391
 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:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " s lijeva:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " s desna:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Pravila su beskorisna u analizatoru zbog konflikata"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "višestruke %s deklaracije"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "dvostruko ime simbola za %s je zanemareno"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "sukob vrsta u zadanoj radnji: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "nekorištena vrijednost: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nepostavljena vrijednost: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "samo je jedan %s dozvoljen po pravilu"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s utječe samo na GLR analizatore"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "nakon %s mora slijediti pozitivan broj"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "pravilo je predugačko"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "nema pravila u ulaznoj gramatici"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "pravilo je beskorisno u gramatici"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "nezavršni znak je beskoristan u gramatici: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Nezavršni znakovi beskorisni u gramatici"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Završni znakovi nekorišteni u gramatici"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Pravila beskorisna u gramatici"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -595,7 +808,7 @@
 msgstr[1] "%d nezavršna znaka beskorisna u gramatici"
 msgstr[2] "%d nezavršnih znakova beskorisnih u gramatici"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -603,590 +816,676 @@
 msgstr[1] "%d pravila beskorisna u gramatici"
 msgstr[2] "%d pravila beskorisnih u gramatici"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "odnosi se na: %c%s na %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "vjerojatno znači: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", skrivajući %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, 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"
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ", ne može mu pristupiti mid-rule radnja na $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "cijeli broj izvan granica: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "neispravna referenca: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, 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
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "simbol nije pronađen u proizvodnji: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "krivo navodeća referenca: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "višeznačna referenca: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "navedena eksplicitna vrsta u neunesenoj gramatici"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ od %s nema deklariranu vrstu"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s od %s nema deklariranu vrstu"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "postupam sa zalutalim „,” kao praznim prostorom"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "neispravan propis: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "neispravan identifikator: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "neispravan znak: %s"
-msgstr[1] "neispravan znak: %s"
-msgstr[2] "neispravan znak: %s"
+msgstr[0] "neispravan znak"
+msgstr[1] "neispravni znakovi"
+msgstr[2] "neispravni znakovi"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "neočekivani identifikator u zagrađenom imenu: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "očekujem identifikator"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "neispravan znak u zagrađenom imenu"
+msgstr[1] "neispravni znakovi u zagrađenom imenu"
+msgstr[2] "neispravni znakovi u zagrađenom imenu"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "prazna znakovna konstanta"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "višak znakova u znakovnoj konstanti"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "neispravan broj nakon \\-izlaza: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "neispravan znak nakon \\-izlaza: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "nedostaje %s na kraju datoteke"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "nedostaje %s na kraju retka"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "nezatvoren %s propis u predlošku"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr "premalo argumenata %s propisa u predlošku"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX Yacc zabranjuje povlake u imenima simbola: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "ponovna deklaracija %s za %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "simbol %s ponovo deklariran"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "simbol %s je korišten, ali nije definiran kao simbol i nema pravila"
+
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s ponovo deklariran"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "ponovo definiram broj korisničkog simbola od %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "ponovo definiram broj korisničkog simbola od %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "simbol %s je korišten, ali nije definiran kao simbol i nema pravila"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "ponovna deklaracija broja korisničkog simbola %d za %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "prethodna deklaracija za %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "početni simbol %s nije definiran"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "početni simbol %s je simbol"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, 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"
+msgid "useless precedence and associativity for %s"
 msgstr ""
-"preusmjeravanje standardnog izlaza programa bison u privremenu datoteku nije "
-"uspjelo"
 
-#: djgpp/subpipe.c:201
+#: src/symtab.c:1297
+#, fuzzy, c-format
+msgid "useless precedence for %s"
+msgstr "konflikt u prethodnici za %s and %s"
+
+#: src/symtab.c:1301
 #, c-format
-msgid "redirecting m4's stdin from the temporary file failed"
+msgid "useless associativity for %s, use %%precedence"
 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"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "nezavršni znak je beskoristan u gramatici: %s"
 
-#: 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"
+#, fuzzy
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "neispravan propis: %s"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "podređeni program „%s” je prekinut"
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  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"
+#~ "  „deprecated”      zastarjele konstrukcije\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"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "podređeni program „%s” nije pronađen"
+#, 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 ""
+#~ "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"
 
-#: 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"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "MOGUĆNOST je popis zarezom odvojenih riječi koje mogu biti:\n"
+#~ "  „caret”        prikaži greške sa znakom „^”\n"
+#~ "  „all”          sve navedeno\n"
+#~ "  „none”         onemogući sve navedeno\n"
+#~ "  "
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "neispravan argument %s za %s"
+#~ 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"
+#~ 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:"
+#~ 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"
+#~ msgid "write error"
+#~ msgstr "greška pisanja"
 
-#: lib/bitset_stats.c:180
-#, c-format
-msgid "%u bitset_sets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_sets, %u u spremniku (%.2f%%)\n"
+#~ msgid "Unknown system error"
+#~ msgstr "Nepoznata greška sustava"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u u spremniku (%.2f%%)\n"
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: opcija „-W %s” je višeznačna\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"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: opcija „%s” je višeznačna, mogućnosti:"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: neprepoznata opcija „%c%s”\n"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "histogram dnevnika brojanja\n"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: opcija „%c%s” ne dozvoljava argument\n"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "histogram dnevnika veličine\n"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: opcija „--%s” zahtijeva argument\n"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "histogram gustoće\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: neispravna opcija -- „%c”\n"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Statistike postavljanja bitova:\n"
-"\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: opcija zahtijeva argument -- „%c”\n"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Akumulirana izvršavanja = %u\n"
+#~ msgid "memory exhausted"
+#~ msgstr "memorija iscrpljena"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "ne mogu čitati datoteku stanja"
+#~ msgid "cannot create pipe"
+#~ msgstr "ne mogu napraviti cjevovod"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "neispravna veličina datoteke stanja\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s potproces nije uspio"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "ne mogu zapisati datoteku stanja"
+#~ msgid "`"
+#~ msgstr "„"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "ne mogu otvoriti datoteku stanja za pisanje"
+#~ msgid "'"
+#~ msgstr "”"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "greška pisanja"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Vremena izvršavanja (u sekundama)\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Nepoznata greška sustava"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle nije uspio"
 
-#: 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:"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "ne mogu obnoviti fd %d: dup2 nije uspio"
 
-#: 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"
+#~ msgid "%s subprocess"
+#~ msgstr "%s potproces"
 
-#: 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"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s potproces je primio kobni signal %d"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u oslobođeno (%.2f%%).\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: neprepoznata opcija „--%s”\n"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u u spremniku (%.2f%%)\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"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u u spremniku (%.2f%%)\n"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: neispravna opcija -- „%c”\n"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u u spremniku (%.2f%%)\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"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\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"
+#~ msgid "count log histogram\n"
+#~ msgstr "histogram dnevnika brojanja\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"
+#~ msgid "size log histogram\n"
+#~ msgstr "histogram dnevnika veličine\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"
+#~ msgid "density histogram\n"
+#~ msgstr "histogram gustoće\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memorija iscrpljena"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistike postavljanja bitova:\n"
+#~ "\n"
 
-#: 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"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Akumulirana izvršavanja = %u\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 "%s potproces nije uspio"
+#~ msgid "cannot read stats file"
+#~ msgstr "ne mogu čitati datoteku stanja"
 
-#. 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 "„"
+#~ msgid "bad stats file size\n"
+#~ msgstr "neispravna veličina datoteke stanja\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "”"
+#~ msgid "cannot write stats file"
+#~ msgstr "ne mogu zapisati datoteku stanja"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Vremena izvršavanja (u sekundama)\n"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "ne mogu otvoriti datoteku stanja za pisanje"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " UKUPNO                :"
+#, fuzzy
+#~| msgid "unexpected end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "neočekivan kraj datoteke"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "vrijeme u %s: %ld.%06ld (%ld%%)\n"
+#, fuzzy
+#~| msgid "unterminated string"
+#~ msgid "translatable string"
+#~ msgstr "nezavršeni znakovni niz"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle nije uspio"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "neispravan identifikator: %s"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "ne mogu obnoviti fd %d: dup2 nije uspio"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "prazna znakovna konstanta"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "%s potproces"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "neispravan identifikator: %s"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "neispravan identifikator: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "prazna znakovna konstanta"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "simbol %s ponovo definiran"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "uklanjanje „%s” nije uspjelo"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "stvaranje privremene datoteke nije uspjelo"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "spremanje standardnog ulaza nije uspjelo"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "spremanje standardnog izlaza nije uspjelo"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "otvaranje privremene datoteke nije uspjelo"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "preusmjeravanje standardnog izlaza programa bison u privremenu datoteku "
+#~ "nije uspjelo"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "preusmjeravanje standardnog ulaza programa m4 iz privremene datoteke nije "
+#~ "uspjelo"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "otvaranje privremene datoteke nije uspjelo"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "preusmjeravanje standardnog izlaza programa u privremenu datoteku nije "
+#~ "uspjelo"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "podređeni program „%s” je prekinut"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "podređeni program „%s” nije pronađen"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "preusmjeravanje standardnog ulaza programa bison iz privremene datoteke "
+#~ "nije uspjelo"
+
+#~ 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"
+
+#~ msgid "empty"
+#~ msgstr "prazno"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " vrsta %d je %s\n"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "može biti potrebna „;” na kraju koda radnje"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "buduće inačice Bisona neće dodavati „;”"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "korištenje YYFAIL, što je zastarjelo i bit će uklonjeno"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "neispravna $ vrijednost: $%d"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "ponovna deklaracija za zadani označeni %%destructor"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "ponovna deklaracija za zadani neoznačeni %%destructor"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "ponovna deklaracija za zadani označeni %%printer"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "ponovna deklaracija za zadani neoznačeni %%printer"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opcija „--%s” ne dozvoljava argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: neprepoznata opcija „--%s”\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opcija „-W %s” ne dozvoljava argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: opcija „-W %s” zahtijeva argument\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " UKUPNO                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "vrijeme u %s: %ld.%06ld (%ld%%)\n"
 
 #~ msgid "state %d"
 #~ msgstr "stanje %d"
@@ -1229,11 +1528,6 @@
 #~ 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"
 
@@ -1318,9 +1612,6 @@
 #~ 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"
 
@@ -1378,9 +1669,6 @@
 #~ 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"
 
@@ -1447,9 +1735,6 @@
 #~ 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:"
 
@@ -1463,11 +1748,13 @@
 #~ msgid_plural "%d rules never reduced\n"
 #~ msgstr[0] "%d pravilo nije nikad reducirano\n"
 #~ msgstr[1] "%d pravila nisu nikad reducirana\n"
+#~ msgstr[2] "%d pravila nije nikad reducirano\n"
 
 #~ msgid "%d useless nonterminal"
 #~ msgid_plural "%d useless nonterminals"
-#~ msgstr[0] "%d beskorisan nezavršni znak"
-#~ msgstr[1] "%d beskorisnih nezavršnih znakova"
+#~ msgstr[0] "%d beskoristan nezavršni znak"
+#~ msgstr[1] "%d beskorisna nezavršna znaka"
+#~ msgstr[2] "%d beskorisnih nezavršnih znakova"
 
 #~ msgid " and "
 #~ msgstr " i"
@@ -1475,7 +1762,8 @@
 #~ msgid "%d useless rule"
 #~ msgid_plural "%d useless rules"
 #~ msgstr[0] "%d beskorisno pravilo"
-#~ msgstr[1] "%d beskorisnih pravila"
+#~ msgstr[1] "%d beskorisna pravila"
+#~ msgstr[2] "%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
index eb657e4..c3d2ea0 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index fdbdb1e..ef679bd 100644
--- a/po/id.po
+++ b/po/id.po
@@ -10,7 +10,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -18,140 +18,332 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr ""
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "peringatan"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 #, fuzzy
 msgid "error"
 msgstr "Kesalahan I/O"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "kesalahan fatal"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "direktif tidak valid: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "deklarasi sebelumnya"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "hanya satu %s yang dibolehkan per aturan"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "State %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflik: %d geser/kurangi, %d kurangi/kurangi\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflik: %d geser/kurangi\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflik: %d kurangi/kurangi\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr hanya berlaku bagi parser GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:691
+#, fuzzy, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "mengharapkan %d shift/reduce konflik"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "diharapkan %d kurangi/kurangi konflik"
 
-#: src/files.c:114
+#: src/files.c:124
 #, fuzzy, c-format
 msgid "%s: cannot open"
 msgstr "tidak dapat membuka file `%s'"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "tidak dapat menutup file"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "menolak untuk overwrite berkas masukan %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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"
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "tidak dapat membuka file `%s'"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "mengharapkan %d shift/reduce konflik"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Penggunaan: %s [OPTION]... FILE\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Itu juga benar untuk opsional argumen.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -165,20 +357,31 @@
 "  -W, --warnings=[KATEGORI]  laporkan peringatan kegagalan dalam KATEGORI\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Parser:\n"
 "  -L, --language=BAHASA      spesifikasikan bahasa keluaran pemrograman\n"
@@ -191,21 +394,20 @@
 "  -n, --no-parser            hasilkan hanya tabel\n"
 "  -k, --token-table          sertakan tabel nama token\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -218,70 +420,19 @@
 "  -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
+#: src/getargs.c:436
 #, fuzzy, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr ""
 "\n"
 "Laporkan bugs ke <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -290,29 +441,29 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Written by Robert Corbett and Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -320,39 +471,40 @@
 "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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "deklarasi kerangka ganda tidak valid"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
 msgstr "bahasa tidak valid: `%s'"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "deklarasi bahasa ganda tidak valid"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
+msgid "deprecated option: %s, use %s"
+msgstr "direktif tidak valid: %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "operand hilang setelah `%s'"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
 msgstr "operand ekstra `%s'"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "kosong"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammar"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -361,807 +513,851 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "overflow nomor baris"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "overflow jumlah kolom"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "overflow nomor baris"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "aturan tidak berguna dalam parser karena konflik"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
-msgstr "%s `%s' didefinisikan ulang"
+msgstr "simbol %s didefinisikan ulang"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, fuzzy, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "nilai tidak valid untuk %%define variable `%s': `%s'"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "simbol %s didefinisikan ulang"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "simbol %s didefinisikan ulang"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "simbol %s didefinisikan ulang"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, 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
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
 msgstr "nilai tidak digunakan: $%d"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "mendefinisikan ulang nomor token user %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "identifier tidak ada dalam deklarasi parameter"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "urutan escape tidak valid: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tipe %d adalah %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, fuzzy, c-format
 msgid "State %d"
 msgstr "State %d "
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "geser, dan ke state %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "ke state %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "kesalahan(nonasosiatif)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "kurangi gunakan aturan %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "terima"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminal, dengan aturan tempat mereka muncul"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Nonterminal, dengan aturan tempat mereka muncul"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " di kiri:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " di kanan:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "aturan tidak berguna dalam parser karena konflik"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "deklarasi ganda %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "aturan diberikan untuk %s, yang merupakan sebuah token"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "bentrokan tipe pada aksi baku: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "nilai tidak digunakan: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nilai tidak diset: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "hanya satu %s yang dibolehkan per aturan"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s hanya mempengaruhi parser GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s harus diikuti angka positif"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "aturan terlalu panjang"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "tidak ada aturan dalam tata bahasa masukan"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "aturan tidak berguna dalam tata bahasa"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "bukan terminal tidak berguna dalam tata bahasa: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Bukan terminal, tidak berguna dalam tata bahasa"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Terminal tidak digunakan dalam tata bahasa"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Aturan tidak berguna dalam tata bahasa"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "simbol awal %s tidak melahirkan kalimat"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "integer ke luar batas: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
 msgstr "direktif tidak valid: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr ""
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
 msgstr "argumen %s ambigu untuk %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "tipe eksplisit diberikan dalam tata bahasa yang tidak diketikan"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, fuzzy, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ dari `%s' tidak memiliki tipe yang terdeklarasi"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
 msgstr "stray `,' dianggap sebagai white space"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "direktif tidak valid: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
 msgstr "direktif tidak valid: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, fuzzy
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "karakter tidak valid: %s"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "karakter null tidak valid"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr ""
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 #, 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "nomor tidak valid setelah \\-escape: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "karakter tidak valid setelah \\-escape: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
 msgstr "kehilangan `%s' di akhir file"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, fuzzy, c-format
 msgid "missing %s at end of line"
 msgstr "hilang `%s' di akhir baris"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "direktif %s tidak tertutup dalam kerangka"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s redeklarasi untuk %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "simbol %s dideklarasikan ulang"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"simbol %s digunakan, namun tidak didefinisikan sebagai token dan tidak "
+"memiliki aturan"
+
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s dideklarasikan ulang"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "mendefinisikan ulang nomor token user %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "mendefinisikan ulang nomor token user %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+"simbol %s digunakan, namun tidak didefinisikan sebagai token dan tidak "
+"memiliki aturan"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, fuzzy, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "%s redeklarasi untuk %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, fuzzy, c-format
 msgid "previous declaration for %s"
 msgstr "deklarasi sebelumnya"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "simbol awal %s tidak didefinisikan"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "simbol awal %s adalah sebuah token"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, 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"
+msgid "useless precedence and associativity for %s"
 msgstr ""
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#: src/symtab.c:1297
 #, c-format
-msgid "creation of a temporary file failed"
+msgid "useless precedence for %s"
 msgstr ""
 
-#: djgpp/subpipe.c:127
+#: src/symtab.c:1301
 #, c-format
-msgid "saving stdin failed"
+msgid "useless associativity for %s, use %%precedence"
 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 "eliminate useless chain rules"
+#~ msgstr "bukan terminal tidak berguna dalam tata bahasa: %s"
+
+#, fuzzy
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "direktif tidak valid: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  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"
+
+#, 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 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"
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argument %s tidak valid untuk %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argumen %s ambigu untuk %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Argumen valid adalah:"
+
+#, fuzzy
+#~| msgid "fatal error"
+#~ msgid "write error"
+#~ msgstr "kesalahan fatal"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Kesalahan sistem tidak dikenal"
+
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: pilihan '%s' ambigu\n"
+
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: pilihan '%s' ambigu\n"
+
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: pilihan tidak dikenal '%c%s'\n"
+
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: pilihan '%c%s' tidak membolehkan sebuah argumen\n"
+
+#, fuzzy
+#~| msgid "%s: option '%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n"
+
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: pilihan tidak valid -- '%c'\n"
+
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: pilihan membutuhkan sebuah argumen -- '%c'\n"
+
+#~ msgid "memory exhausted"
+#~ msgstr "memori habis"
+
+#, fuzzy
+#~| msgid "cannot close file"
+#~ msgid "cannot create pipe"
+#~ msgstr "tidak dapat menutup file"
+
+#~ msgid "`"
+#~ msgstr "`"
+
+#~ msgid "'"
+#~ msgstr "'"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Waktu eksekusi (detik)\n"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u freed (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u cached (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u cached (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u cached (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "hitung log histogram\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "ukuran log histogram\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "kepadatan histogram\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistik bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Run terakumulasi = %u\n"
+
+#, fuzzy
+#~| msgid "Could not read stats file."
+#~ msgid "cannot read stats file"
+#~ msgstr "Tidak dapat membaca file stat."
+
+#, fuzzy
+#~| msgid "Bad stats file size.\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "Ukuran file stat buruk.\n"
+
+#, fuzzy
+#~| msgid "Could not write stats file."
+#~ msgid "cannot write stats file"
+#~ msgstr "Tidak dapat menulis file stat."
+
+#, fuzzy
+#~| msgid "Could not open stats file for writing."
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Tidak dapat membuka file stat untuk ditulisi."
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "kehilangan `%s' di akhir file"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "[identifier]"
+#~ msgstr "direktif tidak valid: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier"
+#~ msgstr "direktif tidak valid: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier:"
+#~ msgstr "direktif tidak valid: %s"
+
+#, fuzzy
+#~| msgid "symbol %s redeclared"
+#~ msgid "symbol %s redefined"
+#~ msgstr "simbol %s dideklarasikan ulang"
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "saving stdout failed"
+#~ msgstr "kehilangan `%s' di akhir file"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' could not be invoked"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "program subsider `%s' tidak dapat dipanggil"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' could not be invoked"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "program subsider `%s' tidak dapat dipanggil"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Hasilkan parser LALR(1) dan GLR.\n"
+#~ "\n"
+
+#~ msgid "empty"
+#~ msgstr "kosong"
+
+#~ msgid "%s `%s' redefined"
+#~ msgstr "%s `%s' didefinisikan ulang"
 
 #~ msgid ""
 #~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
@@ -1189,18 +1385,50 @@
 #~ "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 " type %d is %s\n"
+#~ msgstr " tipe %d adalah %s\n"
+
+#~ msgid "state %d"
+#~ msgstr "state %d"
+
+#~ msgid "stray `@'"
+#~ msgstr "kelebihan `@'"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "nilai $ tidak valid: %d"
 
 #~ 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 "redeclaration for default tagged %%destructor"
+#~ msgstr "deklarasi ulang untuk tagged %%destructor baku"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "deklarasi ulang untuk tagless %%destructor baku"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "deklarasi ulang untuk tagged %%printer baku"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "deklarasi ulang untuk taggless %%printer baku"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: pilihan '--%s' tidak membolehkan sebuah argumen\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: pilihan tidak dikenal '--%s'\n"
+
+#~ msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgstr "%s: pilihan '-W %s' ambigu\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: pilihan '-W %s' tidak membolehkan sebuah argumen\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "waktu dalam %s: %ld.%06ld (%ld%%)\n"
 
 #~ msgid "unrecognized escape sequence: %s"
 #~ msgstr "urutan escape tidak dikenal: %s"
diff --git a/po/it.gmo b/po/it.gmo
index 710d7b6..0f4be98 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 88e1f10..c5d3ed0 100644
--- a/po/it.po
+++ b/po/it.po
@@ -6,166 +6,369 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr ""
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "attenzione"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 #, fuzzy
 msgid "error"
 msgstr "errore di input/output"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 #, fuzzy
 msgid "fatal error"
 msgstr "errore fatale: "
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "direttiva non valida: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "direttiva non valida: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "direttiva non valida: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, fuzzy, c-format
+msgid "previous declaration"
+msgstr "prima dichiarazione"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "solo un %s è permesso in una regola"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Stato %d"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflitti: %d shift/riduzione, %d riduzione/riduzione\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr " %d conflitti shift/riduzione\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr " %d conflitti riduzione/riduzione\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr considerato solo nei parser GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:691
+#, fuzzy, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "atteso %d conflitto shift/riduzione"
 msgstr[1] "attesi %d conflitti shift/riduzione"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "atteso %d conflitto riduzione/riduzione"
 msgstr[1] "attesi %d conflitti riduzione/riduzione"
 
-#: src/files.c:114
+#: src/files.c:124
 #, fuzzy, c-format
 msgid "%s: cannot open"
 msgstr "impossibile aprire il file `%s'"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, fuzzy, c-format
 msgid "cannot close file"
 msgstr "impossibile chiudere il file `%s'"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr ""
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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"
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "impossibile aprire il file `%s'"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "atteso %d conflitto shift/riduzione"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Provare `%s --help' per ulteriori informazioni.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Utilizzo: %s [OPZIONE]... FILE\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr ""
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specifica lo scheletro da usare\n"
@@ -176,21 +379,20 @@
 "  -n, --no-parser            genera le sole tabelle\n"
 "  -k, --token-table          include una tabella di nomi dei token\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -200,61 +402,17 @@
 "  -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
+#: src/getargs.c:436
 #, fuzzy, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Segnalare eventuali bug a <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -263,71 +421,72 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Scritto da Robert Corbett e Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"sottoposta la copia. NON c'è ALCUNA garanzia, neanche di\n"
 "COMMERCIABILITA` o di ADEGUATEZZA AD UN PARTICOLARE SCOPO.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, fuzzy, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "dichiarazioni multiple per %s"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
-msgstr "valore non valido: %s"
+msgstr "valore $ non valido"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 #, fuzzy
 msgid "multiple language declarations are invalid"
 msgstr "dichiarazioni multiple per %s"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
+msgid "deprecated option: %s, use %s"
+msgstr "direttiva non valida: %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "manca un operando dopo `%s'"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
 msgstr "operando non richiesto `%s'"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "vuoto"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatica"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -336,812 +495,822 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr ""
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr ""
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr ""
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 #, fuzzy
 msgid "rule useless in parser due to conflicts"
 msgstr "regola mai ridotta a causa dei conflitti"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
 msgstr "simbolo %s ridefinito"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr ""
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "simbolo %s ridefinito"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "simbolo %s ridefinito"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "simbolo %s ridefinito"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr ""
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
 msgstr "valore non valido: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "numero di token definito dall'utente specificato due volte per %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "manca un identificatore nella dichirazione di un parametro"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "escape non valido: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " il tipo %d è %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, fuzzy, c-format
 msgid "State %d"
 msgstr "Stato %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "shift e prosecuzione allo stato %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "prosecuzione allo stato %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "errore (non associativo)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "riduzione con la regola %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "accetta"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Simboli terminali e regole in cui appaiono"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Simboli nonterminali e regole in cui appaiono"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " nel primo membro:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " nel secondo membro:"
 
-#: src/print.c:510
+#: src/print.c:447
 #, fuzzy
 msgid "Rules useless in parser due to conflicts"
 msgstr "regola mai ridotta a causa dei conflitti"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "dichiarazioni multiple per %s"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "fornita una regola per il token %s"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, 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
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, fuzzy, c-format
 msgid "unused value: $%d"
 msgstr "valore non valido: %s"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr ""
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
 msgstr ""
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "solo un %s è permesso in una regola"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s considerato solo nei parser GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s deve essere seguito da un intero positivo"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr ""
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "nessuna regola nella grammatica di input"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 #, fuzzy
 msgid "rule useless in grammar"
 msgstr "nessuna regola nella grammatica di input"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr ""
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 #, fuzzy
 msgid "Nonterminals useless in grammar"
 msgstr "Simboli nonterminali e regole in cui appaiono"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 #, fuzzy
 msgid "Terminals unused in grammar"
 msgstr "nessuna regola nella grammatica di input"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 #, fuzzy
 msgid "Rules useless in grammar"
 msgstr "nessuna regola nella grammatica di input"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "intero fuori dai limiti: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
 msgstr "direttiva non valida: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr ""
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
 msgstr "argomento ambiguo %s per %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr ""
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, fuzzy, c-format
 msgid "$$ of %s has no declared type"
 msgstr "Manca una dichiarazione di tipo per $$ di `%s'"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
 msgstr "`,' inattesa interpretata come uno spazio"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "direttiva non valida: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
 msgstr "direttiva non valida: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, 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
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "carattere nullo non valido"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr ""
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 #, 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, fuzzy, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "carattere nullo non valido: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, fuzzy, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "carattere non valido: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
 msgstr "manca un `%s' alla fine del file"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, fuzzy, c-format
 msgid "missing %s at end of line"
 msgstr "manca un `%s' alla fine della linea"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "troppi simboli nella grammatica (il limite è %d)"
+msgstr "troppi simboli nella grammatica (il limite è %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "dichiarazione due volte di %s per %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 msgstr "simbolo %s ridefinito"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "%d simbolo nonterminale inutilizzato"
+
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "usato il simbolo %s, ma non è un token e non ha regole"
+
+#: src/symtab.c:380
+#, 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:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
 #, fuzzy, c-format
 msgid "symbol %s redeclared"
 msgstr "simbolo %s ridefinito"
 
-#: src/symtab.c:367
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
 #, 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:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "numero di token definito dall'utente specificato due volte per %s"
 
-#: src/symtab.c:415
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "usato il simbolo %s, ma non è un token e non ha regole"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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"
+msgstr "simbolo `%s' usato più di una volta in una stringa letterale"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, fuzzy, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "il simbolo `%s' dà pi&grave; di una stringa letterale"
+msgstr "il simbolo `%s' dà pi&grave; di una stringa letterale"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, fuzzy, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "dichiarazione due volte di %s per %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, fuzzy, c-format
 msgid "previous declaration for %s"
 msgstr "dichiarazione due volte di %s per %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "simbolo iniziale %s non definito"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "specificato il token %s come simbolo iniziale"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
+msgid "useless precedence and associativity for %s"
 msgstr ""
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
+msgid "useless precedence for %s"
 msgstr ""
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
+msgid "useless associativity for %s, use %%precedence"
 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."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "Simboli nonterminali e regole in cui appaiono"
 
-#: 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."
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "direttiva non valida: %s"
 
-#: lib/bitset_stats.c:292
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Impossibile aprire in scrittura il file delle statistiche."
+#~ 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"
 
-#: lib/closeout.c:112
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argomento non valido %s per %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argomento ambiguo %s per %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Gli argomenti validi sono:"
+
 #, fuzzy
-msgid "write error"
-msgstr "errore fatale: "
+#~| msgid "syntax error"
+#~ msgid "write error"
+#~ msgstr "errore di sintassi"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Errore di sistema sconosciuto"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: l'opzione `%s' è ambigua\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"
+#, fuzzy
+#~| msgid "%s: unrecognized option `%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opzione sconosciuta `%c%s'\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"
+#, fuzzy
+#~| msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opzione `%c%s' non ammette argomenti\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, fuzzy, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: opzione sconosciuta `--%s'\n"
+#, fuzzy
+#~| msgid "%s: option `%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: l'opzione `%s' richiede un argomento\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"
+#, fuzzy
+#~| msgid "%s: invalid option -- %c\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: opzione non valida -- %c\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"
+#, fuzzy
+#~| msgid "%s: option requires an argument -- %c\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: l'opzione richiede un argomento -- %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"
+#~ msgid "memory exhausted"
+#~ msgstr "memoria esaurita"
 
-#: 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"
+#, fuzzy
+#~| msgid "cannot close file"
+#~ msgid "cannot create pipe"
+#~ msgstr "impossibile chiudere il file `%s'"
 
-#: 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"
+#~ msgid "`"
+#~ msgstr "`"
 
-#: 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"
+#~ msgid "'"
+#~ msgstr "'"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memoria esaurita"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Tempo di esecuzione (in secondi)\n"
 
-#: 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'"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_alloc, %u liberati (%.2f%%).\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 ""
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_set, %u in cache (%.2f%%)\n"
 
-#. 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 "`"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_reset, %u in cache (%.2f%%)\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_test, %u in cache (%.2f%%)\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Tempo di esecuzione (in secondi)\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_list\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTALE                :"
+#~ msgid "count log histogram\n"
+#~ msgstr "istogramma dei conteggi\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tempo in %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "istogramma delle dimensioni\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "density histogram\n"
+#~ msgstr "istogranna delle densità\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistiche dei bitset:\n"
+#~ "\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Esecuzioni accumulate = %u\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#, fuzzy
+#~| msgid "Could not read stats file."
+#~ msgid "cannot read stats file"
+#~ msgstr "Impossibile leggere il file delle statistiche."
 
-#~ msgid "state %d"
-#~ msgstr "stato %d"
+#, fuzzy
+#~| msgid "Bad stats file size.\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "Dimensione errata del file delle statistiche.\n"
+
+#, fuzzy
+#~| msgid "Could not write stats file."
+#~ msgid "cannot write stats file"
+#~ msgstr "Impossibile scrivere il file delle statistiche."
+
+#, fuzzy
+#~| msgid "Could not open stats file for writing."
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Impossibile aprire in scrittura il file delle statistiche."
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "manca un `%s' alla fine del file"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "[identifier]"
+#~ msgstr "direttiva non valida: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier"
+#~ msgstr "direttiva non valida: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier:"
+#~ msgstr "direttiva non valida: %s"
+
+#, fuzzy
+#~| msgid "symbol %s redefined"
+#~ msgid "symbol %s redefined"
+#~ msgstr "simbolo %s ridefinito"
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "saving stdout failed"
+#~ msgstr "manca un `%s' alla fine del file"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' failed"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "esecuzione del programma ausiliario `%s' fallita"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' not found"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "impossibile trovare il programma ausiliario `%s'"
 
 #~ msgid "warning: "
 #~ msgstr "attenzione: "
@@ -1153,8 +1322,8 @@
 #~ "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"
+#~ "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 ""
@@ -1163,14 +1332,23 @@
 #~ "  -V, --version   output version information and exit\n"
 #~ "  -y, --yacc      emulate POSIX yacc\n"
 #~ msgstr ""
-#~ "Modalità operative:\n"
+#~ "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 "empty"
+#~ msgstr "vuoto"
+
 #~ msgid "POSIX forbids declarations in the grammar"
 #~ msgstr "POSIX proibisce l'uso di dichiarazioni interne alla grammatica"
 
+#~ msgid " type %d is %s\n"
+#~ msgstr " il tipo %d è %s\n"
+
+#~ msgid "state %d"
+#~ msgstr "stato %d"
+
 #~ msgid "Rules never reduced"
 #~ msgstr "Regole mai ridotte"
 
@@ -1194,11 +1372,6 @@
 #~ 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 "
 
@@ -1207,24 +1380,30 @@
 #~ 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: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opzione `--%s' non ammette argomenti\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: opzione sconosciuta `--%s'\n"
+
 #~ msgid "%s: illegal option -- %c\n"
 #~ msgstr "%s: opzione non valida -- %c\n"
 
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: l'opzione `-W %s' è ambigua\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opzione `-W %s' non ammette un argomento\n"
+
 #~ msgid "subsidiary program `%s' could not be invoked"
 #~ msgstr "impossibile invocare il programma ausiliario `%s'"
 
@@ -1232,6 +1411,12 @@
 #~ msgstr ""
 #~ "esecuzione del programma ausiliario `%s' fallita (codice di uscita %d)"
 
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTALE                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tempo in %s: %ld.%06ld (%ld%%)\n"
+
 #~ msgid "syntax error: cannot back up"
 #~ msgstr "errore di sintassi: impossibile tornare indietro"
 
@@ -1245,7 +1430,7 @@
 #~ msgstr "stack troppo grande"
 
 #~ msgid "Stack size increased to %lu\n"
-#~ msgstr "La nuova dimensione dello stack è %lu\n"
+#~ msgstr "La nuova dimensione dello stack è %lu\n"
 
 #~ msgid "Entering state %d\n"
 #~ msgstr "Prosecuzione allo stato %d\n"
@@ -1257,7 +1442,7 @@
 #~ msgstr "Ora alla fine del file.\n"
 
 #~ msgid "Next token is"
-#~ msgstr "Il prossimo token è"
+#~ msgstr "Il prossimo token è"
 
 #~ msgid "Shifting"
 #~ msgstr "Shift"
@@ -1280,9 +1465,6 @@
 #~ 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"
 
diff --git a/po/ja.gmo b/po/ja.gmo
index 4e8482a..8b0f7ec 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index da8fa06..68e0807 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,248 +1,443 @@
 # Japanese message for GNU bison
-# Copyright (C) 2001, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2012, 2018 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
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012, 2018
+# Hiroshi Takekawa <sian@big.or.jp>, <sian.ht@gmail.com>, 2019
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 2.5.1\n"
+"Project-Id-Version: GNU bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-25 19:20+0900\n"
+"Last-Translator: Hiroshi Takekawa <sian@big.or.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.1.1\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "S/R 競合 (デフォルトで有効)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "R/R 競合 (デフォルトで有効)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "文字列エイリアスとシンボルの対応がない"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "もはや用いられないコンストラクト"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "%empty なしでの空の規則"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "設定されていないか使われていない midrule 値"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "意味のない precedence と associativity"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "POSIX Yacc との非互換性"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "その他の警告全て (デフォルトで有効)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "'dangling-alias' と 'yacc' 以外の警告全て"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "CATEGORY の警告をオフ"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "全ての警告をオフ"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "警告をエラー扱いする"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "含まれる警告カテゴリ:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "警告"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
 msgstr "エラー"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 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/complain.c:547
+#, c-format
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc は %s をサポートしていません"
 
-#: 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/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "非推奨の指示です:%s、%s を使ってください"
 
-#: 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/complain.c:571
+#, c-format
+msgid "duplicate directive"
+msgstr "重複した指示"
 
-#: src/conflicts.c:492
-#, fuzzy, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "変化記号を半音低くする"
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "重複した指示: %s"
 
-#: src/conflicts.c:495
-#, fuzzy, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "変化記号を半音低くする"
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "以前の宣言"
 
-#: src/conflicts.c:497
-#, fuzzy, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "発光を減らす(_L)"
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "一つの条件部につき一つしか %s を使えません"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "規則 %d とトークン %s の競合をシフトとして解決"
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "規則 %d とトークン %s の競合を還元として解決"
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "規則 %d とトークン %s の競合をエラーとして解決"
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "状態 %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "競合: %d シフト/還元, %d 還元/還元\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "競合: %d シフト/還元\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "競合: %d 還元/還元\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "規則 %d のシフト/還元衝突: %d 個が見つかりました、%d 個は期待通りです"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "規則 %d の還元/還元衝突: %d 個が見つかりました、%d 個は期待通りです"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr ""
+msgstr "%%expect-rr は GLR パーサにしか適用できません"
 
-#: 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:686
+#, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "シフト/還元衝突: %d 個が見つかりました, %d 個は期待通りです"
 
-#: src/conflicts.c:621
-#, fuzzy, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] "ホスト名の衝突\n"
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d 個のシフト/還元競合"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "還元/還元衝突: %d 個が見つかりました, %d 個は期待通りです"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d 還元/還元競合"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: 開くことができません"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "入力/出力エラーです"
 
-#: src/files.c:133
+#: src/files.c:143
 #, 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
+#: src/files.c:374
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "refusing to overwrite the input file %s"
+msgstr "入力ファイル %s の上書きを拒否しました"
+
+#: src/files.c:382
+#, c-format
+msgid "conflicting outputs to file %s"
+msgstr "ファイル %s への出力が衝突しています"
+
+#: src/fixits.c:122
+#, c-format
+msgid "%s: cannot backup"
+msgstr "%s: バックアップできません"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "出力に色をつける"
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "出力に色をつけない"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "出力デバイスが tty の時だけ色をつける"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "WHEN は以下のうちのどれかです:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "状態を説明"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "コアアイテムセットを閉包で完成"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "lookahead トークンを明示的にアイテムに結合"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "解決したシフト/還元について説明"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "上記の全てを含む"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "レポートをしない"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "THINGS は以下の単語をコンマ(,)で区切ったリストです:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr "TRACES は以下の単語をコンマ(,)で区切ったリストです:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "エラーを ^ つきで表示"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "修正を出力"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "ファイルを生成しない"
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr "上記全て有効化"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "上記全て無効化"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr "FEATURES は以下の単語をコンマ(,)で区切ったリストです:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "`%s --help' で詳細情報を参照してください\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "使い方: %s [オプション]... ファイル\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
+"deterministic LR か generalized LR (GLR) パーサを\n"
+"LALR(1), IELR(1), または canonical LR(1) パーサテーブルを用いて生成する。\n"
+"\n"
 
-#: src/getargs.c:309
-#, fuzzy
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr "長いオプションに必須の引数は短いオプションにも必須です.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "オプションの引数についても同様です。\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
+"動作モード:\n"
+"  -h, --help                 このヘルプを表示して終了\n"
+"  -V, --version              バージョン情報を表示して終了\n"
+"      --print-localedir      ローケル依存データがある\n"
+"                             ディレクトリを表示して終了\n"
+"      --print-datadir        スケルトンと XSLT がある\n"
+"                             ディレクトリを表示して終了\n"
+"  -u, --update               ソース文法ファイルに修正を適用して終了\n"
+"  -f, --feature[=FEATURES]   機能を有効にする\n"
+"\n"
 
-#: src/getargs.c:329
-#, fuzzy, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"診断:\n"
+"  -W, --warnings[=CATEGORY]  CATEGORY に属する警告を表示\n"
+"      --color[=WHEN]         診断結果への色のつけ方を指示\n"
+"      --style=FILE           診断結果に色をつける CSS に FILE を使う\n"
+"\n"
+
+#: src/getargs.c:400
+#, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "構文解析器:\n"
+"  -L, --language=LANGUAGE    どのプログラミング言語で出力するか指定する\n"
 "  -S, --skeleton=FILE        利用するスケルトンを指定する\n"
 "  -t, --debug                構文解析のデバッグ用の手段\n"
+"                                   '-Dparse.trace' と同等\n"
 "      --locations            計算結果位置を有効にする\n"
+"  -D, --define=NAME[=VALUE]        '%define NAME VALUE' と似たことをする\n"
+"  -F, --force-define=NAME[=VALUE]  '%define NAME VALUE' を上書きする\n"
 "  -p, --name-prefix=PREFIX   PREFIX を外部シンボルとして先頭に挿入する\n"
+"                                   '-Dapi.prefix=PREFIX' を使ってください\n"
 "  -l, --no-lines             `#line' ディレクティブを生成しない\n"
-"  -n, --no-parser            テーブルのみを生成する\n"
 "  -k, --token-table          トークン名のテーブルを含める\n"
+"  -y, --yacc                 POSIX Yacc をエミュレートする\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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[=FILE]       ヘッダも生成\n"
+"  -d                         ヘッダを生成(FILE は指定できない、POSIX Yacc 向"
+"け)\n"
+"  -r, --report=THINGS        オートマトンについて詳細を出力\n"
+"      --report-file=FILE     レポートを FILE に出力\n"
+"  -v, --verbose              '--report=state' を同じ\n"
+"  -b, --file-prefix=PREFIX   出力ファイル名の頭に PREFIX をつける\n"
+"  -o, --output=FILE          FILE に出力\n"
+"  -g, --graph[=FILE]         オートマトンのグラフも出力\n"
+"  -x, --xml[=FILE]           オートマトンを 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 ""
-
-#: 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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"バグを発見したら <%s> 宛に報告して下さい。\n"
-"翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してくださ"
-"い。\n"
+msgstr "バグを発見したら <%s> 宛に報告して下さい。\n"
 
-#: src/getargs.c:396
-#, fuzzy, c-format
+#: src/getargs.c:437
+#, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s のホームページ: <%s>\n"
 
-#: src/getargs.c:397
-#, fuzzy
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 "GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>\n"
@@ -252,29 +447,31 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してくださ"
+"い。\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "充実したドキュメントは次のコマンドで表示できます: info bison\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Robert Corbett と Richard Stallman によって書かれました\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -285,40 +482,40 @@
 "これはフリーソフトウェアです -- 複製についての条件はソースを見ましょう。\n"
 "一切の保証はありません -- 商業性や目的適合性についての保証すらありません。\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "%s が複数個宣言されました"
+msgstr "複数のスケルトンの宣言は無効です"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: 無効な言語"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "%s が複数個宣言されました"
+msgstr "複数の言語の宣言は無効です"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: オペランドがありません"
+msgid "deprecated option: %s, use %s"
+msgstr "%s は非推奨のオプションです。%s を使ってください"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "オペランドがありません"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "余分なオペランド %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "空"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "文法"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -326,1435 +523,618 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Generated by %s.\n"
+"// Report bugs to <%s>.\n"
+"// Home page: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "行番号がオーバーフローしました"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "列番号がオーバーフローしました"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "バイト数がオーバーフローしました"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "..."
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "衝突のせいでパーサ内の規則が使用できません"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "自動的に修正できます。'--update' を付けて再度実行してください。"
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "変数インデックスが不正です"
+msgstr "%%define 変数 %s が再定義されました"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr "前の定義がここにありました"
+msgstr "前の定義"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
-#, fuzzy, c-format
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr "警告: 未定義の変数 `%.*s'"
+msgstr "%s: 未定義の %%define 変数 %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define 変数 '%s' は '{...}' を値として必要としています"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define 変数 '%s' はキーワードを値として必要としています"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define 変数 '%s' は '\"...\"' を値として必要としています"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "%%define Boolean variable %s としては不正な値"
 
-#: 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
+#: src/muscle-tab.c:744
 #, c-format
-msgid " type %d is %s\n"
-msgstr " タイプ %d は %s です\n"
+msgid "invalid value for %%define variable %s: %s"
+msgstr "%%define 変数 %s の値として不適切です: %s"
 
-#: src/print.c:164
-#, fuzzy, c-format
-msgid "shift, and go to state %d\n"
-msgstr "    %-4s\tシフト、および状態 %d へ\n"
+#: src/muscle-tab.c:749
+#, c-format
+msgid "accepted value: %s"
+msgstr "受け入れられた値: %s"
 
-#: src/print.c:166
-#, fuzzy, c-format
-msgid "go to state %d\n"
-msgstr "先頭に移動"
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "文字リテラルは非終端にはなれません"
 
-#: src/print.c:203
-#, fuzzy
-msgid "error (nonassociative)\n"
-msgstr "%s サブプロセス入出力エラー"
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "文字リテラルは %s と一緒に使えません"
 
-#: src/print.c:226
-#, fuzzy, c-format
-msgid "reduce using rule %d (%s)"
-msgstr " (\"%s\"からの規則, %d行)"
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "%s の定義"
 
-#: src/print.c:228
-#, fuzzy, c-format
-msgid "accept"
-msgstr "許可する(_A)"
+#: src/parse-gram.y:889
+#, c-format
+msgid "missing identifier in parameter declaration"
+msgstr "パラメータの宣言に識別子がありません"
 
-#: src/print.c:264 src/print.c:338
-#, fuzzy
-msgid "$default"
-msgstr "デフォルト"
+#: src/parse-gram.y:1018
+#, c-format
+msgid "invalid version requirement: %s"
+msgstr "必要なバージョン指定が無効です: %s"
 
-#: src/print.c:373 src/print_graph.c:78
-#, fuzzy, c-format
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "bison %s が必要ですが、%s です。"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
 msgid "State %d"
-msgstr "状態 %d "
+msgstr "状態 %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "シフトして状態 %d へ\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "状態 %d に移行\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "エラー (nonassociative)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "規則 %d を使って還元 (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "受け入れる"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "出現位置の規則による終端"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "出現位置の規則による非終端"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
-msgstr " 左辺:"
+#: src/print.c:416
+msgid "on left:"
+msgstr "左辺:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " 右辺:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "右辺:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "衝突のせいでパーサ内の規則が使用できません"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "%s が複数個宣言されました"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "初期状態の動作では型 (`%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
-#, fuzzy
-msgid "previous declaration"
-msgstr "スコープの宣言"
-
-#: src/reader.c:205
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "%s の重複するシンボル名を無視します"
 
-#: src/reader.c:249
-#, fuzzy, c-format
+#: src/reader.c:238
+#, c-format
 msgid "rule given for %s, which is a token"
 msgstr "%s に規則が与えられ、それはトークンとなります"
 
-#: src/reader.c:304
-#, fuzzy, c-format
+#: src/reader.c:295
+#, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "初期状態の動作では型 (`%s' `%s') が衝突します"
+msgstr "デフォルトのアクションではタイプが衝突します: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "空の型付き非終端アイテム用規則であり、動作が起りません"
 
-#: src/reader.c:328
-#, fuzzy, c-format
+#: src/reader.c:334
+#, c-format
 msgid "unused value: $%d"
-msgstr "無効な値\n"
+msgstr "使われていない値: $%d"
 
-#: src/reader.c:330
-#, fuzzy
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr "無効な値\n"
+msgstr "未設定の値: $$"
 
-#: src/reader.c:341
-#, fuzzy, c-format
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "空でない規則に %%empty"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "%%empty なしで空の規則"
+
+#: src/reader.c:372
+#, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr "トークン %s の値は適切な UTF-8 文字列ではありません"
+msgstr "%%prec に対するトークンが定義されていません: %s"
 
-#: 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:377
+#, c-format
+msgid "only midrule actions can be typed: %s"
+msgstr "midrule アクションにしか型をつけられません: %s"
 
-#: src/reader.c:441 src/reader.c:456
-#, fuzzy, c-format
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
+#, c-format
 msgid "%s affects only GLR parsers"
-msgstr "コード変換はテキスト型添付ファイルにのみ有効。"
+msgstr "%s は GLR パーサにしか影響しません"
 
-#: src/reader.c:443
-#, fuzzy, c-format
+#: src/reader.c:507
+#, c-format
 msgid "%s must be followed by positive number"
-msgstr "フィールド名 `%.*s' の後はコロンでなければなりません"
+msgstr "%s の後は正の数でなければなりません"
 
-#: src/reader.c:554
-#, fuzzy, c-format
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc は型つき midrule アクションをサポートしていません"
+
+#: src/reader.c:666
+#, c-format
 msgid "rule is too long"
-msgstr "述部が長すぎます"
+msgstr "規則が長すぎます"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "入力した文法に規則が定義されていません"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "入力した文法に規則が定義されていません"
+msgstr "文法中にある規則が無駄です"
 
-#: src/reduce.c:302
-#, fuzzy, c-format
+#: src/reduce.c:280
+#, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr "入力した文法に規則が定義されていません"
+msgstr "文法中の非終端が無駄です: %s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "入力した文法に規則が定義されていません"
+msgstr "文法中の非終端が無駄です"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "入力した文法に規則が定義されていません"
+msgstr "文法中の終端が無駄です"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "入力した文法に規則が定義されていません"
+msgstr "文法中の規則が無駄です"
 
-#: src/reduce.c:385
-#, fuzzy, c-format
+#: src/reduce.c:355
+#, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] "入力した文法に規則が定義されていません"
+msgstr[0] "文法中に %d 個の無駄な非終端があります"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
-msgstr[0] "入力した文法に規則が定義されていません"
+msgstr[0] "文法中に %d 個の無駄な終端があります"
 
-#: src/reduce.c:419
-#, fuzzy, c-format
+#: src/reduce.c:386
+#, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "開始シンボル %s はどの文にも由来しません"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+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
+#: src/scan-code.l:330
 #, 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' はディレクトリを指しています"
+msgstr "参照しています: %c%s at %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
+#: src/scan-code.l:354
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid "possibly meant: %c"
+msgstr "もしかして以下を意味していますか: %c"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:363
+#, c-format
+msgid ", hiding %c"
+msgstr ", %c を隠しています"
+
+#: src/scan-code.l:371
+#, c-format
+msgid " at %s"
+msgstr " at %s"
+
+#: src/scan-code.l:375
+#, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", %d にある midrule アクションからアクセスできません"
+
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "整数が値の範囲外です: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "無効な参照: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 "'%c' の後に文法エラーがあります。整数、文字、'_', '[','$' が来るはずです。"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "$%d の前の出力にシンボルがありません: %.*s"
 
-#: src/scan-code.l:633
-#, fuzzy, c-format
+#: src/scan-code.l:517
+#, c-format
 msgid "symbol not found in production: %.*s"
-msgstr "%s が gflares_list 中に見付かりません"
+msgstr "結果にシンボルが見つかりません: %.*s"
 
-#: src/scan-code.l:648
-#, fuzzy, c-format
+#: src/scan-code.l:532
+#, c-format
 msgid "misleading reference: %s"
-msgstr "高度の単位"
+msgstr "紛らわしい参照: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "高度の単位"
+msgstr "曖昧な参照: \"%s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "型なしの文法に明示的に型が与えられています"
 
-#: src/scan-code.l:759
-#, fuzzy, c-format
+#: src/scan-code.l:639
+#, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$%d 個の `%s' が宣言された型を持っていません"
+msgstr "$$ に対する $%d midrule %s が宣言された型を持っていません"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "`%s' の $$ に宣言のない型があります"
+msgstr "%s の $$ に宣言のない型があります"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "`%s' の $$ に宣言のない型があります"
+msgstr "$%s の %s に宣言のない型があります"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "api.value.automove が有効で $%d が複数回でてきます"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr ""
+msgstr "はぐれた ',' は空白として扱われました"
 
-#: src/scan-gram.l:222
-#, fuzzy, c-format
+#: src/scan-gram.l:292
+#, c-format
 msgid "invalid directive: %s"
-msgstr "無効な #%s 指示です"
+msgstr "無効な指示: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "不正なURN %1: 不適切な名前空間識別子"
+msgstr "無効な識別子: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "無効な文字: `%s'"
+msgstr[0] "無効な文"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "ブラケットに囲まれた識別子としては期待されていません: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "識別子が期待されています"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ブラケットに囲まれた名前に不正な文字があります"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc は文字列リテラルをサポートしていません"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "空の文字定数"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "キャラクタリテラルに余分な文字があります"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "-q= の後に番号が期待されますが、%s が与えられました\n"
+msgstr "\\ エスケープの後に不正な数字があります: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "エスケープキャラクタを決定できません"
+msgstr "\\ エスケープの後に不正な文字があります: %s\""
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc は16進数リテラルをサポートしていません"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "ファイル末尾に %s がありません"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "行末に %s がありません"
 
-#: src/scan-skel.l:146
-#, fuzzy, c-format
+#: src/scan-skel.l:140
+#, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr "文字列が命令の途中で終わっています."
+msgstr "スケルトンの %s ディレクティブがクローズされていません"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "スケルトンの %s ディレクティブの引数が少なすぎます"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "スケルトンの %s ディレクティブの引数が多すぎます"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "無効な $ 値: $%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc ではシンボル名にダッシュは使えません: %s"
 
-#: src/symtab.c:91
-#, fuzzy, c-format
+#: src/symtab.c:118
+#, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "シンボルが多すぎます (トークン + 非終端アイテム) -- 最大 %d"
+msgstr "入力している文法のシンボルが多すぎます(最大 %d)"
 
-#: src/symtab.c:154
-#, fuzzy, c-format
+#: src/symtab.c:300
+#, c-format
 msgid "%s redeclaration for %s"
-msgstr "\"%s\" のラベル:"
+msgstr "%s は %s の再宣言です"
 
-#: src/symtab.c:164
-#, fuzzy, c-format
+#: src/symtab.c:313
+#, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "\"%s\" のラベル:"
+msgstr "%s は <%s> の再宣言です"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "シンボル %s が再定義されました"
+msgid "symbol %s redeclared as a token"
+msgstr "シンボル %s がトークンとして再宣言されました"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "シンボル %s が再宣言されました"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "シンボル %s が非終端として再宣言されました"
 
-#: src/symtab.c:367
-#, fuzzy, c-format
-msgid "redefining user token number of %s"
-msgstr "%s に先行した再定義です"
+#: src/symtab.c:370
+#, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"シンボル %s が使われていますが、トークンとして定義されておらず、規則を持ちま"
+"せん。%s と間違えましたか?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc は %%type を非終端として予約しています"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "シンボル %s が再宣言されました"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "非終端に明示的な数字を与えられません"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "%s のユーザトークンナンバーの再定義です"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "%s のユーザトークンナンバーが大きすぎます"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "文字列リテラル %s にシンボルが割り当てられていません"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s は型 <%s>無用です"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "タイプ %s が使われていますが、シンボルと対応づけられていません"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "非終端に文字列エイリアスは与えられません"
+
+#: src/symtab.c:698
+#, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr "シンボル `%s' はリテラル文字列として複数回使われました"
+msgstr "シンボル %s はリテラル文字列として複数回使われました"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "シンボル `%s' は複数のリテラル文字列が与えられました"
+msgstr "シンボル %s に複数のリテラル文字列が与えられました"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "%s の型が再定義されました"
+msgstr "ユーザトークンナンバー %d が %s に対して再定義されました"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "%s に対する以前の宣言"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "トークン数が大きすぎます"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "開始シンボル %s は定義されていません"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "開始シンボル %s はトークンです"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "%s に無用な precedence and associativity"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "%s に無用な precedence"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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 が大きすぎます"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "%s に無用な associativity、%%precedence を使ってください"
diff --git a/po/ms.gmo b/po/ms.gmo
index 8e4e2ac..dc89e86 100644
--- a/po/ms.gmo
+++ b/po/ms.gmo
Binary files differ
diff --git a/po/ms.po b/po/ms.po
index 643bc56..a96d068 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -1,156 +1,354 @@
-# 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.
+# bison Bahasa Melayu (Malay) (ms).
+# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2015, 2016, 2017, 2018, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.4.1\n"
+"Project-Id-Version: bison 3.3.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-10-14 18:56+0800\n"
+"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: KBabel 0.9.5\n"
+"X-Generator: Poedit 2.2.4\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "hukum kosong untuk bukan terminal ditaip, dan tiada tindakan"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "keutamaan dan pengumpulan tidak berguna untuk %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "amaran"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Ralat I/O"
+msgstr "ralat"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "ralat maut"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc tidak menyokong %s"
+
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "Salinan @E dijumpai."
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "pengisytiharan terdahulu"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "hanya satu %s dibenarkan setiap hukum"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Keadaan %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflik: %d pemindahan/pengurangan, %d pengurangan/pengurangan\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflik: %d pemindahan/pengurangan\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflik: %d pengurangan/pengurangan\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konflik: %d pemindahan/pengurangan, %d pengurangan/pengurangan"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konflik: %d pemindahan/pengurangan, %d pengurangan/pengurangan"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr hanya berkesan kepada parser GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "konflik: %d pemindahan/pengurangan, %d pengurangan/pengurangan"
+
+#: src/conflicts.c:691
+#, fuzzy, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "jangkaan %d konflik pemindahan/pengurangan"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "konflik pengurangan/pengurangan: %d dijumpai, %d diharapkan"
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "dijangkakan %d pengurangan/pengurangan konflik"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "tidak dapat membuka fail `%s'"
+msgstr "%s: tidak dapat dibuka"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "ralat masukan/keluaran"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "tidak dapat menutup fail"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "enggan untuk menulisganti fail masukan %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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"
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "tak dapat backup %s"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "jangkaan %d konflik pemindahan/pengurangan"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Cuba `%s --help' untuk lebih maklumat.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Penggunaan: %s [PILIHAN]... FAIL\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
+"Menjana penghurai LR berketentuan atau LR umum (GLR) menggunakan\n"
+"LALR(1), IELR(1), atau jadual penguhurai LR(1) berstruktur. Sokongan IELR(1) "
+"dan\n"
+"LR(1) berstruktur adalah eksperimen.\n"
+"\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Perkara yang sama bagi hujah pilihan.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -165,20 +363,31 @@
 "  -W, --warnings=[KATEGORI]  lapor amaran yang berada dalam KATEGORI\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Penghurai:\n"
 "  -L, --language=BAHASA      nyatakan bahasa pengaturcaraan keluaran\n"
@@ -191,21 +400,20 @@
 "  -k, --token-table          sertakan jadual nama token\n"
 "\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -221,101 +429,54 @@
 "                             (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
+#: src/getargs.c:436
 #, c-format
+msgid "Report bugs to <%s>.\n"
+msgstr "Laporkan pepijat kepada <%s>.\n"
+
+#: src/getargs.c:437
+#, fuzzy, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
+"// Dijana oleh %s.\n"
+"// Lapor pepijat ke <%s>.\n"
+"// Laman utama: <%s>.\n"
+"\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
+"Bantuan umum menggunakan perisian 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Lapor pepijat terjemahan kepada <http://translationproject.org/team/>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Untuk dokumentasi lengkap, laksanakan: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Ditulis oleh Robert Corbett dan Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Hakcipta (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -324,39 +485,40 @@
 "jaminan disediakan; tidak juga untuk KEBOLEHDAGANGAN atau KEUPAYAAN UNTUK "
 "SESUATU TUJUAN KHUSUS.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "pelbagai rangka pengisytiharan tidak sah"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
 msgstr "bahasa `%s' tidak sah"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "pelbagai pengisytiharan bahasa adalah tidak sah"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
+msgid "deprecated option: %s, use %s"
+msgstr "arahan tidak sah: %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "operan hilang selepas `%s'"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
 msgstr "operan tambahan `%s'"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "kosong"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Tatabahasa"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -364,826 +526,718 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Dijana oleh %s.\n"
+"// Lapor pepijat ke <%s>.\n"
+"// Laman utama: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "nombor baris melimpah"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "nombor lajur melimpah"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "nombor baris melimpah"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "hukum tidak digunakan kerana konflik"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "pembetulan boleh diterapkan. Ulang laksana dengan pilihan '--update'."
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
-msgstr "simbol %s ditakrif semula"
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, fuzzy, c-format
 msgid "previous definition"
-msgstr "pengisytiharan terdahulu"
+msgstr "Takrifan sintaks untuk digunakan"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
-#, c-format
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, fuzzy, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "simbol permulaan %s tidak ditakrifkan"
 
-#: src/muscle-tab.c:550
-#, c-format
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
+
+#: src/muscle-tab.c:690
+#, fuzzy, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
 
-#: src/muscle-tab.c:609
-#, c-format
+#: src/muscle-tab.c:744
+#, fuzzy, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "nilai tidak sah untuk %%define pembolehubah Boolean `%s'"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
-msgstr "nilai tidak digunakan: $%d"
+msgstr "nilai --bytes `%s' tidak sah"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "aksara literal tidak boleh bukan-penamat"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "aksara literal tidak boleh bukan-penamat"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "mentakrif semula nombor token pengguna %s"
+
+#: src/parse-gram.y:889
 #, 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/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "nombor versi tidak sah `%s'"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, fuzzy, c-format
+msgid "require bison %s, but have %s"
+msgstr "bison (GNU Bison) %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Keadaan %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "pindah, dan pergi ke keadaan %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "pergi ke keadaan %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "ralat (tidak bergabung)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "kurang menggunakan hukum %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "terima"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminal, dengan hukum dimana mereka kelihatan"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "pada kiri:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " pada kanan:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "pada kanan:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Hukum tidak digunakan dalam penghurai kerana konflik"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "pelbagai pengisytiharan %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "nama simbol berulang bagi %s diabaikan"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "hukum diberi untuk %s, dimana ia adalah token"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "pertelingkahan jenis pada tindakan default: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "nilai tidak digunakan: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nyahtetap nilai: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, fuzzy, c-format
+msgid "%%empty on non-empty rule"
+msgstr "hukum kosong untuk bukan terminal ditaip, dan tiada tindakan"
+
+#: src/reader.c:356
+#, fuzzy, c-format
+msgid "empty rule without %%empty"
+msgstr "hukum kosong untuk bukan terminal ditaip, dan tiada tindakan"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "tanda untuk %%prec tidak ditakrifkan: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "hanya satu %s dibenarkan setiap hukum"
+msgid "only midrule actions can be typed: %s"
+msgstr "hanya tindakan aturan-tengah boleh dijeniskan: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s hanya berkesan kepada parser GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s mesti diikuti dengan nombor positif"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc tidak menyokong jenis tindakan aturan-tengah"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "peraturan terlalu panjang"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "tiada hukum dalam masukan tatabahasa"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "hukum tidak digunakan tatabahasa"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "bukan terminal tidak berguna dalam tatabahasa: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Bukan terminal tidak digunakan dalam tatabahasa"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Terminal tidak digunakan dalam tatabahasa"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Hukum tidak berguna dalam tatabahasa"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "simbol permulaan %s tidak menghasilkan sebarang perkataan"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
+#, fuzzy, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "%s: opsyen tidak dibenarkan -- %c\n"
 
-#: src/scan-code.l:450
-#, c-format
+#: src/scan-code.l:354
+#, fuzzy, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "Mungkin bukan khidmat proksi SOCKS."
 
-#: src/scan-code.l:459
-#, c-format
+#: src/scan-code.l:363
+#, fuzzy, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr "%c%c/panggilan"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " pada %s"
 
-#: src/scan-code.l:472
-#, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", tidak boleh diakses dari tindakan peraturan pertengahan di $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "integer diluar julat: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
-msgstr "arahan tidak sah: %s"
+msgstr "Rujukan belakang tidak sah"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"ralat sintaks selepas '%c', menjangkakan nombor, huruf, '_', '[', atau '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "simbol tidak dijumpai di dalam pengeluaran sebelum $%d: %.*s"
 
-#: src/scan-code.l:633
-#, c-format
+#: src/scan-code.l:517
+#, fuzzy, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "simbol tidak dijumpai di dalam pengeluaran sebelum $%d: %.*s"
 
-#: src/scan-code.l:648
-#, c-format
+#: src/scan-code.l:532
+#, fuzzy, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "Rujukan belakang tidak sah"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
-msgstr "hujah kabur %s untuk %s"
+msgstr "%s: pilihan '%s%s' adalah kabur\n"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "Jenis tidak tersirat diberikan dalam tatabahasa tanpa jenis"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, fuzzy, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ bagi `%s' tiada jenis dinyatakan"
+msgstr "$$ dari `%s' tiada jenis diisytiharkan"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, fuzzy, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d bagi `%s' tiada jenis dinyatakan"
+msgstr "$$ bagi `%s' tiada jenis dinyatakan"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, fuzzy, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "%d tempat telah diganti"
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
 msgstr "`,' sesat dianggap sebagai ruang"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "arahan tidak sah: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
-msgstr "arahan tidak sah: %s"
+msgstr "pengenalan pembolehubah tidak sah `%s'"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "pengecam yang tidak dijangka dalam nama kurungan: %s"
+
+#: src/scan-gram.l:459
+#, fuzzy, c-format
+msgid "an identifier expected"
+msgstr "')' dijangka\n"
+
+#: src/scan-gram.l:464
+#, fuzzy
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "pengecam yang tidak dijangka dalam nama kurungan: %s"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc tidak menyokong rentetan literal"
+
+#: src/scan-gram.l:557
+#, fuzzy, c-format
+msgid "empty character literal"
+msgstr "aksara tambahan dalam kesalahan ejaan"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "aksara tambahan dalam kesalahan ejaan"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, fuzzy, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "aksara null tidak sah: %s"
+msgstr "turutan escape tidak sah: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, fuzzy, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "aksara tidak sah: %s"
+msgstr "turutan escape tidak sah: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, fuzzy, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc tidak menyokong rentetan literal"
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
 msgstr "`%s' hilang pada penghujung fail"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "`%s' hilang pada penghujung baris"
+msgstr "%s hilang pada penghujung baris"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "arahan %s tidak ditutup dalam rangka"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "terlalu sedikit hujah untuk arahan %s dalam rangka"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "terlalu banyak hujah untuk arahan %s dalam rangka"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "nilai $ tidak sah: $%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc tidak membenarkan sengkang dalam nama simbol: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s pengisytiharan semula untuk %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s pengisytiharan semula untuk <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "simbol %s ditakrif semula"
+msgid "symbol %s redeclared as a token"
+msgstr "simbol %s ditakrif semula sebagai token"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "simbol %s ditakrif semula"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "simbol %s ditakrif semula sebagai bukan terminal"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "mentakrif semula nombor token pengguna %s"
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai "
+"hukum"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "simbol %s ditakrif semula"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "mentakrif semula nombor token pengguna %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "mentakrif semula nombor token pengguna %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s tidak berguna untuk jenis <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "jenis <%s> digunakan, tetapi tidak dihubungkan ke sebarang simbol"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
+#, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr "simbol `%s' digunakan lebih dari sekali sebagai rentetan perkataan"
+msgstr "simbol %s digunakan lebih dari sekali sebagai rentetan perkataan"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "simbol `%s' diberikan lebih daripada satu rentetan perkataan"
+msgstr "simbol %s diberikan lebih daripada satu rentetan perkataan"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "%s pengisytiharan semula untuk %s"
+msgstr "nombor token pengguna %d ditakrif semula untuk %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "pengisytiharan terdahulu"
+msgstr "pengisytiharan terdahulu untuk %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "simbol permulaan %s tidak ditakrifkan"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "simbol permulaan %s adalah token"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "pengisytiharan semula untuk %%destructor ditag default"
+msgid "useless precedence and associativity for %s"
+msgstr "keutamaan dan pengumpulan tidak berguna untuk %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "pengisytiharan semula untuk %%destructor tanpa tag default"
+msgid "useless precedence for %s"
+msgstr "keutamaan tidak berguna untuk %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "kebolehkumpulan tidak berguna untuk %s, guna %%precendence"
 
 #, fuzzy
-#~ msgid "stray '@'"
-#~ msgstr "`@' lilau"
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "bukan terminal tidak berguna dalam tatabahasa: %s"
 
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "arahan tidak sah: %s"
+
+#, fuzzy
+#~| msgid ""
+#~| "Warning categories include:\n"
+#~| "  `midrule-values'  unset or unused midrule values\n"
+#~| "  `yacc'            incompatibilities with POSIX YACC\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"
+#~| "\n"
 #~ msgid ""
-#~ "Generate LALR(1) and GLR parsers.\n"
-#~ "\n"
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
 #~ msgstr ""
-#~ "Janakan penghurai LALR(1) dan GLR.\n"
+#~ "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"
 
-#~ msgid "invalid escape sequence: %s"
-#~ msgstr "turutan escape tidak sah: %s"
+#, 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"
+#~ 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"
 
-#~ 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"
+#, fuzzy
+#~| 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"
+#~| "  "
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FEATURE adalah senarai perkataan dipisahkan koma yang boleh termasuk:\n"
+#~ "   'caret'       menunjukkan kesilapan dengan carets\n"
+#~ "   'all'         semua di atas\n"
+#~ "   'none'        melumpuhkan semua di atas\n"
+#~ "  "
diff --git a/po/nb.gmo b/po/nb.gmo
index e0b39ad..39c3300 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index a3bec7b..5d1a554 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,14 +1,14 @@
-# Norwegian bokmål translation of GNU bison.
+# 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.
+# 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
+# The subject for the Norwegian bokmål translation of GNU bison 2.0
 # would then be:
 # TP-Robot bison-2.0.nb.po
 #
@@ -22,255 +22,414 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
 "PO-Revision-Date: 2005-03-01 10:06+0100\n"
-"Last-Translator: Trond Endrestøl <Trond.Endrestol@gtf.ol.no>\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr ""
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "advarsel"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 #, fuzzy
 msgid "error"
 msgstr "I/O-feil"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 #, fuzzy
 msgid "fatal error"
 msgstr "alvorlig feil: "
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
 
-#: src/conflicts.c:86
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "ugyldig direktiv: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "ugyldig direktiv: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "ugyldig direktiv: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, fuzzy, c-format
+msgid "previous declaration"
+msgstr "første deklarasjon"
+
+#: src/complain.c:585
 #, 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"
+msgid "only one %s allowed per rule"
+msgstr "bare en %s pr regel er tillatt"
 
-#: 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:81
+#, fuzzy, 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:492
-#, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "konflikter: %d skift/reduksjon, %d reduksjon/reduksjon\n"
+#: src/conflicts.c:91
+#, fuzzy, 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:495
-#, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "konflikter: %d skift/reduksjon\n"
+#: src/conflicts.c:100
+#, fuzzy, 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:497
-#, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "konflikter: %d reduksjon/reduksjon\n"
-
-#: src/conflicts.c:515
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Tilstand %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skift/reduksjon, %d reduksjon/reduksjon\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter: %d skift/reduksjon\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter: %d reduksjon/reduksjon\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr gjelder bare for GLR-parsere"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:691
+#, fuzzy, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "forventet %d skift/reduksjon-konflikt"
 msgstr[1] "forventet %d skift/reduksjon-konflikter"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:708
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "forventet %d reduksjon/reduksjon-konflikt"
 msgstr[1] "forventet %d reduksjon/reduksjon-konflikter"
 
-#: src/files.c:114
+#: src/files.c:124
 #, fuzzy, c-format
 msgid "%s: cannot open"
-msgstr "kan ikke åpne filen «%s»"
+msgstr "kan ikke åpne filen «%s»"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "kan ikke lukke filen"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr ""
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "kan ikke åpne filen «%s»"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Bruksmåte: %s [VALG]... FIL\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "forventet %d skift/reduksjon-konflikt"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Bruksmåte: %s [VALG]... FIL\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr ""
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"      --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"
+"  -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
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"  -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"
+"  -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
+#: src/getargs.c:436
 #, fuzzy, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Rapporter feil til <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -279,71 +438,72 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Skrevet av Robert Corbett og Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"FOR ET BESTEMT FORMÅL.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, fuzzy, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "flere deklarasjoner av %s"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
-msgstr "ugyldig verdi: %s"
+msgstr "ugyldig $-verdi"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 #, fuzzy
 msgid "multiple language declarations are invalid"
 msgstr "flere deklarasjoner av %s"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "mangler operand etter «%s»"
+msgid "deprecated option: %s, use %s"
+msgstr "ugyldig direktiv: %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
+msgstr "mangler operand etter «%s»"
+
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
-msgstr "ekstra operand «%s»"
+msgstr "ekstra operand «%s»"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "tom"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatikk"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -352,819 +512,830 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr ""
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr ""
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr ""
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 #, fuzzy
 msgid "rule useless in parser due to conflicts"
-msgstr "regel ble aldri redusert på grunn av konflikter"
+msgstr "regel ble aldri redusert på grunn av konflikter"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
 msgstr "symbolet %s ble redefinert"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr ""
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "symbolet %s ble redefinert"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "symbolet %s ble redefinert"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "symbolet %s ble redefinert"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr ""
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
 msgstr "ugyldig verdi: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "redefinerer brukertokennummeret til %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "mangler identifikator i parameterdeklarasjonen"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "ugyldig escapesekvens: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " type %d er %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, fuzzy, c-format
 msgid "State %d"
 msgstr "Tilstand %d "
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "skift og gå til tilstand %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "gå til tilstand %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "feil (ikke-assosiativ)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduksjon ved hjelp av regel %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "aksept"
+
+# Det er vel ikke så mye å oversette denne med.
+# [TE, 2004-06-02]
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminaler med regler hvor de opptrer"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Ikke-terminaler med regler hvor de opptrer"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " til venstre:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " til høyre:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
+msgstr " til høyre:"
 
-#: src/print.c:510
+#: src/print.c:447
 #, fuzzy
 msgid "Rules useless in parser due to conflicts"
-msgstr "regel ble aldri redusert på grunn av konflikter"
+msgstr "regel ble aldri redusert på grunn av konflikter"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, 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
+# 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:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "kollisjon på resultattype for flettefunksjon %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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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.
+# Denne oversettelsen er også en smule ullen.
 # [TE, 2004-05-31]
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "kollisjon på type for standard handling: <%s> != <%s>"
+msgstr "kollisjon på type for standard handling: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, fuzzy, c-format
 msgid "unused value: $%d"
 msgstr "ugyldig verdi: %s"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr ""
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
 msgstr ""
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "bare en %s pr regel er tillatt"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr "%s påvirker bare GLR-parsere"
+msgstr "%s påvirker bare GLR-parsere"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s må bli fulgt av et positivt tall"
+msgstr "%s må bli fulgt av et positivt tall"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr ""
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "ingen regler i den angitte grammatikken"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 #, fuzzy
 msgid "rule useless in grammar"
 msgstr "ingen regler i den angitte grammatikken"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr ""
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 #, fuzzy
 msgid "Nonterminals useless in grammar"
 msgstr "Ikke-terminaler med regler hvor de opptrer"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 #, fuzzy
 msgid "Terminals unused in grammar"
 msgstr "ingen regler i den angitte grammatikken"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 #, fuzzy
 msgid "Rules useless in grammar"
 msgstr "ingen regler i den angitte grammatikken"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "startsymbolet %s avleder ingen setninger"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "heltall utenfor tallområde: %s"
+msgstr "heltall utenfor tallområde: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
 msgstr "ugyldig direktiv: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr ""
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
 msgstr "flertydig argument %s for %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr ""
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, fuzzy, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$%d av «%s» har ingen deklarert type"
+msgstr "$%d av «%s» har ingen deklarert type"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, fuzzy, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ til «%s» har ingen deklarert type"
+msgstr "$$ til «%s» har ingen deklarert type"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, fuzzy, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d av «%s» har ingen deklarert type"
+msgstr "$%d av «%s» har ingen deklarert type"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
-msgstr "overflødig «,» ble behandlet som tomrom"
+msgstr "overflødig «,» ble behandlet som tomrom"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "ugyldig direktiv: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
 msgstr "ugyldig direktiv: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, fuzzy
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "ugyldig tegn: %s"
 msgstr[1] "ugyldig tegn: %s"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "ugyldig null-tegn"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr ""
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 #, 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, fuzzy, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "ugyldig null-tegn: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, fuzzy, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "ugyldig tegn: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
-msgstr "mangler «%s» ved slutten av filen"
+msgstr "mangler «%s» ved slutten av filen"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, fuzzy, c-format
 msgid "missing %s at end of line"
-msgstr "mangler «%s» på slutten av linjen"
+msgstr "mangler «%s» på slutten av linjen"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s er en redeklarasjon av %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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
+#: src/symtab.c:325
 #, fuzzy, c-format
-msgid "symbol %s redeclared"
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "%d ubrukelig ikke-terminal"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"symbolet %s er brukt, men er ikke definert som et token og har ingen regler"
+
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, fuzzy, c-format
+msgid "symbol %s redeclared"
+msgstr "symbolet %s ble redefinert"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinerer brukertokennummeret til %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "redefinerer brukertokennummeret til %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+"symbolet %s er brukt, men er ikke definert som et token og har ingen regler"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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"
+msgstr "symbolet «%s» er brukt mer enn en gang som en literalstreng"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, fuzzy, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "symbolet «%s» er gitt mer enn en literalstreng"
+msgstr "symbolet «%s» er gitt mer enn en literalstreng"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, fuzzy, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "%s er en redeklarasjon av %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, fuzzy, c-format
 msgid "previous declaration for %s"
 msgstr "%s er en redeklarasjon av %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "startsymbolet %s er udefinert"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "startsymbolet %s er et token"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
+msgid "useless precedence and associativity for %s"
 msgstr ""
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
+msgid "useless precedence for %s"
 msgstr ""
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
+msgid "useless associativity for %s, use %%precedence"
 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."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "Ikke-terminaler med regler hvor de opptrer"
 
-#: 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."
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "ugyldig direktiv: %s"
 
-#: lib/bitset_stats.c:292
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Kunne ikke åpne statsfilen for skriving."
+#~ 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"
 
-#: lib/closeout.c:112
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "ugyldig argument %s for %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "flertydig argument %s for %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Gyldige argumenter er:"
+
 #, fuzzy
-msgid "write error"
-msgstr "alvorlig feil: "
+#~| msgid "I/O error"
+#~ msgid "write error"
+#~ msgstr "I/O-feil"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Ukjent systemfeil"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: valget «%s» er flertydig\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"
+#, fuzzy
+#~| msgid "%s: unrecognized option `%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: ukjent valg «%c%s»\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"
+#, fuzzy
+#~| msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: valget «%c%s» tillater ikke 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"
+#, fuzzy
+#~| msgid "%s: option `%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: valget «%s» krever et argument\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"
+#, fuzzy
+#~| msgid "%s: invalid option -- %c\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: ugyldig valg -- %c\n"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, fuzzy, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: ugyldig valg -- %c\n"
+#, fuzzy
+#~| msgid "%s: option requires an argument -- %c\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: valget krevet et argument -- %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"
+#~ msgid "memory exhausted"
+#~ msgstr "minne er uttømt"
 
-#: 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"
+#, fuzzy
+#~| msgid "cannot close file"
+#~ msgid "cannot create pipe"
+#~ msgstr "kan ikke lukke filen"
 
-#: 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"
+#~ msgid "`"
+#~ msgstr "«"
 
-#: 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"
+#~ msgid "'"
+#~ msgstr "»"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "minne er uttømt"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Utføringstider (sekunder)\n"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u frigjort (%.2f%%).\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 ""
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u mellomlagret (%.2f%%)\n"
 
-#. 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 "«"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u mellomlagret (%.2f%%)\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "»"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u mellomlagret (%.2f%%)\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Utføringstider (sekunder)\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTAL                 :"
+#~ msgid "count log histogram\n"
+#~ msgstr "count log histogram\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tid for %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "size log histogram\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "density histogram\n"
+#~ msgstr "tetthetshistogram\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitmengdestatistikk:\n"
+#~ "\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Akkumulerte kjøringer = %u\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#, fuzzy
+#~| msgid "Could not read stats file."
+#~ msgid "cannot read stats file"
+#~ msgstr "Kunne ikke lese statsfilen."
 
-#~ msgid "state %d"
-#~ msgstr "tilstand %d"
+#, fuzzy
+#~| msgid "Bad stats file size.\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "Feil størrelse på statsfilen.\n"
+
+#, fuzzy
+#~| msgid "Could not write stats file."
+#~ msgid "cannot write stats file"
+#~ msgstr "Kunne ikke skrive statsfilen."
+
+#, fuzzy
+#~| msgid "Could not open stats file for writing."
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Kunne ikke åpne statsfilen for skriving."
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "mangler «%s» ved slutten av filen"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "[identifier]"
+#~ msgstr "ugyldig direktiv: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier"
+#~ msgstr "ugyldig direktiv: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier:"
+#~ msgstr "ugyldig direktiv: %s"
+
+#, fuzzy
+#~| msgid "symbol %s redefined"
+#~ msgid "symbol %s redefined"
+#~ msgstr "symbolet %s ble redefinert"
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "saving stdout failed"
+#~ msgstr "mangler «%s» ved slutten av filen"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' failed"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "hjelpeprogrammet «%s» mislyktes"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' not found"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "fant ikke hjelpeprogrammet «%s»"
 
 #~ msgid "warning: "
 #~ msgstr "advarsel: "
@@ -1176,8 +1347,8 @@
 #~ "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"
+#~ "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 ""
@@ -1186,14 +1357,23 @@
 #~ "  -V, --version   output version information and exit\n"
 #~ "  -y, --yacc      emulate POSIX yacc\n"
 #~ msgstr ""
-#~ "Virkemåter:\n"
+#~ "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 "empty"
+#~ msgstr "tom"
+
 #~ msgid "POSIX forbids declarations in the grammar"
 #~ msgstr "POSIX forbyr deklarasjoner i grammatikken"
 
+#~ msgid " type %d is %s\n"
+#~ msgstr " type %d er %s\n"
+
+#~ msgid "state %d"
+#~ msgstr "tilstand %d"
+
 #~ msgid "Rules never reduced"
 #~ msgstr "Regler som aldri ble redusert"
 
@@ -1217,11 +1397,6 @@
 #~ 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 "
 
@@ -1230,26 +1405,38 @@
 #~ 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"
+#~ msgstr "mangler «{» in «%s»"
 
 #~ msgid "tokens %s and %s both assigned number %d"
 #~ msgstr "tokene %s og %s er begge tilordnet nummeret %d"
 
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: valget «--%s» tillater ikke et argument\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: ukjent valg «--%s»\n"
+
 #~ msgid "%s: illegal option -- %c\n"
 #~ msgstr "%s: ulovlig valg -- %c\n"
 
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: valget «-W %s» er flertydig\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: valget «-W %s» tillater ikke et argument\n"
+
 #~ msgid "subsidiary program `%s' could not be invoked"
-#~ msgstr "kunne ikke starte opp hjelpeprogrammet «%s»"
+#~ msgstr "kunne ikke starte opp hjelpeprogrammet «%s»"
 
 #~ msgid "subsidiary program `%s' failed (exit status %d)"
-#~ msgstr "hjelpeprogrammet «%s» mislyktes (returverdi %d)"
+#~ msgstr "hjelpeprogrammet «%s» mislyktes (returverdi %d)"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tid for %s: %ld.%06ld (%ld%%)\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index dd590e4..67ab71c 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index ef97320..d7685c7 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,369 +1,532 @@
-# Dutch messages for GNU bison.
+# Dutch translations for GNU bison.
+# Copyright (C) 2018 Free Software Foundation, Inc.
 # 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.
 #
+# "De camino a casa, queiro ser libre, no valiente."
+#
+# Erick Branderhorst <branderh@debian.org>, 1996.
+# Tim Van Holder <tim.van.holder@telenet.be>, 2002, 2003, 2004, 2005, 2006, 2008, 2010.
+# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2018.
+# Sebastiaan Vandenbore <sebastiaan.vandenbore@gmail.com>, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.4.3\n"
+"Project-Id-Version: bison 3.3.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-06-17 21:12+0800\n"
+"Last-Translator: Sebastiaan Vandenbore <sebastiaan.vandenbore@gmail.com>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "lege regel zonder %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
 #, fuzzy
-msgid "error"
-msgstr "I/O-fout"
+msgid "useless precedence and associativity"
+msgstr "nutteloze voorrang en associativiteit voor %s"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
+msgid "warning"
+msgstr "waarschuwing"
+
+#: src/complain.c:258
+msgid "error"
+msgstr "fout"
+
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "fatale fout"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
-msgstr "    Conflict tussen regel %d en token %s opgelost als shift"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc ondersteunt %s niet"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr "    Conflict tussen regel %d en token %s opgelost als reductie"
+msgid "deprecated directive: %s, use %s"
+msgstr "verouderd directief %s;  gebruik %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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"
+msgid "duplicate directive"
+msgstr "dubbel directief"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
+#, c-format
+msgid "duplicate directive: %s"
+msgstr "dubbel directief: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "eerdere declaratie"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "slechts één %s is toegestaan per regel"
+
+#: src/conflicts.c:81
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "    Conflict tussen regel %d en token %s is opgelost als shift"
+
+#: src/conflicts.c:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "    Conflict tussen regel %d en token %s is opgelost als reductie"
+
+#: src/conflicts.c:100
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "    Conflict tussen regel %d en token %s is opgelost als een fout"
+
+#: src/conflicts.c:602
+#, c-format
+msgid "State %d "
+msgstr "Toestand %d "
+
+#: src/conflicts.c:605
 #, c-format
 msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
 msgstr "conflicten: %d shift/reductie, %d reductie/reductie\n"
 
-#: src/conflicts.c:495
+#: src/conflicts.c:608
 #, c-format
 msgid "conflicts: %d shift/reduce\n"
 msgstr "conflicten: %d shift/reductie\n"
 
-#: src/conflicts.c:497
+#: src/conflicts.c:610
 #, c-format
 msgid "conflicts: %d reduce/reduce\n"
 msgstr "conflicten: %d reductie/reductie\n"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:645
 #, c-format
-msgid "State %d "
-msgstr "Staat %d"
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "shift/reductie conflicten voor regel %d: %d gevonden, %d verwacht"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "reductie/reductie conflicten voor regel %d: %d gevonden, %d verwacht"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr "%%expect-rr is enkel van toepassing op GLR-parsers"
+msgstr "%%expect-rr is alleen van toepassing op GLR-parsers"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "shift/reductie-conflicten: %d gevonden, %d verwacht"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d shift/reductie-conflict"
+msgstr[1] "%d shift/reductie-conflicten"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "reductie/reductie-conflicten: %d gevonden, %d verwacht"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d reductie/reductie-conflict"
+msgstr[1] "%d reductie/reductie-conflicten"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "kan bestand `%s' niet openen"
+msgstr "kan '%s' niet openen"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "invoer-/uitvoerfout"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "kan bestand niet sluiten"
 
 # Betere formulering (ik-vorm vermijden)?
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr "ik weiger om invoerbestand %s te overschrijven"
+msgstr "geweigerd om invoerbestand %s te overschrijven"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr "conflicterende uitvoer naar bestand %s"
+msgstr "tegenstrijdige uitvoer naar bestand %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Probeer `%s --help' voor meer informatie.\n"
+msgid "%s: cannot backup"
+msgstr "%s: kan geen reservekopie maken"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Gebruik: %s [OPTIE]... BESTAND\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d shift/reductie-conflict"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Typ '%s --help' voor meer informatie.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Gebruik:  %s [OPTIE...] BESTAND\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Genereert een deterministische of een gegeneraliseerde LR-parser (GLR)\n"
+"die gebruik maakt van LALR(1), IELR(1) of canonieke LR(1)-parsertabellen.\n"
+"Ondersteuning voor IELR(1) en canonieke LR(1) is nog experimenteel.\n"
+"\n"
+
+#: src/getargs.c:362
 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"
+"Een verplicht argument bij een lange optie geldt ook voor de korte vorm.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 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
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"Werkingsmodi:\n"
+"  -h, --help                 deze hulptekst tonen en stoppen\n"
+"  -V, --version              programmaversie tonen en stoppen\n"
+"      --print-localedir      de map met regio-afhankelijke gegevens tonen\n"
+"                             en stoppen\n"
+"      --print-datadir        de map met skeletten en XSLT-bestanden tonen\n"
+"                             en stoppen\n"
+"  -u, --update               correcties aan de grammatica bron toepassen en "
+"stoppen\n"
+"  -y, --yacc                 een POSIX-compatibele Yacc emuleren\n"
+"  -W, --warnings[=SOORT]  waarschuwen voor problemen (van het type SOORT)\n"
+"  -f, --feature[=FUNCTIE]   bepaalde extra functies inschakelen\n"
+"\n"
+
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
 
 # Correcte vervoeging van 'voorvoegen'?
 # Betere vertaling voor 'directives'?
-#: src/getargs.c:329
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -L, --language=TAAL               de te gebruiken programmeertaal\n"
+"  -S, --skeleton=BESTAND            het te gebruiken skeletbestand\n"
+"  -t, --debug                       de parser geschikt maken voor "
+"debugging;\n"
+"                                      hetzelfde als '-Dparse.trace'\n"
+"      --locations                   symboollocaties bijhouden\n"
+"  -D, --define=NAAM[=WAARDE]        hetzelfde als '%define NAAM \"WAARDE\"'\n"
+"  -F, --force-define=NAAM[=WAARDE]  '%define NAAM \"WAARDE\"'\n"
+"  -p, --name-prefix=PREFIX          externe symboolnamen deze PREFIX geven;\n"
+"                                      tegenwoordig '-Dapi.prefix=PREFIX'\n"
+"  -l, --no-lines                    geen '#line'-directieven genereren\n"
+"  -k, --token-table                 ook een tabel van token-namen genereren\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"      --defines[=BESTAND]    ook een header-bestand genereren\n"
+"  -d                         idem, maar er kan geen bestand opgegeven "
+"worden\n"
+"                               (voor POSIX Yacc)\n"
+"  -r, --report=DINGEN        ook details over de automaat genereren\n"
+"      --report-file=BESTAND  het rapport naar BESTAND schrijven\n"
+"  -v, --verbose              hetzelfde als '--report=state'\n"
+"  -b, --file-prefix=PREFIX   de uitvoerbestandsnamen deze PREFIX geven\n"
+"  -o, --output=BESTAND       uitvoer naar BESTAND schrijven\n"
+"  -g, --graph[=BESTAND]      ook een graaf van de automaat genereren\n"
+"  -x, --xml[=BESTAND]        ook een XML-rapport over de automaat genereren\n"
+"                               (het XML-schema is experimenteel)\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
+#: src/getargs.c:436
+#, 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"
+msgstr "Rapporteer gebreken in het programma aan <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "Webpagina van '%s': <%s>\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
+"Algemene hulp bij gebruik van 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "Meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Voor volledige documentatie, zie: 'info bison'.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Geschreven door Robert Corbett en Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"Dit is vrije software; zie de programmatekst voor de kopieervoorwaarden.\n"
+"Er is GEEN garantie; zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID\n"
+"VOOR EEN BEPAALD DOEL.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "meerdere skeletten opgeven is niet toegestaan"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "ongeldige taal `%s'"
+msgstr "%s: ongeldige taal"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "meerdere talen opgeven is niet toegestaan"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "operand ontbreekt na `%s'"
+msgid "deprecated option: %s, use %s"
+msgstr "verouderd directief %s;  gebruik %s"
 
-#: src/getargs.c:749
-#, fuzzy, c-format
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "ontbrekende operand"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "overtollige operand `%s'"
+msgstr "overtollige operand: %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "leeg"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatica"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -371,220 +534,287 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Gegenereerd door %s.\n"
+"// Meld programmafouten aan <%s>.\n"
+"// Webpagina: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr "overflow van lijnnummers"
+msgstr "regelnummer loopt over"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
-msgstr "overflow van kolomnummers"
+msgstr "kolomnummer loopt over"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "byte nummer loopt over"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "regel is nutteloos in de grammatica omwille van conflicten"
+msgstr "regel is nutteloos in de grammatica wegens conflicten"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "fix-its can be applied.  Rerun with option '--update'."
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "%s `%s' opnieuw gedefinieerd"
+msgstr "%%define van variabele %s is opnieuw gedefinieerd"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr "ongeldige waarde voor %%define variabele `%s': `%s'"
+msgstr "%s: ongedefinieerde %%define van variabele %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
 #, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define van variabele %s is opnieuw gedefinieerd"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define van variabele %s is opnieuw gedefinieerd"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define van variabele %s is opnieuw gedefinieerd"
+
+#: src/muscle-tab.c:690
+#, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr "ongeldige waarde voor Booleaanse %%define variabele `%s'"
+msgstr "ongeldige waarde voor %%define van booleaanse variabele %s"
 
-#: src/muscle-tab.c:609
-#, fuzzy, c-format
+#: src/muscle-tab.c:744
+#, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr "ongeldige waarde voor %%define variabele `%s': `%s'"
+msgstr "ongeldige waarde voor %%define van variabele %s: %s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "waarde niet gebruikt: $%d"
+msgstr "geaccepteerde waarde: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "character literals cannot be nonterminals"
+
+#: src/parse-gram.y:753
+#, fuzzy, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "character literals cannot be nonterminals"
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "herdefinitie van het door de gebruiker gekozen tokennummer van %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "naam ontbreekt in parameterdeclaratie"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " type %d is %s\n"
+msgid "invalid version requirement: %s"
+msgstr "ongeldige versie-eis: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "bison %s is vereist, maar heb %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Toestand %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "shift, en ga naar toestand %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "ga naar toestand %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "fout (niet associatief)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "reduceren via regel %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "accepteer"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 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
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "links:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " rechts:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "rechts:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "Regels die, omwille van conflicten, nutteloos zijn in de grammatica"
+msgstr "Regels die wegens conflicten nutteloos zijn in de grammatica"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr "meerdere %s declaraties"
+msgstr "meerdere %s-declaraties"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "conflict tussen resultaattypes bij merge-functie `%s': <%s> != <%s>"
+msgstr "botsing 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "gedupliceerde symboolnaam voor %s wordt genegeerd"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "regel opgegeven voor token (%s)"
+msgstr "regel opgegeven voor %s, dat een token is"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "type-conflict bij standaardaktie: <%s> != <%s>"
+msgstr "botsing tussen types bij standaardactie: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "waarde niet gebruikt: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "waarde niet gezet: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty op niet-lege regel"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "lege regel zonder %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "slechts één %s toegestaan per regel"
+msgid "only midrule actions can be typed: %s"
+msgstr "alleen midregel-acties kunnen een type hebben: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s is enkel van toepassing op GLR-parsers"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s moet gevolgd worden door een positief getal"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc ondersteunt geen midregel-acties met een type"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "regel is te lang"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "invoergrammatica bevat geen regels"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "regel is nutteloos in de grammatica"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "niet-eindsymbool is nutteloos in de grammatica: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Niet-eindsymbolen die nutteloos zijn in de grammatica"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Eindsymbolen die niet gebruikt worden in de grammatica"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Regels die nutteloos zijn in de grammatica"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -592,599 +822,630 @@
 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, c-format
-msgid "use of YYFAIL, which is deprecated and will be removed"
-msgstr ""
+msgid "stray '%s'"
+msgstr "losse '%s'"
 
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "refereert aan: %c%s op %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "betekent misschien: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", verstopt %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " op %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", kan niet bereikt worden vanuit midregel-actie op $%d"
 
 # Hier zou wel het bereik bij vermeld mogen worden...
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "integer buiten bereik: %s"
+msgstr "integer valt buiten bereik: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "ongeldig commando: %s"
+msgstr "ongeldige referentie: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"syntaxisfout na '%c';  verwachtte een integer, letter, '_', '[', of '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "symbool niet gevonden in productie vóór $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "symbool niet gevonden in productie: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "misleidende referentie: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "argument %s voor %s is niet eenduidig"
+msgstr "niet-eenduidige referentie: %s"
 
 # betere vertaling voor 'untyped'?
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, 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
+#: src/scan-code.l:639
+#, 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"
+msgstr "$$ voor de midregel op $%d van %s heeft geen gedeclareerd type"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ van `%s' heeft geen gedeclareerd type"
+msgstr "$$ van %s heeft geen gedeclareerd type"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d van `%s' heeft geen gedeclareerd type"
+msgstr "$%s van %s heeft geen gedeclareerd type"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "meerdere voorkomens van $%d met 'api.value.automove'"
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "losse `,' behandeld als witruimte"
+msgstr "losse ',' wordt behandeld als witruimte"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "ongeldig commando: %s"
+msgstr "ongeldige directief: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "ongeldig commando: %s"
+msgstr "ongeldige identifier: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "ongeldig teken: %s"
-msgstr[1] "ongeldig teken: %s"
+msgstr[0] "ongeldig teken"
+msgstr[1] "ongeldig tekens"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "onverwachte identifier in omhaakte naam: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "een identifier werd verwacht"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "ongeldig teken in omhaakte naam"
+msgstr[1] "ongeldig tekens in omhaakte naam"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc ondersteunt geen letterlijke tekenreeksen"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "leeg enkel letterteken"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "extra tekens in enkel letterteken"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "ongeldig getal na \\-escape: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "ongeldig teken na \\-escape: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc ondersteunt geen hexadecimale letterlijke tekens"
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "`%s' ontbreekt aan einde van bestand"
+msgstr "%s ontbreekt aan einde van bestand"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "`%s' ontbreekt aan einde van regel"
+msgstr "%s ontbreekt aan einde van regel"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr "onbeëindigd %s commando in skelet"
+msgstr "onbeëindigde %s-directief in skelet"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr "te weinig argumenten voor %s commando in skelet"
+msgstr "te weinig argumenten voor %s-directief in skelet"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr "teveel argumenten voor %s commando in skelet"
+msgstr "te veel argumenten voor %s-directief in skelet"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "ongeldige $-waarde: $%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc verbiedt koppeltekens in symboolnamen: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr "%s herdeclaratie voor %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
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "%s herdeclaratie voor <%s>"
+msgstr "%s-herdeclaratie voor <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "symbool %s opnieuw gedefinieerd"
+msgid "symbol %s redeclared as a token"
+msgstr "symbool %s opnieuw gedeclareerd als token"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "symbool %s opnieuw gedeclareerd"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "symbool %s opnieuw gedeclareerd als niet-terminaal"
 
-#: 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:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"symbool %s wordt gebruikt, maar is niet gedefinieerd als een token en heeft "
+"geen regels"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
 
-#: src/symtab.c:418
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbool %s opnieuw gedeclareerd"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "nonterminals cannot be given an explicit number"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "herdefinitie van het door de gebruiker gekozen tokennummer van %s"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "herdefinitie van het door de gebruiker gekozen tokennummer van %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "nutteloze %s voor type <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "type <%s> wordt gebruikt, maar is niet geassocieerd met enig symbool"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "nonterminals kunnen geen tekenreeks alias krijgen"
+
+#: src/symtab.c:698
+#, c-format
+msgid "symbol %s used more than once as a literal string"
+msgstr "symbool %s wordt meer dan eens gebruikt als een letterlijke string"
+
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "symbool `%s' krijgt meer dan één letterlijke string toegewezen"
+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
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "%s herdeclaratie voor %s"
+msgstr "herdeclaratie van door gebruiker gekozen tokennummer %d voor %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "eerdere declaratie"
+msgstr "eerdere declaratie voor %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "het startsymbool %s is niet gedefinieerd"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, 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
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "herdeclaratie van standaard \"tagged\" %%destructor"
+msgid "useless precedence and associativity for %s"
+msgstr "nutteloze voorrang en associativiteit voor %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "herdeclaratie van standaard \"tagless\" %%destructor"
+msgid "useless precedence for %s"
+msgstr "nutteloze voorrang voor %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "herdeclaratie van standaard \"tagged\" %%printer"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "nutteloze associativiteit voor %s;  gebruik %%precedence"
 
-#: 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."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "niet-eindsymbool is nutteloos in de grammatica: %s"
 
-#: lib/bitset_stats.c:261
-#, fuzzy, c-format
-msgid "bad stats file size\n"
-msgstr "Het statistiekenbestand heeft een verkeerde grootte.\n"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "verouderd directief;  gebruik %s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-#, fuzzy
-msgid "cannot write stats file"
-msgstr "Kon niet schrijven naar het statistiekenbestand."
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Mogelijke SOORTen waarschuwingen:\n"
+#~ "  'conflicts-sr'      S/R-conflicten (standaard ingeschakeld)\n"
+#~ "  'conflicts-rr'      R/R-conflicten (standaard ingeschakeld)\n"
+#~ "  'deprecated'        verouderde constructies\n"
+#~ "  'empty-rule'        lege regels zonder %empty\n"
+#~ "  'midrule-values'    midregelwaarden die niet gezet of gebruikt worden\n"
+#~ "  'precedence'        nutteloze voorrang en associativiteit\n"
+#~ "  'yacc'              dingen die niet compatibel zijn met POSIX Yacc\n"
+#~ "  'other'             alle andere waarschuwingen (standaard "
+#~ "ingeschakeld)\n"
+#~ "  'all'               alle waarschuwingen behalve 'yacc'\n"
+#~ "  'no-SOORT'       geen waarschuwingen van deze SOORT\n"
+#~ "  'none'              helemaal geen waarschuwingen\n"
+#~ "  'error[=SOORT]'  waarschuwingen als fouten beschouwen\n"
 
-#: lib/bitset_stats.c:292
-#, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Kon het statistiekenbestand niet openen voor schrijven."
+# Verschillende dingen die beter zouden moeten kunnen - zeker de 'itemset' tekst
+#~ 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'        de toestanden van de automaat beschrijven\n"
+#~ "  'itemset'      de verzamelingen van kern-items vervolledigen met hun "
+#~ "closures\n"
+#~ "  'lookahead'    look-ahead tokens expliciet associëren met items\n"
+#~ "  'solved'       het oplossen van shift/reductie-conflicten beschrijven\n"
+#~ "  'all'          alle bovengenoemde informatie produceren\n"
+#~ "  'none'         de rapportering uitschakelen\n"
 
-#: lib/closeout.c:112
-#, fuzzy
-msgid "write error"
-msgstr "fatale fout"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FUNCTIE is een door komma's gescheiden lijst van woorden;  geldige "
+#~ "woorden zijn:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    fouten aanduiden met een dakje\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    laat machinaal leesbare oplossingen zien\n"
+#~ "  'syntax-only'\n"
+#~ "    genereer geen enkel bestand\n"
+#~ "  'all'\n"
+#~ "    alle bovengenoemde functies\n"
+#~ "  'none'\n"
+#~ "    geen van de bovengenoemde functies\n"
+#~ "  "
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Onbekende systeemfout"
+#~ msgid "symbol %s redefined"
+#~ msgstr "symbool %s opnieuw gedefinieerd"
 
-#: 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"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "verwijderen van '%s' is mislukt"
 
-#: 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"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "aanmaken van tijdelijk bestand is mislukt"
 
-#: 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"
+#~ msgid "saving stdin failed"
+#~ msgstr "opslaan van standaardinvoer is mislukt"
 
-#: 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"
+#~ msgid "saving stdout failed"
+#~ msgstr "opslaan van standaarduitvoer is mislukt"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: onbekende optie '--%s'\n"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "openen van tijdelijk bestand is mislukt"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: onbekende optie '%c%s'\n"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "omleiden van bison's standaarduitvoer naar tijdelijk bestand is mislukt"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: ongeldige optie -- '%c'\n"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "omleiden van m4's standaardinvoer naar tijdelijk bestand is mislukt"
 
-#: 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"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "openen van tijdelijk bestand is mislukt"
 
-#: 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"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "omleiden van m4's standaarduitvoer naar tijdelijk bestand is mislukt"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "hulpprogramma '%s' werd onderbroken"
 
-#: 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"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "hulpprogramma '%s' werd niet gevonden"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "geen geheugen meer beschikbaar"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "omleiden van bison's standaardinvoer naar tijdelijk bestand is mislukt"
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "ongeldig argument %s voor %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argument %s voor %s is niet eenduidig"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Geldige argumenten zijn:"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u vrijgegeven (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u gecached (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "histogram van aantal gezette bits\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "histogram van bitset-groottes\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "histogram van dichtheid aan gezette bits\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset-statistieken:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Aantal uitvoeringen = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "kan statistiekenbestand niet lezen"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "statistiekenbestand heeft een verkeerde grootte\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "kan statistiekenbestand niet schrijven"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "kan statistiekenbestand niet openen voor schrijven"
+
+#~ msgid "write error"
+#~ msgstr "schrijffout"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Onbekende systeemfout"
+
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: optie '%s%s' is niet eenduidig\n"
+
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: optie '%s%s' is niet eenduidig; mogelijkheden zijn:"
+
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: onbekende optie '%s%s'\n"
+
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '%s%s' staat geen argument toe\n"
+
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: optie '%s%s' vereist een argument\n"
+
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: ongeldige optie -- '%c'\n"
+
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: optie vereist een argument -- '%c'\n"
+
+#~ 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "kan geen pijp 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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "subproces %s is 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 "`"
+#~ msgid "`"
+#~ msgstr "‘"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "'"
+#~ msgstr "’"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Uitvoeringstijden (in seconden)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Uitvoeringstijden (in seconden)"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTAAL                :"
+#~ msgid "CPU user"
+#~ msgstr "CPU (gebruiker)"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tijd in %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU (systeem)"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle mislukt"
+#~ msgid "wall clock"
+#~ msgstr "verlopen tijd"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "kan fd %d niet herstellen: dup2 mislukt"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle() is mislukt"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "%s subproces"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "kan bestandsdescriptor %d niet herstellen: dup2() is mislukt"
 
-#: 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 "%s subprocess"
+#~ msgstr "subproces %s"
 
-#~ msgid "state %d"
-#~ msgstr "toestand %d"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "subproces %s ontving het fatale signaal %d"
 
-#, fuzzy
-#~ msgid "stray '@'"
-#~ msgstr "losse `@'"
+#~ msgid " type %d is %s\n"
+#~ msgstr " type %d is %s\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAAL                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tijd in %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "ongeldige $-waarde: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: onbekende optie '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: optie '-W %s' vereist een argument\n"
+
+#~ msgid ""
+#~ "Generate LALR(1) and GLR parsers.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Genereer LALR(1) en GLR parsers.\n"
+#~ "\n"
+
+#~ msgid "empty"
+#~ msgstr "leeg"
+
+#~ msgid "%s `%s' redefined"
+#~ msgstr "%s `%s' opnieuw gedefinieerd"
 
 #~ msgid ""
 #~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
@@ -1212,12 +1473,24 @@
 #~ "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 "state %d"
+#~ msgstr "toestand %d"
+
+#~ msgid "stray `@'"
+#~ msgstr "losse `@'"
 
 #~ msgid "tokens %s and %s both assigned number %d"
 #~ msgstr "tokens %s en %s hebben beide nummer %d toegewezen gekregen"
+
+# tagged en tagless? wasdavooriets?
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "herdeclaratie van standaard \"tagged\" %%destructor"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "herdeclaratie van standaard \"tagless\" %%destructor"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "herdeclaratie van standaard \"tagged\" %%printer"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "herdeclaratie van standaard \"tagless\" %%printer"
diff --git a/po/pl.gmo b/po/pl.gmo
index eb721ab..7fef474 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 73ce275..4347aad 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,138 +1,331 @@
 # Polish translations for GNU Bison package.
-# Copyright (C) 2004, 2005, 2006, 2008, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2008, 2010, 2011, 2012, 2013 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.
+# Wojciech Polak <polak@gnu.org>, 2004, 2005, 2006, 2008, 2010, 2011, 2012, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 2.7.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-06-17 21:11+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "pusta reguła bez %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "bezużyteczne pierwszeństwo i asocjacja dla %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "ostrzeżenie"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "błąd"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "fatalny błąd"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "przestarzała dyrektywa: %s, użyj %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "przestarzała dyrektywa, użyj %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "przestarzała dyrektywa, użyj %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "poprzednia deklaracja"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "tylko jedno %s dozwolone na jedną regułę"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Stan %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikty: %d przesunięcie/redukcja, %d redukcja/redukcja\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikty: %d przesunięcie/redukcja\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikty: %d redukcja/redukcja\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konflikty przesunięcie/redukcja: znaleziono %d, spodziewano się %d"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "konflikty redukcja/redukcja: znaleziono %d, spodziewano się %d"
+
+#: src/conflicts.c:669
 #, 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
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "konflikty przesunięcie/redukcja: znaleziono %d, spodziewano się %d"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d konflikt przesunięcie/redukcja"
+msgstr[1] "%d konflikty przesunięcie/redukcja"
+msgstr[2] "%d konfliktów przesunięcie/redukcja"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "konflikty redukcja/redukcja: znaleziono %d, spodziewano się %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d konflikt redukcja/redukcja"
+msgstr[1] "%d konflikty redukcja/redukcja"
+msgstr[2] "%d konfliktów redukcja/redukcja"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: nie można otworzyć"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "błąd wejścia/wyjścia"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "nie można zamknąć pliku"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "odmowa nadpisania pliku wejściowego %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: nie można otworzyć"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d konflikt przesunięcie/redukcja"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Spróbuj '%s --help' aby uzyskać więcej informacji.\n"
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Użycie: %s [OPCJA]... PLIK\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 "Tworzy deterministyczny analizator składni LR lub uogólniony LR (GLR)\n"
@@ -140,29 +333,31 @@
 "Wsparcie dla IELR(1) i kanonicznego LR(1) jest eksperymentalne.\n"
 "\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "To samo dotyczy argumentów opcjonalnych.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -177,48 +372,59 @@
 "  -f, --feature[=FUNKCJA]    aktywuje różne funkcje programu\n"
 "\n"
 
-#: src/getargs.c:329
-#, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -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"
+"  -l, --no-lines             zabrania tworzenia dyrektyw '#line'\n"
 "  -k, --token-table          dołącza tablicę nazw symboli leksykalnych\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -226,84 +432,24 @@
 "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"
+"  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "O błędach programu poinformuj <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "strona domowa %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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"
 
@@ -312,31 +458,31 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "Dla pełnej dokumentacji, uruchom: info bison\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Napisany przez Roberta Corbetta i Richarda Stallmana.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -346,39 +492,40 @@
 "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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "wielokrotne deklaracje szkieletu są nieprawidłowe"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: nieprawidłowy język"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "wielokrotne deklaracje językowe są nieprawidłowe"
 
-#: src/getargs.c:747
-#, c-format
-msgid "%s: missing operand"
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "przestarzała dyrektywa: %s, użyj %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "%s: brakujący argument"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "dodatkowy argument %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "pusta"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramatyka"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -391,212 +538,277 @@
 "// Strona domowa: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "przepełnienie numeru linii"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "przepełnienie numeru kolumny"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "przepełnienie numeru linii"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "bezużyteczna reguła w analizatorze z powodu konfliktów"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "zredefiniowana zmienna %%define %s"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: niezdefiniowana zmienna %%define %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "zredefiniowana zmienna %%define %s"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "zredefiniowana zmienna %%define %s"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "zredefiniowana zmienna %%define %s"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "nieprawidłowa wartość dla zmiennej %%define %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "zaakceptowana wartość: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "przedefiniowanie numeru symbolu leksykalnego %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "brakujący identyfikator w deklaracji parametrów"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "nieprawidłowa sekwencja ucieczki: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " typ %d jest %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Stan %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "przesunięcie, i przejście do stanu %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "przejście do stanu %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "błąd (symbol niełączący się)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "redukcja przy użyciu reguły %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "akceptowanie"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$domyślnie"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Symbole terminalne i reguły, w których występują"
 
-#: src/print.c:436
+#: src/print.c:391
 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:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " po lewej:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " po prawej:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Bezużyteczne reguły w analizatorze z powodu konfliktów"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "wielokrotne deklaracje %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "zignorowano powtórzoną nazwę symbolu dla %s"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "reguła dana dla symbolu leksykalnego %s"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "konflikt typu w domyślnej akcji: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "nieużywana wartość: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "nieustawiona wartość: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty w niepustej regule"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "pusta reguła bez %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "tylko jedno %s dozwolone na jedną regułę"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s wpływa tylko na analizatory składni GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "za %s musi być umieszczona liczba dodatnia"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "zbyt długa reguła"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "brak reguł w gramatyce wejściowej"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "reguła bezużyteczna w gramatyce"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "Symbol nieterminalny bezużyteczny w gramatyce: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Symbole nieterminalne bezużyteczne w gramatyce"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Nieużywane symbole terminalne w gramatyce"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Bezużyteczne reguły w gramatyce"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -604,7 +816,7 @@
 msgstr[1] "%d bezużyteczne symbole nieterminalne w gramatyce"
 msgstr[2] "%d bezużytecznych symboli nieterminalnych w gramatyce"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -612,585 +824,668 @@
 msgstr[1] "%d bezużyteczne reguły w gramatyce"
 msgstr[2] "%d bezużytecznych reguł w gramatyce"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "odnosi się do: %c%s w %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "może chodziło o: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", ukrywanie %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, 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"
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ", nie jest dostępne z akcji mid-rule w $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "liczba całkowita poza zakresem: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "nieprawidłowe odwołanie: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, 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
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "nie znaleziono symbolu w produkcji: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "mylące odniesienie: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "niejednoznaczne odniesienie: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "jawny typ w gramatyce beztypowej"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ należący do %s nie posiada zadeklarowanego typu"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "zabłąkany znak ',' potraktowany jako biały znak"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "nieprawidłowa dyrektywa: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "nieprawidłowy identyfikator: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 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
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "nieprawidłowy pusty znak"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "niespodziewany identyfikator w nazwie: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "oczekiwano identyfikatora"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "pusty literalny znak"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "nieprawidłowa liczba po \\-escape: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "nieprawidłowy znak po \\-escape: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "brakujący %s na końcu pliku"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "brakujący %s na końcu linii"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "niedomknięta dyrektywa %s w szkielecie"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, 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
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s redeklaracja dla %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s redeklaracja dla <%s>"
 
-#: src/symtab.c:332
-#, c-format
-msgid "symbol %s redefined"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 msgstr "zredefiniowany symbol %s"
 
-#: src/symtab.c:346
-#, c-format
-msgid "symbol %s redeclared"
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
 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:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"użyty symbol %s nie jest zdefiniowany jako symbol leksykalny i nie posiada "
+"reguł"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "zredefiniowany symbol %s"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "przedefiniowanie numeru symbolu leksykalnego %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "przedefiniowanie numeru symbolu leksykalnego %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "bezużyteczny %s dla typu <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "użyty typ <%s> nie jest powiązany z żadnym symbolem"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "redeklaracja numeru symbolu leksykalnego %d dla %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "poprzednia deklaracja dla %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "symbol początkowy %s jest niezdefiniowany"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "symbol początkowy %s jest symbolem leksykalnym"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "domyślny oznaczony %%destructor deklarowany ponownie"
+msgid "useless precedence and associativity for %s"
+msgstr "bezużyteczne pierwszeństwo i asocjacja dla %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "domyślny nieoznaczony %%destructor deklarowany ponownie"
+msgid "useless precedence for %s"
+msgstr "bezużyteczne pierwszeństwo dla %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "domyślny oznaczony %%printer deklarowany ponownie"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "bezużyteczna asocjacja dla %s, użyj %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "domyślny nieoznaczony %%printer deklarowany ponownie"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "Symbol nieterminalny bezużyteczny w gramatyce: %s"
 
-#: 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ę"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "przestarzała dyrektywa, użyj %s"
 
-#: 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ę"
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  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"
+#~ "  'empty-rule'        puste reguły bez %empty\n"
+#~ "  'precedence'        bezużyteczne pierwszeństwo i asocjacja\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[=KATEGORIA]' traktuje ostrzeżenia jako błędy\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "zapisanie standardowego wejścia nie powiodło się"
+#~ 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"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "zapisanie standardowego wyjścia nie powiodło się"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    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"
+#~ "  "
 
-#: 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ę"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "nieprawidłowy argument %s dla %s"
 
-#: 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"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "niejednoznaczny argument %s dla %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Prawidłowe argumenty to:"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "otwarcie tymczasowego pliku nie powiodło się"
+#~ msgid "write error"
+#~ msgstr "błąd zapisu"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Nieznany błąd systemu"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "dodatkowy program '%s' przerwany"
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: opcja '-W %s' jest niejednoznaczna\n"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "dodatkowy program '%s' nie znaleziony"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: opcja '%s' jest niejednoznaczna; możliwości:"
 
-#: 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"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: nieznana opcja '%c%s'\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "nieprawidłowy argument %s dla %s"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: opcja '%c%s' nie może mieć argumentów\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "niejednoznaczny argument %s dla %s"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: opcja '--%s' wymaga argumentu\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Prawidłowe argumenty to:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: błędna opcja -- '%c'\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u zwolnione (%.2f%%).\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: opcja wymaga argumentu -- '%c'\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"
+#~ msgid "memory exhausted"
+#~ msgstr "pamięć wyczerpana"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u zapamiętane (%.2f%%)\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "nie można utworzyć potoku"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr "%u bitset_tests, %u zapamiętane (%.2f%%)\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "podproces %s nie powiódł się"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "`"
+#~ msgstr "`"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "histogram rejestru zliczeń\n"
+#~ msgid "'"
+#~ msgstr "'"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "histogram rejestru wielkości\n"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Czas wykonania (w sekundach)\n"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "histogram gęstości\n"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle nie powiodło się"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Statystyki bitset:\n"
-"\n"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "nie można odzyskać fd %d: wywołanie dup2 nie powiodło się"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Zakumulowane przebiegi = %u\n"
+#~ msgid "%s subprocess"
+#~ msgstr "podproces %s"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "nie można odczytać pliku statystyk"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "podproces %s otrzymał nieprawidłowy sygnał %d"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "zły rozmiar pliku statystyk\n"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u zwolnione (%.2f%%).\n"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "nie można zapisać pliku statystyk"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u zapamiętane (%.2f%%)\n"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "nie można otworzyć pliku statystyk do zapisu"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u zapamiętane (%.2f%%)\n"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "błąd zapisu"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u zapamiętane (%.2f%%)\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Nieznany błąd systemu"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: 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:"
+#~ msgid "count log histogram\n"
+#~ msgstr "histogram rejestru zliczeń\n"
 
-#: 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"
+#~ msgid "size log histogram\n"
+#~ msgstr "histogram rejestru wielkości\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"
+#~ msgid "density histogram\n"
+#~ msgstr "histogram gęstości\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"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statystyki bitset:\n"
+#~ "\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: nieznana opcja '--%s'\n"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Zakumulowane przebiegi = %u\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"
+#~ msgid "cannot read stats file"
+#~ msgstr "nie można odczytać pliku statystyk"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: błędna opcja -- '%c'\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "zły rozmiar pliku statystyk\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"
+#~ msgid "cannot write stats file"
+#~ msgstr "nie można zapisać pliku statystyk"
 
-#: 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"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "nie można otworzyć pliku statystyk do zapisu"
 
-#: 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"
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "brakujący %s na końcu pliku"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "nieprawidłowy identyfikator: %s"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "pamięć wyczerpana"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "pusty literalny znak"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "nieprawidłowy identyfikator: %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 "podproces %s nie powiódł się"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "nieprawidłowy identyfikator: %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 "`"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "pusty literalny znak"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "symbol %s redefined"
+#~ msgstr "zredefiniowany symbol %s"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Czas wykonania (w sekundach)\n"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "usuwanie '%s' nie powiodło się"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " CAŁKOWITY             :"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "utworzenie tymczasowego pliku nie powiodło się"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "czas w %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "saving stdin failed"
+#~ msgstr "zapisanie standardowego wejścia nie powiodło się"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle nie powiodło się"
+#~ msgid "saving stdout failed"
+#~ msgstr "zapisanie standardowego wyjścia 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ę"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "otwarcie tmpfile 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"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr "nie powiodło się przekierowanie stdout bisona do tymczasowego pliku"
 
-#: 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 "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "nie powiodło się przekierowanie stdin m4 z tymczasowego pliku"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "otwarcie tymczasowego pliku nie powiodło się"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "nie powiodło się przekierowanie stdout m4 do tymczasowego pliku"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "dodatkowy program '%s' przerwany"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "dodatkowy program '%s' nie znaleziony"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "nie powiodło się przekierowanie stdin bisona z tymczasowego pliku"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " typ %d jest %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "nieprawidłowa wartość $: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opcja '--%s' nie może mieć argumentów\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: nieznana opcja '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opcja '-W %s' nie może mieć argumentów\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: opcja '-W %s' wymaga argumentu\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " CAŁKOWITY             :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "czas w %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "empty"
+#~ msgstr "pusta"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "znak ';' może być konieczny na końcu kodu akcji"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "przyszłe wersje Bisona nie będą dodawać znaku ';'"
+
+#~ 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"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "domyślny oznaczony %%destructor deklarowany ponownie"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "domyślny nieoznaczony %%destructor deklarowany ponownie"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "domyślny oznaczony %%printer deklarowany ponownie"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "domyślny nieoznaczony %%printer deklarowany ponownie"
 
 #~ msgid "state %d"
 #~ msgstr "stan %d"
@@ -1237,9 +1532,6 @@
 #~ 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"
 
@@ -1371,8 +1663,5 @@
 #~ 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
index 7171673..e2a3f0d 100644
--- a/po/pt.gmo
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
index ba03fc1..88b3d30 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -1,306 +1,527 @@
-# bison-2.4.1: Translation to Portuguese.
-# Copyright (C) 2009 Free Software Foundation, Inc.
+# Portuguese (Portugal) translation for the Bison Package.
+# Copyright (C) 2018 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.
+# Pedro Albuquerque <palbuquerque73@gmail.com>, 2018, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-2.4.1\n"
+"Project-Id-Version: bison-3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-23 07:21+0000\n"
+"Last-Translator: Pedro Albuquerque <palbuquerque73@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-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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "conflitos S/R (activa por predefinição)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "conflitos R/R (activa por predefinição)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "aliás de cadeia não anexados a um símbolo"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "construções obsoletas"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "regras vazias sem %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "valores de meia regra indefinidos ou não usados"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "precedência e associatividade inúteis"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "incompatibilidades com POSIX Yacc"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "todos os outros avisos (activa por predefinição)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "todos os avisos excepto \"dangling-alias\" e \"yacc\""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "desligar avisos em CATEGORIA"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "desligar todos os avisos"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "tratar avisos como erros"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "As categorias de avisos incluem:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "aviso"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Erro de E/S"
+msgstr "erro"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "erro fatal"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
-msgstr ""
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc não suporta %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr ""
+msgid "deprecated directive: %s, use %s"
+msgstr "directiva obsoleta: %s, use %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
-msgstr ""
+msgid "duplicate directive"
+msgstr "directiva duplicada"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr ""
+msgid "duplicate directive: %s"
+msgstr "directiva duplicada: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr ""
+msgid "previous declaration"
+msgstr "declaração anterior"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr ""
+msgid "only one %s allowed per rule"
+msgstr "só uma %s permitida por regra"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "Conflito entre regra %d e símbolo %s resolvido como troca"
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "Conflito entre regra %d e símbolo %s resolvido como redução"
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "Conflito entre regra %d e símbolo %s resolvido como erro"
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
-msgstr ""
+msgstr "Estado %d"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflitos: %d troca/redução, %d redução/redução\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflitos: %d troca/redução\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflitos: %d redução/redução\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "conflitos troca/redução para a regra %d: %d encontrados, %d esperados"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"conflitos redução/redução para a regra %d: %d encontrados, %d esperados"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr ""
+msgstr "%%expect-rr só se aplica a analisadores GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "conflitos troca/redução: %d encontrados, %d esperados"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d conflito troca/redução"
+msgstr[1] "%d conflitos troca/redução"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "conflitos redução/redução: %d encontrados, %d esperados"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d conflito troca/redução"
+msgstr[1] "%d conflitos troca/redução"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
-msgstr ""
+msgstr "%s: impossível abrir"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "erro de entrada/saída"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "cannot close file"
+msgstr "impossível fechar o ficheiro"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "recusa de sobrescrever ficheiro de entrada %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr ""
+msgstr "saidas conflituosas para ficheiro %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr ""
+msgid "%s: cannot backup"
+msgstr "%s: impossível criar segurança"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr ""
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "colorir a saída"
 
-#: 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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "não colorir a saída"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "colorir se o dispositivo de saída for um tty"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "QUANDO pode ser um dos seguintes:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "descrever os estados"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "completar os conjuntos de itens nucleares com o seu fecho"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "associar explicitamente símbolos lookahead a itens"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "descrever solução de conflitos troca/redução"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "incluir toda a informação acima"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "desactivar o relatório"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
 msgstr ""
+"COISAS é uma lista de palavras separadas por vírgulas que pode incluir:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+"RASTOS é uma lista de palavras separadas por vírgulas que pode incluir:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "mostrar erros com circunflexos"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "mostrar reparações legíveis por máquina"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "não gerar nenhum ficheiro"
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr "todas as acima"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "desactivar todas as acima"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+"FUNCIONAL é uma lista de palavras separadas por vírgulas que pode incluir:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Tente \"%s --help\" para mais informação.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uso: %s [OPÇÃO]... FICHEIRO\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Gerar um analisador LR determinista ou LR generalizado (GLR) usando\n"
+"tabelas de análise LALR(1), IELR(1) ou LR(1) canónica.\n"
+"\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
+"Argumentos obrigatórios para opções longas também são obrigatórios para "
+"opções curtas.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "Igualmente verdadeiro para argumentos opcionais.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
+"Modos de operação:\n"
+"  -h, --help                 mostra esta ajuda e sai\n"
+"  -V, --version              mostra informação da versão e sai\n"
+"      --print-localedir      mostra a pasta com dados dependentes da "
+"definição regional\n"
+"                             e sai\n"
+"      --print-datadir        mostra a pasta com esqueletos e XSLT\n"
+"                             e sai\n"
+"  -u, --update               aplica reparações ao ficheiro fonte de "
+"gramática e sai\n"
+"  -f, --feature[=FUNCIONAL]  activa várias funcionalidades\n"
+"\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Diagnóstico:\n"
+"  -W, --warnings[=CATEGORIA] reportar os avisos que caem em CATEGORIA\n"
+"      --color[=QUANDO]       se deve colorir o diagnóstico\n"
+"      --style=FICHEIRO       especificar o FICHEIRO CSS para diagnóstico "
+"colorido\n"
+"\n"
+
+#: src/getargs.c:400
 #, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
+"Analisador:\n"
+"  -L, --language=LINGUAGEM         especificar linguagem de programação de "
+"saída\n"
+"  -S, --skeleton=FICHEIRO          especificar o esqueleto a usar\n"
+"  -t, --debug                      instruir o analisador para rastreio\n"
+"                                   tal como \"-Dparse.trace\"\n"
+"      --locations                  activar suporte a localização\n"
+"  -D, --define=NOME[=VALOR]        similar a \"%define NOME \"VALOR\"\"\n"
+"  -F, --force-define=NOME[=VALOR]  sobrepor \"%define NOME \"VALOR\"\"\n"
+"  -p, --name-prefix=PREFIXO        apor PREFIXO aos símbolos externos\n"
+"                                   obsoleto desde \"-Dapi.prefix=PREFIXO\"\n"
+"  -l, --no-lines                   não gera directivas \"#line\"\n"
+"  -k, --token-table                incluir uma tabela de nomes de símbolos\n"
+"  -y, --yacc                       emular POSIX Yacc\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"      --defines[=FICHEIRO]   produz também um ficheiro de cabeçalho\n"
+"  -d                         igual mas sem especificar FICHEIRO (para POSIX "
+"Yacc)\n"
+"  -r, --report=COISAS        produz também detalhes do automaton\n"
+"      --report-file=FICHEIRO escreve relatório em FICHEIRO\n"
+"  -v, --verbose              igual a \"--report=state\"\n"
+"  -b, --file-prefix=PREFIXO  especifica PREFIXO para ficheiros de saída\n"
+"  -o, --output=FICHEIRO      deixar saída em FICHEIRO\n"
+"  -g, --graph[=FICHEIRO]     produz também um gráfco do automaton\n"
+"  -x, --xml[=FICHEIRO]       produz também um relatório XML do 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
-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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
+msgstr "Reportar erros a <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "Página inicial de %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+msgstr "Ajuda geral para usar programas 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "Reportar erros de tradução a <http://translationproject.org/team/>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Para documentação completa, execute: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Escrito por Robert Corbett e Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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 ""
+"é um programa gratuito; veja a fonte para condições de cópia. NÃO há "
+"QUALQUER\n"
+"garantia; nem mesmo para COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO "
+"PARTICULAR.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr ""
+msgstr "múltiplas declarações de esqueleto são inválidas"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
-msgstr ""
+msgstr "%s: linguagem inválida"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr ""
+msgstr "múltiplas declarações de linguagem são inválidas"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr ""
+msgid "deprecated option: %s, use %s"
+msgstr "opção obsoleta: %s, use %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "operando em falta"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
-msgstr ""
+msgstr "operando extra %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "vazio"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramática"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -308,797 +529,879 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Gerado por %s.\n"
+"// Reportar erros a <%s>.\n"
+"// Página inicial: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr "ultrapassado o número de linhas"
+msgstr "transporte de nº de linha"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
-msgstr "ultrapassado o número de colunas"
+msgstr "transporte de nº de coluna"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "transporte de nº de byte"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "..."
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr ""
+msgstr "regra inútil no analisador devidoa aconflitos"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "podem ser aplicados fix-its. Re-executar com a opção \"--update\"."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
-msgstr ""
+msgstr "Variável %%define %s redefinida"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr ""
+msgstr "definição anterior"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: variável %%define %s indefinida"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "Variável %%define \"%s\" requer valores \"{...}\""
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "Variável %%define \"%s\" requer valores de palavra-chave"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "Variável %%define \"%s\" requer valores \"\"...\"\""
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "valor inválido para variável %%define %s booliana"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "valor inválido para variável %%define %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
-msgstr ""
+msgstr "valor aceite: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "literais de caracteres não podem ser não-terminais"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "literais de caracteres não podem ser usados com %s"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "definição de %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr ""
+msgstr "identificador em falta na declaração do parâmetro"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr "tipo %d é %s\n"
+msgid "invalid version requirement: %s"
+msgstr "requerimento de versão inválido: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "requerido bison %s, obtido %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Estado %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
-msgstr ""
+msgstr "troca e vai para estado %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
-msgstr "ir para o estado %d\n"
+msgstr "vai para estado %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
-msgstr "erro (não-associativo)\n"
+msgstr "erro (não associativo)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
-msgstr ""
+msgstr "redução com regra %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
-msgstr "aceite"
+msgstr "aceitar"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 msgid "$default"
-msgstr ""
+msgstr "$default"
 
-#: 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
-msgstr ""
+msgstr "Terminais, com regras onde aparecem"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
-msgstr ""
+msgstr "Não terminais, com regras onde aparecem"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+msgid "on left:"
 msgstr "à esquerda:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+msgid "on right:"
 msgstr "à direita:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr ""
+msgstr "Regras inúteis no analisador devido a conflitos"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr ""
+msgstr "múltiplas declarações %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr ""
+msgstr "choque no tipo de resultado na função de união %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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "nome de símbolo duplicado para %s ignorado"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr ""
+msgstr "regra dada para %s, que é um símbolo"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr ""
+msgstr "choque de tipo em acção predefinida: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr ""
+msgstr "regra vazia para não terminais digitados e sem acção"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
-msgstr ""
+msgstr "valor não usado: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr ""
+msgstr "valor não definido: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty em regra não-vazia"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "regra vazia sem %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "símbolo para %%prec não está definido: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr ""
+msgid "only midrule actions can be typed: %s"
+msgstr "só acções na regra podem ser inseridas: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr ""
+msgstr "%s só afecta analisadores GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr ""
+msgstr "%s tem de ser seguido por um nº positivo"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc não suporta inserção de acções na regra"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
-msgstr "regra é muito longa"
+msgstr "regra muito longa"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
-msgstr ""
+msgstr "sem regras na gramática de entrada"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr ""
+msgstr "regra inútil na gramática"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "não-terminal inútil na gramática: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr ""
+msgstr "não-terminais inúteis na gramática"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr ""
+msgstr "Terminais não usados na gramática"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr ""
+msgstr "Regras inúteis na gramática"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d não-terminal inútil na gramática"
+msgstr[1] "%d não-terminais inúteis na gramática"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d regra inútil na gramática"
+msgstr[1] "%d regras inúteis na gramática"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr ""
+msgstr "símbolo %s inicial não deriva nenhuma frase"
 
-#: src/scan-code.l:188
+# pt_PT: escolhida a palavra "errante" para evitar masculino/feminino
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+msgstr "\"%s\" errante"
 
-#: 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "refere-se a: %c%s em %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "possível significado: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", a ocultar %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " em %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", não pode ser acedido de acção a meia regra em $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "integral fora de alcance: %s"
+msgstr "inteiro fora do intervalo: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "directriz inválida: %s"
+msgstr "referência inválida: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr ""
+msgstr "erro de sintaxe após \"%c\", esperado inteiro, letra, '_', '[', ou '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "símbolo não encontrado em produção antes de $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "símbolo não encontrado em produção: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "referência enganosa: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
-msgstr ""
+msgstr "referência ambígua: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "tipo explícito indicado em gramática atípica"
 
-#: src/scan-code.l:759
-#, fuzzy, c-format
+#: src/scan-code.l:639
+#, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$$ de `%s' não tem tipo declarado"
+msgstr "$$ para midrule em $%d de %s não tem tipo declarado"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ de `%s' não tem tipo declarado"
+msgstr "$$ de %s não tem tipo declarado"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d de `%s' não tem tipo declarado"
+msgstr "$%s de %s não tem tipo declarado"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "múltiplas ocorrências de $%d com api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr ""
+msgstr "\",\" extraviada tratada como espaço"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "directriz inválida: %s"
+msgstr "directiva inválida: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "directriz inválida: %s"
+msgstr "identificador inválido: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "caracter inválido: %s"
-msgstr[1] "caracter inválido: %s"
+msgstr[0] "carácter inválido"
+msgstr[1] "caracteres inválidos"
 
-#: 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
+#: src/scan-gram.l:383
 #, c-format
 msgid "invalid null character"
-msgstr "caracter nulo inválido"
+msgstr "carácter nulo inválido"
 
-#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
-#, fuzzy, c-format
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "identificador inesperado em nome entre parênteses: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "esperado um identificador"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "carácter inválido em nome entre parênteses"
+msgstr[1] "caracteres inválidos em nome entre parênteses"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc não suporta literais de cadeia"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "literal de carácter vazio"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "caracteres extra em literal de carácter"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "caracter nulo inválido: %s"
+msgstr "número inválido após \\-escape: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "caracter inválido: %s"
+msgstr "carácter inválido após \\-escape: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc não suporta literais hexadecimais"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
-msgstr ""
+msgstr "%s em falta no fim do ficheiro"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
-msgstr ""
+msgstr "%s em falta no fim da linha"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "directiva %s por fechar no esqueleto"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "poucos argumentos na directiva %s no esqueleto"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "muitos argumentos na directiva %s no esqueleto"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr ""
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc proíbe traços em nomes de símbolos: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr ""
+msgstr "muitos símbolos na gramática de entrada (limite é %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr ""
+msgstr "re-declaração de %s para %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
-msgstr ""
+msgstr "re-declaração de %s para <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr ""
+msgid "symbol %s redeclared as a token"
+msgstr "símbolo %s re-declarado como síbolo"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr ""
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "símbolo %s re-declarado como não-terminal"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
 msgstr ""
+"símbolo %s usado mas não é definido como símbolo e não tem regras; queria "
+"dizer %s?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
-msgstr ""
+msgstr "símbolo %s usado mas não é definido como símbolo  não tem regras"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc reserva o %%tipo para não-terminais"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "símbolo %s re-declarado"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "não-terminais não podem receber um número explicíto"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "a redefinir número de símbolo do utilizador de %s"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "número de símbolo do utilizador de %s muito grande"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "literal de cadeia %s não anexado a um símbolo"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s inútil para tipo <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "tipo <%s> usado mas não está associado a nenhum símbolo"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "não terminais não podem receber um aliás de cadeia"
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr ""
+msgstr "símbolo %s usado mais de uma vez como cadeia literal"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
-msgstr ""
+msgstr "símbolo %s tem mais de uma cadeia literal"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr ""
+msgstr "re-declaração de número de símbolo do utilizador %d para %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
-msgstr ""
+msgstr "declaração anterior para %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "número de símbolo muito grande"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr ""
+msgstr "símbolo inicial %s indefinido"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr ""
+msgstr "símbolo inicial %s é um símbolo"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "precedência e associatividade inúteis para %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "precedência inútil para %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "associatividade inútil para %s, use %%precedência"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr ""
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "directiva obsoleta, use %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr ""
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Categorias de aviso incluem:\n"
+#~ "  \"conflicts-sr\"      conflitos S/R (activo por predefinição)\n"
+#~ "  \"conflicts-rr\"      conflitos R/R (activo por predefinição)\n"
+#~ "  \"deprecated\"        construções obsoletas\n"
+#~ "  \"empty-rule\"        regras vazias sem %empty\n"
+#~ "  \"midrule-values\"    valores midrule não usados ou indefinidos\n"
+#~ "  \"precedence\"        precedência e associatividade inúteis\n"
+#~ "  \"yacc\"              incompatibilidades com POSIX Yacc\n"
+#~ "  \"other\"             todos os outros avisos (activo por predefinição)\n"
+#~ "  \"all\"               todos os avisos excepto \"yacc\"\n"
+#~ "  \"no-CATEGORIA\"      desliga avisos em CATEGORIA\n"
+#~ "  \"none\"              desliga todos os avisos\n"
+#~ "  \"error[=CATEGORIA]\" trata avisos como erros\n"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr ""
+#~ 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 ""
+#~ "COISAS é uma lista de palavras entre vírgulas que pode incluir:\n"
+#~ "  \"state\"        descreve o estado\n"
+#~ "  \"itemset\"      completa conjuntos de itens do núcleo com o fecho\n"
+#~ "  \"lookahead\"    associa explicitamente símbolos lookahead a itens\n"
+#~ "  \"solved\"       descreve resolução de conflitos troca/redução\n"
+#~ "  \"all\"          inclui toda a informação acima\n"
+#~ "  \"none\"         desactiva o relatório\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr ""
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FUNCIONALIDADE é uma lista de palavras entre vírgulas que pode incluir:\n"
+#~ "  \"caret\", 'diagnostics-show-caret'\n"
+#~ "    mostra erros com circunflexos\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    mostra reparações legíveis pela máquina\n"
+#~ "  'syntax-only'\n"
+#~ "    não gera nenhum ficheiro\n"
+#~ "  \"all\"\n"
+#~ "    todos os acima\n"
+#~ "  \"none\"\n"
+#~ "    desactiva todos os acima\n"
+#~ ".."
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr ""
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argumento %s inválido para %s"
 
-#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
-#, c-format
-msgid "opening of tmpfile failed"
-msgstr ""
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argumento %s ambíguo para %s"
 
-#: djgpp/subpipe.c:157
-#, c-format
-msgid "redirecting bison's stdout to the temporary file failed"
-msgstr ""
+#~ msgid "Valid arguments are:"
+#~ msgstr "Argumentos válidos:"
 
-#: djgpp/subpipe.c:201
-#, c-format
-msgid "redirecting m4's stdin from the temporary file failed"
-msgstr ""
+#~ msgid "write error"
+#~ msgstr "erro de escrita"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr ""
+#~ msgid "Unknown system error"
+#~ msgstr "Erro de sistema desconhecido"
 
-#: djgpp/subpipe.c:218
-#, c-format
-msgid "redirecting m4's stdout to a temporary file failed"
-msgstr ""
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: a opção \"%s%s\" é ambígua\n"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr ""
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: opção \"%s%s\" é ambígua; possibilidades:"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr ""
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opção não reconhecida \"%s%s\"\n"
 
-#: djgpp/subpipe.c:265
-#, c-format
-msgid "redirecting bison's stdin from the temporary file failed"
-msgstr ""
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: opção \"%s%s\" não permite um argumento\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr ""
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: opção \"%s%s\" requer um argumento\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr ""
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: opção inválida -- \"%c\"\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr ""
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: opção requer um argumento -- \"%c\"\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr ""
+#~ msgid "memory exhausted"
+#~ msgstr "memória esgotada"
 
-#: lib/bitset_stats.c:180
-#, c-format
-msgid "%u bitset_sets, %u cached (%.2f%%)\n"
-msgstr ""
+#~ msgid "cannot create pipe"
+#~ msgstr "impossível criar pipe"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr ""
+#~ msgid "%s subprocess failed"
+#~ msgstr "falha no sub-processo %s"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr ""
+#~ msgid "`"
+#~ msgstr "\""
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr ""
+#~ msgid "'"
+#~ msgstr "\""
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr ""
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempos de execução (segundos)"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr ""
+#~ msgid "CPU user"
+#~ msgstr "utilizador de CPU"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr ""
+#~ msgid "CPU system"
+#~ msgstr "sistema de CPU"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
+#~ msgid "wall clock"
+#~ msgstr "relógio de parede"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr ""
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "falha em _open_osfhandle"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-#, fuzzy
-msgid "cannot read stats file"
-msgstr "cannot close file"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "impossível restaurar fd %d: falha em dup2"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr ""
+#~ msgid "%s subprocess"
+#~ msgstr "sub-processo %s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-#, fuzzy
-msgid "cannot write stats file"
-msgstr "cannot close file"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "sub-processo %s obteve um sinal fatal %d"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr ""
+#~ msgid "symbol %s redefined"
+#~ msgstr "símbolo %s redefinido"
 
-#: lib/closeout.c:112
-#, fuzzy
-msgid "write error"
-msgstr "erro fatal"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "falha ao remover \"%s\""
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr ""
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "falha ao criar ficheiro temporário"
 
-#: lib/getopt.c:547 lib/getopt.c:576
-#, c-format
-msgid "%s: option '%s' is ambiguous; possibilities:"
-msgstr ""
+#~ msgid "saving stdin failed"
+#~ msgstr "falha ao gravar stdin"
 
-#: lib/getopt.c:624 lib/getopt.c:628
-#, c-format
-msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr ""
+#~ msgid "saving stdout failed"
+#~ msgstr "falha ao gravar stdout"
 
-#: lib/getopt.c:637 lib/getopt.c:642
-#, c-format
-msgid "%s: option '%c%s' doesn't allow an argument\n"
-msgstr ""
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "falha ao abrir tmpfile"
 
-#: lib/getopt.c:685 lib/getopt.c:704
-#, c-format
-msgid "%s: option '--%s' requires an argument\n"
-msgstr ""
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr "falha ao redireccionar a stdout do bison para ficheiro temporário"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr ""
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "falha ao redireccionar a stdin do m4 a partir de ficheiro temporário"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr ""
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "falha ao abrir ficheiro temporário"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr ""
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "falha ao redireccionar a stdout do m4 para ficheiro temporário"
 
-#: 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 ""
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "programa subsidiário \"%s\" interrompido"
 
-#: lib/getopt.c:934 lib/getopt.c:950
-#, c-format
-msgid "%s: option '-W %s' is ambiguous\n"
-msgstr ""
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "programa subsidiário \"%s\" não encontrado"
 
-#: lib/getopt.c:974 lib/getopt.c:992
-#, c-format
-msgid "%s: option '-W %s' doesn't allow an argument\n"
-msgstr ""
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "falha ao redireccionar a stdin do bison a partir de ficheiro temporário"
 
-#: lib/getopt.c:1013 lib/getopt.c:1031
-#, c-format
-msgid "%s: option '-W %s' requires an argument\n"
-msgstr ""
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u freed (%.2f%%).\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memória exausta"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u memorizados (%.2f%%)\n"
 
-#: 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"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u memorizados (%.2f%%)\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 ""
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u memorizados (%.2f%%)\n"
 
-#. 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 ""
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr ""
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma de registo de contagem\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
+#~ msgid "size log histogram\n"
+#~ msgstr "histograma de registo de tamanho\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr ""
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densidade\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr ""
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estatísticas de bitset:\n"
+#~ "\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Execuções acumuladas = %u\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid "cannot read stats file"
+#~ msgstr "impossível ler ficheiro de estatísticas"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "bad stats file size\n"
+#~ msgstr "tamanho de ficheiro de estatísticas errado\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#~ msgid "cannot write stats file"
+#~ msgstr "impossível escrever ficheiro de estatísticas"
 
-#~ msgid "invalid escape sequence: %s"
-#~ msgstr "sequência de escape inválida: %s"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "impossível abrir ficheiro de estatísticas para escrita"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tempo em %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " tipo %d é %s\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opção \"--%s\" não permite um argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção não reconhecida \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opção \"-W %s\" não permite um argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: opção \"-W %s\" requer um argumento\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 650acc5..bc484c3 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 143a8dd..9da4c1d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,335 +1,530 @@
-# bison: translation to Brazilian Portuguese (pt_BR)
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Brazilian Portuguese translation for bison package
+# Traduções em português brasileiro para o pacote bison
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
 # Alexandre Folle de Menezes <afmenez@terra.com.br>, 2002, 2003.
-#
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013-2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 1.875\n"
+"Project-Id-Version: bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-22 10:25-0200\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Virtaal 1.0.0-beta1\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "conflitos de desloc./redução (habilitado por padrão)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "conflitos de redução/redução (habilitado por padrão)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "aliases de strings não anexadas a um símbolo"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "construtos obsoletos"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "regras vazias sem %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "valores de midrule desconfigurados ou não usados"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "precedência e associatividade inúteis"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "incompatibilidades com POSIX Yacc"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "todos os outros avisos (habilitado por padrão)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "todos os avisos, exceto \"dangling-alias\" e \"yacc\""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "desliga aviso na CATEGORIA"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "desliga todos os avisos"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "trata avisos como erros"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Categorias de aviso incluem:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "aviso"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "Erro de E/S"
+msgstr "erro"
 
-#: src/complain.c:208 src/complain.c:215
-#, fuzzy
+#: src/complain.c:260
 msgid "fatal error"
-msgstr "erro fatal: "
+msgstr "erro fatal"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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`."
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc não possui suporte a %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, 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`."
+msgid "deprecated directive: %s, use %s"
+msgstr "diretiva obsoleta: %s, use %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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."
+msgid "duplicate directive"
+msgstr "diretiva duplicada"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, 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"
+msgid "duplicate directive: %s"
+msgstr "diretiva duplicada: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "conflitos: %d de deslocamento/redução\n"
+msgid "previous declaration"
+msgstr "declaração anterior"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "conflitos: %d de redução/redução\n"
+msgid "only one %s allowed per rule"
+msgstr "apenas um %s é permitido por regra"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, 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 deslocamento (shift)"
+
+#: src/conflicts.c:91
+#, 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 redução (reduce)"
+
+#: src/conflicts.c:100
+#, 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:602
 #, c-format
 msgid "State %d "
-msgstr "Estado %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
+#: src/conflicts.c:605
 #, 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"
+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: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/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflitos: %d de deslocamento/redução\n"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflitos: %d de redução/redução\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"conflitos de deslocamento/redução para a regra %d: %d encontrado(s), %d "
+"esperado(s)"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+"conflitos de redução/redução para a regra %d: %d encontrado(s), %d "
+"esperado(s)"
+
+#: src/conflicts.c:669
+#, c-format
+msgid "%%expect-rr applies only to GLR parsers"
+msgstr "%%expect-rr é aplicável apenas a analisadores GLR"
+
+#: src/conflicts.c:686
+#, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "conflitos de deslocamento/redução: %d encontrado(s), %d esperado(s)"
+
+#: src/conflicts.c:691
+#, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d conflito de deslocamento/redução"
+msgstr[1] "%d conflitos de deslocamento/redução"
+
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "conflitos de redução/redução: %d encontrado(s), %d esperado(s)"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d conflito de redução/redução"
+msgstr[1] "%d conflitos de redução/redução"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "impossível abrir o arquivo `%s'"
+msgstr "%s: não foi possível abrir"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "erro de entrada/saída"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "impossível fechar o arquivo"
+msgstr "não foi possível fechar o arquivo"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "recusando a sobrescrever o arquivo de entrada %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr "saídas conflitantes para o arquivo %s"
+msgstr "saídas conflitantes para o arquivo %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "tente `%s --help' para mais informações.\n"
+msgid "%s: cannot backup"
+msgstr "%s: não foi possível fazer cópia de segurança"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Uso: %s [OPCAO]... ARQUIVO\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "colore a saída"
 
-#: 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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "não colore a saída"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "colore se o dispositivo de saída for um tty"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "QUANDO pode ser um dos seguintes:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "descreve os estados"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "completa os conjuntos de itens básicos com seus fechamentos"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "associa explicitamente as previsões com os itens"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "descreve a solução de conflitos de deslocamento/redução"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "inclui todas as informações acima"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "desabilita o relatório"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "ITENS é uma lista de palavras separadas por vírgulas que pode incluir:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
 msgstr ""
+"RASTROS é uma lista de palavras separadas por vírgulas que pode incluir:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "mostra erros com o cursor"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "mostra correções legíveis por máquina"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "não gera qualquer arquivo"
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr "todos acima"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "desabilita todos acima"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+"RECURSOS é uma lista de palavras separadas por vírgula que pode incluir:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Tente \"%s --help\" para mais informações.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Uso: %s [OPÇÃO]... ARQUIVO\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Gera um analisador LR determinístico ou LR generalizado (GLR) empregando\n"
+"tabelas de analisadores LALR(1), IELR(1) ou LR(1) canonical.\n"
+"\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
+"Argumentos obrigatórios para opções longas também o são para as curtas.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "O mesmo é verdade para os argumentos opcionais.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
+"Modos de operação:\n"
+"  -h, --help                 exibe esta mensagem de ajuda e sai\n"
+"  -V, --version              exibe a informação da versão e sai\n"
+"      --print-localedir      exibe diretório contendo os dados dependentes\n"
+"                             de locale e sai\n"
+"      --print-datadir        exibe diretório contendo esqueletos e XSLT\n"
+"                             e sai\n"
+"  -u, --update               aplica correções ao arquivo de gramática fonte\n"
+"                             e sai\n"
+"  -f, --feature[=RECURSOS]   ativa recursos variados\n"
+"\n"
 
-#: src/getargs.c:329
-#, fuzzy, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Diagnóstico:\n"
+"  -W, --warnings[=CATEGORIA] relata avisos correspondentes à CATEGORIA\n"
+"      --color[=QUANDO]       se deve colorir os diagnósticos\n"
+"      --style=ARQUIVO        colore diagnósticos usando o ARQUIVO CSS\n"
+"\n"
+
+#: src/getargs.c:400
+#, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"Ajustes para o analisador:\n"
+"  -L, --language=LINGUAGEM         especifica a linguagem de programação\n"
+"                                   resultante\n"
+"  -S, --skeleton=ARQUIVO           especifica o esqueleto a ser usado\n"
+"  -t, --debug                      instrumenta o analisador para depuração\n"
+"                                   para rastreamento;\n"
+"                                   igual a \"-Dparse.trace\"\n"
+"      --locations                  habilita suporte a localizações\n"
+"  -D, --define=NOME[=VALOR]        similar a '%define NOME VALOR'\n"
+"  -F, --force-define=NOME[=VALOR]  sobrescreve '%define NOME VALOR'\n"
+"  -p, --name-prefix=PREFIXO        adiciona PREFIXO aos símbolos externos\n"
+"                                   obsoleto por \"-Dapi.prefix={PREFIXO}\"\n"
+"  -l, --no-lines                   não gera diretivas \"#line\"\n"
+"  -k, --token-table                inclui uma tabela de nomes de tokens\n"
+"  -y, --yacc                       emula o POSIX Yacc\n"
 
-#: src/getargs.c:346
-#, fuzzy
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"Arquivos de saída:\n"
+"      --defines[=ARQUIVO]    também produz um arquivo de cabeçalho\n"
+"  -d                         idem, mas sem especificar ARQUIVO (Yacc POSIX)\n"
+"  -r, --report=ITENS         também produz detalhes do autômato\n"
+"      --report-file=ARQUIVO  escreve o relatório para ARQUIVO\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[=ARQUIVO]      também produz um gráfico do autômato\n"
+"  -x, --xml[=ARQUIVO]        também produz um relatório XML 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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr "Informe os erros para <bug-bison@gnu.org>.\n"
+msgstr "Relate erros para <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "Página do %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+msgstr "Ajuda geral no uso de software 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Relate erros de tradução para <http://translationproject.org/team/pt_BR."
+"html>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "Para a documentação completa, execute: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
-msgstr "bison (GNU bison) %s"
+msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Escrito por Robert Corbett e Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
-msgstr "Copyright © %d Free Software Foundation, Inc.\n"
+msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"Este é um software livre; veja o código fonte para condições de cópia.\n"
+"NÃO HÁ QUALQUER GARANTIA; nem mesmo para COMERCIALIZAÇÃO ou de ADEQUAÇÃO A\n"
+"QUALQUER PROPÓSITO EM PARTICULAR.\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "declarações de %s múltiplas"
+msgstr "declarações de múltiplos esqueletos são inválidas"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "valor inválido: %s"
+msgstr "%s: linguagem inválida"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "declarações de %s múltiplas"
+msgstr "declarações de múltiplas linguagens são inválidas"
 
-#: src/getargs.c:747
-#, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "falta operando depois de `%s'"
+#: src/getargs.c:816
+#, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "opção obsoleta: %s, use %s"
 
-#: src/getargs.c:749
-#, fuzzy, c-format
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "faltando operando"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "operando `%s' sobrando"
+msgstr "operando extra %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "vazio"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
-msgstr "Gramática"
+msgstr "Gramática"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -337,825 +532,907 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// Gerado por %s.\n"
+"// Relate erros para <%s>.\n"
+"// Site: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr ""
+msgstr "estouro do número de linhas"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
-msgstr ""
+msgstr "sobrecarga de número de colunas"
 
-#: src/main.c:146
-#, fuzzy
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "estouro do número de bytes"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "…"
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "regra não reduzida por causa de conflitos"
+msgstr "regra inútil no analisador 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"
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
 msgstr ""
+"correções podem ser aplicadas. Execute novamente com a opção \"--update\"."
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "variável %%define %s redefinida"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
+msgid "previous definition"
+msgstr "definição anterior"
+
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: variável %%define indefinida %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "variável %%define \"%s\" requer valores \"{...}\""
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "variável %%define \"%s\" requer valores de palavra-chave"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "variável %%define \"%s\" requer valores '\"...\"'"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "valor inválido para variável booleana %%define %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "valor inválido para variável %%define %s: %s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "valor inválido: %s"
+msgstr "valor aceito: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "literais de caractere não podem ser não-terminais"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "literais de caractere não podem ser usados junto com %s"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "definição de %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "identificador faltando na declaração do parâmetro"
+msgstr "identificador faltando na declaração do parâmetro"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tipo %d é %s\n"
+msgid "invalid version requirement: %s"
+msgstr "requisito de versão inválido: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "exibe bison %s, mas tem %s"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Estado %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "deslocar, e ir ao estado %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "ir ao estado %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
-msgstr "erro (não associativo)\n"
+msgstr "erro (não associativo)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "reduzir usando a regra %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "aceitar"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 msgid "$default"
-msgstr "$padrão"
+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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminais, com as regras onde eles aparecem"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
-msgstr "Não-terminais com as regras onde eles aparecem"
+msgstr "Não terminais com as regras onde eles aparecem"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
-msgstr " à esquerda:"
+#: src/print.c:416
+msgid "on left:"
+msgstr "à esquerda:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " à direita:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "à direita:"
 
-#: src/print.c:510
-#, fuzzy
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "regra não reduzida por causa de conflitos"
+msgstr "Regras inúteis no analisador por causa de conflitos"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr "declarações de %s múltiplas"
+msgstr "declarações de %s múltiplas"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, 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>"
+msgstr "tipo de resultado conflita na funçã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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "nome de símbolo duplicado por %s ignorado"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "regra fornecida para %s, que é um token"
+msgstr "regra fornecida para %s, que é um token"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "conflito de tipos na ação padrão: <%s> != <%s>"
+msgstr "conflito de tipos na ação padrão: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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"
+msgstr "regra vazia para um não-terminal com tipo, e não há ações"
 
-#: src/reader.c:328
-#, fuzzy, c-format
+#: src/reader.c:334
+#, c-format
 msgid "unused value: $%d"
-msgstr "valor inválido: %s"
+msgstr "valor inútil: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr ""
+msgstr "valor desconfigurado: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty em regra não vazia"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "regra vazia sem %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "token para %%prec não está definido: %s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "apenas um %s é permitido por regra"
+msgid "only midrule actions can be typed: %s"
+msgstr "apenas ações midrule podem sr digitadas: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s afeta apenas analisadores GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s deve ser seguido por um número positivo"
+msgstr "%s deve ser seguido por um número positivo"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc não possui suporte às ações midrule digitadas"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
-msgstr ""
+msgstr "a regra é longa demais"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
-msgstr "não há regras na gramática de entrada"
+msgstr "não há regras na gramática de entrada"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "não há regras na gramática de entrada"
+msgstr "regra inútil na gramática"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "não terminal inútil na gramática: %s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Não-terminais com as regras onde eles aparecem"
+msgstr "Não terminais inúteis na gramática"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "não há regras na gramática de entrada"
+msgstr "Terminais sem uso na gramática"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "não há regras na gramática de entrada"
+msgstr "Regras inúteis na gramática"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d não-terminal inútil na gramática"
+msgstr[1] "%d não-terminais inúteis na gramática"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, 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"
+msgstr[0] "%d regra inútil na gramática"
+msgstr[1] "%d regras inúteis na gramática"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "símbolo de início %s não deriva nenhuma sentença"
+msgstr "símbolo inicial %s não deriva nenhuma sentença"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+msgstr "\"%s\" perdido"
 
-#: 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "refere-se a: %c%s em %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "possível significado: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", ocultando %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " em %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", não foi possível ser acessada da ação midrule em $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "inteiro fora de faixa: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "diretiva inválida: %s"
+msgstr "referência inválida: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"erro de sintaxe após \"%c\", esperava inteiro, letra, \"_\", \"[\" ou \"$\""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "símbolo não encontrado em produção antes de $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "símbolo não encontrado em produção: %.*s"
 
-#: src/scan-code.l:648
-#, fuzzy, c-format
+#: src/scan-code.l:532
+#, c-format
 msgid "misleading reference: %s"
-msgstr "redefinindo precedência de %s"
+msgstr "referência enganadora: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "argumento %s ambíguo para %s"
+msgstr "referência ambígua: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "tipo explícito fornecido é uma gramática sem tipo"
 
-#: src/scan-code.l:759
-#, fuzzy, c-format
+#: src/scan-code.l:639
+#, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr "$%d de `%s' não tem tipo declarado"
+msgstr "$$ para a midrule em $%d de %s não possui tipo declarado"
 
-#: src/scan-code.l:764
-#, fuzzy, c-format
+#: src/scan-code.l:645
+#, c-format
 msgid "$$ of %s has no declared type"
-msgstr "$$ de `%s' não tem tipo declarado"
+msgstr "$$ de %s não possui um tipo declarado"
 
-#: src/scan-code.l:786
-#, fuzzy, c-format
+#: src/scan-code.l:671
+#, c-format
 msgid "$%s of %s has no declared type"
-msgstr "$%d de `%s' não tem tipo declarado"
+msgstr "$%s de %s não possui um tipo declarado"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "múltiplas ocorrências de $%d com api.value.automove"
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "`,' perdida tratada como branco"
+msgstr "\",\" perdida tratada como branco"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "diretiva inválida: %s"
+msgstr "diretiva inválida: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "diretiva inválida: %s"
+msgstr "identificador inválido: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "caractere inválido: %s"
-msgstr[1] "caractere inválido: %s"
+msgstr[0] "caractere inválido"
+msgstr[1] "caracteres inválidos"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "caractere nulo inválido"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
-msgstr ""
+msgstr "identificador inesperado em nome entre chaves: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
-msgstr ""
+msgstr "um identificador esperado"
 
-#: src/scan-gram.l:381
-#, fuzzy
+#: src/scan-gram.l:464
 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"
+msgstr[0] "caractere inválido em nome entre chaves"
+msgstr[1] "caracteres inválidos em nome entre chaves"
 
-#: src/scan-gram.l:481 src/scan-gram.l:502
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc não possui suporte a literais de string"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
-msgstr ""
+msgstr "literal de caractere vazio"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, c-format
 msgid "extra characters in character literal"
-msgstr ""
+msgstr "caracteres extras em literal de caractere"
 
-#: 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "seqüência de escape inválida: %s"
+msgstr "número inválido após escape \\: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "caractere inválido: %s"
+msgstr "caractere inválido após escape \\: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc não possui suporte a literais de hexadecimal"
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "`%s' faltando no final do arquivo"
+msgstr "faltando %s no final do arquivo"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "`%s' faltando no final do arquivo"
+msgstr "faltando %s no final da linha"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "diretiva não fechada %s no esqueleto"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "número insuficiente de argumentos para a diretiva %s no esqueleto"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "argumentos demais para diretiva %s no esqueleto"
 
-#: src/symlist.c:211
-#, fuzzy, c-format
-msgid "invalid $ value: $%d"
-msgstr "valor inválido: %s"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc proíbe traços em nomes de símbolos: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr ""
+msgstr "símbolos demais na gramática de entrada (limite é %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr "redeclaração de %s para %s"
+msgstr "redeclaração de %s para %s"
 
-#: src/symtab.c:164
-#, fuzzy, c-format
+#: src/symtab.c:313
+#, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "redeclaração de %s para %s"
+msgstr "redeclaração de %s para <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "símbolo %s redefinido"
+msgid "symbol %s redeclared as a token"
+msgstr "símbolo %s redeclarado como um token"
 
-#: src/symtab.c:346
-#, fuzzy, c-format
-msgid "symbol %s redeclared"
-msgstr "símbolo %s redefinido"
-
-#: src/symtab.c:367
+#: src/symtab.c:326
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "redefinindo número de token de usuário de %s"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "símbolo %s redeclarado como um não-terminal"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"símbolo %s usado, mas não definido como uma token e não tem regras; você "
+"quis dizer %s?"
+
+#: src/symtab.c:380
 #, 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"
+msgstr "símbolo %s usado, mas não definido como uma token e não tem regras"
 
-#: src/symtab.c:415
-#, fuzzy, c-format
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc reserva %%type para não-terminais"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "símbolo %s redeclarado"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "não-terminais não podem ser fornecidos como um número explícito"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "redefinindo número de token de usuário de %s"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "número de token de usuário de %s grande demais"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "literal de strings %s não anexado a um símbolo"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s inútil para o tipo <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "tipo <%s> usado, mas associado a nenhum símbolo"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "não-terminais não podem ser fornecidos como um alias de string"
+
+#: src/symtab.c:698
+#, 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"
+msgstr "símbolo %s usado mais de uma vez como uma string literal"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "símbolo `%s' associado a mais de uma string literal"
+msgstr "símbolo %s associado a mais de uma string literal"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "redeclaração de tipo para %s"
+msgstr "token de usuário de número %d com redeclaração para %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "redeclaração de tipo para %s"
+msgstr "declaração anterior para %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "número de token grande demais"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr "o símbolo de início %s não está definido"
+msgstr "o símbolo de início %s não está definido"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr "o símbolo de início %s é um terminal"
+msgstr "o símbolo de início %s é um terminal"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "precedência e associatividade inúteis para %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "precedência inútil para %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "associatividade inútil para %s, use %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr ""
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "diretiva obsoleta, use %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr ""
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Categorias de aviso incluem:\n"
+#~ "  \"conflicts-sr\"      conflitos de desloc./redução (habilitado por "
+#~ "padrão)\n"
+#~ "  \"conflicts-rr\"      conflitos de redução/redução (habilitado por "
+#~ "padrão)\n"
+#~ "  \"deprecated\"        construtos obsoletos\n"
+#~ "  \"empty-rule\"        regras vazias sem %empty\n"
+#~ "  \"midrule-values\"    valores de midrule desconfigurados ou não usados\n"
+#~ "  \"precedence\"        precedência e associatividade inúteis\n"
+#~ "  \"yacc\"              incompatibilidades com POSIX Yacc\n"
+#~ "  \"other\"             todos os outros avisos (habilitado por padrão)\n"
+#~ "  \"all\"               todos os avisos, exceto \"yacc\"\n"
+#~ "  \"no-CATEGORIA\"      desliga aviso na CATEGORIA\n"
+#~ "  \"none\"              desliga todos os avisos\n"
+#~ "  \"error[=CATEGORIA]\" trata avisos como erros\n"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr ""
+#~ 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 itens básicos com seus\n"
+#~ "                   fechamentos\n"
+#~ "  \"lookahead\"    associa explicitamente as previsões com os itens\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"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr ""
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "RECURSOS é uma lista de palavras separadas por vírgula que pode incluir:\n"
+#~ "  \"caret\", \"diagnostics-show-caret\"\n"
+#~ "    mostra erros com o cursor\n"
+#~ "  \"fixit\", \"diagnostics-parseable-fixits\"\n"
+#~ "    mostra correções legíveis por máquina\n"
+#~ "  \"syntax-only\"\n"
+#~ "    não gera qualquer arquivo\n"
+#~ "  \"all\"\n"
+#~ "    todos acima\n"
+#~ "  \"none\"\n"
+#~ "    desabilita todos acima\n"
+#~ "  "
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr ""
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argumento inválido %s para %s"
 
-#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
-#, c-format
-msgid "opening of tmpfile failed"
-msgstr ""
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argumento ambíguo %s para %s"
 
-#: djgpp/subpipe.c:157
-#, c-format
-msgid "redirecting bison's stdout to the temporary file failed"
-msgstr ""
+#~ msgid "Valid arguments are:"
+#~ msgstr "Argumentos válidos são:"
 
-#: djgpp/subpipe.c:201
-#, c-format
-msgid "redirecting m4's stdin from the temporary file failed"
-msgstr ""
+#~ msgid "write error"
+#~ msgstr "erro de escrita"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr ""
+#~ msgid "Unknown system error"
+#~ msgstr "Erro desconhecido de sistema"
 
-#: djgpp/subpipe.c:218
-#, c-format
-msgid "redirecting m4's stdout to a temporary file failed"
-msgstr ""
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: a opção \"%s%s\" é ambígua\n"
 
-#: djgpp/subpipe.c:234
-#, fuzzy, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "programa subsidiário `%s' falhou"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:"
 
-#: djgpp/subpipe.c:241
-#, fuzzy, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "programa subsidiário `%s' não foi encontrado"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opção desconhecida \"%s%s\"\n"
 
-#: djgpp/subpipe.c:265
-#, c-format
-msgid "redirecting bison's stdin from the temporary file failed"
-msgstr ""
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"%s%s\" não permite um argumento\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "argumento %s inválido para %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: a opção \"%s%s\" exige um argumento\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "argumento %s ambíguo para %s"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: opção inválida -- \"%c\"\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Argumentos válidos são:"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: a opção exige um argumento -- \"%c\"\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
+#~ msgid "memory exhausted"
+#~ msgstr "memória esgotada"
 
-#: lib/bitset_stats.c:180
-#, c-format
-msgid "%u bitset_sets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "não foi possível criar redirecionamento"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u em cache (%.2f%%)\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "subprocesso %s falhou"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
+#~ msgid "`"
+#~ msgstr "“"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "'"
+#~ msgstr "”"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "histograma de log de contagens\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Tempos de execução (segundos)"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "histograma de log de tamanhos\n"
+#~ msgid "CPU user"
+#~ msgstr "CPU usuário"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "histograma de densidades\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU sistema"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Estatísticas de bitset:\n"
-"\n"
+#~ msgid "wall clock"
+#~ msgstr "relógio de parede"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Execuções acumuladas = %u\n"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle falhou"
 
-#: 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."
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "não foi possível restaurar o descritor de arquivo %d: dup2 falhou"
 
-#: lib/bitset_stats.c:261
-#, fuzzy, c-format
-msgid "bad stats file size\n"
-msgstr "Tamanho do arquivo de estatísticas com erro.\n"
+#~ msgid "%s subprocess"
+#~ msgstr "subprocesso %s"
 
-#: 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."
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "o subprocesso %s recebeu sinal fatal %d"
 
-#: lib/bitset_stats.c:292
-#, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Impossível abrir arquivo de estatísticas para escrita."
+#~ msgid "symbol %s redefined"
+#~ msgstr "símbolo %s redefinido"
 
-#: lib/closeout.c:112
-#, fuzzy
-msgid "write error"
-msgstr "erro fatal: "
+#~ msgid "removing of '%s' failed"
+#~ msgstr "falha ao remover \"%s\""
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Erro de sistema desconhecido"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "falha ao criar um arquivo temporário"
 
-#: 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"
+#~ msgid "saving stdin failed"
+#~ msgstr "falha ao salvar da entrada padrão"
 
-#: 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"
+#~ msgid "saving stdout failed"
+#~ msgstr "falha ao salvar para a saída padrão"
 
-#: 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"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "falha ao abrir o arquivo temporário (tmpfile)"
 
-#: 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"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "falha ao redirecionar saída padrão do bison para o arquivo temporário"
 
-#: 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"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "falha ao redirecionar entrada padrão do m4 do arquivo temporário"
 
-#: 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"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "falha ao abrir um arquivo temporário"
 
-#: 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"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "falha ao redirecionar a saída padrão do m4 para um arquivo temporário"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "programa subsidiário \"%s\" interrompido"
 
-#: 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"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "programa subsidiário \"%s\" não encontrado"
 
-#: 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"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "falha ao redirecionar a entrada padrão do bison do arquivo temporário"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u liberados (%.2f%%).\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memória esgotada"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u em cache (%.2f%%)\n"
 
-#: 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"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u em cache (%.2f%%)\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 ""
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u em cache (%.2f%%)\n"
 
-#. 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 "`"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "count log histogram\n"
+#~ msgstr "histograma de log de contagens\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Tempos de execução (segundos)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "histograma de log de tamanhos\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTAL                 :"
+#~ msgid "density histogram\n"
+#~ msgstr "histograma de densidades\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "tempo em  %s: %ld.%06ld (%ld%%)\n"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Estatísticas de bitset:\n"
+#~ "\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Execuções acumuladas = %u\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid "cannot read stats file"
+#~ msgstr "não foi possível ler o arquivo de estatística"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "bad stats file size\n"
+#~ msgstr "tamanho de arquivo de estatística incorreto\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#~ msgid "cannot write stats file"
+#~ msgstr "não foi possível escrever no arquivo de estatística"
 
-#~ msgid "state %d"
-#~ msgstr "estado %d"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "não foi possível abrir arquivo de estado para escrita"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "tempo em %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " tipo %d é %s\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção desconhecida \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" não permite argumentos\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "valor $ inválido: $%d"
+
+#~ msgid "error de E/S"
+#~ msgstr "erro de E/S"
 
 #~ 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"
+#~ 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"
+#~ "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 ""
@@ -1164,31 +1441,37 @@
 #~ "  -V, --version   output version information and exit\n"
 #~ "  -y, --yacc      emulate POSIX yacc\n"
 #~ msgstr ""
-#~ "Modos de operação:\n"
+#~ "Modos de operação:\n"
 #~ "  -h, --help      exibe esta ajuda e sai\n"
-#~ "  -V, --version   mostra informações de versão e sai\n"
+#~ "  -V, --version   mostra informações de versão e sai\n"
 #~ "  -y, --yacc      emula o yacc POSIX\n"
 
+#~ msgid "empty"
+#~ msgstr "vazio"
+
 #~ msgid "POSIX forbids declarations in the grammar"
-#~ msgstr "o POSIX proíbe declarações na gramática"
+#~ msgstr "o POSIX proíbe declarações na gramática"
+
+#~ msgid "state %d"
+#~ msgstr "estado %d"
 
 #~ msgid "Rules never reduced"
 #~ msgstr "Regras nunca reduzidas"
 
 #~ msgid "useless rule"
-#~ msgstr "regra inútil"
+#~ msgstr "regra inútil"
 
 #~ msgid "useless nonterminal: %s"
-#~ msgstr "não-terminal inútil: %s"
+#~ msgstr "não-terminal inútil: %s"
 
 #~ msgid "Useless nonterminals"
-#~ msgstr "Não-terminais inúteis"
+#~ msgstr "Não-terminais inúteis"
 
 #~ msgid "Terminals which are not used"
-#~ msgstr "Terminais que não foram usados"
+#~ msgstr "Terminais que não foram usados"
 
 #~ msgid "Useless rules"
-#~ msgstr "Regras inúteis"
+#~ msgstr "Regras inúteis"
 
 #~ msgid "%d rule never reduced\n"
 #~ msgid_plural "%d rules never reduced\n"
@@ -1197,40 +1480,37 @@
 
 #~ 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"
+#~ 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"
+#~ 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"
+#~ 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"
+#~ 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"
+#~ msgstr "tokens %s e %s associadas ao mesmo número %d"
 
 #~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s: opção -- %c ilegal\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"
+#~ 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)"
+#~ msgstr "programa subsidiário `%s' falhou (estado de saída %d)"
diff --git a/po/ro.gmo b/po/ro.gmo
index 5f4a906..17cc3bb 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 5ee6027..9302aae 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -1,6 +1,6 @@
-# Mesajele în limba românã pentru GNU Bison.
+# 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.
+# Acest fişier este distribuit sub aceeaşi licenţă ca şi pachetul bison.
 # Laurentiu Buzdugan <lbuz@rolix.org>, 2003,2004,2005.
 #
 #
@@ -9,256 +9,415 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr ""
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "avertisment"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 #, fuzzy
 msgid "error"
 msgstr "Eroare I/O"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 #, fuzzy
 msgid "fatal error"
-msgstr "eroare fatalã: "
+msgstr "eroare fatală: "
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
 msgstr ""
-"    Conflict între regula %d ºi elementul (token) %s rezolvat ca reduce"
 
-#: src/conflicts.c:94
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "directivă invalidă: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "directivă invalidă: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "directivă invalidă: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, fuzzy, c-format
+msgid "previous declaration"
+msgstr "prima declaraţie"
+
+#: src/complain.c:585
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
+msgid "only one %s allowed per rule"
+msgstr "un singur %s permis pe fiecare regulă"
+
+#: src/conflicts.c:81
+#, fuzzy, 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:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
 msgstr ""
-"    Conflict între regula %d ºi elementul (token) %s rezolvat ca eroare"
+"    Conflict între regula %d şi elementul (token) %s rezolvat ca reduce"
 
-#: 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:100
+#, fuzzy, 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: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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Stare %d"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "conflicte: %d shift/reduce, %d reduce/reduce\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "conflicte: %d shift/reduce\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "conflicte: %d reduce/reduce\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%% expect-rr poate fi folosit numai pentru parsere GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr ""
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
+#, fuzzy, c-format
+msgid "%d shift/reduce conflict"
+msgid_plural "%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:708
 #, 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"
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
 
-#: src/files.c:114
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%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:124
 #, fuzzy, c-format
 msgid "%s: cannot open"
-msgstr "nu am putut deschide fiºierul `%s'"
+msgstr "nu am putut deschide fişierul `%s'"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "nu pot închide fiºierul"
+msgstr "nu pot închide fişierul"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr ""
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr "ieºiri în conflict în fiºierul %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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "nu am putut deschide fişierul `%s'"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Folosire: %s [OPÞIUNE]... FIªIER\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "am aşteptat %d conflict shift/reduce"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Încercaţi `%s --help' pentru informaţii suplimentare.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Folosire: %s [OPŢIUNE]... FIŞIER\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr ""
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -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"
+"  -n, --no-parser            generează numai tabelele\n"
 "  -k, --token-table          include un tabel cu nume de elemente\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"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"
+"  -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
+#: src/getargs.c:436
 #, fuzzy, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr "Raportaþi bug-uri la <bug-bison@gnu.org>.\n"
+msgstr "Raportaţi bug-uri la <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -267,73 +426,74 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
-msgstr "Scris de Robert Corbett ºi Richard Stallman.\n"
+msgstr "Scris de Robert Corbett şi Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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 "
+"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 "
+"Nu există nici o garanţie; nici chiar pentru COMERCIALIZARE sau de "
 "POTRIVIRE\n"
 "PENTRU UN SCOP ANUME.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, fuzzy, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "declaraþii %s multiple"
+msgstr "declaraţii %s multiple"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
-msgstr "valoare invalidã: %s"
+msgstr "valoare $ invalidă"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 #, fuzzy
 msgid "multiple language declarations are invalid"
-msgstr "declaraþii %s multiple"
+msgstr "declaraţii %s multiple"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "operator lipsã dupã `%s'"
+msgid "deprecated option: %s, use %s"
+msgstr "directivă invalidă: %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
+msgstr "operator lipsă după `%s'"
+
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
 msgstr "extra operator `%s'"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "goleºte"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
-msgstr "Gramaticã"
+msgstr "Gramatică"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -342,829 +502,843 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr ""
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr ""
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr ""
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 #, fuzzy
 msgid "rule useless in parser due to conflicts"
-msgstr "regula nu este redusã niciodatã din cauza conflictelor"
+msgstr "regula nu este redusă niciodată din cauza conflictelor"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
 msgstr "simbol %s redefinit"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr ""
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "simbol %s redefinit"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "simbol %s redefinit"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "simbol %s redefinit"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr ""
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
-msgstr "valoare invalidã: %s"
+msgstr "valoare invalidă: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "numărul elementului (token) definit de utilizator redefinit pentru %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "identificator lipsã în declaraþia parametrului"
+msgstr "identificator lipsă în declaraţia parametrului"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "secvenţă escape invalidă: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tipul %d este %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, fuzzy, c-format
 msgid "State %d"
 msgstr "Stare %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "shift, şi mergi în starea %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "mergi în starea %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "eroare (ne-asociativitate)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reduce folosind regula %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "accept"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$implicit"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminale, cu reguli acolo unde acestea apar"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+#, fuzzy
+msgid "on left:"
+msgstr " pe stânga:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " pe dreapta:"
 
-#: src/print.c:510
+#: src/print.c:447
 #, fuzzy
 msgid "Rules useless in parser due to conflicts"
-msgstr "regula nu este redusã niciodatã din cauza conflictelor"
+msgstr "regula nu este redusă niciodată din cauza conflictelor"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr "declaraþii %s multiple"
+msgstr "declaraţii %s multiple"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, 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>"
+"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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "regula datã pentru %s, care este un element (token)"
+msgstr "regula dată pentru %s, care este un element (token)"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "conflict de tip pentru acþiunea implicitã: <%s> != <%s>"
+msgstr "conflict de tip pentru acţiunea implicită: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr "regulã vidã pentru nonterminal cu tip, ºi nici o acþiune"
+msgstr "regulă vidă pentru nonterminal cu tip, şi nici o acţiune"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, fuzzy, c-format
 msgid "unused value: $%d"
-msgstr "valoare invalidã: %s"
+msgstr "valoare invalidă: %s"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr ""
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
 msgstr ""
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "un singur %s permis pe fiecare regulã"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr "%s afecteazã numai parsere GLR"
+msgstr "%s afectează numai parsere GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s trebuie sã fie urmat de numere pozitive"
+msgstr "%s trebuie să fie urmat de numere pozitive"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr ""
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
-msgstr "nici o regulã în gramatica furnizatã"
+msgstr "nici o regulă în gramatica furnizată"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 #, fuzzy
 msgid "rule useless in grammar"
-msgstr "nici o regulã în gramatica furnizatã"
+msgstr "nici o regulă în gramatica furnizată"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr ""
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 #, fuzzy
 msgid "Nonterminals useless in grammar"
 msgstr "Non-terminale, cu reguli acolo unde acestea apar"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 #, fuzzy
 msgid "Terminals unused in grammar"
-msgstr "nici o regulã în gramatica furnizatã"
+msgstr "nici o regulă în gramatica furnizată"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 #, fuzzy
 msgid "Rules useless in grammar"
-msgstr "nici o regulã în gramatica furnizatã"
+msgstr "nici o regulă în gramatica furnizată"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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ã"
+msgstr[0] "nici o regulă în gramatica furnizată"
+msgstr[1] "nici o regulă în gramatica furnizată"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "simbol de start %s nu deriveazã nici o propoziþie"
+msgstr "simbol de start %s nu derivează nici o propoziţie"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "întreg în afara domeniului: %s"
+msgstr "întreg în afara domeniului: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
-msgstr "directivã invalidã: %s"
+msgstr "directivă invalidă: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr ""
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
 msgstr "argument ambiguu %s pentru %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr ""
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, 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
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
-msgstr "Virgulã `,' rãtãcitã tratatã ca spaþiu gol"
+msgstr "Virgulă `,' rătăcită tratată ca spaţiu gol"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "directivã invalidã: %s"
+msgstr "directivă invalidă: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
-msgstr "directivã invalidã: %s"
+msgstr "directivă invalidă: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, fuzzy
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "caracter invalid: %s"
 msgstr[1] "caracter invalid: %s"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "caracter null invalid"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr ""
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 #, 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, fuzzy, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "caracter null invalid: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, fuzzy, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "caracter invalid: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
-msgstr "`%s' lipsã la sfârºitul fiºierului"
+msgstr "`%s' lipsă la sfârşitul fişierului"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, fuzzy, c-format
 msgid "missing %s at end of line"
-msgstr "`%s' lipsã la sfârºitul liniei"
+msgstr "`%s' lipsă la sfârşitul liniei"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "prea multe simboluri în gramatica de intrare (limita este %d)"
+msgstr "prea multe simboluri în gramatica de intrare (limita este %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "redeclarare %s pentru %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, fuzzy, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "redeclarare %s pentru %s"
 
-#: src/symtab.c:332
-#, c-format
-msgid "symbol %s redefined"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 msgstr "simbol %s redefinit"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "%d nonterminal fără rost"
+
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"simbolul %s e folosit, dar nu este definit ca element (token) şi nu are nici "
+"o regulă"
+
+#: src/symtab.c:380
+#, 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:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
 #, fuzzy, c-format
 msgid "symbol %s redeclared"
 msgstr "simbol %s redefinit"
 
-#: src/symtab.c:367
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
 #, c-format
 msgid "redefining user token number of %s"
-msgstr "numãrul elementului (token) definit de utilizator redefinit pentru %s"
+msgstr "numărul elementului (token) definit de utilizator redefinit pentru %s"
 
-#: src/symtab.c:395
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "numărul elementului (token) definit de utilizator redefinit pentru %s"
+
+#: src/symtab.c:617
 #, c-format
-msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgid "string literal %s not attached to a symbol"
 msgstr ""
-"simbolul %s e folosit, dar nu este definit ca element (token) ºi nu are nici "
-"o regulã"
 
-#: src/symtab.c:415
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr ""
+"simbolul %s e folosit, dar nu este definit ca element (token) şi nu are nici "
+"o regulă"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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"
+msgstr "simbolul `%s' este folosit de mai multe ori ca şir literar"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, 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"
+msgstr "simbolului `%s' îi este dat mai mult de un singur şir literar"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, fuzzy, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "redeclarare %s pentru %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, fuzzy, c-format
 msgid "previous declaration for %s"
 msgstr "redeclarare %s pentru %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "simbolul de start %s nu este definit"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "simbolul de start %s este un element (token)"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
+msgid "useless precedence and associativity for %s"
 msgstr ""
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
+msgid "useless precedence for %s"
 msgstr ""
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
+msgid "useless associativity for %s, use %%precedence"
 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."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "Non-terminale, cu reguli acolo unde acestea apar"
 
-#: 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."
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "directivă invalidă: %s"
 
-#: lib/bitset_stats.c:292
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Nu am putut deschide fiºierul de statistici pentru scriere."
+#~ 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"
 
-#: lib/closeout.c:112
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "argument invalid %s pentru %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "argument ambiguu %s pentru %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Argumente valide sunt:"
+
 #, fuzzy
-msgid "write error"
-msgstr "eroare fatalã: "
+#~| msgid "syntax error"
+#~ msgid "write error"
+#~ msgstr "eroare de sintaxă"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Eroare de sistem necunoscutã"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ 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"
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: opţiunea `%s' este ambiguă\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"
+#, fuzzy
+#~| msgid "%s: unrecognized option `%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: opţiune nerecunoscută `%c%s'\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"
+#, fuzzy
+#~| msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: opţiunea `%c%s' nu permite 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"
+#, fuzzy
+#~| msgid "%s: option `%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: opţiunea `%s' necesită un argument\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"
+#, fuzzy
+#~| msgid "%s: invalid option -- %c\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: opţiune ilegală -- %c\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"
+#, fuzzy
+#~| msgid "%s: option requires an argument -- %c\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: opţiunea necesită un argument -- %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"
+#~ msgid "memory exhausted"
+#~ msgstr "memorie epuizată"
 
-#: 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"
+#, fuzzy
+#~| msgid "cannot close file"
+#~ msgid "cannot create pipe"
+#~ msgstr "nu pot închide fişierul"
 
-#: 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"
+#~ msgid "`"
+#~ msgstr "`"
 
-#: 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"
+#~ msgid "'"
+#~ msgstr "'"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "memorie epuizatã"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Timp de execuţie (secunde)\n"
 
-#: 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"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u eliberate (%.2f%%).\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 ""
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u stocate (cached) (%.2f%%)\n"
 
-#. 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 "`"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u stocate (cached) (%.2f%%)\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u stocate (cached) (%.2f%%)\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Timp de execuþie (secunde)\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOTAL                 :"
+#~ msgid "count log histogram\n"
+#~ msgstr "numără histograma jurnal\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "timp în %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "dimensiune histogramă jurnal\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "density histogram\n"
+#~ msgstr "densitate histogramă\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Statistici bitset:\n"
+#~ "\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Rulări acumulate = %u\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#, fuzzy
+#~| msgid "Could not read stats file."
+#~ msgid "cannot read stats file"
+#~ msgstr "Nu am putut citi fişierul de statistici."
 
-#~ msgid "state %d"
-#~ msgstr "stare %d"
+#, fuzzy
+#~| msgid "Bad stats file size.\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "Dimensiune fişier cu statistici incorectă.\n"
+
+#, fuzzy
+#~| msgid "Could not write stats file."
+#~ msgid "cannot write stats file"
+#~ msgstr "Nu am putut scrie fişier statistici."
+
+#, fuzzy
+#~| msgid "Could not open stats file for writing."
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Nu am putut deschide fişierul de statistici pentru scriere."
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "`%s' lipsă la sfârşitul fişierului"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "[identifier]"
+#~ msgstr "directivă invalidă: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier"
+#~ msgstr "directivă invalidă: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier:"
+#~ msgstr "directivă invalidă: %s"
+
+#, fuzzy
+#~| msgid "symbol %s redefined"
+#~ msgid "symbol %s redefined"
+#~ msgstr "simbol %s redefinit"
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "saving stdout failed"
+#~ msgstr "`%s' lipsă la sfârşitul fişierului"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' failed"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "programul auxiliar `%s' a eşuat"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' not found"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "programul auxiliar `%s' nu a fost găsit"
 
 #~ msgid "warning: "
 #~ msgstr "avertisment: "
 
 #~ msgid "GNU bison generates parsers for LALR(1) grammars.\n"
-#~ msgstr "GNU bison genereazã parsere pentru gramatici LALR(1).\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 "
+#~ "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"
+#~ "şi pentru opţiunea scurtă echivalentă. Similar pentru argumentele "
+#~ "opţionale.\n"
 
 #~ msgid ""
 #~ "Operation modes:\n"
@@ -1173,63 +1347,63 @@
 #~ "  -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"
+#~ "  -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 "empty"
+#~ msgstr "goleşte"
 
 #~ msgid "syntax error: cannot back up"
-#~ msgstr "eroare de sintaxã: nu pot da înapoi"
+#~ msgstr "eroare de sintaxă: nu pot da înapoi"
 
 #~ msgid "Stack now"
-#~ msgstr "Stiva curentã"
+#~ msgstr "Stiva curentă"
 
 #~ msgid "Reducing stack by rule %d (line %u), "
-#~ msgstr "Stivã redusã folosind regula %d (linia %u), "
+#~ msgstr "Stivă redusă folosind regula %d (linia %u), "
 
 #~ msgid "parser stack overflow"
-#~ msgstr "depãsire de stivã pentru parser"
+#~ msgstr "depăsire de stivă pentru parser"
 
 #~ msgid "Stack size increased to %lu\n"
-#~ msgstr "Dimensiune stivei crescutã la %lu\n"
+#~ msgstr "Dimensiune stivei crescută la %lu\n"
 
 #~ msgid "Entering state %d\n"
-#~ msgstr "Intru în starea %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"
+#~ msgstr "Acum la sfârşitul intrării.\n"
 
 #~ msgid "Next token is"
-#~ msgstr "Urmãtorul element (token) este"
+#~ 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ã"
+#~ msgstr "POSIX interzice declaraţii în gramatică"
 
 #~ msgid "syntax error, unexpected %s"
-#~ msgstr "eroare de sintaxã, %s neaºteptat"
+#~ msgstr "eroare de sintaxă, %s neaşteptat"
 
 #~ msgid "syntax error, unexpected %s, expecting %s"
-#~ msgstr "eroare de sintaxã, %s neaºteptat, aºtept %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"
+#~ 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"
+#~ 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"
+#~ 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ã"
+#~ msgstr "eroare de sintaxă şi memorie epuizată"
 
 #~ msgid "Error: discarding"
 #~ msgstr "Eroare: elimin"
@@ -1240,63 +1414,76 @@
 #~ msgid "Error: discarding lookahead"
 #~ msgstr "Eroare: elimin lookahead"
 
+#~ msgid " type %d is %s\n"
+#~ msgstr " tipul %d este %s\n"
+
+#~ msgid "state %d"
+#~ msgstr "stare %d"
+
 #~ msgid "Rules never reduced"
 #~ msgstr "Regulile nu au fost reduse"
 
 #~ msgid "useless rule"
-#~ msgstr "regulã fãrã rost"
+#~ msgstr "regulă fără rost"
 
 #~ msgid "useless nonterminal: %s"
-#~ msgstr "nonterminal fãrã rost: %s"
+#~ msgstr "nonterminal fără rost: %s"
 
 #~ msgid "Useless nonterminals"
-#~ msgstr "Nonterminale fãrã rost"
+#~ 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"
+#~ 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"
+#~ msgstr[0] "%d regulă niciodată redusă\n"
+#~ msgstr[1] "%d reguli niciodată reduse\n"
 
 #~ msgid " and "
-#~ msgstr " ºi "
+#~ 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"
+#~ msgstr[0] "%d regulă fără rost"
+#~ msgstr[1] "%d reguli fără rost"
 
 #~ msgid "unrecognized escape sequence: %s"
-#~ msgstr "secvenþã escape nerecunoscutã: %s"
+#~ msgstr "secvenţă escape nerecunoscută: %s"
 
 #~ msgid "missing `{' in `%s'"
-#~ msgstr "`{' lipsã în `%s'"
-
-#~ msgid "invalid $ value"
-#~ msgstr "valoare $ invalidã"
+#~ msgstr "`{' lipsă în `%s'"
 
 #~ msgid "tokens %s and %s both assigned number %d"
 #~ msgstr ""
-#~ "ambelor elementele (tokens) %s ºi %s le sunt alocate acelaºi numãr %d"
+#~ "ambelor elementele (tokens) %s şi %s le sunt alocate acelaşi număr %d"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: opţiunea `--%s' nu permite un argument\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: opţiune nerecunoscută `--%s'\n"
 
 #~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s: opþiune ilegalã -- %c\n"
+#~ msgstr "%s: opţiune ilegală -- %c\n"
+
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: opţiunea `-W %s' este ambiguă\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: opţiunea `-W %s' nu permite un argument\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)"
+#~ msgstr "programul auxiliar `%s' a eşuat (stare de terminare %d)"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOTAL                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "timp în %s: %ld.%06ld (%ld%%)\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index da33f07..57ab65e 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 23a211c..7efd8f1 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -10,152 +10,345 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr ""
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "переопределение приоритета для %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "предупреждение"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 #, fuzzy
 msgid "error"
 msgstr "ошибка ввода-вывода"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "фатальная ошибка"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, fuzzy, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "неверная директива: %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "неверная директива: %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "неверная директива: %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "предыдущее описание"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "только одно %s разрешено на правило"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Состояние %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "конфликты: %d сдвига/вывода, %d вывода/вывода\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "конфликты: %d сдвига/вывода\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "конфликты: %d вывода/вывода\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "%d конфликт сдвига/вывода"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "%d конфликт сдвига/вывода"
+
+#: src/conflicts.c:669
 #, 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:686
+#, fuzzy, c-format
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "%d конфликт сдвига/вывода"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d конфликт сдвига/вывода"
+msgstr[1] "%d конфликта сдвига/вывода"
+msgstr[2] "%d конфликтов сдвига/вывода"
+
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr ""
+
+#: src/conflicts.c:713
+#, fuzzy, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "ожидался %d конфликт вывода/вывода"
 msgstr[1] "ожидалось %d конфликта вывода/вывода"
 msgstr[2] "ожидалось %d конфликтов вывода/вывода"
 
-#: src/files.c:114
+#: src/files.c:124
 #, fuzzy, c-format
 msgid "%s: cannot open"
 msgstr "не удается открыть файл «%s»"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr ""
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "не удается закрыть файл"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "отказ перезаписи входного файла %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "конфликт вывода в файл %s"
 
-#: src/getargs.c:292
-#, c-format
-msgid "Try `%s --help' for more information.\n"
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "не удается открыть файл «%s»"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d конфликт сдвига/вывода"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, fuzzy, c-format
+msgid "Try '%s --help' for more information.\n"
 msgstr "Используйте «%s --help» для дополнительной информации.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Использование: %s [КЛЮЧИ]... ФАЙЛ\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr "Соответствующие длянные опции также соответствуют и коротким опциям.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "То-же допустимо для опциональных параметров.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -170,20 +363,31 @@
 "КАТЕГОРИЕЙ\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Анализатор:\n"
 "  -L, --language=ЯЗЫК        указать выходной язык программирования\n"
@@ -196,21 +400,20 @@
 "  -k, --token-table          включить таблицу имен лексем\n"
 "\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -226,70 +429,19 @@
 "                             (сценарий 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
+#: src/getargs.c:436
 #, fuzzy, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr ""
 "\n"
 "Ошибки сообщайте по адресу <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr ""
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 
@@ -298,29 +450,29 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Авторы: Роберт Корбет и Ричард Столмен.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -331,39 +483,40 @@
 "ПРИГОДНОСТИ\n"
 "ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "множественные описания скелета не применимо"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, fuzzy, c-format
 msgid "%s: invalid language"
 msgstr "недопустимый язык «%s»"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "множественные описания языка не применимо"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
+msgid "deprecated option: %s, use %s"
+msgstr "неверная директива: %s"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "после «%s» пропущен операнд"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, fuzzy, c-format
 msgid "extra operand %s"
 msgstr "лишний операнд «%s»"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "пусто"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Грамматика"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -372,213 +525,277 @@
 "\n"
 msgstr ""
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "переполнение номера строки"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "переполнение номера столбца"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "переполнение номера строки"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "правило не применимо в парсере из-за конфликтов"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, fuzzy, c-format
 msgid "%%define variable %s redefined"
 msgstr "повторное определение символа %s"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, fuzzy, c-format
 msgid "previous definition"
 msgstr "предыдущее описание"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "повторное определение символа %s"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "повторное определение символа %s"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "повторное определение символа %s"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr ""
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr ""
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, fuzzy, c-format
 msgid "accepted value: %s"
 msgstr "неиспользуемая переменная: $%d"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "переопределение номера лексемы пользователя для %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "в описании параметра отсутствует идентификатор"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "недопустимая экранирующая последовательность: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " тип %d является %s\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, fuzzy, c-format
 msgid "State %d"
 msgstr "Состояние %d "
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "сдвиг, и переход в состояние %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "переход в состояние %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "ошибка (неассоциативная)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "вывод с использованием правила %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "принять"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Терминальные символы с правилами, в которых они появляются"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Нетерминальные символы с правилами, в которых они появляются"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " налево:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " направо:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Правило не применимо в парсере из-за конфликтов"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "множественное описание %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr ""
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "правило задано для %s, который является лексемой"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "конфликт типов на действии по умолчанию: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr ""
 "пустое правило для типизированного нетерминального символа, и нет действия"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "неиспользуемая переменная: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "неуказанное значение: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr ""
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr ""
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
 msgstr ""
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "только одно %s разрешено на правило"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s влияет только на GLR парсеры"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "за %s должно следовать положительное число"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "слишком длинное правило"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "отсутствуют правила во входной грамматике"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "бесполезное правило в грамматике"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "нетерминал бесполезен в грамматике: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Нетерминал бесполезен в грамматике"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Терминалы не используются в грамматике"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Правила не используются в грамматике"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -586,7 +803,7 @@
 msgstr[1] "%d нетерминала бесполезно в грамматике"
 msgstr[2] "%d нетерминалов бесполезно в грамматике"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -594,125 +811,117 @@
 msgstr[1] "%d правила бесполезно в грамматике"
 msgstr[2] "%d правила бесполезно в грамматике"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "начальный символ %s не выводит ни одного предложения"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr ""
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr ""
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ""
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr ""
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ""
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "выход за границы диапазона целого: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, fuzzy, c-format
 msgid "invalid reference: %s"
 msgstr "неверная директива: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr ""
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr ""
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, fuzzy, c-format
 msgid "misleading reference: %s"
 msgstr "переопределение приоритета для %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, fuzzy, c-format
 msgid "ambiguous reference: %s"
 msgstr "неоднозначный аргумент %s для %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "указан тип в нетипизированной грамматике"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, fuzzy, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
 msgstr "$$ для правила $%d из «%s» не имеет описанного типа"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, fuzzy, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ в «%s» не имеет описанного типа"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, fuzzy, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%d из «%s» не имеет описанного типа"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, fuzzy, c-format
 msgid "stray ',' treated as white space"
 msgstr "лишняя «,» считается пробелом"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "неверная директива: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, fuzzy, c-format
 msgid "invalid identifier: %s"
 msgstr "неверная директива: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 #, fuzzy
 msgid "invalid character"
 msgid_plural "invalid characters"
@@ -720,17 +929,22 @@
 msgstr[1] "недопустимый символ: %s"
 msgstr[2] "недопустимый символ: %s"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "недопустимый нулевой символ"
+
+#: src/scan-gram.l:437
 #, fuzzy, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "неожиданный элемент: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr ""
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 #, fuzzy
 msgid "invalid character in bracketed name"
 msgid_plural "invalid characters in bracketed name"
@@ -738,448 +952,428 @@
 msgstr[1] "недопустимый символ: %s"
 msgstr[2] "недопустимый символ: %s"
 
-#: src/scan-gram.l:481 src/scan-gram.l:502
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr ""
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, fuzzy, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "недопустимый нулевой символ: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, fuzzy, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "недопустимый символ: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, fuzzy, c-format
 msgid "missing %s at end of file"
 msgstr "отсутствует «%s» в конце файла"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, fuzzy, c-format
 msgid "missing %s at end of line"
 msgstr "отсутствует «%s» в конце строки"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr ""
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr ""
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "слишком много символов во входящей грамматике (максимально %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "повторное описание %s для %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 msgstr "переопределение символа %s"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "переопределение номера лексемы пользователя для %s"
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "переопределение символа %s"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "символ %s используется, но не определен как лексема и не имеет правил"
+
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
 msgstr "символ %s используется, но не определен как лексема и не имеет правил"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "переопределение символа %s"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "переопределение номера лексемы пользователя для %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "переопределение номера лексемы пользователя для %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr ""
+
+#: src/symtab.c:650
+#, fuzzy, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "символ %s используется, но не определен как лексема и не имеет правил"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, fuzzy, c-format
 msgid "symbol %s used more than once as a literal string"
 msgstr "символ «%s» используется более одного раза как строка литерала"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, fuzzy, c-format
 msgid "symbol %s given more than one literal string"
 msgstr "символ «%s» указан более одной строки литерала"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, fuzzy, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "повторное описание типа для %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, fuzzy, c-format
 msgid "previous declaration for %s"
 msgstr "предыдущее описание"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "начальный символ %s не определен"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "начальный символ %s является лексемой"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, 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"
+msgid "useless precedence and associativity for %s"
 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
+#: src/symtab.c:1297
 #, fuzzy, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "вспомогательная программа `%s' завершилась неудачно"
+msgid "useless precedence for %s"
+msgstr "переопределение приоритета для %s"
 
-#: djgpp/subpipe.c:241
-#, fuzzy, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "вспомогательная программа `%s' не найдена"
-
-#: djgpp/subpipe.c:265
+#: src/symtab.c:1301
 #, c-format
-msgid "redirecting bison's stdin from the temporary file failed"
+msgid "useless associativity for %s, use %%precedence"
 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 "eliminate useless chain rules"
+#~ msgstr "нетерминал бесполезен в грамматике: %s"
+
+#, fuzzy
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "неверная директива: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Категории предупреждения включают:\n"
+#~ "  «midrule-values»  неназначенные или неиспользуемые значения в правилах\n"
+#~ "  «yacc»            несовместимости с POSIX YACC\n"
+#~ "  «all»             все предупреждения\n"
+#~ "  «no-КАТЕГОРИЯ»    выключить предупреждения в КАТЕГОРИЯ\n"
+#~ "  «none»            выключить все предупреждения\n"
+#~ "  «error»           воспринимать все предупреждения как ошибки\n"
+#~ "\n"
+
+#, 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 ""
+#~ "ВЕЩИ - это список разделенных запятой слов, который может включать:\n"
+#~ "  «state»        описать состояния\n"
+#~ "  «itemset»      полный набор основных элементов вместе с их соседями\n"
+#~ "  «look-ahead»   точные соответствия следующих токенов элементам\n"
+#~ "  «solved»       описание решения конфликтов сдвига/вывода\n"
+#~ "  «all»          включить всю эту информацию\n"
+#~ "  «none»         отключить отчет\n"
+
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "недопустимый аргумент %s для %s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "неоднозначный аргумент %s для %s"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Допустимые аргументы:"
+
+#, fuzzy
+#~| msgid "fatal error"
+#~ msgid "write error"
+#~ msgstr "фатальная ошибка"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Неизвестная системная ошибка"
+
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: неоднозначный ключ «%s»\n"
+
+#, fuzzy
+#~| msgid "%s: option `%s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: неоднозначный ключ «%s»\n"
+
+#, fuzzy
+#~| msgid "%s: unrecognized option `%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: неизвестный ключ «%c%s»\n"
+
+#, fuzzy
+#~| msgid "%s: option `%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: ключ «%c%s» должен использоваться без аргумента\n"
+
+#, fuzzy
+#~| msgid "%s: option `%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: ключ «%s» должен использоваться с аргументом\n"
+
+#, fuzzy
+#~| msgid "%s: invalid option -- %c\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: неверный ключ -- %c\n"
+
+#, fuzzy
+#~| msgid "%s: option requires an argument -- %c\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: ключ должен использоваться с аргументом -- %c\n"
+
+#~ msgid "memory exhausted"
+#~ msgstr "память исчерпана"
+
+#, fuzzy
+#~| msgid "cannot close file"
+#~ msgid "cannot create pipe"
+#~ msgstr "не удается закрыть файл"
+
+#~ msgid "`"
+#~ msgstr "«"
+
+#~ msgid "'"
+#~ msgstr "»"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Время выполнения (сек.)\n"
+
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u освобождено (%.2f%%).\n"
+
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u кэшировано (%.2f%%)\n"
+
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
+
+#~ msgid "count log histogram\n"
+#~ msgstr "посчитать гистограмму журнала\n"
+
+#~ msgid "size log histogram\n"
+#~ msgstr "гистограмма размера журнала\n"
+
+#~ msgid "density histogram\n"
+#~ msgstr "гистограмма плотности\n"
+
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Статистика bitset:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Накоплено запусков = %u\n"
+
+#, fuzzy
+#~| msgid "Could not read stats file."
+#~ msgid "cannot read stats file"
+#~ msgstr "Не удается прочитать файл статистики."
+
+#, fuzzy
+#~| msgid "Bad stats file size.\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "Неверный размер файла статистики.\n"
+
+#, fuzzy
+#~| msgid "Could not write stats file."
+#~ msgid "cannot write stats file"
+#~ msgstr "Не удается записать в файл статистики."
+
+#, fuzzy
+#~| msgid "Could not open stats file for writing."
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "Не удается открыть файл статистики для записи."
+
+#, fuzzy
+#~| msgid "unexpected end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "неожиданный конец файла"
+
+#, fuzzy
+#~| msgid "unterminated string"
+#~ msgid "translatable string"
+#~ msgstr "незаконченная строка"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "[identifier]"
+#~ msgstr "неверная директива: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier"
+#~ msgstr "неверная директива: %s"
+
+#, fuzzy
+#~| msgid "invalid directive: %s"
+#~ msgid "identifier:"
+#~ msgstr "неверная директива: %s"
+
+#, fuzzy
+#~| msgid "symbol %s redeclared"
+#~ msgid "symbol %s redefined"
+#~ msgstr "переопределение символа %s"
+
+#, fuzzy
+#~| msgid "missing `%s' at end of file"
+#~ msgid "saving stdout failed"
+#~ msgstr "отсутствует «%s» в конце файла"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' failed"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "вспомогательная программа `%s' завершилась неудачно"
+
+#, fuzzy
+#~| msgid "subsidiary program `%s' not found"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "вспомогательная программа `%s' не найдена"
+
+#~ msgid "expected %d shift/reduce conflict"
+#~ msgid_plural "expected %d shift/reduce conflicts"
+#~ msgstr[0] "ожидался %d конфликт сдвига/вывода"
+#~ msgstr[1] "ожидалось %d конфликта сдвига/вывода"
+#~ msgstr[2] "ожидалось %d конфликтов сдвига/вывода"
 
 #~ msgid ""
 #~ "Generate LALR(1) and GLR parsers.\n"
@@ -1188,21 +1382,63 @@
 #~ "Генерирует LALR(1) и GLR парсеры.\n"
 #~ "\n"
 
-#~ msgid "invalid escape sequence: %s"
-#~ msgstr "недопустимая экранирующая последовательность: %s"
+#~ msgid "empty"
+#~ msgstr "пусто"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " тип %d является %s\n"
+
+#~ msgid "state %d"
+#~ msgstr "состояние %d"
+
+#~ msgid "stray `@'"
+#~ msgstr "некорректный «@»"
 
 #~ msgid "unrecognized escape sequence: %s"
 #~ msgstr "нераспознанная экранирующая последовательность: %s"
 
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "недопустимое $ значение: $%d"
+
 #~ msgid "tokens %s and %s both assigned number %d"
 #~ msgstr "обеим лексемам %s и %s присвоен номер %d"
 
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "переопределение для стандартного назначенного %%destructor"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "переопределение для стандартного неназначенного %%destructor"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "переопределение для стандартного назначенного %%printer"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "переопределение для стандартного неназначенного %%printer"
+
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: ключ «--%s» должен использоваться без аргумента\n"
+
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: неизвестный ключ «--%s»\n"
+
 #~ msgid "%s: illegal option -- %c\n"
 #~ msgstr "%s: недопустимый ключ -- %c\n"
 
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: неоднозначный ключ «-W %s»\n"
+
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: ключ «-W %s» должен использоваться без аргумента\n"
+
 #~ msgid "subsidiary program `%s' could not be invoked"
 #~ msgstr "не удается выполнить вспомогательную программу «%s»"
 
+#~ msgid " TOTAL                 :"
+#~ msgstr " СУММА                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "время в %s: %ld.%06ld (%ld%%)\n"
+
 #~ msgid "warning: "
 #~ msgstr "предупреждение: "
 
@@ -1300,12 +1536,6 @@
 #~ 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 "и"
 
@@ -1336,9 +1566,6 @@
 #~ msgid "unterminated comment"
 #~ msgstr "незаконченный комментарий"
 
-#~ msgid "unexpected end of file"
-#~ msgstr "неожиданный конец файла"
-
 #~ msgid "unescaped newline in constant"
 #~ msgstr "неэкранированный перевод строки в константе"
 
@@ -1406,9 +1633,6 @@
 #~ msgid "   Skipping to next %c"
 #~ msgstr "   Пропуск до следующего %c"
 
-#~ msgid "unterminated string"
-#~ msgstr "незаконченная строка"
-
 #~ msgid "%s is invalid"
 #~ msgstr "неверный знак %s"
 
diff --git a/po/sr.gmo b/po/sr.gmo
index ed72072..7cf11e0 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 32fe71d..4063e58 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,132 +1,324 @@
 # 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.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2012, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-2.6.2\n"
+"Project-Id-Version: bison-3.0\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-10-02 12:00+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"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "празно правило без „%%empty“"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "непотребна предност и придруживост за „%s“"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "упозорење"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "кобна грешка"
+msgstr "грешка"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "кобна грешка"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
+
+#: src/complain.c:556
+#, c-format
+msgid "deprecated directive: %s, use %s"
+msgstr "застарела смерница: %s, користите „%s“"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "застарела смерница, користите „%s“"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "застарела смерница, користите „%s“"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "претходна објава"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "дозвољен је само један „%s“ по правилу"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Стање: %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "сукоби: %d помак/смањење, %d смањење/смањење\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "сукоби: %d помак/смањење\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "сукоби: %d смањење/смањење\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "сукоби помака/смањења: нађох %d, очекивах %d"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "сукоби смањења/смањења: нађох %d, очекивах %d"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%очекуј-рр се примењује само на ГЛР обрађиваче"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] "очекиван је %d сукоб помака/смањења"
-msgstr[1] "очекивана су %d сукоба помака/смањења"
-msgstr[2] "очекивано је %d сукоба помака/смањења"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "сукоби помака/смањења: нађох %d, очекивах %d"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] "очекиван је %d сукоб смањења/смањења"
-msgstr[1] "очекивана су %d сукоба смањења/смањења"
-msgstr[2] "очекивано је %d сукоба смањења/смањења"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d сукоб помака/смањења"
+msgstr[1] "%d сукоба помака/смањења"
+msgstr[2] "%d сукоба помака/смањења"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "сукоби смањења/смањења: нађох %d, очекивах %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d сукоб смањења/смањења"
+msgstr[1] "%d сукоба смањења/смањења"
+msgstr[2] "%d сукоба смањења/смањења"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: не могу да отворим"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "улазна/излазна грешка"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "не могу да затворим датотеку"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "одбијам да преснимим изворну датотеку „%s“"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "сукобљавам излазе у датотеку „%s“"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: не могу да отворим"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d сукоб помака/смањења"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "Try '%s --help' for more information.\n"
 msgstr "Пробајте „%s --help“ за више података.\n"
 
-#: src/getargs.c:301
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Употреба: %s [ОПЦИЈА]... ДАТОТЕКА\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 "Створите одредничко ЛР или уопштено ЛР (ГЛР) упослење обрађивача\n"
@@ -134,29 +326,30 @@
 "ИЕЛР(1) и утврђени ЛР(1) је пробна.\n"
 "\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 "Обавезни аргументи за дуге опције су обавезни и за кратке опције такође.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Исто је тачно и за опционалне аргументе.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
 "\n"
@@ -169,28 +362,40 @@
 "ИксСЛТ\n"
 "  -y, --yacc                   опонаша ПОСИКС-ов Јацц\n"
 "  -W, --warnings[=КАТЕГОРИЈА]  извештава о упозорењима у КАТЕГОРИЈИ\n"
+"  -f, --feature[=ФУНКЦИЈА]     покреће разне функције\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
 "Parser:\n"
 "  -L, --language=ЈЕЗИК                наводи излазни језик програмирања\n"
-"                                      (ово је пробна функција)\n"
 "  -S, --skeleton=ДАТОТЕКА             одређује скелет за коришћење\n"
-"  -t, --debug                         мери обрађивач за уклањање грешака\n"
+"  -t, --debug                         инструмент обрађивач за праћење\n"
+"                                      исти као „-Dparse.trace“\n"
 "      --locations                     укључује подршку места\n"
 "  -D, --define=НАЗИВ[=ВРЕДНОСТ]       слично као „%define НАЗИВ 'ВРЕДНОСТ'“\n"
 "  -F, --force-define=НАЗИВ[=ВЕДНОСТ]  преписује „%define НАЗИВ 'ВРЕДНОСТ'“\n"
@@ -201,21 +406,20 @@
 "  -k, --token-table                   укључује табелу назива симбола\n"
 "\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
@@ -229,106 +433,50 @@
 "  -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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"Грешке пријавите на <%s>.\n"
+msgstr "Грешке пријавите на <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "Матична страница „%s“: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+msgstr "Општа помоћ користећи ГНУ софтвер: <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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Грешке у преводу пријавите на „<http://translationproject.org/team/>“.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "За потпуну документацију, покрените: „info bison“.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "бизон (Гну Бизон) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Написали су Роберт Корбет и Ричард Столман.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Ауторска права (C) %d Задужбина слободног софтвера, Доо.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -337,39 +485,40 @@
 "НИКАКВА гаранција; чак ни за ТРЖИШНУ ВРЕДНОСТ или за ИСПУЊАВАЊЕ ОДРЕЂЕНЕ "
 "ПОТРЕБЕ.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "вишеструке објаве скице су неисправне"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: неисправан језик"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "вишеструке објаве језика су неисправне"
 
-#: src/getargs.c:747
-#, c-format
-msgid "%s: missing operand"
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "застарела смерница: %s, користите „%s“"
+
+#: src/getargs.c:850
+#, fuzzy, c-format
+msgid "missing operand"
 msgstr "%s: недостаје операнд"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "додатни операнд %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "празно"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Основа"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -382,212 +531,277 @@
 "// Страница пројекта: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "прекорачење броја редова"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "прекорачење броја колона"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "прекорачење броја редова"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "бескорисна правила у обрађивачу због сукоба"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define променљива „%s“ је поново одређена"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr "претходна одредница"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: неодређена %%define променљива „%s“"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define променљива „%s“ је поново одређена"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define променљива „%s“ је поново одређена"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define променљива „%s“ је поново одређена"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr "неисправна вредност %%define логичке променљиве „%s“"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "неисправна вредност %%define променљиве „%s“: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "прихваћена вредност: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "поновно одређујем број симбола корисника од %s"
+
+#: src/parse-gram.y:889
 #, 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/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "неисправна референца: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr ""
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Стање %d "
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "помера, и иде на стање %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "иде на стање %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "грешка (непридруживо)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "смањује користећи правило %d (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "прихвата"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 msgid "$default"
 msgstr "$основно"
 
-#: src/print.c:373 src/print_graph.c:78
-#, fuzzy, c-format
-msgid "State %d"
-msgstr "Стање: %d "
-
-#: src/print.c:409
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Терминали, са правилима где се појављују"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Нетерминали, са правилима где се појављују"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " на лево:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " на десно:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Бескорисна правила у обрађивачу због сукоба"
 
 # bug: "multiple properties" or "multiple song"?
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "вишеструке %s објаве"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "занемарен је удвојени назив симбола за „%s“"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "дато је правило за %s, које је симбол"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "неслагање врсте основне радње: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "празно правило за укуцани нетерминал, и нема радње"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "неупотребљена вредност: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "неподешена вредност: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "„%%empty“ на не-празном правилу"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "празно правило без „%%empty“"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "дозвољен је само један „%s“ по правилу"
+msgid "only midrule actions can be typed: %s"
+msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "„%s“ има дејства само на ГЛР обрађиваче"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "након %s мора да следи позитиван број"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "правило је предуго"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "нема правила у основи улаза"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "правило је бескорисно у основи"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "не-терминал је бескористан у основи: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Не-терминали су бескорисни у основи"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Терминали су неупотребљени у основи"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Правила су бескорисна у основи"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -595,7 +809,7 @@
 msgstr[1] "%d не-терминала су бескорисна у основи"
 msgstr[2] "%d не-терминала је бескорисно у основи"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -603,588 +817,638 @@
 msgstr[1] "%d правила су бескорисна у основи"
 msgstr[2] "%d правила је бескорисно у основи"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "почетни симбол %s не изводи никакав исказ"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "односи се на: %c%s у %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "могуће значење: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", кријем %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " у %s"
 
-#: src/scan-code.l:472
-#, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ", не може бити приступљен из радње средњег правила у $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "цео број је ван опсега: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "неисправна референца: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr "садржајна грешка након „%c“, очекујем цео број, слово, _, [, или $"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr "симбол није пронађен у производњи пре $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "симбол није пронађен у производњи: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "неисправна референца: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "нејасна референца: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "дата је изричита врста у неуписаној основи"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
 msgstr "$$ за средње правило при $%d од %s нема објављену врсту"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ од %s нема објављену врсту"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s од %s нема објављену врсту"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr ""
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "залутали зарез (,) је схваћен као размак"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "неисправна директива: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "неисправна одређивач: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "неисправан знак: %s"
-msgstr[1] "неисправан знак: %s"
-msgstr[2] "неисправан знак: %s"
+msgstr[0] "неисправан знак"
+msgstr[1] "неисправни знаци"
+msgstr[2] "неисправни знаци"
 
-#: 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
+#: src/scan-gram.l:383
 #, c-format
 msgid "invalid null character"
 msgstr "неисправан ништавни знак"
 
-#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "неочекивани одређивач у називу у заградама: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "очекиван је одређивач"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "неисправан знак у називу у заградама"
+msgstr[1] "неисправни знаци у називу у заградама"
+msgstr[2] "неисправни знаци у називу у заградама"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "дословност празног знака"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "додатни знаци у дословности знака"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "неисправан број након „\\-escape“: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "неисправан знак након „\\-escape“: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "недостаје „%s“ на крају датотеке"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "недостаје „%s“ на крају реда"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "незатворена %s смерница у костуру"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr "премало аргумената за %s смерницу у костуру"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "ПОСИКС Јацц забрањује цртице у називима симбола: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "превише симбола у улазној основи (ограничење је %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s поновни проглас за %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 msgstr "симбол „%s“ је поново објављен"
 
-#: src/symtab.c:367
-#, c-format
-msgid "redefining user token number of %s"
-msgstr "поновно одређујем број симбола корисника од %s"
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "симбол „%s“ је поново објављен"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "коришћен је симбол „%s“, али није одређен као обележје и нема правила"
+
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
 msgstr "коришћен је симбол „%s“, али није одређен као обележје и нема правила"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "симбол „%s“ је поново објављен"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "поновно одређујем број симбола корисника од %s"
+
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "поновно одређујем број симбола корисника од %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "непотребно „%s“ за врсту <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "врста „%s“ је употребљена, али није придружена ниједном симболу"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
 msgstr "симбол %s је коришћен више пута као дословна ниска"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
 msgstr "симболу %s је дата више од једне дословне ниске"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "поновна објава броја %d корисничког симбола за %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "претходна објава за %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "полазни симбол „%s“ није одређен"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "полазни симбол „%s“ је обележје"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "поновна објава за основног означеног %%уништавача"
+msgid "useless precedence and associativity for %s"
+msgstr "непотребна предност и придруживост за „%s“"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "поновна објава за основног неозначеног %%уништавача"
+msgid "useless precedence for %s"
+msgstr "непотребна предност за „%s“"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "поновна објава за основног означеног %%штампача"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "непотребна придруживост за „%s“, користите „%%precedence“"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "поновна објава за основног неозначеног %%штампача"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "не-терминал је бескористан у основи: %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr "није успело уклањање „%s“"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "застарела смерница, користите „%s“"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr "стварање привремене датотеке није успело"
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Категорије упозорења укључују:\n"
+#~ "  „midrule-values“  неподешене или некоришћене вредности средњег правила\n"
+#~ "  „yacc“            несагласности са ПОСИКС Јацц-ом\n"
+#~ "  „conflicts-sr“    С/Р сукоби (унапред укључено)\n"
+#~ "  „conflicts-rr“    Р/Р сукоби (унапред укључено)\n"
+#~ "  „deprecated“      застарела конструкција\n"
+#~ "  „empty-rule“      празна правила без „%empty“\n"
+#~ "  „precedence“      непогодна предност и придруживост\n"
+#~ "  „other“           сва друга упозорења (унапред укључено)\n"
+#~ "  „all“             сва упозорења\n"
+#~ "  „no-CATEGORY“     искључује упозорења у КАТЕГОРИЈИ\n"
+#~ "  „none“            искључује сва упозорења\n"
+#~ "  „error[=CATEGORY]“упозорења сматра грешкама\n"
+#~ "\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "чување стандардног улаза није успело"
+#~ 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"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "чување стандардног излаза није успело"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "ФУНКЦИЈА је списак зарезом раздвојених речи који може да укључи:\n"
+#~ "  „caret“        приказује грешке са каретима\n"
+#~ "  „all“          све од горњег\n"
+#~ "  „none“         искључује све од горњег\n"
+#~ "  "
 
-#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
-#, c-format
-msgid "opening of tmpfile failed"
-msgstr "отварање привремене датотеке није успело"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "неисправан аргумент „%s“ за „%s“"
 
-#: djgpp/subpipe.c:157
-#, c-format
-msgid "redirecting bison's stdout to the temporary file failed"
-msgstr ""
-"преусмеравање бизоновог стандардног излаза на привремену датотеку није успело"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "нејасан аргумент „%s“ за „%s“"
 
-#: djgpp/subpipe.c:201
-#, c-format
-msgid "redirecting m4's stdin from the temporary file failed"
-msgstr "преусмеравање м4 стандардног улаза из привремене датотеке није успело"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Исправни аргументи су:"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "отварање привремене датотеке није успело"
+#~ msgid "write error"
+#~ msgstr "грешка уписа"
 
-#: djgpp/subpipe.c:218
-#, c-format
-msgid "redirecting m4's stdout to a temporary file failed"
-msgstr "преусмеравање м4 стандардног излаза на привремену датотеку није успело"
+#~ msgid "Unknown system error"
+#~ msgstr "Непозната грешка система"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "прекинут је припомоћни програм „%s“"
+#, fuzzy
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: опција „-W %s“ је нејасна\n"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "није пронађен припомоћни програм „%s“"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: опција „%s“ је нејасна; могућности:"
 
-#: djgpp/subpipe.c:265
-#, c-format
-msgid "redirecting bison's stdin from the temporary file failed"
-msgstr ""
-"преусмеравање бизоновог стандардног улаза из привремене датотеке није успело"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: непозната опција „%c%s“\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "неисправан аргумент „%s“ за „%s“"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „%c%s“ не дозвољава аргумент\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "нејасан аргумент „%s“ за „%s“"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: опција „--%s“ захтева аргумент\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Исправни аргументи су:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: неисправна опција -- „%c“\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u ослобођено (%.2f%%).\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: опција захтева аргумент -- „%c“\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"
+#~ msgid "memory exhausted"
+#~ msgstr "меморија је потрошена"
 
 #
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "хистограм густине\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "не могу да направим спојку"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Статистика подешавања бита:\n"
-"\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s потпроцес није успео"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Укупно покретања = %u\n"
+#~ msgid "`"
+#~ msgstr "„"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "не могу да прочитам датотеку статистике"
+#~ msgid "'"
+#~ msgstr "“"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "лоша величина датотеке статистике\n"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Времена извршавања (у секундама)\n"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "не могу да упишем датотеку статистике"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "„_open_osfhandle“ није успело"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "не могу да отворим датотеку статистике за упис"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "не могу да повратим фд %d: „dup2“ није успело"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "грешка уписа"
+#~ msgid "%s subprocess"
+#~ msgstr "%s потпроцес"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Непозната грешка система"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s потпроцес је добио кобни сигнал %d"
 
-#: lib/getopt.c:547 lib/getopt.c:576
-#, c-format
-msgid "%s: option '%s' is ambiguous; possibilities:"
-msgstr "%s: опција „%s“ је нејасна; могућности:"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u ослобођено (%.2f%%).\n"
 
-#: lib/getopt.c:624 lib/getopt.c:628
-#, c-format
-msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s: опција „--%s“ не дозвољава аргумент\n"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u у остави (%.2f%%)\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"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u у остави (%.2f%%)\n"
 
-#: lib/getopt.c:685 lib/getopt.c:704
-#, c-format
-msgid "%s: option '--%s' requires an argument\n"
-msgstr "%s: опција „--%s“ захтева аргумент\n"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u у остави (%.2f%%)\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: непозната опција „--%s“\n"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: непозната опција „%c%s“\n"
+#~ msgid "count log histogram\n"
+#~ msgstr "хистограм дневника бројања\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 "меморија је потрошена"
+#~ msgid "size log histogram\n"
+#~ msgstr "хистограм дневника величине\n"
 
 #
-#: 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 "не могу да направим спојку"
+#~ msgid "density histogram\n"
+#~ msgstr "хистограм густине\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 "%s потпроцес није успео"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Статистика подешавања бита:\n"
+#~ "\n"
 
-#. 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 "„"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Укупно покретања = %u\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "“"
+#~ msgid "cannot read stats file"
+#~ msgstr "не могу да прочитам датотеку статистике"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Времена извршавања (у секундама)\n"
+#~ msgid "bad stats file size\n"
+#~ msgstr "лоша величина датотеке статистике\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " УКУПНО                :"
+#~ msgid "cannot write stats file"
+#~ msgstr "не могу да упишем датотеку статистике"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "време у %s: %ld.%06ld (%ld%%)\n"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "не могу да отворим датотеку статистике за упис"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "„_open_osfhandle“ није успело"
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "недостаје „%s“ на крају датотеке"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "не могу да повратим фд %d: „dup2“ није успело"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "неисправна одређивач: %s"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "%s потпроцес"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "дословност празног знака"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr "%s потпроцес је добио кобни сигнал %d"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "неисправна одређивач: %s"
 
-#~ msgid "state %d"
-#~ msgstr "стање %d"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "неисправна одређивач: %s"
 
-#~ msgid "stray '@'"
-#~ msgstr "залутало „@“"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "дословност празног знака"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "симбол „%s“ је поново одређен"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "није успело уклањање „%s“"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "стварање привремене датотеке није успело"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "чување стандардног улаза није успело"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "чување стандардног излаза није успело"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "отварање привремене датотеке није успело"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "преусмеравање бизоновог стандардног излаза на привремену датотеку није "
+#~ "успело"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "преусмеравање м4 стандардног улаза из привремене датотеке није успело"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "отварање привремене датотеке није успело"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "преусмеравање м4 стандардног излаза на привремену датотеку није успело"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "прекинут је припомоћни програм „%s“"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "није пронађен припомоћни програм „%s“"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "преусмеравање бизоновог стандардног улаза из привремене датотеке није "
+#~ "успело"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " врста %d је %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "неисправна $ вредност: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: непозната опција „--%s“\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: опција „-W %s“ захтева аргумент\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " УКУПНО                :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "време у %s: %ld.%06ld (%ld%%)\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 954b6c1..1ed435c 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index c2dbff1..27f0306 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,195 +1,402 @@
 # Swedish messages for bison.
-# Copyright © 2001-2006, 2008, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Copyright © 2001-2006, 2008, 2010, 2011, 2012, 2013, 2015, 2018, 2019 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.
+# Göran Uddeborg <goeran@uddeborg.se>, 2001-2006, 2008, 2010, 2011, 2012, 2013, 2015, 2018, 2019.
 #
-# $Revision: 1.88 $
+# $Revision: 1.109 $
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-22 23: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"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "S/R-konflikter (aktiverat som standard)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "R/R-konflikter (aktiverat som standard)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "strängalias som inte är fästa vid en symbol"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "föråldrade konstruktioner"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "tomma regler utan %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "ej satta eller oanvända mittregelvärden"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "oanvändbar precedens och associativitet"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "inkompatibiliteter med POSIX Yacc"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "alla andra varningar (aktiverat som standard)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "alla varningarna utom ”dangling-alias” och ”yacc”"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "slå av varningar i KATEGORI"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "slå av alla varningarna"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "behandla varningar som fel"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Varningskategorierna inkluderar:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "varning"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "fel"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "ödesdigert fel"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc stödjer inte %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, 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"
+msgid "deprecated directive: %s, use %s"
+msgstr "ogiltigt direktiv: %s, använd %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, 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"
+msgid "duplicate directive"
+msgstr "dubblerat direktiv"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "konflikter: %d skifta/reducera, %d reducera/reducera\n"
+msgid "duplicate directive: %s"
+msgstr "dubblerat direktiv: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "konflikter: %d skifta/reducera\n"
+msgid "previous declaration"
+msgstr "föregående deklaration"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "konflikter: %d reducera/reducera\n"
+msgid "only one %s allowed per rule"
+msgstr "endast en %s tillåts per regel"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, 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:91
+#, 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:100
+#, 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:602
 #, c-format
 msgid "State %d "
 msgstr "Tillstånd %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "konflikter: %d skifta/reducera, %d reducera/reducera\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "konflikter: %d skifta/reducera\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "konflikter: %d reducera/reducera\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "skifta/reducerakonflikter för regel %d: %d funna, %d förväntade"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "reducera/reducerakonflikter för regel %d: %d funna, %d förväntade"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr gäller endast GLR-parsrar"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "skifta/reducerakonflikter: %d funna, %d förväntade"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d skifta/reducerakonflikt"
+msgstr[1] "%d skifta/reducerakonflikter"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "reducera/reducerakonflikter: %d funna, %d förväntade"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d reducera/reducerakonflikt"
+msgstr[1] "%d reducera/reducerakonflikter"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: kan inte öppna"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "in-/utfel"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "kan inte stänga fil"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "vägrar att skriva över indatafilen %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "motstridiga utmatningar till filen %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Försök med \"%s --help\" för mer information.\n"
+msgid "%s: cannot backup"
+msgstr "%s: kan inte säkerhetskopiera"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "färglägg utdata"
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "färglägg inte utdata"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "färglägg utdata om enheten är en tty"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "NÄR kan vara en av följande:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "beskriv tillstånden"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "komplettera kärnobjektmängderna med sina höljen"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "koppla uttryckligen framåtblickande element till objekt"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "beskriv lösning av skifta/reducerakonflikter"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "inkludera all ovanstående information"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "avaktivera rapporten"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "SAKER är en lista med kommaseparerade ord som kan innehålla:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr "SPÅR är en lista med kommaseparerade ord som kan innehålla:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "visa fel med cirkumflex"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "visa maskinläsbara fixar"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "generera inte någon fil"
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr "alla ovanstående"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "avaktivera alla ovanstående"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr "FUNKTIONER är en lista av kommaseparerade ord som kan inkludera:"
+
+#: src/getargs.c:346
+#, 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:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Användning: %s [FLAGGA]... FIL\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\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"
+"använder LALR(1), IELR(1) eller kanonisk LR(1) parsningstabeller.\n"
 "\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Detsamma gäller valfria argument.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"                             och avsluta\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"
+"                             och avsluta\n"
+"  -u, --update               applicera fixar på källgrammatikfilen och "
+"avsluta\n"
+"  -f, --feature[=FUNKTIONER] aktivera diverse funktioner\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"  -W, --warnings[=KATEGORI]  rapportera varningarna som faller inom "
+"KATEGORI\n"
+"      --color[=NÄR]          huruvida diagnostik skall färgläggas\n"
+"      --style=FIL            ange CSS-FIL:en för färgläggning av diagnostik\n"
+"\n"
+
+#: src/getargs.c:400
 #, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
-"Parser:\n"
+"Trimma parsern:\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"
+"  -t, --debug                      instrumentera parsern för spårning\n"
+"                                   samma som ”-Dparse.trace”\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"
@@ -198,104 +405,46 @@
 "                                   '-Dapi.prefix=PREFIX'\n"
 "  -l, --no-lines                   generera inte \"#line\"-direktiv\n"
 "  -k, --token-table                inkludera en tabell över elementnamn\n"
+"  -y, --yacc                       emulera POSIX yacc\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"Utdatafiler:\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"
+"  -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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Rapportera fel till <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "%s hemsida: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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"
@@ -305,30 +454,30 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr "För fullständig dokumentation, kör: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Skriven av Robert Corbett och Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright © %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -337,39 +486,40 @@
 "finns INGEN garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT\n"
 "SPECIELLT ÄNDAMÅL.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "flera skelettdeklarationer är inte tillåtet"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: ogiltigt språk"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "flera språkdeklarationer är inte tillåtet"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: saknad operand"
+msgid "deprecated option: %s, use %s"
+msgstr "föråldrad flagga: %s, använd %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "saknad operand"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "extra operand %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "tom"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Grammatik"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -382,798 +532,616 @@
 "// Hemsida: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "radnummerspill"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "kolumnnummerspill"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "bytenummerspill"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "…"
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "oanvändbar regel i parsern på grund av konflikter"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "fixar kan göras.  Kör om med flaggan ”--update”."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "%%define-variabeln %s omdefinierad"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: odefinierad  %%define-variabel %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define-variabeln ”%s” kräver ”{…}”-värden"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define-variabeln %s kräver nyckelordsvärden"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define-variabeln %s kräver ”\"…\"”-värden"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, 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
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "accepterat värde: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "teckenkonstanter kan inte vara icke-terminaler"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "teckenkonstanter kan inte användas tillsammans med %s"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "definition av %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "identiferare saknas i parameterdeklaration"
+msgstr "identifierare saknas i parameterdeklaration"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " typ %d är %s\n"
+msgid "invalid version requirement: %s"
+msgstr "felaktigt versionskrav: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "skifta, och gå till tillstånd %d\n"
+msgid "require bison %s, but have %s"
+msgstr "behöver bison %s, men har %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Tillstånd %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "skifta, och gå till tillstånd %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "gå till tillstånd %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "fel (ickeassociativ)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "reducera med regel %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "acceptera"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$standard"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Terminaler, med regler där de förekommer"
 
-#: src/print.c:436
+#: src/print.c:391
 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:416
+msgid "on left:"
+msgstr "till vänster:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " till höger:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "till höger:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Oanvändbara regler i parser på grund av konflikter"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "flera %s-deklarationer"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "duplicerat symbolnamn för %s ignorerat"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "typkonflikt för standardåtgärd: <%s> <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "oanvänt värde: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "ej satt värde: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty på en icketom regel"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "tom regel utan %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "endast en %s tillåts per regel"
+msgid "only midrule actions can be typed: %s"
+msgstr "endast mitt-i-regeln-åtgärder kan skrivas: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s påverkar endast GLR-parsrar"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s måste följas av ett positivt tal"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc stödjer inte typade mitt-i-regeln-åtgärder"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "regeln är för lång"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "inga regler i ingrammatiken"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "oanvändbar regel i grammatiken"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "oanvändbar icketerminal i grammatiken: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Oanvändbara icketerminaler i grammatiken"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Oanvända terminaler i grammatiken"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Oanvändbara regler i grammatiken"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "startsymbolen %s genererar inga meningar"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr "vilsekommet \"%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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "refererar till: %c%s vid %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "möjligen avsett: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", döljer %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " vid %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "heltal utanför intervall: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "ogiltig referens: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr ""
-"syntaxfel efter \"%c\", siffra, bokstav, \"_\", \"[\" eller \"$\" förväntades"
+msgstr "syntaxfel efter ”%c”, siffra, bokstav, ”_”, ”[” eller ”$” förväntades"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "symbol inte funnen i produktion: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "vilseledande referens: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "tvetydigt argument: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "explicit typ given i otypad grammatik"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ för %s har ingen deklarerad typ"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s för %s har ingen deklarerad typ"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "flera förekomster av $%d med api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr "vilsekommet \",\" hanterat som blank"
+msgstr "vilsekommet ”,” hanterat som blank"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "ogiltigt direktiv: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "ogiltig identifierare: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "ogiltigt tecken"
 msgstr[1] "ogiltiga tecken"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "ogiltigt nolltecken"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "oväntad identifierare i namn inom klamrar: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "en identifierare förväntades"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 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
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc stödjer inte strängkonstanter"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "tom teckenkonstant"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "ogiltigt tal efter \\-specialsekvens: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "ogiltigt tecken efter \\-specialsekvens: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc stödjer inte hexadecimala konstanter"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "saknat %s vid filslut"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "saknat %s vid radslut"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "oavslutat %s-direktiv i skelettet"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX-Yacc förbjuder bindestreck i symbolnamn: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s-omdeklaration för %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s-omdeklaration för <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "symbolen %s omdefinierad"
+msgid "symbol %s redeclared as a token"
+msgstr "symbolen %s omdeklarerad som ett element"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "symbolen %s omdeklarerad"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "symbolen %s omdeklarerad som en icketerminal"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "omdefinition av elementnummer för %s"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"symbolen %s används, men är inte definierad som ett element och har inga "
+"regler; menade du %s?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc reserverar %%type för icketerminaler"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "symbolen %s omdeklarerad"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "icketerminaler kan inte ges ett explicit nummer"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "omdefinition av elementnummer för %s"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "användarelementnumret för %s är för stort"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "strängkonstanten %s är inte fäst vid en symbol"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "oanvändbar %s för typen <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "typen <%s> används, men är inte associerad med någon symbol"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "icketerminaler kan inte ges ett strängalias"
+
+#: src/symtab.c:698
 #, 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
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "användarsymbol nummer %d omdeklarerad för %s"
+msgstr "omdeklaration av användarelementnummer %d för %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "föregående deklaration för %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "elementnumret är för stort"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "startsymbolen %s är odefinierad"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "startsymbolen %s är ett element"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "omdeklaration av standard-%%destructor med tagg"
+msgid "useless precedence and associativity for %s"
+msgstr "oanvändbar precedens och associativitet för %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "omdeklaration av standard-%%destructor utan tagg"
+msgid "useless precedence for %s"
+msgstr "oanvändbar precedens för %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, 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"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "oanvändbar associativitet för %s, använd %%precedence"
diff --git a/po/tr.gmo b/po/tr.gmo
index f032991..dda07f5 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 175b931..622501c 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,339 +1,534 @@
 # Turkish translations for GNU Bison messages.
+# This file is distributed under the same license as the bison package.
 # Copyright (C) 2001 Free Software Foundation, Inc.
-# Altuð Bayram <altugbayram_2000@yahoo.com>, 2001.
-# Çaðrý Çöltekin <cagri@xs4all.nl>, 2003 - 2005
+# Altuğ Bayram <altugbayram_2000@yahoo.com>, 2001.
+# Çağrı Çöltekin <cagri@xs4all.nl>, 2003 - 2005
+# Mesutcan Kurt <mesutcank@gmail.com>, 2017.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 2.0\n"
+"Project-Id-Version: bison 3.0.4\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2017-09-23 13:30+0000\n"
+"Last-Translator: Mesutcan Kurt <mesutcank@gmail.com>\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 2.5.1.1\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-POOTLE-MTIME: 1506173454.000000\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "%%empty içermeyen boş kural"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "%s için yararsız önceliklendirme ve ilişkilendirme"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
-msgstr "uyarý"
+msgstr "uyarı"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "G/Ç hatasý"
+msgstr "hata"
 
-#: src/complain.c:208 src/complain.c:215
-#, fuzzy
+#: src/complain.c:260
 msgid "fatal error"
-msgstr "ölümcül hata: "
+msgstr "ölümcül hata"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, 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"
+msgid "POSIX Yacc does not support %s"
+msgstr ""
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, 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"
+msgid "deprecated directive: %s, use %s"
+msgstr "geçersiz yönerge: %s, %s kullan"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "geçersiz yönerge: %s kullan"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "geçersiz yönerge: %s kullan"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, 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"
+msgid "previous declaration"
+msgstr "önceki bildirim"
 
-#: src/conflicts.c:492
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "çeliþkiler: %d öteleme/indirgeme, %d indirgeme/indirgeme\n"
+msgid "only one %s allowed per rule"
+msgstr "her kural icin sadece bir %s kullanılabilir"
 
-#: src/conflicts.c:495
-#, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "çeliþkiler: %d öteleme/indirgeme\n"
+#: src/conflicts.c:81
+#, fuzzy, 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:497
-#, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "çeliþkiler: %d indirgeme/indirgeme\n"
+#: src/conflicts.c:91
+#, fuzzy, 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:515
+#: src/conflicts.c:100
+#, fuzzy, 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:602
 #, c-format
 msgid "State %d "
 msgstr "Durum %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "çelişkiler: %d öteleme/indirgeme, %d indirgeme/indirgeme\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "çelişkiler: %d öteleme/indirgeme\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "çelişkiler: %d indirgeme/indirgeme\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "öteleme/indirgeme çelişkisi: %d bulunan, %d beklenen"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "indirgeme/indirgeme çelişkisi: %d bulunan, %d beklenen"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr "%%expect-rr sadece GLR ayrýþtýrýcýlarý için geçerlidir"
+msgstr "%%expect-rr sadece GLR ayrıştırıcıları için geçerlidir"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] "%d öteleme/indirgeme çeliþkisi bekleniyor"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "öteleme/indirgeme çelişkisi: %d bulunan, %d beklenen"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] "%d indirgeme/indirgeme çeliþkisi bekleniyor"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d öteleme/indirgeme çelişkisi"
+msgstr[1] "%d öteleme/indirgeme çelişkileri"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "indirgeme/indirgeme çelişkisi: %d bulunan, %d beklenen"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d indirgeme/indirgeme çelişkisi"
+msgstr[1] "%d indirgeme/indirgeme çelişkisi"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "`%s' dosyasý açýlamýyor"
+msgstr "%s: açılamıyor"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "girdi/çıktı hatası"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
-msgstr "dosya kapatýlamýyor"
+msgstr "dosya kapatılamıyor"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "girdi dosyası %s in üzerine yazılma reddediliyor"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
-msgstr "%s dosyasýna çeliþen çýktýlar"
+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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: açılamıyor"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Kullaným: %s [SEÇENEK]... DOSYA\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d öteleme/indirgeme çelişkisi"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
 msgstr ""
 
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için '%s --help' yazın.\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "Kullanım: %s [SEÇENEK]... DOSYA\n"
+
+#: src/getargs.c:356
+#, fuzzy
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"Deterministik LR veya genelleştirilmiş LR (GLR) ayrıştırıcısı üreten\n"
+"LALR(1), IELR(1) veya kanonik LR(1) ayrıştırıcı tablolar.  IELR(1) ve\n"
+"kanonik LR(1) desteği deneyseldir.\n"
+"\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
+"Uzun seçenekler için zorunlu olan argümanlar kısa seçenekler için de "
+"zorunludur.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "Aynı şey isteğe bağlı argümanlar için de doğrudur.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 #, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"\n"
+"İşlem kipleri:\n"
+"  -h, --help                 bu yardım metnini göster ve çık\n"
+"  -V, --version              sürüm bilgisini göster ve çık\n"
+"      --print-localedir      yerel bağımlı veri içeren çıktı dizini\n"
+"      --print-datadir        iskeletler ve XSLT içeren çıktı dizini\n"
+"  -y, --yacc                 POSIX Yacc'a öykün\n"
+"  -W, --warnings[=KATEGORİ]  KATEGORİ de olan uyarıları raporla\n"
+"  -f, --feature[=ÖZELLİK]    çeşitli özellikleri etkinleştir\n"
+"\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
 #, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"Ayrıştırıcı:\n"
+"  -L, --language=DİL          çıktı programlama dilini belirt\n"
+"  -S, --skeleton=DOSYA              kullanılacak iskeleti belirt\n"
+"  -t, --debug                      ayrıştırıcıyı detaylı izleme için "
+"donat\n"
+"                                   '-Dparse.trace' ile aynı\n"
+"      --locations                  konum desteğini etkinleştir\n"
+"  -D, --define=İSİM[=DEĞER]        '%define İSİM \"DEĞER\"' benzeri\n"
+"  -F, --force-define=İSİM[=DEĞER]  '%define NAME \"VALUE\"' üzerine yaz\n"
+"  -p, --name-prefix=ÖNEK         harici sembollerin başına ÖNEK ekle\n"
+"                                   artık '-Dapi.prefix=ÖNEK' kullanılÄ"
+"±yor\n"
+"  -l, --no-lines                   '#line' direktiflerini oluşturma\n"
+"  -k, --token-table                token isimlerinin bir tablosunu dahil et\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 #, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"Çıktı:\n"
+"      --defines[=DOSYA]       ayrıca bir başlık dosyası üret\n"
+"  -d                         aynı şekilde ancak DOSYA belirtemez (POSIX "
+"Yacc için)\n"
+"  -r, --report=ŞEYLER        otomatta ayrıca detayları üret\n"
+"      --report-file=DOSYA     raporu DOSYAya yaz\n"
+"  -v, --verbose              '--report=state' ile aynı\n"
+"  -b, --file-prefix=ÖNEK   çıktı dosyaları için bir ÖNEK belirt\n"
+"  -o, --output=DOSYA          çıktıyı DOSYAya yaz\n"
+"  -g, --graph[=DOSYA]         ayrıca otomatın bir grafını üret\n"
+"  -x, --xml[=DOSYA]           ayrıca otomatın bir XML çıktısını "
+"raporla\n"
+"                             (XML şeması deneyseldir)\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
+#: src/getargs.c:436
+#, 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"
+msgstr "Hataları <%s> e bildirin.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s ana sayfası: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
+"GNU yazılımını kullanmak için genel yardım: <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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
+"Çeviri hatalarını <http://translationproject.org/team/tr.html> a "
+"bildirin.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
+"Belgelendirmenin tamamı için, şu komutu çalıştırın: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Yazanlar: Robert Corbett ve Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
-msgstr "Telif Hakký (C) %d Free Software Foundation, Inc.\n"
+msgstr "Telif Hakkı (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
+"Bu bir özgür yazılımdır; kopyalama koşulları için kaynak koduna bakÄ"
+"±nız.  Hiçbir garantisi\n"
+"yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA UYGUNLUĞU için "
+"bile garanti verilmez.\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "çoklu %s bildirimleri"
+msgstr "çoklu iskeletler geçersizdir"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "geçersiz karakter: %s"
+msgstr "%s: geçersiz dil"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "çoklu %s bildirimleri"
+msgstr "çoklu dil bildirimleri geçersizdir"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "`%s'ten sonra eksik iþleç"
+msgid "deprecated option: %s, use %s"
+msgstr "geçersiz yönerge: %s, %s kullan"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
 #, fuzzy, c-format
+msgid "missing operand"
+msgstr "%s: eksik işleç"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "fazla iþleç: `%s'"
+msgstr "fazla işleç %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "boþ"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Gramer"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -341,850 +536,981 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// %s tarafından oluşturuldu.\n"
+"// Hataları <%s> a raporlayın.\n"
+"// Ana sayfa: <%s>.\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
-msgstr ""
+msgstr "satır sayısı taşması"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
+msgstr "sütun sayısı taşması"
+
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "satır sayısı taşması"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
 msgstr ""
 
-#: src/main.c:146
-#, fuzzy
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "çeliskiler yüzünden kural indirgenemedi"
+msgstr "ayrıştırıcıda çeliskiler yüzünden kural yararsız"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "%s simgesi tekrar tanýmlanmýþ"
+msgstr "%%define değişken %s yeniden tanımlandı"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr "ilk bildirim"
+msgstr "önceki tanım"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s: tanımsız %%define değişkeni %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define değişken %s yeniden tanımlandı"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define değişken %s yeniden tanımlandı"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define değişken %s yeniden tanımlandı"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "%%define Boolean değişkeni %s için geçersiz değer"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
+msgstr "%%define değişkeni %s için geçersiz değer: %s"
+
+#: src/muscle-tab.c:749
+#, c-format
+msgid "accepted value: %s"
+msgstr "kabul edilen değer: %s"
+
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
 msgstr ""
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
-msgid "accepted value: %s"
-msgstr "geçersiz deðer: %s"
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "kullanıcı andacı %s tekrar tanımlanıyor"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "parametre bildiriminde eksik tanýtýcý"
+msgstr "parametre bildiriminde eksik tanıtıcı"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "geçersiz önceleme dizgesi: %s"
+
+#: src/parse-gram.y:1032
 #, c-format
-msgid " type %d is %s\n"
-msgstr " tip %d %s'dir\n"
+msgid "require bison %s, but have %s"
+msgstr ""
 
-#: src/print.c:164
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "Durum %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
-msgstr "ötele, ve durum %d'ye git\n"
+msgstr "ötele, ve durum %d'ye git\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "durum %d'ye git\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
-msgstr "hata (birleþmeli deðil)\n"
+msgstr "hata (birleşmeli değil)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "kural %d (%s) ile indirgeme"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "onayla"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 msgid "$default"
-msgstr "$öntanýmlý"
+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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
-msgstr "Sabit simgeler, içinde geçtikleri kurallarla birlikte"
+msgstr "Sabit simgeler, içinde geçtikleri kurallarla birlikte"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
-msgstr "Deðiþken simgeler, içinde geçtikleri kurallarla birlikte"
+msgstr "Sabit simgeler, içinde geçtikleri kurallarla birlikte"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " (sol tarafta):"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " (sað tarafta):"
-
-#: src/print.c:510
+#: src/print.c:425
 #, fuzzy
-msgid "Rules useless in parser due to conflicts"
-msgstr "çeliskiler yüzünden kural indirgenemedi"
+msgid "on right:"
+msgstr " (sağ tarafta):"
 
-#: src/reader.c:62
+#: src/print.c:447
+msgid "Rules useless in parser due to conflicts"
+msgstr "Ayrıştırıcıda çeliskiler yüzünden kurallar yararsız"
+
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
-msgstr "çoklu %s bildirimleri"
+msgstr "çoklu %s bildirimleri"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "birleþtirme iþlevi `%s'de tip çatýþmasý: <%s> != <%s>"
+msgstr "birleştirme fonksiyonu '%s'de sonuç 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "%s için çoklu sembol ismi yoksayıldı"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "bir andaç olan %s için kural verilmiþ"
+msgstr "bir andaç olan %s için kural verilmiş"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr "öntanýmlý eylem üzerinde tip çatýþmasý: `%s' != `%s'"
+msgstr "öntanımlı eylem üzerinde tip çatışması: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, 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þ"
+"Tipli değişken simge için boş kural tanımlanmış, ve eylem belirtilmemiş"
 
-#: src/reader.c:328
-#, fuzzy, c-format
+#: src/reader.c:334
+#, c-format
 msgid "unused value: $%d"
-msgstr "geçersiz deðer: %s"
+msgstr "kullanılmayan değer: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
-msgstr ""
+msgstr "değeri sıfırla: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "boş-olmayan kuralda %%empty"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "%%empty içermeyen boş kural"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
+msgstr "%%prec için simge tanımlı değil: %s"
+
+#: src/reader.c:377
+#, c-format
+msgid "only midrule actions can be typed: %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
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
-msgstr "%s sadece GLR ayrýþtýrýcýlarý etkiler"
+msgstr "%s sadece GLR ayrıştırıcıları etkiler"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
-msgstr "%s'i pozitif bir sayý izlemeli"
+msgstr "%s'i pozitif bir sayı izlemeli"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
-msgstr ""
+msgstr "kural çok uzun"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
-msgstr "girdi gramer içinde kural yok"
+msgstr "girdi gramer içinde kural yok"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "girdi gramer içinde kural yok"
+msgstr "gramerde kural yararsız"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "gramerde terminal olmayan yararsız: %s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Deðiþken simgeler, içinde geçtikleri kurallarla birlikte"
+msgstr "Değişken simgeler gramerde yararsız"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "girdi gramer içinde kural yok"
+msgstr "Sabit simgeler gramerde kullanılmadı"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "girdi gramer içinde kural yok"
+msgstr "Kurallar gramerde yararsız"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
+msgstr[0] "%d değişken simge gramerde yararsız"
+msgstr[1] "%d değişken simge gramerde yararsız"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
-msgstr[0] "girdi gramer içinde kural yok"
+msgstr[0] "%d kural gramerde yararsız"
+msgstr[1] "%d kural gramerde yararsız"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr "baþlangýç simgesi %s herhangi bir cümleden türemiyor"
+msgstr "başlangıç simgesi %s herhangi bir cümleden türemiyor"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+msgstr "fazladan '%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 ""
-
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "%c%s'i %s'te ifade ediyor"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "muhtemelen kasdedilen: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ", %c gizleniyor"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " %s te"
 
-#: src/scan-code.l:472
-#, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+#: src/scan-code.l:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ", $%d de orta-kural eyleminden erişilemiyor"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
-msgstr "tam sayý kapsam dýþý: %s"
+msgstr "tam sayı kapsam dışı: %s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "geçersiz yönerge: %s"
+msgstr "geçersiz referans: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
+"'%c'den sonra sözdizimi hatası, tamsayı, harf, '_', '[' veya '$' "
+"bekleniyor"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "sembol üründe $%d den önce bulunamadı: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "sembol üründe bulunamadı: %.*s"
 
-#: src/scan-code.l:648
-#, fuzzy, c-format
+#: src/scan-code.l:532
+#, c-format
 msgid "misleading reference: %s"
-msgstr "%s'in önceliði tekrar tanýmlanýyor"
+msgstr "yanıltıcı referans: %s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "%s argümaný, %s için belirsiz"
+msgstr "belirsiz referans: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
+msgstr "tiplenmemiş gramer içinde verilen açık tip"
+
+#: src/scan-code.l:639
+#, c-format
+msgid "$$ for the midrule at $%d of %s has no declared type"
+msgstr "ortakural için $$, $%d'inde %s'in tanımlı bir tipe sahip değil"
+
+#: src/scan-code.l:645
+#, c-format
+msgid "$$ of %s has no declared type"
+msgstr "$$'i %s'in tanımlı bir tipe sahip değil"
+
+#: src/scan-code.l:671
+#, c-format
+msgid "$%s of %s has no declared type"
+msgstr "$%s'i %s'in tanımlı bir tipe sahip değil "
+
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
 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
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "fazladan `,' boþluk olarak algýlandý"
+msgstr "fazladan `,' boşluk olarak algılandı"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr "geçersiz yönerge: %s"
+msgstr "geçersiz yönerge: %s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "geçersiz yönerge: %s"
+msgstr "geçersiz tanımlayıcı: %s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "geçersiz karakter: %s"
+msgstr[0] "geçersiz karakter"
+msgstr[1] "geçersiz karakterler"
 
-#: 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
+#: src/scan-gram.l:383
 #, c-format
 msgid "invalid null character"
-msgstr "geçersiz 'null' karakter"
+msgstr "geçersiz 'null' karakter"
 
-#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
-#, fuzzy, c-format
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "parantez içindeki isimde beklenmeyen tanımlayıcı: %s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "bir tanımlayıcı bekleniyor"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "parantez içindeki isimde geçersiz karakter"
+msgstr[1] "parantez içindeki isimde geçersiz karakterler"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "boş karakter dizgesi"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "karakter dizgesinde fazladan karakterler"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "geçersiz karakter: %s"
+msgstr "\\-escape den sonra geçersiz sayı: %s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "geçersiz karakter: %s"
+msgstr "\\-escape den sonra geçersiz karakter: %s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr ""
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "dosyanýn sonunda eksik `%s'"
+msgstr "dosyanın sonunda eksik %s"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "satýr sonunda eksik `%s'"
+msgstr "satır sonunda eksik %s"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "iskelette kapatılmamış %s direktifi"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "iskelette %s direktifi için çok az sayıda argüman"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "iskelette %s direktifi için çok fazla argüman"
 
-#: src/symlist.c:211
-#, fuzzy, c-format
-msgid "invalid $ value: $%d"
-msgstr "geçersiz deðer: %s"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc sembol isimlerinde tire kullanılmasına izin vermez: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
-msgstr "girdi gramerde çok fazla simge var (sýnýr: %d)"
+msgstr "girdi gramerde çok fazla simge var (sınır: %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr "%2$s için tekrar %1$s bildirimi"
+msgstr "%2$s için tekrar %1$s bildirimi"
 
-#: src/symtab.c:164
-#, fuzzy, c-format
+#: src/symtab.c:313
+#, c-format
 msgid "%s redeclaration for <%s>"
-msgstr "%2$s için tekrar %1$s bildirimi"
+msgstr "%s yeniden tanımlama <%s> için"
 
-#: src/symtab.c:332
-#, c-format
-msgid "symbol %s redefined"
-msgstr "%s simgesi tekrar tanýmlanmýþ"
-
-#: src/symtab.c:346
+#: src/symtab.c:325
 #, fuzzy, c-format
-msgid "symbol %s redeclared"
-msgstr "%s simgesi tekrar tanýmlanmýþ"
+msgid "symbol %s redeclared as a token"
+msgstr "sembol %s yeniden bildirildi"
 
-#: 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "sembol %s yeniden bildirildi"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"simge %s kullanılmış, fakat andaç olarak tanımlanmamış ve kuralları yok"
+
+#: src/symtab.c:380
 #, 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"
+"simge %s kullanılmış, fakat andaç olarak tanımlanmamış ve kuralları yok"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "sembol %s yeniden bildirildi"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "kullanıcı andacı %s tekrar tanımlanıyor"
+
+#: src/symtab.c:578
 #, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "kullanıcı andacı %s tekrar tanımlanıyor"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "yararsız %s tip <%s> için"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "tip <%s> kullanılmış, fakat hiçbir simge ile ilişkilendirilmemiş"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
+#, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr "simge `%s', yalýn dizge olarak birden fazla kullanýlmýþ"
+msgstr "sembol %s, yalın dizge olarak birden fazla kullanılmış"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "simge `%s', birden fazla yalýn dizgeye atanmýþ"
+msgstr "sembol %s birden fazla yalın dizgeye atanmış"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "%s için tekrar tip bildirimi"
+msgstr "kullanıcı simge sayısı %d yeniden bildirimi %s için  "
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "ilk bildirim"
+msgstr "%s için önceki bildirim"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
-msgstr "baþlangýç simgesi %s tanýmlanmamýþ"
+msgstr "başlangıç simgesi %s tanımlanmamış"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr "baþlangýç simgesi %s bir andaç"
+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
+#: src/symtab.c:1294
 #, c-format
-msgid "removing of '%s' failed"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "%s için yararsız önceliklendirme ve ilişkilendirme"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#: src/symtab.c:1297
 #, c-format
-msgid "creation of a temporary file failed"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "%s için yararsız önceliklendirme"
 
-#: djgpp/subpipe.c:127
+#: src/symtab.c:1301
 #, c-format
-msgid "saving stdin failed"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "%s için yararsız ilişkisellik, %%precedence kullanın"
 
-#: 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ý."
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "gramerde terminal olmayan yararsız: %s"
 
-#: lib/bitset_stats.c:261
-#, fuzzy, c-format
-msgid "bad stats file size\n"
-msgstr "Ýstatistik dosyasý büyüklüðü yanlýþ.\n"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "geçersiz yönerge: %s kullan"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
 #, fuzzy
-msgid "cannot write stats file"
-msgstr "Ýstatistik dosyasýna yazýlamadý."
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Uyarı kategori şunları içerir:\n"
+#~ "  'midrule-values'    tanımlanmamış veya kullanılmayan midrule "
+#~ "değerleri\n"
+#~ "  'yacc'              POSIX Yacc ile uyumsuzluklar\n"
+#~ "  'conflicts-sr'      S/R çakışmaları (varsayılan olarak etkin)\n"
+#~ "  'conflicts-rr'      R/R çakışmaları (varsayılan olarak etkin)\n"
+#~ "  'deprecated'        eskimiş yapılar\n"
+#~ "  'empty-rule'        %empty içermeyen boş kurallar\n"
+#~ "  'precedence'        yararsız önceliklendirme ve iliskisellik\n"
+#~ "  'other'             tüm diğer uyarılar (varsayılan olarak etkin)\n"
+#~ "  'all'               'yacc' harici tüm uyarılar\n"
+#~ "  'no-KATEGORİ'       KATEGORİdeki tüm uyarıları kapat\n"
+#~ "  'none'              tüm uyarıları kapat\n"
+#~ "  'error[=KATEGORİ]'  tüm uyarılara hata olarak davran\n"
 
-#: lib/bitset_stats.c:292
+# DUZELT: cevrilmemis iki mesaj var
+#~ 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 ""
+#~ "ŞEYLER aşağıdaki anahtar sözcüklerden virgülle ayırarak "
+#~ "oluşturulabilir:\n"
+#~ "  `state'        durumları açıkla\n"
+#~ "  `itemset'      çekirdek öge kümelerini kapanışları ile tamamla\n"
+#~ "  `lookahead'    öndeğerleri öğelere açıkça ilişkilendir\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"
+
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "Ýstatistik dosyasý yazmak için açýlamadý."
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "ÖZELLİK şunları içerebilen virgülle ayrılmış kelime listesidir:\n"
+#~ "  'caret'        hataları caret larla göster\n"
+#~ "  'all'          üsttekilerin tümü\n"
+#~ "  'none'         üsttekilerin tümünü engelle\n"
+#~ "  "
 
-#: lib/closeout.c:112
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "geçersiz argüman: %2$s için %1$s"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "%s argümanı, %s için belirsiz"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "Geçerli argümanlar:"
+
+#~ msgid "write error"
+#~ msgstr "yazma hatası"
+
+#~ msgid "Unknown system error"
+#~ msgstr "Bilinmeyen sistem hatası"
+
 #, fuzzy
-msgid "write error"
-msgstr "ölümcül hata: "
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: '-W %s' seçeneği belirsiz\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Bilinmeyen sistem hatasý"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: '%s' seçeneği belirsiz; olasılıklar:"
 
-#: 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"
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: '%c%s' seçeneği bilinmiyor\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"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: seçenek '%c%s' 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"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: '--%s' seçeneği bir argümanla 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"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: geçersiz seçenek -- '%c'\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"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: seçenek bir argümanla kullanılır -- '%c'\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"
+#~ msgid "memory exhausted"
+#~ msgstr "bellek tükendi"
 
-#: 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "yönlendirme (pipe) oluşturulamadı"
 
-#: 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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s altsüreci başarısız"
 
-#: 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"
+#~ msgid "`"
+#~ msgstr "`"
 
-#: 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"
+#~ msgid "'"
+#~ msgstr "'"
 
-#: 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"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "Çalışma süresi (saniye)\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "bellek tükendi"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle başarısız"
 
-#: 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"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "fd %d geri yüklenemiyor: dup2 başarısız"
 
-#: 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 ""
+#~ msgid "%s subprocess"
+#~ msgstr "%s altsüreç"
 
-#. 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 "`"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s altsüreci %d ölümcül sinyali aldı"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u serbest bırakılan (%.2f%%).\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Çalýþma süresi (saniye)\n"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u önbellek kullanımı (%.2f%%)\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TOPLAM                : "
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u önbellek kullanımı (%.2f%%)\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "%s'te geçen zaman: %ld.%06ld (%ld%%)\n"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u önbellek kullanımı (%.2f%%)\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr ""
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr ""
+#~ msgid "count log histogram\n"
+#~ msgstr "sayı histogramı\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr ""
+#~ msgid "size log histogram\n"
+#~ msgstr "büyükük histogramı\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr ""
+#~ msgid "density histogram\n"
+#~ msgstr "yogunluk histogramı\n"
 
-#~ msgid "state %d"
-#~ msgstr "durum %d"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset istatistikleri:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Toplam çalıştırılan = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "istatistik dosyası okunamıyor"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "yanlış istatistik dosyası boyutu\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "istatistik dosyası yazılamıyor"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "istatistik dosyası yazmak için açılamıyor"
+
+#, fuzzy
+#~| msgid "unexpected end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "beklenmeyen dosya sonu"
+
+#, fuzzy
+#~| msgid "unterminated string"
+#~ msgid "translatable string"
+#~ msgstr "sonlandırılmamış dizge"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "geçersiz tanımlayıcı: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "boş karakter dizgesi"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "geçersiz tanımlayıcı: %s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "geçersiz tanımlayıcı: %s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "boş karakter dizgesi"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "%s simgesi tekrar tanımlanmış"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "'%s' kaldırılması başarısız"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "geçici bir dosya oluşturulamadı"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "standart girdi kaydedilemedi"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "standart çıktı kaydedilemedi"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "geçici dosya açılamadı"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "bison'un standart çıktısı geçici dosyaya yeniden yönlendirilemedi"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "m4'ün standart girdisi geçici dosyadan yönlendirilemedi"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "geçici bir dosya açılamadı"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "m4'ün standart çıktısı geçici bir dosyaya yönlendirilemedi"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "alt program '%s' kesildi"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "yan program '%s' bulunamadı"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "bison'un standart girdisini geçici dosyadan yeniden yönlendirme başarÄ"
+#~ "±sız"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " tip %d %s'dir\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: '--%s' seçeneği argümansız kullanılır\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: '--%s' seçeneği bilinmiyor\n"
+
+#~ 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"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: '-W %s' seçeneği bir argümanla kullanılır\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TOPLAM                : "
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "%s'te geçen zaman: %ld.%06ld (%ld%%)\n"
+
+#~ msgid "expected %d shift/reduce conflict"
+#~ msgid_plural "expected %d shift/reduce conflicts"
+#~ msgstr[0] "%d öteleme/indirgeme çelişkisi bekleniyor"
 
 #, 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"
+#~ 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"
+#~ "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 "empty"
+#~ msgstr "boş"
+
+#~ msgid "state %d"
+#~ msgstr "durum %d"
 
 #~ msgid "Rules never reduced"
-#~ msgstr "Hiç indirgenmeyen kurallar"
+#~ msgstr "Hiç indirgenmeyen kurallar"
 
 #~ msgid "useless rule"
 #~ msgstr "gereksiz kural"
 
 #~ msgid "useless nonterminal: %s"
-#~ msgstr "gereksiz deðiþken simge: %s"
+#~ msgstr "gereksiz değişken simge: %s"
 
 #~ msgid "Useless nonterminals"
-#~ msgstr "Gereksiz deðiþken simgeler"
+#~ msgstr "Gereksiz değişken simgeler"
 
 #~ msgid "Terminals which are not used"
-#~ msgstr "Kullanýlmayan sabit simgeler"
+#~ 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"
+#~ msgstr[0] "%d kural hiç indirgenmedi\n"
 
 #~ msgid "%d useless nonterminal"
 #~ msgid_plural "%d useless nonterminals"
-#~ msgstr[0] "%d gereksiz deðiþken simge"
+#~ msgstr[0] "%d gereksiz değişken simge"
 
 #~ msgid " and "
 #~ msgstr " ve "
@@ -1193,44 +1519,50 @@
 #~ 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"
+#~ msgstr "tanınmayan önceleme dizgesi: %s"
+
+#, fuzzy
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "geçersiz değer: %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ýþ"
+#~ msgstr "%s ve %s andaçlarının her ikisi %d sayısına atandmış"
+
+#, fuzzy
+#~ msgid "redeclaration for default %%destructor"
+#~ msgstr "%2$s için tekrar %1$s bildirimi"
+
+#, fuzzy
+#~ msgid "redeclaration for default %%printer"
+#~ msgstr "%2$s için tekrar %1$s bildirimi"
 
 #~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s: kural dýþý seçenek -- %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ý"
+#~ msgstr "alt program `%s' çalıştırılamadı"
 
 #~ msgid "warning: "
-#~ msgstr "uyarý: "
+#~ msgstr "uyarı: "
 
 #~ msgid "POSIX forbids declarations in the grammar"
-#~ msgstr "Gramer içindeki bildirimler POSIX'e uygun deðildir"
+#~ 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"
+#~ msgstr "`%s' içinde eksik `{'"
 
 #~ msgid "subsidiary program `%s' failed (exit status %d)"
-#~ msgstr "alt program `%s' baþarýsýz (hata kodu: %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"
+#~ 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"
+#~ 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)"
+#~ msgstr "çok fazla durum (en fazla %d)"
 
 #~ msgid "reduce"
 #~ msgstr "indirgeme"
@@ -1238,91 +1570,84 @@
 #~ 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"
+#~ msgstr "%d durumu içerir"
 
 #~ msgid "conflicts: "
-#~ msgstr "çeliþkiler: "
+#~ msgstr "çelişkiler: "
 
 #~ msgid "%s contains "
-#~ msgstr "%s içerir"
+#~ msgstr "%s içerir"
 
 #~ msgid "`%s' is no longer supported"
-#~ msgstr "`%s' artýk desteklenmeyecek"
+#~ msgstr "`%s' artık desteklenmeyecek"
 
 #~ msgid "%s: no grammar file given\n"
-#~ msgstr "%s: gramer dosyasý verilmemiþ\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"
+#~ msgstr "%s: '%s' den sonraki argümanlar yoksayıldı\n"
 
 #~ msgid "too many gotos (max %d)"
-#~ msgstr "gotos çok fazla (en fazla %d)"
+#~ msgstr "gotos çok fazla (en fazla %d)"
 
 #~ msgid "unexpected `/' found and ignored"
-#~ msgstr "beklenmeyen `/' bulundu ve yoksayýldý"
+#~ msgstr "beklenmeyen `/' bulundu ve yoksayıldı"
 
 #~ msgid "unterminated comment"
-#~ msgstr "sonlandýrýlmamýþ açýklama"
-
-#~ msgid "unexpected end of file"
-#~ msgstr "beklenmeyen dosya sonu"
+#~ msgstr "sonlandırılmamış açıklama"
 
 #~ msgid "unescaped newline in constant"
-#~ msgstr "sabit içinde kaçamayan yeni satýr"
+#~ 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'"
+#~ 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'"
+#~ 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"
+#~ 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ý"
+#~ msgstr "dosya sonunda sonlandırılmamış tip adı"
 
 #~ msgid "unterminated type name"
-#~ msgstr "sonlandýrýlmamýþ tip ismi"
+#~ msgstr "sonlandırılmamış tip ismi"
 
 #~ msgid "use \"...\" for multi-character literal tokens"
-#~ msgstr "çok-karakterli yazýn andaçlarý için \"...\" kullan"
+#~ msgstr "çok-karakterli yazın andaçları için \"...\" kullan"
 
 #~ msgid "`%s' supports no argument: %s"
-#~ msgstr "`%s' argüman %s'i desteklemez"
+#~ msgstr "`%s' argüman %s'i desteklemez"
 
 #~ msgid "`%s' requires an argument"
-#~ msgstr "`%s' bir argüman gerektirir"
+#~ 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"
+#~ 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"
+#~ "    $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"
+#~ 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"
+#~ 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"
+#~ msgstr "    $default\tindirgeme kural %d (%s)'i kullanıyor\n"
 
 #~ msgid "    $default\taccept\n"
 #~ msgstr "    $default\tonayla\n"
@@ -1331,49 +1656,46 @@
 #~ msgstr "    EYLEM YOK\n"
 
 #~ msgid "Number, Line, Rule"
-#~ msgstr "Sayý, Satýr, Kural"
+#~ msgstr "Sayı, Satır, Kural"
 
 #~ msgid "  %3d %3d %s ->"
 #~ msgstr "  %3d %3d %s ->"
 
 #~ msgid "   Skipping to next \\n"
-#~ msgstr "   Sonrakine atlanýyor \\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"
+#~ msgstr "   Sonraki  %c'ye atlanıyor"
 
 #~ msgid "%s is invalid"
-#~ msgstr "%s geçersizdir"
+#~ msgstr "%s geçersizdir"
 
 #~ msgid "unterminated `%{' definition"
-#~ msgstr "`%{' tanýmlamasý sonlandýrýlmamýþ"
+#~ 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"
+#~ msgstr "`%s' %s içinde geçersizdir"
 
 #~ msgid "%type declaration has no <typename>"
-#~ msgstr "%type bildirimi <tipadý>'na sahip deðil"
+#~ 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'"
+#~ 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"
+#~ msgstr "geçersiz metin (%s) - sayı tanıtıcıdan sonra olmalıdır"
 
 #~ msgid "unmatched %s"
-#~ msgstr "eþlenemeyen %s"
+#~ msgstr "eşlenemeyen %s"
 
 #~ msgid "argument of %%expect is not an integer"
-#~ msgstr "%%expect'in argümaný bir tamsayý deðildir"
+#~ 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"
+#~ 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"
@@ -1382,28 +1704,28 @@
 #~ 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"
+#~ 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"
+#~ msgstr "gramer düşey çubuk ile başlıyor"
 
 #~ msgid "previous rule lacks an ending `;'"
-#~ msgstr "önceki kuralda bir bitiþ `;' eksik"
+#~ msgstr "önceki kuralda bir bitiş `;' eksik"
 
 #~ msgid "two @prec's in a row"
-#~ msgstr "bir satýrda iki @prec"
+#~ msgstr "bir satırda iki @prec"
 
 #~ msgid "%%guard present but %%semantic_parser not specified"
-#~ msgstr "%%guard sunulmuþ fakat %%semantic_parser belirlenmemiþ"
+#~ msgstr "%%guard sunulmuş fakat %%semantic_parser belirlenmemiş"
 
 #~ msgid "two actions at end of one rule"
-#~ msgstr "bir kuralýn sonunda iki eylem"
+#~ msgstr "bir kuralın sonunda iki eylem"
 
 #~ msgid "maximum table size (%d) exceeded"
-#~ msgstr "en büyük tablo uzunluðu (%d) aþýldý"
+#~ 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"
+#~ msgstr "sonlandırılmamış %guard yantümcesi"
diff --git a/po/uk.gmo b/po/uk.gmo
index ea20e55..49db0dc 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index fef0d25..6e627eb 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,309 +3,463 @@
 # 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.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2018, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.6.90\n"
+"Project-Id-Version: bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-22 14:50+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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"
+"X-Generator: Lokalize 20.03.70\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "Конфлікти З/В (типово увімкнено)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "Конфлікти В/В (типово увімкнено)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "альтернативи рядка не пов'язано із символом"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "застарілі конструкції"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "порожні правила без %empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "невстановлені або невикористані проміжні значення"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "непотрібна пріоритетність або прив’язка"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "несумісності із Yacc з POSIX"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "усі інші попередження (типово увімкнено)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "усі попередження, окрім «dangling-alias» та «yacc»"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "вимкнути попередження з категорії КАТЕГОРІЯ"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "вимкнути усі попередження"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "вважати попередження помилками"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "Категорії попереджень:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "попередження"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "помилка"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "критична помилка: "
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
-msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний зсувом"
+msgid "POSIX Yacc does not support %s"
+msgstr "У Yacc POSIX не передбачено підтримки %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний виводу"
+msgid "deprecated directive: %s, use %s"
+msgstr "застаріла інструкція: %s, скористайтеся %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
-msgstr "    Конфлікт між правилом %d та лексемою %s розв'язаний як помилка"
+msgid "duplicate directive"
+msgstr "дублювання інструкції"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "конфлікти: %d зсуву/виводу, %d виводу/виводу\n"
+msgid "duplicate directive: %s"
+msgstr "дублювання інструкції: %s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "конфлікти: %d зсуву/виводу\n"
+msgid "previous declaration"
+msgstr "попереднє оголошення"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "конфлікти: %d виводу/виводу\n"
+msgid "only one %s allowed per rule"
+msgstr "у правилі допускається лише один %s"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "Конфлікт між правилом %d та лексемою %s розв'язаний зсувом"
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "Конфлікт між правилом %d та лексемою %s розв'язаний виводом"
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "Конфлікт між правилом %d та лексемою %s розв'язаний як помилка"
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Стан %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "конфлікти: %d зсуву/виводу, %d виводу/виводу\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "конфлікти: %d зсуву/виводу\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "конфлікти: %d виводу/виводу\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "конфлікти зсуву/виводу для правила %d: виявлено: %d, мало бути: %d"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "конфлікти виводу/виводу для правила %d: виявлено: %d, мало бути: %d"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr застосовується лише до аналізатору GLR"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, 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 конфлікт зсуву/виводу"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "конфлікти зсуву/виводу: виявлено: %d, мало бути: %d"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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 конфлікт виводу/виводу"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d конфлікт зсуву/виводу"
+msgstr[1] "%d конфлікти зсуву/виводу"
+msgstr[2] "%d конфліктів зсуву/виводу"
+msgstr[3] "%d конфлікт зсуву/виводу"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "конфлікти виводу/виводу: виявлено: %d, мало бути: %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d конфлікт виводу/виводу"
+msgstr[1] "%d конфлікти виводу/виводу"
+msgstr[2] "%d конфліктів виводу/виводу"
+msgstr[3] "%d конфлікт виводу/виводу"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: не вдалося відкрити"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "помилка введення-виведення"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "не вдається закрити файл"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "відмовлено у перезаписі файла вхідних даних %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "суперечливий вивід у файл %s"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Використовуйте `%s --help' для додаткової інформації.\n"
+msgid "%s: cannot backup"
+msgstr "%s: не вдалося створити резервну копію"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr "розфарбувати виведені дані"
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "не розфарбовувати виведені дані"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "розфарбувати, якщо пристроєм виведення є термінал (tty)"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "Можна визначати такі УМОВИ:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "описати стани"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr "доповнити набори основних записів завершеннями"
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr "явним чином пов'язати елементи для пошуку вперед із записами"
+
+#: src/getargs.c:212
+msgid "describe shift/reduce conflicts solving"
+msgstr "описувати розв'язання конфліктів зсуву/виводу"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "включити усі вказані вище відомості"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "вимкнути звітування"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+"ЕЛЕМЕНТИ — це список відокремлених комами слів, до якого може бути включено:"
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+"ТРАСУВАННЯ — це список відокремлених комами слів, до якого може бути "
+"включено:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr "показати помилки за допомогою каре"
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "показати виправлення для читання комп'ютером"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "не створювати файлів-результатів"
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr "усе, що наведено вище"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "вимкнути усе, що наведено вище"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+"МОЖЛИВОСТІ — це список відокремлених комами слів, до якого може бути "
+"включено:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "Віддайте команду «%s --help», щоб дізнатися більше.\n"
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Використання: %s [КЛЮЧІ]... ФАЙЛ\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
 "Створити детерміністичний аналізатор LR або узагальнений LR (GLR) з\n"
-"використанням LALR(1), IELR(1) або канонічних таблиць LR(1). Підтримку\n"
-"IELR(1) та канонічних таблиць LR(1) ще недостатньо перевірено.\n"
-"\n"
+"використанням LALR(1), IELR(1) або канонічних таблиць LR(1).\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr ""
 "Обов’язкові аргументи для довгих форм запису параметрів є обов’язковими і "
 "для скорочених форм.\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "Те саме стосується необов’язкових аргументів.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
-"\n"
 "Режими роботи:\n"
 "  -h, --help                 вивести цю довідку і завершити роботу\n"
 "  -V, --version              вивести інформацію щодо версії і завершити "
 "роботу\n"
 "      --print-localedir      вивести назву каталогу, де містяться залежні "
-"від локалі дані\n"
+"від локалі\n"
+"                             дані, і вийти\n"
 "      --print-datadir        вивести назву каталогу, де містяться шаблони та "
-"XSLT\n"
-"  -y, --yacc                 імітувати Yacc POSIX\n"
-"  -W, --warnings[=КАТЕГОРІЯ] виводити попередження з категорії КАТЕГОРІЯ\n"
-"  -f, --feature[=МОЖЛИВІСТЬ] задіяти різноманітні можливості\n"
+"XSLT,\n"
+"                             і вийти\n"
+"  -u, --update               застосувати виправлення до початкового файла "
+"граматики і вийти\n"
+"  -f, --feature[=МОЖЛИВОСТІ] задіяти різноманітні можливості\n"
 "\n"
 
-#: src/getargs.c:329
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"Діагностика:\n"
+"  -W, --warnings[=КАТЕГОРІЯ] повідомляти про попередження з вказаної "
+"категорії\n"
+"      --color[=УМОВА]        визначає умову розфарбовування діагностичних "
+"даних\n"
+"      --style=ФАЙЛ           визначає файл правил CSS для розфарбовування "
+"даних\n"
+"\n"
+
+#: src/getargs.c:400
 #, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
-"Аналізатор:\n"
+"Коригування роботи аналізатора:\n"
 "  -L, --language=МОВА              вказати мову програмування виведених "
 "даних\n"
-"                                   (недостатньо перевірена можливість)\n"
 "  -S, --skeleton=ФАЙЛ              вказати шаблон, який слід використати\n"
 "  -t, --debug                      налаштувати аналізатор для діагностики\n"
+"                                   те саме, що і «-Dparse.trace»\n"
 "      --locations                  увімкнути підтримку місць\n"
-"  -D, --define=НАЗВА[=ЗНАЧЕННЯ]    відповідник `%define НАЗВА \"ЗНАЧЕННЯ\"'\n"
-"  -F, --force-define=НАЗВА[=ЗНАЧЕННЯ] перевизначити `%define НАЗВА \"ЗНАЧЕННЯ"
-"\"'\n"
+"  -D, --define=НАЗВА[=ЗНАЧЕННЯ]    відповідник «%define НАЗВА \"ЗНАЧЕННЯ\"»\n"
+"  -F, --force-define=НАЗВА[=ЗНАЧЕННЯ] перевизначити «%define НАЗВА \"ЗНАЧЕННЯ"
+"\"»\n"
 "  -p, --name-prefix=ПРЕФІКС        додавати ПРЕФІКС до зовнішніх символів,\n"
-"                                   слід надавати перевагу '-Dapi."
-"prefix=ПРЕФІКС'\n"
-"  -l, --no-lines                   не створювати інструкцій `#line'\n"
+"                                   слід надавати перевагу «-Dapi."
+"prefix=ПРЕФІКС»\n"
+"  -l, --no-lines                   не створювати інструкцій «#line»\n"
 "  -k, --token-table                включити таблицю назв елементів\n"
+"  -y, --yacc                       імітувати роботу Yacc з POSIX\n"
 
-#: src/getargs.c:346
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"Виведення до файлів:\n"
 "      --defines[=ФАЙЛ]       створити також файл заголовків\n"
 "  -d                         подібне, але без можливості вказати ФАЙЛ (для "
 "Yacc POSIX)\n"
 "  -r, --report=ЕЛЕМЕНТИ      також створити автоматичні записи подробиць\n"
 "      --report-file=ФАЙЛ     записати звіт до ФАЙЛа\n"
-"  -v, --verbose              те саме, що і `--report=state'\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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Сповіщайте про помилки за адресою <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "Домашня сторінка %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
 msgstr ""
 "Загальна довідка щодо використання програмного забезпечення GNU: <http://www."
@@ -316,32 +470,32 @@
 #. 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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
 msgstr ""
 "Звіти щодо вад у перекладах слід надсилати за адресами, вказаними тут: "
 "<http://translationproject.org/team/>.\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
 msgstr ""
 "З повною документацією можна ознайомитися за допомогою команди info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Автори: Роберт Корбет та Річард Столмен.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "Copyright (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -352,39 +506,40 @@
 "гарантій працездатності\n"
 "або придатності для певної мети.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
 msgstr "не можна використовувати декілька оголошень шаблонів"
 
-#: src/getargs.c:476
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: некоректна мова"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "визначення декількох оголошень мов є некоректним"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: пропущено операнд"
+msgid "deprecated option: %s, use %s"
+msgstr "застарілий параметр: %s, скористайтеся замість нього %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "пропущено операнд"
+
+#: src/getargs.c:852
 #, c-format
 msgid "extra operand %s"
 msgstr "зайвий операнд %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "порожній"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Граматика"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -397,212 +552,276 @@
 "// Домашня сторінка: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "переповнення номеру рядка"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "переповнення номеру стовпчика"
 
-#: src/main.c:146
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "переповнення номеру байта"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "..."
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
 msgstr "правило є зайвим у аналізаторі через конфлікти"
 
-#: src/muscle-tab.c:450
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+"можна застосувати виправлення. Запустіть ще раз із параметром «--update»."
+
+#: src/muscle-tab.c:532
 #, c-format
 msgid "%%define variable %s redefined"
 msgstr "змінну %%define %s перевизначено"
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
 msgstr "попереднє визначення"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: невизначена змінна %%define %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "змінну %%define «%s» мало бути поєднано зі значеннями «{...}»"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "змінну %%define «%s» мало бути поєднано зі значеннями ключових слів"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "змінну %%define «%s» мало бути поєднано зі значеннями «\"...\"»"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
 msgstr "некоректне значення булевої змінної %%define %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
 msgstr "некоректне значення змінної %%define %s: %s"
 
-#: src/muscle-tab.c:613
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
 msgstr "прийняте значення: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "символьні літерали не можуть бути нетермінальними"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "символьні літерали не можна використовувати разом із %s"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "визначення %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "у описі параметра відсутній ідентифікатор"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " тип %d є %s\n"
+msgid "invalid version requirement: %s"
+msgstr "некоректна вимога щодо версії: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "зсув, та перехід у стан %d\n"
+msgid "require bison %s, but have %s"
+msgstr "потрібна версія bison %s, а маємо лише %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, c-format
 msgid "State %d"
 msgstr "Стан %d"
 
-#: src/print.c:409
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "зсув, та перехід у стан %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "перехід у стан %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "помилка (не асоціативна)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "вивід з використанням правила %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "прийняти"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "Термінальні символи з правилами, у яких вони з'являються"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "Нетермінальні символи з правилами, у яких вони з'являються"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
-msgstr " ліворуч:"
+#: src/print.c:416
+msgid "on left:"
+msgstr "ліворуч:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr " праворуч:"
+#: src/print.c:425
+msgid "on right:"
+msgstr "праворуч:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "Правила є зайвими у аналізаторі через конфлікти"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "багатократні описи %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
 msgstr "проігноровано дублікат назви символу %s"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "правило задано для %s, який є лексемою"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "конфлікт типів на типовій дії: <%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr ""
 "порожнє правило для типізованого нетермінального символу, та відсутня дія"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "не використане значення: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "не встановлене значення: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty у непорожньому правилі"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "порожнє правило без %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "у правилі допускається лише один %s"
+msgid "only midrule actions can be typed: %s"
+msgstr "типізованими можуть бути лише проміжні дії: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s впливає лише на аналізатори GLR"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "за %s повинно слідувати додатне число"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "У Yacc POSIX не передбачено підтримки типізованих проміжних дій"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "правило надто довге"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "відсутні правила у вхідній граматиці"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "зайве правило у граматиці"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
 msgstr "нетермінал є зайвим у граматиці: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
 msgstr "Нетермінали зайві у граматиці"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
 msgstr "Невикористані термінали у граматиці"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Зайві правила у граматиці"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
@@ -611,7 +830,7 @@
 msgstr[2] "%d зайвих нетерміналів у граматиці"
 msgstr[3] "%d зайвий нетермінал у граматиці"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
@@ -620,129 +839,119 @@
 msgstr[2] "%d зайвих правил у граматиці"
 msgstr[3] "%d зайве правило у граматиці"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "початковий символ %s не виводить жодного речення"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, 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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "посилається на: %c%s у %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "ймовірно мало бути: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", приховування %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
 msgstr " у %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule action at $%d"
 msgstr ", доступ з дії проміжного правила неможливий у $%d"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "вихід за межі діапазону цілого числа: %s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "некоректне посилання: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
 msgstr ""
 "синтаксична помилка після '%c'. Мало бути вказано ціле число, літеру, '_', "
 "'[' або '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
 msgstr "у продукції не знайдено символу до $%d: %.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
 msgstr "у продукції не знайдено символу: %.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "помилкове посилання: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "неоднозначне посилання: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
 msgstr "у нетипізованій граматиці явним чином вказано тип"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
 msgstr "$$ для проміжного правила у $%d %s немає оголошеного типу"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
 msgstr "$$ %s не має оголошеного типу"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
 msgstr "$%s %s не має оголошеного типу"
 
-#: src/scan-gram.l:149
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "декілька записів $%d із api.value.automove"
+
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
 msgstr "зайва кома, вважатиметься пробілом"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "некоректна директива: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "некоректний ідентифікатор: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
 msgstr[0] "некоректні символи"
@@ -750,17 +959,22 @@
 msgstr[2] "некоректні символи"
 msgstr[3] "некоректний символ"
 
-#: src/scan-gram.l:354
+#: src/scan-gram.l:383
+#, c-format
+msgid "invalid null character"
+msgstr "неприпустимий null-символ"
+
+#: src/scan-gram.l:437
 #, c-format
 msgid "unexpected identifier in bracketed name: %s"
 msgstr "неочікуваний ідентифікатор у назву у дужках: %s"
 
-#: src/scan-gram.l:376
+#: src/scan-gram.l:459
 #, c-format
 msgid "an identifier expected"
 msgstr "мало бути вказано ідентифікатор"
 
-#: src/scan-gram.l:381
+#: src/scan-gram.l:464
 msgid "invalid character in bracketed name"
 msgid_plural "invalid characters in bracketed name"
 msgstr[0] "некоректні символи у назві у дужках"
@@ -768,446 +982,496 @@
 msgstr[2] "некоректні символи у назві у дужках"
 msgstr[3] "некоректний символ у назві у дужках"
 
-#: src/scan-gram.l:481 src/scan-gram.l:502
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "У Yacc POSIX не передбачено підтримки рядкових літералів"
+
+#: src/scan-gram.l:557
 #, c-format
 msgid "empty character literal"
 msgstr "порожня символьна стала"
 
-#: src/scan-gram.l:486 src/scan-gram.l:507
+#: src/scan-gram.l:563
 #, 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
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "некоректне число після екранування \\: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "некоректний символ після екранування \\: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "У Yacc POSIX не передбачено підтримки шістнадцяткових літералів"
+
+#: src/scan-gram.l:962
 #, c-format
 msgid "missing %s at end of file"
 msgstr "не вистачає %s наприкінці файла"
 
-#: src/scan-gram.l:912
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "не вистачає %s наприкінці рядка"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
 msgstr "незавершена інструкція %s у шаблоні"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
 msgstr "занадто мало аргументів у інструкції %s шаблона"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "Yacc POSIX забороняє використання дефісів у назва символів: %s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "надто багато символів (лексеми плюс нетермінали); максимально %d"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "повторний опис %s для %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "повторний опис %s для <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "повторне визначення символу %s"
+msgid "symbol %s redeclared as a token"
+msgstr "символ %s визначений повторно як лексема"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "символ %s визначений повторно"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "символ %s визначений повторно як нетермінальний"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "перевизначення номера лексеми користувача для %s"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr ""
+"символ %s використовується, але не визначений як лексема та не має правил; "
+"ви мали на увазі %s?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
 msgstr ""
 "символ %s використовується, але не визначений як лексема та не має правил"
 
-#: src/symtab.c:415
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+"У стандарті POSIX для yacc %%type зарезервовано для нетермінальних значень"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "символ %s визначений повторно"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "нетермінальні записи не можна надавати як явні числа"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "перевизначення номера лексеми користувача для %s"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "номер елемента користувача для %s є надто великим"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "рядковий літерал %s, який не пов'язано із символом"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "непотрібне %s для типу <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "використано тип <%s>, але його не пов’язано з жодним символом"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "нетермінальні записи не можна надавати як альтернативу рядка"
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
 msgstr "символ %s використано декілька разів як сталий рядок символів"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
 msgstr "символ %s вказано декілька сталих рядків (літералів)"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
 msgstr "повторне оголошення елемента користувача з номером %d для %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "попереднє оголошення %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "номер елемента є надто великим"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "початковий символ %s невизначений"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
 msgstr "початковий символ %s є лексемою"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "повторне оголошення типового %%destructor з міткою"
+msgid "useless precedence and associativity for %s"
+msgstr "непотрібна пріоритетність або прив’язка для %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "повторне оголошення типового %%destructor без мітки"
+msgid "useless precedence for %s"
+msgstr "непотрібна пріоритетність для %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "повторне оголошення типового %%printer з міткою"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "непотрібна прив’язка для %s, скористайтеся %%precedence"
 
-#: src/symtab.c:980
-#, c-format
-msgid "redeclaration for default tagless %%printer"
-msgstr "повторне оголошення типового %%printer без мітки"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "застаріла інструкція, скористайтеся %s"
 
-#: djgpp/subpipe.c:63 djgpp/subpipe.c:286 djgpp/subpipe.c:288
-#, c-format
-msgid "removing of '%s' failed"
-msgstr "спроба вилучення «%s» зазнала невдачі"
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Категорії попереджень:\n"
+#~ "  «conflicts-sr»    S/R-конфлікти (типово увімкнено)\n"
+#~ "  «conflicts-rr»    R/R conflicts (типово увімкнено)\n"
+#~ "  «deprecated»      застарілі конструкції\n"
+#~ "  «empty-rule»      порожні правила без %empty\n"
+#~ "  «midrule-values»  невстановлені або невикористані проміжні значення\n"
+#~ "  «precedence»      непотрібні пріоритетності та прив’язки\n"
+#~ "  «yacc»            несумісності з Yacc POSIX\n"
+#~ "  «other»           всі інші попередження (типово увімкнено)\n"
+#~ "  «all»             всі попередження\n"
+#~ "  «no-КАТЕГОРІЯ»    вимкнути попередження з КАТЕГОРІЇ\n"
+#~ "  «none»            вимкнути всі попередження\n"
+#~ "  «error»           вважати попередження помилками\n"
+#~ "\n"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
-#, c-format
-msgid "creation of a temporary file failed"
-msgstr "спроба створення тимчасового файла зазнала невдачі"
+#~ 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"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "спроба збереження stdin зазнала невдачі"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "МОЖЛИВОСТІ — список слів, відокремлених комами. Можливі слова:\n"
+#~ "  «caret», «diagnostics-show-caret»\n"
+#~ "    показати помилки, пов’язані з символами ^\n"
+#~ "  «fixit», «diagnostics-parseable-fixits»\n"
+#~ "    показати придатні до читання комп'ютером виправлення\n"
+#~ "  'syntax-only'\n"
+#~ "    не створювати файла результатів\n"
+#~ "  «all»\n"
+#~ "    всі, які вказано вище\n"
+#~ "  «none»\n"
+#~ "    вимкнути всі вказані вище\n"
+#~ "  "
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "спроба збереження stdout зазнала невдачі"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "неприпустимий аргумент %s для %s"
 
-#: djgpp/subpipe.c:153 djgpp/subpipe.c:197 djgpp/subpipe.c:258
-#, c-format
-msgid "opening of tmpfile failed"
-msgstr "спроба відкриття файла тимчасових даних зазнала невдачі"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "неоднозначний аргумент %s для %s"
 
-#: djgpp/subpipe.c:157
-#, c-format
-msgid "redirecting bison's stdout to the temporary file failed"
-msgstr ""
-"спроба переспрямовування стандартного виведення bison до тимчасового файла "
-"зазнала невдачі"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Допустимі аргументи:"
 
-#: djgpp/subpipe.c:201
-#, c-format
-msgid "redirecting m4's stdin from the temporary file failed"
-msgstr ""
-"спроба переспрямовування стандартного джерела даних m4 з тимчасового файла "
-"зазнала невдачі"
+#~ msgid "write error"
+#~ msgstr "помилка запису"
 
-#: djgpp/subpipe.c:212
-#, c-format
-msgid "opening of a temporary file failed"
-msgstr "не вдалося відкрити файл тимчасових даних"
+#~ msgid "Unknown system error"
+#~ msgstr "Невідома системна помилка"
 
-#: djgpp/subpipe.c:218
-#, c-format
-msgid "redirecting m4's stdout to a temporary file failed"
-msgstr ""
-"спроба переспрямовування стандартного виведення m4 до тимчасового файла "
-"зазнала невдачі"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: параметр «%s%s» не є однозначним\n"
 
-#: djgpp/subpipe.c:234
-#, c-format
-msgid "subsidiary program '%s' interrupted"
-msgstr "виконання допоміжної програми '%s' перервано"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: неоднозначний параметр «%s%s»; можливі варіанти:"
 
-#: djgpp/subpipe.c:241
-#, c-format
-msgid "subsidiary program '%s' not found"
-msgstr "не вдалося знайти допоміжну програму '%s'"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: невідомий параметр «%s%s»\n"
 
-#: djgpp/subpipe.c:265
-#, c-format
-msgid "redirecting bison's stdin from the temporary file failed"
-msgstr ""
-"спроба переспрямовування стандартного джерела даних bison з тимчасового "
-"файла зазнала невдачі"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: додавання аргументів до параметра «%s%s» не передбачено\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "неприпустимий аргумент %s для %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: до параметра «%s%s» слід додати аргумент\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "неоднозначний аргумент %s для %s"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: некоректний параметр — «%c»\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Допустимі аргументи:"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s: до параметра слід додати аргумент — «%c»\n"
 
-#: lib/bitset_stats.c:177
-#, c-format
-msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
-msgstr "%u bitset_allocs, %u звільнено (%.2f%%).\n"
+#~ msgid "memory exhausted"
+#~ msgstr "пам'ять вичерпано"
 
-#: lib/bitset_stats.c:180
-#, c-format
-msgid "%u bitset_sets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_sets, %u кешовано (%.2f%%)\n"
+#~ msgid "cannot create pipe"
+#~ msgstr "не вдалося створити канал"
 
-#: lib/bitset_stats.c:183
-#, c-format
-msgid "%u bitset_resets, %u cached (%.2f%%)\n"
-msgstr "%u bitset_resets, %u кешовано (%.2f%%)\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "Помилка підпроцесу %s"
 
-#: lib/bitset_stats.c:186
-#, c-format
-msgid "%u bitset_tests, %u cached (%.2f%%)\n"
-msgstr "%u bitset_tests, %u кешовано (%.2f%%)\n"
+#~ msgid "`"
+#~ msgstr "`"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists\n"
+#~ msgid "'"
+#~ msgstr "'"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "гістограма журналу лічильників\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Час виконання (у секундах)"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "гістограма журналу розміру\n"
+#~ msgid "CPU user"
+#~ msgstr "Користувач процесора"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "гістограма щільності\n"
+#~ msgid "CPU system"
+#~ msgstr "Система процесора"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Статистика бітових полів:\n"
-"\n"
+#~ msgid "wall clock"
+#~ msgstr "настінний годинник"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Акумульовані запуски = %u\n"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "Помилка _open_osfhandle"
 
-#: lib/bitset_stats.c:259 lib/bitset_stats.c:264
-msgid "cannot read stats file"
-msgstr "не вдалося прочитати файл статистичних даних"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "Не вдалося відновити fd %d: помилка dup2"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr "помилковий розмір файла статистичних даних\n"
+#~ msgid "%s subprocess"
+#~ msgstr "Підпроцес %s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
-msgid "cannot write stats file"
-msgstr "не вдалося записати файл статистичних даних."
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "Підпроцесом %s отримано сигнал щодо аварійного завершення %d"
 
-#: lib/bitset_stats.c:292
-msgid "cannot open stats file for writing"
-msgstr "не вдалося відкрити файл статистичних даних для запису"
+#~ msgid "symbol %s redefined"
+#~ msgstr "повторне визначення символу %s"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "помилка запису"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "спроба вилучення «%s» зазнала невдачі"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Невідома системна помилка"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "спроба створення тимчасового файла зазнала невдачі"
 
-#: lib/getopt.c:547 lib/getopt.c:576
-#, c-format
-msgid "%s: option '%s' is ambiguous; possibilities:"
-msgstr "%s: неоднозначний параметр «%s»; можливі варіанти:"
+#~ msgid "saving stdin failed"
+#~ msgstr "спроба збереження stdin зазнала невдачі"
 
-#: lib/getopt.c:624 lib/getopt.c:628
-#, c-format
-msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s: додавання аргументів до параметра «--%s» не передбачено\n"
+#~ msgid "saving stdout failed"
+#~ msgstr "спроба збереження stdout зазнала невдачі"
 
-#: 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"
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "спроба відкриття файла тимчасових даних зазнала невдачі"
 
-#: lib/getopt.c:685 lib/getopt.c:704
-#, c-format
-msgid "%s: option '--%s' requires an argument\n"
-msgstr "%s: до параметра «--%s» слід додати аргумент\n"
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr ""
+#~ "спроба переспрямовування стандартного виведення bison до тимчасового "
+#~ "файла зазнала невдачі"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s: невідомий параметр «--%s»\n"
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "спроба переспрямовування стандартного джерела даних m4 з тимчасового "
+#~ "файла зазнала невдачі"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s: невідомий параметр «%c%s»\n"
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "не вдалося відкрити файл тимчасових даних"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: некоректний параметр — «%c»\n"
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr ""
+#~ "спроба переспрямовування стандартного виведення m4 до тимчасового файла "
+#~ "зазнала невдачі"
 
-#: 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"
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "виконання допоміжної програми '%s' перервано"
 
-#: lib/getopt.c:934 lib/getopt.c:950
-#, c-format
-msgid "%s: option '-W %s' is ambiguous\n"
-msgstr "%s: параметр «-W %s» не є однозначним\n"
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "не вдалося знайти допоміжну програму '%s'"
 
-#: 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"
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr ""
+#~ "спроба переспрямовування стандартного джерела даних bison з тимчасового "
+#~ "файла зазнала невдачі"
 
-#: lib/getopt.c:1013 lib/getopt.c:1031
-#, c-format
-msgid "%s: option '-W %s' requires an argument\n"
-msgstr "%s: до параметра «-W %s» слід додати аргумент\n"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs, %u звільнено (%.2f%%).\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "пам'ять вичерпано"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets, %u кешовано (%.2f%%)\n"
 
-#: 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 "не вдалося створити канал"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets, %u кешовано (%.2f%%)\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 "Помилка підпроцесу %s"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests, %u кешовано (%.2f%%)\n"
 
-#. 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 "`"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "'"
+#~ msgid "count log histogram\n"
+#~ msgstr "гістограма журналу лічильників\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Час виконання (у секунда)\n"
+#~ msgid "size log histogram\n"
+#~ msgstr "гістограма журналу розміру\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " ЗАГАЛОМ               :"
+#~ msgid "density histogram\n"
+#~ msgstr "гістограма щільності\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr "час у %s: %ld.%06ld (%ld%%)\n"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Статистика бітових полів:\n"
+#~ "\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "Помилка _open_osfhandle"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Акумульовані запуски = %u\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "Не вдалося відновити fd %d: помилка dup2"
+#~ msgid "cannot read stats file"
+#~ msgstr "не вдалося прочитати файл статистичних даних"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "Підпроцес %s"
+#~ msgid "bad stats file size\n"
+#~ msgstr "помилковий розмір файла статистичних даних\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr "Підпроцесом %s отримано сигнал щодо аварійного завершення %d"
+#~ msgid "cannot write stats file"
+#~ msgstr "не вдалося записати файл статистичних даних."
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "не вдалося відкрити файл статистичних даних для запису"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " ЗАГАЛОМ               :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "час у %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " тип %d є %s\n"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "некоректне $ значення: $%d"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: додавання аргументів до параметра «--%s» не передбачено\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: невідомий параметр «--%s»\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: додавання аргументів до параметра «-W %s» не передбачено\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: до параметра «-W %s» слід додати аргумент\n"
+
+#~ msgid "empty"
+#~ msgstr "порожній"
+
+#~ msgid "a ';' might be needed at the end of action code"
+#~ msgstr "наприкінці коду дії можливо потрібен символ ';'"
+
+#~ msgid "future versions of Bison will not add the ';'"
+#~ msgstr "у майбутніх версіях Bison символ ';' не додаватиметься"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr ""
+#~ "використання YYFAIL. Вважається застарілим, буде вилучено у наступних "
+#~ "версіях."
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "повторне оголошення типового %%destructor з міткою"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "повторне оголошення типового %%destructor без мітки"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "повторне оголошення типового %%printer з міткою"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "повторне оголошення типового %%printer без мітки"
 
 #~ msgid "state %d"
 #~ msgstr "стан %d"
diff --git a/po/vi.gmo b/po/vi.gmo
index 87053a3..a5bfbe4 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 543232c..6335e8d 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,306 +1,452 @@
 # Vietnamese Translation for Bison.
-# Copyright © 2012 Free Software Foundation, Inc.
+# Bản dịch tiếng Việt dành cho Bison.
+# Copyright © 2015 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.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2013, 2015, 2018.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-2.6.90\n"
+"Project-Id-Version: bison 3.1.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2018-11-01 14:56+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: LocFactoryEditor 1.8\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "quy tắc trống rỗng không có %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "quyền ưu tiên và tính kết hợp vô ích đối với %s"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "cảnh báo"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
+#: src/complain.c:258
 msgid "error"
 msgstr "lỗi"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "lỗi nghiêm trọng"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
+#, fuzzy, c-format
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc không hỗ trợ thao tác midrule được định kiểu"
+
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "deprecated directive: %s, use %s"
+msgstr "chỉ thị không còn được dùng nữa: %s, dùng %s"
+
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "chỉ thị không còn được dùng nữa, dùng %s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "chỉ thị không còn được dùng nữa, dùng %s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
+#, c-format
+msgid "previous declaration"
+msgstr "khai báo trước"
+
+#: src/complain.c:585
+#, c-format
+msgid "only one %s allowed per rule"
+msgstr "chỉ cho phép một %s cho mỗi quy tắc"
+
+#: src/conflicts.c:81
+#, fuzzy, 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"
+#: src/conflicts.c:91
+#, fuzzy, 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"
+#: src/conflicts.c:100
+#, fuzzy, 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
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "Tình trạng %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, 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:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "xung đột: %d dịch/giảm\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "xung đột: %d giảm/giảm\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "xung đột dịch/giảm: tìm thấy %d, cần %d"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "xung đột giảm/giảm: tìm thấy %d, cần %d"
+
+#: src/conflicts.c:669
 #, 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
+#: src/conflicts.c:686
 #, 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"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "xung đột dịch/giảm: tìm thấy %d, cần %d"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, 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"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d lần xung đột dịch/giảm"
 
-#: src/files.c:114
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "xung đột giảm/giảm: tìm thấy %d, cần %d"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d lần xung đột giảm/giảm"
+
+#: src/files.c:124
 #, c-format
 msgid "%s: cannot open"
 msgstr "%s: không thể mở"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
 msgstr "lỗi vào/ra"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "không thể đóng tập tin"
 
-#: src/files.c:352
+#: src/files.c:374
 #, 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
+#: src/files.c:382
 #, 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
+#: src/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s: không thể mở"
+
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d lần xung đột dịch/giảm"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+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
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "Sử dụng: %s [TÙY_CHỌN]... TẬP_TIN\n"
+msgstr "Cách dùng: %s [TÙY_CHỌN]… TẬP_TIN\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\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"
+"Tạo ra một bộ phân tích tất định LR hay RL được khái quát hóa 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
+#: src/getargs.c:362
 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
+#: src/getargs.c:365
 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"
+msgstr "Cũng yêu cầu như thế đối với đối số tùy chọn.\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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-localedir      xuất thư mục chứa dữ liệu phụ thuộc vào miền\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
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+
+#: src/getargs.c:400
+#, fuzzy, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"  -D, --define=TÊN[=GIÁ_TRỊ]       tương tự như “%define TÊN \"GIÁ_TRỊ\"”\n"
+"  -F, --force-define=TÊN[=GTRỊ]    đè lên “%define TÊN \"GIÁ_TRỊ\"”\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"
+"                                   bị 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
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"      --defines[=TẬP_TIN]    đồng thời tạo một tập tin phần đầu\n"
+"  -d                         cũng vậy nhưng không thể chỉ định\n"
+"                              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"
+"  -v, --verbose              tương đương với “--report=state”\n"
+"  -b, --file-prefix=TIỀN_TỐ  chỉ định 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
+#: src/getargs.c:436
 #, c-format
 msgid "Report bugs to <%s>.\n"
 msgstr "Hãy thông báo lỗi cho <%s>.\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
 msgstr "Trang chủ %s: <%s>.\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 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"
 
@@ -309,71 +455,72 @@
 #. 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
+#: src/getargs.c:453
 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
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr "Để đọc tài liệu dạng đầy đủ, chạy lệnh: info bison.\n"
+msgstr "Để xem toàn bộ tài liệu về phần mềm này, hãy chạy lệnh: info bison.\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "Tác giả: Robert Corbett và Richard Stallman.\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, 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
+#: src/getargs.c:481
 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"
+"KHÔNG CÓ BẢO HÀNH GÌ CẢ, NGAY CẢ KHI NÓ ĐƯỢC BÁN HAY\n"
+"PHÙ HỢP CẢ VỚI MỤC ĐÍCH ĐẶC BIỆT.\n"
 
-#: src/getargs.c:458
+#: src/getargs.c:503
 #, 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
+#: src/getargs.c:520
 #, c-format
 msgid "%s: invalid language"
 msgstr "%s: ngôn ngữ không hợp lệ"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "chỉ cho phép một khai báo ngôn ngữ"
+msgstr "chỉ cho phép khai báo một ngôn ngữ"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
+#, fuzzy, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "chỉ thị không còn được dùng nữa: %s, dùng %s"
+
+#: src/getargs.c:850
 #, c-format
-msgid "%s: missing operand"
-msgstr "%s: thiếu toán hạng"
+msgid "missing operand"
+msgstr "thiếu toán hạng"
 
-#: src/getargs.c:749
+#: src/getargs.c:852
 #, 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
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "Ngữ pháp"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -381,804 +528,942 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
-"// Tạo ra bởi %s.\n"
-"// Báo cáo lỗi tới <%s>.\n"
+"// Tạo bởi %s.\n"
+"// Báo cáo lỗi cho <%s>.\n"
 "// Trang chủ: <%s>.\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "tràn số thứ tự dòng"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "tràn số thứ tự cột"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "tràn số thứ tự dòng"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 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
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
+
+#: src/muscle-tab.c:532
 #, 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
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
 msgstr "%s: chưa định nghĩa %%define biến %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%biến định nghĩa %s bị định nghĩa lại"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%biến định nghĩa %s bị định nghĩa lại"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%biến định nghĩa %s bị định nghĩa lại"
+
+#: src/muscle-tab.c:690
 #, 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
+#: src/muscle-tab.c:744
 #, 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
+#: src/muscle-tab.c:749
 #, c-format
 msgid "accepted value: %s"
-msgstr "giá trị không được chấp nhận: %s"
+msgstr "giá trị được chấp nhận: %s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "đang định nghĩa lại số thứ tự thẻ bài người dùng của %s"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
-msgstr "thiếu dấu nhận diện trong khai báo tham số"
+msgstr "thiếu định danh trong khai báo tham số"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr " kiểu %d là %s\n"
+msgid "invalid version requirement: %s"
+msgstr "yêu cầu phiên bản không hợp lệ: %s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
-msgstr "dời, và chuyển sang trạng thái %d\n"
+msgid "require bison %s, but have %s"
+msgstr "yêu cầu bison %s, nhưng chỉ có %s"
 
-#: 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
+#: src/print-graph.c:62 src/print.c:345
 #, 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
+#: src/print.c:136
 #, c-format
-msgid " on left:"
+msgid "shift, and go to state %d\n"
+msgstr "dịch, và chuyển sang trạng thái %d\n"
+
+#: src/print.c:138
+#, c-format
+msgid "go to state %d\n"
+msgstr "chuyển sang tình trạng %d\n"
+
+#: src/print.c:173
+msgid "error (nonassociative)\n"
+msgstr "lỗi (không kết hợp)\n"
+
+#: src/print.c:195
+#, c-format
+msgid "reduce using rule %d (%s)"
+msgstr "rút gọn dùng quy tắc %d (%s)"
+
+#: src/print.c:198
+#, c-format
+msgid "accept"
+msgstr "chấp nhận"
+
+#: src/print.c:235 src/print.c:309
+msgid "$default"
+msgstr "$default"
+
+#: src/print.c:364
+msgid "Terminals, with rules where they appear"
+msgstr "“Ký hiệu tận cùng”. với quy tắc nơi mà chúng xuất hiện"
+
+#: src/print.c:391
+msgid "Nonterminals, with rules where they appear"
+msgstr "“Ký hiệu chưa tận cùng”, với quy tắc nơi mà có"
+
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
 msgstr " bên trái:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
 msgstr " bên phải:"
 
-#: src/print.c:510
+#: src/print.c:447
 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
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "nhiều khai báo %s"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, 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
+#: src/reader.c:202
 #, 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
+#: src/reader.c:238
 #, 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
+#: src/reader.c:295
 #, 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
+#: src/reader.c:318
 #, 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"
+msgstr ""
+"quy tắc rỗng cho “ký hiệu chưa tận cùng” có kiểu, cũng không có hành động"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "giá trị chưa dùng: $%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "giá trị chưa đặt: $$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty trên một quy tắc không-rỗng"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "quy tắc trống rỗng không có %%empty"
+
+#: src/reader.c:372
 #, 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
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "chỉ cho phép một %s cho mỗi quy tắc"
+msgid "only midrule actions can be typed: %s"
+msgstr "chỉ thao tác midrule có thể được định kiểu: %s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, 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
+#: src/reader.c:507
 #, 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
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc không hỗ trợ thao tác midrule được định kiểu"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "quy tắc quá dài"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, 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
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "quy tắc vô ích trong ngữ pháp"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr "đồ không kết thúc vô ích trong ngữ pháp: %s"
+msgstr "“ký hiệu chưa tận cùng” vô ích trong ngữ pháp: %s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "Đồ không kết thúc vô ích trong ngữ pháp"
+msgstr "“Ký hiệu chưa tận cùng” vô ích trong ngữ pháp"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "Đồ kết thúc chưa dùng trong ngữ pháp"
+msgstr "“Ký hiệu tận cùng” chưa dùng trong ngữ pháp"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "Quy tắc vô ích trong ngữ pháp"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, 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"
+msgstr[0] "%d “ký hiệu chưa tận cùng” vô ích trong ngữ pháp"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, 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
+#: src/reduce.c:386
 #, 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
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr "ký hiệu '%s' lạc"
+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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
 msgstr "tham chiếu đến: %c%s tại %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "có lẽ có ý là: %c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
 msgstr ", ẩn %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr " ở %s"
+msgstr " tại %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
+msgid ", cannot be accessed from midrule 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
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, 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
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "sai tham chiếu: %s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, 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 '$'"
+msgstr "lỗi sai cú pháp sau “%c”. cần số nguyên, chữ, “_”. “[”. hoặc “$”"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, 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
+#: src/scan-code.l:517
 #, 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
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
 msgstr "tham chiếu không đúng chỗ: %s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
 msgstr "tham chiếu chưa rõ ràng: %s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, 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
+#: src/scan-code.l:639
 #, 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
+#: src/scan-code.l:645
 #, 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
+#: src/scan-code.l:671
 #, 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
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "xuất hiện nhiều lần của $%d với api.value.automove"
+
+#: src/scan-gram.l:198
 #, 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"
+msgstr "dấu phẩy “,” thất lạc được coi như là khoảng trắng"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "chỉ thị không hợp lệ: %s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "định danh không hợp lệ: %s"
 
-#: src/scan-gram.l:295
+#: src/scan-gram.l:365
 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, 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:459
+#, c-format
+msgid "an identifier expected"
+msgstr "cần một định danh"
+
+#: src/scan-gram.l:464
+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:535
+#, fuzzy, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc không hỗ trợ thao tác midrule được định kiểu"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "ký tự trống theo kiểu văn chương"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "các ký tự mở rộng trong câu chữ"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
 msgstr "gặp số sai nằm sau \\-escape: %s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
 msgstr "gặp ký tự sai nằm sau \\-escape: %s"
 
-#: src/scan-gram.l:901
+#: src/scan-gram.l:824
+#, fuzzy, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc không hỗ trợ thao tác midrule được định kiểu"
+
+#: src/scan-gram.l:962
 #, 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
+#: src/scan-gram.l:973
 #, c-format
 msgid "missing %s at end of line"
 msgstr "thiếu %s tại cuối dòng"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, 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
+#: src/scan-skel.l:258
 #, 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
+#: src/scan-skel.l:265
 #, 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
+#: src/symtab.c:108
 #, 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
+#: src/symtab.c:118
 #, 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
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s khai báo lại cho %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, 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"
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
 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:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "ký hiệu %s đã được khai báo lại"
 
-#: src/symtab.c:395
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+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:380
 #, 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
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr ""
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "ký hiệu %s đã được khai báo lại"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
+#, 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:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "đang định nghĩa lại số thứ tự thẻ bài người dùng của %s"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr ""
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s vô ích cho kiểu <%s>"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "kiểu %s được dùng, nhưng chưa được tiếp hợp với bất kỳ ký hiệu nào"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, 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ữ"
+msgstr "ký hiệu %s sử dụng cho nhiều hơn một chuỗi văn bản"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, 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
+#: src/symtab.c:736
 #, 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
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
 msgstr "khai báo trước đây cho %s"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr ""
+
+#: src/symtab.c:1119
 #, 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
+#: src/symtab.c:1123
 #, 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
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr "khai báo lại cho %%destructor có thẻ mặc định"
+msgid "useless precedence and associativity for %s"
+msgstr "quyền ưu tiên và tính kết hợp vô ích đối với %s"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr "khai báo lại cho %%destructor không có thẻ mặc định"
+msgid "useless precedence for %s"
+msgstr "quyền ưu tiên vô ích đối với %s"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr "khai báo lại cho %%printer có thẻ mặc định"
+msgid "useless associativity for %s, use %%precedence"
+msgstr "tính kết hợp vô ích đối với %s, dùng %%precedence"
 
-#: 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"
+#, fuzzy
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "“ký hiệu chưa tận cùng” vô ích trong ngữ pháp: %s"
 
-#: 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"
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "chỉ thị không còn được dùng nữa, dùng %s"
 
-#: 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."
+#, fuzzy
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "Các kiểu 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"
+#~ " * “empty-rule”       quy tắc rỗng không cần %empty\n"
+#~ " * “precedence”       quyền ưu tiên và tính kết hợp vô ích\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 ngoại trừ “yacc”\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[=LOẠI]”     xử lý cảnh báo dưới dạng lỗi\n"
 
-#: djgpp/subpipe.c:127
-#, c-format
-msgid "saving stdin failed"
-msgstr "ghi lại stdin gặp lỗi"
+#~ 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ừ được ngăn cách bằng dấu phẩy, bao gồm:\n"
+#~ " * “state”       diễn tả các tình trạng\n"
+#~ " * “itemset”     tập hợp mục dùng để tự điền với kết thúc nó\n"
+#~ " * “look-ahead”  liên quan rõ ràng mỗi thẻ bài nhìn trước đến mục\n"
+#~ " * “solved”      diễn tả việc phân giải sự xung đột kiểu dịch/giảm\n"
+#~ " * “all”         bao gồm tất cả thông tin trên\n"
+#~ " * “none”        tắt báo cáo\n"
 
-#: djgpp/subpipe.c:131
-#, c-format
-msgid "saving stdout failed"
-msgstr "ghi lại stdout gặp lỗi"
+#, fuzzy
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    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"
+#~ "  "
 
-#: 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"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "đối số không hợp lệ %s cho %s"
 
-#: 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"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "đối số chưa rõ ràng %s cho %s"
 
-#: 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"
+#~ msgid "Valid arguments are:"
+#~ msgstr "Các đối số hợp lệ là:"
 
-#: 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"
+#~ msgid "write error"
+#~ msgstr "lỗi ghi"
 
-#: 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"
+#~ msgid "Unknown system error"
+#~ msgstr "Lỗi hệ thống không rõ"
 
-#: 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"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s: tùy chọn “%s%s” chưa rõ ràng\n"
 
-#: 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'"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s: tùy chọn “%s%s” chưa rõ ràng; khả năng là:"
 
-#: 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"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s: không nhận ra tùy chọn “%s%s”\n"
 
-#: lib/argmatch.c:133
-#, c-format
-msgid "invalid argument %s for %s"
-msgstr "đối số không hợp lệ %s cho %s"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s: tùy chọn “%s%s” không không cho phép một đối số\n"
 
-#: lib/argmatch.c:134
-#, c-format
-msgid "ambiguous argument %s for %s"
-msgstr "đối số chưa rõ ràng %s cho %s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s: tùy chọn “%s%s” cần một đối số\n"
 
-#: lib/argmatch.c:153
-msgid "Valid arguments are:"
-msgstr "Đối số hợp lệ:"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s: tùy chọn không hợp lệ -- “%c”\n"
 
-#: 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"
+#~ 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/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"
+#~ msgid "memory exhausted"
+#~ msgstr "hết bộ nhớ"
 
-#: 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"
+#~ msgid "cannot create pipe"
+#~ msgstr "không thể tạo ống dẫ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"
+#~ msgid "%s subprocess failed"
+#~ msgstr "tiến trình con %s gặp lỗi"
 
-#: lib/bitset_stats.c:190
-#, c-format
-msgid "%u bitset_lists\n"
-msgstr "%u bitset_lists (danh sách bộ bit)\n"
+#~ msgid "`"
+#~ msgstr "“"
 
-#: lib/bitset_stats.c:192
-msgid "count log histogram\n"
-msgstr "biểu đồ tần xuất ghi lưu số đếm\n"
+#~ msgid "'"
+#~ msgstr "”"
 
-#: lib/bitset_stats.c:195
-msgid "size log histogram\n"
-msgstr "biểu đồ tần xuất ghi lưu kích cỡ\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr "Thời gian thực hiện (giây)"
 
-#: lib/bitset_stats.c:198
-msgid "density histogram\n"
-msgstr "biểu đồ tần xuất mật độ\n"
+#~ msgid "CPU user"
+#~ msgstr "CPU người dùng"
 
-#: lib/bitset_stats.c:212
-#, c-format
-msgid ""
-"Bitset statistics:\n"
-"\n"
-msgstr ""
-"Thống kê bít:\n"
-"\n"
+#~ msgid "CPU system"
+#~ msgstr "CPU hệ thống"
 
-#: lib/bitset_stats.c:215
-#, c-format
-msgid "Accumulated runs = %u\n"
-msgstr "Lần chạy tích lũy = %u\n"
+#~ msgid "wall clock"
+#~ msgstr "đồng hồ thời gian thực"
 
-#: 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)"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle gặp lỗi"
 
-#: 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"
+#~ 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/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)"
+#~ msgid "%s subprocess"
+#~ msgstr "tiến trình con %s"
 
-#: 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"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "tiến trình con %s đã nhận tín hiệu gặp lỗi nghiêm trọng %d"
 
-#: lib/closeout.c:112
-msgid "write error"
-msgstr "lỗi ghi"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs (cấp bộ bit), %u đã giải phóng (%.2f%%).\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "Lỗi hệ thống không rõ"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets (bộ bộ bit), %u đã lưu tạm (%.2f%%)\n"
 
-#: 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à:"
+#~ 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/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"
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests (thử bộ bit), %u đã lưu tạm (%.2f%%)\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"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists (danh sách bộ bit)\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"
+#~ msgid "count log histogram\n"
+#~ msgstr "biểu đồ tần xuất ghi lưu số đếm\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"
+#~ msgid "size log histogram\n"
+#~ msgstr "biểu đồ tần xuất ghi lưu kích cỡ\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"
+#~ msgid "density histogram\n"
+#~ msgstr "biểu đồ tần xuất mật độ\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"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Thống kê bít:\n"
+#~ "\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"
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "Lần chạy tích lũy = %u\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"
+#~ msgid "cannot read stats file"
+#~ msgstr "không thể đọc tập tin thống kê (stats)"
 
-#: 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"
+#~ msgid "bad stats file size\n"
+#~ msgstr "kích cỡ tập tin thống kê (stats) sai.\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"
+#~ msgid "cannot write stats file"
+#~ msgstr "không thể ghi tập tin thống kê (stats)"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "hết bộ nhớ"
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "không thể mở tập tin thống kê (stats) để ghi"
 
-#: 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"
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "thiếu %s tại kết thúc tập tin"
 
-#: 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"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "định danh không hợp lệ: %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 "“"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "ký tự trống theo kiểu văn chương"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "”"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "định danh không hợp lệ: %s"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"Thời gian thực hiện (giây)\n"
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "định danh không hợp lệ: %s"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " TỔNG                  :"
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "ký tự trống theo kiểu văn chươ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"
+#~ msgid "symbol %s redefined"
+#~ msgstr "ký hiệu %s đã được định nghĩa lại"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle gặp lỗi"
+#~ msgid "removing of '%s' failed"
+#~ msgstr "việc gỡ bỏ của “%s” 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"
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "việc tạo tin tạm thời 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"
+#~ msgid "saving stdin failed"
+#~ msgstr "ghi lại stdin gặp lỗi"
 
-#: 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 "saving stdout failed"
+#~ msgstr "ghi lại stdout gặp lỗi"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "việc mở tập tin tmpfile gặp lỗi"
+
+#~ 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"
+
+#~ 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"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "việc mở tập tin tạm thời gặp lỗi"
+
+#~ 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"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "chương trình chạy bổ trợ “%s” bị ngắt giữa chừng"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "không tìm thấy chương trình chạy bổ trợ “%s”"
+
+#~ 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"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " TỔNG                  :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "thời gian theo %s: %ld.%06ld (%ld%%)\n"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " kiểu %d là %s\n"
+
+#~ 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"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: không nhận ra tùy chọn “--%s”\n"
+
+#~ 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"
+
+#~ 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"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "giá trị $ không hợp lệ: $%d"
+
+#~ msgid "empty"
+#~ msgstr "rỗng"
+
+#~ 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"
+
+#~ 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 “;”"
+
+#~ 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ỏ"
+
+#~ msgid "redeclaration for default tagged %%destructor"
+#~ msgstr "khai báo lại cho %%destructor có thẻ mặc định"
+
+#~ msgid "redeclaration for default tagless %%destructor"
+#~ msgstr "khai báo lại cho %%destructor không có thẻ mặc định"
+
+#~ msgid "redeclaration for default tagged %%printer"
+#~ msgstr "khai báo lại cho %%printer có thẻ mặc định"
+
+#~ msgid "redeclaration for default tagless %%printer"
+#~ msgstr "khai báo lại cho %%printer không có thẻ mặc định"
 
 #~ msgid "state %d"
 #~ msgstr "tình trạng %d"
 
 #~ msgid "stray '@'"
-#~ msgstr "lạc '@'"
+#~ msgstr "lạc “@”"
 
 #~ msgid ""
 #~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 5ab309e..d94b1ce 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index a1fb052..005db27 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -3,302 +3,512 @@
 # This file is distributed under the same license as the bison package.
 # Wylmer Wang <wantinghard@gmail.com>, 2011.
 # Ji ZhengYu <zhengyuji@gmail.com>, 2011.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.5\n"
+"Project-Id-Version: bison 3.0.4\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2015-08-27 16:52+0800\n"
+"Last-Translator: Mingye Wang <arthur200126@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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.4\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr ""
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr ""
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr ""
+
+#: src/complain.c:118
+#, fuzzy, c-format
+msgid "empty rules without %empty"
+msgstr "空的规则而无 %%empty"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr ""
+
+#: src/complain.c:120
+#, fuzzy
+msgid "useless precedence and associativity"
+msgstr "对于 %s 无作用的优先性与顺序关联性"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr ""
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr ""
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr ""
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr ""
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr ""
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr ""
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr ""
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "警告"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "I/O 错误"
+msgstr "错误"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "致命错误"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
+msgid "POSIX Yacc does not support %s"
 msgstr ""
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr ""
+msgid "deprecated directive: %s, use %s"
+msgstr "已弃用的指令:%s,应使用 %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
+#, fuzzy, c-format
+msgid "duplicate directive"
+msgstr "已弃用的指令:%s"
+
+#: src/complain.c:573
+#, fuzzy, c-format
+msgid "duplicate directive: %s"
+msgstr "已弃用的指令:%s"
+
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
-msgstr ""
+msgid "previous declaration"
+msgstr "上次声明"
 
-#: src/conflicts.c:492
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr ""
+msgid "only one %s allowed per rule"
+msgstr "每个规则只允许一个 %s"
 
-#: src/conflicts.c:495
-#, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr ""
+#: src/conflicts.c:81
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "    在规则 %d 与字组 %s 之间的冲突以偏移来解决"
 
-#: src/conflicts.c:497
-#, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr ""
+#: src/conflicts.c:91
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "    在规则 %d 与字组 %s 之间的冲突以归约来解决"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:100
+#, fuzzy, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "    在规则 %d 与字组 %s 之间的冲突以视为错误来解决"
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "状态 %d"
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "冲突:%d 项偏移/归约,%d 项归约/归约\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "冲突:%d 项偏移/归约\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "冲突:%d 项归约/归约\n"
+
+#: src/conflicts.c:645
+#, fuzzy, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "偏移/归约冲突:找到 %d 项,预期为 %d 项"
+
+#: src/conflicts.c:651
+#, fuzzy, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "归约/归约冲突:找到 %d 项,预期为 %d 项"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
-msgstr "%%expect-rr 只应用于 GLR 解析器"
+msgstr "%%expect-rr 只适合 GLR 解析器"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] ""
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "偏移/归约冲突:找到 %d 项,预期为 %d 项"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] ""
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d 项偏移/归约冲突"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "归约/归约冲突:找到 %d 项,预期为 %d 项"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d 项归约/归约冲突"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "无法打开文件“%s”"
+msgstr "%s:无法打开"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "输入/输出错误"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "无法关闭文件"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
 msgstr "拒绝覆盖输入文件 %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, 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/fixits.c:122
+#, fuzzy, c-format
+msgid "%s: cannot backup"
+msgstr "%s:无法打开"
 
-#: src/getargs.c:301
+#: src/getargs.c:173
+msgid "colorize the output"
+msgstr ""
+
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr ""
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr ""
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr ""
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
+msgstr ""
+
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d 项偏移/归约冲突"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr ""
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr ""
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr ""
+
+#: src/getargs.c:309
+msgid "all of the above"
+msgstr ""
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr ""
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr ""
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "请尝试运行 %s --help 来获取更多信息。\n"
+
+#: src/getargs.c:355
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "用法:%s [选项]... 文件\n"
 
-#: src/getargs.c:302
+#: src/getargs.c:356
+#, fuzzy
 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"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
 "\n"
 msgstr ""
+"产生确定性 LR 或一般化 LR (GLR) 剖析器会用到\n"
+"LALR(1),IELR(1),或规范的 LR(1) 剖析器表格。 IELR(1) 和\n"
+"规范的 LR(1) 支持是实验性质。\n"
+"\n"
 
-#: src/getargs.c:309
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
 msgstr "长选项的强制参数对短选项也是强制的。\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
 msgstr "可选项也是如此。\n"
 
-#: src/getargs.c:316
+#: src/getargs.c:370
+#, fuzzy
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\n"
 "      --print-datadir        output directory containing skeletons and XSLT\n"
-"  -y, --yacc                 emulate POSIX Yacc\n"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   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"
+"  -f, --feature[=特色]       启用杂项特色\n"
+"\n"
+
+#: src/getargs.c:386
+msgid ""
+"Diagnostics:\n"
 "  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
-"  -f, --feature[=FEATURE]    activate miscellaneous features\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
 "\n"
 msgstr ""
 
-#: src/getargs.c:329
-#, c-format
+#: src/getargs.c:400
+#, fuzzy, c-format
 msgid ""
-"Parser:\n"
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\n"
 msgstr ""
+"剖析器:\n"
+"  -L, --language=语言              指定输出编程语言\n"
+"  -S, --skeleton=文件              指定使用的架构\n"
+"  -t, --debug                      提供剖析器用于调试\n"
+"                                   如同 -Dparse.trace\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
+#: src/getargs.c:419
+#, fuzzy
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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=状态\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 ""
-
-#: 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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"向 <%s> 报告问题。\n"
+msgstr "将错误通报给 <%s>。\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s 首页:<%s>。\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "报告翻译错误给 <http://translationproject.org/team/zh_CN.html>。\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "要取得完整文档请运行:info bison。\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "由 Robert Corbett 和 Richard Stallman 编写。\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "版权所有 (C) %d Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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
+#: src/getargs.c:503
 #, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr ""
+msgstr "多重架构声明无效"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "无效的语言“%s”"
+msgstr "%s:无效的语言"
 
-#: src/getargs.c:479
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
 msgstr "多语言声明是无效的"
 
-#: src/getargs.c:747
+#: src/getargs.c:816
 #, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "“%s”后缺少操作符"
+msgid "deprecated option: %s, use %s"
+msgstr "已弃用的指令:%s,应使用 %s"
 
-#: src/getargs.c:749
+#: src/getargs.c:850
 #, fuzzy, c-format
+msgid "missing operand"
+msgstr "%s:缺少算子"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "额外的操作符“%s”"
+msgstr "额外算子 %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "空"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "语法"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -311,798 +521,909 @@
 "// 主页:<%s>。\n"
 "\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "行号溢出"
 
-#: src/location.c:95
+#: src/location.c:152
 #, c-format
 msgid "column number overflow"
 msgstr "列号溢出"
 
-#: src/main.c:146
+#: src/location.c:155
+#, fuzzy, c-format
+msgid "byte number overflow"
+msgstr "行号溢出"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr ""
+
+#: src/main.c:155
 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/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr ""
 
-#: src/muscle-tab.c:453
+#: src/muscle-tab.c:532
+#, c-format
+msgid "%%define variable %s redefined"
+msgstr "%%define 变量 %s 被重新定义"
+
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 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
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
+#, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr "%%define 变量 %s 的值无效:“%s”"
+msgstr "%s:未定义的 %%define 变量 %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
 #, fuzzy, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define 变量 %s 被重新定义"
+
+#: src/muscle-tab.c:634
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define 变量 %s 被重新定义"
+
+#: src/muscle-tab.c:639
+#, fuzzy, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define 变量 %s 被重新定义"
+
+#: src/muscle-tab.c:690
+#, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr "%%define 布尔型变量 %s 的值无效"
+msgstr "无效的值用于 %%define 布尔变量 %s"
 
-#: src/muscle-tab.c:609
-#, fuzzy, c-format
+#: src/muscle-tab.c:744
+#, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr "%%define 变量 %s 的值无效:“%s”"
+msgstr "无效的值用于 %%define 变量 %s:%s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "接受的值:“%s”"
+msgstr "被接受的值:%s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr ""
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr ""
+
+#: src/parse-gram.y:758
+#, fuzzy, c-format
+msgid "definition of %s"
+msgstr "重新定义 %s 的用户字组数目"
+
+#: src/parse-gram.y:889
 #, 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/parse-gram.y:1018
+#, fuzzy, c-format
+msgid "invalid version requirement: %s"
+msgstr "无效引用:%s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
 #, c-format
-msgid "shift, and go to state %d\n"
+msgid "require bison %s, but have %s"
 msgstr ""
 
-#: src/print.c:166
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "状态 %d"
+
+#: src/print.c:136
+#, c-format
+msgid "shift, and go to state %d\n"
+msgstr "偏移,并进入状态 %d\n"
+
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "转到状态 %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
-msgstr ""
+msgstr "错误 (非相联的)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
-msgstr ""
+msgstr "使用规则 %d 以归约 (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "接受"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 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
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
-msgstr ""
+msgstr "终结语词,附有它们出现处的规则"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
-msgstr ""
+msgstr "非终结语词,附有它们出现处的规则"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
-msgstr ""
+#: src/print.c:416
+#, fuzzy
+msgid "on left:"
+msgstr " 于左侧:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
-msgstr ""
+#: src/print.c:425
+#, fuzzy
+msgid "on right:"
+msgstr " 于右侧:"
 
-#: src/print.c:510
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
 msgstr "由于冲突,解析器中的规则不起作用"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "多次 %s 定义"
 
-#: src/reader.c:133
+#: src/reader.c:129
 #, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr ""
+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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "重复的符号名称用于 %s 被忽略"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr ""
+msgstr "用于 %s 这项字组的规则"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
-msgstr ""
+msgstr "类型与缺省动作相抵触:<%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
-msgstr ""
+msgstr "空白规则用于赋予类型的非终结语词,以及没有动作"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "未使用的值:$%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "未设置的值:$$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty 于非空的规则"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "空的规则而无 %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "用于 %%prec 的字组未定义:%s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
+msgid "only midrule actions can be typed: %s"
 msgstr ""
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s 只影响 GLR 解析器"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s 后面只能跟正数"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr ""
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "规则过长"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "输入语法中没有规则"
 
-#: src/reduce.c:241
+#: src/reduce.c:225
 msgid "rule useless in grammar"
 msgstr "语法中的规则无效"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "非终结语词在文法中无用:%s"
 
-#: src/reduce.c:350
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr ""
+msgstr "非终结语词在文法中无用"
 
-#: src/reduce.c:363
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr ""
+msgstr "终端机在文法中未使用"
 
-#: src/reduce.c:372
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
 msgstr "语法中的规则无效"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
+msgstr[0] "%d 项非终结语词在文法中无用"
 
-#: src/reduce.c:390
+#: src/reduce.c:360
 #, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
-msgstr[0] ""
+msgstr[0] "%d 项规则在文法中无用"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
-msgstr ""
+msgstr "启始符号 %s 不衍生任何句子"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+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
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "参考:%c%s 于 %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
 msgstr "可能指:%c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ",隐藏 %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, 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:375
+#, fuzzy, c-format
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ",无法从 位于 $%d 的 mid-rule 动作访问"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "整数超出范围:%s"
 
-#: src/scan-code.l:610
+#: src/scan-code.l:498
 #, c-format
 msgid "invalid reference: %s"
 msgstr "无效引用:%s"
 
-#: src/scan-code.l:619
-#, fuzzy, c-format
+#: src/scan-code.l:506
+#, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr "“%c”后语法错误,应为整数、字母、“_”、“[”或“$”"
+msgstr "语法错误发生于 %c 之后,预期为整数、字母、'_'、'[' 或 '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "在 $%d 之前的结果中找不到符号:%.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "在结果中找不到符号:%.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "误导的参考:%s"
 
-#: src/scan-code.l:663
+#: src/scan-code.l:548
 #, c-format
 msgid "ambiguous reference: %s"
-msgstr ""
+msgstr "模棱两可的参考:%s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "在未定类型文法中给定明确的类型"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr ""
+msgstr "$$ 对于在 %2$s 中 $%1$d 的中段没有任何声明类型"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
-msgstr ""
+msgstr "%s 中的 $$ 没有任何声明类型"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
+msgstr "%2$s 中的 $%1$s 没有任何声明类型"
+
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
 msgstr ""
 
-#: src/scan-gram.l:149
+#: src/scan-gram.l:198
 #, c-format
 msgid "stray ',' treated as white space"
-msgstr ""
+msgstr "零星的 ',' 将视为空白"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
-msgstr ""
+msgstr "无效的指令:%s"
 
-#: src/scan-gram.l:250
+#: src/scan-gram.l:313
 #, c-format
 msgid "invalid identifier: %s"
 msgstr "无效标识符:%s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "无效字符:%s"
+msgstr[0] "无效字符"
 
-#: 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
+#: src/scan-gram.l:383
 #, c-format
 msgid "invalid null character"
 msgstr "无效的空字符"
 
-#: src/scan-gram.l:531 src/scan-gram.l:541 src/scan-gram.l:561
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "中括号内未预期的识别名称:%s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "应有一个标识符"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "中括号内无效字符"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr ""
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "空的字符实字"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "额外字符于字符实字"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
 #, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr ""
+msgstr "无效数字于 \\-转义之后:%s"
 
-#: src/scan-gram.l:573
+#: src/scan-gram.l:652
 #, c-format
 msgid "invalid character after \\-escape: %s"
+msgstr "\\-转义符号之后的无效字符:%s"
+
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
 msgstr ""
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "文件末尾缺少“%s”"
+msgstr "于文件结尾缺少 %s"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "行尾缺少“%s”"
+msgstr " 于列尾缺少 %s"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "在架构中有未关闭的 %s 指令"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "在架构中的 %s 指令参数太少"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "在架构中的 %s 指令参数太多"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "无效的 $ 值:$%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
 msgstr "POSIX Yacc 禁止符号名中有破折号:%s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "输入语法中的符号过多(限制为 %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
-msgstr ""
+msgstr "%s 重复声明了 %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
+msgstr "%s 重复声明了 <%s>"
+
+#: src/symtab.c:325
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a token"
+msgstr "符号 %s 重复声明"
+
+#: src/symtab.c:326
+#, fuzzy, c-format
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "符号 %s 重复声明"
+
+#: src/symtab.c:370
+#, fuzzy, c-format
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "符号 %s 已使用过,但是并未定义为字组也没有规则"
+
+#: src/symtab.c:380
+#, c-format
+msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgstr "符号 %s 已使用过,但是并未定义为字组也没有规则"
+
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
 msgstr ""
 
-#: src/symtab.c:332
-#, c-format
-msgid "symbol %s redefined"
-msgstr "符号 %s 重复定义"
-
-#: src/symtab.c:346
+#: src/symtab.c:550
 #, c-format
 msgid "symbol %s redeclared"
 msgstr "符号 %s 重复声明"
 
-#: src/symtab.c:367
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr ""
+
+#: src/symtab.c:575
 #, c-format
 msgid "redefining user token number of %s"
-msgstr ""
+msgstr "重新定义 %s 的用户字组数目"
 
-#: src/symtab.c:395
+#: src/symtab.c:578
+#, fuzzy, c-format
+msgid "user token number of %s too large"
+msgstr "重新定义 %s 的用户字组数目"
+
+#: src/symtab.c:617
 #, c-format
-msgid "symbol %s is used, but is not defined as a token and has no rules"
+msgid "string literal %s not attached to a symbol"
 msgstr ""
 
-#: src/symtab.c:415
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s 对于类型 <%s> 无作用"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "类型 <%s> 已使用过,但是并未与任何符号相关联"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr ""
+
+#: src/symtab.c:698
 #, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr ""
+msgstr "符号 %s 超过一次使用为实字字串"
 
-#: src/symtab.c:418
+#: src/symtab.c:701
 #, c-format
 msgid "symbol %s given more than one literal string"
-msgstr ""
+msgstr "符号 %s 给定了超过一个实字字串"
 
-#: src/symtab.c:535
+#: src/symtab.c:736
 #, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr ""
+msgstr "用户字组数字 %d 被重复声明为 %s"
 
-#: src/symtab.c:539
+#: src/symtab.c:740
 #, c-format
 msgid "previous declaration for %s"
+msgstr "%s 的前一个声明"
+
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
 msgstr ""
 
-#: src/symtab.c:915
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "起始符号 %s 未定义"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr ""
+msgstr "起始符号 %s 是一项字组"
 
-#: src/symtab.c:935
+#: src/symtab.c:1294
 #, c-format
-msgid "redeclaration for default tagged %%destructor"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "对于 %s 无作用的优先性与顺序关联性"
 
-#: src/symtab.c:950
+#: src/symtab.c:1297
 #, c-format
-msgid "redeclaration for default tagless %%destructor"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "对于 %s 无作用的优先性"
 
-#: src/symtab.c:965
+#: src/symtab.c:1301
 #, c-format
-msgid "redeclaration for default tagged %%printer"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "对于 %s 无作用的顺序关联性,使用 %%precedence"
 
-#: 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 "无法创建管道"
+#~ msgid "eliminate useless chain rules"
+#~ msgstr "非终结语词在文法中无用:%s"
 
-#: lib/bitset_stats.c:261
-#, c-format
-msgid "bad stats file size\n"
-msgstr ""
+#~ msgid "deprecated directive, use %s"
+#~ msgstr "已弃用的指令:%s"
 
-#: lib/bitset_stats.c:287 lib/bitset_stats.c:289
 #, fuzzy
-msgid "cannot write stats file"
-msgstr "无法创建管道"
+#~ msgid ""
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
+#~ msgstr ""
+#~ "警告分类包含:\n"
+#~ "  'midrule-values'    未设置或未使用的中段值\n"
+#~ "  'yacc'              与 POSIX Yacc 不兼容\n"
+#~ "  'conflicts-sr'      S/R 冲突 (缺省启用)\n"
+#~ "  'conflicts-rr'      R/R 冲突 (缺省启用)\n"
+#~ "  'deprecated'        淘汰的建构\n"
+#~ "  'empty-rule'        空的规则而不具有 %empty\n"
+#~ "  'precedence'        无用的优先性与顺序关联性\n"
+#~ "  'other'             所有其他警告 (缺省启用)\n"
+#~ "  'all'               所有警告\n"
+#~ "  'no-CATEGORY'       在分类中关闭警告\n"
+#~ "  'none'              关闭所有警告\n"
+#~ "  'error[=CATEGORY]'  将警告当作错误\n"
 
-#: lib/bitset_stats.c:292
+#~ 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"
+
 #, fuzzy
-msgid "cannot open stats file for writing"
-msgstr "无法打开文件“%s”"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "FEATURE 是逗号分隔的字词清单可以包含:\n"
+#~ "  'caret'        以插字符号显示错误\n"
+#~ "  'all'          以上全部\n"
+#~ "  'none'         停用以上全部\n"
+#~ "  "
 
-#: lib/closeout.c:112
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "%2$s 的参数 %1$s 无效"
+
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "%2$s 的参数 %1$s 不明确"
+
+#~ msgid "Valid arguments are:"
+#~ msgstr "有效参数为:"
+
+#~ msgid "write error"
+#~ msgstr "写入错误"
+
+#~ msgid "Unknown system error"
+#~ msgstr "未知系统错误"
+
 #, fuzzy
-msgid "write error"
-msgstr "致命错误"
+#~| msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s:选项 -W %s 是模棱两可的\n"
 
-#: lib/error.c:188
-msgid "Unknown system error"
-msgstr "未知系统错误"
+#, fuzzy
+#~| msgid "%s: option '%s' is ambiguous; possibilities:"
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s:选项 %s 是模棱两可的;可能性:"
 
-#: lib/getopt.c:547 lib/getopt.c:576
-#, c-format
-msgid "%s: option '%s' is ambiguous; possibilities:"
-msgstr ""
+#, fuzzy
+#~| msgid "%s: unrecognized option '%c%s'\n"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s:无法识别的选项“%c%s”\n"
 
-#: lib/getopt.c:624 lib/getopt.c:628
-#, c-format
-msgid "%s: option '--%s' doesn't allow an argument\n"
-msgstr "%s:“--%s”选项不允许有参数\n"
+#, fuzzy
+#~| msgid "%s: option '%c%s' doesn't allow an argument\n"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s:“%c%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"
+#, fuzzy
+#~| msgid "%s: option '--%s' requires an argument\n"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s:“--%s”选项需要一个参数\n"
 
-#: lib/getopt.c:685 lib/getopt.c:704
-#, c-format
-msgid "%s: option '--%s' requires an argument\n"
-msgstr "%s:“--%s”选项需要一个参数\n"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s:无效选项 -- “%c”\n"
 
-#: lib/getopt.c:742 lib/getopt.c:745
-#, c-format
-msgid "%s: unrecognized option '--%s'\n"
-msgstr "%s:无法识别的选项“--%s”\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s:选项需要一个参数 -- “%c”\n"
 
-#: lib/getopt.c:753 lib/getopt.c:756
-#, c-format
-msgid "%s: unrecognized option '%c%s'\n"
-msgstr "%s:无法识别的选项“%c%s”\n"
+#~ msgid "memory exhausted"
+#~ msgstr "内存耗尽"
 
-#: lib/getopt.c:805 lib/getopt.c:808
-#, c-format
-msgid "%s: invalid option -- '%c'\n"
-msgstr "%s:无效选项 -- “%c”\n"
+#~ msgid "cannot create pipe"
+#~ 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 "%s:选项需要一个参数 -- “%c”\n"
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s 子进程失败"
 
-#: lib/getopt.c:934 lib/getopt.c:950
-#, c-format
-msgid "%s: option '-W %s' is ambiguous\n"
-msgstr ""
+#~ msgid "`"
+#~ 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"
+#~ msgid "'"
+#~ msgstr "”"
 
-#: lib/getopt.c:1013 lib/getopt.c:1031
-#, c-format
-msgid "%s: option '-W %s' requires an argument\n"
-msgstr "%s:“-W %s”选项需要一个参数\n"
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| "Execution times (seconds)\n"
+#~ msgid "Execution times (seconds)"
+#~ msgstr ""
+#~ "\n"
+#~ "执行时间(秒)\n"
 
-#: lib/obstack.c:413 lib/obstack.c:415 lib/xalloc-die.c:34
-msgid "memory exhausted"
-msgstr "内存耗尽"
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle 失败"
 
-#: 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 "无法创建管道"
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "无法恢复文件描述符 %d:dup2 失败"
 
-#: 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 子进程失败"
+#~ msgid "%s subprocess"
+#~ 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 "“"
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s 子进程收到致命信号 %d"
 
-#: lib/quotearg.c:313
-msgid "'"
-msgstr "”"
+#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
+#~ msgstr "%u bitset_allocs,%u 已释放 (%.2f%%)。\n"
 
-#: lib/timevar.c:475
-msgid ""
-"\n"
-"Execution times (seconds)\n"
-msgstr ""
-"\n"
-"执行时间(秒)\n"
+#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_sets,%u 已缓存 (%.2f%%)\n"
 
-#: lib/timevar.c:525
-msgid " TOTAL                 :"
-msgstr " 总计                 :"
+#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_resets,%u 已缓存 (%.2f%%)\n"
 
-#: lib/timevar.c:561
-#, c-format
-msgid "time in %s: %ld.%06ld (%ld%%)\n"
-msgstr ""
+#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
+#~ msgstr "%u bitset_tests,%u 已缓存 (%.2f%%)\n"
 
-#: lib/w32spawn.h:43
-#, c-format
-msgid "_open_osfhandle failed"
-msgstr "_open_osfhandle 失败"
+#~ msgid "%u bitset_lists\n"
+#~ msgstr "%u bitset_lists\n"
 
-#: lib/w32spawn.h:84
-#, c-format
-msgid "cannot restore fd %d: dup2 failed"
-msgstr "无法恢复文件描述符 %d:dup2 失败"
+#~ msgid "count log histogram\n"
+#~ msgstr "计算日志长条图\n"
 
-#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317
-#, c-format
-msgid "%s subprocess"
-msgstr "%s 子进程"
+#~ msgid "size log histogram\n"
+#~ msgstr "调整日志长条图大小\n"
 
-#: lib/wait-process.c:274 lib/wait-process.c:346
-#, c-format
-msgid "%s subprocess got fatal signal %d"
-msgstr "%s 子进程收到致命信号 %d"
+#~ msgid "density histogram\n"
+#~ msgstr "密度直方图\n"
 
-#~ msgid "state %d"
-#~ msgstr "状态 %d"
+#~ msgid ""
+#~ "Bitset statistics:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bitset 统计:\n"
+#~ "\n"
+
+#~ msgid "Accumulated runs = %u\n"
+#~ msgstr "累计运行 = %u\n"
+
+#~ msgid "cannot read stats file"
+#~ msgstr "无法读取统计文件"
+
+#~ msgid "bad stats file size\n"
+#~ msgstr "不当的统计文件大小\n"
+
+#~ msgid "cannot write stats file"
+#~ msgstr "无法写入统计文件"
+
+#~ msgid "cannot open stats file for writing"
+#~ msgstr "无法打开统计文件用于写入"
+
+#, fuzzy
+#~| msgid "missing %s at end of file"
+#~ msgid "end \"ABC\" of file"
+#~ msgstr "于文件结尾缺少 %s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "[identifier]"
+#~ msgstr "无效标识符:%s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "character literal"
+#~ msgstr "空的字符实字"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier"
+#~ msgstr "无效标识符:%s"
+
+#, fuzzy
+#~| msgid "invalid identifier: %s"
+#~ msgid "identifier:"
+#~ msgstr "无效标识符:%s"
+
+#, fuzzy
+#~| msgid "empty character literal"
+#~ msgid "integer literal"
+#~ msgstr "空的字符实字"
+
+#~ msgid "symbol %s redefined"
+#~ msgstr "符号 %s 重复定义"
+
+#~ msgid "removing of '%s' failed"
+#~ msgstr "移除 %s 时失败"
+
+#~ msgid "creation of a temporary file failed"
+#~ msgstr "临时文件的创建失败"
+
+#~ msgid "saving stdin failed"
+#~ msgstr "保存标准输入时失败"
+
+#~ msgid "saving stdout failed"
+#~ msgstr "保存标准输出时失败"
+
+#~ msgid "opening of tmpfile failed"
+#~ msgstr "打开临时文件失败"
+
+#~ msgid "redirecting bison's stdout to the temporary file failed"
+#~ msgstr "将 bison 的标准输出重导至临时文件时失败"
+
+#~ msgid "redirecting m4's stdin from the temporary file failed"
+#~ msgstr "将 m4 的标准输入重导自临时文件时失败"
+
+#~ msgid "opening of a temporary file failed"
+#~ msgstr "打开临时文件失败"
+
+#~ msgid "redirecting m4's stdout to a temporary file failed"
+#~ msgstr "重新导向 m4 的标准输出到临时文件时失败"
+
+#~ msgid "subsidiary program '%s' interrupted"
+#~ msgstr "附加程序 %s 被中断"
+
+#~ msgid "subsidiary program '%s' not found"
+#~ msgstr "找不到附加程序 %s"
+
+#~ msgid "redirecting bison's stdin from the temporary file failed"
+#~ msgstr "从临时文件重新导向 bison 的标准输入时失败"
+
+#~ msgid " type %d is %s\n"
+#~ msgstr " 类型 %d 为 %s\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s:“--%s”选项不允许有参数\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s:无法识别的选项“--%s”\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:“-W %s”选项不允许有参数\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s:“-W %s”选项需要一个参数\n"
+
+#~ msgid " TOTAL                 :"
+#~ msgstr " 总计                 :"
+
+#~ msgid "time in %s: %ld.%06ld (%ld%%)\n"
+#~ msgstr "%s 中的时间:%ld.%06ld (%ld%%)\n"
+
+#~ msgid "empty"
+#~ msgstr "空"
 
 #~ msgid ""
 #~ "undefined %%define variable `%s' passed to muscle_percent_define_get_loc"
@@ -1124,3 +1445,12 @@
 #~ "muscle_percent_define_check_values"
 #~ msgstr ""
 #~ "将未定义的 %%define 变量 “%s” 传递给了 muscle_percent_define_check_values"
+
+#~ msgid "state %d"
+#~ msgstr "状态 %d"
+
+#~ msgid "use of YYFAIL, which is deprecated and will be removed"
+#~ msgstr "使用了 YYFAIL,它已经废弃并将被移除"
+
+#~ msgid "invalid $ value: $%d"
+#~ msgstr "无效的 $ 值:$%d"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index deb6b02..28f8ff9 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 83fd214..083ae7a 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,293 +1,474 @@
 # Traditional Chinese Messages for bison.
-# Copyright (C) 2006, 07 Free Software Foundation, Inc.
+# Copyright (C) 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bison package.
-# Wei-Lun Chao <chaoweilun@gmail.com>, 2006, 07.
 #
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2006, 2007, 2013.
+# pan93412 <pan93412@gmail.com>, 2018, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.3a\n"
+"Project-Id-Version: GNU bison 3.4.91\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-11-24 23:13+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@lists.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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 19.11.80\n"
 
-#: src/complain.c:120 src/complain.c:131 src/complain.c:140 src/complain.c:188
-#: src/complain.c:198
+#: src/complain.c:114
+msgid "S/R conflicts (enabled by default)"
+msgstr "S/R 衝突 (預設啟用)"
+
+#: src/complain.c:115
+msgid "R/R conflicts (enabled by default)"
+msgstr "R/R 衝突 (預設啟用)"
+
+#: src/complain.c:116
+msgid "string aliases not attached to a symbol"
+msgstr "字串別名未連結至任一符號"
+
+#: src/complain.c:117
+msgid "obsolete constructs"
+msgstr "建構函式過時"
+
+#: src/complain.c:118
+#, c-format
+msgid "empty rules without %empty"
+msgstr "沒有 %empty 的空規則"
+
+#: src/complain.c:119
+msgid "unset or unused midrule values"
+msgstr "未設定或未使用的 midrule 值"
+
+#: src/complain.c:120
+msgid "useless precedence and associativity"
+msgstr "無作用的優先性與順序關聯性"
+
+#: src/complain.c:121
+msgid "incompatibilities with POSIX Yacc"
+msgstr "不相容 POSIX Yacc"
+
+#: src/complain.c:122
+msgid "all other warnings (enabled by default)"
+msgstr "其他所有錯誤 (預設啟用)"
+
+#: src/complain.c:123
+msgid "all the warnings except 'dangling-alias' and 'yacc'"
+msgstr "除 'dangling-alias' 及 'yacc' 的所有警告"
+
+#: src/complain.c:124
+msgid "turn off warnings in CATEGORY"
+msgstr "關閉 <分類> 中的警告"
+
+#: src/complain.c:125
+msgid "turn off all the warnings"
+msgstr "關閉所有警告"
+
+#: src/complain.c:126
+msgid "treat warnings as errors"
+msgstr "將警告視為錯誤"
+
+#: src/complain.c:151
+msgid "Warning categories include:"
+msgstr "警告分類有:"
+
+#: src/complain.c:256
 msgid "warning"
 msgstr "警告"
 
-#: src/complain.c:151 src/complain.c:160 src/complain.c:167
-#, fuzzy
+#: src/complain.c:258
 msgid "error"
-msgstr "輸入/輸出錯誤"
+msgstr "錯誤"
 
-#: src/complain.c:208 src/complain.c:215
+#: src/complain.c:260
 msgid "fatal error"
 msgstr "嚴重錯誤"
 
-#: src/conflicts.c:77
+#: src/complain.c:547
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as shift"
-msgstr "    在規則 %d 與記號 %s 之間的衝突以偏移來解決"
+msgid "POSIX Yacc does not support %s"
+msgstr "POSIX Yacc 不支援 %s"
 
-#: src/conflicts.c:86
+#: src/complain.c:556
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as reduce"
-msgstr "    在規則 %d 與記號 %s 之間的衝突以縮減來解決"
+msgid "deprecated directive: %s, use %s"
+msgstr "不宜再用的指令:%s,應使用 %s"
 
-#: src/conflicts.c:94
+#: src/complain.c:571
 #, c-format
-msgid "    Conflict between rule %d and token %s resolved as an error"
-msgstr "    在規則 %d 與記號 %s 之間的衝突以視為錯誤來解決"
+msgid "duplicate directive"
+msgstr "指令重複"
 
-#: src/conflicts.c:492
+#: src/complain.c:573
 #, c-format
-msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
-msgstr "衝突:%d 項偏移/縮減,%d 項縮減/縮減\n"
+msgid "duplicate directive: %s"
+msgstr "指令重複:%s"
 
-#: src/conflicts.c:495
+#: src/complain.c:575 src/complain.c:588 src/reader.c:136 src/symtab.c:303
+#: src/symtab.c:316 src/symtab.c:553
 #, c-format
-msgid "conflicts: %d shift/reduce\n"
-msgstr "衝突:%d 項偏移/縮減\n"
+msgid "previous declaration"
+msgstr "前次宣告"
 
-#: src/conflicts.c:497
+#: src/complain.c:585
 #, c-format
-msgid "conflicts: %d reduce/reduce\n"
-msgstr "衝突:%d 項縮減/縮減\n"
+msgid "only one %s allowed per rule"
+msgstr "每個規則只允許一個 %s"
 
-#: src/conflicts.c:515
+#: src/conflicts.c:81
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as shift"
+msgstr "在規則 %d 與字組 %s 之間的衝突以偏移來解決"
+
+#: src/conflicts.c:91
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as reduce"
+msgstr "在規則 %d 與字組 %s 之間的衝突以縮減來解決"
+
+#: src/conflicts.c:100
+#, c-format
+msgid "Conflict between rule %d and token %s resolved as an error"
+msgstr "在規則 %d 與字組 %s 之間的衝突以視為錯誤來解決"
+
+#: src/conflicts.c:602
 #, c-format
 msgid "State %d "
 msgstr "狀態 %d "
 
-#: src/conflicts.c:582
+#: src/conflicts.c:605
+#, c-format
+msgid "conflicts: %d shift/reduce, %d reduce/reduce\n"
+msgstr "衝突:%d 項偏移/縮減,%d 項縮減/縮減\n"
+
+#: src/conflicts.c:608
+#, c-format
+msgid "conflicts: %d shift/reduce\n"
+msgstr "衝突:%d 項偏移/縮減\n"
+
+#: src/conflicts.c:610
+#, c-format
+msgid "conflicts: %d reduce/reduce\n"
+msgstr "衝突:%d 項縮減/縮減\n"
+
+#: src/conflicts.c:645
+#, c-format
+msgid "shift/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "規則 %d 的偏移/縮減衝突:找到 %d 項,但預期為 %d 項"
+
+#: src/conflicts.c:651
+#, c-format
+msgid "reduce/reduce conflicts for rule %d: %d found, %d expected"
+msgstr "規則 %d 的縮減/縮減衝突:找到 %d 項,但預期為 %d 項"
+
+#: src/conflicts.c:669
 #, c-format
 msgid "%%expect-rr applies only to GLR parsers"
 msgstr "%%expect-rr 只套用到 GLR 剖析器"
 
-#: src/conflicts.c:616
+#: src/conflicts.c:686
 #, c-format
-msgid "expected %d shift/reduce conflict"
-msgid_plural "expected %d shift/reduce conflicts"
-msgstr[0] "預期有 %d 項偏移/縮減衝突"
+msgid "shift/reduce conflicts: %d found, %d expected"
+msgstr "偏移/縮減衝突:找到 %d 項,預期為 %d 項"
 
-#: src/conflicts.c:621
+#: src/conflicts.c:691
 #, c-format
-msgid "expected %d reduce/reduce conflict"
-msgid_plural "expected %d reduce/reduce conflicts"
-msgstr[0] "預期有 %d 項縮減/縮減衝突"
+msgid "%d shift/reduce conflict"
+msgid_plural "%d shift/reduce conflicts"
+msgstr[0] "%d 項偏移/縮減衝突"
 
-#: src/files.c:114
-#, fuzzy, c-format
+#: src/conflicts.c:708
+#, c-format
+msgid "reduce/reduce conflicts: %d found, %d expected"
+msgstr "縮減/縮減衝突:找到 %d 項,預期為 %d 項"
+
+#: src/conflicts.c:713
+#, c-format
+msgid "%d reduce/reduce conflict"
+msgid_plural "%d reduce/reduce conflicts"
+msgstr[0] "%d 項縮減/縮減衝突"
+
+#: src/files.c:124
+#, c-format
 msgid "%s: cannot open"
-msgstr "無法開啟檔案「%s」"
+msgstr "%s:無法開啟"
 
-#: src/files.c:130
+#: src/files.c:140
 #, c-format
 msgid "input/output error"
-msgstr ""
+msgstr "輸入/輸出錯誤"
 
-#: src/files.c:133
+#: src/files.c:143
 #, c-format
 msgid "cannot close file"
 msgstr "無法關閉檔案"
 
-#: src/files.c:352
+#: src/files.c:374
 #, c-format
 msgid "refusing to overwrite the input file %s"
-msgstr ""
+msgstr "拒絕覆寫輸入檔案 %s"
 
-#: src/files.c:362
+#: src/files.c:382
 #, c-format
 msgid "conflicting outputs to file %s"
 msgstr "輸出至檔案 %s 時發生衝突"
 
-#: src/getargs.c:292
+#: src/fixits.c:122
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "請嘗試執行「%s --help」來獲取更多資訊。\n"
+msgid "%s: cannot backup"
+msgstr "%s:無法備份"
 
-#: src/getargs.c:301
-#, c-format
-msgid "Usage: %s [OPTION]... FILE\n"
-msgstr "用法:%s [選項]... 檔案\n"
+#: src/getargs.c:173
+msgid "colorize the output"
+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"
+#: src/getargs.c:174
+msgid "don't colorize the output"
+msgstr "不上色輸出"
+
+#: src/getargs.c:175
+msgid "colorize if the output device is a tty"
+msgstr "如果輸出裝置是 tty 就上色"
+
+#. TRANSLATORS: Use the same translation for WHEN as in the
+#. --color=WHEN help message.
+#: src/getargs.c:196
+msgid "WHEN can be one of the following:"
+msgstr "<時機> 可以是下述任一:"
+
+#: src/getargs.c:209
+msgid "describe the states"
+msgstr "描述狀態"
+
+#: src/getargs.c:210
+msgid "complete the core item sets with their closure"
 msgstr ""
 
+#: src/getargs.c:211
+msgid "explicitly associate lookahead tokens to items"
+msgstr ""
+
+#: src/getargs.c:212
+#, fuzzy
+msgid "describe shift/reduce conflicts solving"
+msgstr "%d 項偏移/縮減衝突"
+
+#: src/getargs.c:213
+msgid "include all the above information"
+msgstr "包含所有上述資訊"
+
+#: src/getargs.c:214
+msgid "disable the report"
+msgstr "停用報告功能"
+
+#. TRANSLATORS: Use the same translation for THINGS as in the
+#. --report=THINGS help message.
+#: src/getargs.c:235
+msgid "THINGS is a list of comma separated words that can include:"
+msgstr "<事件> 是個以逗號分隔的字詞,可以包含:"
+
+# FOR TRANSLATORS: 目前原文字串似乎沒有 TRACES 相關的字串,維持原文。
+#: src/getargs.c:294
+msgid "TRACES is a list of comma separated words that can include:"
+msgstr "TRACES 是個以逗號分隔的字詞,可以包含:"
+
+#: src/getargs.c:306
+msgid "show errors with carets"
+msgstr ""
+
+#: src/getargs.c:307
+msgid "show machine-readable fixes"
+msgstr "顯示機器可讀的修正"
+
+#: src/getargs.c:308
+msgid "do not generate any file"
+msgstr "不產生任何檔案"
+
 #: src/getargs.c:309
+msgid "all of the above"
+msgstr "以上全部"
+
+#: src/getargs.c:310
+msgid "disable all of the above"
+msgstr "停用以上全部"
+
+#. TRANSLATORS: Use the same translation for FEATURES as in the
+#. --feature=FEATURES help message.
+#: src/getargs.c:332
+msgid "FEATURES is a list of comma separated words that can include:"
+msgstr "<功能> 是個以逗號分隔的字詞,可以包含:"
+
+#: src/getargs.c:346
+#, c-format
+msgid "Try '%s --help' for more information.\n"
+msgstr "請嘗試執行 %s --help 來獲取更多資訊。\n"
+
+#: src/getargs.c:355
+#, c-format
+msgid "Usage: %s [OPTION]... FILE\n"
+msgstr "用法:%s [選項]… 檔案\n"
+
+#: src/getargs.c:356
+msgid ""
+"Generate a deterministic LR or generalized LR (GLR) parser employing\n"
+"LALR(1), IELR(1), or canonical LR(1) parser tables.\n"
+"\n"
+msgstr ""
+"產生確定性 LR 或一般化 LR (GLR) 剖析器會用到\n"
+"LALR(1),IELR(1),或規範的 LR(1) 剖析器表格。\n"
+"\n"
+
+#: src/getargs.c:362
 msgid ""
 "Mandatory arguments to long options are mandatory for short options too.\n"
-msgstr ""
+msgstr "長選項的必要引數對於短選項也同樣必要。\n"
 
-#: src/getargs.c:312
+#: src/getargs.c:365
 msgid "The same is true for optional arguments.\n"
-msgstr ""
+msgstr "對於選擇性引數而言是相同的。\n"
 
-#: src/getargs.c:316
-#, fuzzy
+#: src/getargs.c:370
 msgid ""
-"\n"
-"Operation modes:\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"
+"                             and exit\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"
+"                             and exit\n"
+"  -u, --update               apply fixes to the source grammar file and "
+"exit\n"
+"  -f, --feature[=FEATURES]   activate miscellaneous features\n"
 "\n"
 msgstr ""
-"操作模式:\n"
-"  -h, --help                 顯示此說明並離開\n"
-"  -V, --version              輸出版本資訊並離開\n"
-"      --print-localedir      輸出包含語區相依資料的目錄\n"
-"  -y, --yacc                 模擬 POSIX yacc\n"
+"作業模式:\n"
+"  -h, --help                 顯示這份說明然後離開\n"
+"  -V, --version              輸出版本資訊然後離開\n"
+"      --print-localedir      輸出包含語區依賴的資料目錄後離開\n"
+"      --print-datadir        輸出包含架構和 XSLT 的目錄後離開\n"
+"  -u, --update               套用修正到來源文法檔案後離開\n"
+"  -f, --feature[=功能]       啟用雜項功能\n"
+"\n"
 
-#: src/getargs.c:329
-#, fuzzy, c-format
+#: src/getargs.c:386
 msgid ""
-"Parser:\n"
+"Diagnostics:\n"
+"  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n"
+"      --color[=WHEN]         whether to colorize the diagnostics\n"
+"      --style=FILE           specify the CSS FILE for colorizer diagnostics\n"
+"\n"
+msgstr ""
+"偵錯:\n"
+"  -W, --warnings[=分類]      報告 <分類> 中的警告\n"
+"      --color[=時機]         是否對偵錯訊息上色\n"
+"      --style=檔案           指定要用來上色偵錯訊息的 CSS <檔案>\n"
+"\n"
+
+# c-format
+#: src/getargs.c:400
+#, c-format
+msgid ""
+"Tuning the 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"
+"  -t, --debug                      instrument the parser for tracing\n"
+"                                   same as '-Dparse.trace'\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"
+"  -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"
+"                                   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"
+"  -y, --yacc                       emulate POSIX Yacc\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"
+"調整剖析器:\n"
+"  -L, --language=語言              指定輸出程式語言\n"
+"  -S, --skeleton=檔案              指定使用的架構\n"
+"  -t, --debug                      提供剖析器用於偵錯\n"
+"                                   如同 -Dparse.trace\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"
+"  -y, --yacc                       模擬 POSIX Yacc\n"
 
-#: src/getargs.c:346
-#, fuzzy
+#: src/getargs.c:419
 msgid ""
-"Output:\n"
+"Output Files:\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"
+"  -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"
+"輸出檔:\n"
+"      --defines[=檔案]       也產生標頭檔\n"
+"  -d                         但是同樣無法指定檔案 (用於 POSIX Yacc)\n"
+"  -r, --report=事件          也於自動作業時產生細節\n"
+"      --report-file=檔案     寫入報告到檔案\n"
+"  -v, --verbose              如同 --report=狀態\n"
+"  -b, --file-prefix=前綴     指定輸出檔案的前綴\n"
+"  -o, --output=檔案          留下輸出到檔案\n"
+"  -g, --graph[=檔案]         也輸出圖形的自動裝置\n"
+"  -x, --xml[=檔案]           也輸出自動作業的 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 ""
-
-#: 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
+#: src/getargs.c:436
+#, c-format
 msgid "Report bugs to <%s>.\n"
-msgstr "回報錯誤請寄 <"
+msgstr "將錯誤通報給 <%s>。\n"
 
-#: src/getargs.c:396
+#: src/getargs.c:437
 #, c-format
 msgid "%s home page: <%s>.\n"
-msgstr ""
+msgstr "%s 首頁:<%s>。\n"
 
-#: src/getargs.c:397
+#: src/getargs.c:438
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+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
+#: src/getargs.c:453
 msgid "Report translation bugs to <http://translationproject.org/team/>.\n"
-msgstr ""
+msgstr "報告翻譯錯誤給 <http://translationproject.org/team/>。\n"
 
-#: src/getargs.c:412
+#: src/getargs.c:456
 msgid "For complete documentation, run: info bison.\n"
-msgstr ""
+msgstr "要取得完整文件請執行:info bison。\n"
 
-#: src/getargs.c:428
+#: src/getargs.c:472
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:430
+#: src/getargs.c:474
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr "由 Robert Corbett 與 Richard Stallman 編寫。\n"
 
-#: src/getargs.c:434
+#: src/getargs.c:478
 #, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr "版權所有 (C) %d 自由軟體基金會。\n"
 
-#: src/getargs.c:437
+#: src/getargs.c:481
 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"
@@ -295,40 +476,40 @@
 "這是自由軟體;請參考原始碼的版權聲明。本軟體不提供任何保證,甚至不會包括\n"
 "可售性或適用於任何特定目的的保證。\n"
 
-#: src/getargs.c:458
-#, fuzzy, c-format
+#: src/getargs.c:503
+#, c-format
 msgid "multiple skeleton declarations are invalid"
-msgstr "多重 %s 宣告"
+msgstr "多重架構宣告無效"
 
-#: src/getargs.c:476
-#, fuzzy, c-format
+#: src/getargs.c:520
+#, c-format
 msgid "%s: invalid language"
-msgstr "無效的字元:%s"
+msgstr "%s:無效的語言"
 
-#: src/getargs.c:479
-#, fuzzy
+#: src/getargs.c:523
 msgid "multiple language declarations are invalid"
-msgstr "多重 %s 宣告"
+msgstr "多重語言宣告無效"
 
-#: src/getargs.c:747
-#, fuzzy, c-format
-msgid "%s: missing operand"
-msgstr "「%s」之後缺少了運算元"
+#: src/getargs.c:816
+#, c-format
+msgid "deprecated option: %s, use %s"
+msgstr "不宜再用選項:%s,請使用 %s"
 
-#: src/getargs.c:749
-#, fuzzy, c-format
+#: src/getargs.c:850
+#, c-format
+msgid "missing operand"
+msgstr "缺少運算元"
+
+#: src/getargs.c:852
+#, c-format
 msgid "extra operand %s"
-msgstr "多餘的運算元「%s」"
+msgstr "額外運算元 %s"
 
-#: src/gram.c:112
-msgid "empty"
-msgstr "空白"
-
-#: src/gram.c:201
+#: src/gram.c:218
 msgid "Grammar"
 msgstr "文法"
 
-#: src/graphviz.c:45
+#: src/graphviz.c:46
 #, c-format
 msgid ""
 "// Generated by %s.\n"
@@ -336,860 +517,764 @@
 "// Home page: <%s>.\n"
 "\n"
 msgstr ""
+"// 由 %s 所產生。\n"
+"// 將錯誤通報給 <%s>。\n"
+"// 首頁:<%s>。\n"
+"\n"
 
-#: src/location.c:93 src/scan-gram.l:859
+#: src/location.c:150 src/scan-gram.l:909
 #, c-format
 msgid "line number overflow"
 msgstr "列號溢位"
 
-#: src/location.c:95
-#, fuzzy, c-format
+#: src/location.c:152
+#, c-format
 msgid "column number overflow"
-msgstr "列號溢位"
+msgstr "欄數溢位"
 
-#: src/main.c:146
-#, fuzzy
+#: src/location.c:155
+#, c-format
+msgid "byte number overflow"
+msgstr "位元號碼溢位"
+
+#. TRANSLATORS: This is used when a line is too long, and is
+#. displayed truncated.  Use an ellipsis appropriate for your
+#. language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+#. sometimes misdisplays and that "..." (three ASCII periods) is a
+#. safer choice in some locales.
+#: src/location.c:250
+msgid "..."
+msgstr "..."
+
+#: src/main.c:155
 msgid "rule useless in parser due to conflicts"
-msgstr "由於發生衝突導致規則一直無法縮減"
+msgstr "規則由於衝突而在剖析器中無用"
 
-#: src/muscle-tab.c:450
-#, fuzzy, c-format
+#: src/main.c:245
+#, c-format
+msgid "fix-its can be applied.  Rerun with option '--update'."
+msgstr "可套用 fix-its。使用選項「--update」重新執行。"
+
+#: src/muscle-tab.c:532
+#, c-format
 msgid "%%define variable %s redefined"
-msgstr "符號 %s 被重新定義"
+msgstr "%%define 變數 %s 被重新定義"
 
-#: src/muscle-tab.c:453
-#, fuzzy
+#: src/muscle-tab.c:536 src/symtab.c:331
+#, c-format
 msgid "previous definition"
-msgstr "前次宣告"
+msgstr "前一個定義"
 
-#: src/muscle-tab.c:490 src/muscle-tab.c:504 src/muscle-tab.c:556
-#: src/muscle-tab.c:624
+#: src/muscle-tab.c:595 src/muscle-tab.c:696 src/muscle-tab.c:757
 #, c-format
 msgid "%s: undefined %%define variable %s"
-msgstr ""
+msgstr "%s:未定義的 %%define 變數 %s"
 
-#: src/muscle-tab.c:550
+#: src/muscle-tab.c:629
+#, c-format
+msgid "%%define variable '%s' requires '{...}' values"
+msgstr "%%define 變數 '%s' 需要 '{...}' 值"
+
+#: src/muscle-tab.c:634
+#, c-format
+msgid "%%define variable '%s' requires keyword values"
+msgstr "%%define 變數 '%s' 需要關鍵字值"
+
+#: src/muscle-tab.c:639
+#, c-format
+msgid "%%define variable '%s' requires '\"...\"' values"
+msgstr "%%define 變數 '%s' 需要 '\"...\"' 值"
+
+#: src/muscle-tab.c:690
 #, c-format
 msgid "invalid value for %%define Boolean variable %s"
-msgstr ""
+msgstr "無效的值用於 %%define 布林變數 %s"
 
-#: src/muscle-tab.c:609
+#: src/muscle-tab.c:744
 #, c-format
 msgid "invalid value for %%define variable %s: %s"
-msgstr ""
+msgstr "無效的值用於 %%define 變數 %s:%s"
 
-#: src/muscle-tab.c:613
-#, fuzzy, c-format
+#: src/muscle-tab.c:749
+#, c-format
 msgid "accepted value: %s"
-msgstr "未使用的值:$%d"
+msgstr "被接受的值:%s"
 
-#: src/parse-gram.y:747
+#: src/parse-gram.y:746
+#, c-format
+msgid "character literals cannot be nonterminals"
+msgstr "字元常值不能為非終端字元"
+
+#: src/parse-gram.y:753
+#, c-format
+msgid "character literals cannot be used together with %s"
+msgstr "字元常值不能與 %s 一起使用"
+
+#: src/parse-gram.y:758
+#, c-format
+msgid "definition of %s"
+msgstr "%s 重複定義"
+
+#: src/parse-gram.y:889
 #, c-format
 msgid "missing identifier in parameter declaration"
 msgstr "在參數宣告中缺少識別項"
 
-#: src/print.c:47
+#: src/parse-gram.y:1018
 #, c-format
-msgid " type %d is %s\n"
-msgstr "類型 %d 為 %s\n"
+msgid "invalid version requirement: %s"
+msgstr "無效的版本需求:%s"
 
-#: src/print.c:164
+#: src/parse-gram.y:1032
+#, c-format
+msgid "require bison %s, but have %s"
+msgstr "需要版本為 %s 的 bison,卻只有 %s 版本"
+
+#: src/print-graph.c:62 src/print.c:345
+#, c-format
+msgid "State %d"
+msgstr "狀態 %d"
+
+#: src/print.c:136
 #, c-format
 msgid "shift, and go to state %d\n"
 msgstr "偏移,並進入狀態 %d\n"
 
-#: src/print.c:166
+#: src/print.c:138
 #, c-format
 msgid "go to state %d\n"
 msgstr "進入狀態 %d\n"
 
-#: src/print.c:203
+#: src/print.c:173
 msgid "error (nonassociative)\n"
 msgstr "錯誤 (非相聯的)\n"
 
-#: src/print.c:226
+#: src/print.c:195
 #, c-format
 msgid "reduce using rule %d (%s)"
 msgstr "使用規則 %d 以縮減 (%s)"
 
-#: src/print.c:228
+#: src/print.c:198
 #, c-format
 msgid "accept"
 msgstr "接受"
 
-#: src/print.c:264 src/print.c:338
+#: src/print.c:235 src/print.c:309
 msgid "$default"
 msgstr "$預設"
 
-#: src/print.c:373 src/print_graph.c:78
-#, fuzzy, c-format
-msgid "State %d"
-msgstr "狀態 %d "
-
-#: src/print.c:409
+#: src/print.c:364
 msgid "Terminals, with rules where they appear"
 msgstr "終結語詞,附有它們出現處的規則"
 
-#: src/print.c:436
+#: src/print.c:391
 msgid "Nonterminals, with rules where they appear"
 msgstr "非終結語詞,附有它們出現處的規則"
 
-#: src/print.c:465
-#, c-format
-msgid " on left:"
+#: src/print.c:416
+msgid "on left:"
 msgstr "於左側:"
 
-#: src/print.c:482
-#, c-format
-msgid " on right:"
+#: src/print.c:425
+msgid "on right:"
 msgstr "於右側:"
 
-#: src/print.c:510
-#, fuzzy
+#: src/print.c:447
 msgid "Rules useless in parser due to conflicts"
-msgstr "由於發生衝突導致規則一直無法縮減"
+msgstr "規則由於衝突而在剖析器中無用"
 
-#: src/reader.c:62
+#: src/reader.c:60
 #, c-format
 msgid "multiple %s declarations"
 msgstr "多重 %s 宣告"
 
-#: src/reader.c:133
-#, fuzzy, c-format
+#: src/reader.c:129
+#, c-format
 msgid "result type clash on merge function %s: <%s> != <%s>"
-msgstr "結果類型與合併功能相抵觸「%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
+#: src/reader.c:202
 #, c-format
 msgid "duplicated symbol name for %s ignored"
-msgstr ""
+msgstr "重複的符號名稱用於 %s 被忽略"
 
-#: src/reader.c:249
+#: src/reader.c:238
 #, c-format
 msgid "rule given for %s, which is a token"
-msgstr "用於 %s 這項記號的規則"
+msgstr "用於 %s 這項字組的規則"
 
-#: src/reader.c:304
+#: src/reader.c:295
 #, c-format
 msgid "type clash on default action: <%s> != <%s>"
 msgstr "類型與預設動作相抵觸:<%s> != <%s>"
 
-#: src/reader.c:310
+#: src/reader.c:318
 #, c-format
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "空白規則用於賦予類型的非終結語詞,以及沒有動作"
 
-#: src/reader.c:328
+#: src/reader.c:334
 #, c-format
 msgid "unused value: $%d"
 msgstr "未使用的值:$%d"
 
-#: src/reader.c:330
+#: src/reader.c:336
+#, c-format
 msgid "unset value: $$"
 msgstr "解除設定值:$$"
 
-#: src/reader.c:341
+#: src/reader.c:346
+#, c-format
+msgid "%%empty on non-empty rule"
+msgstr "%%empty 於非空的規則"
+
+#: src/reader.c:356
+#, c-format
+msgid "empty rule without %%empty"
+msgstr "空的規則而無 %%empty"
+
+#: src/reader.c:372
 #, c-format
 msgid "token for %%prec is not defined: %s"
-msgstr ""
+msgstr "用於 %%prec 的字組未定義:%s"
 
-#: src/reader.c:431 src/reader.c:445 src/reader.c:458
+#: src/reader.c:377
 #, c-format
-msgid "only one %s allowed per rule"
-msgstr "每個規則只允許一個 %s"
+msgid "only midrule actions can be typed: %s"
+msgstr "僅能輸入 midrule 動作:%s"
 
-#: src/reader.c:441 src/reader.c:456
+#: src/reader.c:504 src/reader.c:526 src/reader.c:597
 #, c-format
 msgid "%s affects only GLR parsers"
 msgstr "%s 只影響 GLR 剖析器"
 
-#: src/reader.c:443
+#: src/reader.c:507
 #, c-format
 msgid "%s must be followed by positive number"
 msgstr "%s 必須在正數之後"
 
-#: src/reader.c:554
+#: src/reader.c:562
+#, c-format
+msgid "POSIX Yacc does not support typed midrule actions"
+msgstr "POSIX Yacc 不支援輸入 midrule 動作"
+
+#: src/reader.c:666
 #, c-format
 msgid "rule is too long"
 msgstr "規則太長"
 
-#: src/reader.c:672
+#: src/reader.c:779
 #, c-format
 msgid "no rules in the input grammar"
 msgstr "在輸入文法中沒有規則"
 
-#: src/reduce.c:241
-#, fuzzy
+#: src/reduce.c:225
 msgid "rule useless in grammar"
-msgstr "在輸入文法中沒有規則"
+msgstr "規則在文法中無用"
 
-#: src/reduce.c:302
+#: src/reduce.c:280
 #, c-format
 msgid "nonterminal useless in grammar: %s"
-msgstr ""
+msgstr "非終結語詞在文法中無用:%s"
 
-#: src/reduce.c:350
-#, fuzzy
+#: src/reduce.c:321
 msgid "Nonterminals useless in grammar"
-msgstr "非終結語詞,附有它們出現處的規則"
+msgstr "非終結語詞在文法中無用"
 
-#: src/reduce.c:363
-#, fuzzy
+#: src/reduce.c:333
 msgid "Terminals unused in grammar"
-msgstr "在輸入文法中沒有規則"
+msgstr "終端機在文法中未使用"
 
-#: src/reduce.c:372
-#, fuzzy
+#: src/reduce.c:342
 msgid "Rules useless in grammar"
-msgstr "在輸入文法中沒有規則"
+msgstr "規則在文法中無用"
 
-#: src/reduce.c:385
+#: src/reduce.c:355
 #, c-format
 msgid "%d nonterminal useless in grammar"
 msgid_plural "%d nonterminals useless in grammar"
-msgstr[0] ""
+msgstr[0] "%d 非終結語詞在文法中無用"
 
-#: src/reduce.c:390
-#, fuzzy, c-format
+#: src/reduce.c:360
+#, c-format
 msgid "%d rule useless in grammar"
 msgid_plural "%d rules useless in grammar"
-msgstr[0] "在輸入文法中沒有規則"
+msgstr[0] "%d 規則在文法中無用"
 
-#: src/reduce.c:419
+#: src/reduce.c:386
 #, c-format
 msgid "start symbol %s does not derive any sentence"
 msgstr "啟始符號 %s 不衍生任何句子"
 
-#: src/scan-code.l:188
+#: src/scan-code.l:158
 #, c-format
 msgid "stray '%s'"
-msgstr ""
+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 ""
-
-#: src/scan-code.l:431 src/scan-code.l:434
+#: src/scan-code.l:330
 #, c-format
 msgid "refers to: %c%s at %s"
-msgstr ""
+msgstr "參考:%c%s 於 %s"
 
-#: src/scan-code.l:450
+#: src/scan-code.l:354
 #, c-format
 msgid "possibly meant: %c"
-msgstr ""
+msgstr "可能意指:%c"
 
-#: src/scan-code.l:459
+#: src/scan-code.l:363
 #, c-format
 msgid ", hiding %c"
-msgstr ""
+msgstr ",隱藏 %c"
 
-#: src/scan-code.l:467
+#: src/scan-code.l:371
 #, c-format
 msgid " at %s"
-msgstr ""
+msgstr " 於 %s"
 
-#: src/scan-code.l:472
+#: src/scan-code.l:375
 #, c-format
-msgid ", cannot be accessed from mid-rule action at $%d"
-msgstr ""
+msgid ", cannot be accessed from midrule action at $%d"
+msgstr ",無法自位於 $%d 之 midrule 動作存取"
 
-#: src/scan-code.l:521 src/scan-gram.l:783
+#: src/scan-code.l:423 src/scan-gram.l:831
 #, c-format
 msgid "integer out of range: %s"
 msgstr "整數超過範圍:%s"
 
-#: src/scan-code.l:610
-#, fuzzy, c-format
+#: src/scan-code.l:498
+#, c-format
 msgid "invalid reference: %s"
-msgstr "無效的指令:%s"
+msgstr "無效的參考:%s"
 
-#: src/scan-code.l:619
+#: src/scan-code.l:506
 #, c-format
 msgid "syntax error after '%c', expecting integer, letter, '_', '[', or '$'"
-msgstr ""
+msgstr "語法錯誤發生於 %c 之後,預期為整數、字母、'_'、'[' 或 '$'"
 
-#: src/scan-code.l:626
+#: src/scan-code.l:512
 #, c-format
 msgid "symbol not found in production before $%d: %.*s"
-msgstr ""
+msgstr "在 $%d 之前的結果中找不到符號:%.*s"
 
-#: src/scan-code.l:633
+#: src/scan-code.l:517
 #, c-format
 msgid "symbol not found in production: %.*s"
-msgstr ""
+msgstr "在結果中找不到符號:%.*s"
 
-#: src/scan-code.l:648
+#: src/scan-code.l:532
 #, c-format
 msgid "misleading reference: %s"
-msgstr ""
+msgstr "誤導的參考:%s"
 
-#: src/scan-code.l:663
-#, fuzzy, c-format
+#: src/scan-code.l:548
+#, c-format
 msgid "ambiguous reference: %s"
-msgstr "%2$s 的引數 %1$s 不明確"
+msgstr "模稜兩可的參考:%s"
 
-#: src/scan-code.l:700
+#: src/scan-code.l:584
 #, c-format
 msgid "explicit type given in untyped grammar"
-msgstr ""
+msgstr "在未定型態文法中給定明確的型態"
 
-#: src/scan-code.l:759
+#: src/scan-code.l:639
 #, c-format
 msgid "$$ for the midrule at $%d of %s has no declared type"
-msgstr ""
+msgstr "$$ 對於在 %2$s 中 $%1$d 的中段沒有任何宣告型態"
 
-#: src/scan-code.l:764
+#: src/scan-code.l:645
 #, c-format
 msgid "$$ of %s has no declared type"
-msgstr ""
+msgstr "%s 中的 $$ 沒有任何宣告型態"
 
-#: src/scan-code.l:786
+#: src/scan-code.l:671
 #, c-format
 msgid "$%s of %s has no declared type"
-msgstr ""
+msgstr "%2$s 中的 $%1$s 沒有任何宣告型態"
 
-#: src/scan-gram.l:149
-#, fuzzy, c-format
+#: src/scan-code.l:694
+#, c-format
+msgid "multiple occurrences of $%d with api.value.automove"
+msgstr "api.value.automove 多次發生 $%d 次"
+
+#: src/scan-gram.l:198
+#, c-format
 msgid "stray ',' treated as white space"
-msgstr "零星的「,」會被視為空白"
+msgstr "零星的 ',' 將視為空白"
 
-#: src/scan-gram.l:222
+#: src/scan-gram.l:292
 #, c-format
 msgid "invalid directive: %s"
 msgstr "無效的指令:%s"
 
-#: src/scan-gram.l:250
-#, fuzzy, c-format
+#: src/scan-gram.l:313
+#, c-format
 msgid "invalid identifier: %s"
-msgstr "無效的指令:%s"
+msgstr "無效的識別碼:%s"
 
-#: src/scan-gram.l:295
-#, fuzzy
+#: src/scan-gram.l:365
 msgid "invalid character"
 msgid_plural "invalid characters"
-msgstr[0] "無效的字元:%s"
+msgstr[0] "無效字元"
 
-#: 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
+#: src/scan-gram.l:383
 #, 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
+#: src/scan-gram.l:437
+#, c-format
+msgid "unexpected identifier in bracketed name: %s"
+msgstr "中括號內未預期的識別名稱:%s"
+
+#: src/scan-gram.l:459
+#, c-format
+msgid "an identifier expected"
+msgstr "預期是一個識別碼"
+
+#: src/scan-gram.l:464
+msgid "invalid character in bracketed name"
+msgid_plural "invalid characters in bracketed name"
+msgstr[0] "在中括號內的名稱有無效字元"
+
+#: src/scan-gram.l:535
+#, c-format
+msgid "POSIX Yacc does not support string literals"
+msgstr "POSIX Yacc 不支援字串常值"
+
+#: src/scan-gram.l:557
+#, c-format
+msgid "empty character literal"
+msgstr "空的字元實字"
+
+#: src/scan-gram.l:563
+#, c-format
+msgid "extra characters in character literal"
+msgstr "額外字元於字元實字"
+
+#: src/scan-gram.l:612 src/scan-gram.l:622 src/scan-gram.l:640
+#, c-format
 msgid "invalid number after \\-escape: %s"
-msgstr "無效的空字元:%s"
+msgstr "無效數字於 \\-escape 之後:%s"
 
-#: src/scan-gram.l:573
-#, fuzzy, c-format
+#: src/scan-gram.l:652
+#, c-format
 msgid "invalid character after \\-escape: %s"
-msgstr "無效的字元:%s"
+msgstr "\\-跳脫符號之後的無效字元:%s"
 
-#: src/scan-gram.l:901
-#, fuzzy, c-format
+#: src/scan-gram.l:824
+#, c-format
+msgid "POSIX Yacc does not support hexadecimal literals"
+msgstr "POSIX Yacc 不支援十六進位常值"
+
+#: src/scan-gram.l:962
+#, c-format
 msgid "missing %s at end of file"
-msgstr "檔案末端缺少「%s」"
+msgstr "於檔案結尾缺少 %s"
 
-#: src/scan-gram.l:912
-#, fuzzy, c-format
+#: src/scan-gram.l:973
+#, c-format
 msgid "missing %s at end of line"
-msgstr "列尾缺少「%s」"
+msgstr " 於列尾缺少 %s"
 
-#: src/scan-skel.l:146
+#: src/scan-skel.l:140
 #, c-format
 msgid "unclosed %s directive in skeleton"
-msgstr ""
+msgstr "在架構中有未關閉的 %s 指令"
 
-#: src/scan-skel.l:291
+#: src/scan-skel.l:258
 #, c-format
 msgid "too few arguments for %s directive in skeleton"
-msgstr ""
+msgstr "在架構中的 %s 指令引數太少"
 
-#: src/scan-skel.l:298
+#: src/scan-skel.l:265
 #, c-format
 msgid "too many arguments for %s directive in skeleton"
-msgstr ""
+msgstr "在架構中的 %s 指令引數太多"
 
-#: src/symlist.c:211
-#, c-format
-msgid "invalid $ value: $%d"
-msgstr "無效的 $ 值:$%d"
-
-#: src/symtab.c:71
+#: src/symtab.c:108
 #, c-format
 msgid "POSIX Yacc forbids dashes in symbol names: %s"
-msgstr ""
+msgstr "POSIX Yacc 在符號名稱中禁用橫線:%s"
 
-#: src/symtab.c:91
+#: src/symtab.c:118
 #, c-format
 msgid "too many symbols in input grammar (limit is %d)"
 msgstr "在輸入文法中太多符號 (限制為 %d)"
 
-#: src/symtab.c:154
+#: src/symtab.c:300
 #, c-format
 msgid "%s redeclaration for %s"
 msgstr "%s 重複宣告了 %s"
 
-#: src/symtab.c:164
+#: src/symtab.c:313
 #, c-format
 msgid "%s redeclaration for <%s>"
 msgstr "%s 重複宣告了 <%s>"
 
-#: src/symtab.c:332
+#: src/symtab.c:325
 #, c-format
-msgid "symbol %s redefined"
-msgstr "符號 %s 被重新定義"
+msgid "symbol %s redeclared as a token"
+msgstr "符號 %s 被重複宣告為 token"
 
-#: src/symtab.c:346
+#: src/symtab.c:326
 #, c-format
-msgid "symbol %s redeclared"
-msgstr "符號 %s 被重新宣告"
+msgid "symbol %s redeclared as a nonterminal"
+msgstr "符號 %s 被重複宣告為非終端符號"
 
-#: src/symtab.c:367
+#: src/symtab.c:370
 #, c-format
-msgid "redefining user token number of %s"
-msgstr "重新定義 %s 的使用者記號數目"
+msgid ""
+"symbol %s is used, but is not defined as a token and has no rules; did you "
+"mean %s?"
+msgstr "符號 %s 已使用過,但是並未定義為字組也沒有規則;你是說 %s 嗎?"
 
-#: src/symtab.c:395
+#: src/symtab.c:380
 #, c-format
 msgid "symbol %s is used, but is not defined as a token and has no rules"
-msgstr "符號 %s 已使用過,但是並未定義為記號也沒有規則"
+msgstr "符號 %s 已使用過,但是並未定義為字組也沒有規則"
 
-#: src/symtab.c:415
-#, fuzzy, c-format
+#: src/symtab.c:515
+#, c-format
+msgid "POSIX yacc reserves %%type to nonterminals"
+msgstr "POSIX yacc 保留 %%type 給非終端機"
+
+#: src/symtab.c:550
+#, c-format
+msgid "symbol %s redeclared"
+msgstr "符號 %s 被重複宣告"
+
+#: src/symtab.c:572
+#, c-format
+msgid "nonterminals cannot be given an explicit number"
+msgstr "不能向非終端字元傳入明確數字"
+
+#: src/symtab.c:575
+#, c-format
+msgid "redefining user token number of %s"
+msgstr "重新定義 %s 的使用者字組數目"
+
+#: src/symtab.c:578
+#, c-format
+msgid "user token number of %s too large"
+msgstr "使用者字組數 %s 太大"
+
+#: src/symtab.c:617
+#, c-format
+msgid "string literal %s not attached to a symbol"
+msgstr "字串常值 %s 未連結至符號"
+
+#: src/symtab.c:645
+#, c-format
+msgid "useless %s for type <%s>"
+msgstr "%s 對於類型 <%s> 無作用"
+
+#: src/symtab.c:650
+#, c-format
+msgid "type <%s> is used, but is not associated to any symbol"
+msgstr "類型 <%s> 已使用過,但是並未與任何符號相關聯"
+
+#: src/symtab.c:695
+#, c-format
+msgid "nonterminals cannot be given a string alias"
+msgstr "不能向非終端字元傳入字串別名"
+
+#: src/symtab.c:698
+#, c-format
 msgid "symbol %s used more than once as a literal string"
-msgstr "符號「%s」被超過一次做為常值字串使用"
+msgstr "符號 %s 超過一次使用為實字字串"
 
-#: src/symtab.c:418
-#, fuzzy, c-format
+#: src/symtab.c:701
+#, c-format
 msgid "symbol %s given more than one literal string"
-msgstr "符號「%s」給予一個以上的原文字串"
+msgstr "符號 %s 給定了超過一個實字字串"
 
-#: src/symtab.c:535
-#, fuzzy, c-format
+#: src/symtab.c:736
+#, c-format
 msgid "user token number %d redeclaration for %s"
-msgstr "%s 重複宣告了 %s"
+msgstr "使用者字組數字 %d 被重複宣告為 %s"
 
-#: src/symtab.c:539
-#, fuzzy, c-format
+#: src/symtab.c:740
+#, c-format
 msgid "previous declaration for %s"
-msgstr "前次宣告"
+msgstr "%s 的前一個宣告"
 
-#: src/symtab.c:915
+#: src/symtab.c:1063
+#, c-format
+msgid "token number too large"
+msgstr "字組數太大"
+
+#: src/symtab.c:1119
 #, c-format
 msgid "the start symbol %s is undefined"
 msgstr "未定義起始符號 %s"
 
-#: src/symtab.c:919
+#: src/symtab.c:1123
 #, c-format
 msgid "the start symbol %s is a token"
-msgstr "起始符號 %s 是一項記號"
+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
+#: src/symtab.c:1294
 #, c-format
-msgid "removing of '%s' failed"
-msgstr ""
+msgid "useless precedence and associativity for %s"
+msgstr "對於 %s 無作用的優先性與順序關聯性"
 
-#: djgpp/subpipe.c:85 djgpp/subpipe.c:92
+#: src/symtab.c:1297
 #, c-format
-msgid "creation of a temporary file failed"
-msgstr ""
+msgid "useless precedence for %s"
+msgstr "對於 %s 無作用的優先性"
 
-#: djgpp/subpipe.c:127
+#: src/symtab.c:1301
 #, c-format
-msgid "saving stdin failed"
-msgstr ""
+msgid "useless associativity for %s, use %%precedence"
+msgstr "對於 %s 無作用的順序關聯性,使用 %%precedence"
 
-#: 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 "deprecated directive, use %s"
+#~ msgstr "無效的指令:%s"
 
 #~ 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"
+#~ "Warning categories include:\n"
+#~ "  'conflicts-sr'      S/R conflicts (enabled by default)\n"
+#~ "  'conflicts-rr'      R/R conflicts (enabled by default)\n"
+#~ "  'deprecated'        obsolete constructs\n"
+#~ "  'empty-rule'        empty rules without %empty\n"
+#~ "  'midrule-values'    unset or unused midrule values\n"
+#~ "  'precedence'        useless precedence and associativity\n"
+#~ "  'yacc'              incompatibilities with POSIX Yacc\n"
+#~ "  'other'             all other warnings (enabled by default)\n"
+#~ "  'all'               all the warnings except 'yacc'\n"
+#~ "  'no-CATEGORY'       turn off warnings in CATEGORY\n"
+#~ "  'none'              turn off all the warnings\n"
+#~ "  'error[=CATEGORY]'  treat warnings as errors\n"
 #~ msgstr ""
-#~ "如果某個長選項必須使用引數,在對等的短選項中這些引數也是必須的。\n"
-#~ "選擇性的引數也有類似的規定。\n"
+#~ "警告分類包含:\n"
+#~ "  'conflicts-sr'      S/R 衝突 (預設啟用)\n"
+#~ "  'conflicts-rr'      R/R 衝突 (預設啟用)\n"
+#~ "  'deprecated'        淘汰的建構\n"
+#~ "  'empty-rule'        空的規則而不具有 %empty\n"
+#~ "  'midrule-values'    未設定或未使用的中段值\n"
+#~ "  'precedence'        無用的優先性與順序關聯性\n"
+#~ "  'yacc'              與 POSIX Yacc 不相容\n"
+#~ "  'other'             所有其他警告 (預設啟用)\n"
+#~ "  'all'               所有警告\n"
+#~ "  'no-CATEGORY'       在分類中關閉警告\n"
+#~ "  'none'              關閉所有警告\n"
+#~ "  'error[=CATEGORY]'  將警告當作錯誤\n"
 
-#~ msgid "Rules never reduced"
-#~ msgstr "永不縮減的規則"
+#~ 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"
 
-#~ msgid "useless rule"
-#~ msgstr "沒用到的規則"
+#~ msgid ""
+#~ "FEATURES is a list of comma separated words that can include:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    show errors with carets\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    show machine-readable fixes\n"
+#~ "  'syntax-only'\n"
+#~ "    do not generate any file\n"
+#~ "  'all'\n"
+#~ "    all of the above\n"
+#~ "  'none'\n"
+#~ "    disable all of the above\n"
+#~ "  "
+#~ msgstr ""
+#~ "<功能> 是逗號分隔的字詞清單,可以包含:\n"
+#~ "  'caret', 'diagnostics-show-caret'\n"
+#~ "    使用插入符號顯示錯誤\n"
+#~ "  'fixit', 'diagnostics-parseable-fixits'\n"
+#~ "    顯示機器可讀的修正\n"
+#~ "  'syntax-only'\n"
+#~ "    不產生任何檔案\n"
+#~ "  'all'\n"
+#~ "    以上全部\n"
+#~ "  'none'\n"
+#~ "    停用以上全部\n"
+#~ "  "
 
-#~ msgid "useless nonterminal: %s"
-#~ msgstr "沒用到的非終結符號:%s"
+#~ msgid "invalid argument %s for %s"
+#~ msgstr "%2$s 的引數 %1$s 無效"
 
-#~ msgid "Useless nonterminals"
-#~ msgstr "沒用到的非終結符號"
+#~ msgid "ambiguous argument %s for %s"
+#~ msgstr "%2$s 的引數 %1$s 不明確"
 
-#~ msgid "Terminals which are not used"
-#~ msgstr "沒用到的終結符號"
+#~ msgid "Valid arguments are:"
+#~ msgstr "有效的引數為:"
 
-#~ msgid "Useless rules"
-#~ msgstr "沒用到的規則"
+#~ msgid "write error"
+#~ msgstr "寫入錯誤"
 
-#~ msgid "%d rule never reduced\n"
-#~ msgid_plural "%d rules never reduced\n"
-#~ msgstr[0] "%d 條規則永不縮減\n"
+#~ msgid "Unknown system error"
+#~ msgstr "不明的系統錯誤"
 
-#~ msgid "%d useless nonterminal"
-#~ msgid_plural "%d useless nonterminals"
-#~ msgstr[0] "%d 項沒用到的非終結符號"
+#~ msgid "%s: option '%s%s' is ambiguous\n"
+#~ msgstr "%s:選項 '%s%s' 是模稜兩可的\n"
 
-#~ msgid " and "
-#~ msgstr " 和 "
+#~ msgid "%s: option '%s%s' is ambiguous; possibilities:"
+#~ msgstr "%s:選項 '%s%s' 是模稜兩可的;也許是:"
 
-#~ msgid "%d useless rule"
-#~ msgid_plural "%d useless rules"
-#~ msgstr[0] "%d 條沒用到的規則"
+#~ msgid "%s: unrecognized option '%s%s'\n"
+#~ msgstr "%s:無法辨識的選項  '%s%s'\n"
 
-#~ msgid "invalid escape sequence: %s"
-#~ msgstr "無效的跳脫序列:%s"
+#~ msgid "%s: option '%s%s' doesn't allow an argument\n"
+#~ msgstr "%s:選項  '%s%s' 不允許引數\n"
 
-#~ msgid "unrecognized escape sequence: %s"
-#~ msgstr "無法辨識的跳脫序列:%s"
+#~ msgid "%s: option '%s%s' requires an argument\n"
+#~ msgstr "%s:選項 '%s%s' 需要一個引數\n"
 
-#~ msgid "tokens %s and %s both assigned number %d"
-#~ msgstr "記號 %s 與 %s 兩者都指派了數字 %d"
+#~ msgid "%s: invalid option -- '%c'\n"
+#~ msgstr "%s:無效的選項 -- %c\n"
 
-#~ msgid "%s: illegal option -- %c\n"
-#~ msgstr "%s:不合法的選項 ─ %c\n"
+#~ msgid "%s: option requires an argument -- '%c'\n"
+#~ msgstr "%s:選項需要一個引數 -- %c\n"
+
+#~ msgid "memory exhausted"
+#~ msgstr "記憶體耗盡"
+
+#~ msgid "cannot create pipe"
+#~ msgstr "無法建立管線"
+
+#~ msgid "%s subprocess failed"
+#~ msgstr "%s 子程序失敗"
+
+#~ msgid "`"
+#~ msgstr "「"
+
+#~ msgid "'"
+#~ msgstr "」"
+
+#~ msgid "Execution times (seconds)"
+#~ msgstr "執行時間 (秒)"
+
+#~ msgid "CPU user"
+#~ msgstr "CPU 使用者"
+
+#~ msgid "CPU system"
+#~ msgstr "CPU 系統"
+
+#~ msgid "wall clock"
+#~ msgstr "經過時間"
+
+#~ msgid "_open_osfhandle failed"
+#~ msgstr "_open_osfhandle 失敗"
+
+#~ msgid "cannot restore fd %d: dup2 failed"
+#~ msgstr "無法還原 fd %d:dup2 失敗"
+
+#~ msgid "%s subprocess"
+#~ msgstr "%s 子程序"
+
+#~ msgid "%s subprocess got fatal signal %d"
+#~ msgstr "%s 子程序得到嚴重信號 %d"
diff --git a/runtime-po/LINGUAS b/runtime-po/LINGUAS
index 30d62d8..a7aa440 100644
--- a/runtime-po/LINGUAS
+++ b/runtime-po/LINGUAS
@@ -1,4 +1,6 @@
 ast
+bg
+ca
 da
 de
 el
@@ -11,6 +13,7 @@
 gl
 hr
 hu
+ia
 id
 it
 ja
diff --git a/runtime-po/Makefile.in.in b/runtime-po/Makefile.in.in
index 2a71983..65184f6 100644
--- a/runtime-po/Makefile.in.in
+++ b/runtime-po/Makefile.in.in
@@ -8,13 +8,14 @@
 # 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
+# Origin: gettext-0.19
+GETTEXT_MACRO_VERSION = 0.19
 
 PACKAGE = @PACKAGE@
 VERSION = @VERSION@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 
+SED = @SED@
 SHELL = /bin/sh
 @SET_MAKE@
 
@@ -76,6 +77,16 @@
 
 CATALOGS = @CATALOGS@
 
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
 # Makevars gets inserted here. (Don't remove this line!)
 
 .SUFFIXES:
@@ -138,11 +149,29 @@
 
 # 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.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
 $(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 '; \
+	package_gnu="$(PACKAGE_GNU)"; \
+	test -n "$$package_gnu" || { \
+	  if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+		 LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+			       -size -10000000c -exec grep 'GNU @PACKAGE@' \
+			       /dev/null '{}' ';' 2>/dev/null; \
+	       else \
+		 LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+	       fi; \
+	     } | grep -v 'libtool:' >/dev/null; then \
+	     package_gnu=yes; \
+	   else \
+	     package_gnu=no; \
+	   fi; \
+	}; \
+	if test "$$package_gnu" = "yes"; then \
+	  package_prefix='GNU '; \
 	else \
-	  package_gnu=''; \
+	  package_prefix=''; \
 	fi; \
 	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
 	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
@@ -162,7 +191,7 @@
 	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
 	      --files-from=$(srcdir)/POTFILES.in \
 	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
-	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-name="$${package_prefix}@PACKAGE@" \
 	      --package-version='@VERSION@' \
 	      --msgid-bugs-address="$$msgid_bugs_address" \
 	    ;; \
@@ -190,9 +219,10 @@
 
 # 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
+$(POFILES): $(POFILESDEPS)
 	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
 	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
 	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
 	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
 	  cd $(srcdir) \
@@ -266,7 +296,6 @@
 
 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@
@@ -354,7 +383,7 @@
 
 distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
 dist distdir:
-	$(MAKE) update-po
+	test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
 	@$(MAKE) dist2
 # This is a separate target because 'update-po' must be executed before.
 dist2: stamp-po $(DISTFILES)
diff --git a/runtime-po/Makevars b/runtime-po/Makevars
index c53d357..f51ad26 100644
--- a/runtime-po/Makevars
+++ b/runtime-po/Makevars
@@ -9,20 +9,19 @@
 
 # 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\
 \
---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:3:c-format\
+ --flag=complain_indent:4:c-format\
+ --flag=unexpected_end:2: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+}
+ --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
@@ -53,3 +52,15 @@
 # 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 =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
diff --git a/runtime-po/POTFILES.in b/runtime-po/POTFILES.in
index 7e73063..083438a 100644
--- a/runtime-po/POTFILES.in
+++ b/runtime-po/POTFILES.in
@@ -1,3 +1,3 @@
-data/glr.c
-data/lalr1.cc
-data/yacc.c
+data/skeletons/glr.c
+data/skeletons/lalr1.cc
+data/skeletons/yacc.c
diff --git a/runtime-po/Rules-quot b/runtime-po/Rules-quot
index af52487..7b92c7e 100644
--- a/runtime-po/Rules-quot
+++ b/runtime-po/Rules-quot
@@ -1,3 +1,4 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
 # 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
@@ -14,13 +15,23 @@
 
 .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; \
+	if test "$(PACKAGE)" = "gettext-tools"; 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 $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+	   | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+	   { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	     '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+	       $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+	       ;; \
+	     *) \
+	       $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+	       ;; \
+	     esac } 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 \
diff --git a/runtime-po/ast.gmo b/runtime-po/ast.gmo
index a4a8781..d626d2e 100644
--- a/runtime-po/ast.gmo
+++ b/runtime-po/ast.gmo
Binary files differ
diff --git a/runtime-po/ast.po b/runtime-po/ast.po
index 19ede81..484e154 100644
--- a/runtime-po/ast.po
+++ b/runtime-po/ast.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,48 +15,57 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "fallu de sistasis: nun puede facese copia de seguridá"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "fallu de sistasis"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memoria escosada"
diff --git a/runtime-po/bg.gmo b/runtime-po/bg.gmo
new file mode 100644
index 0000000..d8c2f34
--- /dev/null
+++ b/runtime-po/bg.gmo
Binary files differ
diff --git a/runtime-po/bg.po b/runtime-po/bg.po
new file mode 100644
index 0000000..d5642de
--- /dev/null
+++ b/runtime-po/bg.po
@@ -0,0 +1,70 @@
+# Bulgarian translation of bison-runtime po-file.
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Alexander Shopov <ash@kambanaria.org>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 3.3.90\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-06-20 18:38+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
+msgid "syntax error: cannot back up"
+msgstr "синтактична грешка: невъзможно връщане назад"
+
+#: data/skeletons/glr.c:1793
+msgid "syntax is ambiguous"
+msgstr "нееднозначен синтаксис"
+
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
+msgid "syntax error"
+msgstr "синтактична грешка"
+
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "синтактична грешка: не се очаква „%s“"
+
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "синтактична грешка: не се очаква „%s“, а „%s“"
+
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "синтактична грешка: не се очаква „%s“, а „%s“ или „%s“"
+
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "синтактична грешка: не се очаква „%s“, а „%s“, „%s“ или „%s“"
+
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "синтактична грешка: не се очаква „%s“, а „%s“, „%s“, „%s“ или „%s“"
+
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
+msgid "memory exhausted"
+msgstr "паметта е изчерпана"
diff --git a/runtime-po/bison-runtime.pot b/runtime-po/bison-runtime.pot
index 99536ac..2fee370 100644
--- a/runtime-po/bison-runtime.pot
+++ b/runtime-po/bison-runtime.pot
@@ -1,14 +1,14 @@
 # SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the GNU bison package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: bison 2.7\n"
+"Project-Id-Version: GNU bison 3.5\n"
 "Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
-"POT-Creation-Date: 2012-12-12 16:09+0100\n"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -17,46 +17,54 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr ""
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr ""
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr ""
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr ""
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s"
 msgstr ""
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr ""
diff --git a/runtime-po/ca.gmo b/runtime-po/ca.gmo
new file mode 100644
index 0000000..edf2c04
--- /dev/null
+++ b/runtime-po/ca.gmo
Binary files differ
diff --git a/runtime-po/ca.po b/runtime-po/ca.po
new file mode 100644
index 0000000..dd02bf9
--- /dev/null
+++ b/runtime-po/ca.po
@@ -0,0 +1,71 @@
+# Missatges en català per a GNU bison-runtime
+# Copyright (C) 2017 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Walter Garcia-Fontes <walter.garcia@upf.edu>, 2017
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 3.0.2\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2017-02-27 08:24+0100\n"
+"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
+msgid "syntax error: cannot back up"
+msgstr "error de sintaxi: no es pot fer la còpia de seguretat"
+
+#: data/skeletons/glr.c:1793
+msgid "syntax is ambiguous"
+msgstr "la sintaxi és ambigua"
+
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
+msgid "syntax error"
+msgstr "error de sintaxi"
+
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "error de sintaxi, no s'esperava %s"
+
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "error de sintaxi, no s'esperava %s, s'esperava %s"
+
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "error de sintaxi, no s'esperava %s, s'esperava %s o %s"
+
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "error de sintaxi, no s'esperava %s, s'esperava %s o %s o %s"
+
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "error de sintaxi, no s'esperava %s, s'esperava %s o %s o %s o %s"
+
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
+msgid "memory exhausted"
+msgstr "s'ha exhaurit la memòria"
diff --git a/runtime-po/da.gmo b/runtime-po/da.gmo
index 30ebc8a..5ad284e 100644
--- a/runtime-po/da.gmo
+++ b/runtime-po/da.gmo
Binary files differ
diff --git a/runtime-po/da.po b/runtime-po/da.po
index 4aceebc..0e1012c 100644
--- a/runtime-po/da.po
+++ b/runtime-po/da.po
@@ -10,7 +10,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -18,48 +18,57 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "syntaksfejl: kan ikke lave sikkerhedskopi"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "syntaksfejl"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "syntaksfejl, uventet %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "hukommelsen opbrugt"
diff --git a/runtime-po/de.gmo b/runtime-po/de.gmo
index 680c88b..f0a7d8a 100644
--- a/runtime-po/de.gmo
+++ b/runtime-po/de.gmo
Binary files differ
diff --git a/runtime-po/de.po b/runtime-po/de.po
index 97a896a..9f086c1 100644
--- a/runtime-po/de.po
+++ b/runtime-po/de.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,49 +15,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "Syntaxfehler: Kann nicht zurück gehen"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "Syntaxfehler"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "Syntaxfehler, unerwartetes %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "Speicher ausgeschöpft"
diff --git a/runtime-po/el.gmo b/runtime-po/el.gmo
index 09c3e95..7fcd4f9 100644
--- a/runtime-po/el.gmo
+++ b/runtime-po/el.gmo
Binary files differ
diff --git a/runtime-po/el.po b/runtime-po/el.po
index bae711b..1464460 100644
--- a/runtime-po/el.po
+++ b/runtime-po/el.po
@@ -2,61 +2,71 @@
 # 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.
+# Lefteris Dimitroulakis <edimitro@tee.gr>, 2008, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime-2.3b\n"
+"Project-Id-Version: bison-runtime-3.3.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-04-29 15:49+0200\n"
+"Last-Translator: Lefteris Dimitroulakis <ledimitro@gmail.com>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "συντακτικό σφάλμα: δεν μπορώ να κάνω πίσω"
+msgstr "συντακτικό σφάλμα: δεν μπορώ να δημιουργήσω αντίγραφο ασφαλείας"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "συντακτικό σφάλμα"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "συντακτικό σφάλμα, αναπάντεχο %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "συντακτικό σφάλμα, αναπάντεχο %s, αναμενόμενο %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "η μνήμη εξαντλήθηκε"
diff --git a/runtime-po/eo.gmo b/runtime-po/eo.gmo
index 3c3573d..8f6edd0 100644
--- a/runtime-po/eo.gmo
+++ b/runtime-po/eo.gmo
Binary files differ
diff --git a/runtime-po/eo.po b/runtime-po/eo.po
index e166a93..a02100b 100644
--- a/runtime-po/eo.po
+++ b/runtime-po/eo.po
@@ -1,61 +1,71 @@
 # Esperanto translation
-# Copyright (C) 2010 Free Software Foundation, Inc.
+# Copyright (C) 2010, 2013, 2018 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bison package.
-# Felipe Castro <fefcas@gmail.com>, 2010.
+# Felipe Castro <fefcas@gmail.com>, 2010, 2013, 2018.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.4.3\n"
+"Project-Id-Version: bison-runtime 3.0.5\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2018-08-16 21:39-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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "sintaks-eraro: ni ne povas sekurkopii"
+msgstr "sintaks-eraro: ne eblas savkopii"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "sintaks-eraro"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "sintaks-eraro, neatendita %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
-msgstr "memoro eluzita"
+msgstr "memoro entute plenigita"
diff --git a/runtime-po/es.gmo b/runtime-po/es.gmo
index 2591452..84c6932 100644
--- a/runtime-po/es.gmo
+++ b/runtime-po/es.gmo
Binary files differ
diff --git a/runtime-po/es.po b/runtime-po/es.po
index b42be5e..10638dc 100644
--- a/runtime-po/es.po
+++ b/runtime-po/es.po
@@ -1,85 +1,89 @@
-# Mensajes en español para GNU Bison.
+# Mensajes en español para GNU Bison.
 # Copyright (C) 1998 Free Software Foundation, Inc.
-# Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>, 1998.
-#
+# This file is distributed under the same license as the bison package.
+# Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>, 1998.
+# Santiago Vila Doncel <sanvila@unex.es>, 2013.
 # Corregido por:
-#
-# cll - Carlos Linares López        clinares@acm.org
-#                                   clinares@delicias.dia.fi.upm.es
-#
+# 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
+# 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
+# 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
+# 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
+# Carlos Linares
 # --------------------------------------------------------------------
-#
+# Francisco Javier Serrador <fserrador@gmail.com>, 2018.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 1.875\n"
+"Project-Id-Version: bison-runtime 3.0.2\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2018-03-29 11:39+0200\n"
+"Last-Translator: Francisco Javier Serrador <fserrador@gmail.com>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr ""
+msgstr "error sintáctico: no puede respaldar"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr ""
+msgstr "la sintaxis es 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
-msgstr ""
+msgstr "error de sintaxis"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
-msgstr ""
+msgstr "error de sintaxis, %s inesperado"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
-msgstr ""
+msgstr "error de sintaxis, %s inesperado, se esperaba %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s"
-msgstr ""
+msgstr "error de sintaxis, %s inesperado, se esperaba %s o %s"
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-msgstr ""
+msgstr "error de sintaxis, %s inesperado, se esperaba %s o %s o %s"
 
-#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
-msgstr ""
+msgstr "error de sintaxis, %s inesperado, se esperaba %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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memoria agotada"
diff --git a/runtime-po/et.gmo b/runtime-po/et.gmo
index 24f2bcd..e57f93e 100644
--- a/runtime-po/et.gmo
+++ b/runtime-po/et.gmo
Binary files differ
diff --git a/runtime-po/et.po b/runtime-po/et.po
index ccf01c8..6a544be 100644
--- a/runtime-po/et.po
+++ b/runtime-po/et.po
@@ -1,61 +1,70 @@
 # 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.
+# Toomas Soome <Toomas.Soome@microlink.ee>, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.5-rc1\n"
+"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: 2011-05-03 22:19+0300\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-04-04 00:39+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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "süntaksi viga: ei saa toetada"
+msgstr "süntaksi viga: ei saa toetada"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr "süntaks on segane"
+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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
-msgstr "süntaksi viga"
+msgstr "süntaksi viga"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
-msgstr "süntaksi viga, ootamatu %s"
+msgstr "süntaksi viga, ootamatu %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
-msgstr "süntaksi viga, ootamatu %s, ootasin %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s"
-msgstr "süntaksi viga, ootamatu %s, ootasin %s või %s"
+msgstr "süntaksi viga, ootamatu %s, ootasin %s või %s"
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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"
+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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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"
+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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
-msgstr "mälu on otsas"
+msgstr "mälu on otsas"
diff --git a/runtime-po/fi.gmo b/runtime-po/fi.gmo
index b35e92a..c657a41 100644
--- a/runtime-po/fi.gmo
+++ b/runtime-po/fi.gmo
Binary files differ
diff --git a/runtime-po/fi.po b/runtime-po/fi.po
index 15bf1a1..cb24062 100644
--- a/runtime-po/fi.po
+++ b/runtime-po/fi.po
@@ -8,7 +8,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -16,49 +16,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Generator: KBabel 1.11.2\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "syntaksivirhe: ei voida tehdä varmuuskopiota"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "syntaksivirhe"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "syntaksivirhe, odottamaton %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "muisti loppui"
diff --git a/runtime-po/fr.gmo b/runtime-po/fr.gmo
index d8d9057..4118e84 100644
--- a/runtime-po/fr.gmo
+++ b/runtime-po/fr.gmo
Binary files differ
diff --git a/runtime-po/fr.po b/runtime-po/fr.po
index a67f089..ee48199 100644
--- a/runtime-po/fr.po
+++ b/runtime-po/fr.po
@@ -1,62 +1,78 @@
-# 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
+# Messages français pour Bison.
+# Copyright © 2004 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.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
+#
+# Réencodage ISO-8859-1 => UTF-8 et typos, S.Aulery, 2015.
+# relecture complète, S. Aulery, 24-04-2015.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison-runtime 2.1\n"
+"Project-Id-Version: bison-runtime 3.0.2\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2015-04-25 16:39+0200\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "erreur de syntaxe: ne peut reculer"
+msgstr "erreur de syntaxe : retour arrière impossible"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr "syntaxe ambiguë"
+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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "erreur de syntaxe"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
-msgstr "mémoire épuisée"
+msgstr "mémoire épuisée"
diff --git a/runtime-po/ga.gmo b/runtime-po/ga.gmo
index 82b63e0..6803dce 100644
--- a/runtime-po/ga.gmo
+++ b/runtime-po/ga.gmo
Binary files differ
diff --git a/runtime-po/ga.po b/runtime-po/ga.po
index 351d0fc..ea5666e 100644
--- a/runtime-po/ga.po
+++ b/runtime-po/ga.po
@@ -1,62 +1,74 @@
 # 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.
+# Kevin Patrick Scannell <kscanne@gmail.com>, 2004, 2005, 2017.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.1\n"
+"Project-Id-Version: bison-runtime 3.0.2\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2017-01-08 23:14-0500\n"
+"Last-Translator: Kevin Patrick 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=ISO-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: data/glr.c:855 data/yacc.c:776
+# sic; níl "cúltaca" i gceist anseo
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "earráid chomhréire: ní féidir cúlú"
+msgstr "earráid chomhréire: ní féidir cúlú a dhéanamh"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr "comhréir dhébhríoch"
+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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
-msgstr "earráid chomhréire"
+msgstr "earráid chomhréire"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
-msgstr "earráid chomhréire, %s gan choinne"
+msgstr "earráid chomhréire, %s gan súil leis"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
-msgstr "earráid chomhréire, %s gan choinne, bhíothas ag súil le %s"
+msgstr "earráid chomhréire, %s gan súil leis, bhíothas ag súil le %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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"
+msgstr "earráid chomhréire, %s gan súil leis, bhíothas ag súil le %s nó %s"
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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"
+msgstr ""
+"earráid chomhréire, %s gan súil leis, bhíothas ag súil le %s nó %s nó %s"
 
-#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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"
+"earráid chomhréire, %s gan súil leis, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
-msgstr "cuimhne ídithe"
+msgstr "cuimhne ídithe"
diff --git a/runtime-po/gl.gmo b/runtime-po/gl.gmo
index b4e05a5..37dafc1 100644
--- a/runtime-po/gl.gmo
+++ b/runtime-po/gl.gmo
Binary files differ
diff --git a/runtime-po/gl.po b/runtime-po/gl.po
index 8dbbcca..f9846b6 100644
--- a/runtime-po/gl.po
+++ b/runtime-po/gl.po
@@ -1,66 +1,77 @@
 # 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.
+# Copyright (C) 2010, 2015 Leandro Regueiro.
 #
-# Leandro Regueiro <leandro.regueiro@gmail.com>, 2010.
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2010, 2015.
 #
 # 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"
+"Project-Id-Version: bison-runtime 3.0.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-11-30 16:43+0100\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2015-09-09 16:02+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 1.5.4\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "erro de sintaxe: non foi posible realizar unha copia de seguridade"
+msgstr "erro de sintaxe: non foi posíbel realizar unha copia de seguridade"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memoria esgotada"
diff --git a/runtime-po/hr.gmo b/runtime-po/hr.gmo
index dab7710..4d47efc 100644
--- a/runtime-po/hr.gmo
+++ b/runtime-po/hr.gmo
Binary files differ
diff --git a/runtime-po/hr.po b/runtime-po/hr.po
index 7de7430..cdb50a0 100644
--- a/runtime-po/hr.po
+++ b/runtime-po/hr.po
@@ -2,63 +2,73 @@
 # 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.
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.6.5\n"
+"Project-Id-Version: bison-runtime 2.7.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-11-09 17:02+0100\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-04-18 00:01+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\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: Gtranslator 2.91.6\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "sintaksna greška: ne mogu napraviti sigurnosnu kopiju"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "sintaksna greška"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memorija iscrpljena"
diff --git a/runtime-po/hu.gmo b/runtime-po/hu.gmo
index 18b6438..3cb0379 100644
--- a/runtime-po/hu.gmo
+++ b/runtime-po/hu.gmo
Binary files differ
diff --git a/runtime-po/hu.po b/runtime-po/hu.po
index af383eb..3c14e26 100644
--- a/runtime-po/hu.po
+++ b/runtime-po/hu.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,48 +15,57 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "szintaktikai hiba: nem menthető"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "szintaktikai hiba"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "a memória kiürült"
diff --git a/runtime-po/ia.gmo b/runtime-po/ia.gmo
new file mode 100644
index 0000000..a772bc6
--- /dev/null
+++ b/runtime-po/ia.gmo
Binary files differ
diff --git a/runtime-po/ia.po b/runtime-po/ia.po
new file mode 100644
index 0000000..2d184fa
--- /dev/null
+++ b/runtime-po/ia.po
@@ -0,0 +1,70 @@
+# Interlingua translations for bison package.
+# Copyright (C) 2013 Free Software Foundation, Inc.
+# This file is distributed under the same license as the bison package.
+# Nik Kalach <nik.kalach@inbox.ru>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bison-runtime 2.7.1\n"
+"Report-Msgid-Bugs-To: bug-bison@gnu.org\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-04-15 23:43+0400\n"
+"Last-Translator: Nik Kalach <nik.kalach@inbox.ru>\n"
+"Language-Team: Interlingua <translation-team-ia@lists.sourceforge.net>\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
+msgid "syntax error: cannot back up"
+msgstr "error de syntaxe: non pote reculer"
+
+#: data/skeletons/glr.c:1793
+msgid "syntax is ambiguous"
+msgstr "syntaxe es ambigue"
+
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
+msgid "syntax error"
+msgstr "error de syntaxe"
+
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
+#, c-format
+msgid "syntax error, unexpected %s"
+msgstr "error de syntaxe, %s inexpectate"
+
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s"
+msgstr "error de syntaxe, %s inexpectate in loco de %s"
+
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s"
+msgstr "error de syntaxe, %s inexpectate in loco de %s o %s"
+
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s"
+msgstr "error de syntaxe, %s inexpectate in loco de %s o %s o %s"
+
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
+#, c-format
+msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
+msgstr "error de syntaxe, %s inexpectate in loco de %s o %s o %s o %s"
+
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
+msgid "memory exhausted"
+msgstr "memoria exhauste"
diff --git a/runtime-po/id.gmo b/runtime-po/id.gmo
index 2307386..e5a31a4 100644
--- a/runtime-po/id.gmo
+++ b/runtime-po/id.gmo
Binary files differ
diff --git a/runtime-po/id.po b/runtime-po/id.po
index 818fd79..47ce15d 100644
--- a/runtime-po/id.po
+++ b/runtime-po/id.po
@@ -8,7 +8,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -16,52 +16,61 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: KBabel 1.10\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "kesalahan sintaks: tidak dapat membackup"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "kesalahan sintaks"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memori habis"
diff --git a/runtime-po/it.gmo b/runtime-po/it.gmo
index 505879a..f7e79b2 100644
--- a/runtime-po/it.gmo
+++ b/runtime-po/it.gmo
Binary files differ
diff --git a/runtime-po/it.po b/runtime-po/it.po
index cc22968..2169260 100644
--- a/runtime-po/it.po
+++ b/runtime-po/it.po
@@ -9,7 +9,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -17,49 +17,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "errore di sintassi: impossibile tornare indietro"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "errore di sintassi"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memoria esaurita"
diff --git a/runtime-po/ja.gmo b/runtime-po/ja.gmo
index d75c106..710734e 100644
--- a/runtime-po/ja.gmo
+++ b/runtime-po/ja.gmo
Binary files differ
diff --git a/runtime-po/ja.po b/runtime-po/ja.po
index 6e2a199..c65dc2a 100644
--- a/runtime-po/ja.po
+++ b/runtime-po/ja.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,49 +15,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "構文エラー: バックアップすることができません"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "構文エラー"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "構文エラー、予期しない %s です"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "構文エラー、予期しない %s です。予期されるのは %s です"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "メモリを使い果たしました"
diff --git a/runtime-po/ky.gmo b/runtime-po/ky.gmo
index 3460529..69cc72c 100644
--- a/runtime-po/ky.gmo
+++ b/runtime-po/ky.gmo
Binary files differ
diff --git a/runtime-po/ky.po b/runtime-po/ky.po
index 6d6a65a..8312810 100644
--- a/runtime-po/ky.po
+++ b/runtime-po/ky.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,49 +15,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Poedit-Language: Kyrgyz\n"
 "X-Poedit-Country: KYRGYZSTAN\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "синтаксис катасы: көчурмө алынган жок"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "синтаксис катасы"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "синтаксис катасы, күтүлбөгөн %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "синтаксис катасы, күтүлбөгөн %s, %s күтүлүүдө"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "эс колдонулуп бүттүү"
diff --git a/runtime-po/lt.gmo b/runtime-po/lt.gmo
index e41eddc..5c7d9ef 100644
--- a/runtime-po/lt.gmo
+++ b/runtime-po/lt.gmo
Binary files differ
diff --git a/runtime-po/lt.po b/runtime-po/lt.po
index a75532c..2276b91 100644
--- a/runtime-po/lt.po
+++ b/runtime-po/lt.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,50 +15,59 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "sintaksės klaida: negalima grįžti"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "sintaksės klaida"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "baigėsi atmintis"
diff --git a/runtime-po/lv.gmo b/runtime-po/lv.gmo
index 5064b98..7efec29 100644
--- a/runtime-po/lv.gmo
+++ b/runtime-po/lv.gmo
Binary files differ
diff --git a/runtime-po/lv.po b/runtime-po/lv.po
index 7315658..553ba1a 100644
--- a/runtime-po/lv.po
+++ b/runtime-po/lv.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,51 +15,60 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "sintakses kļūda: nevar dublēt datus"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "sintakses kļūda"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "izsmelta atmiņa"
diff --git a/runtime-po/ms.gmo b/runtime-po/ms.gmo
index 708d245..2ea63a8 100644
--- a/runtime-po/ms.gmo
+++ b/runtime-po/ms.gmo
Binary files differ
diff --git a/runtime-po/ms.po b/runtime-po/ms.po
index 61dd323..49132af 100644
--- a/runtime-po/ms.po
+++ b/runtime-po/ms.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,50 +15,59 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: KBabel 0.9.5\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "ralat sintaks: tidak dapat mengundur"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "ralat sintaks"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "kehabisan memori"
diff --git a/runtime-po/nb.gmo b/runtime-po/nb.gmo
index 7bf83bd..b4aea36 100644
--- a/runtime-po/nb.gmo
+++ b/runtime-po/nb.gmo
Binary files differ
diff --git a/runtime-po/nb.po b/runtime-po/nb.po
index e69c5ca..4b7c584 100644
--- a/runtime-po/nb.po
+++ b/runtime-po/nb.po
@@ -22,7 +22,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -30,48 +30,57 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "syntaksfeil: kan ikke gå tilbake"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "syntaksfeil"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "syntaksfeil, uforventet %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "minne er uttømt"
diff --git a/runtime-po/nl.gmo b/runtime-po/nl.gmo
index d17c65b..c578158 100644
--- a/runtime-po/nl.gmo
+++ b/runtime-po/nl.gmo
Binary files differ
diff --git a/runtime-po/nl.po b/runtime-po/nl.po
index 991861b..2f2a150 100644
--- a/runtime-po/nl.po
+++ b/runtime-po/nl.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,48 +15,57 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "syntaxfout: kan niet terugkeren"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "syntaxfout"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "syntaxfout, %s onverwacht"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "geen geheugen meer beschikbaar"
diff --git a/runtime-po/pl.gmo b/runtime-po/pl.gmo
index 9945a0a..6afe8ca 100644
--- a/runtime-po/pl.gmo
+++ b/runtime-po/pl.gmo
Binary files differ
diff --git a/runtime-po/pl.po b/runtime-po/pl.po
index 773023d..44303c0 100644
--- a/runtime-po/pl.po
+++ b/runtime-po/pl.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,50 +15,59 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "błąd składni: nie można cofnąć przesunięcia symbolu leksykalnego"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "błąd składni"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "pamięć wyczerpana"
diff --git a/runtime-po/pt.gmo b/runtime-po/pt.gmo
index fbcf44e..dfee1ae 100644
--- a/runtime-po/pt.gmo
+++ b/runtime-po/pt.gmo
Binary files differ
diff --git a/runtime-po/pt.po b/runtime-po/pt.po
index dafc71f..aac6129 100644
--- a/runtime-po/pt.po
+++ b/runtime-po/pt.po
@@ -1,64 +1,72 @@
-# bison-runtime-2.4: Translation to Portuguese.
-# Copyright (C) 2009 Free Software Foundation, Inc.
+# Bison-runtime	3.0.2.
+# Copyright (C) 2018 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.
+# Pedro Albuquerque <palbuquerque73@gmail.com>, 2018.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime-2.4\n"
+"Project-Id-Version: bison-runtime-3.0.2\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2018-03-05 06:56+0000\n"
+"Last-Translator: Pedro Albuquerque <palbuquerque73@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-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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Gtranslator 2.91.6\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "erro de sintaxe: não é possível voltar"
+msgstr "erro de sintaxe: impossível recuar"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr "a sintaxe é ambígua"
+msgstr "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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
-msgstr "erro de sintaxe, %s inesperado, esperando %s"
+msgstr "erro de sintaxe, %s inesperado, esperado %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s"
-msgstr "erro de sintaxe, %s inesperado, esperando %s ou %s"
+msgstr "erro de sintaxe, %s inesperado, esperado %s ou %s"
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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"
+msgstr "erro de sintaxe, %s inesperado, esperado %s ou %s ou %s"
 
-#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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"
+msgstr "erro de sintaxe, %s inesperado, esperado %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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
-msgstr "memória exausta"
+msgstr "memória esgotada"
diff --git a/runtime-po/pt_BR.gmo b/runtime-po/pt_BR.gmo
index 65c9ec4..0949fea 100644
--- a/runtime-po/pt_BR.gmo
+++ b/runtime-po/pt_BR.gmo
Binary files differ
diff --git a/runtime-po/pt_BR.po b/runtime-po/pt_BR.po
index da57a52..0ac4586 100644
--- a/runtime-po/pt_BR.po
+++ b/runtime-po/pt_BR.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,47 +15,56 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "erro de sintaxe: não é possível voltar"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "falta de memória"
diff --git a/runtime-po/ro.gmo b/runtime-po/ro.gmo
index 0b34653..1b4650f 100644
--- a/runtime-po/ro.gmo
+++ b/runtime-po/ro.gmo
Binary files differ
diff --git a/runtime-po/ro.po b/runtime-po/ro.po
index 5528cce..9b33e35 100644
--- a/runtime-po/ro.po
+++ b/runtime-po/ro.po
@@ -9,7 +9,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -17,49 +17,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "eroare de sintaxã: nu pot da înapoi"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "eroare de sintaxã"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "memorie epuizatã"
diff --git a/runtime-po/ru.gmo b/runtime-po/ru.gmo
index 6436645..342e9db 100644
--- a/runtime-po/ru.gmo
+++ b/runtime-po/ru.gmo
Binary files differ
diff --git a/runtime-po/ru.po b/runtime-po/ru.po
index 0b8569c..a50259e 100644
--- a/runtime-po/ru.po
+++ b/runtime-po/ru.po
@@ -10,7 +10,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -18,49 +18,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "синтаксическая ошибка: не удалось создать резервную копию"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "синтаксическая ошибка"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "синтаксическая ошибка, непредвиденная %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "синтаксическая ошибка, непредвиденная %s, ожидается %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "недостаточно памяти"
diff --git a/runtime-po/sl.gmo b/runtime-po/sl.gmo
index 51e5501..3ed67f3 100644
--- a/runtime-po/sl.gmo
+++ b/runtime-po/sl.gmo
Binary files differ
diff --git a/runtime-po/sl.po b/runtime-po/sl.po
index 4be5213..945de45 100644
--- a/runtime-po/sl.po
+++ b/runtime-po/sl.po
@@ -8,7 +8,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -16,49 +16,58 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "skladenjska napaka: vrnitev ni mogoča"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "skladenjska napaka"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "zmanjkalo je pomnilnika"
diff --git a/runtime-po/sq.gmo b/runtime-po/sq.gmo
index cfd7128..c47a341 100644
--- a/runtime-po/sq.gmo
+++ b/runtime-po/sq.gmo
Binary files differ
diff --git a/runtime-po/sq.po b/runtime-po/sq.po
index 0a23643..ef1134f 100644
--- a/runtime-po/sq.po
+++ b/runtime-po/sq.po
@@ -8,7 +8,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -16,47 +16,56 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "gabim sintaksor: nuk mund të ruaj një kopje"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "gabim sintaksor"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "nuk mbeti kujtesë më"
diff --git a/runtime-po/sr.gmo b/runtime-po/sr.gmo
index 26fe0b0..235c9c4 100644
--- a/runtime-po/sr.gmo
+++ b/runtime-po/sr.gmo
Binary files differ
diff --git a/runtime-po/sr.po b/runtime-po/sr.po
index b8171f6..3076c6d 100644
--- a/runtime-po/sr.po
+++ b/runtime-po/sr.po
@@ -6,7 +6,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -14,51 +14,60 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "грешка синтаксе: не могу да се вратим горе "
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "грешка синтаксе"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "грешка синтаксе, није очекивано %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "грешка синтаксе, није очекивано %s, очекивано је %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "меморија је потрошена"
diff --git a/runtime-po/sv.gmo b/runtime-po/sv.gmo
index cca4abe..23654a8 100644
--- a/runtime-po/sv.gmo
+++ b/runtime-po/sv.gmo
Binary files differ
diff --git a/runtime-po/sv.po b/runtime-po/sv.po
index d9dfe21..c6c69f2 100644
--- a/runtime-po/sv.po
+++ b/runtime-po/sv.po
@@ -1,64 +1,73 @@
 # Swedish messages for bison.
-# Copyright © 2001-2006, 2008, 2010, 2012 Free Software Foundation, Inc.
+# Copyright © 2001-2006, 2008, 2010, 2012, 2019 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.
+# Göran Uddeborg <goeran@uddeborg.se>, 2001-2006, 2008, 2010, 2012, 2019.
 #
-# $Revision: 1.31 $
+# $Revision: 1.34 $
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.6.90\n"
+"Project-Id-Version: bison-runtime 3.3.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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2019-04-29 14:42+0200\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "syntaxfel: kan inte backa"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "syntaxfel"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "syntaxfel, oväntad %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "minnet slut"
diff --git a/runtime-po/th.gmo b/runtime-po/th.gmo
index f5c4633..a1401e5 100644
--- a/runtime-po/th.gmo
+++ b/runtime-po/th.gmo
Binary files differ
diff --git a/runtime-po/th.po b/runtime-po/th.po
index 7768def..9d3f2f0 100644
--- a/runtime-po/th.po
+++ b/runtime-po/th.po
@@ -7,7 +7,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -15,51 +15,60 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "ข้อผิดพลาดวากยสัมพันธ์: ไม่สามารถสำรองข้อมูล"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "ข้อผิดพลาดวากยสัมพันธ์"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "ข้อผิดพลาดวากยสัมพันธ์, ไม่คาดว่าจะเป็น %s, คาดว่าจะเป็น %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "หน่วยความจำถูกใช้จนหมดสิ้น"
diff --git a/runtime-po/tr.gmo b/runtime-po/tr.gmo
index 3ee0e34..1ed8423 100644
--- a/runtime-po/tr.gmo
+++ b/runtime-po/tr.gmo
Binary files differ
diff --git a/runtime-po/tr.po b/runtime-po/tr.po
index fa20cf6..05c52fc 100644
--- a/runtime-po/tr.po
+++ b/runtime-po/tr.po
@@ -1,62 +1,74 @@
 # 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
+# This file is distributed under the same license as the bison package.
 #
+# Altuð Bayram <altugbayram_2000@yahoo.com>, 2001.
+# Çaðrý Çöltekin <cagri@xs4all.nl>, 2003 - 2005.
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bison 2.0\n"
+"Project-Id-Version: GNU bison-runtime 2.7.90\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-06-05 12:16+0100\n"
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 1.5\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr ""
+msgstr "sözdizimi hatasý: yedeklenemiyor"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr ""
+msgstr "sözdizimi belirsiz"
 
-#: 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
-msgstr ""
+msgstr "sözdizimi hatasý"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
-msgstr ""
+msgstr "sözdizimi hatasý, beklenmeyen %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
-msgstr ""
+msgstr "sözdizimi hatasý, beklenmeyen %s, beklenen %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s"
-msgstr ""
+msgstr "sözdizimi hatasý, beklenmeyen %s, beklenen %s veya %s"
 
-#: data/glr.c:2098 data/lalr1.cc:951 data/yacc.c:1355
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s or %s"
-msgstr ""
+msgstr "sözdizimi hatasý, beklenmeyen %s, beklenen %s veya %s veya %s"
 
-#: data/glr.c:2099 data/lalr1.cc:952 data/yacc.c:1356
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s"
-msgstr ""
+msgstr "sözdizimi hatasý, beklenmeyen %s, beklenen %s veya %s veya %s veya %s"
 
-#: data/glr.c:2459 data/yacc.c:1436 data/yacc.c:1438 data/yacc.c:1616
-#: data/yacc.c:2013
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "bellek tükendi"
diff --git a/runtime-po/uk.gmo b/runtime-po/uk.gmo
index e1b225e..e9d286e 100644
--- a/runtime-po/uk.gmo
+++ b/runtime-po/uk.gmo
Binary files differ
diff --git a/runtime-po/uk.po b/runtime-po/uk.po
index f585c59..3d22d0a 100644
--- a/runtime-po/uk.po
+++ b/runtime-po/uk.po
@@ -6,7 +6,7 @@
 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"
+"POT-Creation-Date: 2019-12-11 07:43+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"
@@ -14,50 +14,59 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\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
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "синтаксична помилка: не вдається зробити резервну копію"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "синтаксична помилка"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "синтаксична помилка, неочікуваний %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "синтаксична помилка, неочікуваний %s, очікувалось %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "пам'ять вичерпано'"
diff --git a/runtime-po/vi.gmo b/runtime-po/vi.gmo
index 02041c4..12ab362 100644
--- a/runtime-po/vi.gmo
+++ b/runtime-po/vi.gmo
Binary files differ
diff --git a/runtime-po/vi.po b/runtime-po/vi.po
index 8ff95be..a2b7090 100644
--- a/runtime-po/vi.po
+++ b/runtime-po/vi.po
@@ -1,66 +1,77 @@
 # Vietnamese Translation for Bison-runtime.
-# Copyright © 2012 Free Software Foundation, Inc.
+# Copyright © 2013 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.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime-2.6.90\n"
+"Project-Id-Version: bison-runtime-3.0\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-07-26 14:19+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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: LocFactoryEditor 1.8\n"
+"X-Generator: Poedit 1.5.5\n"
 "X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Language: Vietnamese\n"
+"X-Poedit-Country: VIET NAM\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 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
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "lỗi cú pháp"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, 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
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, 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
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "hết bộ nhớ"
diff --git a/runtime-po/zh_CN.gmo b/runtime-po/zh_CN.gmo
index fc79627..f27efec 100644
--- a/runtime-po/zh_CN.gmo
+++ b/runtime-po/zh_CN.gmo
Binary files differ
diff --git a/runtime-po/zh_CN.po b/runtime-po/zh_CN.po
index 36ebb75..132d404 100644
--- a/runtime-po/zh_CN.po
+++ b/runtime-po/zh_CN.po
@@ -3,59 +3,71 @@
 # This file is distributed under the same license as the bison package.
 #
 # Meng Jie <zuxyhere@eastday.com>, 2005, 2007.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.3a\n"
+"Project-Id-Version: bison-runtime 3.0.2\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"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2015-10-30 00:30-0400\n"
+"Last-Translator: Mingye Wang (Arthur2e5) <arthur200126@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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.4\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
-msgstr "语法错误:不能备份"
+msgstr "语法错误:无法回溯"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 msgid "syntax is ambiguous"
-msgstr "语法有歧义"
+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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "语法错误"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "语法错误,非预期的 %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "语法错误,非预期的 %s,需要 %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "内存耗尽"
diff --git a/runtime-po/zh_TW.gmo b/runtime-po/zh_TW.gmo
index abc7dbc..33fb739 100644
--- a/runtime-po/zh_TW.gmo
+++ b/runtime-po/zh_TW.gmo
Binary files differ
diff --git a/runtime-po/zh_TW.po b/runtime-po/zh_TW.po
index b441464..4c1ea60 100644
--- a/runtime-po/zh_TW.po
+++ b/runtime-po/zh_TW.po
@@ -1,61 +1,71 @@
-# Traditional Chinese Messages for bison-runtime
+# Traditional Chinese Messages for bison-runtime.
 # Copyright (C) 2005 Free Software Foundation, Inc.
-# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2005
+# This file is distributed under the same license as the bison package.
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2005, 2013.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bison-runtime 2.1\n"
+"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: 2005-09-27 10:31+0800\n"
-"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"POT-Creation-Date: 2019-12-11 07:43+0100\n"
+"PO-Revision-Date: 2013-02-12 23:31+0800\n"
+"Last-Translator: Wei-Lun Chao <bluebat@member.fsf.org>\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"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: data/glr.c:855 data/yacc.c:776
+#: data/skeletons/glr.c:884 data/skeletons/yacc.c:669
 msgid "syntax error: cannot back up"
 msgstr "語法錯誤:無法備份"
 
-#: data/glr.c:1729
+#: data/skeletons/glr.c:1793
 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
+#: data/skeletons/glr.c:2079 data/skeletons/glr.c:2164
+#: data/skeletons/glr.c:2208 data/skeletons/glr.c:2446
+#: data/skeletons/lalr1.cc:1385 data/skeletons/lalr1.cc:1406
+#: data/skeletons/yacc.c:1250 data/skeletons/yacc.c:1762
+#: data/skeletons/yacc.c:1768
 msgid "syntax error"
 msgstr "語法錯誤"
 
-#: data/glr.c:2095 data/lalr1.cc:948 data/yacc.c:1352
+#: data/skeletons/glr.c:2165 data/skeletons/lalr1.cc:1386
+#: data/skeletons/yacc.c:1251
 #, c-format
 msgid "syntax error, unexpected %s"
 msgstr "語法錯誤,預期之外的 %s"
 
-#: data/glr.c:2096 data/lalr1.cc:949 data/yacc.c:1353
+#: data/skeletons/glr.c:2166 data/skeletons/lalr1.cc:1387
+#: data/skeletons/yacc.c:1252
 #, c-format
 msgid "syntax error, unexpected %s, expecting %s"
 msgstr "語法錯誤,預期之外的 %s,預期為 %s"
 
-#: data/glr.c:2097 data/lalr1.cc:950 data/yacc.c:1354
+#: data/skeletons/glr.c:2167 data/skeletons/lalr1.cc:1388
+#: data/skeletons/yacc.c:1253
 #, 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
+#: data/skeletons/glr.c:2168 data/skeletons/lalr1.cc:1389
+#: data/skeletons/yacc.c:1254
 #, 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
+#: data/skeletons/glr.c:2169 data/skeletons/lalr1.cc:1390
+#: data/skeletons/yacc.c:1255
 #, 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
+#: data/skeletons/glr.c:2505 data/skeletons/yacc.c:1335
+#: data/skeletons/yacc.c:1337 data/skeletons/yacc.c:1526
+#: data/skeletons/yacc.c:1918
 msgid "memory exhausted"
 msgstr "記憶體耗盡"
diff --git a/src/AnnotationList.c b/src/AnnotationList.c
index 4c1e0ae..cc6dc4f 100644
--- a/src/AnnotationList.c
+++ b/src/AnnotationList.c
@@ -1,6 +1,6 @@
 /* IELR's inadequacy annotation list.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -168,10 +168,9 @@
   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)
+  for (int i = 0; i < reds->num; ++i)
     {
       bitset_and (conflicted_tokens_rule, tokens, reds->lookahead_tokens[i]);
       bitset_or (conflicted_tokens,
@@ -215,20 +214,17 @@
 }
 
 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)
+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)
+  for (state **predecessor = predecessors[s->number]; *predecessor; ++predecessor)
     {
       AnnotationList *annotation_node =
         AnnotationList__alloc_on_obstack (
@@ -237,12 +233,11 @@
       bool potential_contribution = false;
       bitset *lookaheads = NULL;
       {
-        ContributionIndex ci;
-        for (ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
+        for (ContributionIndex ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
           {
             symbol_number contribution_token =
               InadequacyList__getContributionToken (self->inadequacyNode, ci)
-                ->number;
+                ->content->number;
             if (AnnotationList__isContributionAlways (self, ci))
               {
                 annotation_node->contributions[ci] = NULL;
@@ -274,12 +269,12 @@
                   if (item_number_is_rule_number (ritem[s->items[self_item]
                                                         - 2]))
                     {
-                      Sbitset items;
-                      unsigned int rulei;
+                      int rulei;
                       for (rulei = s->items[self_item];
                            !item_number_is_rule_number (ritem[rulei]);
                            ++rulei)
-                        ;
+                        continue;
+                      Sbitset items;
                       if (AnnotationList__compute_lhs_contributions (
                             *predecessor,
                             &rules[item_number_as_rule_number (ritem[rulei])],
@@ -334,10 +329,9 @@
                     potential_contribution = true;
                     if (!lookaheads)
                       {
-                        size_t j;
                         lookaheads = xnmalloc ((*predecessor)->nitems,
                                                sizeof *lookaheads);
-                        for (j = 0; j < (*predecessor)->nitems; ++j)
+                        for (size_t j = 0; j < (*predecessor)->nitems; ++j)
                           lookaheads[j] = NULL;
                       }
                     if (!lookaheads[i])
@@ -377,8 +371,7 @@
               annotation_node = NULL;
             }
           {
-            size_t i;
-            for (i = 0; i < (*predecessor)->nitems; ++i)
+            for (size_t i = 0; i < (*predecessor)->nitems; ++i)
               if (lookaheads[i])
                 bitset_free (lookaheads[i]);
             free (lookaheads);
@@ -416,23 +409,19 @@
   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 all_lookaheads = bitsetv_create (s->nitems, ntokens, BITSET_FIXED);
   bitsetv_ones (all_lookaheads);
-  shift_tokens = AnnotationList__compute_shift_tokens (s->transitions);
-  conflicted_tokens =
+  bitset shift_tokens = AnnotationList__compute_shift_tokens (s->transitions);
+  bitset conflicted_tokens =
     AnnotationList__compute_conflicted_tokens (shift_tokens, s->reductions);
 
   /* Add an inadequacy annotation for each conflicted_token.  */
+  bitset_iterator biter_conflict;
+  bitset_bindex conflicted_token;
   BITSET_FOR_EACH (biter_conflict, conflicted_tokens, conflicted_token, 0)
     {
       AnnotationList *annotation_node;
@@ -444,8 +433,7 @@
 
       /* Allocate the annotation node.  */
       {
-        int rule_i;
-        for (rule_i = 0; rule_i < s->reductions->num; ++rule_i)
+        for (int rule_i = 0; rule_i < s->reductions->num; ++rule_i)
           if (bitset_test (s->reductions->lookahead_tokens[rule_i],
                            conflicted_token))
             ++contribution_count;
@@ -461,8 +449,7 @@
       {
         ContributionIndex ci = 0;
         int item_i = 0;
-        int rule_i;
-        for (rule_i = 0; rule_i < s->reductions->num; ++rule_i)
+        for (int 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],
@@ -541,15 +528,19 @@
               {
                 InadequacyList__prependTo (conflict_node,
                                            &inadequacy_lists[s->number]);
-                aver (AnnotationList__insertInto (
-                        annotation_node, &annotation_lists[s->number],
-                        s->nitems));
+                {
+                  bool b =
+                    AnnotationList__insertInto (annotation_node,
+                                                &annotation_lists[s->number],
+                                                s->nitems);
+                  aver (b); (void) b;
+                }
                 /* 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);
+                      || symbols[conflicted_token]->content->prec);
                 ++annotation_counts[s->number];
                 if (contribution_count > *max_contributionsp)
                   *max_contributionsp = contribution_count;
@@ -580,27 +571,20 @@
   AnnotationIndex ai;
   for (a = self, ai = 0; a; a = a->next, ++ai)
     {
-      {
-        int j;
-        for (j = 0; j < spaces; ++j)
-          putc (' ', stderr);
-      }
+      for (int 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)
+        bitset_bindex rulei
+          = bitset_first (a->inadequacyNode->inadequacy.conflict.actions);
+        for (ContributionIndex 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);
-            }
+                ->content->number;
+            for (int j = 0; j < spaces+2; ++j)
+              putc (' ', stderr);
             if (ci == InadequacyList__getShiftContributionIndex (
                         a->inadequacyNode))
               fprintf (stderr, "Contributes shift of token %d.\n", token);
@@ -635,20 +619,17 @@
 {
   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);
-          }
-    }
+    for (ContributionIndex ci = 0; ci < self->inadequacyNode->contributionCount; ++ci)
+      if (!AnnotationList__isContributionAlways (self, ci))
+        {
+          symbol_number token =
+            InadequacyList__getContributionToken (self->inadequacyNode, ci)
+            ->content->number;
+          Sbitset__Index item;
+          Sbitset biter;
+          SBITSET__FOR_EACH (self->contributions[ci], nitems, biter, item)
+            bitset_set (lookahead_filter[item], token);
+        }
 }
 
 /**
@@ -679,7 +660,8 @@
     return false;
   {
     symbol_number token =
-      InadequacyList__getContributionToken (self->inadequacyNode, ci)->number;
+      InadequacyList__getContributionToken (self->inadequacyNode, ci)
+      ->content->number;
     Sbitset__Index item;
     Sbitset biter;
     SBITSET__FOR_EACH (self->contributions[ci], nitems, biter, item)
@@ -694,11 +676,10 @@
                                              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;
+  symbol *token = self->inadequacyNode->inadequacy.conflict.token;
 
   /* S/R conflict.  */
   if (ci_shift != ContributionIndex__none)
@@ -706,10 +687,7 @@
       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;
+        int shift_precedence = token->content->prec;
 
         /* If the token has no precedence set, shift is always chosen.  */
         if (!shift_precedence)
@@ -718,11 +696,16 @@
         /* 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);
+        ContributionIndex ci_rr_dominator = ContributionIndex__none;
+        int actioni;
+        ContributionIndex ci;
+        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))
+             ++ci,
+               actioni = bitset_next (self->inadequacyNode->inadequacy
+                                      .conflict.actions, actioni+1))
           {
             int reduce_precedence = 0;
             if (ci == ci_shift)
@@ -739,7 +722,7 @@
             if (reduce_precedence
                 && (reduce_precedence < shift_precedence
                     || (reduce_precedence == shift_precedence
-                        && token->assoc == right_assoc)))
+                        && token->content->assoc == right_assoc)))
               continue;
             if (!AnnotationList__stateMakesContribution (self, nitems, ci,
                                                          lookaheads))
@@ -747,7 +730,7 @@
             /* This uneliminated reduction contributes, so see if it can cause
                an error action.  */
             if (reduce_precedence == shift_precedence
-                 && token->assoc == non_assoc)
+                 && token->content->assoc == non_assoc)
               {
                 /* It's not possible to find split-stable domination over
                    shift after a potential %nonassoc.  */
@@ -791,17 +774,14 @@
 
   /* 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;
-        }
-  }
+  for (ContributionIndex 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
index 3088a83..b0582fb 100644
--- a/src/AnnotationList.h
+++ b/src/AnnotationList.h
@@ -1,6 +1,6 @@
 /* IELR's inadequacy annotation list.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,12 +20,12 @@
 #ifndef ANNOTATION_LIST_H_
 # define ANNOTATION_LIST_H_
 
-#include <bitsetv.h>
-#include "Sbitset.h"
-#include "InadequacyList.h"
-#include "state.h"
+# include <bitsetv.h>
+# include "Sbitset.h"
+# include "InadequacyList.h"
+# include "state.h"
 
-typedef unsigned int AnnotationIndex;
+typedef int AnnotationIndex;
 
 /**
  * A node in a list of annotations on a particular LR(0) state.  Each
diff --git a/src/InadequacyList.c b/src/InadequacyList.c
index 838685b..50e875b 100644
--- a/src/InadequacyList.c
+++ b/src/InadequacyList.c
@@ -1,6 +1,6 @@
 /* IELR's inadequacy list.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,6 +22,8 @@
 
 #include "InadequacyList.h"
 
+#include <intprops.h>
+
 ContributionIndex const ContributionIndex__none = -1;
 ContributionIndex const ContributionIndex__error_action = -2;
 
@@ -31,8 +33,11 @@
                               InadequacyListNodeCount *node_count)
 {
   InadequacyList *result = xmalloc (sizeof *result);
-  result->id = (*node_count)++;
-  aver (*node_count != 0);
+  result->id = *node_count;
+  IGNORE_TYPE_LIMITS_BEGIN
+  if (INT_ADD_WRAPV (*node_count, 1, node_count))
+    aver (false);
+  IGNORE_TYPE_LIMITS_END
   result->next = NULL;
   result->manifestingState = manifesting_state;
   result->contributionCount = bitset_count (actions);
@@ -66,7 +71,7 @@
 InadequacyList__getContributionToken (InadequacyList const *self,
                                       ContributionIndex i)
 {
-  aver (0 <= i && i < self->contributionCount);
+  aver (0 <= i && i < self->contributionCount); (void) i;
   return self->inadequacy.conflict.token;
 }
 
diff --git a/src/InadequacyList.h b/src/InadequacyList.h
index d8120dd..bc27df7 100644
--- a/src/InadequacyList.h
+++ b/src/InadequacyList.h
@@ -1,6 +1,6 @@
 /* IELR's inadequacy list.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,18 +20,15 @@
 #ifndef INADEQUACY_LIST_H_
 # define INADEQUACY_LIST_H_
 
-#include <bitset.h>
-#include "gram.h"
-#include "state.h"
-#include "symtab.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;
+typedef long long InadequacyListNodeCount;
 
 /**
  * For a conflict, each rule in the grammar can have at most one contributing
@@ -90,7 +87,7 @@
  *     <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
+ *     it is best if <tt>*node_count</tt> 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
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 511b905..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,117 +0,0 @@
-# Make bison/src.
-
-# 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/>.
-
-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 = $(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 =                                 \
-  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-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
-
-yacc:
-	$(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.
-
-# 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
diff --git a/src/Makefile.in b/src/Makefile.in
deleted file mode 100644
index 304f2ce..0000000
--- a/src/Makefile.in
+++ /dev/null
@@ -1,1958 +0,0 @@
-# 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@
-
-# Make bison/src.
-
-# 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@
-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@
-bin_PROGRAMS = bison$(EXEEXT)
-subdir = src
-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/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__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-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) \
-	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)
-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)
-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 $@
-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
-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@
-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@
-# Use our own Bison to build the parser.  Of course, you ought to
-# keep a sane version of Bison nearby...
-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@
-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@
-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 = \
-  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-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
-
-.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 ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	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 \
-	  *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):
-install-binPROGRAMS: $(bin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	@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)'; 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)
-
-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)
-	$(AM_V_CCLD)$(LINK) $(bison_OBJECTS) $(bison_LDADD) $(LIBS)
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	@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 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)'; 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)
-
-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@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conflicts.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/derives.Po@am__quote@
-@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)/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@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan-skel.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlist.Po@am__quote@
-@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@
-
-.c.o:
-@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@	$(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@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@	$(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.l.c:
-	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.y.c:
-	$(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; 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
-
-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: $(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:
-	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:
-
-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)
-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
-
-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:
-
-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)
-	-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
-
-.MAKE: all check install install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	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-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
-
-
-yacc:
-	$(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.
-
-# 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/Sbitset.c b/src/Sbitset.c
index ce65f37..aaa6819 100644
--- a/src/Sbitset.c
+++ b/src/Sbitset.c
@@ -1,6 +1,6 @@
 /* A simple, memory-efficient bitset implementation.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -60,7 +60,7 @@
 }
 
 void
-Sbitset__fprint(Sbitset self, Sbitset__Index nbits, FILE *file)
+Sbitset__fprint (Sbitset self, Sbitset__Index nbits, FILE *file)
 {
   Sbitset__Index i;
   Sbitset itr;
diff --git a/src/Sbitset.h b/src/Sbitset.h
index 4a32402..fc6347a 100644
--- a/src/Sbitset.h
+++ b/src/Sbitset.h
@@ -1,6 +1,6 @@
 /* A simple, memory-efficient bitset implementation.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,15 +22,15 @@
 
 typedef unsigned char *Sbitset;
 typedef size_t Sbitset__Index;
-#define SBITSET__INDEX__CONVERSION_SPEC "zu"
+# define SBITSET__INDEX__CONVERSION_SPEC "zu"
 
-#define Sbitset__nbytes(NBITS) \
+# define Sbitset__nbytes(NBITS) \
   (((NBITS) + CHAR_BIT - 1) / CHAR_BIT)
-#define Sbitset__byteAddress(SELF, INDEX) \
+# define Sbitset__byteAddress(SELF, INDEX) \
   (((SELF) + (INDEX) / CHAR_BIT))
-#define Sbitset__bit_mask(INDEX) \
+# define Sbitset__bit_mask(INDEX) \
   (1 << (CHAR_BIT - 1 - (INDEX) % CHAR_BIT))
-#define Sbitset__last_byte_mask(NBITS) \
+# define Sbitset__last_byte_mask(NBITS) \
   (UCHAR_MAX << (CHAR_BIT - 1 - ((NBITS) - 1) % CHAR_BIT))
 
 /* nbits must not be 0.  */
@@ -39,54 +39,54 @@
                                  struct obstack *obstackp);
 void Sbitset__delete (Sbitset self);
 
-#define Sbitset__test(SELF, INDEX)                                            \
+# 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);
+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__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)
+# 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)
+# 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)
+# 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__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))                                                         \
+# 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 989cb26..b0c4e09 100644
--- a/src/assoc.c
+++ b/src/assoc.c
@@ -1,7 +1,7 @@
 /* Associativity information.
 
-   Copyright (C) 2002, 2005-2006, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002, 2005-2006, 2008-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -29,9 +29,6 @@
 {
   switch (a)
     {
-    default:
-      abort ();
-
     case undef_assoc:
       return "undefined associativity";
 
@@ -43,5 +40,9 @@
 
     case non_assoc:
       return "%nonassoc";
+
+    case precedence_assoc:
+      return "%precedence";
     }
+  abort ();
 }
diff --git a/src/assoc.h b/src/assoc.h
index 54f9b65..680e2fb 100644
--- a/src/assoc.h
+++ b/src/assoc.h
@@ -1,6 +1,7 @@
 /* Associativity information.
 
-   Copyright (C) 2002, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2006, 2008-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,10 +24,11 @@
 /* Associativity values for tokens and rules.  */
 typedef enum
 {
-  undef_assoc,
-  right_assoc,
-  left_assoc,
-  non_assoc
+  undef_assoc,     /** Not defined. */
+  right_assoc,     /** %right */
+  left_assoc,      /** %left */
+  non_assoc,       /** %nonassoc */
+  precedence_assoc /** %precedence */
 } assoc;
 
 char const *assoc_to_string (assoc a);
diff --git a/src/closure.c b/src/closure.c
index d9bc5ff..b5ed611 100644
--- a/src/closure.c
+++ b/src/closure.c
@@ -1,7 +1,7 @@
 /* Closures for Bison
 
-   Copyright (C) 1984, 1989, 2000-2002, 2004-2005, 2007, 2009-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2004-2005, 2007, 2009-2015,
+   2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,7 +22,6 @@
 #include "system.h"
 
 #include <bitset.h>
-#include <bitsetv-print.h>
 #include <bitsetv.h>
 
 #include "closure.h"
@@ -36,6 +35,9 @@
 item_number *itemset;
 size_t nitemset;
 
+/* RULESET contains a bit for each rule.  CLOSURE sets the bits for
+   all rules which could potentially describe the next input to be
+   read.  */
 static bitset ruleset;
 
 /* internal data.  See comments before set_fderives and set_firsts.  */
@@ -44,7 +46,7 @@
 
 /* Retrieve the FDERIVES/FIRSTS sets of the nonterminals numbered Var.  */
 #define FDERIVES(Var)   fderives[(Var) - ntokens]
-#define   FIRSTS(Var)   firsts[(Var) - ntokens]
+#define FIRSTS(Var)   firsts[(Var) - ntokens]
 
 
 /*-----------------.
@@ -52,16 +54,15 @@
 `-----------------*/
 
 static void
-print_closure (char const *title, item_number *array, size_t size)
+closure_print (char const *title, item_number const *array, size_t size)
 {
-  size_t i;
   fprintf (stderr, "Closure: %s\n", title);
-  for (i = 0; i < size; ++i)
+  for (size_t i = 0; i < size; ++i)
     {
-      item_number *rp;
       fprintf (stderr, "  %2d: .", array[i]);
+      item_number *rp;
       for (rp = &ritem[array[i]]; *rp >= 0; ++rp)
-	fprintf (stderr, " %s", symbols[*rp]->tag);
+        fprintf (stderr, " %s", symbols[*rp]->tag);
       fprintf (stderr, "  (rule %d)\n", -*rp - 1);
     }
   fputs ("\n\n", stderr);
@@ -71,18 +72,14 @@
 static void
 print_firsts (void)
 {
-  symbol_number i, j;
-
   fprintf (stderr, "FIRSTS\n");
-  for (i = ntokens; i < nsyms; i++)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
     {
+      fprintf (stderr, "  %s firsts\n", symbols[i]->tag);
       bitset_iterator iter;
-      fprintf (stderr, "\t%s firsts\n", symbols[i]->tag);
+      symbol_number j;
       BITSET_FOR_EACH (iter, FIRSTS (i), j, 0)
-	{
-	  fprintf (stderr, "\t\t%s\n",
-		   symbols[j + ntokens]->tag);
-	}
+        fprintf (stderr, "    %s\n", symbols[j + ntokens]->tag);
     }
   fprintf (stderr, "\n\n");
 }
@@ -91,19 +88,18 @@
 static void
 print_fderives (void)
 {
-  int i;
-  rule_number r;
-
   fprintf (stderr, "FDERIVES\n");
-  for (i = ntokens; i < nsyms; i++)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
     {
+      fprintf (stderr, "  %s derives\n", symbols[i]->tag);
       bitset_iterator iter;
-      fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
+      rule_number r;
       BITSET_FOR_EACH (iter, FDERIVES (i), r, 0)
-	{
-	  fprintf (stderr, "\t\t%3d ", r);
-	  rule_rhs_print (&rules[r], stderr);
-	}
+        {
+          fprintf (stderr, "    %3d ", r);
+          rule_rhs_print (&rules[r], stderr);
+          fprintf (stderr, "\n");
+        }
     }
   fprintf (stderr, "\n\n");
 }
@@ -122,16 +118,14 @@
 static void
 set_firsts (void)
 {
-  symbol_number i, j;
-
   firsts = bitsetv_create (nvars, nvars, BITSET_FIXED);
 
-  for (i = ntokens; i < nsyms; i++)
-    for (j = 0; derives[i - ntokens][j]; ++j)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
+    for (symbol_number j = 0; derives[i - ntokens][j]; ++j)
       {
-	item_number sym = derives[i - ntokens][j]->rhs[0];
-	if (ISVAR (sym))
-	  bitset_set (FIRSTS (i), sym - ntokens);
+        item_number sym = derives[i - ntokens][j]->rhs[0];
+        if (ISVAR (sym))
+          bitset_set (FIRSTS (i), sym - ntokens);
       }
 
   if (trace_flag & trace_sets)
@@ -157,18 +151,15 @@
 static void
 set_fderives (void)
 {
-  symbol_number i, j;
-  rule_number k;
-
   fderives = bitsetv_create (nvars, nrules, BITSET_FIXED);
 
   set_firsts ();
 
-  for (i = ntokens; i < nsyms; ++i)
-    for (j = ntokens; j < nsyms; ++j)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
+    for (symbol_number j = ntokens; j < nsyms; ++j)
       if (bitset_test (FIRSTS (i), j - ntokens))
-	for (k = 0; derives[j - ntokens][k]; ++k)
-	  bitset_set (FDERIVES (i), derives[j - ntokens][k]->number);
+        for (rule_number k = 0; derives[j - ntokens][k]; ++k)
+          bitset_set (FDERIVES (i), derives[j - ntokens][k]->number);
 
   if (trace_flag & trace_sets)
     print_fderives ();
@@ -179,7 +170,7 @@
 
 
 void
-new_closure (unsigned int n)
+closure_new (int n)
 {
   itemset = xnmalloc (n, sizeof *itemset);
 
@@ -191,38 +182,34 @@
 
 
 void
-closure (item_number *core, size_t n)
+closure (item_number const *core, size_t n)
 {
-  /* Index over CORE. */
-  size_t c;
-
-  /* A bit index over RULESET. */
-  rule_number ruleno;
-
-  bitset_iterator iter;
-
-  if (trace_flag & trace_sets)
-    print_closure ("input", core, n);
+  if (trace_flag & trace_closure)
+    closure_print ("input", core, n);
 
   bitset_zero (ruleset);
 
-  for (c = 0; c < n; ++c)
+  for (size_t c = 0; c < n; ++c)
     if (ISVAR (ritem[core[c]]))
       bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
 
   /* core is sorted on item index in ritem, which is sorted on rule number.
      Compute itemset with the same sort.  */
   nitemset = 0;
-  c = 0;
+  size_t c = 0;
+
+  /* A bit index over RULESET. */
+  rule_number ruleno;
+  bitset_iterator iter;
   BITSET_FOR_EACH (iter, ruleset, ruleno, 0)
     {
       item_number itemno = rules[ruleno].rhs - ritem;
       while (c < n && core[c] < itemno)
-	{
-	  itemset[nitemset] = core[c];
-	  nitemset++;
-	  c++;
-	}
+        {
+          itemset[nitemset] = core[c];
+          nitemset++;
+          c++;
+        }
       itemset[nitemset] = itemno;
       nitemset++;
     };
@@ -234,13 +221,13 @@
       c++;
     }
 
-  if (trace_flag & trace_sets)
-    print_closure ("output", itemset, nitemset);
+  if (trace_flag & trace_closure)
+    closure_print ("output", itemset, nitemset);
 }
 
 
 void
-free_closure (void)
+closure_free (void)
 {
   free (itemset);
   bitset_free (ruleset);
diff --git a/src/closure.h b/src/closure.h
index 0f96a8b..99dee91 100644
--- a/src/closure.h
+++ b/src/closure.h
@@ -1,7 +1,7 @@
 /* Subroutines for bison
 
-   Copyright (C) 1984, 1989, 2000-2002, 2007, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2007, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -27,30 +27,27 @@
    data so that closure can be called.  n is the number of elements to
    allocate for itemset.  */
 
-void new_closure (unsigned int n);
+void closure_new (int n);
 
 
 /* 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.
+   items are the active ones.  */
 
-   RULESET contains a bit for each rule.  CLOSURE sets the bits for
-   all rules which could potentially describe the next input to be
-   read.
+void closure (item_number const *items, size_t n);
 
-   ITEMSET is a sorted vector of item numbers; NITEMSET is its size
+
+/* Free ITEMSET, RULESET and internal data.  */
+
+void closure_free (void);
+
+
+/* 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.  */
 
-void closure (item_number *items, size_t n);
-
-
-/* Frees ITEMSET, RULESET and internal data.  */
-
-void free_closure (void);
-
 extern item_number *itemset;
 extern size_t nitemset;
 
diff --git a/src/complain.c b/src/complain.c
index ede0ccf..7177a2b 100644
--- a/src/complain.c
+++ b/src/complain.c
@@ -1,7 +1,7 @@
 /* Declaration for error-reporting function for Bison.
 
-   Copyright (C) 2000-2002, 2004-2006, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 2000-2002, 2004-2006, 2009-2015, 2018-2019 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
@@ -22,23 +22,397 @@
 #include <config.h>
 #include "system.h"
 
-#include <stdarg.h>
+#include <argmatch.h>
 #include <progname.h>
+#include <stdarg.h>
+#include <sys/stat.h>
+#include <textstyle.h>
 
 #include "complain.h"
 #include "files.h"
+#include "fixits.h"
 #include "getargs.h"
+#include "quote.h"
 
-bool complaint_issued;
-static unsigned *indent_ptr = 0;
+err_status complaint_status = status_none;
 
-
+bool warnings_are_errors = false;
+
+/** Whether -Werror/-Wno-error was applied to a warning.  */
+typedef enum
+  {
+    errority_unset = 0,     /** No explict status.  */
+    errority_disabled = 1,  /** Explictly disabled with -Wno-error=foo.  */
+    errority_enabled = 2    /** Explictly enabled with -Werror=foo. */
+  } errority;
+
+/** For each warning type, its errority.  */
+static errority errority_flag[warnings_size];
+
+/** Diagnostics severity.  */
+typedef enum
+  {
+    severity_disabled = 0, /**< Explicitly disabled via -Wno-foo.  */
+    severity_unset = 1,    /**< Unspecified status.  */
+    severity_warning = 2,  /**< A warning.  */
+    severity_error = 3,    /**< An error (continue, but die soon).  */
+    severity_fatal = 4     /**< Fatal error (die now).  */
+  } severity;
+
+
+/** For each warning type, its severity.  */
+static severity warnings_flag[warnings_size];
+
+styled_ostream_t errstream = NULL;
+
+void
+begin_use_class (const char *s, FILE *out)
+{
+  if (out == stderr)
+    {
+      if (color_debug)
+        fprintf (out, "<%s>", s);
+      else
+        {
+          styled_ostream_begin_use_class (errstream, s);
+          styled_ostream_flush_to_current_style (errstream);
+        }
+    }
+}
+
+void
+end_use_class (const char *s, FILE *out)
+{
+  if (out == stderr)
+    {
+      if (color_debug)
+        fprintf (out, "</%s>", s);
+      else
+        {
+          styled_ostream_end_use_class (errstream, s);
+          styled_ostream_flush_to_current_style (errstream);
+        }
+    }
+}
+
+void
+flush (FILE *out)
+{
+  if (out == stderr)
+    ostream_flush (errstream, FLUSH_THIS_STREAM);
+  fflush (out);
+}
+
+/*------------------------.
+| --warnings's handling.  |
+`------------------------*/
+
+ARGMATCH_DEFINE_GROUP (warning, warnings)
+
+static const argmatch_warning_doc argmatch_warning_docs[] =
+{
+  { "conflicts-sr",     N_("S/R conflicts (enabled by default)") },
+  { "conflicts-rr",     N_("R/R conflicts (enabled by default)") },
+  { "dangling-alias",   N_("string aliases not attached to a symbol") },
+  { "deprecated",       N_("obsolete constructs") },
+  { "empty-rule",       N_("empty rules without %empty") },
+  { "midrule-values",   N_("unset or unused midrule values") },
+  { "precedence",       N_("useless precedence and associativity") },
+  { "yacc",             N_("incompatibilities with POSIX Yacc") },
+  { "other",            N_("all other warnings (enabled by default)") },
+  { "all",              N_("all the warnings except 'dangling-alias' and 'yacc'") },
+  { "no-CATEGORY",      N_("turn off warnings in CATEGORY") },
+  { "none",             N_("turn off all the warnings") },
+  { "error[=CATEGORY]", N_("treat warnings as errors") },
+  { NULL, NULL }
+};
+
+static const argmatch_warning_arg argmatch_warning_args[] =
+{
+  { "all",            Wall },
+  { "conflicts-rr",   Wconflicts_rr },
+  { "conflicts-sr",   Wconflicts_sr },
+  { "dangling-alias", Wdangling_alias },
+  { "deprecated",     Wdeprecated },
+  { "empty-rule",     Wempty_rule },
+  { "everything",     Weverything },
+  { "midrule-values", Wmidrule_values },
+  { "none",           Wnone },
+  { "other",          Wother },
+  { "precedence",     Wprecedence },
+  { "yacc",           Wyacc },
+  { NULL, Wnone }
+};
+
+const argmatch_warning_group_type argmatch_warning_group =
+{
+  argmatch_warning_args,
+  argmatch_warning_docs,
+  N_("Warning categories include:"),
+  NULL
+};
+
+void
+warning_usage (FILE *out)
+{
+  argmatch_warning_usage (out);
+}
+
+void
+warning_argmatch (char const *arg, size_t no, size_t err)
+{
+  int value = *argmatch_warning_value ("--warning", arg + no + err);
+
+  /* -Wnone == -Wno-everything, and -Wno-none == -Weverything.  */
+  if (!value)
+    {
+      value = Weverything;
+      no = !no;
+    }
+
+  for (size_t b = 0; b < warnings_size; ++b)
+    if (value & 1 << b)
+      {
+        if (err && no)
+          /* -Wno-error=foo.  */
+          errority_flag[b] = errority_disabled;
+        else if (err && !no)
+          {
+            /* -Werror=foo: enables -Wfoo. */
+            errority_flag[b] = errority_enabled;
+            warnings_flag[b] = severity_warning;
+          }
+        else if (no)
+          /* -Wno-foo.  */
+          warnings_flag[b] = severity_disabled;
+        else
+          /* -Wfoo. */
+          warnings_flag[b] = severity_warning;
+      }
+}
+
+/** Decode a comma-separated list of arguments from -W.
+ *
+ *  \param args     comma separated list of effective subarguments to decode.
+ *                  If 0, then activate all the flags.
+ */
+
+void
+warnings_argmatch (char *args)
+{
+  if (!args)
+    warning_argmatch ("all", 0, 0);
+  else if (STREQ (args, "help"))
+    {
+      warning_usage (stdout);
+      exit (EXIT_SUCCESS);
+    }
+  else
+    for (args = strtok (args, ","); args; args = strtok (NULL, ","))
+      if (STREQ (args, "error"))
+        warnings_are_errors = true;
+      else if (STREQ (args, "no-error"))
+        warnings_are_errors = false;
+      else
+        {
+          /* The length of the possible 'no-' prefix: 3, or 0.  */
+          size_t no = STRPREFIX_LIT ("no-", args) ? 3 : 0;
+          /* The length of the possible 'error=' (possibly after
+             'no-') prefix: 6, or 0. */
+          size_t err = STRPREFIX_LIT ("error=", args + no) ? 6 : 0;
+
+          warning_argmatch (args, no, err);
+        }
+}
+
+/* Color style for this type of message.  */
+static const char*
+severity_style (severity s)
+{
+  switch (s)
+    {
+    case severity_disabled:
+    case severity_unset:
+      return "note";
+    case severity_warning:
+      return "warning";
+    case severity_error:
+    case severity_fatal:
+      return "error";
+    }
+  abort ();
+}
+
+/* Prefix for this type of message.  */
+static const char*
+severity_prefix (severity s)
+{
+  switch (s)
+    {
+    case severity_disabled:
+    case severity_unset:
+      return "";
+    case severity_warning:
+      return _("warning");
+    case severity_error:
+      return  _("error");
+    case severity_fatal:
+      return _("fatal error");
+    }
+  abort ();
+}
+
+
+/*-----------.
+| complain.  |
+`-----------*/
+
+void
+complain_init_color (void)
+{
+#if HAVE_LIBTEXTSTYLE
+  if (color_mode == color_yes
+      || color_mode == color_html
+      || (color_mode == color_tty && isatty (STDERR_FILENO)))
+    {
+      style_file_prepare ("BISON_STYLE", "BISON_STYLEDIR", pkgdatadir (),
+                          "bison-default.css");
+      /* As a fallback, use the default in the current directory.  */
+      struct stat statbuf;
+      if ((style_file_name == NULL || stat (style_file_name, &statbuf) < 0)
+          && stat ("bison-default.css", &statbuf) == 0)
+        style_file_name = "bison-default.css";
+    }
+  else
+    /* No styling.  */
+    style_file_name = NULL;
+#endif
+
+  /* Workaround clang's warning (starting at Clang 3.5) about the stub
+     code of html_styled_ostream_create:
+
+     | src/complain.c:274:7: error: code will never be executed [-Werror,-Wunreachable-code]
+     |     ? html_styled_ostream_create (file_ostream_create (stderr),
+     |       ^~~~~~~~~~~~~~~~~~~~~~~~~~ */
+#if defined __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wunreachable-code"
+#endif
+  errstream =
+    color_mode == color_html
+    ? html_styled_ostream_create (file_ostream_create (stderr),
+                                  style_file_name)
+    : styled_ostream_create (STDERR_FILENO, "(stderr)", TTYCTL_AUTO,
+                             style_file_name);
+#if defined __clang__
+# pragma clang diagnostic pop
+#endif
+}
+
+void
+complain_init (void)
+{
+  caret_init ();
+
+  warnings warnings_default =
+    Wconflicts_sr | Wconflicts_rr | Wdeprecated | Wother;
+
+  for (size_t b = 0; b < warnings_size; ++b)
+    {
+      warnings_flag[b] = (1 << b & warnings_default
+                          ? severity_warning
+                          : severity_unset);
+      errority_flag[b] = errority_unset;
+    }
+}
+
+void
+complain_free (void)
+{
+  caret_free ();
+  styled_ostream_free (errstream);
+}
+
+/* A diagnostic with FLAGS is about to be issued.  With what severity?
+   (severity_fatal, severity_error, severity_disabled, or
+   severity_warning.) */
+
+static severity
+warning_severity (warnings flags)
+{
+  if (flags & fatal)
+    /* Diagnostics about fatal errors.  */
+    return severity_fatal;
+  else if (flags & complaint)
+    /* Diagnostics about errors.  */
+    return severity_error;
+  else
+    {
+      /* Diagnostics about warnings.  */
+      severity res = severity_disabled;
+      for (size_t b = 0; b < warnings_size; ++b)
+        if (flags & 1 << b)
+          {
+            res = res < warnings_flag[b] ? warnings_flag[b] : res;
+            /* If the diagnostic is enabled, and -Werror is enabled,
+               and -Wno-error=foo was not explicitly requested, this
+               is an error. */
+            if (res == severity_warning
+                && (errority_flag[b] == errority_enabled
+                    || (warnings_are_errors
+                        && errority_flag[b] != errority_disabled)))
+              res = severity_error;
+          }
+      return res;
+    }
+}
+
+bool
+warning_is_unset (warnings flags)
+{
+  for (size_t b = 0; b < warnings_size; ++b)
+    if (flags & 1 << b && warnings_flag[b] != severity_unset)
+      return false;
+  return true;
+}
+
+bool
+warning_is_enabled (warnings flags)
+{
+  return severity_warning <= warning_severity (flags);
+}
+
+/** Display a "[-Wyacc]" like message on \a out.  */
+
+static void
+warnings_print_categories (warnings warn_flags, FILE *out)
+{
+  for (int wbit = 0; wbit < warnings_size; ++wbit)
+    if (warn_flags & (1 << wbit))
+      {
+        warnings w = 1 << wbit;
+        severity s = warning_severity (w);
+        const char* style = severity_style (s);
+        fputs (" [", out);
+        begin_use_class (style, out);
+        fprintf (out, "-W%s%s",
+                 s == severity_error ? "error=" : "",
+                 argmatch_warning_argument (&w));
+        end_use_class (style, out);
+        fputc (']', out);
+        /* Display only the first match, the second is "-Wall".  */
+        return;
+      }
+}
 
 /** 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 indent  optional indentation for the error message.
+ * \param flags   the category for this message.
+ * \param sever   to decide the prefix to 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
@@ -47,171 +421,170 @@
  */
 static
 void
-error_message (location *loc,
-	       const char *prefix,
-	       const char *message, va_list args)
+error_message (const location *loc, int *indent, warnings flags,
+               severity sever, const char *message, va_list args)
 {
-  unsigned pos = 0;
+  int pos = 0;
 
   if (loc)
-    pos += location_print (stderr, *loc);
+    pos += location_print (*loc, stderr);
   else
-    pos += fprintf(stderr, "%s", current_file ? current_file : program_name);
-  pos += fprintf(stderr, ": ");
+    pos += fprintf (stderr, "%s", grammar_file ? grammar_file : program_name);
+  pos += fprintf (stderr, ": ");
 
-  if (indent_ptr)
+  if (indent)
     {
-      if (!*indent_ptr)
-        *indent_ptr = pos;
-      else if (*indent_ptr > pos)
-        fprintf (stderr, "%*s", *indent_ptr - pos, "");
-      indent_ptr = 0;
+      if (*indent)
+        sever = severity_disabled;
+      if (!*indent)
+        *indent = pos;
+      else if (*indent > pos)
+        fprintf (stderr, "%*s", *indent - pos, "");
     }
 
-  if (prefix)
-    fprintf (stderr, "%s: ", prefix);
+  const char* style = severity_style (sever);
+
+  if (sever != severity_disabled)
+    {
+      begin_use_class (style, stderr);
+      fprintf (stderr, "%s:", severity_prefix (sever));
+      end_use_class (style, stderr);
+      fputc (' ', stderr);
+    }
 
   vfprintf (stderr, message, args);
+  /* Print the type of warning, only if this is not a sub message
+     (in which case the prefix is null).  */
+  if (! (flags & silent) && sever != severity_disabled)
+    warnings_print_categories (flags, stderr);
+
   {
     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);
+        flush (stderr);
+        if (loc && feature_flag & feature_caret && !(flags & no_caret))
+          location_caret (*loc, style, stderr);
       }
   }
-  fflush (stderr);
+  flush (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);				\
-}
+/** Raise a complaint (fatal error, error or just warning).  */
 
-
-/*--------------------------------.
-| Report a warning, and proceed.  |
-`--------------------------------*/
-
-void
-set_warning_issued (void)
+static void
+complains (const location *loc, int *indent, warnings flags,
+           const char *message, va_list args)
 {
-  static bool warning_issued = false;
-  if (!warning_issued && (warnings_flag & warnings_error))
+  severity s = warning_severity (flags);
+  if ((flags & complaint) && complaint_status < status_complaint)
+    complaint_status = status_complaint;
+
+  if (severity_warning <= s)
     {
-      fprintf (stderr, "%s: warnings being treated as errors\n", program_name);
-      complaint_issued = true;
+      if (severity_error <= s && ! complaint_status)
+        complaint_status = status_warning_as_error;
+      error_message (loc, indent, flags, s, message, args);
     }
-  warning_issued = true;
+
+  if (flags & fatal)
+    exit (EXIT_FAILURE);
 }
 
 void
-warn_at (location loc, const char *message, ...)
+complain (location const *loc, warnings flags, const char *message, ...)
 {
-  if (!(warnings_flag & warnings_other))
-    return;
-  set_warning_issued ();
-  ERROR_MESSAGE (&loc, _("warning"), message);
+  va_list args;
+  va_start (args, message);
+  complains (loc, NULL, flags, message, args);
+  va_end (args);
 }
 
 void
-warn_at_indent (location loc, unsigned *indent,
-                const char *message, ...)
+complain_indent (location const *loc, warnings flags, int *indent,
+                 const char *message, ...)
 {
-  if (!(warnings_flag & warnings_other))
-    return;
-  set_warning_issued ();
-  indent_ptr = indent;
-  ERROR_MESSAGE (&loc, *indent ? NULL : _("warning"), message);
+  va_list args;
+  va_start (args, message);
+  complains (loc, indent, flags, message, args);
+  va_end (args);
 }
 
 void
-warn (const char *message, ...)
+complain_args (location const *loc, warnings w, int *indent,
+               int argc, char *argv[])
 {
-  if (!(warnings_flag & warnings_other))
-    return;
-  set_warning_issued ();
-  ERROR_MESSAGE (NULL, _("warning"), message);
+  switch (argc)
+  {
+  case 1:
+    complain_indent (loc, w, indent, "%s", _(argv[0]));
+    break;
+  case 2:
+    complain_indent (loc, w, indent, _(argv[0]), argv[1]);
+    break;
+  case 3:
+    complain_indent (loc, w, indent, _(argv[0]), argv[1], argv[2]);
+    break;
+  case 4:
+    complain_indent (loc, w, indent, _(argv[0]), argv[1], argv[2], argv[3]);
+    break;
+  case 5:
+    complain_indent (loc, w, indent, _(argv[0]), argv[1], argv[2], argv[3],
+                     argv[4]);
+    break;
+  default:
+    complain (loc, fatal, "too many arguments for complains");
+    break;
+  }
 }
 
 
-/*-----------------------------------------------------------.
-| An error has occurred, but we can proceed, and die later.  |
-`-----------------------------------------------------------*/
-
 void
-complain_at (location loc, const char *message, ...)
+bison_directive (location const *loc, char const *directive)
 {
-  ERROR_MESSAGE (&loc, _("error"), message);
-  complaint_issued = true;
+  complain (loc, Wyacc,
+            _("POSIX Yacc does not support %s"), directive);
 }
 
 void
-complain_at_indent (location loc, unsigned *indent,
-                    const char *message, ...)
+deprecated_directive (location const *loc, char const *old, char const *upd)
 {
-  indent_ptr = indent;
-  ERROR_MESSAGE (&loc, *indent ? NULL : _("error"), message);
-  complaint_issued = true;
-}
-
-void
-complain (const char *message, ...)
-{
-  ERROR_MESSAGE (NULL, _("error"), message);
-  complaint_issued = true;
-}
-
-
-/*--------------------------------------------------------------.
-| 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)
+  if (warning_is_enabled (Wdeprecated))
     {
-      ERROR_MESSAGE (&loc, NULL, message);
-      complaint_issued = true;
-    }
-  else if (warnings_flag & warnings_yacc)
-    {
-      set_warning_issued ();
-      ERROR_MESSAGE (&loc, _("warning"), message);
+      complain (loc, Wdeprecated,
+                _("deprecated directive: %s, use %s"),
+                quote (old), quote_n (1, upd));
+      if (feature_flag & feature_caret)
+        location_caret_suggestion (*loc, upd, stderr);
+      /* Register updates only if -Wdeprecated is enabled.  */
+      fixits_register (loc, upd);
     }
 }
 
 void
-midrule_value_at (location loc, const char *message, ...)
+duplicate_directive (char const *directive,
+                     location first, location second)
 {
-  if (!(warnings_flag & warnings_midrule_values))
-    return;
-  set_warning_issued ();
-  ERROR_MESSAGE (&loc, _("warning"), message);
-}
-
-/*-------------------------------------------------.
-| A severe error has occurred, we cannot proceed.  |
-`-------------------------------------------------*/
-
-void
-fatal_at (location loc, const char *message, ...)
-{
-  ERROR_MESSAGE (&loc, _("fatal error"), message);
-  exit (EXIT_FAILURE);
+  int i = 0;
+  if (feature_flag & feature_caret)
+    complain_indent (&second, Wother, &i, _("duplicate directive"));
+  else
+    complain_indent (&second, Wother, &i, _("duplicate directive: %s"), quote (directive));
+  i += SUB_INDENT;
+  complain_indent (&first, Wother, &i, _("previous declaration"));
+  fixits_register (&second, "");
 }
 
 void
-fatal (const char *message, ...)
+duplicate_rule_directive (char const *directive,
+                          location first, location second)
 {
-  ERROR_MESSAGE (NULL, _("fatal error"), message);
-  exit (EXIT_FAILURE);
+  int i = 0;
+  complain_indent (&second, complaint, &i,
+                   _("only one %s allowed per rule"), directive);
+  i += SUB_INDENT;
+  complain_indent (&first, complaint, &i,
+                   _("previous declaration"));
+  fixits_register (&second, "");
 }
diff --git a/src/complain.h b/src/complain.h
index 997d577..bc48d2f 100644
--- a/src/complain.h
+++ b/src/complain.h
@@ -1,7 +1,7 @@
 /* Declaration for error-reporting function for Bison.
 
-   Copyright (C) 2000-2002, 2006, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000-2002, 2006, 2009-2015, 2018-2019 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
@@ -21,76 +21,157 @@
 
 # include "location.h"
 
-# ifdef	__cplusplus
-extern "C" {
-# endif
-
 /* Sub-messages indent. */
-#define SUB_INDENT (4)
+# 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);
+/*---------------.
+| Error stream.  |
+`---------------*/
 
-/** Informative messages, but we proceed.  Report iff
-    <tt>warnings_flag & warnings_other</tt>.  */
+/** Enable a style on \a out provided it's stderr.  */
+void begin_use_class (const char *style, FILE *out);
 
-void warn (char const *format, ...)
-  __attribute__ ((__format__ (__printf__, 1, 2)));
+/** Disable a style on \a out provided it's stderr.  */
+void end_use_class (const char *style, FILE *out);
 
-void warn_at (location loc, char const *format, ...)
-  __attribute__ ((__format__ (__printf__, 2, 3)));
+/** Flush \a out.  */
+void flush (FILE *out);
 
-/* 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, ...)
+
+/*-------------.
+| --warnings.  |
+`-------------*/
+
+/** The bits assigned to each warning type.  */
+typedef enum
+  {
+    warning_conflicts_rr,
+    warning_conflicts_sr,
+    warning_dangling_alias,
+    warning_deprecated,
+    warning_empty_rule,
+    warning_midrule_values,
+    warning_other,
+    warning_precedence,
+    warning_yacc,           /**< POSIXME.  */
+
+    warnings_size           /**< The number of warnings.  Must be last.  */
+  } warning_bit;
+
+/** Whether -Werror was set. */
+extern bool warnings_are_errors;
+
+/** Document --warning arguments.  */
+void warning_usage (FILE *out);
+
+/** Decode a single argument from -W.
+ *
+ *  \param arg      the subarguments to decode.
+ *                  If null, then activate all the flags.
+ *  \param no       length of the potential "no-" prefix.
+ *                  Can be 0 or 3. If 3, negate the action of the subargument.
+ *  \param err      length of a potential "error=".
+ *                  Can be 0 or 6. If 6, treat the subargument as a CATEGORY.
+ *
+ *  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.
+ */
+void warning_argmatch (char const *arg, size_t no, size_t err);
+
+/** Decode a comma-separated list of arguments from -W.
+ *
+ *  \param args     comma separated list of effective subarguments to decode.
+ *                  If 0, then activate all the flags.
+ */
+void warnings_argmatch (char *args);
+
+
+/*-----------.
+| complain.  |
+`-----------*/
+
+/** Initialize this module.  */
+void complain_init (void);
+
+/** Reclaim resources.  */
+void complain_free (void);
+
+/** Initialize support for colored messages.  */
+void complain_init_color (void);
+
+/** Flags passed to diagnostics functions.  */
+typedef enum
+  {
+    Wnone             = 0,       /**< Issue no warnings.  */
+
+    Wconflicts_rr     = 1 << warning_conflicts_rr,
+    Wconflicts_sr     = 1 << warning_conflicts_sr,
+    Wdangling_alias   = 1 << warning_dangling_alias,
+    Wdeprecated       = 1 << warning_deprecated,
+    Wempty_rule       = 1 << warning_empty_rule,
+    Wmidrule_values   = 1 << warning_midrule_values,
+    Wother            = 1 << warning_other,
+    Wprecedence       = 1 << warning_precedence,
+    Wyacc             = 1 << warning_yacc,
+
+    complaint         = 1 << 11, /**< All complaints.  */
+    fatal             = 1 << 12, /**< All fatal errors.  */
+    silent            = 1 << 13, /**< Do not display the warning type.  */
+    no_caret          = 1 << 14, /**< Do not display caret location.  */
+
+    /**< All above warnings.  */
+    Weverything       = ~complaint & ~fatal & ~silent,
+    Wall              = Weverything & ~Wdangling_alias & ~Wyacc
+  } warnings;
+
+/** Whether the warnings of \a flags are all unset.
+    (Never enabled, never disabled). */
+bool warning_is_unset (warnings flags);
+
+/** Whether warnings of \a flags should be reported. */
+bool warning_is_enabled (warnings flags);
+
+/** Make a complaint, with maybe a location.  */
+void complain (location const *loc, warnings flags, char const *message, ...)
   __attribute__ ((__format__ (__printf__, 3, 4)));
 
-/** An error, but we continue and die later.  */
+/** Likewise, but with an \a argc/argv interface.  */
+void complain_args (location const *loc, warnings w, int *indent,
+                    int argc, char *arg[]);
 
-void complain (char const *format, ...)
-  __attribute__ ((__format__ (__printf__, 1, 2)));
+/** Make a complaint with location and some indentation.  */
+void complain_indent (location const *loc, warnings flags, int *indent,
+                      char const *message, ...)
+  __attribute__ ((__format__ (__printf__, 4, 5)));
 
-void complain_at (location loc, char const *format, ...)
-  __attribute__ ((__format__ (__printf__, 2, 3)));
 
-/* 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)));
+/** GNU Bison extension not valid with POSIX Yacc.  */
+void bison_directive (location const *loc, char const *directive);
 
-/** An incompatibility with POSIX Yacc: mapped either to warn* or
-    complain* depending on yacc_flag. */
+/** Report an obsolete syntax, suggest the updated one.  */
+void deprecated_directive (location const *loc,
+                           char const *obsolete, char const *updated);
 
-void yacc_at (location loc, char const *format, ...)
-  __attribute__ ((__format__ (__printf__, 2, 3)));
+/** Report a repeated directive.  */
+void duplicate_directive (char const *directive,
+                          location first, location second);
 
-/** A midrule-value warning.  Report iff
-    <tt>warnings_flag & warnings_midrule_values</tt>.  */
+/** Report a repeated directive for a rule.  */
+void duplicate_rule_directive (char const *directive,
+                               location first, location second);
 
-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)));
-
-void fatal_at (location loc, char const *format, ...)
-  __attribute__ ((__noreturn__, __format__ (__printf__, 2, 3)));
+/** Warnings treated as errors shouldn't stop the execution as regular
+    errors should (because due to their nature, it is safe to go
+    on). Thus, there are three possible execution statuses.  */
+typedef enum
+  {
+    status_none,             /**< No diagnostic issued so far.  */
+    status_warning_as_error, /**< A warning was issued (but no error).  */
+    status_complaint         /**< An error was issued.  */
+  } err_status;
 
 /** Whether an error was reported.  */
-extern bool complaint_issued;
-
-# ifdef	__cplusplus
-}
-# endif
+extern err_status complaint_status;
 
 #endif /* !COMPLAIN_H_ */
diff --git a/src/conflicts.c b/src/conflicts.c
index ba0b6ed..cfc729a 100644
--- a/src/conflicts.c
+++ b/src/conflicts.c
@@ -1,6 +1,6 @@
 /* Find and resolve or report lookahead conflicts for bison,
 
-   Copyright (C) 1984, 1989, 1992, 2000-2007, 2009-2012 Free Software
+   Copyright (C) 1984, 1989, 1992, 2000-2015, 2018-2019 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -23,13 +23,13 @@
 
 #include <bitset.h>
 
-#include "LR0.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "lr0.h"
 #include "print-xml.h"
 #include "reader.h"
 #include "state.h"
@@ -38,7 +38,10 @@
 /* -1 stands for not specified. */
 int expected_sr_conflicts = -1;
 int expected_rr_conflicts = -1;
-static char *conflicts;
+
+/* CONFLICTS[STATE-NUM] -- Whether that state has unresolved conflicts.  */
+static bool *conflicts;
+
 static struct obstack solved_conflicts_obstack;
 static struct obstack solved_conflicts_xml_obstack;
 
@@ -64,75 +67,78 @@
 
 static inline void
 log_resolution (rule *r, symbol_number token,
-		enum conflict_resolution resolution)
+                enum conflict_resolution resolution)
 {
   if (report_flag & report_solved_conflicts)
     {
       /* The description of the resolution. */
       switch (resolution)
-	{
-	case shift_resolution:
-	case right_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  _("    Conflict between rule %d and token %s"
-			    " resolved as shift"),
-			  r->number,
-			  symbols[token]->tag);
-	  break;
+        {
+        case shift_resolution:
+        case right_resolution:
+          obstack_sgrow (&solved_conflicts_obstack, "    ");
+          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_printf (&solved_conflicts_obstack,
-			  _("    Conflict between rule %d and token %s"
-			    " resolved as reduce"),
-			  r->number,
-			  symbols[token]->tag);
-	  break;
+        case reduce_resolution:
+        case left_resolution:
+          obstack_sgrow (&solved_conflicts_obstack, "    ");
+          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_printf (&solved_conflicts_obstack,
-			  _("    Conflict between rule %d and token %s"
-			    " resolved as an error"),
-			  r->number,
-			  symbols[token]->tag);
-	  break;
-	}
+        case nonassoc_resolution:
+          obstack_sgrow (&solved_conflicts_obstack, "    ");
+          obstack_printf (&solved_conflicts_obstack,
+                          _("Conflict between rule %d and token %s"
+                            " resolved as an error"),
+                          r->number,
+                          symbols[token]->tag);
+          break;
+        }
 
       /* The reason. */
       switch (resolution)
-	{
-	case shift_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  " (%s < %s)",
-			  r->prec->tag,
-			  symbols[token]->tag);
-	  break;
+        {
+        case shift_resolution:
+          obstack_printf (&solved_conflicts_obstack,
+                          " (%s < %s)",
+                          r->prec->symbol->tag,
+                          symbols[token]->tag);
+          break;
 
-	case reduce_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  " (%s < %s)",
-			  symbols[token]->tag,
-			  r->prec->tag);
-	  break;
+        case reduce_resolution:
+          obstack_printf (&solved_conflicts_obstack,
+                          " (%s < %s)",
+                          symbols[token]->tag,
+                          r->prec->symbol->tag);
+          break;
 
-	case left_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  " (%%left %s)",
-			  symbols[token]->tag);
-	  break;
+        case left_resolution:
+          obstack_printf (&solved_conflicts_obstack,
+                          " (%%left %s)",
+                          symbols[token]->tag);
+          break;
 
-	case right_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  " (%%right %s)",
-			  symbols[token]->tag);
-	  break;
+        case right_resolution:
+          obstack_printf (&solved_conflicts_obstack,
+                          " (%%right %s)",
+                          symbols[token]->tag);
+          break;
 
-	case nonassoc_resolution:
-	  obstack_printf (&solved_conflicts_obstack,
-			  " (%%nonassoc %s)",
-			  symbols[token]->tag);
-	  break;
-	}
+        case nonassoc_resolution:
+          obstack_printf (&solved_conflicts_obstack,
+                          " (%%nonassoc %s)",
+                          symbols[token]->tag);
+          break;
+        }
 
       obstack_sgrow (&solved_conflicts_obstack, ".\n");
     }
@@ -176,7 +182,7 @@
         case shift_resolution:
           obstack_printf (&solved_conflicts_xml_obstack,
                           "%s &lt; %s",
-                          xml_escape_n (0, r->prec->tag),
+                          xml_escape_n (0, r->prec->symbol->tag),
                           xml_escape_n (1, symbols[token]->tag));
           break;
 
@@ -184,7 +190,7 @@
           obstack_printf (&solved_conflicts_xml_obstack,
                           "%s &lt; %s",
                           xml_escape_n (0, symbols[token]->tag),
-                          xml_escape_n (1, r->prec->tag));
+                          xml_escape_n (1, r->prec->symbol->tag));
           break;
 
         case left_resolution:
@@ -221,12 +227,11 @@
 flush_shift (state *s, int token)
 {
   transitions *trans = s->transitions;
-  int i;
 
   bitset_reset (lookahead_set, token);
-  for (i = 0; i < trans->num; i++)
+  for (int i = 0; i < trans->num; ++i)
     if (!TRANSITION_IS_DISABLED (trans, i)
-	&& TRANSITION_SYMBOL (trans, i) == token)
+        && TRANSITION_SYMBOL (trans, i) == token)
       TRANSITION_DISABLE (trans, i);
 }
 
@@ -259,60 +264,69 @@
 static void
 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 lookahead_tokens = reds->lookahead_tokens[ruleno];
 
-  for (i = 0; i < ntokens; i++)
+  for (symbol_number i = 0; i < ntokens; ++i)
     if (bitset_test (lookahead_tokens, i)
-	&& bitset_test (lookahead_set, i)
-	&& symbols[i]->prec)
+        && bitset_test (lookahead_set, i)
+        && symbols[i]->content->prec)
       {
-	/* Shift-reduce conflict occurs for token number i
-	   and it has a precedence.
-	   The precedence of shifting is that of token i.  */
-	if (symbols[i]->prec < redprec)
-	  {
-	    log_resolution (redrule, i, reduce_resolution);
-	    flush_shift (s, i);
-	  }
-	else if (symbols[i]->prec > redprec)
-	  {
-	    log_resolution (redrule, i, shift_resolution);
-	    flush_reduce (lookahead_tokens, i);
-	  }
-	else
-	  /* Matching precedence levels.
-	     For left association, keep only the reduction.
-	     For right association, keep only the shift.
-	     For nonassociation, keep neither.  */
+        /* Shift-reduce conflict occurs for token number i
+           and it has a precedence.
+           The precedence of shifting is that of token i.  */
+        if (symbols[i]->content->prec < redprec)
+          {
+            register_precedence (redrule->prec->number, i);
+            log_resolution (redrule, i, reduce_resolution);
+            flush_shift (s, i);
+          }
+        else if (symbols[i]->content->prec > redprec)
+          {
+            register_precedence (i, redrule->prec->number);
+            log_resolution (redrule, i, shift_resolution);
+            flush_reduce (lookahead_tokens, i);
+          }
+        else
+          /* Matching precedence levels.
+             For non-defined associativity, keep both: unexpected
+             associativity conflict.
+             For left associativity, keep only the reduction.
+             For right associativity, keep only the shift.
+             For nonassociativity, keep neither.  */
 
-	  switch (symbols[i]->assoc)
-	    {
-	    default:
-	      abort ();
+          switch (symbols[i]->content->assoc)
+            {
+            case undef_assoc:
+              abort ();
 
-	    case right_assoc:
-	      log_resolution (redrule, i, right_resolution);
-	      flush_reduce (lookahead_tokens, i);
-	      break;
+            case precedence_assoc:
+              break;
 
-	    case left_assoc:
-	      log_resolution (redrule, i, left_resolution);
-	      flush_shift (s, i);
-	      break;
+            case right_assoc:
+              register_assoc (i, redrule->prec->number);
+              log_resolution (redrule, i, right_resolution);
+              flush_reduce (lookahead_tokens, i);
+              break;
 
-	    case non_assoc:
-	      log_resolution (redrule, i, nonassoc_resolution);
-	      flush_shift (s, i);
-	      flush_reduce (lookahead_tokens, i);
-	      /* Record an explicit error for this token.  */
-	      errors[(*nerrs)++] = symbols[i];
-	      break;
-	    }
+            case left_assoc:
+              register_assoc (i, redrule->prec->number);
+              log_resolution (redrule, i, left_resolution);
+              flush_shift (s, i);
+              break;
+
+            case non_assoc:
+              register_assoc (i, redrule->prec->number);
+              log_resolution (redrule, i, nonassoc_resolution);
+              flush_shift (s, i);
+              flush_reduce (lookahead_tokens, i);
+              /* Record an explicit error for this token.  */
+              errors[(*nerrs)++] = symbols[i];
+              break;
+            }
       }
 }
 
@@ -327,52 +341,50 @@
 static void
 set_conflicts (state *s, symbol **errors)
 {
-  int i;
-  transitions *trans = s->transitions;
-  reductions *reds = s->reductions;
-  int nerrs = 0;
-
   if (s->consistent)
     return;
 
+  reductions *reds = s->reductions;
+  int nerrs = 0;
+
   bitset_zero (lookahead_set);
 
-  FOR_EACH_SHIFT (trans, i)
-    bitset_set (lookahead_set, TRANSITION_SYMBOL (trans, i));
+  {
+    transitions *trans = s->transitions;
+    int i;
+    FOR_EACH_SHIFT (trans, i)
+      bitset_set (lookahead_set, TRANSITION_SYMBOL (trans, i));
+  }
 
   /* 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)
+  for (int i = 0; i < reds->num; ++i)
     if (reds->rules[i]->prec && reds->rules[i]->prec->prec
-	&& !bitset_disjoint_p (reds->lookahead_tokens[i], lookahead_set))
+        && !bitset_disjoint_p (reds->lookahead_tokens[i], lookahead_set))
       resolve_sr_conflict (s, i, errors, &nerrs);
 
   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);
-    }
+    /* 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);
-    }
+    s->solved_conflicts = obstack_finish0 (&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);
-    }
+    s->solved_conflicts_xml = obstack_finish0 (&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->lookahead_tokens[i], lookahead_set))
-	conflicts[s->number] = 1;
-      bitset_or (lookahead_set, lookahead_set, reds->lookahead_tokens[i]);
-    }
+     for conflicts not resolved above.
+
+     reds->lookahead_tokens can be NULL if the LR type is LR(0).  */
+  if (reds->lookahead_tokens)
+    for (int i = 0; i < reds->num; ++i)
+      {
+        if (!bitset_disjoint_p (reds->lookahead_tokens[i], lookahead_set))
+          conflicts[s->number] = true;
+        bitset_or (lookahead_set, lookahead_set, reds->lookahead_tokens[i]);
+      }
 }
 
 
@@ -384,7 +396,6 @@
 void
 conflicts_solve (void)
 {
-  state_number i;
   /* List of lookahead tokens on which we explicitly raise a syntax error.  */
   symbol **errors = xnmalloc (ntokens + 1, sizeof *errors);
 
@@ -394,14 +405,14 @@
   obstack_init (&solved_conflicts_obstack);
   obstack_init (&solved_conflicts_xml_obstack);
 
-  for (i = 0; i < nstates; i++)
+  for (state_number i = 0; i < nstates; ++i)
     {
       set_conflicts (states[i], errors);
 
       /* For uniformity of the code, make sure all the states have a valid
-	 `errs' member.  */
+         'errs' member.  */
       if (!states[i]->errs)
-	states[i]->errs = errs_new (0, 0);
+        states[i]->errs = errs_new (0, 0);
     }
 
   free (errors);
@@ -412,8 +423,7 @@
 conflicts_update_state_numbers (state_number old_to_new[],
                                 state_number nstates_old)
 {
-  state_number i;
-  for (i = 0; i < nstates_old; ++i)
+  for (state_number i = 0; i < nstates_old; ++i)
     if (old_to_new[i] != nstates_old)
       conflicts[old_to_new[i]] = conflicts[i];
 }
@@ -423,11 +433,9 @@
 | Count the number of shift/reduce conflicts.  |
 `---------------------------------------------*/
 
-static int
-count_sr_conflicts (state *s)
+static size_t
+count_state_sr_conflicts (const state *s)
 {
-  int i;
-  int src_count = 0;
   transitions *trans = s->transitions;
   reductions *reds = s->reductions;
 
@@ -437,67 +445,146 @@
   bitset_zero (lookahead_set);
   bitset_zero (shift_set);
 
-  FOR_EACH_SHIFT (trans, i)
-    bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
+  {
+    int i;
+    FOR_EACH_SHIFT (trans, i)
+      bitset_set (shift_set, TRANSITION_SYMBOL (trans, i));
+  }
 
-  for (i = 0; i < reds->num; ++i)
+  for (int i = 0; i < reds->num; ++i)
     bitset_or (lookahead_set, lookahead_set, reds->lookahead_tokens[i]);
 
   bitset_and (lookahead_set, lookahead_set, shift_set);
 
-  src_count = bitset_count (lookahead_set);
+  return bitset_count (lookahead_set);
+}
 
-  return src_count;
+/*---------------------------------------------.
+| The total number of shift/reduce conflicts.  |
+`---------------------------------------------*/
+
+static size_t
+count_sr_conflicts (void)
+{
+  size_t res = 0;
+  /* Conflicts by state.  */
+  for (state_number i = 0; i < nstates; ++i)
+    if (conflicts[i])
+      res += count_state_sr_conflicts (states[i]);
+  return res;
 }
 
 
-/*----------------------------------------------------------------.
-| Count the number of reduce/reduce conflicts.  If ONE_PER_TOKEN, |
-| count one conflict for each token that has any reduce/reduce    |
-| conflicts.  Otherwise, count one conflict for each pair of      |
-| conflicting reductions.                                         |
-+`----------------------------------------------------------------*/
 
-static int
-count_rr_conflicts (state *s, bool one_per_token)
+/*-----------------------------------------------------------------.
+| Count the number of reduce/reduce conflicts.  Count one conflict |
+| for each reduction after the first for a given token.            |
+`-----------------------------------------------------------------*/
+
+static size_t
+count_state_rr_conflicts (const state *s)
 {
-  int i;
   reductions *reds = s->reductions;
-  int rrc_count = 0;
+  size_t res = 0;
 
-  for (i = 0; i < ntokens; i++)
+  for (symbol_number i = 0; i < ntokens; ++i)
     {
       int count = 0;
-      int j;
-      for (j = 0; j < reds->num; ++j)
-	if (bitset_test (reds->lookahead_tokens[j], i))
-	  count++;
-
-      if (count >= 2)
-	rrc_count += one_per_token ? 1 : count-1;
+      for (int j = 0; j < reds->num; ++j)
+        count += bitset_test (reds->lookahead_tokens[j], i);
+      if (2 <= count)
+        res += count-1;
     }
 
-  return rrc_count;
+  return res;
 }
 
-
-/*--------------------------------------------------------.
-| Report the number of conflicts, using the Yacc format.  |
-`--------------------------------------------------------*/
-
-static void
-conflict_report (FILE *out, int src_num, int rrc_num)
+static size_t
+count_rr_conflicts (void)
 {
-  if (src_num && rrc_num)
-    fprintf (out, _("conflicts: %d shift/reduce, %d reduce/reduce\n"),
-	     src_num, rrc_num);
-  else if (src_num)
-    fprintf (out, _("conflicts: %d shift/reduce\n"), src_num);
-  else if (rrc_num)
-    fprintf (out, _("conflicts: %d reduce/reduce\n"), rrc_num);
+  size_t res = 0;
+  /* Conflicts by state.  */
+  for (state_number i = 0; i < nstates; ++i)
+    if (conflicts[i])
+      res += count_state_rr_conflicts (states[i]);
+  return res;
 }
 
 
+/*------------------------------------------------------------------.
+| For a given rule, the number of shift/reduce conflicts in a given |
+| state.                                                            |
+`------------------------------------------------------------------*/
+
+static size_t
+count_rule_state_sr_conflicts (rule *r, state *s)
+{
+  size_t res = 0;
+  transitions *trans = s->transitions;
+  reductions *reds = s->reductions;
+
+  for (int i = 0; i < reds->num; ++i)
+    if (reds->rules[i] == r)
+      {
+        bitset lookaheads = reds->lookahead_tokens[i];
+        int j;
+        FOR_EACH_SHIFT (trans, j)
+          res += bitset_test (lookaheads, TRANSITION_SYMBOL (trans, j));
+      }
+
+  return res;
+}
+
+/*----------------------------------------------------------------------.
+| For a given rule, count the number of states for which it is involved |
+| in shift/reduce conflicts.                                            |
+`----------------------------------------------------------------------*/
+
+static size_t
+count_rule_sr_conflicts (rule *r)
+{
+  size_t res = 0;
+  for (state_number i = 0; i < nstates; ++i)
+    if (conflicts[i])
+      res += count_rule_state_sr_conflicts (r, states[i]);
+  return res;
+}
+
+/*-----------------------------------------------------------------.
+| For a given rule, count the number of states in which it is      |
+| involved in reduce/reduce conflicts.                             |
+`-----------------------------------------------------------------*/
+
+static size_t
+count_rule_state_rr_conflicts (rule *r, state *s)
+{
+  size_t res = 0;
+  const reductions *reds = s->reductions;
+  bitset lookaheads = bitset_create (ntokens, BITSET_FIXED);
+
+  for (int i = 0; i < reds->num; ++i)
+    if (reds->rules[i] == r)
+      for (int j = 0; j < reds->num; ++j)
+        if (reds->rules[j] != r)
+          {
+            bitset_and (lookaheads,
+                        reds->lookahead_tokens[i],
+                        reds->lookahead_tokens[j]);
+            res += bitset_count (lookaheads);
+          }
+  bitset_free (lookaheads);
+  return res;
+}
+
+static size_t
+count_rule_rr_conflicts (rule *r)
+{
+  size_t res = 0;
+  for (state_number i = 0; i < nstates; ++i)
+    res += count_rule_state_rr_conflicts (r, states[i]);
+  return res;
+}
+
 /*-----------------------------------------------------------.
 | Output the detailed description of states with conflicts.  |
 `-----------------------------------------------------------*/
@@ -506,126 +593,130 @@
 conflicts_output (FILE *out)
 {
   bool printed_sth = false;
-  state_number i;
-  for (i = 0; i < nstates; i++)
-    {
-      state *s = states[i];
-      if (conflicts[i])
-	{
-	  fprintf (out, _("State %d "), i);
-	  conflict_report (out, count_sr_conflicts (s),
-			   count_rr_conflicts (s, true));
-	  printed_sth = true;
-	}
-    }
+  for (state_number i = 0; i < nstates; ++i)
+    if (conflicts[i])
+      {
+        const state *s = states[i];
+        int src = count_state_sr_conflicts (s);
+        int rrc = count_state_rr_conflicts (s);
+        fprintf (out, _("State %d "), i);
+        if (src && rrc)
+          fprintf (out,
+                   _("conflicts: %d shift/reduce, %d reduce/reduce\n"),
+                   src, rrc);
+        else if (src)
+          fprintf (out, _("conflicts: %d shift/reduce\n"), src);
+        else if (rrc)
+          fprintf (out, _("conflicts: %d reduce/reduce\n"), rrc);
+        printed_sth = true;
+      }
   if (printed_sth)
     fputs ("\n\n", out);
 }
 
-/*--------------------------------------------------------.
-| 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 lookahead as one      |
-| conflict.						  |
-`--------------------------------------------------------*/
+/*--------------------------------------------.
+| Total the number of S/R and R/R conflicts.  |
+`--------------------------------------------*/
 
 int
 conflicts_total_count (void)
 {
-  state_number i;
-  int count;
-
-  /* Conflicts by state.  */
-  count = 0;
-  for (i = 0; i < nstates; i++)
-    if (conflicts[i])
-      {
-	count += count_sr_conflicts (states[i]);
-	count += count_rr_conflicts (states[i], false);
-      }
-  return count;
+  return count_sr_conflicts () + count_rr_conflicts ();
 }
 
+/*------------------------------.
+| Reporting per-rule conflicts. |
+`------------------------------*/
 
-/*------------------------------------------.
-| Reporting the total number of conflicts.  |
-`------------------------------------------*/
+static void
+rule_conflicts_print (void)
+{
+  for (rule_number i = 0; i < nrules; i += 1)
+    {
+      rule *r = &rules[i];
+      int expected_sr = r->expected_sr_conflicts;
+      int expected_rr = r->expected_rr_conflicts;
+
+      if (expected_sr != -1 || expected_rr != -1)
+        {
+          int sr = count_rule_sr_conflicts (r);
+          if (sr != expected_sr && (sr != 0 || expected_sr != -1))
+            complain (&r->location, complaint,
+                      _("shift/reduce conflicts for rule %d:"
+                        " %d found, %d expected"),
+                      r->user_number, sr, expected_sr);
+          int rr = count_rule_rr_conflicts (r);
+          if (rr != expected_rr && (rr != 0 || expected_rr != -1))
+            complain (&r->location, complaint,
+                      _("reduce/reduce conflicts for rule %d:"
+                        " %d found, %d expected"),
+                      r->user_number, rr, expected_rr);
+        }
+    }
+}
+
+/*---------------------------------.
+| Reporting numbers of conflicts.  |
+`---------------------------------*/
 
 void
 conflicts_print (void)
 {
-  /* Is the number of SR conflicts OK?  Either EXPECTED_CONFLICTS is
-     not set, and then we want 0 SR, or else it is specified, in which
-     case we want equality.  */
-  bool src_ok;
-  bool rrc_ok;
+  rule_conflicts_print ();
 
-  int src_total = 0;
-  int rrc_total = 0;
-  int src_expected;
-  int rrc_expected;
-
-  /* Conflicts by state.  */
-  {
-    state_number i;
-
-    for (i = 0; i < nstates; i++)
-      if (conflicts[i])
-	{
-	  src_total += count_sr_conflicts (states[i]);
-	  rrc_total += count_rr_conflicts (states[i], true);
-	}
-  }
-
-  if (! glr_parser && rrc_total > 0 && expected_rr_conflicts != -1)
+  if (! glr_parser && expected_rr_conflicts != -1)
     {
-      warn (_("%%expect-rr applies only to GLR parsers"));
+      complain (NULL, Wother, _("%%expect-rr applies only to GLR parsers"));
       expected_rr_conflicts = -1;
     }
 
-  src_expected = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts;
-  rrc_expected = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts;
-  src_ok = src_total == src_expected;
-  rrc_ok = rrc_total == rrc_expected;
+  /* Screams for factoring, but almost useless because of the
+     different strings to translate.  */
+  {
+    int total = count_sr_conflicts ();
+    /* If %expect is not used, but %expect-rr is, then expect 0 sr.  */
+    int expected =
+      (expected_sr_conflicts == -1 && expected_rr_conflicts != -1)
+      ? 0
+      : expected_sr_conflicts;
+    if (expected != -1)
+      {
+        if (expected != total)
+          complain (NULL, complaint,
+                    _("shift/reduce conflicts: %d found, %d expected"),
+                    total, expected);
+      }
+    else if (total)
+      complain (NULL, Wconflicts_sr,
+                ngettext ("%d shift/reduce conflict",
+                          "%d shift/reduce conflicts",
+                          total),
+                total);
+  }
 
-  /* If there are as many RR conflicts and SR conflicts as
-     expected, then there is nothing to report.  */
-  if (rrc_ok & src_ok)
-    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);
-    }
-
-  if (expected_sr_conflicts != -1 || expected_rr_conflicts != -1)
-    {
-      if (! src_ok)
-	complain (ngettext ("expected %d shift/reduce conflict",
-			    "expected %d shift/reduce conflicts",
-			    src_expected),
-		  src_expected);
-      if (! rrc_ok)
-	complain (ngettext ("expected %d reduce/reduce conflict",
-			    "expected %d reduce/reduce conflicts",
-			    rrc_expected),
-		  rrc_expected);
-    }
+  {
+    int total = count_rr_conflicts ();
+    /* If %expect-rr is not used, but %expect is, then expect 0 rr.  */
+    int expected =
+      (expected_rr_conflicts == -1 && expected_sr_conflicts != -1)
+      ? 0
+      : expected_rr_conflicts;
+    if (expected != -1)
+      {
+        if (expected != total)
+          complain (NULL, complaint,
+                    _("reduce/reduce conflicts: %d found, %d expected"),
+                    total, expected);
+      }
+    else if (total)
+      complain (NULL, Wconflicts_rr,
+                ngettext ("%d reduce/reduce conflict",
+                          "%d reduce/reduce conflicts",
+                          total),
+                total);
+  }
 }
 
-
 void
 conflicts_free (void)
 {
diff --git a/src/conflicts.h b/src/conflicts.h
index 5a03454..c068e36 100644
--- a/src/conflicts.h
+++ b/src/conflicts.h
@@ -1,7 +1,7 @@
 /* Find and resolve or report lookahead conflicts for bison,
 
-   Copyright (C) 2000-2002, 2004, 2007, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 2000-2002, 2004, 2007, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -44,4 +44,5 @@
 /* Were there conflicts? */
 extern int expected_sr_conflicts;
 extern int expected_rr_conflicts;
+
 #endif /* !CONFLICTS_H_ */
diff --git a/src/derives.c b/src/derives.c
index ce5a6a5..8de7986 100644
--- a/src/derives.c
+++ b/src/derives.c
@@ -1,7 +1,7 @@
 /* Match rules with nonterminals for bison,
 
-   Copyright (C) 1984, 1989, 2000-2003, 2005, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2003, 2005, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -40,19 +40,17 @@
 static void
 print_derives (void)
 {
-  int i;
-
   fputs ("DERIVES\n", stderr);
 
-  for (i = ntokens; i < nsyms; i++)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
     {
-      rule **rp;
-      fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
-      for (rp = derives[i - ntokens]; *rp; ++rp)
-	{
-	  fprintf (stderr, "\t\t%3d ", (*rp)->user_number);
-	  rule_rhs_print (*rp, stderr);
-	}
+      fprintf (stderr, "  %s derives\n", symbols[i]->tag);
+      for (rule **rp = derives[i - ntokens]; *rp; ++rp)
+        {
+          fprintf (stderr, "    %3d ", (*rp)->user_number);
+          rule_rhs_print (*rp, stderr);
+          fprintf (stderr, "\n");
+        }
     }
 
   fputs ("\n\n", stderr);
@@ -62,10 +60,6 @@
 void
 derives_compute (void)
 {
-  symbol_number i;
-  rule_number r;
-  rule **q;
-
   /* DSET[NTERM - NTOKENS] -- A linked list of the numbers of the rules
      whose LHS is NTERM.  */
   rule_list **dset = xcalloc (nvars, sizeof *dset);
@@ -75,7 +69,7 @@
      indexed by rule numbers.  */
   rule_list *delts = xnmalloc (nrules, sizeof *delts);
 
-  for (r = nrules - 1; r >= 0; --r)
+  for (rule_number r = nrules - 1; r >= 0; --r)
     {
       symbol_number lhs = rules[r].lhs->number;
       rule_list *p = &delts[r];
@@ -89,17 +83,18 @@
      it a single array.  */
 
   derives = xnmalloc (nvars, sizeof *derives);
-  q = xnmalloc (nvars + nrules, sizeof *q);
+  /* Q is the storage for DERIVES[...] (DERIVES[0] = q).  */
+  rule **q = xnmalloc (nvars + nrules, sizeof *q);
 
-  for (i = ntokens; i < nsyms; i++)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
     {
       rule_list *p = dset[i - ntokens];
       derives[i - ntokens] = q;
       while (p)
-	{
-	  *q++ = p->value;
-	  p = p->next;
-	}
+        {
+          *q++ = p->value;
+          p = p->next;
+        }
       *q++ = NULL;
     }
 
@@ -114,6 +109,9 @@
 void
 derives_free (void)
 {
-  free (derives[0]);
-  free (derives);
+  if (derives)
+    {
+      free (derives[0]);
+      free (derives);
+    }
 }
diff --git a/src/derives.h b/src/derives.h
index f25e502..521a10c 100644
--- a/src/derives.h
+++ b/src/derives.h
@@ -1,7 +1,7 @@
 /* Match rules with nonterminals for bison,
 
-   Copyright (C) 1984, 1989, 2000-2002, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/files.c b/src/files.c
index f698c7e..66000ba 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1,7 +1,7 @@
 /* Open and close files for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,11 +21,13 @@
 #include <config.h>
 #include "system.h"
 
+#include <configmake.h> /* PKGDATADIR */
 #include <error.h>
 #include <dirname.h>
 #include <get-errno.h>
 #include <quote.h>
 #include <quotearg.h>
+#include <relocatable.h> /* relocate2 */
 #include <stdio-safer.h>
 #include <xstrndup.h>
 
@@ -34,7 +36,7 @@
 #include "getargs.h"
 #include "gram.h"
 
-/* Initializing some values below (such SPEC_NAME_PREFIX to `yy') is
+/* 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
    %directive vs --option leaves precedence to the options by deciding
    that if a %directive sets a variable which is really set (i.e., not
@@ -43,35 +45,45 @@
 
 char const *spec_outfile = NULL;       /* for -o. */
 char const *spec_file_prefix = NULL;   /* for -b. */
+location spec_file_prefix_loc = EMPTY_LOCATION_INIT;
 char const *spec_name_prefix = NULL;   /* for -p. */
+location spec_name_prefix_loc = EMPTY_LOCATION_INIT;
 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 *spec_header_file = NULL;  /* for --defines. */
 char *parser_file_name;
 
 /* All computed output file names.  */
-static char **file_names = NULL;
-static int file_names_count = 0;
+typedef struct generated_file
+{
+  /** File name.  */
+  char *name;
+  /** Whether is a generated source file (e.g., *.c, *.java...), as
+      opposed to the report file (e.g., *.output).  When late errors
+      are detected, generated source files are removed.  */
+  bool is_source;
+} generated_file;
+static generated_file *generated_files = NULL;
+static int generated_files_size = 0;
 
 uniqstr grammar_file = NULL;
-uniqstr current_file = NULL;
 
 /* If --output=dir/foo.c was specified,
-   DIR_PREFIX is `dir/' and ALL_BUT_EXT and ALL_BUT_TAB_EXT are `dir/foo'.
+   DIR_PREFIX is 'dir/' and ALL_BUT_EXT and ALL_BUT_TAB_EXT are 'dir/foo'.
 
-   If --output=dir/foo.tab.c was specified, DIR_PREFIX is `dir/',
-   ALL_BUT_EXT is `dir/foo.tab', and ALL_BUT_TAB_EXT is `dir/foo'.
+   If --output=dir/foo.tab.c was specified, DIR_PREFIX is 'dir/',
+   ALL_BUT_EXT is 'dir/foo.tab', and ALL_BUT_TAB_EXT is 'dir/foo'.
 
    If --output was not specified but --file-prefix=dir/foo was specified,
-   ALL_BUT_EXT = `foo.tab' and ALL_BUT_TAB_EXT = `foo'.
+   ALL_BUT_EXT = 'foo.tab' and ALL_BUT_TAB_EXT = 'foo'.
 
    If neither --output nor --file was specified but the input grammar
-   is name dir/foo.y, ALL_BUT_EXT and ALL_BUT_TAB_EXT are `foo'.
+   is name dir/foo.y, ALL_BUT_EXT and ALL_BUT_TAB_EXT are 'foo'.
 
    If neither --output nor --file was specified, DIR_PREFIX is the
    empty string (meaning the current directory); otherwise it is
-   `dir/'.  */
+   'dir/'.  */
 
 char *all_but_ext;
 static char *all_but_tab_ext;
@@ -79,7 +91,7 @@
 
 /* C source file extension (the parser source).  */
 static char *src_extension = NULL;
-/* Header file extension (if option ``-d'' is specified).  */
+/* Header file extension (if option '`-d'' is specified).  */
 static char *header_extension = NULL;
 
 /*-----------------------------------------------------------------.
@@ -106,14 +118,12 @@
 FILE *
 xfopen (const char *name, const char *mode)
 {
-  FILE *ptr;
-
-  ptr = fopen_safer (name, mode);
-  if (!ptr)
+  FILE *res = fopen_safer (name, mode);
+  if (!res)
     error (EXIT_FAILURE, get_errno (),
            _("%s: cannot open"), quotearg_colon (name));
 
-  return ptr;
+  return res;
 }
 
 /*-------------------------------------------------------------.
@@ -134,6 +144,18 @@
 }
 
 
+FILE *
+xfdopen (int fd, char const *mode)
+{
+  FILE *res = fdopen (fd, mode);
+  if (! res)
+    error (EXIT_FAILURE, get_errno (),
+           /* On a separate line to please the "unmarked_diagnostics"
+              syntax-check. */
+           "fdopen");
+  return res;
+}
+
 /*------------------------------------------------------------------.
 | Compute ALL_BUT_EXT, ALL_BUT_TAB_EXT and output files extensions. |
 `------------------------------------------------------------------*/
@@ -142,7 +164,7 @@
 static void
 compute_exts_from_gf (const char *ext)
 {
-  if (strcmp (ext, ".y") == 0)
+  if (STREQ (ext, ".y"))
     {
       src_extension = xstrdup (language->src_extension);
       header_extension = xstrdup (language->header_extension);
@@ -163,7 +185,7 @@
 compute_exts_from_src (const char *ext)
 {
   /* We use this function when the user specifies `-o' or `--output',
-     so the extenions must be computed unconditionally from the file name
+     so the extensions must be computed unconditionally from the file name
      given by this option.  */
   src_extension = xstrdup (ext);
   header_extension = xstrdup (ext);
@@ -179,7 +201,7 @@
    *EXT points to the last period in the basename, or NULL if none.
 
    If there is no *EXT, *TAB is NULL.  Otherwise, *TAB points to
-   `.tab' or `_tab' if present right before *EXT, or is NULL. *TAB
+   '.tab' or '_tab' if present right before *EXT, or is NULL. *TAB
    cannot be equal to *BASE.
 
    None are allocated, they are simply pointers to parts of FILE_NAME.
@@ -202,83 +224,82 @@
 
 static void
 file_name_split (const char *file_name,
-		 const char **base, const char **tab, const char **ext)
+                 const char **base, const char **tab, const char **ext)
 {
   *base = last_component (file_name);
 
   /* Look for the extension, i.e., look for the last dot. */
-  *ext = mbsrchr (*base, '.');
+  *ext = strrchr (*base, '.');
   *tab = NULL;
 
-  /* If there is an extension, check if there is a `.tab' part right
+  /* If there is an extension, check if there is a '.tab' part right
      before.  */
   if (*ext)
     {
       size_t baselen = *ext - *base;
-      size_t dottablen = 4;
+      size_t dottablen = sizeof (TAB_EXT) - 1;
       if (dottablen < baselen
-	  && (strncmp (*ext - dottablen, ".tab", dottablen) == 0
-	      || strncmp (*ext - dottablen, "_tab", dottablen) == 0))
-	*tab = *ext - dottablen;
+          && STRPREFIX_LIT (TAB_EXT, *ext - dottablen))
+        *tab = *ext - dottablen;
     }
 }
 
+/* Compute ALL_BUT_EXT and ALL_BUT_TAB_EXT from SPEC_OUTFILE or
+   GRAMMAR_FILE.
+
+   The precise -o name will be used for FTABLE.  For other output
+   files, remove the ".c" or ".tab.c" suffix.  */
 
 static void
 compute_file_name_parts (void)
 {
-  const char *base, *tab, *ext;
-
-  /* Compute ALL_BUT_EXT and ALL_BUT_TAB_EXT from SPEC_OUTFILE
-     or GRAMMAR_FILE.
-
-     The precise -o name will be used for FTABLE.  For other output
-     files, remove the ".c" or ".tab.c" suffix.  */
   if (spec_outfile)
     {
+      const char *base, *tab, *ext;
       file_name_split (spec_outfile, &base, &tab, &ext);
       dir_prefix = xstrndup (spec_outfile, base - spec_outfile);
 
       /* ALL_BUT_EXT goes up the EXT, excluding it. */
       all_but_ext =
-	xstrndup (spec_outfile,
-		  (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
+        xstrndup (spec_outfile,
+                  (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
 
       /* ALL_BUT_TAB_EXT goes up to TAB, excluding it.  */
       all_but_tab_ext =
-	xstrndup (spec_outfile,
-		  (strlen (spec_outfile)
-		   - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
+        xstrndup (spec_outfile,
+                  (strlen (spec_outfile)
+                   - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
 
       if (ext)
-	compute_exts_from_src (ext);
+        compute_exts_from_src (ext);
     }
   else
     {
+      const char *base, *tab, *ext;
       file_name_split (grammar_file, &base, &tab, &ext);
 
       if (spec_file_prefix)
-	{
-	  /* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = `foo'.  */
-	  dir_prefix =
+        {
+          /* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = 'foo'.  */
+          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 = xstrdup ("");
-	  all_but_tab_ext = xstrdup ("y");
-	}
+          all_but_tab_ext = xstrdup (spec_file_prefix);
+        }
+      else if (! location_empty (yacc_loc))
+        {
+          /* If --yacc, then the output is 'y.tab.c'.  */
+          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 = xstrdup ("");
-	  all_but_tab_ext =
-	    xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
-	}
+        {
+          /* Otherwise, ALL_BUT_TAB_EXT is computed from the input
+             grammar: 'foo/bar.yy' => 'bar'.  */
+          dir_prefix = xstrdup ("");
+          all_but_tab_ext =
+            xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
+        }
 
       if (language->add_tab)
         all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
@@ -286,8 +307,8 @@
         all_but_ext = xstrdup (all_but_tab_ext);
 
       /* Compute the extensions from the grammar file name.  */
-      if (ext && !yacc_flag)
-	compute_exts_from_gf (ext);
+      if (ext && location_empty (yacc_loc))
+        compute_exts_from_gf (ext);
     }
 }
 
@@ -313,29 +334,30 @@
 
   if (defines_flag)
     {
-      if (! spec_defines_file)
-	spec_defines_file = concat2 (all_but_ext, header_extension);
+      if (! spec_header_file)
+        spec_header_file = concat2 (all_but_ext, header_extension);
     }
 
   if (graph_flag)
     {
       if (! spec_graph_file)
-	spec_graph_file = concat2 (all_but_tab_ext, ".dot");
-      output_file_name_check (&spec_graph_file);
+        spec_graph_file = concat2 (all_but_tab_ext,
+                                   304 <= required_version ? ".gv" : ".dot");
+      output_file_name_check (&spec_graph_file, false);
     }
 
   if (xml_flag)
     {
       if (! spec_xml_file)
-	spec_xml_file = concat2 (all_but_tab_ext, ".xml");
-      output_file_name_check (&spec_xml_file);
+        spec_xml_file = concat2 (all_but_tab_ext, ".xml");
+      output_file_name_check (&spec_xml_file, false);
     }
 
   if (report_flag)
     {
       if (!spec_verbose_file)
         spec_verbose_file = concat2 (all_but_tab_ext, OUTPUT_EXT);
-      output_file_name_check (&spec_verbose_file);
+      output_file_name_check (&spec_verbose_file, false);
     }
 
   free (all_but_tab_ext);
@@ -344,26 +366,23 @@
 }
 
 void
-output_file_name_check (char **file_name)
+output_file_name_check (char **file_name, bool source)
 {
   bool conflict = false;
-  if (0 == strcmp (*file_name, grammar_file))
+  if (STREQ (*file_name, grammar_file))
     {
-      complain (_("refusing to overwrite the input file %s"),
+      complain (NULL, complaint, _("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;
-          }
-    }
+    for (int i = 0; i < generated_files_size; i++)
+      if (STREQ (generated_files[i].name, *file_name))
+        {
+          complain (NULL, Wother, _("conflicting outputs to file %s"),
+                    quote (generated_files[i].name));
+          conflict = true;
+        }
   if (conflict)
     {
       free (*file_name);
@@ -371,9 +390,34 @@
     }
   else
     {
-      file_names = xnrealloc (file_names, ++file_names_count,
-                              sizeof *file_names);
-      file_names[file_names_count-1] = xstrdup (*file_name);
+      generated_files = xnrealloc (generated_files, ++generated_files_size,
+                                   sizeof *generated_files);
+      generated_files[generated_files_size-1].name = xstrdup (*file_name);
+      generated_files[generated_files_size-1].is_source = source;
+    }
+}
+
+void
+unlink_generated_sources (void)
+{
+  for (int i = 0; i < generated_files_size; i++)
+    if (generated_files[i].is_source)
+      /* Ignore errors.  The file might not even exist.  */
+      unlink (generated_files[i].name);
+}
+
+/* Memory allocated by relocate2, to free.  */
+static char *relocate_buffer = NULL;
+
+char const *
+pkgdatadir (void)
+{
+  if (relocate_buffer)
+    return relocate_buffer;
+  else
+    {
+      char const *cp = getenv ("BISON_PKGDATADIR");
+      return cp ? cp : relocate2 (PKGDATADIR, &relocate_buffer);
     }
 }
 
@@ -384,13 +428,11 @@
   free (spec_verbose_file);
   free (spec_graph_file);
   free (spec_xml_file);
-  free (spec_defines_file);
+  free (spec_header_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);
+  for (int i = 0; i < generated_files_size; i++)
+    free (generated_files[i].name);
+  free (generated_files);
+  free (relocate_buffer);
 }
diff --git a/src/files.h b/src/files.h
index 8f0bec0..5722cc7 100644
--- a/src/files.h
+++ b/src/files.h
@@ -1,7 +1,7 @@
 /* File names and variables for bison,
 
-   Copyright (C) 1984, 1989, 2000-2002, 2006-2007, 2009-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2006-2007, 2009-2015, 2018-2019
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,6 +21,7 @@
 #ifndef FILES_H_
 # define FILES_H_
 
+# include "location.h"
 # include "uniqstr.h"
 
 /* File name specified with -o for the output file, or 0 if no -o.  */
@@ -31,9 +32,11 @@
 
 /* Symbol prefix specified with -p, or 0 if no -p.  */
 extern const char *spec_name_prefix;
+extern location spec_name_prefix_loc;
 
 /* File name prefix specified with -b, or 0 if no -b.  */
 extern char const *spec_file_prefix;
+extern location spec_file_prefix_loc;
 
 /* --verbose. */
 extern char *spec_verbose_file;
@@ -45,7 +48,7 @@
 extern char *spec_xml_file;
 
 /* File name specified with --defines.  */
-extern char *spec_defines_file;
+extern char *spec_header_file;
 
 /* Directory prefix of output file names.  */
 extern char *dir_prefix;
@@ -55,17 +58,28 @@
    and therefore GCC warns about a name clash. */
 extern uniqstr grammar_file;
 
-/* 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;
 
+/* Where our data files are installed.  */
+char const *pkgdatadir (void);
+
 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);
+/** Record that we generate a file.
+ *
+ *  \param file_name  the name of file being generated.
+ *  \param source whether this is a source file (*c, *.java...)
+ *                as opposed to a report (*.output, *.dot...).
+ */
+void output_file_name_check (char **file_name, bool source);
+
+/** Remove all the generated source files. */
+void unlink_generated_sources (void);
+
+FILE *xfopen (const char *name, char const *mode);
 void xfclose (FILE *ptr);
+FILE *xfdopen (int fd, char const *mode);
 
 #endif /* !FILES_H_ */
diff --git a/src/fixits.c b/src/fixits.c
new file mode 100644
index 0000000..ee21789
--- /dev/null
+++ b/src/fixits.c
@@ -0,0 +1,228 @@
+/* Support for fixing grammar files.
+
+   Copyright (C) 2019 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 "fixits.h"
+
+#include "system.h"
+
+#include "error.h"
+#include "get-errno.h"
+#include "getargs.h"
+#include "gl_array_list.h"
+#include "gl_xlist.h"
+#include "progname.h"
+#include "quote.h"
+#include "quotearg.h"
+#include "vasnprintf.h"
+
+#include "files.h"
+
+typedef struct
+{
+  location location;
+  char *fix;
+} fixit;
+
+gl_list_t fixits = NULL;
+
+static fixit *
+fixit_new (location const *loc, char const* fix)
+{
+  fixit *res = xmalloc (sizeof *res);
+  res->location = *loc;
+  res->fix = xstrdup (fix);
+  return res;
+}
+
+static int
+fixit_cmp (const  fixit *a, const fixit *b)
+{
+  return location_cmp (a->location, b->location);
+}
+
+static void
+fixit_free (fixit *f)
+{
+  free (f->fix);
+  free (f);
+}
+
+
+/* GCC and Clang follow the same pattern.
+   https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Message-Formatting-Options.html
+   http://clang.llvm.org/docs/UsersManual.html#cmdoption-fdiagnostics-parseable-fixits */
+static void
+fixit_print (fixit const *f, FILE *out)
+{
+  fprintf (out, "fix-it:%s:{%d:%d-%d:%d}:%s\n",
+           quotearg_n_style (1, c_quoting_style, f->location.start.file),
+           f->location.start.line, f->location.start.byte,
+           f->location.end.line, f->location.end.byte,
+           quotearg_n_style (2, c_quoting_style, f->fix));
+}
+
+
+void
+fixits_register (location const *loc, char const* fix)
+{
+  if (!fixits)
+    fixits = gl_list_create_empty (GL_ARRAY_LIST,
+                                   /* equals */ NULL,
+                                   /* hashcode */ NULL,
+                                   (gl_listelement_dispose_fn) fixit_free,
+                                   true);
+  fixit *f = fixit_new (loc, fix);
+  gl_sortedlist_add (fixits, (gl_listelement_compar_fn) fixit_cmp, f);
+  if (feature_flag & feature_fixit)
+    fixit_print (f, stderr);
+}
+
+
+bool
+fixits_empty (void)
+{
+  return !fixits;
+}
+
+
+void
+fixits_run (void)
+{
+  if (!fixits)
+    return;
+
+  /* This is not unlike what is done in location_caret.  */
+  uniqstr input = ((fixit *) gl_list_get_at (fixits, 0))->location.start.file;
+  /* Backup the file. */
+  char buf[256];
+  size_t len = sizeof (buf);
+  char *backup = asnprintf (buf, &len, "%s~", input);
+  if (!backup)
+    xalloc_die ();
+  if (rename (input, backup))
+    error (EXIT_FAILURE, get_errno (),
+           _("%s: cannot backup"), quotearg_colon (input));
+  FILE *in = xfopen (backup, "r");
+  FILE *out = xfopen (input, "w");
+  size_t line = 1;
+  size_t offset = 1;
+  fixit const *f = NULL;
+  gl_list_iterator_t iter = gl_list_iterator (fixits);
+  while (gl_list_iterator_next (&iter, (const void**) &f, NULL))
+    {
+      /* Look for the correct line. */
+      while (line < f->location.start.line)
+        {
+          int c = getc (in);
+          if (c == EOF)
+            break;
+          if (c == '\n')
+            {
+              ++line;
+              offset = 1;
+            }
+          putc (c, out);
+        }
+
+      /* Look for the right offset. */
+      bool need_eol = false;
+      while (offset < f->location.start.byte)
+        {
+          int c = getc (in);
+          if (c == EOF)
+            break;
+          ++offset;
+          if (c == '\n')
+            /* The position we are asked for is beyond the actual
+               line: pad with spaces, and remember we need a \n.  */
+            need_eol = true;
+          putc (need_eol ? ' ' : c, out);
+        }
+
+      /* Paste the fix instead. */
+      fputs (f->fix, out);
+
+      /* Maybe install the eol afterwards.  */
+      if (need_eol)
+        putc ('\n', out);
+
+      /* Skip the bad input. */
+      while (line < f->location.end.line)
+        {
+          int c = getc (in);
+          if (c == EOF)
+            break;
+          if (c == '\n')
+            {
+              ++line;
+              offset = 1;
+            }
+        }
+      while (offset < f->location.end.byte)
+        {
+          int c = getc (in);
+          if (c == EOF)
+            break;
+          ++offset;
+        }
+
+      /* If erasing the content of a full line, also remove the
+         end-of-line. */
+      if (f->fix[0] == 0 && f->location.start.byte == 1)
+        {
+          int c = getc (in);
+          if (c == EOF)
+            break;
+          else if (c == '\n')
+            {
+              ++line;
+              offset = 1;
+            }
+          else
+            ungetc (c, in);
+        }
+    }
+  /* Paste the rest of the file.  */
+  {
+    int c;
+    while ((c = getc (in)) != EOF)
+      putc (c, out);
+  }
+
+  gl_list_iterator_free (&iter);
+  xfclose (out);
+  xfclose (in);
+  fprintf (stderr, "%s: file %s was updated (backup: %s)\n",
+           program_name, quote_n (0, input), quote_n (1, backup));
+  if (backup != buf)
+    free (backup);
+}
+
+
+/* Free the registered fixits.  */
+void fixits_free (void)
+{
+  if (fixits)
+    {
+      gl_list_free (fixits);
+      fixits = NULL;
+    }
+}
diff --git a/src/fixits.h b/src/fixits.h
new file mode 100644
index 0000000..45c2780
--- /dev/null
+++ b/src/fixits.h
@@ -0,0 +1,35 @@
+/* Support for fixing grammar files.
+
+   Copyright (C) 2019 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 FIXITS_H_
+# define FIXITS_H_ 1
+
+# include "location.h"
+
+/* Declare a fix to apply.  */
+void fixits_register (location const *loc, char const* update);
+
+/* Apply the fixits: update the source file.  */
+void fixits_run (void);
+
+/* Whether there are no fixits. */
+bool fixits_empty (void);
+
+/* Free the registered fixits.  */
+void fixits_free (void);
+
+#endif /* !FIXITS_H_ */
diff --git a/src/flex-scanner.h b/src/flex-scanner.h
index c854c29..9e4408f 100644
--- a/src/flex-scanner.h
+++ b/src/flex-scanner.h
@@ -1,6 +1,7 @@
 /* Common parts between scan-code.l, scan-gram.l, and scan-skel.l.
 
-   Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -27,8 +28,34 @@
    + (YY_FLEX_MINOR_VERSION) * 1000     \
    + (YY_FLEX_SUBMINOR_VERSION))
 
+// Pacify warnings in yy_init_buffer (observed with Flex 2.6.4 and GCC
+// 6.4.0 and 7.3.0).
+//
+// ./src/scan-skel.c: In function 'skel_restart':
+// ./src/scan-skel.c:2035:20: error: potential null pointer dereference [-Werror=null-dereference]
+//   b->yy_fill_buffer = 1;
+//   ~~~~~~~~~~~~~~~~~~^~~
+// ./src/scan-skel.c:2031:19: error: potential null pointer dereference [-Werror=null-dereference]
+//   b->yy_input_file = file;
+//   ~~~~~~~~~~~~~~~~~^~~~~~
+#if defined __GNUC__ && ! defined __clang__ && 6 <= __GNUC__
+# pragma GCC diagnostic ignored "-Wnull-dereference"
+#endif
+
+// Old versions of Flex (2.5.35) generate an incomplete documentation comment.
+//
+//  In file included from src/scan-code-c.c:3:
+//  src/scan-code.c:2198:21: error: empty paragraph passed to '@param' command
+//        [-Werror,-Wdocumentation]
+//   * @param line_number
+//     ~~~~~~~~~~~~~~~~~^
+//  1 error generated.
+#if FLEX_VERSION <= 20060000 && defined __clang__
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+
 /* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-# if FLEX_VERSION <= 2005031
+#if FLEX_VERSION <= 2005031
 int   FLEX_PREFIX (get_lineno) (void);
 FILE *FLEX_PREFIX (get_in) (void);
 FILE *FLEX_PREFIX (get_out) (void);
@@ -76,16 +103,13 @@
 
 static struct obstack obstack_for_string;
 
-# define STRING_GROW   \
+# 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_FINISH                                  \
+  (last_string = obstack_finish0 (&obstack_for_string))
 
-# define STRING_FREE \
+# define STRING_FREE                                    \
   obstack_free (&obstack_for_string, last_string)
 
 #endif
diff --git a/src/getargs.c b/src/getargs.c
index ab2a28e..bf4a938 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -1,7 +1,7 @@
 /* Parse command line arguments for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -19,59 +19,46 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+#include "getargs.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.  */
-#if lint && ! defined __GNU_LIBRARY__
-# define __GNU_LIBRARY__
-# define HACK_FOR___GNU_LIBRARY___PROTOTYPE 1
-#endif
-
 #include <getopt.h>
-
-#ifdef HACK_FOR___GNU_LIBRARY___PROTOTYPE
-# undef __GNU_LIBRARY__
-# undef HACK_FOR___GNU_LIBRARY___PROTOTYPE
-#endif
-
 #include <progname.h>
+#include <quote.h>
+#include <textstyle.h>
 
 #include "complain.h"
 #include "files.h"
-#include "getargs.h"
 #include "muscle-tab.h"
-#include "quote.h"
+#include "output.h"
 #include "uniqstr.h"
 
-bool debug;
-bool defines_flag;
-bool graph_flag;
-bool xml_flag;
-bool locations_flag;
-bool no_lines_flag;
-bool token_table_flag;
-bool yacc_flag;	/* for -y */
-
-bool error_verbose = false;
+bool defines_flag = false;
+bool graph_flag = false;
+bool xml_flag = false;
+bool no_lines_flag = false;
+bool token_table_flag = false;
+location yacc_loc = EMPTY_LOCATION_INIT;
+bool update_flag = false; /* for -u */
+bool color_debug = false;
 
 bool nondeterministic_parser = false;
 bool glr_parser = false;
 
-int feature_flag = feature_none;
+int feature_flag = feature_caret;
 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 },
+  /* lang,  skeleton,       ext,     hdr,     add_tab */
+  { "c",    "c-skel.m4",    ".c",    ".h",    true },
+  { "c++",  "c++-skel.m4",  ".cc",   ".hh",   true },
+  { "d",    "d-skel.m4",    ".d",    ".d",    false },
   { "java", "java-skel.m4", ".java", ".java", false },
   { "", "", "", "", false }
 };
@@ -80,204 +67,271 @@
 const char *skeleton = NULL;
 int language_prio = default_prio;
 struct bison_language const *language = &valid_languages[0];
-const char *include = NULL;
 
+typedef int* (xargmatch_fn) (const char *context, const char *arg);
 
-/** Decode an option's set of keys.
+/** Decode an option's key.
  *
- *  \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.
+ *  \param opt        option being decoded.
+ *  \param xargmatch  matching function.
+ *  \param all        the value of the argument 'all'.
+ *  \param flags      the flags to update
+ *  \param arg        the subarguments to decode.
+ *                    If null, then activate all the flags.
+ *  \param no         length of the potential "no-" prefix.
+ *                    Can be 0 or 3. If 3, negate the action of the subargument.
  *
  *  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)
+flag_argmatch (const char *opt, xargmatch_fn xargmatch,
+               int all, int *flags, char *arg, size_t no)
 {
-  if (args)
+  int value = *xargmatch (opt, arg + no);
+
+  /* -rnone == -rno-all, and -rno-none == -rall.  */
+  if (!value)
     {
-      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, ",");
-	}
+      value = all;
+      no = !no;
+    }
+
+  if (no)
+    *flags &= ~value;
+  else
+    *flags |= value;
+}
+
+typedef void (usage_fn) (FILE *out);
+
+/** Decode an option's set of keys.
+ *
+ *  \param opt        option being decoded (e.g., --report).
+ *  \param xargmatch  matching function.
+ *  \param usage      function that implement --help for this option.
+ *  \param all        the value of the argument 'all'.
+ *  \param flags      the flags to update
+ *  \param args       comma separated list of effective subarguments to decode.
+ *                    If 0, then activate all the flags.
+ */
+static void
+flags_argmatch (const char *opt,
+                xargmatch_fn xargmatch,
+                usage_fn usage,
+                int all, int *flags, char *args)
+{
+  if (!args)
+    *flags |= all;
+  else if (STREQ (args, "help"))
+    {
+      usage (stdout);
+      exit (EXIT_SUCCESS);
     }
   else
-    *flags |= all;
+    for (args = strtok (args, ","); args; args = strtok (NULL, ","))
+      {
+        size_t no = STRPREFIX_LIT ("no-", args) ? 3 : 0;
+        flag_argmatch (opt, xargmatch,
+                       all, flags, args, no);
+      }
 }
 
+
 /** Decode a set of sub arguments.
  *
- *  \param FlagName  the flag familly to update.
+ *  \param FlagName  the flag family to update.
  *  \param Args      the effective sub arguments to decode.
+ *  \param All       the "all" value.
  *
  *  \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)
+#define FLAGS_ARGMATCH(FlagName, Args, All)                             \
+  flags_argmatch ("--" #FlagName,                                       \
+                  (xargmatch_fn*) argmatch_## FlagName ## _value,        \
+                  argmatch_## FlagName ## _usage,                       \
+                  All, &FlagName ## _flag, Args)
+
+/*---------------------.
+| --color's handling.  |
+`---------------------*/
+
+enum color
+  {
+    color_always,
+    color_never,
+    color_auto
+  };
+
+ARGMATCH_DEFINE_GROUP (color, enum color)
+
+static const argmatch_color_doc argmatch_color_docs[] =
+{
+  { "always",     N_("colorize the output") },
+  { "never",      N_("don't colorize the output") },
+  { "auto",       N_("colorize if the output device is a tty") },
+  { NULL, NULL },
+};
+
+static const argmatch_color_arg argmatch_color_args[] =
+{
+  { "always",   color_always },
+  { "yes",      color_always },
+  { "never",    color_never },
+  { "no",       color_never },
+  { "auto",     color_auto },
+  { "tty",      color_auto },
+  { NULL, color_always },
+};
+
+const argmatch_color_group_type argmatch_color_group =
+{
+  argmatch_color_args,
+  argmatch_color_docs,
+  /* TRANSLATORS: Use the same translation for WHEN as in the
+     --color=WHEN help message.  */
+  N_("WHEN can be one of the following:"),
+  NULL
+};
 
 
 /*----------------------.
 | --report's handling.  |
 `----------------------*/
 
-static const char * const report_args[] =
+ARGMATCH_DEFINE_GROUP (report, enum report)
+
+static const argmatch_report_doc argmatch_report_docs[] =
 {
-  /* 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
+  { "states",     N_("describe the states") },
+  { "itemsets",   N_("complete the core item sets with their closure") },
+  { "lookaheads", N_("explicitly associate lookahead tokens to items") },
+  { "solved",     N_("describe shift/reduce conflicts solving") },
+  { "all",        N_("include all the above information") },
+  { "none",       N_("disable the report") },
+  { NULL, NULL },
 };
 
-static const int report_types[] =
+static const argmatch_report_arg argmatch_report_args[] =
 {
-  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
+  { "none",        report_none },
+  { "states",      report_states },
+  { "itemsets",    report_states | report_itemsets },
+  { "lookaheads",  report_states | report_lookahead_tokens },
+  { "solved",      report_states | report_solved_conflicts },
+  { "all",         report_all },
+  { NULL, report_none },
 };
 
-ARGMATCH_VERIFY (report_args, report_types);
-
+const argmatch_report_group_type argmatch_report_group =
+{
+  argmatch_report_args,
+  argmatch_report_docs,
+  /* TRANSLATORS: Use the same translation for THINGS as in the
+     --report=THINGS help message.  */
+  N_("THINGS is a list of comma separated words that can include:"),
+  NULL
+};
 
 /*---------------------.
 | --trace's handling.  |
 `---------------------*/
 
-static const char * const trace_args[] =
+ARGMATCH_DEFINE_GROUP (trace, enum trace)
+
+static const argmatch_trace_doc argmatch_trace_docs[] =
 {
-  /* In a series of synonyms, present the most meaningful first, so
-     that argmatch_valid be more readable.  */
-  "none       - no traces",
-  "scan       - grammar scanner traces",
-  "parse      - grammar parser traces",
-  "automaton  - construction of the automaton",
-  "bitsets    - use of bitsets",
-  "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
+  /* Meant for developers only, don't translate them.  */
+  { "none",       "no traces" },
+  { "locations",  "full display of the locations" },
+  { "scan",       "grammar scanner traces" },
+  { "parse",      "grammar parser traces" },
+  { "automaton",  "construction of the automaton" },
+  { "bitsets",    "use of bitsets" },
+  { "closure",    "input/output of closure" },
+  { "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" },
+  { NULL, NULL},
 };
 
-static const int trace_types[] =
+static const argmatch_trace_arg argmatch_trace_args[] =
 {
-  trace_none,
-  trace_scan,
-  trace_parse,
-  trace_automaton,
-  trace_bitsets,
-  trace_grammar,
-  trace_resource,
-  trace_sets,
-  trace_muscles,
-  trace_tools,
-  trace_m4,
-  trace_skeleton,
-  trace_time,
-  trace_ielr,
-  trace_all
+  { "none",      trace_none },
+  { "locations", trace_locations },
+  { "scan",      trace_scan },
+  { "parse",     trace_parse },
+  { "automaton", trace_automaton },
+  { "bitsets",   trace_bitsets },
+  { "closure",   trace_closure },
+  { "grammar",   trace_grammar },
+  { "resource",  trace_resource },
+  { "sets",      trace_sets },
+  { "muscles",   trace_muscles },
+  { "tools",     trace_tools },
+  { "m4",        trace_m4 },
+  { "skeleton",  trace_skeleton },
+  { "time",      trace_time },
+  { "ielr",      trace_ielr },
+  { "all",       trace_all },
+  { NULL,        trace_none},
 };
 
-ARGMATCH_VERIFY (trace_args, trace_types);
-
-
-/*------------------------.
-| --warnings's handling.  |
-`------------------------*/
-
-static const char * const warnings_args[] =
+const argmatch_trace_group_type argmatch_trace_group =
 {
-  /* 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
+  argmatch_trace_args,
+  argmatch_trace_docs,
+  N_("TRACES is a list of comma separated words that can include:"),
+  NULL
 };
 
-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[] =
+ARGMATCH_DEFINE_GROUP (feature, enum feature)
+
+static const argmatch_feature_doc argmatch_feature_docs[] =
 {
-  "none",
-  "caret", "diagnostics-show-caret",
-  "all",
-  0
+  { "caret",       N_("show errors with carets") },
+  { "fixit",       N_("show machine-readable fixes") },
+  { "syntax-only", N_("do not generate any file") },
+  { "all",         N_("all of the above") },
+  { "none",        N_("disable all of the above") },
+  { NULL, NULL }
 };
 
-static const int feature_types[] =
+static const argmatch_feature_arg argmatch_feature_args[] =
 {
-  feature_none,
-  feature_caret, feature_caret,
-  feature_all
+  { "none",                          feature_none },
+  { "caret",                         feature_caret },
+  { "diagnostics-show-caret",        feature_caret },
+  { "fixit",                         feature_fixit },
+  { "diagnostics-parseable-fixits",  feature_fixit },
+  { "syntax-only",                   feature_syntax_only },
+  { "all",                           feature_all },
+  { NULL, feature_none}
 };
 
-ARGMATCH_VERIFY (feature_args, feature_types);
+const argmatch_feature_group_type argmatch_feature_group =
+{
+  argmatch_feature_args,
+  argmatch_feature_docs,
+  /* TRANSLATORS: Use the same translation for FEATURES as in the
+     --feature=FEATURES help message.  */
+  N_("FEATURES is a list of comma separated words that can include:"),
+  NULL
+};
 
 /*-------------------------------------------.
 | Display the help message and exit STATUS.  |
@@ -289,20 +343,19 @@
 usage (int status)
 {
   if (status != 0)
-    fprintf (stderr, _("Try `%s --help' for more information.\n"),
-	     program_name);
+    fprintf (stderr, _("Try '%s --help' for more information.\n"),
+             program_name);
   else
     {
       /* 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.  */
+                ^  -S, --long[=ARGS] (whitespace)
+         A --long option is required.
+         Otherwise, add exceptions to ../build-aux/cross-options.pl.  */
 
       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\
+LALR(1), IELR(1), or canonical LR(1) parser tables.\n\
 \n\
 "), stdout);
 
@@ -312,96 +365,86 @@
       fputs (_("\
 The same is true for optional arguments.\n\
 "), stdout);
+      putc ('\n', stdout);
 
       fputs (_("\
-\n\
-Operation modes:\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\
+                             and exit\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\
+                             and exit\n\
+  -u, --update               apply fixes to the source grammar file and exit\n\
+  -f, --feature[=FEATURES]   activate miscellaneous features\n\
 \n\
 "), stdout);
 
+      argmatch_feature_usage (stdout);
+      putc ('\n', stdout);
+
       fputs (_("\
-Parser:\n\
+Diagnostics:\n\
+  -W, --warnings[=CATEGORY]  report the warnings falling in CATEGORY\n\
+      --color[=WHEN]         whether to colorize the diagnostics\n\
+      --style=FILE           specify the CSS FILE for colorizer diagnostics\n\
+\n\
+"), stdout);
+
+      warning_usage (stdout);
+      putc ('\n', stdout);
+
+      argmatch_color_usage (stdout);
+      putc ('\n', stdout);
+
+      fputs (_("\
+Tuning the 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\
+  -t, --debug                      instrument the parser for tracing\n\
+                                   same as '-Dparse.trace'\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\
+  -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\
+                                   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\
+  -y, --yacc                       emulate POSIX Yacc\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\
+Output Files:\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\
+  -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 (_("\
-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);
+      argmatch_report_usage (stdout);
       putc ('\n', stdout);
 
-      fputs (_("\
-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\
-"), stdout);
-      putc ('\n', stdout);
-
-      fputs (_("\
-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);
+
+#if (defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__
       /* 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_"))
+      if (lc_messages && !STREQ (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/.
@@ -409,6 +452,7 @@
            email address.  */
         fputs (_("Report translation bugs to "
                  "<http://translationproject.org/team/>.\n"), stdout);
+#endif
       fputs (_("For complete documentation, run: info bison.\n"), stdout);
     }
 
@@ -431,14 +475,14 @@
   putc ('\n', stdout);
 
   fprintf (stdout,
-	   _("Copyright (C) %d Free Software Foundation, Inc.\n"),
-	   PACKAGE_COPYRIGHT_YEAR);
+           _("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\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 "),
-	 stdout);
+         stdout);
 }
 
 
@@ -455,18 +499,18 @@
       skeleton = arg;
     }
   else if (prio == skeleton_prio)
-    complain_at (loc, _("multiple skeleton declarations are invalid"));
+    complain (&loc, complaint,
+              _("multiple skeleton declarations are invalid"));
 }
 
 void
 language_argmatch (char const *arg, int prio, location loc)
 {
-  char const *msg;
+  char const *msg = NULL;
 
   if (prio < language_prio)
     {
-      int i;
-      for (i = 0; valid_languages[i].language[0]; i++)
+      for (int i = 0; valid_languages[i].language[0]; ++i)
         if (c_strcasecmp (arg, valid_languages[i].language) == 0)
           {
             language_prio = prio;
@@ -477,10 +521,9 @@
     }
   else if (language_prio == prio)
     msg = _("multiple language declarations are invalid");
-  else
-    return;
 
-  complain_at (loc, msg, quotearg_colon (arg));
+  if (msg)
+    complain (&loc, complaint, msg, quotearg_colon (arg));
 }
 
 /*----------------------.
@@ -500,16 +543,15 @@
   "b:"
   "d"
   "f::"
-  "e"
   "g::"
   "h"
   "k"
   "l"
-  "n"
   "o:"
   "p:"
   "r:"
   "t"
+  "u"   /* --update */
   "v"
   "x::"
   "y"
@@ -518,68 +560,61 @@
 /* Values for long options that do not have single-letter equivalents.  */
 enum
 {
-  LOCATIONS_OPTION = CHAR_MAX + 1,
-  PRINT_LOCALEDIR_OPTION,
+  COLOR_OPTION = CHAR_MAX + 1,
+  FIXED_OUTPUT_FILES_OPTION,
+  LOCATIONS_OPTION,
   PRINT_DATADIR_OPTION,
-  REPORT_FILE_OPTION
+  PRINT_LOCALEDIR_OPTION,
+  REPORT_FILE_OPTION,
+  STYLE_OPTION
 };
 
+/* In the same order as in usage(), and in the documentation.  */
 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 },
-  { "print-datadir",   no_argument,	  0,   PRINT_DATADIR_OPTION   },
-  { "warnings",        optional_argument, 0,   'W' },
+  { "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   },
+  { "update",          no_argument,       0,   'u' },
+  { "feature",         optional_argument, 0,   'f' },
 
-  /* Parser. */
-  { "name-prefix",   required_argument,	  0,   'p' },
-  { "include",       required_argument,   0,   'I' },
+  /* Diagnostics.  */
+  { "warnings",        optional_argument,  0, 'W' },
+  { "color",           optional_argument,  0,  COLOR_OPTION },
+  { "style",           optional_argument,  0,  STYLE_OPTION },
 
-  /* Output. */
-  { "file-prefix", required_argument,	0,   'b' },
-  { "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' },
+  /* Tuning the Parser. */
+  { "language",       required_argument,   0, 'L' },
+  { "skeleton",       required_argument,   0, 'S' },
+  { "debug",          no_argument,         0, 't' },
+  { "locations",      no_argument,         0, LOCATIONS_OPTION },
+  { "define",         required_argument,   0, 'D' },
+  { "force-define",   required_argument,   0, 'F' },
+  { "name-prefix",    required_argument,   0, 'p' },
+  { "no-lines",       no_argument,         0, 'l' },
+  { "token-table",    no_argument,         0, 'k' },
+  { "yacc",           no_argument,         0, 'y' },
+
+  /* Output Files. */
+  { "defines",     optional_argument,   0,   'd' },
+  { "report",      required_argument,   0,   'r' },
   { "report-file", required_argument,   0,   REPORT_FILE_OPTION },
-  { "verbose",	   no_argument,	        0,   'v' },
+  { "verbose",     no_argument,         0,   'v' },
+  { "file-prefix", required_argument,   0,   'b' },
+  { "output",      required_argument,   0,   'o' },
+  { "graph",       optional_argument,   0,   'g' },
+  { "xml",         optional_argument,   0,   'x' },
 
   /* Hidden. */
-  { "trace",         optional_argument,   0,     'T' },
-
-  /* Output.  */
-  { "defines",     optional_argument,   0,   'd' },
-  { "feature",     optional_argument,   0,   'f' },
-
-  /* Operation modes.  */
-  { "fixed-output-files", no_argument,  0,   'y' },
-  { "yacc",	          no_argument,  0,   'y' },
-
-  /* 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' },
-  { "raw",            no_argument,               0,     0 },
-  { "skeleton",       required_argument,         0,   'S' },
-  { "language",       required_argument,         0,   'L' },
-  { "token-table",    no_argument,               0,   'k' },
+  { "fixed-output-files", no_argument,       0,  FIXED_OUTPUT_FILES_OPTION },
+  { "output-file",        required_argument, 0,  'o' },
+  { "trace",              optional_argument, 0,  'T' },
 
   {0, 0, 0, 0}
 };
 
-/* Under DOS, there is no difference on the case.  This can be
-   troublesome when looking for `.tab' etc.  */
-#ifdef MSDOS
-# define AS_FILE_NAME(File) (strlwr (File), (File))
-#else
-# define AS_FILE_NAME(File) (File)
-#endif
-
 /* Build a location for the current command line argument. */
 static
 location
@@ -587,170 +622,238 @@
 {
   location res;
   /* "<command line>" is used in GCC's messages about -D. */
-  boundary_set (&res.start, uniqstr_new ("<command line>"), optind - 1, -1);
+  boundary_set (&res.start, uniqstr_new ("<command line>"), optind - 1, -1, -1);
   res.end = res.start;
   return res;
 }
 
 
+/* Handle the command line options for color support.  Do it early, so
+   that error messages from getargs be also colored as per the user's
+   request.  This is consistent with the way GCC and Clang behave.  */
+
+static void
+getargs_colors (int argc, char *argv[])
+{
+  for (int i = 1; i < argc; i++)
+    {
+      const char *arg = argv[i];
+      if (STRPREFIX_LIT ("--color=", arg))
+        {
+          const char *color = arg + strlen ("--color=");
+          if (STREQ (color, "debug"))
+            color_debug = true;
+          else
+            handle_color_option (color);
+        }
+      else if (STREQ ("--color", arg))
+        handle_color_option (NULL);
+      else if (STRPREFIX_LIT ("--style=", arg))
+        {
+          const char *style = arg + strlen ("--style=");
+          handle_style_option (style);
+        }
+    }
+  complain_init_color ();
+}
+
+
 void
 getargs (int argc, char *argv[])
 {
-  int c;
+  getargs_colors (argc, argv);
 
+  int c;
   while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
-	 != -1)
+         != -1)
+  {
+    location loc = command_line_location ();
     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;
+        /* Certain long options cause getopt_long to return 0.  */
+        break;
 
-      case 'D': /* -DNAME[=VALUE]. */
-      case 'F': /* -FNAME[=VALUE]. */
+      case 'D': /* -DNAME[=(VALUE|"VALUE"|{VALUE})]. */
+      case 'F': /* -FNAME[=(VALUE|"VALUE"|{VALUE})]. */
         {
-          char* name = optarg;
-          char* value = mbschr (optarg, '=');
+          char *name = optarg;
+          char *value = strchr (optarg, '=');
+          muscle_kind kind = muscle_keyword;
           if (value)
-            *value++ = 0;
-          muscle_percent_define_insert (name, command_line_location (),
-                                        value ? value : "",
+            {
+              char *end = value + strlen (value) - 1;
+              *value++ = 0;
+              if (*value == '{' && *end == '}')
+                {
+                  kind = muscle_code;
+                  ++value;
+                  *end = 0;
+                }
+              else if (*value == '"' && *end == '"')
+                {
+                  kind = muscle_string;
+                  ++value;
+                  *end = 0;
+                }
+            }
+          muscle_percent_define_insert (name, loc,
+                                        kind, value ? value : "",
                                         c == 'D' ? MUSCLE_PERCENT_DEFINE_D
                                                  : MUSCLE_PERCENT_DEFINE_F);
         }
-	break;
-
-      case 'I':
-	include = AS_FILE_NAME (optarg);
-	break;
+        break;
 
       case 'L':
-	language_argmatch (optarg, command_line_prio,
-			   command_line_location ());
-	break;
+        language_argmatch (optarg, command_line_prio, loc);
+        break;
 
       case 'S':
-	skeleton_arg (AS_FILE_NAME (optarg), command_line_prio,
-		      command_line_location ());
-	break;
+        skeleton_arg (optarg, command_line_prio, loc);
+        break;
 
       case 'T':
-	FLAGS_ARGMATCH (trace, optarg);
-	break;
+        FLAGS_ARGMATCH (trace, optarg, trace_all);
+        break;
 
       case 'V':
-	version ();
-	exit (EXIT_SUCCESS);
+        version ();
+        exit (EXIT_SUCCESS);
 
       case 'f':
-        FLAGS_ARGMATCH (feature, optarg);
+        FLAGS_ARGMATCH (feature, optarg, feature_all);
         break;
 
       case 'W':
-	FLAGS_ARGMATCH (warnings, optarg);
-	break;
+        warnings_argmatch (optarg);
+        break;
 
       case 'b':
-	spec_file_prefix = AS_FILE_NAME (optarg);
-	break;
+        spec_file_prefix = optarg;
+        break;
 
       case 'd':
         /* 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));
+            free (spec_header_file);
+            spec_header_file = xstrdup (optarg);
           }
         break;
 
       case 'g':
-	graph_flag = true;
-	if (optarg)
+        graph_flag = true;
+        if (optarg)
           {
             free (spec_graph_file);
-            spec_graph_file = xstrdup (AS_FILE_NAME (optarg));
+            spec_graph_file = xstrdup (optarg);
           }
-	break;
+        break;
 
       case 'h':
-	usage (EXIT_SUCCESS);
+        usage (EXIT_SUCCESS);
 
       case 'k':
-	token_table_flag = true;
-	break;
+        token_table_flag = true;
+        break;
 
       case 'l':
-	no_lines_flag = true;
-	break;
+        no_lines_flag = true;
+        break;
 
       case 'o':
-	spec_outfile = AS_FILE_NAME (optarg);
-	break;
+        spec_outfile = optarg;
+        break;
 
       case 'p':
-	spec_name_prefix = optarg;
-	break;
+        spec_name_prefix = optarg;
+        break;
 
       case 'r':
-	FLAGS_ARGMATCH (report, optarg);
-	break;
+        FLAGS_ARGMATCH (report, optarg, report_all);
+        break;
 
       case 't':
-	debug = true;
-	break;
+        muscle_percent_define_insert ("parse.trace",
+                                      loc,
+                                      muscle_keyword, "",
+                                      MUSCLE_PERCENT_DEFINE_D);
+        break;
+
+      case 'u':
+        update_flag = true;
+        feature_flag |= feature_syntax_only;
+        break;
 
       case 'v':
-	report_flag |= report_states;
-	break;
+        report_flag |= report_states;
+        break;
 
       case 'x':
-	xml_flag = true;
-	if (optarg)
+        xml_flag = true;
+        if (optarg)
           {
             free (spec_xml_file);
-            spec_xml_file = xstrdup (AS_FILE_NAME (optarg));
+            spec_xml_file = xstrdup (optarg);
           }
-	break;
+        break;
 
       case 'y':
-	yacc_flag = true;
-	break;
+        warning_argmatch ("yacc", 0, 0);
+        yacc_loc = loc;
+        break;
+
+      case COLOR_OPTION:
+        /* Handled in getargs_colors. */
+        break;
+
+      case FIXED_OUTPUT_FILES_OPTION:
+        complain (&loc, Wdeprecated,
+                  _("deprecated option: %s, use %s"),
+                  quote ("--fixed-output-files"), quote_n (1, "-o y.tab.c"));
+        spec_outfile = "y.tab.c";
+        break;
 
       case LOCATIONS_OPTION:
-	locations_flag = true;
-	break;
+        muscle_percent_define_ensure ("locations", loc, true);
+        break;
 
       case PRINT_LOCALEDIR_OPTION:
-	printf ("%s\n", LOCALEDIR);
-	exit (EXIT_SUCCESS);
+        printf ("%s\n", LOCALEDIR);
+        exit (EXIT_SUCCESS);
 
       case PRINT_DATADIR_OPTION:
-	printf ("%s\n", compute_pkgdatadir ());
-	exit (EXIT_SUCCESS);
+        printf ("%s\n", pkgdatadir ());
+        exit (EXIT_SUCCESS);
 
       case REPORT_FILE_OPTION:
         free (spec_verbose_file);
-	spec_verbose_file = xstrdup (AS_FILE_NAME (optarg));
-	break;
+        spec_verbose_file = xstrdup (optarg);
+        break;
+
+      case STYLE_OPTION:
+        /* Handled in getargs_colors. */
+        break;
 
       default:
-	usage (EXIT_FAILURE);
+        usage (EXIT_FAILURE);
       }
+  }
 
   if (argc - optind != 1)
     {
       if (argc - optind < 1)
-        error (0, 0, _("%s: missing operand"), quotearg_colon (argv[argc - 1]));
+        error (0, 0, _("missing operand"));
       else
         error (0, 0, _("extra operand %s"), quote (argv[optind + 1]));
       usage (EXIT_FAILURE);
     }
 
-  current_file = grammar_file = uniqstr_new (argv[optind]);
+  grammar_file = uniqstr_new (argv[optind]);
   MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
 }
 
diff --git a/src/getargs.h b/src/getargs.h
index b2126fc..ab6af6c 100644
--- a/src/getargs.h
+++ b/src/getargs.h
@@ -1,7 +1,7 @@
 /* Parse command line arguments for bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,7 +21,7 @@
 #ifndef GETARGS_H_
 # define GETARGS_H_
 
-#include "location.h"
+# include "location.h"
 
 enum { command_line_prio, grammar_prio, default_prio };
 
@@ -34,18 +34,14 @@
 /* for -I */
 extern char const *include;
 
-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 token_table_flag;		/* for -k */
-extern bool yacc_flag;			/* for -y */
-
-extern bool error_verbose;
-
-
+extern bool defines_flag;               /* for -d */
+extern bool graph_flag;                 /* for -g */
+extern bool xml_flag;                   /* for -x */
+extern bool no_lines_flag;              /* for -l */
+extern bool token_table_flag;           /* for -k */
+extern location yacc_loc;               /* for -y */
+extern bool update_flag;                /* for -u */
+extern bool color_debug;                /* --color=debug. */
 /* GLR_PARSER is true if the input file says to use the GLR
    (Generalized LR) parser, and to output some additional information
    used by the GLR algorithm.  */
@@ -107,42 +103,29 @@
     trace_m4        = 1 << 10, /**< M4 traces. */
     trace_muscles   = 1 << 11, /**< M4 definitions of the muscles. */
     trace_ielr      = 1 << 12, /**< IELR conversion. */
+    trace_closure   = 1 << 13, /**< Input/output of closure(). */
+    trace_locations = 1 << 14, /**< Full display of locations. */
     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.  */
+    feature_none             = 0,      /**< No additional feature.  */
+    feature_caret            = 1 << 0, /**< Output errors with carets.  */
+    feature_fixit            = 1 << 1, /**< Issue instructions to fix the sources.  */
+    feature_syntax_only      = 1 << 2, /**< Don't generate output.  */
+    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
diff --git a/src/gram.c b/src/gram.c
index 5730e59..ffae27a 100644
--- a/src/gram.c
+++ b/src/gram.c
@@ -1,7 +1,7 @@
 /* Allocate input grammar variables for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2001-2003, 2005-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2001-2003, 2005-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -32,7 +32,7 @@
 /* Comments for these variables are in gram.h.  */
 
 item_number *ritem = NULL;
-unsigned int nritems = 0;
+int nritems = 0;
 
 rule *rules = NULL;
 rule_number nrules = 0;
@@ -46,83 +46,104 @@
 
 int max_user_token_number = 256;
 
+int required_version = 0;
+
+rule const *
+item_rule (item_number const *item)
+{
+  item_number const *sp = item;
+  while (0 <= *sp)
+    ++sp;
+  rule_number r = item_number_as_rule_number (*sp);
+  return &rules[r];
+}
+
+
+void
+item_print (item_number *item, rule const *previous_rule, FILE *out)
+{
+  rule const *r = item_rule (item);
+  rule_lhs_print (r, previous_rule ? previous_rule->lhs : NULL, out);
+
+  for (item_number *sp = r->rhs; sp < item; sp++)
+    fprintf (out, " %s", symbols[*sp]->tag);
+  fputs (" .", out);
+  if (0 <= *r->rhs)
+    for (item_number *sp = item; 0 <= *sp; ++sp)
+      fprintf (out, " %s", symbols[*sp]->tag);
+  else
+    fprintf (out, " %%empty");
+}
+
+
 bool
-rule_useful_in_grammar_p (rule *r)
+rule_useful_in_grammar_p (rule const *r)
 {
   return r->number < nrules;
 }
 
 bool
-rule_useless_in_grammar_p (rule *r)
+rule_useless_in_grammar_p (rule const *r)
 {
   return !rule_useful_in_grammar_p (r);
 }
 
 bool
-rule_useless_in_parser_p (rule *r)
+rule_useless_in_parser_p (rule const *r)
 {
   return !r->useful && rule_useful_in_grammar_p (r);
 }
 
+bool
+rule_useless_chain_p (rule const *r)
+{
+  return rule_rhs_length (r) == 1 && !r->action;
+}
+
 void
-rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out)
+rule_lhs_print (rule const *r, sym_content const *previous_lhs, FILE *out)
 {
   fprintf (out, "  %3d ", r->number);
   if (previous_lhs != r->lhs)
-    {
-      fprintf (out, "%s:", r->lhs->tag);
-    }
+    fprintf (out, "%s:", r->lhs->symbol->tag);
   else
-    {
-      int n;
-      for (n = strlen (previous_lhs->tag); n > 0; --n)
-	fputc (' ', out);
-      fputc ('|', out);
-    }
+    fprintf (out, "%*s|", (int) strlen (previous_lhs->symbol->tag), "");
 }
 
 void
-rule_lhs_print_xml (rule *r, FILE *out, int level)
+rule_lhs_print_xml (rule const *r, FILE *out, int level)
 {
-  xml_printf (out, level, "<lhs>%s</lhs>", r->lhs->tag);
+  xml_printf (out, level, "<lhs>%s</lhs>", r->lhs->symbol->tag);
 }
 
-int
-rule_rhs_length (rule *r)
+size_t
+rule_rhs_length (rule const *r)
 {
-  int res = 0;
-  item_number *rhsp;
-  for (rhsp = r->rhs; *rhsp >= 0; ++rhsp)
+  size_t res = 0;
+  for (item_number *rhsp = r->rhs; 0 <= *rhsp; ++rhsp)
     ++res;
   return res;
 }
 
 void
-rule_rhs_print (rule *r, FILE *out)
+rule_rhs_print (rule const *r, FILE *out)
 {
-  if (*r->rhs >= 0)
-    {
-      item_number *rp;
-      for (rp = r->rhs; *rp >= 0; rp++)
-	fprintf (out, " %s", symbols[*rp]->tag);
-      fputc ('\n', out);
-    }
+  if (0 <= *r->rhs)
+    for (item_number *rhsp = r->rhs; 0 <= *rhsp; ++rhsp)
+      fprintf (out, " %s", symbols[*rhsp]->tag);
   else
-    {
-      fprintf (out, " /* %s */\n", _("empty"));
-    }
+    fputs (" %empty", out);
 }
 
 static void
-rule_rhs_print_xml (rule *r, FILE *out, int level)
+rule_rhs_print_xml (rule const *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));
+      for (item_number *rhsp = r->rhs; 0 <= *rhsp; ++rhsp)
+        xml_printf (out, level + 1, "<symbol>%s</symbol>",
+                    xml_escape (symbols[*rhsp]->tag));
       xml_puts (out, level, "</rhs>");
     }
   else
@@ -134,18 +155,17 @@
 }
 
 void
-rule_print (rule *r, FILE *out)
+rule_print (rule const *r, rule const *prev_rule, FILE *out)
 {
-  fprintf (out, "%s:", r->lhs->tag);
+  rule_lhs_print (r, prev_rule ? prev_rule->lhs : NULL, out);
   rule_rhs_print (r, out);
 }
 
 void
 ritem_print (FILE *out)
 {
-  unsigned int i;
   fputs ("RITEM\n", out);
-  for (i = 0; i < nritems; ++i)
+  for (int i = 0; i < nritems; ++i)
     if (ritem[i] >= 0)
       fprintf (out, "  %s", symbols[ritem[i]]->tag);
     else
@@ -157,13 +177,11 @@
 ritem_longest_rhs (void)
 {
   int max = 0;
-  rule_number r;
-
-  for (r = 0; r < nrules; ++r)
+  for (rule_number r = 0; r < nrules; ++r)
     {
-      int length = rule_rhs_length (&rules[r]);
+      size_t length = rule_rhs_length (&rules[r]);
       if (length > max)
-	max = length;
+        max = length;
     }
 
   return max;
@@ -171,25 +189,24 @@
 
 void
 grammar_rules_partial_print (FILE *out, const char *title,
-			     rule_filter filter)
+                             rule_filter filter)
 {
-  rule_number r;
   bool first = true;
-  symbol *previous_lhs = NULL;
+  rule *previous_rule = NULL;
 
   /* rule # : LHS -> RHS */
-  for (r = 0; r < nrules + nuseless_productions; r++)
+  for (rule_number r = 0; r < nrules + nuseless_productions; r++)
     {
       if (filter && !filter (&rules[r]))
-	continue;
+        continue;
       if (first)
-	fprintf (out, "%s\n\n", title);
-      else if (previous_lhs && previous_lhs != rules[r].lhs)
-	fputc ('\n', out);
+        fprintf (out, "%s\n\n", title);
+      else if (previous_rule && previous_rule->lhs != rules[r].lhs)
+        fputc ('\n', out);
       first = false;
-      rule_lhs_print (&rules[r], previous_lhs, out);
-      rule_rhs_print (&rules[r], out);
-      previous_lhs = rules[r].lhs;
+      rule_print (&rules[r], previous_rule, out);
+      fputc ('\n', out);
+      previous_rule = &rules[r];
     }
   if (!first)
     fputs ("\n\n", out);
@@ -204,28 +221,24 @@
 void
 grammar_rules_print_xml (FILE *out, int level)
 {
-  rule_number r;
   bool first = true;
 
-  for (r = 0; r < nrules + nuseless_productions; r++)
+  for (rule_number r = 0; r < nrules + nuseless_productions; r++)
     {
       if (first)
-	xml_puts (out, level + 1, "<rules>");
+        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";
+        char const *usefulness
+          = rule_useless_in_grammar_p (&rules[r]) ? "useless-in-grammar"
+          : rule_useless_in_parser_p (&rules[r])  ? "useless-in-parser"
+          :                                         "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));
+                   xml_escape (rules[r].precsym->symbol->tag));
         fputs (">\n", out);
       }
       rule_lhs_print_xml (&rules[r], out, level + 3);
@@ -243,83 +256,77 @@
 {
   fprintf (out, "%s\n\n", title);
   fprintf (out,
-	   "ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n",
-	   ntokens, nvars, nsyms, nrules, nritems);
+           "ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n",
+           ntokens, nvars, nsyms, nrules, nritems);
 
-
-  fprintf (out, "Variables\n---------\n\n");
+  fprintf (out, "Tokens\n------\n\n");
   {
-    symbol_number i;
     fprintf (out, "Value  Sprec  Sassoc  Tag\n");
 
-    for (i = ntokens; i < nsyms; i++)
+    for (symbol_number i = 0; i < ntokens; i++)
       fprintf (out, "%5d  %5d   %5d  %s\n",
-	       i,
-	       symbols[i]->prec, symbols[i]->assoc,
-	       symbols[i]->tag);
+               i,
+               symbols[i]->content->prec, symbols[i]->content->assoc,
+               symbols[i]->tag);
+    fprintf (out, "\n\n");
+  }
+
+  fprintf (out, "Non terminals\n-------------\n\n");
+  {
+    fprintf (out, "Value  Tag\n");
+
+    for (symbol_number i = ntokens; i < nsyms; i++)
+      fprintf (out, "%5d  %s\n",
+               i, symbols[i]->tag);
     fprintf (out, "\n\n");
   }
 
   fprintf (out, "Rules\n-----\n\n");
   {
-    rule_number i;
-    fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
-    for (i = 0; i < nrules + nuseless_productions; i++)
+    fprintf (out,
+             "Num (Prec, Assoc, Useful, UselessChain) Lhs"
+             " -> (Ritem Range) Rhs\n");
+    for (rule_number i = 0; i < nrules + nuseless_productions; ++i)
       {
-	rule *rule_i = &rules[i];
-	item_number *rp = NULL;
-	unsigned int rhs_itemno = rule_i->rhs - ritem;
-	unsigned int rhs_count = 0;
-	/* Find the last RHS index in ritems. */
-	for (rp = rule_i->rhs; *rp >= 0; ++rp)
-	  ++rhs_count;
-	fprintf (out, "%3d (%2d, %2d, %2d, %2u-%2u)   %2d ->",
-		 i,
-		 rule_i->prec ? rule_i->prec->prec : 0,
-		 rule_i->prec ? rule_i->prec->assoc : 0,
-		 rule_i->useful,
-		 rhs_itemno,
-		 rhs_itemno + rhs_count - 1,
-		 rule_i->lhs->number);
-	/* Dumped the RHS. */
-	for (rp = rule_i->rhs; *rp >= 0; rp++)
-	  fprintf (out, " %3d", *rp);
-	fprintf (out, "  [%d]\n", item_number_as_rule_number (*rp));
+        rule const *rule_i = &rules[i];
+        int const rhs_itemno = rule_i->rhs - ritem;
+        int length = rule_rhs_length (rule_i);
+        aver (item_number_as_rule_number (rule_i->rhs[length]) == i);
+        fprintf (out, "%3d (%2d, %2d, %2s, %2s)   %2d -> (%2u-%2u)",
+                 i,
+                 rule_i->prec ? rule_i->prec->prec : 0,
+                 rule_i->prec ? rule_i->prec->assoc : 0,
+                 rule_i->useful ? "t" : "f",
+                 rule_useless_chain_p (rule_i) ? "t" : "f",
+                 rule_i->lhs->number,
+                 rhs_itemno, rhs_itemno + length - 1);
+        /* Dumped the RHS. */
+        for (item_number *rhsp = rule_i->rhs; 0 <= *rhsp; ++rhsp)
+          fprintf (out, " %3d", *rhsp);
+        fputc ('\n', out);
       }
   }
   fprintf (out, "\n\n");
 
   fprintf (out, "Rules interpreted\n-----------------\n\n");
-  {
-    rule_number r;
-    for (r = 0; r < nrules + nuseless_productions; r++)
-      {
-	fprintf (out, "%-5d  ", r);
-	rule_print (&rules[r], out);
-      }
-  }
+  for (rule_number r = 0; r < nrules + nuseless_productions; ++r)
+    {
+      fprintf (out, "%-5d  %s:", r, rules[r].lhs->symbol->tag);
+      rule_rhs_print (&rules[r], out);
+      fputc ('\n', out);
+    }
   fprintf (out, "\n\n");
 }
 
 void
 grammar_rules_useless_report (const char *message)
 {
-  rule_number r;
-  for (r = 0; r < nrules ; ++r)
-    if (!rules[r].useful)
-      {
-        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);
-              }
-          }
-      }
+  for (rule_number r = 0; r < nrules; ++r)
+    /* Don't complain about rules whose LHS is useless, we already
+       complained about it.  */
+    if (!reduce_nonterminal_useless_in_grammar (rules[r].lhs)
+        && !rules[r].useful)
+      complain (&rules[r].location, Wother, "%s", message);
 }
 
 void
diff --git a/src/gram.h b/src/gram.h
index 3f75dd8..0f9ce3b 100644
--- a/src/gram.h
+++ b/src/gram.h
@@ -1,7 +1,7 @@
 /* Data definitions for internal representation of Bison's input.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2001-2007, 2009-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2001-2007, 2009-2015, 2018-2019
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -35,7 +35,7 @@
 
    The rules receive rule numbers 1 to NRULES in the order they are
    written.  More precisely Bison augments the grammar with the
-   initial rule, `$accept: START-SYMBOL $end', which is numbered 1,
+   initial rule, '$accept: START-SYMBOL $end', which is numbered 1,
    all the user rules are 2, 3 etc.  Each time a rule number is
    presented to the user, we subtract 1, so *displayed* rule numbers
    are 0, 1, 2...
@@ -61,7 +61,7 @@
    RULES[R].prec -- the symbol providing the precedence level of R.
 
    RULES[R].precsym -- the symbol attached (via %prec) to give its
-   precedence to R.  Of course, if set, it is equal to `prec', but we
+   precedence to R.  Of course, if set, it is equal to 'prec', but we
    need to distinguish one from the other when reducing: a symbol used
    in a %prec is not useless.
 
@@ -75,7 +75,7 @@
 
    RULES[R].line -- the line where R was defined.
 
-   RULES[R].useful -- true iff the rule is used (i.e., false if thrown
+   RULES[R].useful -- whether the rule is used (i.e., false if thrown
    away by reduce).
 
    The right hand side is stored as symbol numbers in a portion of
@@ -105,17 +105,17 @@
 # include "location.h"
 # include "symtab.h"
 
-# define ISTOKEN(i)	((i) < ntokens)
-# define ISVAR(i)	((i) >= ntokens)
+# define ISTOKEN(i)     ((i) < ntokens)
+# define ISVAR(i)       ((i) >= ntokens)
 
 extern int nsyms;
 extern int ntokens;
 extern int nvars;
 
 typedef int item_number;
-#define ITEM_NUMBER_MAX INT_MAX
+# define ITEM_NUMBER_MAX INT_MAX
 extern item_number *ritem;
-extern unsigned int nritems;
+extern int nritems;
 
 /* There is weird relationship between OT1H item_number and OTOH
    symbol_number and rule_number: we store the latter in
@@ -145,8 +145,7 @@
 
 /* Rule numbers.  */
 typedef int rule_number;
-#define RULE_NUMBER_MAX INT_MAX
-extern rule_number nrules;
+# define RULE_NUMBER_MAX INT_MAX
 
 static inline item_number
 rule_number_as_item_number (rule_number r)
@@ -166,6 +165,7 @@
   return i < 0;
 }
 
+
 /*--------.
 | Rules.  |
 `--------*/
@@ -180,57 +180,79 @@
      except if some rules are useless.  */
   rule_number number;
 
-  symbol *lhs;
+  sym_content *lhs;
   item_number *rhs;
 
   /* This symbol provides both the associativity, and the precedence. */
-  symbol *prec;
+  sym_content *prec;
 
   int dprec;
   int merger;
 
   /* This symbol was attached to the rule via %prec. */
-  symbol *precsym;
+  sym_content *precsym;
 
+  /* Location of the rhs.  */
   location location;
   bool useful;
+  bool is_predicate;
+
+  /* Counts of the numbers of expected conflicts for this rule, or -1 if none
+     given. */
+  int expected_sr_conflicts;
+  int expected_rr_conflicts;
 
   const char *action;
-  location action_location;
+  location action_loc;
 } rule;
 
+/* The used rules (size NRULES).  */
 extern rule *rules;
+extern rule_number nrules;
+
+/* Get the rule associated to this item.  ITEM points inside RITEM.  */
+rule const *item_rule (item_number const *item);
+
+/* Pretty-print this ITEM (as in the report).  ITEM points inside
+   RITEM.  PREVIOUS_RULE is used to see if the lhs is common, in which
+   case LHS is factored.  Passing NULL is fine.  */
+void item_print (item_number *item, rule const *previous_rule,
+                 FILE *out);
 
 /* A function that selects a rule.  */
-typedef bool (*rule_filter) (rule *);
+typedef bool (*rule_filter) (rule const *);
 
-/* 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);
+/* Whether the rule has a 'number' smaller than NRULES.  That is, it
+   is useful in the grammar.  */
+bool rule_useful_in_grammar_p (rule const *r);
 
-/* Return true IFF the rule has a `number' higher than NRULES.  That is, it is
+/* Whether the rule has a 'number' higher than NRULES.  That is, it is
    useless in the grammar.  */
-bool rule_useless_in_grammar_p (rule *r);
+bool rule_useless_in_grammar_p (rule const *r);
 
-/* Return true IFF the rule is not flagged as useful but is useful in the
+/* Whether 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);
+bool rule_useless_in_parser_p (rule const *r);
+
+/* Whether the rule has a single RHS, and no user action. */
+bool rule_useless_chain_p (rule const *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);
+void rule_lhs_print (rule const *r, sym_content const *previous_lhs,
+                     FILE *out);
+void rule_lhs_print_xml (rule const *r, FILE *out, int level);
 
-/* Return the length of the RHS.  */
-int rule_rhs_length (rule *r);
+/* The length of the RHS.  */
+size_t rule_rhs_length (rule const *r);
 
 /* Print this rule's RHS on OUT.  */
-void rule_rhs_print (rule *r, FILE *out);
+void rule_rhs_print (rule const *r, FILE *out);
 
-/* Print this rule on OUT.  */
-void rule_print (rule *r, FILE *out);
-
+/* Print this rule on OUT.  If a PREVIOUS_RULE was already displayed,
+   avoid useless repetitions of their LHS. */
+void rule_print (rule const *r, rule const *prev_rule, FILE *out);
 
 
 
@@ -248,12 +270,12 @@
 /* Dump RITEM for traces. */
 void ritem_print (FILE *out);
 
-/* Return the size of the longest rule RHS.  */
+/* The size of the longest rule RHS.  */
 size_t ritem_longest_rhs (void);
 
 /* 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);
+                                  rule_filter filter);
 
 /* Print the grammar's useful rules on OUT.  */
 void grammar_rules_print (FILE *out);
@@ -264,12 +286,16 @@
 void grammar_dump (FILE *out, const char *title);
 
 /* Report on STDERR the rules that are not flagged USEFUL, using the
-   MESSAGE (which can be `rule useless in grammar' when invoked after grammar
-   reduction, or `rule useless in parser due to conflicts' after conflicts
+   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);
 
+/* The version %required by the grammar file, as an int (100 * major +
+   minor).  0 if unspecified.  */
+extern int required_version;
+
 #endif /* !GRAM_H_ */
diff --git a/src/graphviz.c b/src/graphviz.c
index 9da5f6e..4a826cb 100644
--- a/src/graphviz.c
+++ b/src/graphviz.c
@@ -1,6 +1,7 @@
 /* Output Graphviz specification of a state machine generated by Bison.
 
-   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -86,14 +87,16 @@
 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)
+  {
+    int n;
+    FOR_EACH_SHIFT (s->transitions, n)
+      bitset_set (*no_reduce_set, TRANSITION_SYMBOL (s->transitions, n));
+  }
+  for (int n = 0; n < s->errs->num; ++n)
     if (s->errs->symbols[n])
-      bitset_set (*no_reduce_set, s->errs->symbols[n]->number);
+      bitset_set (*no_reduce_set, s->errs->symbols[n]->content->number);
 }
 
 static void
@@ -113,8 +116,8 @@
          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);
+      fprintf (fout, "  %d -> \"%dR%d%s\" [",
+               source, source, ruleno, ed);
 
       /* (The lookahead tokens have been added to the beginning of the
          obstack, in the caller function.) */
@@ -144,11 +147,9 @@
 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);
+  obstack_sgrow (out, escape (tok));
   return false;
 }
 
@@ -156,8 +157,10 @@
 output_red (state const *s, reductions const *reds, FILE *fout)
 {
   bitset no_reduce_set;
-  int j;
-  int source = s->number;
+  no_reduce_bitset_init (s, &no_reduce_set);
+
+  rule *default_reduction
+    = yydefact[s->number] ? &rules[yydefact[s->number] - 1] : NULL;
 
   /* Two obstacks are needed: one for the enabled reductions, and one
      for the disabled reductions, because in the end we want two
@@ -165,42 +168,33 @@
      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)
+  const int source = s->number;
+  for (int j = 0; j < reds->num; ++j)
     {
-      bool defaulted = false;
+      bool defaulted = default_reduction && default_reduction == reds->rules[j];
+
+      /* Build the lookahead tokens lists, one for enabled transitions
+         and one for disabled transitions. */
       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);
-                  }
-              }
-        }
+        for (int 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);
diff --git a/src/graphviz.h b/src/graphviz.h
index 239cdd2..cceb1fb 100644
--- a/src/graphviz.h
+++ b/src/graphviz.h
@@ -1,6 +1,7 @@
 /* Output Graphviz specification of a state machine generated by Bison.
 
-   Copyright (C) 2006, 2010-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2010-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,7 +23,7 @@
 #ifndef GRAPHVIZ_H_
 # define GRAPHVIZ_H_
 
-#include "state.h"
+# include "state.h"
 
 /** Begin a Dot graph.
  *
diff --git a/src/ielr.c b/src/ielr.c
index e6aa6f5..24f6088 100644
--- a/src/ielr.c
+++ b/src/ielr.c
@@ -1,6 +1,6 @@
 /* IELR main implementation.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -36,7 +36,36 @@
 #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;
+typedef enum
+  {
+   LR_TYPE__LR0,
+   LR_TYPE__LALR,
+   LR_TYPE__IELR,
+   LR_TYPE__CANONICAL_LR
+  } LrType;
+
+/* The user's requested LR type.  */
+static LrType
+lr_type_get (void)
+{
+  char *type = muscle_percent_define_get ("lr.type");
+  LrType res;
+  if (STREQ (type, "lr""(0)"))
+    res = LR_TYPE__LR0;
+  else if (STREQ (type, "lalr"))
+    res = LR_TYPE__LALR;
+  else if (STREQ (type, "ielr"))
+    res = LR_TYPE__IELR;
+  else if (STREQ (type, "canonical-lr"))
+    res = LR_TYPE__CANONICAL_LR;
+  else
+    {
+      aver (false);
+      abort ();
+    }
+  free (type);
+  return res;
+}
 
 /**
  * \post:
@@ -49,8 +78,8 @@
 ielr_compute_ritem_sees_lookahead_set (void)
 {
   bitset result = bitset_create (nritems, BITSET_FIXED);
-  unsigned int i = nritems-1;
-  while (i>0)
+  int i = nritems-1;
+  while (0 < i)
     {
       --i;
       while (!item_number_is_rule_number (ritem[i])
@@ -59,7 +88,7 @@
         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)
+      while (!item_number_is_rule_number (ritem[i]) && 0 < i)
         --i;
     }
   if (trace_flag & trace_ielr)
@@ -101,16 +130,14 @@
   *edge_countsp = xnmalloc (ngotos, sizeof **edge_countsp);
   {
     bitset sources = bitset_create (ngotos, BITSET_FIXED);
-    goto_number i;
-    for (i = 0; i < ngotos; ++i)
+    for (goto_number i = 0; i < ngotos; ++i)
       (*edge_countsp)[i] = 0;
-    for (i = 0; i < ngotos; ++i)
+    for (goto_number i = 0; i < ngotos; ++i)
       {
         int nsources = 0;
         {
-          rule **rulep;
-          for (rulep = derives[states[to_state[i]]->accessing_symbol
-                               - ntokens];
+          for (rule **rulep = derives[states[to_state[i]]->accessing_symbol
+                                      - ntokens];
                *rulep;
                ++rulep)
             {
@@ -169,10 +196,7 @@
   relation_transpose (edgesp, ngotos);
 
   if (trace_flag & trace_ielr)
-    {
-      fprintf (stderr, "internal_follow_edges:\n");
-      relation_print (*edgesp, ngotos, stderr);
-    }
+    relation_print ("internal_follow_edges", *edgesp, ngotos, NULL, stderr);
 }
 
 /**
@@ -198,31 +222,26 @@
 {
   {
     size_t max_nitems = 0;
-    state_number i;
-    for (i = 0; i < nstates; ++i)
+    for (state_number 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);
+  for (goto_number i = 0; i < ngotos; ++i)
+    {
+      size_t nitems = states[from_state[i]]->nitems;
+      item_number *items = states[from_state[i]]->items;
+      for (size_t 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)
     {
@@ -252,8 +271,7 @@
   *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)
+    for (goto_number i = 0; i < ngotos; ++i)
       {
         goto_number nedges = edge_counts[i];
         {
@@ -279,12 +297,11 @@
       }
     free (edge_array);
   }
-  relation_digraph (*edgesp, ngotos, always_followsp);
+  relation_digraph (*edgesp, ngotos, *always_followsp);
 
   if (trace_flag & trace_ielr)
     {
-      fprintf (stderr, "always follow edges:\n");
-      relation_print (*edgesp, ngotos, stderr);
+      relation_print ("always follow edges", *edgesp, ngotos, NULL, stderr);
       fprintf (stderr, "always_follows:\n");
       debug_bitsetv (*always_followsp);
     }
@@ -300,32 +317,25 @@
 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)
+  for (state_number 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)
+  for (state_number i = 0; i < nstates; ++i)
+    for (int j = 0; j < states[i]->transitions->num; ++j)
+      ++predecessor_counts[states[i]->transitions->states[j]->number];
+  for (state_number 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];
-        }
-    }
+  for (state_number i = 0; i < nstates; ++i)
+    for (int 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;
 }
@@ -354,11 +364,8 @@
     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]);
-  }
+  for (int i = 0; i < ngotos; ++i)
+    free (edges[i]);
   free (edges);
   free (edge_counts);
   if (predecessorsp)
@@ -381,10 +388,9 @@
 {
   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)
+      for (size_t i = 0; i < s->nitems; ++i)
         item_lookahead_sets[s->number][i] = NULL;
     }
   if (!item_lookahead_sets[s->number][item])
@@ -412,20 +418,19 @@
              top-level invocation), go get it.  */
           if (!lhs)
             {
-              unsigned int i;
+              int i;
               for (i = s->items[item];
                    !item_number_is_rule_number (ritem[i]);
                    ++i)
-                ;
+                continue;
               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];
+              aver (lhs != accept->content->number);
+              for (state **predecessor = predecessors[s->number];
                    *predecessor;
                    ++predecessor)
                 bitset_or (item_lookahead_sets[s->number][item],
@@ -437,8 +442,7 @@
              predecessor items' lookahead sets.  */
           else
             {
-              state **predecessor;
-              for (predecessor = predecessors[s->number];
+              for (state **predecessor = predecessors[s->number];
                    *predecessor;
                    ++predecessor)
                 {
@@ -492,12 +496,11 @@
   AnnotationIndex *annotation_counts =
     xnmalloc (nstates, sizeof *annotation_counts);
   ContributionIndex max_contributions = 0;
-  unsigned int total_annotations = 0;
-  state_number i;
+  int total_annotations = 0;
 
   *inadequacy_listsp = xnmalloc (nstates, sizeof **inadequacy_listsp);
   *annotation_listsp = xnmalloc (nstates, sizeof **annotation_listsp);
-  for (i = 0; i < nstates; ++i)
+  for (state_number i = 0; i < nstates; ++i)
     {
       item_lookahead_sets[i] = NULL;
       (*inadequacy_listsp)[i] = NULL;
@@ -506,7 +509,7 @@
     }
   {
     InadequacyListNodeCount inadequacy_list_node_count = 0;
-    for (i = 0; i < nstates; ++i)
+    for (state_number i = 0; i < nstates; ++i)
       AnnotationList__compute_from_inadequacies (
         states[i], follow_kernel_items, always_follows, predecessors,
         item_lookahead_sets, *inadequacy_listsp, *annotation_listsp,
@@ -514,7 +517,7 @@
         &inadequacy_list_node_count);
   }
   *max_annotationsp = 0;
-  for (i = 0; i < nstates; ++i)
+  for (state_number i = 0; i < nstates; ++i)
     {
       if (annotation_counts[i] > *max_annotationsp)
         *max_annotationsp = annotation_counts[i];
@@ -522,7 +525,7 @@
     }
   if (trace_flag & trace_ielr)
     {
-      for (i = 0; i < nstates; ++i)
+      for (state_number i = 0; i < nstates; ++i)
         {
           fprintf (stderr, "Inadequacy annotations for state %d:\n", i);
           AnnotationList__debug ((*annotation_listsp)[i],
@@ -536,11 +539,10 @@
       fprintf (stderr, "Max number of contributions per annotation: %d\n",
                max_contributions);
     }
-  for (i = 0; i < nstates; ++i)
+  for (state_number i = 0; i < nstates; ++i)
     if (item_lookahead_sets[i])
       {
-        size_t j;
-        for (j = 0; j < states[i]->nitems; ++j)
+        for (size_t 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]);
@@ -549,7 +551,8 @@
   free (annotation_counts);
 }
 
-typedef struct state_list {
+typedef struct state_list
+{
   struct state_list *next;
   state *state;
   /** Has this state been recomputed as a successor of another state?  */
@@ -562,7 +565,7 @@
   /**
    * 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.
+   * lr0.c is lr0Isocore.
    */
   struct state_list *lr0Isocore;
   struct state_list *nextIsocore;
@@ -580,7 +583,7 @@
 static void
 ielr_compute_goto_follow_set (bitsetv follow_kernel_items,
                               bitsetv always_follows, state_list *s,
-                              symbol *n, bitset follow_set)
+                              sym_content *n, bitset follow_set)
 {
   goto_number n_goto = map_goto (s->lr0Isocore->state->number, n->number);
   bitset_copy (follow_set, always_follows[n_goto]);
@@ -615,9 +618,8 @@
                          bitsetv lookaheads)
 {
   size_t s_item = 0;
-  size_t t_item;
   bitsetv_zero (lookaheads);
-  for (t_item = 0; t_item < t->nitems; ++t_item)
+  for (size_t 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
@@ -631,7 +633,7 @@
         {
           if (item_number_is_rule_number (ritem[t->items[t_item] - 2]))
             {
-              unsigned int rule_item;
+              int rule_item;
               for (rule_item = t->items[t_item];
                    !item_number_is_rule_number (ritem[rule_item]);
                    ++rule_item)
@@ -703,7 +705,6 @@
 {
   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.  */
@@ -770,16 +771,13 @@
       }
   }
 
-  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;
-        }
-  }
+  bool has_lookaheads = false;
+  for (size_t 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)
@@ -822,11 +820,10 @@
         (*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)
+          for (int 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
@@ -918,10 +915,9 @@
       (*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)
+          for (size_t i = 0; i < t->nitems; ++i)
             {
               if (bitset_empty_p (lookaheads[i]))
                 (*last_statep)->lookaheads[i] = NULL;
@@ -953,7 +949,7 @@
  *     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 in all states.  tv_ielr_phase4 was pushed while they were
  *     computed from item lookahead sets.
  */
 static void
@@ -969,9 +965,8 @@
   /* 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)
+    for (state_number i = 0; i < nstates; ++i)
       {
         *nodep = states[i]->state_list = last_state = xmalloc (sizeof **nodep);
         (*nodep)->state = states[i];
@@ -993,12 +988,12 @@
   /* 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)
+    for (state_list *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)
+        for (int i = 0; i < s->transitions->num; ++i)
           {
             state *t = s->transitions->states[i];
             if (annotation_lists)
@@ -1022,26 +1017,21 @@
 
   /* 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;
-  }
+  for (state_list *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);
+      timevar_push (tv_ielr_phase4);
       initialize_LA ();
-      state_list *node;
-      for (node = first_state; node; node = node->next)
+      for (state_list *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)
+            for (size_t r = 0; r < node->state->reductions->num; ++r)
               {
                 rule *this_rule = node->state->reductions->rules[r];
                 bitset lookahead_set =
@@ -1067,7 +1057,7 @@
                   }
               }
           }
-      timevar_pop (TV_IELR_PHASE4);
+      timevar_pop (tv_ielr_phase4);
     }
 
   /* Free state list.  */
@@ -1076,8 +1066,7 @@
       state_list *node = first_state;
       if (node->lookaheads)
         {
-          size_t i;
-          for (i = 0; i < node->state->nitems; ++i)
+          for (size_t i = 0; i < node->state->nitems; ++i)
             if (node->lookaheads[i])
               bitset_free (node->lookaheads[i]);
           free (node->lookaheads);
@@ -1087,38 +1076,40 @@
     }
 }
 
+
 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);
-  }
+  LrType lr_type = lr_type_get ();
 
   /* 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)
+  switch (lr_type)
     {
-      bitsetv_free (goto_follows);
-      timevar_pop (TV_LALR);
+    case LR_TYPE__LR0:
+      timevar_push (tv_lalr);
+      set_goto_map ();
+      timevar_pop (tv_lalr);
       return;
+
+    case LR_TYPE__CANONICAL_LR:
+      timevar_push (tv_lalr);
+      set_goto_map ();
+      timevar_pop (tv_lalr);
+      break;
+
+    case LR_TYPE__LALR:
+      timevar_push (tv_lalr);
+      lalr ();
+      bitsetv_free (goto_follows);
+      timevar_pop (tv_lalr);
+      return;
+
+    case LR_TYPE__IELR:
+      timevar_push (tv_lalr);
+      lalr ();
+      timevar_pop (tv_lalr);
+      break;
     }
-  timevar_pop (TV_LALR);
 
   {
     bitsetv follow_kernel_items;
@@ -1131,14 +1122,14 @@
     {
       /* Phase 1: Compute Auxiliary Tables.  */
       state ***predecessors;
-      timevar_push (TV_IELR_PHASE1);
+      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);
+      timevar_pop (tv_ielr_phase1);
 
       /* Phase 2: Compute Annotations.  */
-      timevar_push (TV_IELR_PHASE2);
+      timevar_push (tv_ielr_phase2);
       if (lr_type != LR_TYPE__CANONICAL_LR)
         {
           obstack_init (&annotations_obstack);
@@ -1146,30 +1137,24 @@
                                          predecessors, &max_annotations,
                                          &inadequacy_lists, &annotation_lists,
                                          &annotations_obstack);
-          {
-            state_number i;
-            for (i = 0; i < nstates; ++i)
-              free (predecessors[i]);
-          }
+          for (state_number i = 0; i < nstates; ++i)
+            free (predecessors[i]);
           free (predecessors);
           bitsetv_free (goto_follows);
           lalr_free ();
         }
-      timevar_pop (TV_IELR_PHASE2);
+      timevar_pop (tv_ielr_phase2);
     }
 
     /* Phase 3: Split States.  */
-    timevar_push (TV_IELR_PHASE3);
+    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]);
-        }
+        for (state_number i = 0; i < nstates_lr0; ++i)
+          InadequacyList__delete (inadequacy_lists[i]);
     }
     free (inadequacy_lists);
     if (annotation_lists)
@@ -1177,11 +1162,11 @@
     free (annotation_lists);
     bitsetv_free (follow_kernel_items);
     bitsetv_free (always_follows);
-    timevar_pop (TV_IELR_PHASE3);
+    timevar_pop (tv_ielr_phase3);
   }
 
   /* Phase 4: Compute Reduction Lookaheads.  */
-  timevar_push (TV_IELR_PHASE4);
+  timevar_push (tv_ielr_phase4);
   free (goto_map);
   free (from_state);
   free (to_state);
@@ -1196,5 +1181,5 @@
       lalr ();
       bitsetv_free (goto_follows);
     }
-  timevar_pop (TV_IELR_PHASE4);
+  timevar_pop (tv_ielr_phase4);
 }
diff --git a/src/ielr.h b/src/ielr.h
index 7b22380..17dcb2c 100644
--- a/src/ielr.h
+++ b/src/ielr.h
@@ -1,6 +1,6 @@
 /* IELR main implementation.
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,9 +20,9 @@
 #ifndef IELR_H_
 # define IELR_H_
 
-#include <bitset.h>
+# include <bitset.h>
 
-#include "state.h"
+# include "state.h"
 
 /**
  * \pre
diff --git a/src/lalr.c b/src/lalr.c
index 9866154..bb9491e 100644
--- a/src/lalr.c
+++ b/src/lalr.c
@@ -1,7 +1,7 @@
 /* Compute lookahead criteria for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2000-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 1984, 1986, 1989, 2000-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -28,22 +28,23 @@
 #include <bitset.h>
 #include <bitsetv.h>
 
-#include "LR0.h"
 #include "complain.h"
 #include "derives.h"
 #include "getargs.h"
 #include "gram.h"
 #include "lalr.h"
+#include "lr0.h"
 #include "muscle-tab.h"
 #include "nullable.h"
 #include "reader.h"
 #include "relation.h"
 #include "symtab.h"
 
-goto_number *goto_map;
-goto_number ngotos;
-state_number *from_state;
-state_number *to_state;
+/* goto_map[nterm - NTOKENS] -> number of gotos.  */
+goto_number *goto_map = NULL;
+goto_number ngotos = 0;
+state_number *from_state = NULL;
+state_number *to_state = NULL;
 bitsetv goto_follows = NULL;
 
 /* Linked list of goto numbers.  */
@@ -53,8 +54,16 @@
   goto_number value;
 } goto_list;
 
+static goto_list *
+goto_list_new (goto_number value, struct goto_list *next)
+{
+  goto_list *res = xmalloc (sizeof *res);
+  res->next = next;
+  res->value = value;
+  return res;
+}
 
-/* LA is an NLA 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.  */
@@ -63,47 +72,57 @@
 size_t nLA;
 
 
+/* "(p, A) includes (p', B)" iff
+   B → βAγ, γ nullable, and p'-- β --> p (i.e., state p' reaches p on label β).
+
+   Definition p.621 [DeRemer 1982].
+
+   INCLUDES[(p, A)] = [(p', B),...] */
 static goto_number **includes;
+
+/* "(q, A → ω) lookback (p, A)" iff state p reaches state q on label ω.
+
+   Definition p.621 [DeRemer 1982]. */
 static goto_list **lookback;
 
-
-
+static void
+goto_print (goto_number i, FILE *out)
+{
+  const state_number src = from_state[i];
+  const state_number dst = to_state[i];
+  symbol_number var = states[dst]->accessing_symbol;
+  fprintf (out,
+           "goto[%ld] = (%d, %s, %d)", i, src, symbols[var]->tag, dst);
+}
 
 void
 set_goto_map (void)
 {
-  state_number s;
-  goto_number *temp_map;
-
+  /* Count the number of gotos (ngotos) per nterm (goto_map). */
   goto_map = xcalloc (nvars + 1, sizeof *goto_map);
-  temp_map = xnmalloc (nvars + 1, sizeof *temp_map);
-
   ngotos = 0;
-  for (s = 0; s < nstates; ++s)
+  for (state_number s = 0; s < nstates; ++s)
     {
-      transitions *sp = states[s]->transitions;
-      int i;
-      for (i = sp->num - 1; i >= 0 && TRANSITION_IS_GOTO (sp, i); --i)
-	{
-	  ngotos++;
-
-	  /* Abort if (ngotos + 1) would overflow.  */
-	  aver (ngotos != GOTO_NUMBER_MAXIMUM);
-
-	  goto_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
-	}
+      transitions *trans = states[s]->transitions;
+      for (int i = trans->num - 1; 0 <= i && TRANSITION_IS_GOTO (trans, i); --i)
+        {
+          ngotos++;
+          /* Abort if (ngotos + 1) would overflow.  */
+          aver (ngotos != GOTO_NUMBER_MAXIMUM);
+          goto_map[TRANSITION_SYMBOL (trans, i) - ntokens]++;
+        }
     }
 
+  goto_number *temp_map = xnmalloc (nvars + 1, sizeof *temp_map);
   {
     goto_number k = 0;
-    int i;
-    for (i = ntokens; i < nsyms; i++)
+    for (symbol_number i = ntokens; i < nsyms; ++i)
       {
-	temp_map[i - ntokens] = k;
-	k += goto_map[i - ntokens];
+        temp_map[i - ntokens] = k;
+        k += goto_map[i - ntokens];
       }
 
-    for (i = ntokens; i < nsyms; i++)
+    for (symbol_number i = ntokens; i < nsyms; ++i)
       goto_map[i - ntokens] = temp_map[i - ntokens];
 
     goto_map[nsyms - ntokens] = ngotos;
@@ -113,191 +132,290 @@
   from_state = xcalloc (ngotos, sizeof *from_state);
   to_state = xcalloc (ngotos, sizeof *to_state);
 
-  for (s = 0; s < nstates; ++s)
+  for (state_number s = 0; s < nstates; ++s)
     {
-      transitions *sp = states[s]->transitions;
-      int i;
-      for (i = sp->num - 1; i >= 0 && TRANSITION_IS_GOTO (sp, i); --i)
-	{
-	  goto_number k = temp_map[TRANSITION_SYMBOL (sp, i) - ntokens]++;
-	  from_state[k] = s;
-	  to_state[k] = sp->states[i]->number;
-	}
+      const transitions *trans = states[s]->transitions;
+      for (int i = trans->num - 1; 0 <= i && TRANSITION_IS_GOTO (trans, i); --i)
+        {
+          goto_number k = temp_map[TRANSITION_SYMBOL (trans, i) - ntokens]++;
+          from_state[k] = s;
+          to_state[k] = trans->states[i]->number;
+        }
     }
 
   free (temp_map);
+
+  if (trace_flag & trace_automaton)
+    for (int i = 0; i < ngotos; ++i)
+      {
+        goto_print (i, stderr);
+        fputc ('\n', stderr);
+      }
 }
 
 
 goto_number
-map_goto (state_number s0, symbol_number sym)
+map_goto (state_number src, symbol_number sym)
 {
-  goto_number high;
-  goto_number low;
-  goto_number middle;
-  state_number s;
-
-  low = goto_map[sym - ntokens];
-  high = goto_map[sym - ntokens + 1] - 1;
+  goto_number low = goto_map[sym - ntokens];
+  goto_number high = goto_map[sym - ntokens + 1] - 1;
 
   for (;;)
     {
       aver (low <= high);
-      middle = (low + high) / 2;
-      s = from_state[middle];
-      if (s == s0)
-	return middle;
-      else if (s < s0)
-	low = middle + 1;
+      goto_number middle = (low + high) / 2;
+      state_number s = from_state[middle];
+      if (s == src)
+        return middle;
+      else if (s < src)
+        low = middle + 1;
       else
-	high = middle - 1;
+        high = middle - 1;
     }
 }
 
-
+/* Print FOLLOWS for debugging.  */
 static void
-initialize_F (void)
+follows_print (const char* title, FILE *out)
+{
+  fprintf (out, "%s:\n", title);
+  for (goto_number i = 0; i < ngotos; ++i)
+    {
+      fputs ("    FOLLOWS[", out);
+      goto_print (i, out);
+      fputs ("] =", out);
+      bitset_iterator iter;
+      symbol_number sym;
+      BITSET_FOR_EACH (iter, goto_follows[i], sym, 0)
+        fprintf (out, " %s", symbols[sym]->tag);
+      fputc ('\n', out);
+    }
+  fputc ('\n', out);
+}
+
+/* Build goto_follows. */
+static void
+initialize_goto_follows (void)
 {
   goto_number **reads = xnmalloc (ngotos, sizeof *reads);
-  goto_number *edge = xnmalloc (ngotos + 1, sizeof *edge);
-  goto_number nedges = 0;
-
-  goto_number i;
+  goto_number *edge = xnmalloc (ngotos, sizeof *edge);
 
   goto_follows = bitsetv_create (ngotos, ntokens, BITSET_FIXED);
 
-  for (i = 0; i < ngotos; i++)
+  for (goto_number i = 0; i < ngotos; ++i)
     {
-      state_number stateno = to_state[i];
-      transitions *sp = states[stateno]->transitions;
+      state_number dst = to_state[i];
+      const transitions *trans = states[dst]->transitions;
 
       int j;
-      FOR_EACH_SHIFT (sp, j)
-	bitset_set (goto_follows[i], TRANSITION_SYMBOL (sp, j));
+      FOR_EACH_SHIFT (trans, j)
+        bitset_set (goto_follows[i], TRANSITION_SYMBOL (trans, j));
 
-      for (; j < sp->num; j++)
-	{
-	  symbol_number sym = TRANSITION_SYMBOL (sp, j);
-	  if (nullable[sym - ntokens])
-	    edge[nedges++] = map_goto (stateno, sym);
-	}
+      /* Gotos outgoing from DST. */
+      goto_number nedges = 0;
+      for (; j < trans->num; ++j)
+        {
+          symbol_number sym = TRANSITION_SYMBOL (trans, j);
+          if (nullable[sym - ntokens])
+            {
+              assert (nedges < ngotos);
+              edge[nedges++] = map_goto (dst, sym);
+            }
+        }
 
       if (nedges == 0)
-	reads[i] = NULL;
+        reads[i] = NULL;
       else
-	{
-	  reads[i] = xnmalloc (nedges + 1, sizeof reads[i][0]);
-	  memcpy (reads[i], edge, nedges * sizeof edge[0]);
-	  reads[i][nedges] = END_NODE;
-	  nedges = 0;
-	}
+        {
+          reads[i] = xnmalloc (nedges + 1, sizeof reads[i][0]);
+          memcpy (reads[i], edge, nedges * sizeof edge[0]);
+          reads[i][nedges] = END_NODE;
+        }
+    }
+  if (trace_flag & trace_automaton)
+    {
+      follows_print ("follows after shifts", stderr);
+      relation_print ("reads", reads, ngotos, goto_print, stderr);
     }
 
-  relation_digraph (reads, ngotos, &goto_follows);
+  relation_digraph (reads, ngotos, goto_follows);
+  if (trace_flag & trace_automaton)
+    follows_print ("follows after read", stderr);
 
-  for (i = 0; i < ngotos; i++)
+  for (goto_number i = 0; i < ngotos; ++i)
     free (reads[i]);
-
   free (reads);
   free (edge);
 }
 
 
+/* Find the state which LOOKBACK[LOOKBACK_INDEX] is about.  */
+static const state *
+lookback_find_state (int lookback_index)
+{
+  state *res = NULL;
+  for (int j = 0; j < nstates; ++j)
+    if (states[j]->reductions
+        && states[j]->reductions->lookahead_tokens)
+      {
+        if (states[j]->reductions->lookahead_tokens - LA > lookback_index)
+          /* Went too far. */
+          break;
+        else
+          res = states[j];
+      }
+  /* Pacify "potential null pointer dereference" warning.  */
+  if (!res)
+    abort ();
+  return res;
+}
+
+/* Print LOOKBACK for debugging.  */
 static void
-add_lookback_edge (state *s, rule *r, goto_number gotono)
+lookback_print (FILE *out)
+{
+  fputs ("lookback:\n", out);
+  for (int i = 0; i < nLA; ++i)
+    if (lookback[i])
+    {
+      fprintf (out, "   %3d = ", i);
+      const state *s = lookback_find_state (i);
+      int rnum = i - (s->reductions->lookahead_tokens - LA);
+      const rule *r = s->reductions->rules[rnum];
+      fprintf (out, "(%3d, ", s->number);
+      rule_print (r, NULL, out);
+      fputs (") ->", out);
+      for (goto_list *sp = lookback[i]; sp; sp = sp->next)
+        {
+          fputc (' ', out);
+          goto_print (sp->value, out);
+        }
+      fputc ('\n', out);
+    }
+  fputc ('\n', out);
+}
+
+/* Add (S, R) -> GOTONO to LOOKBACK.
+
+   "(q, A → ω) lookback (p, A)" iff state p reaches state q on label ω.
+
+   The goto number GOTONO, whose source is S (which is
+   inconsistent), */
+static void
+add_lookback_edge (state *s, rule const *r, goto_number gotono)
 {
   int ri = state_reduction_find (s, r);
-  goto_list *sp = xmalloc (sizeof *sp);
-  sp->next = lookback[(s->reductions->lookahead_tokens - LA) + ri];
-  sp->value = gotono;
-  lookback[(s->reductions->lookahead_tokens - LA) + ri] = sp;
+  int idx = (s->reductions->lookahead_tokens - LA) + ri;
+  lookback[idx] = goto_list_new (gotono, lookback[idx]);
 }
 
 
-
+/* Compute INCLUDES and LOOKBACK.  Corresponds to step E in Sec. 6 of
+   [DeRemer 1982].  */
 static void
 build_relations (void)
 {
-  goto_number *edge = xnmalloc (ngotos + 1, sizeof *edge);
-  state_number *states1 = xnmalloc (ritem_longest_rhs () + 1, sizeof *states1);
-  goto_number i;
+  goto_number *edge = xnmalloc (ngotos, sizeof *edge);
+  state_number *path = xnmalloc (ritem_longest_rhs () + 1, sizeof *path);
 
   includes = xnmalloc (ngotos, sizeof *includes);
 
-  for (i = 0; i < ngotos; i++)
+  /* For each goto (from SRC to DST labeled by nterm VAR), iterate
+     over each rule with VAR as LHS, and find the path PATH from SRC
+     labeled with the RHS of the rule. */
+  for (goto_number i = 0; i < ngotos; ++i)
     {
+      const state_number src = from_state[i];
+      const state_number dst = to_state[i];
+      symbol_number var = states[dst]->accessing_symbol;
+
+      /* Size of EDGE.  */
       int nedges = 0;
-      symbol_number symbol1 = states[to_state[i]]->accessing_symbol;
-      rule **rulep;
+      for (rule **rulep = derives[var - ntokens]; *rulep; ++rulep)
+        {
+          rule const *r = *rulep;
+          state *s = states[src];
+          path[0] = s->number;
 
-      for (rulep = derives[symbol1 - ntokens]; *rulep; rulep++)
-	{
-	  bool done;
-	  int length = 1;
-	  item_number const *rp;
-	  state *s = states[from_state[i]];
-	  states1[0] = s->number;
+          /* Length of PATH.  */
+          int length = 1;
+          for (item_number const *rp = r->rhs; 0 <= *rp; rp++)
+            {
+              symbol_number sym = item_number_as_symbol_number (*rp);
+              s = transitions_to (s, sym);
+              path[length++] = s->number;
+            }
 
-	  for (rp = (*rulep)->rhs; ! item_number_is_rule_number (*rp); rp++)
-	    {
-	      s = transitions_to (s->transitions,
-				  item_number_as_symbol_number (*rp));
-	      states1[length++] = s->number;
-	    }
+          /* S is the end of PATH.  */
+          if (!s->consistent)
+            add_lookback_edge (s, r, i);
 
-	  if (!s->consistent)
-	    add_lookback_edge (s, *rulep, i);
+          /* Walk back PATH from penultimate to beginning.
 
-	  length--;
-	  done = false;
-	  while (!done)
-	    {
-	      done = true;
-	      /* 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))
-		{
-		  /* Downcasting from item_number to symbol_number.  */
-		  edge[nedges++] = map_goto (states1[--length],
-					     item_number_as_symbol_number (*rp));
-		  if (nullable[*rp - ntokens])
-		    done = false;
-		}
-	    }
-	}
+             The "0 <= p" part is actually useless: each rhs ends in a
+             rule number (for which ISVAR(...) is false), and there is
+             a sentinel (ritem[-1]=0) before the first rhs.  */
+          for (int p = length - 2; 0 <= p && ISVAR (r->rhs[p]); --p)
+            {
+              symbol_number sym = item_number_as_symbol_number (r->rhs[p]);
+              goto_number g = map_goto (path[p], sym);
+              /* Insert G if not already in EDGE.
+                 FIXME: linear search.  A bitset instead?  */
+              {
+                bool found = false;
+                for (int j = 0; !found && j < nedges; ++j)
+                  found = edge[j] == g;
+                if (!found)
+                  {
+                    assert (nedges < ngotos);
+                    edge[nedges++] = g;
+                  }
+              }
+              if (!nullable[sym - ntokens])
+                break;
+            }
+        }
+
+      if (trace_flag & trace_automaton)
+        {
+          goto_print (i, stderr);
+          fputs (" edges = ", stderr);
+          for (int j = 0; j < nedges; ++j)
+            {
+              fputc (' ', stderr);
+              goto_print (edge[j], stderr);
+            }
+          fputc ('\n', stderr);
+        }
 
       if (nedges == 0)
-	includes[i] = NULL;
+        includes[i] = NULL;
       else
-	{
-	  int j;
-	  includes[i] = xnmalloc (nedges + 1, sizeof includes[i][0]);
-	  for (j = 0; j < nedges; j++)
-	    includes[i][j] = edge[j];
-	  includes[i][nedges] = END_NODE;
-	}
+        {
+          includes[i] = xnmalloc (nedges + 1, sizeof includes[i][0]);
+          for (int j = 0; j < nedges; ++j)
+            includes[i][j] = edge[j];
+          includes[i][nedges] = END_NODE;
+        }
     }
 
   free (edge);
-  free (states1);
+  free (path);
 
   relation_transpose (&includes, ngotos);
+  if (trace_flag & trace_automaton)
+    relation_print ("includes", includes, ngotos, goto_print, stderr);
 }
 
-
-
+/* Compute FOLLOWS from INCLUDES, and free INCLUDES.  */
 static void
-compute_FOLLOWS (void)
+compute_follows (void)
 {
-  goto_number i;
-
-  relation_digraph (includes, ngotos, &goto_follows);
-
-  for (i = 0; i < ngotos; i++)
+  relation_digraph (includes, ngotos, goto_follows);
+  if (trace_flag & trace_sets)
+    follows_print ("follows after includes", stderr);
+  for (goto_number i = 0; i < ngotos; ++i)
     free (includes[i]);
-
   free (includes);
 }
 
@@ -305,17 +423,16 @@
 static void
 compute_lookahead_tokens (void)
 {
-  size_t i;
-  goto_list *sp;
+  if (trace_flag & trace_automaton)
+      lookback_print (stderr);
 
-  for (i = 0; i < nLA; i++)
-    for (sp = lookback[i]; sp; sp = sp->next)
+  for (size_t i = 0; i < nLA; ++i)
+    for (goto_list *sp = lookback[i]; sp; sp = sp->next)
       bitset_or (LA[i], LA[i], goto_follows[sp->value]);
 
   /* Free LOOKBACK. */
-  for (i = 0; i < nLA; i++)
+  for (size_t i = 0; i < nLA; ++i)
     LIST_FREE (goto_list, lookback[i]);
-
   free (lookback);
 }
 
@@ -328,34 +445,31 @@
 static int
 state_lookahead_tokens_count (state *s, bool default_reduction_only_for_accept)
 {
-  int n_lookahead_tokens = 0;
-  reductions *rp = s->reductions;
-  transitions *sp = s->transitions;
+  const reductions *reds = s->reductions;
+  const transitions *trans = s->transitions;
 
   /* 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));
+  aver (trans->num == 0 || !TRANSITION_IS_DISABLED (trans, 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'.  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_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;
+  s->consistent =
+    !(reds->num > 1
+      || (reds->num == 1 && trans->num && TRANSITION_IS_SHIFT (trans, 0))
+      || (reds->num == 1 && reds->rules[0]->number != 0
+          && default_reduction_only_for_accept));
 
-  return n_lookahead_tokens;
+  return s->consistent ? 0 : reds->num;
 }
 
 
@@ -366,20 +480,17 @@
 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");
+      muscle_percent_define_get ("lr.default-reduction");
+    default_reduction_only_for_accept = STREQ (default_reductions, "accepting");
     free (default_reductions);
   }
 
   /* Compute the total number of reductions requiring a lookahead.  */
   nLA = 0;
-  for (i = 0; i < nstates; i++)
+  for (state_number i = 0; i < nstates; ++i)
     nLA +=
       state_lookahead_tokens_count (states[i],
                                     default_reduction_only_for_accept);
@@ -387,20 +498,20 @@
   if (!nLA)
     nLA = 1;
 
-  pLA = LA = bitsetv_create (nLA, ntokens, BITSET_FIXED);
+  bitsetv pLA = LA = bitsetv_create (nLA, ntokens, BITSET_FIXED);
 
   /* Initialize the members LOOKAHEAD_TOKENS for each state whose reductions
      require lookahead tokens.  */
-  for (i = 0; i < nstates; i++)
+  for (state_number i = 0; i < nstates; ++i)
     {
       int count =
         state_lookahead_tokens_count (states[i],
                                       default_reduction_only_for_accept);
       if (count)
-	{
-	  states[i]->reductions->lookahead_tokens = pLA;
-	  pLA += count;
-	}
+        {
+          states[i]->reductions->lookahead_tokens = pLA;
+          pLA += count;
+        }
     }
 }
 
@@ -412,48 +523,58 @@
 static void
 lookahead_tokens_print (FILE *out)
 {
-  state_number i;
-  int j, k;
-  fprintf (out, "Lookahead tokens: BEGIN\n");
-  for (i = 0; i < nstates; ++i)
+  fputs ("Lookaheads:\n", out);
+  for (state_number i = 0; i < nstates; ++i)
     {
-      reductions *reds = states[i]->reductions;
-      bitset_iterator iter;
-      int n_lookahead_tokens = 0;
-
-      if (reds->lookahead_tokens)
-	for (k = 0; k < reds->num; ++k)
-	  if (reds->lookahead_tokens[k])
-	    ++n_lookahead_tokens;
-
-      fprintf (out, "State %d: %d lookahead tokens\n",
-	       i, n_lookahead_tokens);
-
-      if (reds->lookahead_tokens)
-	for (j = 0; j < reds->num; ++j)
-	  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);
-	  };
+      const reductions *reds = states[i]->reductions;
+      if (reds->num)
+        {
+          fprintf (out, "  State %d:\n", i);
+          for (int j = 0; j < reds->num; ++j)
+            {
+              fprintf (out, "    rule %d:", reds->rules[j]->number);
+              if (reds->lookahead_tokens)
+              {
+                bitset_iterator iter;
+                int k;
+                BITSET_FOR_EACH (iter, reds->lookahead_tokens[j], k, 0)
+                  fprintf (out, " %s", symbols[k]->tag);
+              }
+              fputc ('\n', out);
+            }
+        }
     }
-  fprintf (out, "Lookahead tokens: END\n");
+  fputc ('\n', out);
 }
 
 void
 lalr (void)
 {
+  if (trace_flag & trace_automaton)
+    {
+      fputc ('\n', stderr);
+      begin_use_class ("trace0", stderr);
+      fprintf (stderr, "lalr: begin");
+      end_use_class ("trace0", stderr);
+      fputc ('\n', stderr);
+    }
   initialize_LA ();
   set_goto_map ();
-  initialize_F ();
+  initialize_goto_follows ();
   lookback = xcalloc (nLA, sizeof *lookback);
   build_relations ();
-  compute_FOLLOWS ();
+  compute_follows ();
   compute_lookahead_tokens ();
 
   if (trace_flag & trace_sets)
     lookahead_tokens_print (stderr);
+  if (trace_flag & trace_automaton)
+    {
+      begin_use_class ("trace0", stderr);
+      fprintf (stderr, "lalr: done");
+      end_use_class ("trace0", stderr);
+      fputc ('\n', stderr);
+    }
 }
 
 
@@ -463,25 +584,23 @@
   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;
-          }
-      }
-  }
+
+  for (goto_number 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]);
@@ -494,8 +613,7 @@
 void
 lalr_free (void)
 {
-  state_number s;
-  for (s = 0; s < nstates; ++s)
+  for (state_number s = 0; s < nstates; ++s)
     states[s]->reductions->lookahead_tokens = NULL;
   bitsetv_free (LA);
 }
diff --git a/src/lalr.h b/src/lalr.h
index 75e957e..1ef3c40 100644
--- a/src/lalr.h
+++ b/src/lalr.h
@@ -1,7 +1,7 @@
 /* Compute lookahead criteria for bison,
 
    Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006-2007,
-   2009-2012 Free Software Foundation, Inc.
+   2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -83,8 +83,8 @@
 /** 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.  */
+   together in FROM_STATE and TO_STATE, with indexes from GOTO_MAP[I -
+   NTOKENS] to GOTO_MAP[I - NTOKENS + 1] - 1 (including both).  */
 extern goto_number *goto_map;
 
 /** The size of #from_state and #to_state.  */
@@ -96,11 +96,10 @@
 /** 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);
+/** The number of the goto from state SRC labeled with nterm SYM.  */
+goto_number map_goto (state_number src, 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/local.mk b/src/local.mk
new file mode 100644
index 0000000..ee8ec03
--- /dev/null
+++ b/src/local.mk
@@ -0,0 +1,143 @@
+## Copyright (C) 2001-2015, 2018-2019 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/>.
+
+CLEANDIRS += %D%/*.dSYM
+
+bin_PROGRAMS = src/bison
+# Prettify Automake-computed names of compiled objects.
+src_bison_SHORTNAME = bison
+
+src_bison_CPPFLAGS = $(AM_CPPFLAGS) -DINSTALLDIR=\"$(bindir)\"
+if RELOCATABLE_VIA_LD
+  src_bison_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)`
+endif
+
+src_bison_CFLAGS = $(AM_CFLAGS) $(WERROR_CFLAGS)
+src_bison_SOURCES =                             \
+  src/AnnotationList.c                          \
+  src/AnnotationList.h                          \
+  src/InadequacyList.c                          \
+  src/InadequacyList.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/fixits.c                                  \
+  src/fixits.h                                  \
+  src/flex-scanner.h                            \
+  src/getargs.c                                 \
+  src/getargs.h                                 \
+  src/gram.c                                    \
+  src/gram.h                                    \
+  src/graphviz.c                                \
+  src/graphviz.h                                \
+  src/ielr.c                                    \
+  src/ielr.h                                    \
+  src/lalr.c                                    \
+  src/lalr.h                                    \
+  src/location.c                                \
+  src/location.h                                \
+  src/lr0.c                                     \
+  src/lr0.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-graph.c                             \
+  src/print-graph.h                             \
+  src/print-xml.c                               \
+  src/print-xml.h                               \
+  src/print.c                                   \
+  src/print.h                                   \
+  src/reader.c                                  \
+  src/reader.h                                  \
+  src/reduce.c                                  \
+  src/reduce.h                                  \
+  src/relation.c                                \
+  src/relation.h                                \
+  src/scan-code-c.c                             \
+  src/scan-code.h                               \
+  src/scan-gram-c.c                             \
+  src/scan-gram.h                               \
+  src/scan-skel-c.c                             \
+  src/scan-skel.h                               \
+  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
+
+EXTRA_src_bison_SOURCES =                       \
+  src/scan-code.l                               \
+  src/scan-gram.l                               \
+  src/scan-skel.l
+
+BUILT_SOURCES +=                                \
+  src/parse-gram.c                              \
+  src/parse-gram.h                              \
+  src/scan-code.c                               \
+  src/scan-gram.c                               \
+  src/scan-skel.c
+
+# Although conceptually most of these guys would make more sense in the
+# definition of libbison, beware that they might expand as flags such as
+# `-lm`.  Keep them here.  Or use a Libtool convenience library.
+src_bison_LDADD =                               \
+  $(ISNAND_LIBM)                                \
+  $(ISNANF_LIBM)                                \
+  $(ISNANL_LIBM)                                \
+  $(LDEXPL_LIBM)                                \
+  $(LDEXP_LIBM)                                 \
+  $(LIBINTL)                                    \
+  $(LIBTHREAD)                                  \
+  $(LIB_CLOCK_GETTIME)                          \
+  $(LIB_GETHRXTIME)                             \
+  $(LIBTEXTSTYLE)                               \
+  lib/libbison.a
+
+
+
+
+## ------ ##
+## yacc.  ##
+## ------ ##
+
+if ENABLE_YACC
+  nodist_bin_SCRIPTS = src/yacc
+endif
+EXTRA_SCRIPTS = src/yacc
+MOSTLYCLEANFILES += src/yacc
diff --git a/src/location.c b/src/location.c
index 24301ec..357cce7 100644
--- a/src/location.c
+++ b/src/location.c
@@ -1,6 +1,7 @@
 /* Locations for Bison
 
-   Copyright (C) 2002, 2005-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,211 +21,513 @@
 #include <config.h>
 #include "system.h"
 
+#include <mbfile.h>
 #include <mbswidth.h>
 #include <quotearg.h>
+#include <stdio.h>    /* fileno */
+#include <sys/ioctl.h>
+#include <sys/stat.h> /* fstat */
+#include <termios.h>
+
+#ifdef WINSIZE_IN_PTEM
+# include <sys/stream.h>
+# include <sys/ptem.h>
+#endif
 
 #include "complain.h"
+#include "getargs.h"
 #include "location.h"
 
-location const empty_location = EMPTY_LOCATION_INIT;
+location const empty_loc = EMPTY_LOCATION_INIT;
+
+static int
+min_int (int a, int b)
+{
+  return a < b ? a : b;
+}
+
+static int
+max_int (int a, int b)
+{
+  return a >= b ? a : b;
+}
+
+/* The terminal width.  Not less than 40.  */
+static int
+columns (void)
+{
+  const char *cp = getenv ("COLUMNS");
+  int res = 80;
+  if (cp && *cp)
+    {
+      long l = strtol (cp, NULL, 10);
+      res = 0 <= l && l <= INT_MAX ? l : INT_MAX;
+    }
+  else
+    {
+#ifdef TIOCGWINSZ
+      struct winsize ws;
+      if (ioctl (STDERR_FILENO, TIOCGWINSZ, &ws) != -1
+          && 0 < ws.ws_col && ws.ws_col == (size_t) ws.ws_col)
+        res = ws.ws_col;
+#endif
+    }
+  return max_int (res, 40);
+}
+
+/* Available screen width.  */
+static int screen_width = 80;
+
+/* The ellipsis symbol to use for this locale, and the number of
+   screen-columns it uses.  */
+static const char *ellipsis = "...";
+static int ellipsize = 3;
 
 /* 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.  */
+   COLUMN.  If an overflow occurs, return INT_MAX.  */
 
 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;
+  int width
+    = buf ? mbsnwidth (buf, bufsize, 0)
+    : INT_MAX <= bufsize ? INT_MAX
+    : bufsize;
+  return column <= INT_MAX - width ? column + width : INT_MAX;
 }
 
+static void
+boundary_compute (boundary *cur, char const *token, size_t size)
+{
+  int line = cur->line;
+  int column = cur->column;
+  int byte = cur->byte;
+  char const *p0 = token;
+  char const *p = token;
+  char const *lim = token + size;
+
+  for (p = token; p < lim; ++p)
+    switch (*p)
+      {
+      case '\n':
+        line += line < INT_MAX;
+        column = 1;
+        byte = 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;
+        byte += byte < INT_MAX;
+        break;
+
+      default:
+        byte += byte < INT_MAX;
+        break;
+      }
+  column = add_column_width (column, p0, p - p0);
+
+  cur->line = line;
+  cur->column = column;
+  cur->byte = byte;
+}
+
+
 /* 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);
-
+  boundary_compute (cur, token, size);
   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"));
+  if (loc->end.line == INT_MAX && loc->start.line != INT_MAX)
+    complain (loc, Wother, _("line number overflow"));
+  if (loc->end.column == INT_MAX && loc->start.column != INT_MAX)
+    complain (loc, Wother, _("column number overflow"));
+  /* TRANSLATORS: we are counting bytes, and there are too many.  */
+  if (loc->end.byte == INT_MAX && loc->start.byte != INT_MAX)
+    complain (loc, Wother, _("byte number overflow"));
 }
 
-
-/* Output to OUT the location LOC.
-   Warning: it uses quotearg's slot 3.  */
-unsigned
-location_print (FILE *out, location loc)
+static int
+boundary_print (boundary const *b, FILE *out)
 {
-  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)
+  return fprintf (out, "%s:%d.%d@%d",
+                  quotearg_n_style (3, escape_quoting_style, b->file),
+                  b->line, b->column, b->byte);
+}
+
+int
+location_print (location loc, FILE *out)
+{
+  int res = 0;
+  if (trace_flag & trace_locations)
     {
-      res += fprintf (out, ":%d", loc.start.line);
-      if (0 <= loc.start.column)
-        res += fprintf (out, ".%d", loc.start.column);
+      res += boundary_print (&loc.start, out);
+      res += fprintf (out, "-");
+      res += boundary_print (&loc.end, out);
     }
-  if (loc.start.file != loc.end.file)
+  else
     {
-      res += fprintf (out, "-%s",
-                      quotearg_n_style (3, escape_quoting_style,
-                                        loc.end.file));
-      if (0 <= loc.end.line)
+      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.end.line);
-          if (0 <= end_col)
-            res += fprintf (out, ".%d", end_col);
+          res += fprintf (out, ":%d", loc.start.line);
+          if (0 < loc.start.column)
+            res += fprintf (out, ".%d", loc.start.column);
         }
-    }
-  else if (0 <= loc.end.line)
-    {
-      if (loc.start.line < loc.end.line)
+      if (loc.start.file != loc.end.file)
         {
-          res += fprintf (out, "-%d", loc.end.line);
-          if (0 <= end_col)
-            res += fprintf (out, ".%d", end_col);
+          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 <= end_col && loc.start.column < 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
+/* Persistent data used by location_caret to avoid reopening and rereading the
    same file all over for each error.  */
-struct caret_info
+static struct
 {
-  FILE *source;
-  size_t line;
+  /* Raw input file.  */
+  FILE *file;
+  /* Input file as a stream of multibyte characters.  */
+  mb_file_t mbfile;
+  /* The position within the last file we quoted.  If POS.FILE is non
+     NULL, but FILE is NULL, it means this file is special and should
+     not be quoted. */
+  boundary pos;
+  /* Offset in FILE of the current line (i.e., where line POS.LINE
+     starts).  */
   size_t offset;
-};
+  /* Length of the current line.  */
+  int line_len;
+  /* Given the initial column to display, the offset (number of
+     characters to skip at the beginning of the line). */
+  int skip;
 
-static struct caret_info caret_info = { NULL, 1, 0 };
+  /* Available width to quote the source file.  Eight chars are
+     consumed by the left-margin (with line number).  */
+  int width;
+} caret_info;
 
-void
-cleanup_caret ()
+void caret_init (void)
 {
-  if (caret_info.source)
-    fclose (caret_info.source);
+  screen_width = columns ();
+  /* TRANSLATORS: This is used when a line is too long, and is
+     displayed truncated.  Use an ellipsis appropriate for your
+     language, remembering that "…" (U+2026 HORIZONTAL ELLIPSIS)
+     sometimes misdisplays and that "..." (three ASCII periods) is a
+     safer choice in some locales.  */
+  ellipsis = _("...");
+  ellipsize = mbswidth (ellipsis, 0);
 }
 
 void
-location_caret (FILE *out, location loc)
+caret_free (void)
 {
-  /* 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
+  if (caret_info.file)
     {
-      caret_info.line = 1;
-      caret_info.offset = 0;
-      fseek (caret_info.source, caret_info.offset, SEEK_SET);
+      fclose (caret_info.file);
+      caret_info.file = NULL;
     }
+}
+
+/* Open FILE for quoting, if needed, and if possible.  Return whether
+   the file can quoted. */
+static bool
+caret_set_file (const char *file)
+{
+  /* If a different file than before, close and let the rest open
+     the new one. */
+  if (caret_info.pos.file && caret_info.pos.file != file)
+    {
+      caret_free ();
+      caret_info.pos.file = NULL;
+    }
+  if (!caret_info.pos.file)
+    {
+      caret_info.pos.file = file;
+      if ((caret_info.file = fopen (caret_info.pos.file, "r")))
+        {
+          /* If the file is not regular (imagine #line 1 "/dev/stdin"
+             in the input file for instance), don't try to quote the
+             file.  Keep caret_info.file set so that we don't try to
+             open it again, but leave caret_info.file NULL so that we
+             don't try to quote it. */
+          struct stat buf;
+          if (fstat (fileno (caret_info.file), &buf) == 0
+              && buf.st_mode & S_IFREG)
+            {
+              caret_info.pos.line = 1;
+              mbf_init (caret_info.mbfile, caret_info.file);
+            }
+          else
+            caret_free ();
+        }
+    }
+  return !!caret_info.file;
+}
+
+/* Getc, but smash \r\n as \n.  */
+static void
+caret_getc_internal (mbchar_t *res)
+{
+  mbf_getc (*res, caret_info.mbfile);
+  if (mb_iseq (*res, '\r'))
+    {
+      mbchar_t c;
+      mbf_getc (c, caret_info.mbfile);
+      if (mb_iseq (c, '\n'))
+        mb_copy (res, &c);
+      else
+        mbf_ungetc (c, caret_info.mbfile);
+    }
+}
+
+#define caret_getc(Var) caret_getc_internal(&Var)
+
+/* Move CARET_INFO (which has a valid FILE) to the line number LINE.
+   Compute and cache that line's length in CARET_INFO.LINE_LEN.
+   Return whether succesful.*/
+static bool
+caret_set_line (int line)
+{
+  /* If the line we want to quote is seekable (the same line as the previous
+     location), just seek it. If it was a previous line, we lost track of it,
+     so return to the start of file.  */
+  if (line < caret_info.pos.line)
+    {
+      caret_info.pos.line = 1;
+      caret_info.offset = 0;
+    }
+  if (fseek (caret_info.file, caret_info.offset, SEEK_SET))
+    return false;
+
+  /* If this is the same line as the previous one, we are done. */
+  if (line < caret_info.pos.line)
+    return true;
 
   /* 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);
+  while (caret_info.pos.line < line)
+    {
+      mbchar_t c;
+      caret_getc (c);
+      if (mb_iseof (c))
+        /* Something is wrong, that line number does not exist.  */
+        return false;
+      caret_info.pos.line += mb_iseq (c, '\n');
+    }
+  caret_info.offset = ftell (caret_info.file);
+  caret_info.pos.column = 1;
+  /* Reset mbf's internal state.
+     FIXME: should be done in mbfile.  */
+  caret_info.mbfile.eof_seen = 0;
+
+  /* Find the number of columns of this line.  */
+  while (true)
+    {
+      mbchar_t c;
+      caret_getc (c);
+      if (mb_iseof (c) || mb_iseq (c, '\n'))
+        break;
+      boundary_compute (&caret_info.pos, mb_ptr (c), mb_len (c));
+    }
+  caret_info.line_len = caret_info.pos.column;
+  /* Go back to the beginning of line.  */
+  if (fseek (caret_info.file, caret_info.offset, SEEK_SET))
+    return false;
+  /* Reset mbf's internal state.
+     FIXME: should be done in mbfile.  */
+  caret_info.mbfile.eof_seen = 0;
+  caret_info.pos.column = 1;
+  return true;
+}
+
+/* Compute CARET_INFO.WIDTH and CARET_INFO.SKIP based on the fact that
+   the first column to display in the current line is COL.  */
+static bool
+caret_set_column (int col)
+{
+  /* Available width.  Eight chars are consumed by the left-margin
+     (with line number).  */
+  caret_info.width = screen_width - 8;
+  caret_info.skip = 0;
+  if (caret_info.width < caret_info.line_len)
+    {
+      /* We cannot quote the whole line.  Make sure we can see the
+         beginning of the location.  */
+      caret_info.skip = caret_info.width < col ? col - 10 : 0;
+    }
+  /* If we skip the initial part, we insert "..." before.  */
+  if (caret_info.skip)
+    caret_info.width -= ellipsize;
+  /* If the end of line does not fit, we also need to truncate the
+     end, and leave "..." there.  */
+  if (caret_info.width < caret_info.line_len - caret_info.skip)
+    caret_info.width -= ellipsize;
+  return true;
+}
+
+void
+location_caret (location loc, const char *style, FILE *out)
+{
+  if (!loc.start.line)
+    return;
+  if (!caret_set_file (loc.start.file))
+    return;
+  if (!caret_set_line (loc.start.line))
+    return;
+  if (!caret_set_column (loc.start.column))
+    return;
+
+  const int width = caret_info.width;
+  const int skip = caret_info.skip;
 
   /* 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)
+    mbchar_t c;
+    caret_getc (c);
+    if (!mb_iseof (c))
       {
-        /* 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, "");
+        /* The last column to highlight.  Only the first line of
+           multiline locations are quoted, in which case the ending
+           column is the end of line.  Single point locations (with
+           equal boundaries) denote the character that they
+           follow.  */
+        int col_end
+          = loc.start.line == loc.end.line
+          ? loc.end.column + (loc.start.column == loc.end.column)
+          : caret_info.line_len;
+        /* Quote the file (at most the first line in the case of
+           multiline locations).  */
         {
-          int i = loc.start.column;
-          do
-            fputc ('^', out);
-          while (++i < end);
+          fprintf (out, "%5d | %s", loc.start.line, skip ? ellipsis : "");
+          /* Whether we opened the style.  If the line is not as
+             expected (maybe the file was changed since the scanner
+             ran), we might reach the end before we actually saw the
+             opening column.  */
+          bool opened = false;
+          while (!mb_iseof (c) && !mb_iseq (c, '\n'))
+            {
+              if (caret_info.pos.column == loc.start.column)
+                {
+                  begin_use_class (style, out);
+                  opened = true;
+                }
+              if (skip < caret_info.pos.column)
+                mb_putc (c, out);
+              boundary_compute (&caret_info.pos, mb_ptr (c), mb_len (c));
+              caret_getc (c);
+              if (opened
+                  && (caret_info.pos.column == col_end
+                      || width < caret_info.pos.column - skip))
+                {
+                  end_use_class (style, out);
+                  opened = false;
+                }
+              if (width < caret_info.pos.column - skip)
+                {
+                  fputs (ellipsis, out);
+                  break;
+                }
+            }
+          putc ('\n', out);
         }
-        fputc ('\n', out);
+
+        /* Print the carets with the same indentation as above.  */
+        {
+          fprintf (out, "      | %*s",
+                   loc.start.column - 1 - skip + (skip ? ellipsize : 0), "");
+          begin_use_class (style, out);
+          putc ('^', out);
+          /* Underlining a multiline location ends with the first
+             line.  */
+          for (int i = loc.start.column - 1 - skip + 1,
+                 i_end = min_int (col_end - 1 - skip, width);
+               i < i_end; ++i)
+            putc ('~', out);
+          end_use_class (style, out);
+          putc ('\n', out);
+        }
       }
-    free (buf);
   }
 }
 
 void
-boundary_set_from_string (boundary *bound, char *loc_str)
+location_caret_suggestion (location loc, const char *s, FILE *out)
 {
-  /* 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);
+  const char *style = "fixit-insert";
+  fprintf (out, "      | %*s",
+           loc.start.column - 1 - caret_info.skip
+           + (caret_info.skip ? ellipsize : 0),
+           "");
+  begin_use_class (style, out);
+  fputs (s, out);
+  end_use_class (style, out);
+  putc ('\n', out);
+}
+
+bool
+location_empty (location loc)
+{
+  return !loc.start.file && !loc.start.line && !loc.start.column
+    && !loc.end.file && !loc.end.line && !loc.end.column;
+}
+
+void
+boundary_set_from_string (boundary *bound, char *str)
+{
+  /* Must search in reverse since the file name field may contain '.'
+     or ':'.  */
+  char *at = strrchr (str, '@');
+  if (at)
+    {
+      *at = '\0';
+      bound->byte = atoi (at+1);
+    }
+  {
+    char *dot = strrchr (str, '.');
+    aver (dot);
+    *dot = '\0';
+    bound->column = atoi (dot+1);
+    if (!at)
+      bound->byte = bound->column;
+  }
+  {
+    char *colon = strrchr (str, ':');
+    aver (colon);
+    *colon = '\0';
+    bound->line = atoi (colon+1);
+  }
+  bound->file = uniqstr_new (str);
 }
diff --git a/src/location.h b/src/location.h
index c1859ae..24fba60 100644
--- a/src/location.h
+++ b/src/location.h
@@ -1,6 +1,7 @@
 /* Locations for Bison
 
-   Copyright (C) 2002, 2004-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,6 +21,10 @@
 #ifndef LOCATION_H_
 # define LOCATION_H_
 
+# include <stdbool.h>
+# include <stdio.h>
+# include <string.h> /* strcmp */
+
 # include "uniqstr.h"
 
 /* A boundary between two characters.  */
@@ -28,31 +33,37 @@
   /* The name of the file that contains the boundary.  */
   uniqstr file;
 
-  /* If nonnegative, the (origin-1) line that contains the boundary.
+  /* If positive, the line (starting at 1) that contains the boundary.
      If this is INT_MAX, the line number has overflowed.
 
-     Meaningless and not displayed if negative.
+     Meaningless and not displayed if nonpositive.
   */
   int line;
 
-  /* If nonnegative, the (origin-1) column just after the boundary.
+  /* If positive, the column (starting at 1) 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.
+     Meaningless and not displayed if nonpositive.
   */
   int column;
 
+  /* If nonnegative, the byte number (starting at 0) in the current line.
+     Never displayed, used when printing error messages with colors to
+     know where colors start and end.  */
+  int byte;
+
 } boundary;
 
-/* Set the position of \a a. */
+/* Set the position of \a p. */
 static inline void
-boundary_set (boundary *b, const char *f, int l, int c)
+boundary_set (boundary *p, const char *f, int l, int c, int b)
 {
-  b->file = f;
-  b->line = l;
-  b->column = c;
+  p->file = f;
+  p->line = l;
+  p->column = c;
+  p->byte = b;
 }
 
 /* Return -1, 0, 1, depending whether a is before, equal, or
@@ -60,7 +71,12 @@
 static inline int
 boundary_cmp (boundary a, boundary b)
 {
-  int res = strcmp (a.file, b.file);
+  /* Locations with no file first.  */
+  int res =
+    a.file && b.file ? strcmp (a.file, b.file)
+    : a.file ? 1
+    : b.file ? -1
+    : 0;
   if (!res)
     res = a.line - b.line;
   if (!res)
@@ -73,8 +89,8 @@
 equal_boundaries (boundary a, boundary b)
 {
   return (a.column == b.column
-	  && a.line == b.line
-	  && UNIQSTR_EQ (a.file, b.file));
+          && a.line == b.line
+          && UNIQSTR_EQ (a.file, b.file));
 }
 
 /* A location, that is, a region of source code.  */
@@ -88,26 +104,35 @@
 
 } location;
 
-#define GRAM_LTYPE location
+# define GRAM_LTYPE location
 
-#define EMPTY_LOCATION_INIT {{NULL, 0, 0}, {NULL, 0, 0}}
-extern location const empty_location;
+# define EMPTY_LOCATION_INIT {{NULL, 0, 0, 0}, {NULL, 0, 0, 0}}
+extern location const empty_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);
+                       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);
+/* Print location to file.
+   Return number of actually printed characters.
+   Warning: uses quotearg's slot 3. */
+int location_print (location loc, FILE *out);
 
-/* Free any allocated ressources and close any open file handles that are
+/* Prepare the use of location_caret.  */
+void caret_init (void);
+
+/* Free any allocated resources and close any open file handles that are
    left-over by the usage of location_caret.  */
-void cleanup_caret (void);
+void caret_free (void);
 
-/* Output to OUT the line and caret corresponding to location LOC.  */
-void location_caret (FILE *out, location loc);
+/* Quote the line containing LOC onto OUT.  Highlight the part of LOC
+   with the color STYLE.  */
+void location_caret (location loc, const char* style, FILE *out);
+
+/* Display a suggestion of replacement for LOC with S.  To call after
+   location_caret.  */
+void location_caret_suggestion (location loc, const char *s, FILE *out);
 
 /* Return -1, 0, 1, depending whether a is before, equal, or
    after b.  */
@@ -120,7 +145,11 @@
   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);
+/* Whether this is the empty location.  */
+bool location_empty (location loc);
+
+/* STR must be formatted as 'file:line.column@byte' or 'file:line.column',
+   it will be modified.  */
+void boundary_set_from_string (boundary *bound, char *str);
 
 #endif /* ! defined LOCATION_H_ */
diff --git a/src/LR0.c b/src/lr0.c
similarity index 60%
rename from src/LR0.c
rename to src/lr0.c
index 37bfe81..58df9d7 100644
--- a/src/LR0.c
+++ b/src/lr0.c
@@ -1,6 +1,6 @@
 /* Generate the LR(0) parser states for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2000-2002, 2004-2007, 2009-2012 Free
+   Copyright (C) 1984, 1986, 1989, 2000-2002, 2004-2015, 2018-2019 Free
    Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -27,13 +27,12 @@
 
 #include <bitset.h>
 
-#include "LR0.h"
 #include "closure.h"
 #include "complain.h"
 #include "getargs.h"
 #include "gram.h"
-#include "gram.h"
 #include "lalr.h"
+#include "lr0.h"
 #include "reader.h"
 #include "reduce.h"
 #include "state.h"
@@ -48,6 +47,16 @@
 static state_list *first_state = NULL;
 static state_list *last_state = NULL;
 
+/* Print CORE for debugging. */
+static void
+core_print (size_t core_size, item_number *core, FILE *out)
+{
+  for (int i = 0; i < core_size; ++i)
+    {
+      item_print (ritem + core[i], NULL, out);
+      fputc ('\n', out);
+    }
+}
 
 /*------------------------------------------------------------------.
 | A state was just discovered from another state.  Queue it for     |
@@ -58,14 +67,14 @@
 state_list_append (symbol_number sym, size_t core_size, item_number *core)
 {
   state_list *node = xmalloc (sizeof *node);
-  state *s = state_new (sym, core_size, core);
+  state *res = state_new (sym, core_size, core);
 
   if (trace_flag & trace_automaton)
     fprintf (stderr, "state_list_append (state = %d, symbol = %d (%s))\n",
-	     nstates, sym, symbols[sym]->tag);
+             nstates, sym, symbols[sym]->tag);
 
   node->next = NULL;
-  node->state = s;
+  node->state = res;
 
   if (!first_state)
     first_state = node;
@@ -73,40 +82,48 @@
     last_state->next = node;
   last_state = node;
 
-  return s;
+  return res;
 }
 
-static int nshifts;
-static symbol_number *shift_symbol;
+/* Symbols that can be "shifted" (including non terminals) from the
+   current state.  */
+bitset shift_symbol;
 
 static rule **redset;
+/* For the current state, the list of pointers to states that can be
+   reached via a shift/goto.  Could be indexed by the reaching symbol,
+   but labels of incoming transitions can be recovered by the state
+   itself.  */
 static state **shiftset;
 
+
+/* KERNEL_BASE[symbol-number] -> list of item numbers (offsets inside
+   RITEM) of lenngth KERNEL_SIZE[symbol-number]. */
 static item_number **kernel_base;
 static int *kernel_size;
+
+/* A single dimension array that serves as storage for
+   KERNEL_BASE.  */
 static item_number *kernel_items;
 
 
 static void
 allocate_itemsets (void)
 {
-  symbol_number i;
-  rule_number r;
-  item_number *rhsp;
-
   /* Count the number of occurrences of all the symbols in RITEMS.
      Note that useless productions (hence useless nonterminals) are
      browsed too, hence we need to allocate room for _all_ the
      symbols.  */
   size_t count = 0;
   size_t *symbol_count = xcalloc (nsyms + nuseless_nonterminals,
-				  sizeof *symbol_count);
+                                  sizeof *symbol_count);
 
-  for (r = 0; r < nrules; ++r)
-    for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
+  for (rule_number r = 0; r < nrules; ++r)
+    for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
       {
-	count++;
-	symbol_count[*rhsp]++;
+        symbol_number sym = item_number_as_symbol_number (*rhsp);
+        count += 1;
+        symbol_count[sym] += 1;
       }
 
   /* See comments before new_itemsets.  All the vectors of items
@@ -119,7 +136,7 @@
   kernel_items = xnmalloc (count, sizeof *kernel_items);
 
   count = 0;
-  for (i = 0; i < nsyms; i++)
+  for (symbol_number i = 0; i < nsyms; i++)
     {
       kernel_base[i] = kernel_items + count;
       count += symbol_count[i];
@@ -129,6 +146,25 @@
   kernel_size = xnmalloc (nsyms, sizeof *kernel_size);
 }
 
+/* Print the current kernel (in KERNEL_BASE). */
+static void
+kernel_print (FILE *out)
+{
+  for (symbol_number i = 0; i < nsyms; ++i)
+    if (kernel_size[i])
+      {
+        fprintf (out, "kernel[%s] =\n", symbols[i]->tag);
+        core_print (kernel_size[i], kernel_base[i], out);
+      }
+}
+
+/* Make sure the kernel is in sane state. */
+static void
+kernel_check (void)
+{
+  for (symbol_number i = 0; i < nsyms - 1; ++i)
+    assert (kernel_base[i] + kernel_size[i] <= kernel_base[i + 1]);
+}
 
 static void
 allocate_storage (void)
@@ -138,14 +174,14 @@
   shiftset = xnmalloc (nsyms, sizeof *shiftset);
   redset = xnmalloc (nrules, sizeof *redset);
   state_hash_new ();
-  shift_symbol = xnmalloc (nsyms, sizeof *shift_symbol);
+  shift_symbol = bitset_create (nsyms, BITSET_FIXED);
 }
 
 
 static void
 free_storage (void)
 {
-  free (shift_symbol);
+  bitset_free (shift_symbol);
   free (redset);
   free (shiftset);
   free (kernel_base);
@@ -157,46 +193,58 @@
 
 
 
-/*---------------------------------------------------------------.
-| Find which symbols can be shifted in S, and for each one       |
-| record which items would be active after that shift.  Uses the |
-| contents of itemset.                                           |
-|                                                                |
-| shift_symbol is set to a vector of the symbols that can be     |
-| 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.                                                          |
-`---------------------------------------------------------------*/
+/*------------------------------------------------------------------.
+| Find which term/nterm symbols can be "shifted" in S, and for each |
+| one record which items would be active after that transition.     |
+| Uses the contents of itemset.                                     |
+|                                                                   |
+| shift_symbol is a bitset of the term/nterm symbols that can be    |
+| 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
 new_itemsets (state *s)
 {
-  size_t i;
-
   if (trace_flag & trace_automaton)
-    fprintf (stderr, "Entering new_itemsets, state = %d\n", s->number);
+    fprintf (stderr, "new_itemsets: begin: state = %d\n", s->number);
 
   memset (kernel_size, 0, nsyms * sizeof *kernel_size);
 
-  nshifts = 0;
+  bitset_zero (shift_symbol);
 
-  for (i = 0; i < nitemset; ++i)
+  if (trace_flag & trace_automaton)
+    {
+      fprintf (stderr, "initial kernel:\n");
+      kernel_print (stderr);
+    }
+
+  for (size_t 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])
-	  {
-	    shift_symbol[nshifts] = sym;
-	    nshifts++;
-	  }
-
-	kernel_base[sym][kernel_size[sym]] = itemset[i] + 1;
-	kernel_size[sym]++;
+        if (trace_flag & trace_automaton)
+          {
+            fputs ("working on: ", stderr);
+            item_print (ritem + itemset[i], NULL, stderr);
+            fputc ('\n', stderr);
+          }
+        symbol_number sym = item_number_as_symbol_number (ritem[itemset[i]]);
+        bitset_set (shift_symbol, sym);
+        kernel_base[sym][kernel_size[sym]] = itemset[i] + 1;
+        kernel_size[sym]++;
       }
+
+  if (trace_flag & trace_automaton)
+    {
+      fprintf (stderr, "final kernel:\n");
+      kernel_print (stderr);
+      fprintf (stderr, "new_itemsets: end: state = %d\n\n", s->number);
+    }
+  kernel_check ();
 }
 
 
@@ -210,13 +258,15 @@
 static state *
 get_state (symbol_number sym, size_t core_size, item_number *core)
 {
-  state *s;
-
   if (trace_flag & trace_automaton)
-    fprintf (stderr, "Entering get_state, symbol = %d (%s)\n",
-	     sym, symbols[sym]->tag);
+    {
+      fprintf (stderr, "Entering get_state, symbol = %d (%s), core:\n",
+               sym, symbols[sym]->tag);
+      core_print (core_size, core, stderr);
+      fputc ('\n', stderr);
+    }
 
-  s = state_hash_lookup (core_size, core);
+  state *s = state_hash_lookup (core_size, core);
   if (!s)
     s = state_list_append (sym, core_size, core);
 
@@ -228,7 +278,7 @@
 
 /*---------------------------------------------------------------.
 | Use the information computed by new_itemsets to find the state |
-| numbers reached by each shift transition from S.		 |
+| numbers reached by each shift transition from S.               |
 |                                                                |
 | SHIFTSET is set up as a vector of those states.                |
 `---------------------------------------------------------------*/
@@ -236,27 +286,20 @@
 static void
 append_states (state *s)
 {
-  int i;
+  if (trace_flag & trace_automaton)
+    fprintf (stderr, "append_states: begin: state = %d\n", s->number);
+
+  bitset_iterator iter;
+  symbol_number sym;
+  int i = 0;
+  BITSET_FOR_EACH (iter, shift_symbol, sym, 0)
+    {
+      shiftset[i] = get_state (sym, kernel_size[sym], kernel_base[sym]);
+      ++i;
+    }
 
   if (trace_flag & trace_automaton)
-    fprintf (stderr, "Entering append_states, state = %d\n", s->number);
-
-  /* First sort shift_symbol into increasing order.  */
-
-  for (i = 1; i < nshifts; i++)
-    {
-      symbol_number sym = shift_symbol[i];
-      int j;
-      for (j = i; 0 < j && sym < shift_symbol[j - 1]; j--)
-	shift_symbol[j] = shift_symbol[j - 1];
-      shift_symbol[j] = sym;
-    }
-
-  for (i = 0; i < nshifts; i++)
-    {
-      symbol_number sym = shift_symbol[i];
-      shiftset[i] = get_state (sym, kernel_size[sym], kernel_base[sym]);
-    }
+    fprintf (stderr, "append_states: end: state = %d\n", s->number);
 }
 
 
@@ -270,23 +313,33 @@
 save_reductions (state *s)
 {
   int count = 0;
-  size_t i;
 
   /* Find and count the active items that represent ends of rules. */
-  for (i = 0; i < nitemset; ++i)
+  for (size_t i = 0; i < nitemset; ++i)
     {
       item_number item = ritem[itemset[i]];
       if (item_number_is_rule_number (item))
-	{
-	  rule_number r = item_number_as_rule_number (item);
-	  redset[count++] = &rules[r];
-	  if (r == 0)
-	    {
-	      /* This is "reduce 0", i.e., accept. */
-	      aver (!final_state);
-	      final_state = s;
-	    }
-	}
+        {
+          rule_number r = item_number_as_rule_number (item);
+          redset[count++] = &rules[r];
+          if (r == 0)
+            {
+              /* This is "reduce 0", i.e., accept. */
+              aver (!final_state);
+              final_state = s;
+            }
+        }
+    }
+
+  if (trace_flag & trace_automaton)
+    {
+      fprintf (stderr, "reduction[%d] = {\n", s->number);
+      for (int i = 0; i < count; ++i)
+        {
+          rule_print (redset[i], NULL, stderr);
+          fputc ('\n', stderr);
+        }
+      fputs ("}\n", stderr);
     }
 
   /* Make a reductions structure and copy the data into it.  */
@@ -308,14 +361,14 @@
       state_list *this = first_state;
 
       /* Pessimization, but simplification of the code: make sure all
-	 the states have valid transitions and reductions members,
-	 even if reduced to 0.  It is too soon for errs, which are
-	 computed later, but set_conflicts.  */
+         the states have valid transitions and reductions members,
+         even if reduced to 0.  It is too soon for errs, which are
+         computed later, but set_conflicts.  */
       state *s = this->state;
       if (!s->transitions)
-	state_transitions_set (s, 0, 0);
+        state_transitions_set (s, 0, 0);
       if (!s->reductions)
-	state_reductions_set (s, 0, 0);
+        state_reductions_set (s, 0, 0);
 
       states[s->number] = s;
 
@@ -335,40 +388,38 @@
 void
 generate_states (void)
 {
-  item_number initial_core = 0;
-  state_list *list = NULL;
   allocate_storage ();
-  new_closure (nritems);
+  closure_new (nritems);
 
   /* Create the initial state.  The 0 at the lhs is the index of the
      item of this initial rule.  */
+  item_number initial_core = 0;
   state_list_append (0, 1, &initial_core);
 
   /* States are queued when they are created; process them all.  */
-  for (list = first_state; list; list = list->next)
+  for (state_list *list = first_state; list; list = list->next)
     {
       state *s = list->state;
       if (trace_flag & trace_automaton)
-	fprintf (stderr, "Processing state %d (reached by %s)\n",
-		 s->number,
-		 symbols[s->accessing_symbol]->tag);
+        fprintf (stderr, "Processing state %d (reached by %s)\n",
+                 s->number,
+                 symbols[s->accessing_symbol]->tag);
       /* 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);
-      /* Find the itemsets of the states that shifts can reach.  */
+      /* Find the itemsets of the states that shifts/gotos can reach.  */
       new_itemsets (s);
       /* Find or create the core structures for those states.  */
       append_states (s);
 
       /* Create the shifts structures for the shifts to those states,
-	 now that the state numbers transitioning to are known.  */
-      state_transitions_set (s, nshifts, shiftset);
+         now that the state numbers transitioning to are known.  */
+      state_transitions_set (s, bitset_count (shift_symbol), shiftset);
     }
 
   /* discard various storage */
-  free_closure ();
   free_storage ();
 
   /* Set up STATES. */
diff --git a/src/LR0.h b/src/lr0.h
similarity index 89%
rename from src/LR0.h
rename to src/lr0.h
index 45f922a..3197ee9 100644
--- a/src/LR0.h
+++ b/src/lr0.h
@@ -1,7 +1,7 @@
 /* Generate the LR(0) parser states for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 2000-2002, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2000-2002, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/main.c b/src/main.c
index 184d789..258a6d1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,7 +1,7 @@
 /* Top level entry point of Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2002, 2004-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2002, 2004-2015,
+   2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,30 +21,32 @@
 #include <config.h>
 #include "system.h"
 
-#include <bitset_stats.h>
 #include <bitset.h>
+#include <bitset/stats.h>
+#include <closeout.h>
 #include <configmake.h>
 #include <progname.h>
+#include <quote.h>
 #include <quotearg.h>
+#include <relocatable.h> /* relocate2 */
 #include <timevar.h>
 
-#include "LR0.h"
-#include "closeout.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "derives.h"
 #include "files.h"
+#include "fixits.h"
 #include "getargs.h"
 #include "gram.h"
-#include "lalr.h"
 #include "ielr.h"
+#include "lalr.h"
+#include "lr0.h"
 #include "muscle-tab.h"
 #include "nullable.h"
 #include "output.h"
-#include "print.h"
-#include "print_graph.h"
+#include "print-graph.h"
 #include "print-xml.h"
-#include <quote.h>
+#include "print.h"
 #include "reader.h"
 #include "reduce.h"
 #include "scan-code.h"
@@ -58,15 +60,22 @@
 int
 main (int argc, char *argv[])
 {
+#define DEPENDS_ON_LIBINTL 1
   set_program_name (argv[0]);
   setlocale (LC_ALL, "");
-  (void) bindtextdomain (PACKAGE, LOCALEDIR);
-  (void) bindtextdomain ("bison-runtime", LOCALEDIR);
-  (void) textdomain (PACKAGE);
+  {
+    char *cp = NULL;
+    char const *localedir = relocate2 (LOCALEDIR, &cp);
+    bindtextdomain ("bison", localedir);
+    bindtextdomain ("bison-gnulib", localedir);
+    bindtextdomain ("bison-runtime", localedir);
+    free (cp);
+  }
+  textdomain ("bison");
 
   {
     char const *cp = getenv ("LC_CTYPE");
-    if (cp && !strcmp (cp, "C"))
+    if (cp && STREQ (cp, "C"))
       set_custom_quoting (&quote_quoting_options, "'", "'");
     else
       set_quoting_style (&quote_quoting_options, locale_quoting_style);
@@ -76,12 +85,13 @@
 
   uniqstrs_new ();
   muscle_init ();
+  complain_init ();
 
   getargs (argc, argv);
 
-  timevar_report = trace_flag & trace_time;
-  init_timevar ();
-  timevar_start (TV_TOTAL);
+  timevar_enabled = trace_flag & trace_time;
+  timevar_init ();
+  timevar_start (tv_total);
 
   if (trace_flag & trace_bitsets)
     bitset_stats_enable ();
@@ -90,29 +100,29 @@
      and FATTRS.  In file reader.c.  The other parts are recorded in
      the grammar; see gram.h.  */
 
-  timevar_push (TV_READER);
-  reader ();
-  timevar_pop (TV_READER);
+  timevar_push (tv_reader);
+  reader (grammar_file);
+  timevar_pop (tv_reader);
 
-  if (complaint_issued)
+  if (complaint_status == status_complaint)
     goto finish;
 
   /* Find useless nonterminals and productions and reduce the grammar. */
-  timevar_push (TV_REDUCE);
+  timevar_push (tv_reduce);
   reduce_grammar ();
-  timevar_pop (TV_REDUCE);
+  timevar_pop (tv_reduce);
 
   /* Record other info about the grammar.  In files derives and
      nullable.  */
-  timevar_push (TV_SETS);
+  timevar_push (tv_sets);
   derives_compute ();
   nullable_compute ();
-  timevar_pop (TV_SETS);
+  timevar_pop (tv_sets);
 
   /* Compute LR(0) parser states.  See state.h for more info.  */
-  timevar_push (TV_LR0);
+  timevar_push (tv_lr0);
   generate_states ();
-  timevar_pop (TV_LR0);
+  timevar_pop (tv_lr0);
 
   /* Add lookahead sets to parser states.  Except when LALR(1) is
      requested, split states to eliminate LR(1)-relative
@@ -123,9 +133,9 @@
      lookahead is not enough to disambiguate the parsing.  In file
      conflicts.  Also resolve s/r conflicts based on precedence
      declarations.  */
-  timevar_push (TV_CONFLICTS);
+  timevar_push (tv_conflicts);
   conflicts_solve ();
-  if (!muscle_percent_define_flag_if ("lr.keep-unreachable-states"))
+  if (!muscle_percent_define_flag_if ("lr.keep-unreachable-state"))
     {
       state_number *old_to_new = xnmalloc (nstates, sizeof *old_to_new);
       state_number nstates_old = nstates;
@@ -135,59 +145,71 @@
       free (old_to_new);
     }
   conflicts_print ();
-  timevar_pop (TV_CONFLICTS);
+  timevar_pop (tv_conflicts);
 
   /* Compute the parser tables.  */
-  timevar_push (TV_ACTIONS);
+  timevar_push (tv_actions);
   tables_generate ();
-  timevar_pop (TV_ACTIONS);
+  timevar_pop (tv_actions);
 
-  grammar_rules_useless_report
-    (_("rule useless in parser due to conflicts"));
+  grammar_rules_useless_report (_("rule useless in parser due to conflicts"));
 
-  /* Output file names. */
-  compute_output_file_names ();
+  print_precedence_warnings ();
 
-  /* Output the detailed report on the grammar.  */
-  if (report_flag)
+  /* Whether to generate output files.  */
+  bool generate = !(feature_flag & feature_syntax_only);
+
+  if (generate)
     {
-      timevar_push (TV_REPORT);
-      print_results ();
-      timevar_pop (TV_REPORT);
-    }
+      /* Output file names. */
+      compute_output_file_names ();
 
-  /* Output the graph.  */
-  if (graph_flag)
-    {
-      timevar_push (TV_GRAPH);
-      print_graph ();
-      timevar_pop (TV_GRAPH);
-    }
+      /* Output the detailed report on the grammar.  */
+      if (report_flag)
+        {
+          timevar_push (tv_report);
+          print_results ();
+          timevar_pop (tv_report);
+        }
 
-  /* Output xml.  */
-  if (xml_flag)
-    {
-      timevar_push (TV_XML);
-      print_xml ();
-      timevar_pop (TV_XML);
+      /* Output the graph.  */
+      if (graph_flag)
+        {
+          timevar_push (tv_graph);
+          print_graph ();
+          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)
+  if (complaint_status == status_complaint)
     goto finish;
 
   /* Lookahead tokens are no longer needed. */
-  timevar_push (TV_FREE);
+  timevar_push (tv_free);
   lalr_free ();
-  timevar_pop (TV_FREE);
+  timevar_pop (tv_free);
 
   /* Output the tables and the parser to ftable.  In file output.  */
-  timevar_push (TV_PARSER);
-  output ();
-  timevar_pop (TV_PARSER);
+  if (generate)
+    {
+      timevar_push (tv_parser);
+      output ();
+      timevar_pop (tv_parser);
+    }
 
-  timevar_push (TV_FREE);
+ finish:
+
+  timevar_push (tv_free);
   nullable_free ();
   derives_free ();
   tables_free ();
@@ -201,22 +223,32 @@
      contains things such as user actions, prologue, epilogue etc.  */
   gram_scanner_free ();
   muscle_free ();
-  uniqstrs_free ();
   code_scanner_free ();
   skel_scanner_free ();
-  quotearg_free ();
-  timevar_pop (TV_FREE);
+  timevar_pop (tv_free);
 
   if (trace_flag & trace_bitsets)
     bitset_stats_dump (stderr);
 
- finish:
-
   /* Stop timing and print the times.  */
-  timevar_stop (TV_TOTAL);
+  timevar_stop (tv_total);
   timevar_print (stderr);
 
-  cleanup_caret ();
+  /* Fix input file now, even if there are errors: that's less
+     warnings in the following runs.  */
+  if (!fixits_empty ())
+    {
+      if (update_flag)
+        fixits_run ();
+      else
+        complain (NULL, Wother,
+                  _("fix-its can be applied.  Rerun with option '--update'."));
+      fixits_free ();
+    }
+  uniqstrs_free ();
 
-  return complaint_issued ? EXIT_FAILURE : EXIT_SUCCESS;
+  complain_free ();
+  quotearg_free ();
+
+  return complaint_status ? EXIT_FAILURE : EXIT_SUCCESS;
 }
diff --git a/src/muscle-tab.c b/src/muscle-tab.c
index 936af70..cc7dbdf 100644
--- a/src/muscle-tab.c
+++ b/src/muscle-tab.c
@@ -1,6 +1,6 @@
 /* Muscle table manager for Bison.
 
-   Copyright (C) 2001-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,12 +21,38 @@
 #include "system.h"
 
 #include <hash.h>
+#include <quote.h>
 
 #include "complain.h"
 #include "files.h"
+#include "fixits.h"
 #include "getargs.h"
 #include "muscle-tab.h"
-#include "quote.h"
+
+muscle_kind
+muscle_kind_new (char const *k)
+{
+  if (STREQ (k, "code"))
+    return muscle_code;
+  else if (STREQ (k, "keyword"))
+    return muscle_keyword;
+  else if (STREQ (k, "string"))
+    return muscle_string;
+  abort ();
+}
+
+char const *
+muscle_kind_string (muscle_kind k)
+{
+  switch (k)
+    {
+    case muscle_code:    return "code";
+    case muscle_keyword: return "keyword";
+    case muscle_string:  return "string";
+    }
+  abort ();
+}
+
 
 /* A key-value pair, along with storage that can be reclaimed when
    this pair is no longer needed.  */
@@ -35,8 +61,21 @@
   char const *key;
   char const *value;
   char *storage;
+  muscle_kind kind;
 } muscle_entry;
 
+
+/* The name of muscle for the %define variable VAR (corresponding to
+   FIELD, if defined).  */
+static uniqstr
+muscle_name (char const *var, char const *field)
+{
+  if (field)
+    return UNIQSTR_CONCAT ("percent_define_", field, "(", var, ")");
+  else
+    return UNIQSTR_CONCAT ("percent_define(", var, ")");
+}
+
 /* An obstack used to create some entries.  */
 struct obstack muscle_obstack;
 
@@ -50,7 +89,7 @@
 {
   muscle_entry const *m1 = x;
   muscle_entry const *m2 = y;
-  return strcmp (m1->key, m2->key) == 0;
+  return STREQ (m1->key, m2->key);
 }
 
 static size_t
@@ -60,10 +99,18 @@
   return hash_string (m->key, tablesize);
 }
 
-/*-----------------------------------------------------------------.
-| Create the MUSCLE_TABLE, and initialize it with default values.  |
-| Also set up the MUSCLE_OBSTACK.                                  |
-`-----------------------------------------------------------------*/
+/* Create a fresh muscle name KEY, and insert in the hash table.  */
+static void *
+muscle_entry_new (char const *key)
+{
+  muscle_entry *res = xmalloc (sizeof *res);
+  res->key = key;
+  res->value = NULL;
+  res->storage = NULL;
+  if (!hash_insert (muscle_table, res))
+    xalloc_die ();
+  return res;
+}
 
 static void
 muscle_entry_free (void *entry)
@@ -79,18 +126,14 @@
   /* Initialize the muscle obstack.  */
   obstack_init (&muscle_obstack);
 
-  muscle_table = hash_initialize (HT_INITIAL_CAPACITY, NULL, hash_muscle,
-				  hash_compare_muscles, muscle_entry_free);
+  muscle_table = hash_xinitialize (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)
 {
@@ -98,74 +141,63 @@
   obstack_free (&muscle_obstack, NULL);
 }
 
+/* Look for the muscle named KEY.  Return NULL if does not exist.  */
+static
+muscle_entry *
+muscle_lookup (char const *key)
+{
+  muscle_entry probe;
+  probe.key = key;
+  return hash_lookup (muscle_table, &probe);
+}
 
 
-/*------------------------------------------------------------.
-| 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
+  muscle_entry *entry = muscle_lookup (key);
+  if (entry)
     free (entry->storage);
+  else
+    /* First insertion in the hash. */
+    entry = muscle_entry_new (key);
   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.                       |
-`-------------------------------------------------------------------*/
+/* 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.  If VALUE does not end
+   with TERMINATOR, append one.  */
 
-void
-muscle_grow (const char *key, const char *val, const char *separator)
+static void
+muscle_grow (const char *key, const char *val,
+             const char *separator, const char *terminator)
 {
-  muscle_entry probe;
-  muscle_entry *entry = NULL;
-
-  probe.key = key;
-  entry = hash_lookup (muscle_table, &probe);
-
-  if (!entry)
+  muscle_entry *entry = muscle_lookup (key);
+  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);
+      obstack_sgrow (&muscle_obstack, entry->value);
+      obstack_sgrow (&muscle_obstack, separator);
+      free (entry->storage);
     }
   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);
-    }
+    entry = muscle_entry_new (key);
+
+  obstack_sgrow (&muscle_obstack, val);
+
+  size_t vals = strlen (val);
+  size_t terms = strlen (terminator);
+  if (terms <= vals
+      && STRNEQ (val + vals - terms, terminator))
+    obstack_sgrow (&muscle_obstack, terminator);
+
+  {
+    char const *new_val = obstack_finish0 (&muscle_obstack);
+    entry->value = entry->storage = xstrdup (new_val);
+    obstack_free (&muscle_obstack, new_val);
+  }
 }
 
 /*------------------------------------------------------------------.
@@ -176,14 +208,12 @@
 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_sgrow (&muscle_obstack, ")dnl\n[");
+  char const *extension = obstack_finish0 (&muscle_obstack);
+  muscle_grow (key, extension, "", "");
   obstack_free (&muscle_obstack, extension);
 }
 
@@ -197,105 +227,74 @@
 muscle_code_grow (const char *key, const char *val, location loc)
 {
   muscle_syncline_grow (key, loc);
-  muscle_grow (key, val, "\n");
+  muscle_grow (key, val, "", "\n");
 }
 
 
-void muscle_pair_list_grow (const char *muscle,
-			    const char *a1, const char *a2)
+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");
+  char const *pair = obstack_finish0 (&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;
+  muscle_entry *entry = muscle_lookup (key);
+  return entry ? entry->value : 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)
+  muscle_entry *entry = muscle_lookup (key);
+  if (entry)
     {
-      aver (result->value == result->storage);
-      return result->storage;
+      aver (entry->value == entry->storage);
+      return entry->storage;
     }
   return NULL;
 }
 
 
-/* In the format `file_name:line.column', append BOUND to MUSCLE.  Use
+/* 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_printf (&muscle_obstack, ":%d.%d@@%d]]", bound.line, bound.column, bound.byte);
+  char const *extension = obstack_finish0 (&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
+void
 muscle_location_grow (char const *key, location loc)
 {
   muscle_boundary_grow (key, loc.start);
-  muscle_grow (key, "", ", ");
+  muscle_grow (key, "", ", ", "");
   muscle_boundary_grow (key, loc.end);
 }
 
 #define COMMON_DECODE(Value)                                    \
   case '$':                                                     \
-    aver (*++(Value) == ']');                                   \
-    aver (*++(Value) == '[');                                   \
+    ++(Value); aver (*(Value) == '[');                          \
+    ++(Value); aver (*(Value) == ']');                          \
+    ++(Value); aver (*(Value) == '[');                          \
     obstack_sgrow (&muscle_obstack, "$");                       \
     break;                                                      \
   case '@':                                                     \
@@ -315,11 +314,7 @@
 static char *
 string_decode (char const *key)
 {
-  char const *value;
-  char *value_decoded;
-  char *result;
-
-  value = muscle_find_const (key);
+  char const *value = muscle_find_const (key);
   if (!value)
     return NULL;
   do {
@@ -332,21 +327,20 @@
           break;
       }
   } while (*value++);
-  value_decoded = obstack_finish (&muscle_obstack);
-  result = xstrdup (value_decoded);
+  char const *value_decoded = obstack_finish (&muscle_obstack);
+  char *res = xstrdup (value_decoded);
   obstack_free (&muscle_obstack, value_decoded);
-  return result;
+  return res;
 }
 
 /* Reverse of muscle_location_grow.  */
 static location
-location_decode (char const *key)
+location_decode (char const *value)
 {
-  location loc;
-  char const *value = muscle_find_const (key);
   aver (value);
   aver (*value == '[');
-  aver (*++value == '[');
+  ++value; aver (*value == '[');
+  location loc;
   while (*++value)
     switch (*value)
       {
@@ -355,30 +349,26 @@
           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;
-              }
-          }
+          ++value; aver (*value == ']');
+          char *boundary_str = obstack_finish0 (&muscle_obstack);
+          switch (*++value)
+            {
+            case ',':
+              boundary_set_from_string (&loc.start, boundary_str);
+              obstack_free (&muscle_obstack, boundary_str);
+              ++value; aver (*value == ' ');
+              ++value; aver (*value == '[');
+              ++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);
@@ -389,70 +379,169 @@
 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_grow (key, "[[[[", ",", "");
+  muscle_grow (key, user_name, "", "");
+  muscle_grow (key, "]], ", "", "");
   muscle_location_grow (key, loc);
-  muscle_grow (key, "]]", "");
+  muscle_grow (key, "]]", "", "");
+}
+
+
+/** Return an allocated string that represents the %define directive
+    that performs the assignment.
+
+    @param assignment "VAR", or "VAR=VAL".
+    @param value      default value if VAL \a assignment has no '='.
+
+    For instance:
+    "foo", NULL      => "%define foo"
+    "foo", "baz"     => "%define foo baz"
+    "foo=bar", NULL  => "%define foo bar"
+    "foo=bar", "baz" => "%define foo bar"
+    "foo=", NULL     => "%define foo"
+    "foo=", "baz"    => "%define foo"
+ */
+
+static
+char *
+define_directive (char const *assignment,
+                  muscle_kind kind,
+                  char const *value)
+{
+  char *eq = strchr (assignment, '=');
+  char const *fmt
+    = eq || !value || !*value ? "%%define %s"
+    : kind == muscle_code     ? "%%define %s {%s}"
+    : kind == muscle_string   ? "%%define %s \"%s\""
+    :                           "%%define %s %s";
+  char *res = xmalloc (strlen (fmt) + strlen (assignment)
+                       + (value ? strlen (value) : 0));
+  sprintf (res, fmt, assignment, value);
+  eq = strchr (res, '=');
+  if (eq)
+    *eq = eq[1] ? ' ' : '\0';
+  return res;
 }
 
 /** If the \a variable name is obsolete, return the name to use,
- * otherwise \a variable. */
+ * otherwise \a variable.  If the \a value is obsolete, update it too.
+ *
+ * Allocates the returned value if needed, otherwise the returned
+ * value is exactly \a variable.  */
 static
 char const *
-muscle_percent_variable_update (char const *variable)
+muscle_percent_variable_update (char const *variable,
+                                muscle_kind kind,
+                                char const **value,
+                                char **old, char **upd)
 {
   typedef struct
   {
     const char *obsolete;
     const char *updated;
+    muscle_kind kind;
   } conversion_type;
   const conversion_type conversion[] =
+  {
+    { "%error-verbose",             "parse.error=verbose",       muscle_keyword },
+    { "%error_verbose",             "parse.error=verbose",       muscle_keyword },
+    { "abstract",                   "api.parser.abstract",       muscle_keyword },
+    { "annotations",                "api.parser.annotations",    muscle_code },
+    { "api.push_pull",              "api.push-pull",             muscle_keyword },
+    { "api.tokens.prefix",          "api.token.prefix",          muscle_code },
+    { "extends",                    "api.parser.extends",        muscle_keyword },
+    { "final",                      "api.parser.final",          muscle_keyword },
+    { "implements",                 "api.parser.implements",     muscle_keyword },
+    { "lex_symbol",                 "api.token.constructor",     -1 },
+    { "location_type",              "api.location.type",         muscle_code },
+    { "lr.default-reductions",      "lr.default-reduction",      muscle_keyword },
+    { "lr.keep-unreachable-states", "lr.keep-unreachable-state", muscle_keyword },
+    { "lr.keep_unreachable_states", "lr.keep-unreachable-state", muscle_keyword },
+    { "namespace",                  "api.namespace",             muscle_code },
+    { "parser_class_name",          "api.parser.class",          muscle_code },
+    { "public",                     "api.parser.public",         muscle_keyword },
+    { "strictfp",                   "api.parser.strictfp",       muscle_keyword },
+    { "stype",                      "api.value.type",            -1 },
+    { "variant=",                   "api.value.type=variant",    -1 },
+    { "variant=true",               "api.value.type=variant",    -1 },
+    { NULL, NULL, -1, }
+  };
+
+  for (conversion_type const *c = conversion; c->obsolete; ++c)
     {
-      { "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;
+      char const *eq = strchr (c->obsolete, '=');
+      if (eq
+          ? (!strncmp (c->obsolete, variable, eq - c->obsolete)
+             && STREQ (eq + 1, *value))
+          : STREQ (c->obsolete, variable))
+        {
+          /* Generate the deprecation warning. */
+          *old = c->obsolete[0] == '%'
+            ? xstrdup (c->obsolete)
+            : define_directive (c->obsolete, kind, *value);
+          *upd = define_directive (c->updated, c->kind, *value);
+          /* Update the variable and its value.  */
+          {
+            char *res = xstrdup (c->updated);
+            char *eq2 = strchr (res, '=');
+            if (eq2)
+              {
+                *eq2 = '\0';
+                *value = eq2 + 1;
+              }
+            return res;
+          }
+        }
+    }
+  return variable;
 }
 
 void
 muscle_percent_define_insert (char const *var, location variable_loc,
+                              muscle_kind kind,
                               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, ")");
+  char *old = NULL;
+  char *upd = NULL;
+  char const *variable
+    = muscle_percent_variable_update (var, kind,
+                                      &value, &old, &upd);
+  uniqstr name = muscle_name (variable, NULL);
+  uniqstr loc_name = muscle_name (variable, "loc");
+  uniqstr syncline_name = muscle_name (variable, "syncline");
+  uniqstr how_name = muscle_name (variable, "how");
+  uniqstr kind_name = muscle_name (variable, "kind");
 
   /* Command-line options are processed before the grammar file.  */
-  if (how == MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE
-      && muscle_find_const (name))
+  bool warned = false;
+  if (how == MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE)
     {
-      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"));
+      char const *current_value = muscle_find_const (name);
+      if (current_value)
+        {
+          muscle_percent_define_how how_old
+            = atoi (muscle_find_const (how_name));
+          if (how_old == MUSCLE_PERCENT_DEFINE_F)
+            goto end;
+          int i = 0;
+          /* If assigning the same value, make it a warning.  */
+          warnings warn = STREQ (value, current_value) ? Wother : complaint;
+          complain_indent (&variable_loc, warn, &i,
+                           _("%%define variable %s redefined"),
+                           quote (variable));
+          i += SUB_INDENT;
+          location loc = muscle_percent_define_get_loc (variable);
+          complain_indent (&loc, warn, &i, _("previous definition"));
+          fixits_register (&variable_loc, "");
+          warned = true;
+        }
     }
 
+  if (!warned && old && upd)
+    deprecated_directive (&variable_loc, old, upd);
+
   MUSCLE_INSERT_STRING (name, value);
   muscle_insert (loc_name, "");
   muscle_location_grow (loc_name, variable_loc);
@@ -461,124 +550,175 @@
   muscle_user_name_list_grow ("percent_define_user_variables", variable,
                               variable_loc);
   MUSCLE_INSERT_INT (how_name, how);
+  MUSCLE_INSERT_STRING (kind_name, muscle_kind_string (kind));
+ end:
+  free (old);
+  free (upd);
+  if (variable != var)
+    free ((char *) variable);
+}
+
+/* This is used for backward compatibility, e.g., "%define api.pure"
+   supersedes "%pure-parser".  */
+void
+muscle_percent_define_ensure (char const *variable, location loc,
+                              bool value)
+{
+  uniqstr name = muscle_name (variable, NULL);
+  char const *val = value ? "" : "false";
+
+  /* Don't complain is VARIABLE is already defined, but be sure to set
+     its value to VAL.  */
+  if (!muscle_find_const (name)
+      || muscle_percent_define_flag_if (variable) != value)
+    muscle_percent_define_insert (variable, loc, muscle_keyword, val,
+                                  MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+}
+
+/* Mark %define VARIABLE as used.  */
+static void
+muscle_percent_define_use (char const *variable)
+{
+  muscle_insert (muscle_name (variable, "bison_variables"), "");
+}
+
+/* The value of %define variable VARIABLE (corresponding to FIELD, if
+   defined).  Do not register as used, but diagnose unset variables.  */
+
+static
+char const *
+muscle_percent_define_get_raw (char const *variable, char const *field)
+{
+  uniqstr name = muscle_name (variable, field);
+  char const *res = muscle_find_const (name);
+  if (!res)
+    complain (NULL, fatal, _("%s: undefined %%define variable %s"),
+              "muscle_percent_define_get_raw", quote (variable));
+  return res;
 }
 
 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);
+  uniqstr name = muscle_name (variable, NULL);
+  char *value = string_decode (name);
   if (!value)
     value = xstrdup ("");
+  muscle_percent_define_use (variable);
   return value;
 }
 
+/* The kind of VARIABLE.  An error if undefined.  */
+static muscle_kind
+muscle_percent_define_get_kind (char const *variable)
+{
+  return muscle_kind_new (muscle_percent_define_get_raw (variable, "kind"));
+}
+
+/* Check the kind of VARIABLE.  An error if undefined.  */
+static void
+muscle_percent_define_check_kind (char const *variable, muscle_kind kind)
+{
+  if (muscle_percent_define_get_kind (variable) != kind)
+    {
+      location loc = muscle_percent_define_get_loc (variable);
+      switch (kind)
+        {
+        case muscle_code:
+          complain (&loc, Wdeprecated,
+                    _("%%define variable '%s' requires '{...}' values"),
+                    variable);
+          break;
+        case muscle_keyword:
+          complain (&loc, Wdeprecated,
+                    _("%%define variable '%s' requires keyword values"),
+                    variable);
+          break;
+        case muscle_string:
+          complain (&loc, Wdeprecated,
+                    _("%%define variable '%s' requires '\"...\"' values"),
+                    variable);
+          break;
+        }
+    }
+}
+
+
 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);
+  return location_decode (muscle_percent_define_get_raw (variable, "loc"));
 }
 
 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;
+  return muscle_percent_define_get_raw (variable, "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)
+  if (muscle_find_const (muscle_name (variable, NULL)))
     {
-      muscle_insert (usage_name, "");
+      muscle_percent_define_use (variable);
       return true;
     }
-
-  return false;
+  else
+    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, ")");
+  uniqstr invalid_boolean_name = muscle_name (variable, "invalid_boolean");
+  bool res = false;
 
   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;
+      muscle_percent_define_check_kind (variable, muscle_keyword);
+      if (value[0] == '\0' || STREQ (value, "true"))
+        res = true;
+      else if (STREQ (value, "false"))
+        res = 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));
+          location loc = muscle_percent_define_get_loc (variable);
+          complain (&loc, complaint,
+                    _("invalid value for %%define Boolean variable %s"),
+                    quote (variable));
         }
       free (value);
     }
   else
-    fatal(_("%s: undefined %%define variable %s"),
-          "muscle_percent_define_flag", quote (variable));
+    complain (NULL, fatal, _("%s: undefined %%define variable %s"),
+              "muscle_percent_define_flag", quote (variable));
 
-  return result;
+  return res;
 }
 
 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, ")");
+  uniqstr name = muscle_name (variable, NULL);
   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, "");
+      MUSCLE_INSERT_STRING (muscle_name (variable, "kind"), "keyword");
+      {
+        uniqstr loc_name = muscle_name (variable, "loc");
+        location loc;
+        loc.start.file = "<default value>";
+        loc.start.line = -1;
+        loc.start.column = -1;
+        loc.start.byte = -1;
+        loc.end = loc.start;
+        muscle_insert (loc_name, "");
+        muscle_location_grow (loc_name, loc);
+      }
+      muscle_insert (muscle_name (variable, "syncline"), "");
     }
 }
 
@@ -588,41 +728,34 @@
   for (; *values; ++values)
     {
       char const * const *variablep = values;
-      char const *name;
-      char *value;
-
-      name = UNIQSTR_CONCAT ("percent_define(", *variablep, ")");
-
-      value = string_decode (name);
+      uniqstr name = muscle_name (*variablep, NULL);
+      char *value = string_decode (name);
+      muscle_percent_define_check_kind (*variablep, muscle_keyword);
       if (value)
         {
           for (++values; *values; ++values)
-            {
-              if (0 == strcmp (value, *values))
-                break;
-            }
+            if (STREQ (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));
+              int i = 0;
+              complain_indent (&loc, complaint, &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));
+                complain_indent (&loc, complaint | no_caret | silent, &i,
+                                 _("accepted value: %s"), quote (*values));
             }
           else
-            {
-              while (*values)
-                ++values;
-            }
+            while (*values)
+              ++values;
           free (value);
         }
       else
-        fatal (_("%s: undefined %%define variable %s"),
-               "muscle_percent_define_check_values", quote (*variablep));
+        complain (NULL, fatal, _("%s: undefined %%define variable %s"),
+                  "muscle_percent_define_check_values", quote (*variablep));
     }
 }
 
@@ -630,8 +763,7 @@
 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, ")");
+  char const *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);
@@ -645,8 +777,9 @@
 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);
+  fprintf (out,
+           "m4_define([b4_%s],\n"
+           "[[%s]])\n\n\n", entry->key, entry->value);
   return true;
 }
 
@@ -657,11 +790,6 @@
 }
 
 
-/*----------------------------------------------------------------.
-| Output the definition of all the current muscles into a list of |
-| m4_defines.                                                     |
-`----------------------------------------------------------------*/
-
 void
 muscles_m4_output (FILE *out)
 {
diff --git a/src/muscle-tab.h b/src/muscle-tab.h
index 696103f..1aefdf3 100644
--- a/src/muscle-tab.h
+++ b/src/muscle-tab.h
@@ -1,6 +1,6 @@
 /* Muscle table manager for Bison,
 
-   Copyright (C) 2001-2003, 2006-2007, 2009-2012 Free Software
+   Copyright (C) 2001-2003, 2006-2015, 2018-2019 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -25,68 +25,84 @@
 
 # include "location.h"
 
+/* The kind of value associated to this muscle, depending on the
+   syntax of the value: keyword (no delimiter, e.g., true), string
+   (double quotes, e.g., "foo.h"), or code (braces, e.g., {int}).  */
+typedef enum
+{
+  muscle_code,
+  muscle_keyword,
+  muscle_string
+} muscle_kind;
+
+/* Conversion from string.  */
+muscle_kind muscle_kind_new (char const *k);
+
+/* Conversion to string.  */
+char const *muscle_kind_string (muscle_kind k);
+
+
+/* Create the MUSCLE_TABLE, and initialize it with default values.
+   Also set up the MUSCLE_OBSTACK.  */
 void muscle_init (void);
+
+/* Insert (KEY, VALUE).  If KEY already existed, overwrite the
+   previous value.  Otherwise create as a muscle_string type.  */
 void muscle_insert (char const *key, char const *value);
+
+/* 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);
+
+/* 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);
+
+/* Free all the memory consumed by the muscle machinery only.  */
 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);                                 \
+# define MUSCLE_INSERT_BOOL(Key, Value)         \
+  do {                                          \
+    int v__ = Value;                            \
+    MUSCLE_INSERT_INT (Key, v__);               \
   } while (0)
 
-#define MUSCLE_INSERT_INT(Key, Value)                           \
+# define MUSCLE_INSERTF(Key, Format, Value)                     \
   do {                                                          \
-    obstack_printf (&muscle_obstack, "%d", Value);              \
-    obstack_1grow (&muscle_obstack, 0);                         \
-    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+    obstack_printf (&muscle_obstack, Format, Value);            \
+    muscle_insert (Key, obstack_finish0 (&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_INT(Key, Value)          \
+  MUSCLE_INSERTF (Key, "%d", Value)
 
-#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_LONG_INT(Key, Value)     \
+  MUSCLE_INSERTF (Key, "%ld", Value)
 
-#define MUSCLE_INSERT_STRING(Key, Value)                        \
+/* Key -> Value, but don't apply escaping to Value. */
+# define MUSCLE_INSERT_STRING_RAW(Key, Value)   \
+  MUSCLE_INSERTF (Key, "%s", Value)
+
+/* Key -> Value, applying M4 escaping to Value. */
+# define MUSCLE_INSERT_STRING(Key, Value)                       \
   do {                                                          \
     obstack_escape (&muscle_obstack, Value);                    \
-    obstack_1grow (&muscle_obstack, 0);                         \
-    muscle_insert (Key, obstack_finish (&muscle_obstack));      \
+    muscle_insert (Key, obstack_finish0 (&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);
+/* Key -> Value, applying C escaping to Value (and then M4). */
+# define MUSCLE_INSERT_C_STRING(Key, Value)                     \
+  MUSCLE_INSERT_STRING (Key, quotearg_style (c_quoting_style, Value))
 
 
 /* Append VALUE to the current value of KEY, using muscle_grow.  But
-   in addition, issue a synchronization line for the location LOC.  */
-
+   in addition, issue a synchronization line for the location LOC.
+   Be sure to append on a new line.  */
 void muscle_code_grow (const char *key, const char *value, location loc);
 
 
@@ -99,14 +115,20 @@
 
 /* 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 `]'.  */
+   with digraphs, so it must not contain '[' or ']'.  */
 void muscle_user_name_list_grow (char const *key, char const *user_name,
                                  location loc);
 
+/* In the format '[[file_name:line.column]], [[file_name:line.column]]',
+   append LOC to MUSCLE.  Use digraphs for special characters in each
+   file name.  */
+void muscle_location_grow (char const *key, 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_D = 0,
+  MUSCLE_PERCENT_DEFINE_F,
   MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE
 } muscle_percent_define_how;
 
@@ -120,9 +142,17 @@
    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,
+                                   muscle_kind kind,
                                    char const *value,
                                    muscle_percent_define_how how);
 
+/* Make sure that VARIABLE is set to the boolean VALUE.  Warn on mismatches
+   only, but accept repeated declaration.  Used for backward compatibility
+   between old directives such as %pure-parser, and the recommended use of
+   variables (%define api.pure).   */
+void muscle_percent_define_ensure (char const *variable, location variable_loc,
+                                   bool value);
+
 /* 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
@@ -133,7 +163,7 @@
 /* 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.
+   appropriate 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);
@@ -186,6 +216,8 @@
 void muscle_percent_code_grow (char const *qualifier, location qualifier_loc,
                                char const *code, location code_loc);
 
+/* Output the definition of all the current muscles into a list of
+   m4_defines.  */
 void muscles_m4_output (FILE *out);
 
 #endif /* not MUSCLE_TAB_H_ */
diff --git a/src/named-ref.c b/src/named-ref.c
index bf7a3f7..b9f49c4 100644
--- a/src/named-ref.c
+++ b/src/named-ref.c
@@ -1,6 +1,6 @@
 /* Named symbol references for Bison
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/named-ref.h b/src/named-ref.h
index 00c972c..bc9f99f 100644
--- a/src/named-ref.h
+++ b/src/named-ref.h
@@ -1,6 +1,6 @@
 /* Named symbol references for Bison
 
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,8 +20,8 @@
 #ifndef NAMED_REF_H_
 # define NAMED_REF_H_
 
-#include "location.h"
-#include "uniqstr.h"
+# include "location.h"
+# include "uniqstr.h"
 
 /* Named reference object. Keeps information about
    a symbolic name of a symbol in a rule. */
diff --git a/src/nullable.c b/src/nullable.c
index 1e7f5d1..7d6cf9c 100644
--- a/src/nullable.c
+++ b/src/nullable.c
@@ -1,7 +1,7 @@
 /* Calculate which nonterminals can expand into the null string for Bison.
 
-   Copyright (C) 1984, 1989, 2000-2006, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2006, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -47,8 +47,8 @@
   int i;
   fputs ("NULLABLE\n", out);
   for (i = ntokens; i < nsyms; i++)
-    fprintf (out, "\t%s: %s\n", symbols[i]->tag,
-	     nullable[i - ntokens] ? "yes" : "no");
+    fprintf (out, "  %s: %s\n", symbols[i]->tag,
+             nullable[i - ntokens] ? "yes" : "no");
   fputs ("\n\n", out);
 }
 
@@ -77,52 +77,52 @@
   for (ruleno = 0; ruleno < nrules; ++ruleno)
     if (rules[ruleno].useful)
       {
-	rule *rules_ruleno = &rules[ruleno];
-	if (rules_ruleno->rhs[0] >= 0)
-	  {
-	    /* This rule has a non empty RHS. */
-	    item_number *rp = NULL;
-	    bool any_tokens = false;
-	    for (rp = rules_ruleno->rhs; *rp >= 0; ++rp)
-	      if (ISTOKEN (*rp))
-		any_tokens = true;
+        rule *rules_ruleno = &rules[ruleno];
+        if (rules_ruleno->rhs[0] >= 0)
+          {
+            /* This rule has a non empty RHS. */
+            item_number *rp = NULL;
+            bool any_tokens = false;
+            for (rp = rules_ruleno->rhs; *rp >= 0; ++rp)
+              if (ISTOKEN (*rp))
+                any_tokens = true;
 
-	    /* This rule has only nonterminals: schedule it for the second
-	       pass.  */
-	    if (!any_tokens)
-	      for (rp = rules_ruleno->rhs; *rp >= 0; ++rp)
-		{
-		  rcount[ruleno]++;
-		  p->next = rsets[*rp - ntokens];
-		  p->value = rules_ruleno;
-		  rsets[*rp - ntokens] = p;
-		  p++;
-		}
-	  }
-	else
-	  {
-	    /* This rule has an empty RHS. */
-	    aver (item_number_as_rule_number (rules_ruleno->rhs[0])
-		  == ruleno);
-	    if (rules_ruleno->useful
-		&& ! nullable[rules_ruleno->lhs->number - ntokens])
-	      {
-		nullable[rules_ruleno->lhs->number - ntokens] = true;
-		*s2++ = rules_ruleno->lhs->number;
-	      }
-	  }
+            /* This rule has only nonterminals: schedule it for the second
+               pass.  */
+            if (!any_tokens)
+              for (rp = rules_ruleno->rhs; *rp >= 0; ++rp)
+                {
+                  rcount[ruleno]++;
+                  p->next = rsets[*rp - ntokens];
+                  p->value = rules_ruleno;
+                  rsets[*rp - ntokens] = p;
+                  p++;
+                }
+          }
+        else
+          {
+            /* This rule has an empty RHS. */
+            aver (item_number_as_rule_number (rules_ruleno->rhs[0])
+                  == ruleno);
+            if (rules_ruleno->useful
+                && ! nullable[rules_ruleno->lhs->number - ntokens])
+              {
+                nullable[rules_ruleno->lhs->number - ntokens] = true;
+                *s2++ = rules_ruleno->lhs->number;
+              }
+          }
       }
 
   while (s1 < s2)
     for (p = rsets[*s1++ - ntokens]; p; p = p->next)
       {
-	rule *r = p->value;
-	if (--rcount[r->number] == 0)
-	  if (r->useful && ! nullable[r->lhs->number - ntokens])
-	    {
-	      nullable[r->lhs->number - ntokens] = true;
-	      *s2++ = r->lhs->number;
-	    }
+        rule *r = p->value;
+        if (--rcount[r->number] == 0)
+          if (r->useful && ! nullable[r->lhs->number - ntokens])
+            {
+              nullable[r->lhs->number - ntokens] = true;
+              *s2++ = r->lhs->number;
+            }
       }
 
   free (squeue);
diff --git a/src/nullable.h b/src/nullable.h
index f7b2912..60caf3d 100644
--- a/src/nullable.h
+++ b/src/nullable.h
@@ -1,6 +1,7 @@
 /* Part of the bison parser generator,
 
-   Copyright (C) 2000, 2002, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/output.c b/src/output.c
index 3852729..c5ebe75 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1,7 +1,7 @@
 /* Output the generated parsing program for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,9 +21,9 @@
 #include <config.h>
 #include "system.h"
 
-#include <configmake.h>
-#include <error.h>
+#include <filename.h> /* IS_PATH_WITH_DIR */
 #include <get-errno.h>
+#include <path-join.h>
 #include <quotearg.h>
 #include <spawn-pipe.h>
 #include <timevar.h>
@@ -36,6 +36,7 @@
 #include "muscle-tab.h"
 #include "output.h"
 #include "reader.h"
+#include "reduce.h"
 #include "scan-code.h"    /* max_left_semantic_context */
 #include "scan-skel.h"
 #include "symtab.h"
@@ -52,61 +53,50 @@
 `-------------------------------------------------------------------*/
 
 
-#define GENERATE_MUSCLE_INSERT_TABLE(Name, Type)			\
-									\
-static void								\
-Name (char const *name,							\
-      Type *table_data,							\
-      Type first,							\
-      int begin,							\
-      int end)								\
-{									\
-  Type min = first;							\
-  Type max = first;							\
-  long int lmin;							\
-  long int lmax;							\
-  int i;								\
-  int j = 1;								\
-									\
-  obstack_printf (&format_obstack, "%6d", first);			\
-  for (i = begin; i < end; ++i)						\
-    {									\
-      obstack_1grow (&format_obstack, ',');				\
-      if (j >= 10)							\
-	{								\
-	  obstack_sgrow (&format_obstack, "\n  ");			\
-	  j = 1;							\
-	}								\
-      else								\
-	++j;								\
-      obstack_printf (&format_obstack, "%6d", table_data[i]);		\
-      if (table_data[i] < min)						\
-	min = table_data[i];						\
-      if (max < table_data[i])						\
-	max = table_data[i];						\
-    }									\
-  obstack_1grow (&format_obstack, 0);					\
-  muscle_insert (name, obstack_finish (&format_obstack));		\
-									\
-  lmin = min;								\
-  lmax = max;								\
-  /* Build `NAME_min' and `NAME_max' in the obstack. */			\
-  obstack_printf (&format_obstack, "%s_min", name);			\
-  obstack_1grow (&format_obstack, 0);					\
-  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmin);	\
-  obstack_printf (&format_obstack, "%s_max", name);			\
-  obstack_1grow (&format_obstack, 0);					\
-  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmax);	\
+#define GENERATE_MUSCLE_INSERT_TABLE(Name, Type)                        \
+                                                                        \
+static void                                                             \
+Name (char const *name, Type *table_data, Type first,                   \
+      int begin, int end)                                               \
+{                                                                       \
+  Type min = first;                                                     \
+  Type max = first;                                                     \
+  int j = 1;                                                            \
+                                                                        \
+  obstack_printf (&format_obstack, "%6d", first);                       \
+  for (int i = begin; i < end; ++i)                                     \
+    {                                                                   \
+      obstack_1grow (&format_obstack, ',');                             \
+      if (j >= 10)                                                      \
+        {                                                               \
+          obstack_sgrow (&format_obstack, "\n  ");                      \
+          j = 1;                                                        \
+        }                                                               \
+      else                                                              \
+        ++j;                                                            \
+      obstack_printf (&format_obstack, "%6d", table_data[i]);           \
+      if (table_data[i] < min)                                          \
+        min = table_data[i];                                            \
+      if (max < table_data[i])                                          \
+        max = table_data[i];                                            \
+    }                                                                   \
+  muscle_insert (name, obstack_finish0 (&format_obstack));              \
+                                                                        \
+  long lmin = min;                                                      \
+  long lmax = max;                                                      \
+  /* Build 'NAME_min' and 'NAME_max' in the obstack. */                 \
+  obstack_printf (&format_obstack, "%s_min", name);                     \
+  MUSCLE_INSERT_LONG_INT (obstack_finish0 (&format_obstack), lmin);     \
+  obstack_printf (&format_obstack, "%s_max", name);                     \
+  MUSCLE_INSERT_LONG_INT (obstack_finish0 (&format_obstack), lmax);     \
 }
 
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_int_table, int)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_base_table, base_number)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_rule_number_table, rule_number)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_symbol_number_table, symbol_number)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_item_number_table, item_number)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_state_number_table, state_number)
-
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_int_table, int)
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_base_table, base_number)
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_rule_number_table, rule_number)
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_symbol_number_table, symbol_number)
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_item_number_table, item_number)
+GENERATE_MUSCLE_INSERT_TABLE (muscle_insert_state_number_table, state_number)
 
 /*----------------------------------------------------------------.
 | Print to OUT a representation of CP quoted and escaped for M4.  |
@@ -142,6 +132,45 @@
 }
 
 
+/* Generate the b4_<MUSCLE_NAME> (e.g., b4_tname) table with the
+   symbol names (aka tags). */
+
+static void
+prepare_symbol_names (char const *muscle_name)
+{
+  /* 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 (int i = 0; i < nsyms; i++)
+    {
+      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;
+
+      if (j + width > 75)
+        {
+          obstack_sgrow (&format_obstack, "\n ");
+          j = 1;
+        }
+
+      if (i)
+        obstack_1grow (&format_obstack, ' ');
+      obstack_escape (&format_obstack, cp);
+      free (cp);
+      obstack_1grow (&format_obstack, ',');
+      j += width;
+    }
+  free (qo);
+  obstack_sgrow (&format_obstack, " ]b4_null[");
+
+  /* Finish table and store. */
+  muscle_insert (muscle_name, obstack_finish0 (&format_obstack));
+}
+
+
 /*------------------------------------------------------------------.
 | Prepare the muscles related to the symbols: translate, tname, and |
 | toknum.                                                           |
@@ -152,58 +181,25 @@
 {
   MUSCLE_INSERT_INT ("tokens_number", ntokens);
   MUSCLE_INSERT_INT ("nterms_number", nvars);
-  MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
+  MUSCLE_INSERT_INT ("symbols_number", nsyms);
+  MUSCLE_INSERT_INT ("undef_token_number", undeftoken->content->number);
   MUSCLE_INSERT_INT ("user_token_number_max", max_user_token_number);
 
   muscle_insert_symbol_number_table ("translate",
-				     token_translations,
-				     token_translations[0],
-				     1, max_user_token_number + 1);
+                                     token_translations,
+                                     token_translations[0],
+                                     1, max_user_token_number + 1);
 
   /* tname -- token names.  */
-  {
-    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 *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;
-
-	if (j + width > 75)
-	  {
-	    obstack_sgrow (&format_obstack, "\n ");
-	    j = 1;
-	  }
-
-	if (i)
-	  obstack_1grow (&format_obstack, ' ');
-	obstack_escape (&format_obstack, cp);
-        free (cp);
-	obstack_1grow (&format_obstack, ',');
-	j += width;
-      }
-    free (qo);
-    obstack_sgrow (&format_obstack, " ]b4_null[");
-
-    /* Finish table and store. */
-    obstack_1grow (&format_obstack, 0);
-    muscle_insert ("tname", obstack_finish (&format_obstack));
-  }
+  prepare_symbol_names ("tname");
 
   /* Output YYTOKNUM. */
   {
-    int i;
     int *values = xnmalloc (ntokens, sizeof *values);
-    for (i = 0; i < ntokens; ++i)
-      values[i] = symbols[i]->user_token_number;
+    for (int i = 0; i < ntokens; ++i)
+      values[i] = symbols[i]->content->user_token_number;
     muscle_insert_int_table ("toknum", values,
-			     values[0], 1, ntokens);
+                             values[0], 1, ntokens);
     free (values);
   }
 }
@@ -211,63 +207,68 @@
 
 /*-------------------------------------------------------------.
 | Prepare the muscles related to the rules: rhs, prhs, r1, r2, |
-| rline, dprec, merger.                                        |
+| rline, dprec, merger, immediate.                             |
 `-------------------------------------------------------------*/
 
 static void
 prepare_rules (void)
 {
-  rule_number r;
-  unsigned int i = 0;
+  int *prhs = xnmalloc (nrules, sizeof *prhs);
   item_number *rhs = xnmalloc (nritems, sizeof *rhs);
-  unsigned int *prhs = xnmalloc (nrules, sizeof *prhs);
-  unsigned int *rline = xnmalloc (nrules, sizeof *rline);
+  int *rline = xnmalloc (nrules, sizeof *rline);
   symbol_number *r1 = xnmalloc (nrules, sizeof *r1);
-  unsigned int *r2 = xnmalloc (nrules, sizeof *r2);
+  int *r2 = xnmalloc (nrules, sizeof *r2);
   int *dprec = xnmalloc (nrules, sizeof *dprec);
   int *merger = xnmalloc (nrules, sizeof *merger);
+  int *immediate = xnmalloc (nrules, sizeof *immediate);
 
-  for (r = 0; r < nrules; ++r)
+  /* Index in RHS.  */
+  int i = 0;
+  for (rule_number r = 0; r < nrules; ++r)
     {
-      item_number *rhsp = NULL;
       /* Index of rule R in RHS. */
       prhs[r] = i;
       /* RHS of the rule R. */
-      for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
-	rhs[i++] = *rhsp;
+      for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
+        rhs[i++] = *rhsp;
+      /* Separator in RHS. */
+      rhs[i++] = -1;
+
+      /* Line where rule was defined. */
+      rline[r] = rules[r].location.start.line;
       /* LHS of the rule R. */
       r1[r] = rules[r].lhs->number;
       /* Length of rule R's RHS. */
-      r2[r] = i - prhs[r];
-      /* Separator in RHS. */
-      rhs[i++] = -1;
-      /* Line where rule was defined. */
-      rline[r] = rules[r].location.start.line;
+      r2[r] = rule_rhs_length (&rules[r]);
       /* Dynamic precedence (GLR).  */
       dprec[r] = rules[r].dprec;
       /* Merger-function index (GLR).  */
       merger[r] = rules[r].merger;
+      /* Immediate reduction flags (GLR).  */
+      immediate[r] = rules[r].is_predicate;
     }
   aver (i == nritems);
 
   muscle_insert_item_number_table ("rhs", rhs, ritem[0], 1, nritems);
-  muscle_insert_unsigned_int_table ("prhs", prhs, 0, 0, nrules);
-  muscle_insert_unsigned_int_table ("rline", rline, 0, 0, nrules);
+  muscle_insert_int_table ("prhs", prhs, 0, 0, nrules);
+  muscle_insert_int_table ("rline", rline, 0, 0, nrules);
   muscle_insert_symbol_number_table ("r1", r1, 0, 0, nrules);
-  muscle_insert_unsigned_int_table ("r2", r2, 0, 0, nrules);
+  muscle_insert_int_table ("r2", r2, 0, 0, nrules);
   muscle_insert_int_table ("dprec", dprec, 0, 0, nrules);
   muscle_insert_int_table ("merger", merger, 0, 0, nrules);
+  muscle_insert_int_table ("immediate", immediate, 0, 0, nrules);
 
   MUSCLE_INSERT_INT ("rules_number", nrules);
   MUSCLE_INSERT_INT ("max_left_semantic_context", max_left_semantic_context);
 
-  free (rhs);
   free (prhs);
+  free (rhs);
   free (rline);
   free (r1);
   free (r2);
   free (dprec);
   free (merger);
+  free (immediate);
 }
 
 /*--------------------------------------------.
@@ -277,12 +278,11 @@
 static void
 prepare_states (void)
 {
-  state_number i;
   symbol_number *values = xnmalloc (nstates, sizeof *values);
-  for (i = 0; i < nstates; ++i)
+  for (state_number i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
   muscle_insert_symbol_number_table ("stos", values,
-				     0, 1, nstates);
+                                     0, 1, nstates);
   free (values);
 
   MUSCLE_INSERT_INT ("last", high);
@@ -291,141 +291,213 @@
 }
 
 
+/*-------------------------------------------------------.
+| Compare two symbols by type-name, and then by number.  |
+`-------------------------------------------------------*/
 
-/*---------------------------------.
-| Output the user actions to OUT.  |
-`---------------------------------*/
+static int
+symbol_type_name_cmp (const symbol **lhs, const symbol **rhs)
+{
+  int res = uniqstr_cmp ((*lhs)->content->type_name, (*rhs)->content->type_name);
+  if (!res)
+    res = (*lhs)->content->number - (*rhs)->content->number;
+  return res;
+}
+
+
+/*----------------------------------------------------------------.
+| Return a (malloc'ed) table of the symbols sorted by type-name.  |
+`----------------------------------------------------------------*/
+
+static symbol **
+symbols_by_type_name (void)
+{
+  typedef int (*qcmp_type) (const void *, const void *);
+  symbol **res = xmemdup (symbols, nsyms * sizeof *res);
+  qsort (res, nsyms, sizeof *res, (qcmp_type) &symbol_type_name_cmp);
+  return res;
+}
+
+
+/*------------------------------------------------------------------.
+| Define b4_type_names, which is a list of (lists of the numbers of |
+| symbols with same type-name).                                     |
+`------------------------------------------------------------------*/
+
+static void
+type_names_output (FILE *out)
+{
+  symbol **syms = symbols_by_type_name ();
+  fputs ("m4_define([b4_type_names],\n[", out);
+  for (int i = 0; i < nsyms; /* nothing */)
+    {
+      /* The index of the first symbol of the current type-name.  */
+      int i0 = i;
+      fputs (i ? ",\n[" : "[", out);
+      for (; i < nsyms
+           && syms[i]->content->type_name == syms[i0]->content->type_name; ++i)
+        fprintf (out, "%s%d", i != i0 ? ", " : "", syms[i]->content->number);
+      fputs ("]", out);
+    }
+  fputs ("])\n\n", out);
+  free (syms);
+}
+
+
+/*-------------------------------------.
+| The list of all the symbol numbers.  |
+`-------------------------------------*/
+
+static void
+symbol_numbers_output (FILE *out)
+{
+  fputs ("m4_define([b4_symbol_numbers],\n[", out);
+  for (int i = 0; i < nsyms; ++i)
+    fprintf (out, "%s[%d]", i ? ", " : "", i);
+  fputs ("])\n\n", out);
+}
+
+
+/*-------------------------------------------.
+| Output the user reduction actions to OUT.  |
+`-------------------------------------------*/
 
 static void
 user_actions_output (FILE *out)
 {
-  rule_number r;
-
   fputs ("m4_define([b4_actions], \n[", out);
-  for (r = 0; r < nrules; ++r)
+  for (rule_number r = 0; r < nrules; ++r)
     if (rules[r].action)
       {
-	fprintf (out, "b4_case(%d, [b4_syncline(%d, ", r + 1,
-		 rules[r].action_location.start.line);
-	string_output (out, rules[r].action_location.start.file);
-	fprintf (out, ")\n[    %s]])\n\n", rules[r].action);
+        /* The useless "" is there to pacify syntax-check.  */
+        fprintf (out, "%s""(%d, [",
+                 rules[r].is_predicate ? "b4_predicate_case" : "b4_case",
+                 r + 1);
+        if (!no_lines_flag)
+          {
+            fprintf (out, "b4_syncline(%d, ",
+                     rules[r].action_loc.start.line);
+            string_output (out, rules[r].action_loc.start.file);
+            fprintf (out, ")dnl\n");
+          }
+        fprintf (out, "[%*s%s]])\n\n",
+                 rules[r].action_loc.start.column - 1, "",
+                 rules[r].action);
       }
   fputs ("])\n\n", out);
 }
 
-/*--------------------------------------.
-| Output the merge functions to OUT.   |
-`--------------------------------------*/
+/*------------------------------------.
+| Output the merge functions to OUT.  |
+`------------------------------------*/
 
 static void
 merger_output (FILE *out)
 {
+  fputs ("m4_define([b4_mergers], \n[[", out);
   int n;
   merger_list* p;
-
-  fputs ("m4_define([b4_mergers], \n[[", out);
   for (n = 1, p = merge_functions; p != NULL; n += 1, p = p->next)
     {
       if (p->type[0] == '\0')
-	fprintf (out, "  case %d: *yy0 = %s (*yy0, *yy1); break;\n",
-		 n, p->name);
+        fprintf (out, "  case %d: *yy0 = %s (*yy0, *yy1); break;\n",
+                 n, p->name);
       else
-	fprintf (out, "  case %d: yy0->%s = %s (*yy0, *yy1); break;\n",
-		 n, p->type, p->name);
+        fprintf (out, "  case %d: yy0->%s = %s (*yy0, *yy1); break;\n",
+                 n, p->type, p->name);
     }
   fputs ("]])\n\n", out);
 }
 
-/*--------------------------------------.
-| Output the tokens definition to OUT.  |
-`--------------------------------------*/
+
+/*---------------------------------------------.
+| Prepare the muscles for symbol definitions.  |
+`---------------------------------------------*/
 
 static void
-token_definitions_output (FILE *out)
+prepare_symbol_definitions (void)
 {
-  int i;
-  char const *sep = "";
-
-  fputs ("m4_define([b4_tokens], \n[", out);
-  for (i = 0; i < ntokens; ++i)
+  /* Map "orig NUM" to new numbers.  See data/README.  */
+  for (symbol_number i = ntokens; i < nsyms + nuseless_nonterminals; ++i)
     {
-      symbol *sym = symbols[i];
-      int number = sym->user_token_number;
-
-      /* 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)
-	continue;
-
-      /* If this string has an alias, then it is necessarily the alias
-	 which is to be output.  */
-      if (sym->alias)
-	sym = sym->alias;
-
-      /* Don't output literal chars or strings (when defined only as a
-	 string).  Note that must be done after the alias resolution:
-	 think about `%token 'f' "f"'.  */
-      if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
-	continue;
-
-      /* 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]",
-	       sep, sym->tag, number);
-      sep = ",\n";
+      obstack_printf (&format_obstack, "symbol(orig %d, number)", i);
+      const char *key = obstack_finish0 (&format_obstack);
+      MUSCLE_INSERT_INT (key, nterm_map ? nterm_map[i - ntokens] : i);
     }
-  fputs ("])\n\n", out);
-}
 
-
-/*---------------------------------------------------.
-| Output the symbol destructors or printers to OUT.  |
-`---------------------------------------------------*/
-
-static void
-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_", out);
-  fputs (what, out);
-  fputs ("], \n[", out);
-  for (i = 0; i < nsyms; ++i)
+  for (int i = 0; i < nsyms; ++i)
     {
       symbol *sym = symbols[i];
-      char const *code = (*get) (sym)->code;
-      if (code)
+      const char *key;
+
+#define SET_KEY(Entry)                                          \
+      obstack_printf (&format_obstack, "symbol(%d, %s)",        \
+                      i, Entry);                                \
+      key = obstack_finish0 (&format_obstack);
+
+#define SET_KEY2(Entry, Suffix)                                 \
+      obstack_printf (&format_obstack, "symbol(%d, %s_%s)",     \
+                      i, Entry, Suffix);                        \
+      key = obstack_finish0 (&format_obstack);
+
+      /* Whether the symbol has an identifier.  */
+      const char *id = symbol_id_get (sym);
+      SET_KEY ("has_id");
+      MUSCLE_INSERT_INT (key, !!id);
+
+      /* Its identifier.  */
+      SET_KEY ("id");
+      MUSCLE_INSERT_STRING (key, id ? id : "");
+
+      /* Its tag.  Typically for documentation purpose.  */
+      SET_KEY ("tag");
+      MUSCLE_INSERT_STRING (key, sym->tag);
+
+      SET_KEY ("user_number");
+      MUSCLE_INSERT_INT (key, sym->content->user_token_number);
+
+      SET_KEY ("is_token");
+      MUSCLE_INSERT_INT (key,
+                         i < ntokens && sym != errtoken && sym != undeftoken);
+
+      SET_KEY ("number");
+      MUSCLE_INSERT_INT (key, sym->content->number);
+
+      SET_KEY ("has_type");
+      MUSCLE_INSERT_INT (key, !!sym->content->type_name);
+
+      SET_KEY ("type");
+      MUSCLE_INSERT_STRING (key, sym->content->type_name
+                            ? sym->content->type_name : "");
+
+      for (int j = 0; j < CODE_PROPS_SIZE; ++j)
         {
-          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)
+          /* "printer", not "%printer".  */
+          char const *pname = code_props_type_string (j) + 1;
+          code_props const *p = symbol_code_props_get (sym, j);
+          SET_KEY2 ("has", pname);
+          MUSCLE_INSERT_INT (key, !!p->code);
+
+          if (p->code)
             {
-              fputs (", ", out);
-              quoted_output (out, sym->type_name);
+              SET_KEY2 (pname, "file");
+              MUSCLE_INSERT_C_STRING (key, p->location.start.file);
+
+              SET_KEY2 (pname, "line");
+              MUSCLE_INSERT_INT (key, p->location.start.line);
+
+              SET_KEY2 (pname, "loc");
+              muscle_location_grow (key, p->location);
+
+              SET_KEY (pname);
+              obstack_printf (&muscle_obstack,
+                              "%*s%s", p->location.start.column - 1, "", p->code);
+              muscle_insert (key, obstack_finish0 (&muscle_obstack));
             }
-          fputc (']', out);
         }
+#undef SET_KEY2
+#undef SET_KEY
     }
-  fputs ("])\n\n", out);
 }
 
 
@@ -436,30 +508,30 @@
      lookahead token type.  */
 
   muscle_insert_rule_number_table ("defact", yydefact,
-				   yydefact[0], 1, nstates);
+                                   yydefact[0], 1, nstates);
 
   /* Figure out what to do after reducing with each rule, depending on
      the saved state from before the beginning of parsing the data
      that matched this rule.  */
   muscle_insert_state_number_table ("defgoto", yydefgoto,
-				    yydefgoto[0], 1, nsyms - ntokens);
+                                    yydefgoto[0], 1, nsyms - ntokens);
 
 
   /* Output PACT. */
   muscle_insert_base_table ("pact", base,
-			     base[0], 1, nstates);
+                             base[0], 1, nstates);
   MUSCLE_INSERT_INT ("pact_ninf", base_ninf);
 
   /* Output PGOTO. */
   muscle_insert_base_table ("pgoto", base,
-			     base[nstates], nstates + 1, nvectors);
+                             base[nstates], nstates + 1, nvectors);
 
   muscle_insert_base_table ("table", table,
-			    table[0], 1, high + 1);
+                            table[0], 1, high + 1);
   MUSCLE_INSERT_INT ("table_ninf", table_ninf);
 
   muscle_insert_base_table ("check", check,
-			    check[0], 1, high + 1);
+                            check[0], 1, high + 1);
 
   /* GLR parsing slightly modifies YYTABLE and YYCHECK (and thus
      YYPACT) so that in states with unresolved conflicts, the default
@@ -470,12 +542,13 @@
      parser, so we could avoid accidents by not writing them out in
      that case.  Nevertheless, it seems even better to be able to use
      the GLR skeletons even without the non-deterministic tables.  */
-  muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
-				    conflict_table[0], 1, high + 1);
-  muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
-				    0, 1, conflict_list_cnt);
+  muscle_insert_int_table ("conflict_list_heads", conflict_table,
+                           conflict_table[0], 1, high + 1);
+  muscle_insert_int_table ("conflicting_rules", conflict_list,
+                           0, 1, conflict_list_cnt);
 }
 
+
 /*--------------------------------------------.
 | Output the definitions of all the muscles.  |
 `--------------------------------------------*/
@@ -484,13 +557,11 @@
 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);
-
+  symbol_numbers_output (out);
+  type_names_output (out);
+  user_actions_output (out);
+  /* Must be last.  */
   muscles_m4_output (out);
 }
 
@@ -501,48 +572,26 @@
 static void
 output_skeleton (void)
 {
-  FILE *in;
-  int filter_fd[2];
-  char const *argv[10];
-  pid_t pid;
-
   /* 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 = compute_pkgdatadir ();
-  size_t skeleton_size = strlen (skeleton) + 1;
-  size_t pkgdatadirlen = strlen (pkgdatadir);
-  while (pkgdatadirlen && pkgdatadir[pkgdatadirlen - 1] == '/')
-    pkgdatadirlen--;
-  full_skeleton = xmalloc (pkgdatadirlen + 1
-			   + (skeleton_size < sizeof m4sugar
-			      ? sizeof m4sugar : skeleton_size));
-  memcpy (full_skeleton, pkgdatadir, pkgdatadirlen);
-  full_skeleton[pkgdatadirlen] = '/';
-  strcpy (full_skeleton + pkgdatadirlen + 1, m4sugar);
-  full_m4sugar = xstrdup (full_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);
+  char const *m4 = (m4 = getenv ("M4")) ? m4 : M4;
+  char const *datadir = pkgdatadir ();
+  char *skeldir = xpath_join (datadir, "skeletons");
+  char *m4sugar = xpath_join (datadir, "m4sugar/m4sugar.m4");
+  char *m4bison = xpath_join (skeldir, "bison.m4");
+  char *skel = (IS_PATH_WITH_DIR (skeleton)
+                ? xstrdup (skeleton)
+                : xpath_join (skeldir, 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"));
+  xfclose (xfopen (m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
     fprintf (stderr, "running: %s %s - %s %s\n",
-             m4, full_m4sugar, full_m4bison, full_skeleton);
+             m4, m4sugar, m4bison, skel);
 
   /* 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
@@ -551,7 +600,10 @@
      See the thread starting at
      <http://lists.gnu.org/archive/html/bug-bison/2008-07/msg00000.html>
      for details.  */
+  int filter_fd[2];
+  pid_t pid;
   {
+    char const *argv[10];
     int i = 0;
     argv[i++] = m4;
 
@@ -568,75 +620,68 @@
       argv[i++] = M4_GNU_OPTION;
 
     argv[i++] = "-I";
-    argv[i++] = pkgdatadir;
+    argv[i++] = datadir;
     if (trace_flag & trace_m4)
       argv[i++] = "-dV";
-    argv[i++] = full_m4sugar;
+    argv[i++] = m4sugar;
     argv[i++] = "-";
-    argv[i++] = full_m4bison;
-    argv[i++] = full_skeleton;
+    argv[i++] = m4bison;
+    argv[i++] = skel;
     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);
   }
 
-  /* 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);
+  free (skeldir);
+  free (m4sugar);
+  free (m4bison);
+  free (skel);
 
   if (trace_flag & trace_muscles)
     muscles_output (stderr);
   {
-    FILE *out = fdopen (filter_fd[1], "w");
-    if (! out)
-      error (EXIT_FAILURE, get_errno (),
-             "fdopen");
+    FILE *out = xfdopen (filter_fd[1], "w");
     muscles_output (out);
     xfclose (out);
   }
 
   /* Read and process m4's output.  */
-  timevar_push (TV_M4);
-  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);
+  timevar_push (tv_m4);
+  {
+    FILE *in = xfdopen (filter_fd[0], "r");
+    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);
+  }
   wait_subprocess (pid, "m4", false, false, true, true, NULL);
-  timevar_pop (TV_M4);
+  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;
+  /* BISON_USE_PUSH_FOR_PULL is for the test suite and should not be
+     documented for the user.  */
+  char const *cp = getenv ("BISON_USE_PUSH_FOR_PULL");
+  bool use_push_for_pull_flag = cp && *cp && strtol (cp, 0, 10);
+
+  MUSCLE_INSERT_INT ("required_version", required_version);
 
   /* Flags. */
-  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 ("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);
+  MUSCLE_INSERT_BOOL ("yacc_flag", !location_empty (yacc_loc));
 
   /* File names.  */
   if (spec_name_prefix)
@@ -647,7 +692,7 @@
 #define DEFINE(Name) MUSCLE_INSERT_STRING (#Name, Name ? Name : "")
   DEFINE (dir_prefix);
   DEFINE (parser_file_name);
-  DEFINE (spec_defines_file);
+  DEFINE (spec_header_file);
   DEFINE (spec_file_prefix);
   DEFINE (spec_graph_file);
   DEFINE (spec_name_prefix);
@@ -663,10 +708,12 @@
 
   /* About the skeletons.  */
   {
-    /* b4_pkgdatadir is used inside m4_include in the skeletons, so digraphs
+    /* b4_skeletonsdir 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 ());
+    char *skeldir = xpath_join (pkgdatadir (), "skeletons");
+    MUSCLE_INSERT_STRING_RAW ("skeletonsdir", skeldir);
+    free (skeldir);
   }
 }
 
@@ -684,18 +731,17 @@
   prepare_rules ();
   prepare_states ();
   prepare_actions ();
+  prepare_symbol_definitions ();
 
   prepare ();
 
   /* Process the selected skeleton file.  */
   output_skeleton ();
 
-  obstack_free (&format_obstack, NULL);
-}
+  /* If late errors were generated, destroy the generated source
+     files. */
+  if (complaint_status)
+    unlink_generated_sources ();
 
-char const *
-compute_pkgdatadir (void)
-{
-  char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
-  return pkgdatadir ? pkgdatadir : PKGDATADIR;
+  obstack_free (&format_obstack, NULL);
 }
diff --git a/src/output.h b/src/output.h
index 6c428d5..c8b8831 100644
--- a/src/output.h
+++ b/src/output.h
@@ -1,7 +1,7 @@
 /* Output the generated parsing program for bison,
 
-   Copyright (C) 2000-2003, 2006-2007, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 2000-2003, 2006-2007, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,6 +23,5 @@
 
 /* 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 5633b4e..1c0e59f 100644
--- a/src/parse-gram.c
+++ b/src/parse-gram.c
@@ -1,19 +1,20 @@
-/* A Bison parser, made by GNU Bison 2.6.5.63-3ada.  */
+/* A Bison parser, made by GNU Bison 3.5.  */
 
 /* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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/>.  */
 
@@ -26,7 +27,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.  */
 
@@ -40,17 +41,20 @@
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.6.5.63-3ada"
+#define YYBISON_VERSION "3.5"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 
 /* Pure parsers.  */
-#define YYPURE 1
+#define YYPURE 2
 
 /* Push parsers.  */
 #define YYPUSH 0
@@ -58,6 +62,13 @@
 /* Pull parsers.  */
 #define YYPULL 1
 
+/* "%code top" blocks.  */
+#line 27 "src/parse-gram.y"
+
+  /* On column 0 to please syntax-check.  */
+#include <config.h>
+
+#line 72 "src/parse-gram.c"
 /* Substitute the type names.  */
 #define YYSTYPE         GRAM_STYPE
 #define YYLTYPE         GRAM_LTYPE
@@ -65,117 +76,28 @@
 #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-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 "c-ctype.h"
-#include "complain.h"
-#include "conflicts.h"
-#include "files.h"
-#include "getargs.h"
-#include "gram.h"
-#include "muscle-tab.h"
-#include "named-ref.h"
-#include "quotearg.h"
-#include "reader.h"
-#include "symlist.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);
-
-#define YY_LOCATION_PRINT(File, Loc) \
-	  location_print (File, Loc)
-
-static void version_check (location const *loc, char const *version);
-
-/* Request detailed syntax error messages, and pass them to GRAM_ERROR.
-   FIXME: depends on the undocumented availability of YYLLOC.  */
-#undef  yyerror
-#define yyerror(Msg) \
-	gram_error (&yylloc, Msg)
-static void gram_error (location const *, char const *);
-
-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 = NULL;
-static symbol *current_lhs_symbol;
-static location current_lhs_location;
-static named_ref *current_lhs_named_ref;
-static int current_prec = 0;
-
-/** 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
-
-/* Line 360 of yacc.c  */
-#line 173 "parse-gram.c"
-
-# ifndef YY_NULL
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+# ifndef YY_CAST
+#  ifdef __cplusplus
+#   define YY_CAST(Type, Val) static_cast<Type> (Val)
+#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
 #  else
-#   define YY_NULL 0
+#   define YY_CAST(Type, Val) ((Type) (Val))
+#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+#  endif
+# endif
+# ifndef YY_NULLPTR
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
+#  else
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -187,239 +109,184 @@
 # define YYERROR_VERBOSE 1
 #endif
 
-/* 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
-
-/* 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
+#include "parse-gram.h"
 
 
+/* Unqualified %code blocks.  */
+#line 33 "src/parse-gram.y"
 
-#if ! defined GRAM_STYPE && ! defined GRAM_STYPE_IS_DECLARED
-typedef union GRAM_STYPE
-{
-/* Line 376 of yacc.c  */
-#line 115 "parse-gram.y"
+  #include "system.h"
 
-  symbol *symbol;
-  symbol_list *list;
-  int integer;
-  char const *chars;
-  char *code;
-  assoc assoc;
-  uniqstr uniqstr;
-  unsigned char character;
-  named_ref *named_ref;
+  #include <c-ctype.h>
+  #include <errno.h>
+  #include <intprops.h>
+  #include <quotearg.h>
+  #include <vasnprintf.h>
+  #include <xmemdup0.h>
 
+  #include "complain.h"
+  #include "conflicts.h"
+  #include "files.h"
+  #include "getargs.h"
+  #include "gram.h"
+  #include "named-ref.h"
+  #include "reader.h"
+  #include "scan-code.h"
+  #include "scan-gram.h"
 
-/* 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
+  static int current_prec = 0;
+  static location current_lhs_loc;
+  static named_ref *current_lhs_named_ref;
+  static symbol *current_lhs_symbol;
+  static symbol_class current_class = unknown_sym;
 
-#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;
-} GRAM_LTYPE;
-# define gram_ltype GRAM_LTYPE /* obsolescent; will be withdrawn */
-# define GRAM_LTYPE_IS_DECLARED 1
-# define GRAM_LTYPE_IS_TRIVIAL 1
-#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);
 
+  #define YYLLOC_DEFAULT(Current, Rhs, N)         \
+    (Current) = lloc_default (Rhs, N)
+  static YYLTYPE lloc_default (YYLTYPE const *, int);
 
-#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 */
+  #define YY_LOCATION_PRINT(File, Loc)            \
+    location_print (Loc, File)
 
-#endif /* !YY_GRAM_Y_TAB_H_INCLUDED  */
+  /* Strip initial '{' and final '}' (must be first and last characters).
+     Return the result.  */
+  static char *strip_braces (char *code);
 
-/* Copy the second part of user declarations.  */
+  /* Convert CODE by calling code_props_plain_init if PLAIN, otherwise
+     code_props_symbol_action_init.  Call
+     gram_scanner_last_string_free to release the latest string from
+     the scanner (should be CODE). */
+  static char const *translate_code (char *code, location loc, bool plain);
 
-/* Line 379 of yacc.c  */
-#line 393 "parse-gram.c"
+  /* Convert CODE by calling code_props_plain_init after having
+     stripped the first and last characters (expected to be '{', and
+     '}').  Call gram_scanner_last_string_free to release the latest
+     string from the scanner (should be CODE). */
+  static char const *translate_code_braceless (char *code, location loc);
+
+  /* Handle a %error-verbose directive.  */
+  static void handle_error_verbose (location const *loc, char const *directive);
+
+  /* Handle a %file-prefix directive.  */
+  static void handle_file_prefix (location const *loc,
+                                  location const *dir_loc,
+                                  char const *directive, char const *value);
+
+  /* Handle a %name-prefix directive.  */
+  static void handle_name_prefix (location const *loc,
+                                  char const *directive, char const *value);
+
+  /* Handle a %pure-parser directive.  */
+  static void handle_pure_parser (location const *loc, char const *directive);
+
+  /* Handle a %require directive.  */
+  static void handle_require (location const *loc, char const *version);
+
+  /* Handle a %skeleton directive.  */
+  static void handle_skeleton (location const *loc, char const *skel);
+
+  /* Handle a %yacc directive.  */
+  static void handle_yacc (location const *loc);
+
+  /* Implementation of yyerror.  */
+  static void gram_error (location const *, char const *);
+
+  /* A string that describes a char (e.g., 'a' -> "'a'").  */
+  static char const *char_name (char);
+
+  /* Add style to semantic values in traces.  */
+  static void tron (FILE *yyo);
+  static void troff (FILE *yyo);
+#line 261 "src/parse-gram.y"
+
+  /** Add a lex-param and/or a parse-param.
+   *
+   * \param type  where to push this formal argument.
+   * \param decl  the formal argument.  Destroyed.
+   * \param loc   the location in the source.
+   */
+  static void add_param (param_type type, char *decl, location loc);
+  static param_type current_param = param_none;
+
+#line 216 "src/parse-gram.c"
 
 #ifdef short
 # undef short
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+   <limits.h> and (if available) <stdint.h> are included
+   so that the code can choose integer types of a good width.  */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+#  define YY_STDINT_H
+# endif
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+/* Narrow types that promote to a signed type and that can represent a
+   signed or unsigned integer of at least N bits.  In tables they can
+   save space and decrease cache pressure.  Promoting to a signed type
+   helps avoid bugs in integer arithmetic.  */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
 typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
 #endif
 
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_int16;
 #endif
 
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
 #else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+       && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+#  define YYPTRDIFF_T __PTRDIFF_TYPE__
+#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+#  ifndef ptrdiff_t
+#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  endif
+#  define YYPTRDIFF_T ptrdiff_t
+#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+#  define YYPTRDIFF_T long
+#  define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
 #endif
 
 #ifndef YYSIZE_T
@@ -427,16 +294,27 @@
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM                                  \
+  YY_CAST (YYPTRDIFF_T,                                 \
+           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
+            ? YYPTRDIFF_MAXIMUM                         \
+            : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations.  */
+typedef int yy_state_fast_t;
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -450,6 +328,22 @@
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+#  define YY_ATTRIBUTE_UNUSED
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -457,31 +351,47 @@
 # define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
+#if defined __GNUC__ && ! defined __ICC && 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
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#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
+
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN                          \
+    _Pragma ("GCC diagnostic push")                            \
+    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END            \
+    _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
 
 #if 1
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -497,7 +407,7 @@
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
+             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -505,15 +415,13 @@
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined malloc && ! defined EXIT_SUCCESS
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined free && ! defined EXIT_SUCCESS
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -524,24 +432,25 @@
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL \
-	     && defined GRAM_STYPE_IS_TRIVIAL && GRAM_STYPE_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_alloc;
+  yy_state_t yyss_alloc;
   YYSTYPE yyvs_alloc;
   YYLTYPE yyls_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
+             + YYSIZEOF (YYLTYPE)) \
       + 2 * YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -551,16 +460,16 @@
    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_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYPTRDIFF_T yynewbytes;                                         \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
+      }                                                                 \
+    while (0)
 
 #endif
 
@@ -570,16 +479,16 @@
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYSIZE_T yyi;                         \
+          YYPTRDIFF_T yyi;                      \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (YYID (0))
+      while (0)
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -587,126 +496,42 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   160
+#define YYLAST   234
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  58
+#define YYNTOKENS  60
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  34
+#define YYNNTS  42
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  108
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  148
+#define YYNRULES  122
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  166
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   312
+#define YYMAXUTOK   314
 
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-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,
-       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,     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,     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
-};
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
+#define YYTRANSLATE(YYX) (YYX)
 
 #if GRAM_DEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+static const yytype_int16 yyrline[] =
 {
-       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[] =
-{
-      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,   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
+       0,   293,   293,   302,   303,   307,   308,   314,   318,   323,
+     324,   329,   330,   331,   332,   333,   338,   343,   344,   345,
+     346,   347,   348,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   360,   361,   370,   371,   375,   386,   390,   394,
+     402,   412,   413,   423,   424,   430,   443,   443,   448,   448,
+     453,   457,   467,   468,   469,   470,   474,   475,   480,   481,
+     485,   486,   490,   491,   492,   505,   514,   518,   522,   530,
+     531,   535,   548,   549,   561,   565,   569,   577,   579,   584,
+     591,   601,   605,   609,   617,   622,   634,   635,   641,   642,
+     643,   650,   650,   658,   659,   660,   665,   668,   670,   672,
+     674,   676,   678,   680,   682,   684,   689,   690,   699,   723,
+     724,   725,   726,   738,   740,   767,   772,   773,   778,   787,
+     788,   792,   793
 };
 #endif
 
@@ -715,260 +540,277 @@
    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\"", "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%prec\"",
-  "\"%dprec\"", "\"%merge\"", "\"%code\"", "\"%debug\"",
+  "\"end of file\"", "error", "$undefined", "\"string\"", "\"%token\"",
+  "\"%nterm\"", "\"%type\"", "\"%destructor\"", "\"%printer\"",
+  "\"%left\"", "\"%right\"", "\"%nonassoc\"", "\"%precedence\"",
+  "\"%prec\"", "\"%dprec\"", "\"%merge\"", "\"%code\"",
   "\"%default-prec\"", "\"%define\"", "\"%defines\"", "\"%error-verbose\"",
-  "\"%expect\"", "\"%expect-rr\"", "\"%file-prefix\"", "\"%glr-parser\"",
-  "\"%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
+  "\"%expect\"", "\"%expect-rr\"", "\"%<flag>\"", "\"%file-prefix\"",
+  "\"%glr-parser\"", "\"%initial-action\"", "\"%language\"",
+  "\"%name-prefix\"", "\"%no-default-prec\"", "\"%no-lines\"",
+  "\"%nondeterministic-parser\"", "\"%output\"", "\"%pure-parser\"",
+  "\"%require\"", "\"%skeleton\"", "\"%start\"", "\"%token-table\"",
+  "\"%verbose\"", "\"%yacc\"", "\"{...}\"", "\"%?{...}\"",
+  "\"[identifier]\"", "\"character literal\"", "\":\"", "\"epilogue\"",
+  "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"", "\"|\"",
+  "\"%{...%}\"", "\";\"", "\"<tag>\"", "\"<*>\"", "\"<>\"", "\"integer\"",
+  "\"%param\"", "\"%union\"", "\"%empty\"", "$accept", "input",
+  "prologue_declarations", "prologue_declaration", "$@1", "params",
+  "grammar_declaration", "code_props_type", "union_name",
+  "symbol_declaration", "$@2", "$@3", "precedence_declarator", "tag.opt",
+  "generic_symlist", "generic_symlist_item", "tag", "nterm_decls",
+  "token_decls", "token_decl.1", "token_decl", "int.opt",
+  "token_decls_for_prec", "token_decl_for_prec.1", "token_decl_for_prec",
+  "symbol_decls", "symbol_decl.1", "grammar",
+  "rules_or_grammar_declaration", "rules", "$@4", "rhses.1", "rhs",
+  "named_ref.opt", "variable", "value", "id", "id_colon", "symbol",
+  "string_as_id", "string_as_id.opt", "epilogue.opt", YY_NULLPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      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,   307,   308,   309,   310,   311,   312
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       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
-};
+#define YYPACT_NINF (-130)
 
-/* 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,     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
-};
+#define yypact_value_is_default(Yyn) \
+  ((Yyn) == YYPACT_NINF)
 
-/* 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,    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
-};
+#define YYTABLE_NINF (-122)
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -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
-};
+#define yytable_value_is_error(Yyn) \
+  0
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -91
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     -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
+    -130,    36,   110,  -130,   -22,  -130,  -130,     2,  -130,  -130,
+    -130,  -130,  -130,  -130,   -19,  -130,    -9,    40,  -130,   -17,
+      -2,  -130,    57,  -130,    21,    66,    77,  -130,  -130,  -130,
+      78,  -130,    87,    92,    44,  -130,  -130,  -130,   165,  -130,
+    -130,  -130,    50,  -130,  -130,    58,  -130,    29,  -130,    15,
+      15,  -130,  -130,  -130,    44,    47,    44,  -130,  -130,  -130,
+    -130,    61,  -130,    30,  -130,  -130,  -130,  -130,  -130,  -130,
+    -130,  -130,  -130,  -130,  -130,    51,  -130,    53,     8,  -130,
+    -130,    64,    67,  -130,    68,    20,    44,    56,    44,  -130,
+      69,  -130,   -37,    59,   -37,  -130,    69,  -130,    59,    44,
+      44,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,    79,
+    -130,  -130,  -130,  -130,  -130,   111,  -130,  -130,  -130,  -130,
+      20,  -130,  -130,  -130,    44,    44,  -130,  -130,  -130,   -37,
+     -37,  -130,   147,    44,  -130,   108,  -130,  -130,    44,   -37,
+    -130,  -130,  -130,   -21,   175,  -130,  -130,    44,    97,   101,
+      99,   100,  -130,  -130,  -130,   117,    64,   175,  -130,  -130,
+    -130,  -130,  -130,    64,  -130,  -130
 };
 
-/* YYPGOTO[NTERM-NUM].  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
+static const yytype_int8 yydefact[] =
+{
+       3,     0,     0,     1,     0,    48,    46,     0,    41,    42,
+      52,    53,    54,    55,     0,    37,     0,     9,    11,     0,
+       0,     7,     0,    15,     0,     0,     0,    38,    19,    20,
+       0,    24,     0,     0,     0,    27,    28,    29,     0,     6,
+      31,    22,    43,     4,     5,     0,    34,     0,    30,     0,
+       0,   118,   114,   113,     0,    50,    81,   116,    84,   117,
+      39,     0,   108,   109,    10,    12,    13,    14,    16,    17,
+      18,    21,    25,    26,    35,     0,   115,     0,     0,    86,
+      88,   106,     0,    44,     0,     0,     0,    51,    74,    77,
+      72,    80,     0,    49,    66,    69,    72,    47,    65,    82,
+       0,    85,    40,   111,   112,   110,     8,    90,    89,     0,
+      87,     2,   107,    91,    33,    23,    45,    62,    63,    64,
+      36,    58,    61,    60,    75,     0,    78,    73,    79,    67,
+       0,    70,   119,    83,   122,     0,    32,    59,    76,    68,
+     120,    71,    96,    92,    93,    96,    95,     0,     0,     0,
+       0,     0,    99,    57,   100,     0,   106,    94,   101,   102,
+     103,   104,   105,   106,    97,    98
+};
+
+  /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -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
+    -130,  -130,  -130,  -130,  -130,  -130,   156,  -130,  -130,  -130,
+    -130,  -130,  -130,  -130,  -130,    43,  -130,  -130,   114,   -66,
+     -35,    83,  -130,   -84,   -53,  -130,   -47,  -130,    82,  -130,
+    -130,  -130,    35,  -129,  -130,  -130,   -46,  -130,   -34,   -36,
+    -130,  -130
 };
 
-/* 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.  */
-#define YYTABLE_NINF -108
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     1,     2,    43,    82,   115,    77,    45,    84,    46,
+      50,    49,    47,   155,   120,   121,   122,    97,    93,    94,
+      95,   128,    87,    88,    89,    55,    56,    78,    79,    80,
+     135,   143,   144,   113,    63,   106,    57,    81,    58,    59,
+     141,   111
+};
+
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      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
+      74,    90,   124,    96,    96,    51,    52,    99,  -121,    75,
+      53,    91,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    60,   101,    51,    14,    15,   129,   164,    61,   145,
+      48,   146,    51,   103,   165,   126,     3,    27,    62,    65,
+      90,   138,    90,    64,    34,    52,    96,    51,    96,    53,
+      91,   123,    91,   133,    66,    54,    76,   109,    52,   131,
+      67,    68,    53,    52,   139,   101,    42,    53,    92,    69,
+     104,   126,    52,   117,   118,   119,    53,   105,    90,    90,
+      70,    71,    86,    96,    96,   126,   123,    52,    91,    91,
+      72,    53,    90,    96,   131,    73,   140,    83,    85,   101,
+     100,   102,    91,   107,   131,   108,   112,   114,   116,   125,
+     156,     4,   130,   158,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,   156,   134,   127,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      51,   136,   142,   159,   160,   161,   162,   163,    44,    38,
+     110,    39,    40,   137,    98,     0,    75,    41,    42,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    51,   132,
+     157,    14,    15,     0,     0,     0,     0,     0,   147,   148,
+     149,     0,     0,     0,    27,     0,   150,   151,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    76,     0,   -56,   152,     0,    52,     0,
+       0,     0,    53,    42,     0,     0,     0,     0,   153,     0,
+       0,     0,     0,     0,   154
 };
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-91)))
-
-#define yytable_value_is_error(Yytable_value) \
-  YYID (0)
-
-static const yytype_uint8 yycheck[] =
+static const yytype_int16 yycheck[] =
 {
-      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
+      34,    47,    86,    49,    50,     3,    43,    54,     0,     1,
+      47,    47,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    40,    56,     3,    16,    17,    92,   156,    47,    50,
+      52,    52,     3,     3,   163,    88,     0,    29,    47,    56,
+      86,   125,    88,     3,    36,    43,    92,     3,    94,    47,
+      86,    85,    88,   100,    56,    53,    48,    49,    43,    94,
+       3,    40,    47,    43,   130,    99,    58,    47,    53,     3,
+      40,   124,    43,    53,    54,    55,    47,    47,   124,   125,
+       3,     3,    53,   129,   130,   138,   120,    43,   124,   125,
+       3,    47,   138,   139,   129,     3,   132,    47,    40,   133,
+      53,    40,   138,    52,   139,    52,    42,    40,    40,    53,
+     144,     1,    53,   147,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,   157,    45,    56,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+       3,    40,    44,    56,    53,    56,    56,    40,     2,    49,
+      78,    51,    52,   120,    50,    -1,     1,    57,    58,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,     3,    96,
+     145,    16,    17,    -1,    -1,    -1,    -1,    -1,    13,    14,
+      15,    -1,    -1,    -1,    29,    -1,    21,    22,    -1,    -1,
+      -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    -1,    40,    41,    -1,    43,    -1,
+      -1,    -1,    47,    58,    -1,    -1,    -1,    -1,    53,    -1,
+      -1,    -1,    -1,    -1,    59
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+static const yytype_int8 yystos[] =
 {
-       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,    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
+       0,    61,    62,     0,     1,     4,     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,    49,    51,
+      52,    57,    58,    63,    66,    67,    69,    72,    52,    71,
+      70,     3,    43,    47,    53,    85,    86,    96,    98,    99,
+      40,    47,    47,    94,     3,    56,    56,     3,    40,     3,
+       3,     3,     3,     3,    98,     1,    48,    66,    87,    88,
+      89,    97,    64,    47,    68,    40,    53,    82,    83,    84,
+      96,    99,    53,    78,    79,    80,    96,    77,    78,    86,
+      53,    98,    40,     3,    40,    47,    95,    52,    52,    49,
+      88,   101,    42,    93,    40,    65,    40,    53,    54,    55,
+      74,    75,    76,    98,    83,    53,    84,    56,    81,    79,
+      53,    80,    81,    86,    45,    90,    40,    75,    83,    79,
+      99,   100,    44,    91,    92,    50,    52,    13,    14,    15,
+      21,    22,    41,    53,    59,    73,    98,    92,    98,    56,
+      53,    56,    56,    40,    93,    93
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_int8 yyr1[] =
+{
+       0,    60,    61,    62,    62,    63,    63,    63,    63,    63,
+      63,    63,    63,    63,    63,    63,    63,    63,    63,    63,
+      63,    63,    64,    63,    63,    63,    63,    63,    63,    63,
+      63,    63,    65,    65,    66,    66,    66,    66,    66,    66,
+      66,    67,    67,    68,    68,    66,    70,    69,    71,    69,
+      69,    69,    72,    72,    72,    72,    73,    73,    74,    74,
+      75,    75,    76,    76,    76,    77,    78,    78,    78,    79,
+      79,    80,    81,    81,    82,    82,    82,    83,    83,    84,
+      84,    85,    85,    85,    86,    86,    87,    87,    88,    88,
+      88,    90,    89,    91,    91,    91,    92,    92,    92,    92,
+      92,    92,    92,    92,    92,    92,    93,    93,    94,    95,
+      95,    95,    95,    96,    96,    97,    98,    98,    99,   100,
+     100,   101,   101
+};
 
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_int8 yyr2[] =
+{
+       0,     2,     4,     0,     2,     1,     1,     1,     3,     1,
+       2,     1,     2,     2,     2,     1,     2,     2,     2,     1,
+       1,     2,     0,     3,     1,     2,     2,     1,     1,     1,
+       2,     1,     2,     1,     1,     2,     3,     1,     1,     2,
+       3,     1,     1,     0,     1,     3,     0,     3,     0,     3,
+       2,     2,     1,     1,     1,     1,     0,     1,     1,     2,
+       1,     1,     1,     1,     1,     1,     1,     2,     3,     1,
+       2,     3,     0,     1,     1,     2,     3,     1,     2,     2,
+       1,     1,     2,     3,     1,     2,     1,     2,     1,     2,
+       2,     0,     5,     1,     3,     2,     0,     3,     4,     2,
+       2,     3,     3,     3,     3,     3,     0,     1,     1,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       1,     0,     2
+};
 
 
-/* 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.  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 yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
 
-#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 YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
+
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#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))
+#define YYBACKUP(Token, Value)                                    \
+  do                                                              \
+    if (yychar == YYEMPTY)                                        \
+      {                                                           \
+        yychar = (Token);                                         \
+        yylval = (Value);                                         \
+        YYPOPSTACK (yylen);                                       \
+        yystate = *yyssp;                                         \
+        YY_LAC_DISCARD ("YYBACKUP");                              \
+        goto yybackup;                                            \
+      }                                                           \
+    else                                                          \
+      {                                                           \
+        yyerror (&yylloc, YY_("syntax error: cannot back up")); \
+        YYERROR;                                                  \
+      }                                                           \
+  while (0)
 
 /* Error token number */
-#define YYTERROR	1
-#define YYERRCODE	256
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
@@ -978,7 +820,7 @@
 #ifndef YYLLOC_DEFAULT
 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
     do                                                                  \
-      if (YYID (N))                                                     \
+      if (N)                                                            \
         {                                                               \
           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
@@ -992,39 +834,12 @@
           (Current).first_column = (Current).last_column =              \
             YYRHSLOC (Rhs, 0).last_column;                              \
         }                                                               \
-    while (YYID (0))
+    while (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 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
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, &yylloc)
-#endif
-
 /* Enable debugging if requested.  */
 #if GRAM_DEBUG
 
@@ -1033,213 +848,371 @@
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value, Location); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/* 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.  */
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    YYLTYPE const * const yylocationp;
-#endif
+#ifndef YY_LOCATION_PRINT
+# if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
+
+/* Print *YYLOCP on YYO.  Private, do not rely on its existence. */
+
+YY_ATTRIBUTE_UNUSED
+static int
+yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  int res = 0;
+  int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
+  if (0 <= yylocp->first_line)
+    {
+      res += YYFPRINTF (yyo, "%d", yylocp->first_line);
+      if (0 <= yylocp->first_column)
+        res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
+    }
+  if (0 <= yylocp->last_line)
+    {
+      if (yylocp->first_line < yylocp->last_line)
+        {
+          res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
+          if (0 <= end_col)
+            res += YYFPRINTF (yyo, ".%d", end_col);
+        }
+      else if (0 <= end_col && yylocp->first_column < end_col)
+        res += YYFPRINTF (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
+
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value, Location); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
+{
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
+  YYUSE (yylocationp);
   if (!yyvaluep)
     return;
-  YYUSE (yylocationp);
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
+/* "%code pre-printer" blocks.  */
+#line 213 "src/parse-gram.y"
+tron (yyo);
+
+#line 935 "src/parse-gram.c"
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yytype)
     {
-      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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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;
+    case 3: /* "string"  */
+#line 220 "src/parse-gram.y"
+         { fputs (((*yyvaluep).STRING), yyo); }
+#line 942 "src/parse-gram.c"
+        break;
+
+    case 20: /* "%error-verbose"  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).PERCENT_ERROR_VERBOSE), yyo); }
+#line 948 "src/parse-gram.c"
+        break;
+
+    case 23: /* "%<flag>"  */
+#line 230 "src/parse-gram.y"
+         { fprintf (yyo, "%%%s", ((*yyvaluep).PERCENT_FLAG)); }
+#line 954 "src/parse-gram.c"
+        break;
+
+    case 24: /* "%file-prefix"  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).PERCENT_FILE_PREFIX), yyo); }
+#line 960 "src/parse-gram.c"
+        break;
+
+    case 28: /* "%name-prefix"  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).PERCENT_NAME_PREFIX), yyo); }
+#line 966 "src/parse-gram.c"
+        break;
+
+    case 33: /* "%pure-parser"  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).PERCENT_PURE_PARSER), yyo); }
+#line 972 "src/parse-gram.c"
+        break;
+
+    case 40: /* "{...}"  */
+#line 220 "src/parse-gram.y"
+         { fputs (((*yyvaluep).BRACED_CODE), yyo); }
+#line 978 "src/parse-gram.c"
+        break;
+
+    case 41: /* "%?{...}"  */
+#line 220 "src/parse-gram.y"
+         { fputs (((*yyvaluep).BRACED_PREDICATE), yyo); }
+#line 984 "src/parse-gram.c"
+        break;
+
+    case 42: /* "[identifier]"  */
+#line 228 "src/parse-gram.y"
+         { fprintf (yyo, "[%s]", ((*yyvaluep).BRACKETED_ID)); }
+#line 990 "src/parse-gram.c"
+        break;
+
+    case 43: /* "character literal"  */
+#line 217 "src/parse-gram.y"
+         { fputs (char_name (((*yyvaluep).CHAR)), yyo); }
+#line 996 "src/parse-gram.c"
+        break;
+
+    case 45: /* "epilogue"  */
+#line 220 "src/parse-gram.y"
+         { fputs (((*yyvaluep).EPILOGUE), yyo); }
+#line 1002 "src/parse-gram.c"
+        break;
+
+    case 47: /* "identifier"  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).ID), yyo); }
+#line 1008 "src/parse-gram.c"
+        break;
+
+    case 48: /* "identifier:"  */
+#line 229 "src/parse-gram.y"
+         { fprintf (yyo, "%s:", ((*yyvaluep).ID_COLON)); }
+#line 1014 "src/parse-gram.c"
+        break;
+
+    case 51: /* "%{...%}"  */
+#line 220 "src/parse-gram.y"
+         { fputs (((*yyvaluep).PROLOGUE), yyo); }
+#line 1020 "src/parse-gram.c"
+        break;
+
+    case 53: /* "<tag>"  */
+#line 231 "src/parse-gram.y"
+         { fprintf (yyo, "<%s>", ((*yyvaluep).TAG)); }
+#line 1026 "src/parse-gram.c"
+        break;
+
+    case 56: /* "integer"  */
+#line 234 "src/parse-gram.y"
+         { fprintf (yyo, "%d", ((*yyvaluep).INT)); }
+#line 1032 "src/parse-gram.c"
+        break;
+
+    case 57: /* "%param"  */
+#line 273 "src/parse-gram.y"
+{
+  switch (((*yyvaluep).PERCENT_PARAM))
+    {
+#define CASE(In, Out)                                           \
+      case param_ ## In: fputs ("%" #Out, yyo); break
+      CASE (lex,   lex-param);
+      CASE (parse, parse-param);
+      CASE (both,  param);
+#undef CASE
+      case param_none: aver (false); break;
     }
 }
+#line 1049 "src/parse-gram.c"
+        break;
+
+    case 67: /* code_props_type  */
+#line 410 "src/parse-gram.y"
+         { fprintf (yyo, "%s", code_props_type_string (((*yyvaluep).code_props_type))); }
+#line 1055 "src/parse-gram.c"
+        break;
+
+    case 73: /* tag.opt  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).yytype_73), yyo); }
+#line 1061 "src/parse-gram.c"
+        break;
+
+    case 74: /* generic_symlist  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).generic_symlist), yyo); }
+#line 1067 "src/parse-gram.c"
+        break;
+
+    case 75: /* generic_symlist_item  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).generic_symlist_item), yyo); }
+#line 1073 "src/parse-gram.c"
+        break;
+
+    case 76: /* tag  */
+#line 231 "src/parse-gram.y"
+         { fprintf (yyo, "<%s>", ((*yyvaluep).tag)); }
+#line 1079 "src/parse-gram.c"
+        break;
+
+    case 77: /* nterm_decls  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).nterm_decls), yyo); }
+#line 1085 "src/parse-gram.c"
+        break;
+
+    case 78: /* token_decls  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).token_decls), yyo); }
+#line 1091 "src/parse-gram.c"
+        break;
+
+    case 79: /* token_decl.1  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).yytype_79), yyo); }
+#line 1097 "src/parse-gram.c"
+        break;
+
+    case 80: /* token_decl  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).token_decl) ? ((*yyvaluep).token_decl)->tag : "<NULL>"); }
+#line 1103 "src/parse-gram.c"
+        break;
+
+    case 81: /* int.opt  */
+#line 234 "src/parse-gram.y"
+         { fprintf (yyo, "%d", ((*yyvaluep).yytype_81)); }
+#line 1109 "src/parse-gram.c"
+        break;
+
+    case 82: /* token_decls_for_prec  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).token_decls_for_prec), yyo); }
+#line 1115 "src/parse-gram.c"
+        break;
+
+    case 83: /* token_decl_for_prec.1  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).yytype_83), yyo); }
+#line 1121 "src/parse-gram.c"
+        break;
+
+    case 84: /* token_decl_for_prec  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).token_decl_for_prec) ? ((*yyvaluep).token_decl_for_prec)->tag : "<NULL>"); }
+#line 1127 "src/parse-gram.c"
+        break;
+
+    case 85: /* symbol_decls  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).symbol_decls), yyo); }
+#line 1133 "src/parse-gram.c"
+        break;
+
+    case 86: /* symbol_decl.1  */
+#line 243 "src/parse-gram.y"
+         { symbol_list_syms_print (((*yyvaluep).yytype_86), yyo); }
+#line 1139 "src/parse-gram.c"
+        break;
+
+    case 94: /* variable  */
+#line 227 "src/parse-gram.y"
+         { fputs (((*yyvaluep).variable), yyo); }
+#line 1145 "src/parse-gram.c"
+        break;
+
+    case 95: /* value  */
+#line 713 "src/parse-gram.y"
+{
+  switch (((*yyvaluep).value).kind)
+    {
+    case muscle_code:    fprintf (yyo,  "{%s}",  ((*yyvaluep).value).chars); break;
+    case muscle_keyword: fprintf (yyo,   "%s",   ((*yyvaluep).value).chars); break;
+    case muscle_string:  fprintf (yyo, "\"%s\"", ((*yyvaluep).value).chars); break;
+    }
+}
+#line 1158 "src/parse-gram.c"
+        break;
+
+    case 96: /* id  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).id) ? ((*yyvaluep).id)->tag : "<NULL>"); }
+#line 1164 "src/parse-gram.c"
+        break;
+
+    case 97: /* id_colon  */
+#line 238 "src/parse-gram.y"
+         { fprintf (yyo, "%s:", ((*yyvaluep).id_colon)->tag); }
+#line 1170 "src/parse-gram.c"
+        break;
+
+    case 98: /* symbol  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).symbol) ? ((*yyvaluep).symbol)->tag : "<NULL>"); }
+#line 1176 "src/parse-gram.c"
+        break;
+
+    case 99: /* string_as_id  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).string_as_id) ? ((*yyvaluep).string_as_id)->tag : "<NULL>"); }
+#line 1182 "src/parse-gram.c"
+        break;
+
+    case 100: /* string_as_id.opt  */
+#line 237 "src/parse-gram.y"
+         { fprintf (yyo, "%s", ((*yyvaluep).yytype_100) ? ((*yyvaluep).yytype_100)->tag : "<NULL>"); }
+#line 1188 "src/parse-gram.c"
+        break;
+
+      default:
+        break;
+    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
+/* "%code post-printer" blocks.  */
+#line 214 "src/parse-gram.y"
+troff (yyo);
+
+#line 1199 "src/parse-gram.c"
+}
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    YYLTYPE const * const yylocationp;
-#endif
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyo, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  YY_LOCATION_PRINT (yyoutput, *yylocationp);
-  YYFPRINTF (yyoutput, ": ");
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp);
-  YYFPRINTF (yyoutput, ")");
+  YY_LOCATION_PRINT (yyo, *yylocationp);
+  YYFPRINTF (yyo, ": ");
+  yy_symbol_value_print (yyo, yytype, yyvaluep, yylocationp);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1247,16 +1220,8 @@
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1267,50 +1232,42 @@
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yylsp, yyrule)
-    YYSTYPE *yyvsp;
-    YYLTYPE *yylsp;
-    int yyrule;
-#endif
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule)
 {
+  int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       , &(yylsp[(yyi + 1) - (yynrhs)])		       );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &yyvsp[(yyi + 1) - (yynrhs)]
+                       , &(yylsp[(yyi + 1) - (yynrhs)])                       );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, yylsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1324,7 +1281,7 @@
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1350,22 +1307,22 @@
    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,
+yy_lac_stack_realloc (YYPTRDIFF_T *yycapacity, YYPTRDIFF_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)
+                      yy_state_t **yybottom,
+                      yy_state_t *yybottom_no_free,
+                      yy_state_t **yytop, yy_state_t *yytop_empty)
 {
-  YYSIZE_T yysize_old =
+  YYPTRDIFF_T yysize_old =
     *yytop == yytop_empty ? 0 : *yytop - *yybottom + 1;
-  YYSIZE_T yysize_new = yysize_old + yyadd;
+  YYPTRDIFF_T yysize_new = yysize_old + yyadd;
   if (*yycapacity < yysize_new)
     {
-      YYSIZE_T yyalloc = 2 * yysize_new;
-      yytype_int16 *yybottom_new;
+      YYPTRDIFF_T yyalloc = 2 * yysize_new;
+      yy_state_t *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.  */
@@ -1378,7 +1335,9 @@
       if (YYMAXDEPTH < yyalloc)
         yyalloc = YYMAXDEPTH;
       yybottom_new =
-        (yytype_int16*) YYSTACK_ALLOC (yyalloc * sizeof *yybottom_new);
+        YY_CAST (yy_state_t *,
+                 YYSTACK_ALLOC (YY_CAST (YYSIZE_T,
+                                         yyalloc * YYSIZEOF (*yybottom_new))));
       if (!yybottom_new)
         {
           YYDPRINTF ((stderr, "%srealloc failed%s", yydebug_prefix,
@@ -1441,7 +1400,7 @@
           goto yyerrlab;                                         \
       }                                                          \
     }                                                            \
-} while (YYID (0))
+} while (0)
 
 /* Discard any previous initial lookahead context because of Event,
    which may be a lookahead change or an invalidation of the currently
@@ -1464,7 +1423,7 @@
                    Event "\n");                                          \
       yy_lac_established = 0;                                            \
     }                                                                    \
-} while (YYID (0))
+} while (0)
 #else
 # define YY_LAC_DISCARD(Event) yy_lac_established = 0
 #endif
@@ -1478,11 +1437,11 @@
    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)
+yy_lac (yy_state_t *yyesa, yy_state_t **yyes,
+        YYPTRDIFF_T *yyes_capacity, yy_state_t *yyssp, int yytoken)
 {
-  yytype_int16 *yyes_prev = yyssp;
-  yytype_int16 *yyesp = yyes_prev;
+  yy_state_t *yyes_prev = yyssp;
+  yy_state_t *yyesp = yyes_prev;
   YYDPRINTF ((stderr, "LAC: checking lookahead %s:", yytname[yytoken]));
   if (yytoken == YYUNDEFTOK)
     {
@@ -1519,11 +1478,11 @@
           yyrule = -yyrule;
         }
       {
-        YYSIZE_T yylen = yyr2[yyrule];
+        YYPTRDIFF_T yylen = yyr2[yyrule];
         YYDPRINTF ((stderr, " R%d", yyrule - 1));
         if (yyesp != yyes_prev)
           {
-            YYSIZE_T yysize = yyesp - *yyes + 1;
+            YYPTRDIFF_T yysize = yyesp - *yyes + 1;
             if (yylen < yysize)
               {
                 yyesp -= yylen;
@@ -1539,20 +1498,20 @@
           yyesp = yyes_prev -= yylen;
       }
       {
-        int yystate;
+        yy_state_fast_t 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];
+          const int yylhs = yyr1[yyrule] - YYNTOKENS;
+          const int yyi = yypgoto[yylhs] + *yyesp;
+          yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyesp
+                     ? yytable[yyi]
+                     : yydefgoto[yylhs]);
         }
         if (yyesp == yyes_prev)
           {
             yyesp = *yyes;
-            *yyesp = yystate;
+            YY_IGNORE_USELESS_CAST_BEGIN
+            *yyesp = YY_CAST (yy_state_t, yystate);
+            YY_IGNORE_USELESS_CAST_END
           }
         else
           {
@@ -1565,7 +1524,9 @@
                 YYDPRINTF ((stderr, "\n"));
                 return 2;
               }
-            *++yyesp = yystate;
+            YY_IGNORE_USELESS_CAST_BEGIN
+            *++yyesp = YY_CAST (yy_state_t, yystate);
+            YY_IGNORE_USELESS_CAST_END
           }
         YYDPRINTF ((stderr, " G%d", yystate));
       }
@@ -1577,20 +1538,13 @@
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
+#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
+static YYPTRDIFF_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
-  YYSIZE_T yylen;
+  YYPTRDIFF_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -1604,16 +1558,8 @@
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1634,43 +1580,46 @@
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYSIZE_T
+static YYPTRDIFF_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYSIZE_T yyn = 0;
+      YYPTRDIFF_T yyn = 0;
       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;
+            else
+              goto append;
 
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+          append:
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
-  if (! yyres)
+  if (yyres)
+    return yystpcpy (yyres, yystr) - yyres;
+  else
     return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
 }
 # endif
 
@@ -1685,27 +1634,22 @@
    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)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+                yy_state_t *yyesa, yy_state_t **yyes,
+                YYPTRDIFF_T *yyes_capacity, yy_state_t *yyssp, int yytoken)
 {
-  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. */
+  const char *yyformat = YY_NULLPTR;
+  /* Arguments of yyformat: reported tokens (one for the "unexpected",
+     one per "expected"). */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
+  /* Actual size of YYARG. */
   int yycount = 0;
+  /* Cumulated lengths of YYARG.  */
+  YYPTRDIFF_T yysize = 0;
 
   /* 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
@@ -1728,6 +1672,8 @@
   if (yytoken != YYEMPTY)
     {
       int yyn = yypact[*yyssp];
+      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+      yysize = yysize0;
       YYDPRINTF ((stderr, "Constructing syntax error message\n"));
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
@@ -1752,11 +1698,14 @@
                     break;
                   }
                 yyarg[yycount++] = yytname[yyx];
-                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
-                if (! (yysize <= yysize1
-                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                  return 2;
-                yysize = yysize1;
+                {
+                  YYPTRDIFF_T yysize1
+                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
+                    return 2;
+                }
               }
         }
 # if GRAM_DEBUG
@@ -1771,6 +1720,7 @@
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1780,10 +1730,15 @@
 # undef YYCASE_
     }
 
-  yysize1 = yysize + yystrlen (yyformat);
-  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-    return 2;
-  yysize = yysize1;
+  {
+    /* Don't count the "%s"s in the final size, but reserve room for
+       the terminator.  */
+    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+      yysize = yysize1;
+    else
+      return 2;
+  }
 
   if (*yymsg_alloc < yysize)
     {
@@ -1808,8 +1763,8 @@
         }
       else
         {
-          yyp++;
-          yyformat++;
+          ++yyp;
+          ++yyformat;
         }
   }
   return 0;
@@ -1820,33 +1775,76 @@
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep, yylocationp)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-    YYLTYPE *yylocationp;
-#endif
 {
   YYUSE (yyvaluep);
   YYUSE (yylocationp);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yytype)
     {
+    case 74: /* generic_symlist  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).generic_symlist)); }
+#line 1794 "src/parse-gram.c"
+        break;
+
+    case 75: /* generic_symlist_item  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).generic_symlist_item)); }
+#line 1800 "src/parse-gram.c"
+        break;
+
+    case 77: /* nterm_decls  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).nterm_decls)); }
+#line 1806 "src/parse-gram.c"
+        break;
+
+    case 78: /* token_decls  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).token_decls)); }
+#line 1812 "src/parse-gram.c"
+        break;
+
+    case 79: /* token_decl.1  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).yytype_79)); }
+#line 1818 "src/parse-gram.c"
+        break;
+
+    case 82: /* token_decls_for_prec  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).token_decls_for_prec)); }
+#line 1824 "src/parse-gram.c"
+        break;
+
+    case 83: /* token_decl_for_prec.1  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).yytype_83)); }
+#line 1830 "src/parse-gram.c"
+        break;
+
+    case 85: /* symbol_decls  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).symbol_decls)); }
+#line 1836 "src/parse-gram.c"
+        break;
+
+    case 86: /* symbol_decl.1  */
+#line 242 "src/parse-gram.y"
+            { symbol_list_free (((*yyvaluep).yytype_86)); }
+#line 1842 "src/parse-gram.c"
+        break;
 
       default:
-	break;
+        break;
     }
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
@@ -1856,84 +1854,46 @@
 | yyparse.  |
 `----------*/
 
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
 /* The lookahead symbol.  */
 int yychar;
 
 
-#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
+/* The semantic value of the lookahead symbol.  */
 /* 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
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
+YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 
 /* Location data for the lookahead symbol.  */
-YYLTYPE yylloc
+static YYLTYPE yyloc_default
 # if defined GRAM_LTYPE_IS_TRIVIAL && GRAM_LTYPE_IS_TRIVIAL
   = { 1, 1, 1, 1 }
 # endif
 ;
-
+YYLTYPE yylloc = yyloc_default;
 
     /* Number of syntax errors so far.  */
     int yynerrs;
 
-    int yystate;
+    yy_state_fast_t 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.
+       '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;
+    yy_state_t yyssa[YYINITDEPTH];
+    yy_state_t *yyss;
+    yy_state_t *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
@@ -1948,11 +1908,11 @@
     /* The locations where the error started and ended.  */
     YYLTYPE yyerror_range[3];
 
-    YYSIZE_T yystacksize;
+    YYPTRDIFF_T yystacksize;
 
-    yytype_int16 yyesa[20];
-    yytype_int16 *yyes;
-    YYSIZE_T yyes_capacity;
+    yy_state_t yyesa[20];
+    yy_state_t *yyes;
+    YYPTRDIFF_T yyes_capacity;
 
   int yy_lac_established = 0;
   int yyn;
@@ -1968,7 +1928,7 @@
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
@@ -1983,7 +1943,7 @@
   yystacksize = YYINITDEPTH;
 
   yyes = yyesa;
-  yyes_capacity = sizeof yyesa / sizeof *yyes;
+  yyes_capacity = 20;
   if (YYMAXDEPTH < yyes_capacity)
     yyes_capacity = YYMAXDEPTH;
 
@@ -1995,108 +1955,117 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
 
 /* User initialization code.  */
-/* Line 1560 of yacc.c  */
-#line 107 "parse-gram.y"
+#line 136 "src/parse-gram.y"
 {
   /* Bison's grammar can initial empty locations, hence a default
      location is needed. */
-  boundary_set (&yylloc.start, current_file, 1, 1);
-  boundary_set (&yylloc.end, current_file, 1, 1);
+  boundary_set (&yylloc.start, grammar_file, 1, 1, 1);
+  boundary_set (&yylloc.end, grammar_file, 1, 1, 1);
 }
-/* Line 1560 of yacc.c  */
-#line 2008 "parse-gram.c"
+
+#line 1967 "src/parse-gram.c"
+
   yylsp[0] = yylloc;
   goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
-  *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+  YY_IGNORE_USELESS_CAST_BEGIN
+  *yyssp = YY_CAST (yy_state_t, yystate);
+  YY_IGNORE_USELESS_CAST_END
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYPTRDIFF_T yysize = yyssp - yyss + 1;
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-	YYLTYPE *yyls1 = yyls;
+        /* Give user a chance to reallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        yy_state_t *yyss1 = yyss;
+        YYSTYPE *yyvs1 = yyvs;
+        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
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yyls1, yysize * sizeof (*yylsp),
-		    &yystacksize);
-
-	yyls = yyls1;
-	yyss = yyss1;
-	yyvs = yyvs1;
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * YYSIZEOF (*yyssp),
+                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yyls1, yysize * YYSIZEOF (*yylsp),
+                    &yystacksize);
+        yyss = yyss1;
+        yyvs = yyvs1;
+        yyls = yyls1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-	YYSTACK_RELOCATE (yyls_alloc, yyls);
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        yy_state_t *yyss1 = yyss;
+        union yyalloc *yyptr =
+          YY_CAST (union yyalloc *,
+                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        YYSTACK_RELOCATE (yyls_alloc, yyls);
+# undef YYSTACK_RELOCATE
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
       yylsp = yyls + yysize - 1;
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+      YY_IGNORE_USELESS_CAST_BEGIN
+      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+                  YY_CAST (long, yystacksize)));
+      YY_IGNORE_USELESS_CAST_END
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -2111,7 +2080,7 @@
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex (&yylval, &yylloc);
     }
 
   if (yychar <= YYEOF)
@@ -2150,16 +2119,15 @@
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* 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;
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+  YY_LAC_DISCARD ("shift");
   goto yynewstate;
 
 
@@ -2174,14 +2142,14 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -2190,709 +2158,748 @@
      GCC warning that YYVAL may be used uninitialized.  */
   yyval = yyvsp[1-yylen];
 
-  /* Default location.  */
+  /* Default location. */
   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+  yyerror_range[1] = yyloc;
   YY_REDUCE_PRINT (yyn);
   {
     int yychar_backup = yychar;
     switch (yyn)
       {
-          case 6:
-/* Line 1778 of yacc.c  */
-#line 246 "parse-gram.y"
+  case 6:
+#line 309 "src/parse-gram.y"
     {
-      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)]));
+                        translate_code ((yyvsp[0].PROLOGUE), (yylsp[0]), true), (yylsp[0]));
       code_scanner_last_string_free ();
     }
+#line 2177 "src/parse-gram.c"
     break;
 
   case 7:
-/* Line 1778 of yacc.c  */
-#line 255 "parse-gram.y"
-    { debug = true; }
+#line 315 "src/parse-gram.y"
+    {
+      muscle_percent_define_ensure ((yyvsp[0].PERCENT_FLAG), (yylsp[0]), true);
+    }
+#line 2185 "src/parse-gram.c"
     break;
 
   case 8:
-/* Line 1778 of yacc.c  */
-#line 257 "parse-gram.y"
+#line 319 "src/parse-gram.y"
     {
-      muscle_percent_define_insert ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars),
+      muscle_percent_define_insert ((yyvsp[-1].variable), (yyloc), (yyvsp[0].value).kind, (yyvsp[0].value).chars,
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
     }
+#line 2194 "src/parse-gram.c"
     break;
 
   case 9:
-/* Line 1778 of yacc.c  */
-#line 261 "parse-gram.y"
-    { defines_flag = true; }
+#line 323 "src/parse-gram.y"
+                                   { defines_flag = true; }
+#line 2200 "src/parse-gram.c"
     break;
 
   case 10:
-/* Line 1778 of yacc.c  */
-#line 263 "parse-gram.y"
+#line 325 "src/parse-gram.y"
     {
       defines_flag = true;
-      spec_defines_file = xstrdup ((yyvsp[(2) - (2)].chars));
+      spec_header_file = xstrdup ((yyvsp[0].STRING));
     }
+#line 2209 "src/parse-gram.c"
     break;
 
   case 11:
-/* Line 1778 of yacc.c  */
-#line 267 "parse-gram.y"
-    { error_verbose = true; }
+#line 329 "src/parse-gram.y"
+                                   { handle_error_verbose (&(yyloc), (yyvsp[0].PERCENT_ERROR_VERBOSE)); }
+#line 2215 "src/parse-gram.c"
     break;
 
   case 12:
-/* Line 1778 of yacc.c  */
-#line 268 "parse-gram.y"
-    { expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
+#line 330 "src/parse-gram.y"
+                                   { expected_sr_conflicts = (yyvsp[0].INT); }
+#line 2221 "src/parse-gram.c"
     break;
 
   case 13:
-/* Line 1778 of yacc.c  */
-#line 269 "parse-gram.y"
-    { expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
+#line 331 "src/parse-gram.y"
+                                   { expected_rr_conflicts = (yyvsp[0].INT); }
+#line 2227 "src/parse-gram.c"
     break;
 
   case 14:
-/* Line 1778 of yacc.c  */
-#line 270 "parse-gram.y"
-    { spec_file_prefix = (yyvsp[(2) - (2)].chars); }
+#line 332 "src/parse-gram.y"
+                                   { handle_file_prefix (&(yyloc), &(yylsp[-1]), (yyvsp[-1].PERCENT_FILE_PREFIX), (yyvsp[0].STRING)); }
+#line 2233 "src/parse-gram.c"
     break;
 
   case 15:
-/* 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"
+#line 334 "src/parse-gram.y"
     {
       nondeterministic_parser = true;
       glr_parser = true;
     }
+#line 2242 "src/parse-gram.c"
+    break;
+
+  case 16:
+#line 339 "src/parse-gram.y"
+    {
+      muscle_code_grow ("initial_action", translate_code ((yyvsp[0].BRACED_CODE), (yylsp[0]), false), (yylsp[0]));
+      code_scanner_last_string_free ();
+    }
+#line 2251 "src/parse-gram.c"
     break;
 
   case 17:
-/* Line 1778 of yacc.c  */
-#line 278 "parse-gram.y"
-    {
-      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 ();
-    }
+#line 343 "src/parse-gram.y"
+                                { language_argmatch ((yyvsp[0].STRING), grammar_prio, (yylsp[-1])); }
+#line 2257 "src/parse-gram.c"
     break;
 
   case 18:
-/* Line 1778 of yacc.c  */
-#line 286 "parse-gram.y"
-    { language_argmatch ((yyvsp[(2) - (2)].chars), grammar_prio, (yylsp[(1) - (2)])); }
+#line 344 "src/parse-gram.y"
+                                { handle_name_prefix (&(yyloc), (yyvsp[-1].PERCENT_NAME_PREFIX), (yyvsp[0].STRING)); }
+#line 2263 "src/parse-gram.c"
     break;
 
   case 19:
-/* Line 1778 of yacc.c  */
-#line 287 "parse-gram.y"
-    { add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
+#line 345 "src/parse-gram.y"
+                                { no_lines_flag = true; }
+#line 2269 "src/parse-gram.c"
     break;
 
   case 20:
-/* Line 1778 of yacc.c  */
-#line 288 "parse-gram.y"
-    { locations_flag = true; }
+#line 346 "src/parse-gram.y"
+                                { nondeterministic_parser = true; }
+#line 2275 "src/parse-gram.c"
     break;
 
   case 21:
-/* Line 1778 of yacc.c  */
-#line 289 "parse-gram.y"
-    { spec_name_prefix = (yyvsp[(2) - (2)].chars); }
+#line 347 "src/parse-gram.y"
+                                { spec_outfile = (yyvsp[0].STRING); }
+#line 2281 "src/parse-gram.c"
     break;
 
   case 22:
-/* Line 1778 of yacc.c  */
-#line 290 "parse-gram.y"
-    { spec_name_prefix = (yyvsp[(3) - (3)].chars); }
+#line 348 "src/parse-gram.y"
+           { current_param = (yyvsp[0].PERCENT_PARAM); }
+#line 2287 "src/parse-gram.c"
     break;
 
   case 23:
-/* Line 1778 of yacc.c  */
-#line 291 "parse-gram.y"
-    { no_lines_flag = true; }
+#line 348 "src/parse-gram.y"
+                                          { current_param = param_none; }
+#line 2293 "src/parse-gram.c"
     break;
 
   case 24:
-/* Line 1778 of yacc.c  */
-#line 292 "parse-gram.y"
-    { nondeterministic_parser = true; }
+#line 349 "src/parse-gram.y"
+                                { handle_pure_parser (&(yyloc), (yyvsp[0].PERCENT_PURE_PARSER)); }
+#line 2299 "src/parse-gram.c"
     break;
 
   case 25:
-/* Line 1778 of yacc.c  */
-#line 293 "parse-gram.y"
-    { spec_outfile = (yyvsp[(2) - (2)].chars); }
+#line 350 "src/parse-gram.y"
+                                { handle_require (&(yylsp[0]), (yyvsp[0].STRING)); }
+#line 2305 "src/parse-gram.c"
     break;
 
   case 26:
-/* Line 1778 of yacc.c  */
-#line 294 "parse-gram.y"
-    { spec_outfile = (yyvsp[(3) - (3)].chars); }
+#line 351 "src/parse-gram.y"
+                                { handle_skeleton (&(yylsp[0]), (yyvsp[0].STRING)); }
+#line 2311 "src/parse-gram.c"
     break;
 
   case 27:
-/* Line 1778 of yacc.c  */
-#line 295 "parse-gram.y"
-    { add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
+#line 352 "src/parse-gram.y"
+                                { token_table_flag = true; }
+#line 2317 "src/parse-gram.c"
     break;
 
   case 28:
-/* 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);
-    }
+#line 353 "src/parse-gram.y"
+                                { report_flag |= report_states; }
+#line 2323 "src/parse-gram.c"
     break;
 
   case 29:
-/* Line 1778 of yacc.c  */
-#line 311 "parse-gram.y"
-    { version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
+#line 354 "src/parse-gram.y"
+                                { handle_yacc (&(yyloc)); }
+#line 2329 "src/parse-gram.c"
     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; }
+#line 355 "src/parse-gram.y"
+                                { current_class = unknown_sym; yyerrok; }
+#line 2335 "src/parse-gram.c"
     break;
 
   case 32:
-/* Line 1778 of yacc.c  */
-#line 337 "parse-gram.y"
-    { report_flag |= report_states; }
+#line 360 "src/parse-gram.y"
+                   { add_param (current_param, (yyvsp[0].BRACED_CODE), (yylsp[0])); }
+#line 2341 "src/parse-gram.c"
     break;
 
   case 33:
-/* Line 1778 of yacc.c  */
-#line 338 "parse-gram.y"
-    { yacc_flag = true; }
+#line 361 "src/parse-gram.y"
+                   { add_param (current_param, (yyvsp[0].BRACED_CODE), (yylsp[0])); }
+#line 2347 "src/parse-gram.c"
+    break;
+
+  case 35:
+#line 372 "src/parse-gram.y"
+    {
+      grammar_start_symbol_set ((yyvsp[0].symbol), (yylsp[0]));
+    }
+#line 2355 "src/parse-gram.c"
+    break;
+
+  case 36:
+#line 376 "src/parse-gram.y"
+    {
+      code_props code;
+      code_props_symbol_action_init (&code, (yyvsp[-1].BRACED_CODE), (yylsp[-1]));
+      code_props_translate_code (&code);
+      {
+        for (symbol_list *list = (yyvsp[0].generic_symlist); list; list = list->next)
+          symbol_list_code_props_set (list, (yyvsp[-2].code_props_type), &code);
+        symbol_list_free ((yyvsp[0].generic_symlist));
+      }
+    }
+#line 2370 "src/parse-gram.c"
     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 38:
-/* Line 1778 of yacc.c  */
-#line 350 "parse-gram.y"
-    {
-      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 39:
-/* Line 1778 of yacc.c  */
-#line 362 "parse-gram.y"
-    {
-      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 40:
-/* Line 1778 of yacc.c  */
-#line 374 "parse-gram.y"
+#line 387 "src/parse-gram.y"
     {
       default_prec = true;
     }
+#line 2378 "src/parse-gram.c"
     break;
 
-  case 41:
-/* Line 1778 of yacc.c  */
-#line 378 "parse-gram.y"
+  case 38:
+#line 391 "src/parse-gram.y"
     {
       default_prec = false;
     }
+#line 2386 "src/parse-gram.c"
     break;
 
-  case 42:
-/* Line 1778 of yacc.c  */
-#line 382 "parse-gram.y"
+  case 39:
+#line 395 "src/parse-gram.y"
     {
       /* 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)]));
+      muscle_code_grow ("percent_code()",
+                        translate_code_braceless ((yyvsp[0].BRACED_CODE), (yylsp[0])), (yylsp[0]));
       code_scanner_last_string_free ();
     }
+#line 2398 "src/parse-gram.c"
+    break;
+
+  case 40:
+#line 403 "src/parse-gram.y"
+    {
+      muscle_percent_code_grow ((yyvsp[-1].ID), (yylsp[-1]), translate_code_braceless ((yyvsp[0].BRACED_CODE), (yylsp[0])), (yylsp[0]));
+      code_scanner_last_string_free ();
+    }
+#line 2407 "src/parse-gram.c"
+    break;
+
+  case 41:
+#line 412 "src/parse-gram.y"
+                 { (yyval.code_props_type) = destructor; }
+#line 2413 "src/parse-gram.c"
+    break;
+
+  case 42:
+#line 413 "src/parse-gram.y"
+                 { (yyval.code_props_type) = printer; }
+#line 2419 "src/parse-gram.c"
     break;
 
   case 43:
-/* Line 1778 of yacc.c  */
-#line 389 "parse-gram.y"
-    {
-      muscle_percent_code_grow ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
-      code_scanner_last_string_free ();
-    }
+#line 423 "src/parse-gram.y"
+         {}
+#line 2425 "src/parse-gram.c"
     break;
 
   case 44:
-/* Line 1778 of yacc.c  */
-#line 403 "parse-gram.y"
-    {}
+#line 424 "src/parse-gram.y"
+         { muscle_percent_define_insert ("api.value.union.name",
+                                         (yylsp[0]), muscle_keyword, (yyvsp[0].ID),
+                                         MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
+#line 2433 "src/parse-gram.c"
     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)])); }
+#line 431 "src/parse-gram.y"
+    {
+      union_seen = true;
+      muscle_code_grow ("union_members", translate_code_braceless ((yyvsp[0].BRACED_CODE), (yylsp[0])), (yylsp[0]));
+      code_scanner_last_string_free ();
+    }
+#line 2443 "src/parse-gram.c"
     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 ();
-    }
+#line 443 "src/parse-gram.y"
+           { current_class = nterm_sym; }
+#line 2449 "src/parse-gram.c"
     break;
 
   case 47:
-/* Line 1778 of yacc.c  */
-#line 420 "parse-gram.y"
-    { current_class = nterm_sym; }
+#line 444 "src/parse-gram.y"
+    {
+      current_class = unknown_sym;
+      symbol_list_free ((yyvsp[0].nterm_decls));
+    }
+#line 2458 "src/parse-gram.c"
     break;
 
   case 48:
-/* Line 1778 of yacc.c  */
-#line 421 "parse-gram.y"
-    {
-      current_class = unknown_sym;
-      current_type = NULL;
-    }
+#line 448 "src/parse-gram.y"
+           { current_class = token_sym; }
+#line 2464 "src/parse-gram.c"
     break;
 
   case 49:
-/* Line 1778 of yacc.c  */
-#line 425 "parse-gram.y"
-    { current_class = token_sym; }
+#line 449 "src/parse-gram.y"
+    {
+      current_class = unknown_sym;
+      symbol_list_free ((yyvsp[0].token_decls));
+    }
+#line 2473 "src/parse-gram.c"
     break;
 
   case 50:
-/* Line 1778 of yacc.c  */
-#line 426 "parse-gram.y"
+#line 454 "src/parse-gram.y"
     {
-      current_class = unknown_sym;
-      current_type = NULL;
+      symbol_list_free ((yyvsp[0].symbol_decls));
     }
+#line 2481 "src/parse-gram.c"
     break;
 
   case 51:
-/* Line 1778 of yacc.c  */
-#line 431 "parse-gram.y"
+#line 458 "src/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));
+      ++current_prec;
+      for (symbol_list *list = (yyvsp[0].token_decls_for_prec); list; list = list->next)
+        symbol_precedence_set (list->content.sym, current_prec, (yyvsp[-1].precedence_declarator), (yylsp[-1]));
+      symbol_list_free ((yyvsp[0].token_decls_for_prec));
     }
+#line 2492 "src/parse-gram.c"
     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->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;
-    }
+#line 467 "src/parse-gram.y"
+                { (yyval.precedence_declarator) = left_assoc; }
+#line 2498 "src/parse-gram.c"
     break;
 
   case 53:
-/* Line 1778 of yacc.c  */
-#line 456 "parse-gram.y"
-    { (yyval.assoc) = left_assoc; }
+#line 468 "src/parse-gram.y"
+                { (yyval.precedence_declarator) = right_assoc; }
+#line 2504 "src/parse-gram.c"
     break;
 
   case 54:
-/* Line 1778 of yacc.c  */
-#line 457 "parse-gram.y"
-    { (yyval.assoc) = right_assoc; }
+#line 469 "src/parse-gram.y"
+                { (yyval.precedence_declarator) = non_assoc; }
+#line 2510 "src/parse-gram.c"
     break;
 
   case 55:
-/* Line 1778 of yacc.c  */
-#line 458 "parse-gram.y"
-    { (yyval.assoc) = non_assoc; }
+#line 470 "src/parse-gram.y"
+                { (yyval.precedence_declarator) = precedence_assoc; }
+#line 2516 "src/parse-gram.c"
     break;
 
   case 56:
-/* Line 1778 of yacc.c  */
-#line 462 "parse-gram.y"
-    { current_type = NULL; }
+#line 474 "src/parse-gram.y"
+         { (yyval.yytype_73) = NULL; }
+#line 2522 "src/parse-gram.c"
     break;
 
   case 57:
-/* Line 1778 of yacc.c  */
-#line 463 "parse-gram.y"
-    { current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; }
-    break;
-
-  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)])); }
+#line 475 "src/parse-gram.y"
+         { (yyval.yytype_73) = (yyvsp[0].TAG); }
+#line 2528 "src/parse-gram.c"
     break;
 
   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)]))); }
+#line 481 "src/parse-gram.y"
+                                         { (yyval.generic_symlist) = symbol_list_append ((yyvsp[-1].generic_symlist), (yyvsp[0].generic_symlist_item)); }
+#line 2534 "src/parse-gram.c"
     break;
 
   case 60:
-/* Line 1778 of yacc.c  */
-#line 475 "parse-gram.y"
-    { (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
+#line 485 "src/parse-gram.y"
+            { (yyval.generic_symlist_item) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
+#line 2540 "src/parse-gram.c"
     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)])); }
+#line 486 "src/parse-gram.y"
+            { (yyval.generic_symlist_item) = symbol_list_type_new ((yyvsp[0].tag), (yylsp[0])); }
+#line 2546 "src/parse-gram.c"
     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)]))); }
+#line 491 "src/parse-gram.y"
+        { (yyval.tag) = uniqstr_new ("*"); }
+#line 2552 "src/parse-gram.c"
     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)); }
+#line 492 "src/parse-gram.y"
+        { (yyval.tag) = uniqstr_new (""); }
+#line 2558 "src/parse-gram.c"
     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)])); }
+#line 515 "src/parse-gram.y"
+    {
+      (yyval.token_decls) = (yyvsp[0].yytype_79);
+    }
+#line 2566 "src/parse-gram.c"
     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)])); }
+#line 519 "src/parse-gram.y"
+    {
+      (yyval.token_decls) = symbol_list_type_set ((yyvsp[0].yytype_79), (yyvsp[-1].TAG), (yylsp[-1]));
+    }
+#line 2574 "src/parse-gram.c"
     break;
 
   case 68:
-/* Line 1778 of yacc.c  */
-#line 495 "parse-gram.y"
-    { (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); }
+#line 523 "src/parse-gram.y"
+    {
+      (yyval.token_decls) = symbol_list_append ((yyvsp[-2].token_decls), symbol_list_type_set ((yyvsp[0].yytype_79), (yyvsp[-1].TAG), (yylsp[-1])));
+    }
+#line 2582 "src/parse-gram.c"
     break;
 
   case 69:
-/* Line 1778 of yacc.c  */
-#line 496 "parse-gram.y"
-    { (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); }
+#line 530 "src/parse-gram.y"
+                            { (yyval.yytype_79) = symbol_list_sym_new ((yyvsp[0].token_decl), (yylsp[0])); }
+#line 2588 "src/parse-gram.c"
     break;
 
   case 70:
-/* Line 1778 of yacc.c  */
-#line 502 "parse-gram.y"
-    {
-       current_type = (yyvsp[(1) - (1)].uniqstr);
-       tag_seen = true;
-     }
+#line 531 "src/parse-gram.y"
+                            { (yyval.yytype_79) = symbol_list_append ((yyvsp[-1].yytype_79), symbol_list_sym_new ((yyvsp[0].token_decl), (yylsp[0]))); }
+#line 2594 "src/parse-gram.c"
     break;
 
   case 71:
-/* Line 1778 of yacc.c  */
-#line 507 "parse-gram.y"
+#line 536 "src/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)]));
-     }
+      (yyval.token_decl) = (yyvsp[-2].id);
+      symbol_class_set ((yyvsp[-2].id), current_class, (yylsp[-2]), true);
+      if (0 <= (yyvsp[-1].yytype_81))
+        symbol_user_token_number_set ((yyvsp[-2].id), (yyvsp[-1].yytype_81), (yylsp[-1]));
+      if ((yyvsp[0].yytype_100))
+        symbol_make_alias ((yyvsp[-2].id), (yyvsp[0].yytype_100), (yylsp[0]));
+    }
+#line 2607 "src/parse-gram.c"
     break;
 
   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)]));
-      symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)]));
-    }
-    break;
-
-  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)]));
-      symbol_make_alias ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].symbol), (yyloc));
-    }
+#line 548 "src/parse-gram.y"
+          { (yyval.yytype_81) = -1; }
+#line 2613 "src/parse-gram.c"
     break;
 
   case 74:
-/* Line 1778 of yacc.c  */
-#line 524 "parse-gram.y"
+#line 562 "src/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)]));
-      symbol_user_token_number_set ((yyvsp[(1) - (3)].symbol), (yyvsp[(2) - (3)].integer), (yylsp[(2) - (3)]));
-      symbol_make_alias ((yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol), (yyloc));
+      (yyval.token_decls_for_prec) = (yyvsp[0].yytype_83);
     }
+#line 2621 "src/parse-gram.c"
+    break;
+
+  case 75:
+#line 566 "src/parse-gram.y"
+    {
+      (yyval.token_decls_for_prec) = symbol_list_type_set ((yyvsp[0].yytype_83), (yyvsp[-1].TAG), (yylsp[-1]));
+    }
+#line 2629 "src/parse-gram.c"
+    break;
+
+  case 76:
+#line 570 "src/parse-gram.y"
+    {
+      (yyval.token_decls_for_prec) = symbol_list_append ((yyvsp[-2].token_decls_for_prec), symbol_list_type_set ((yyvsp[0].yytype_83), (yyvsp[-1].TAG), (yylsp[-1])));
+    }
+#line 2637 "src/parse-gram.c"
+    break;
+
+  case 77:
+#line 578 "src/parse-gram.y"
+    { (yyval.yytype_83) = symbol_list_sym_new ((yyvsp[0].token_decl_for_prec), (yylsp[0])); }
+#line 2643 "src/parse-gram.c"
+    break;
+
+  case 78:
+#line 580 "src/parse-gram.y"
+    { (yyval.yytype_83) = symbol_list_append ((yyvsp[-1].yytype_83), symbol_list_sym_new ((yyvsp[0].token_decl_for_prec), (yylsp[0]))); }
+#line 2649 "src/parse-gram.c"
+    break;
+
+  case 79:
+#line 585 "src/parse-gram.y"
+    {
+      (yyval.token_decl_for_prec) = (yyvsp[-1].id);
+      symbol_class_set ((yyvsp[-1].id), token_sym, (yylsp[-1]), false);
+      if (0 <= (yyvsp[0].yytype_81))
+        symbol_user_token_number_set ((yyvsp[-1].id), (yyvsp[0].yytype_81), (yylsp[0]));
+    }
+#line 2660 "src/parse-gram.c"
     break;
 
   case 81:
-/* Line 1778 of yacc.c  */
-#line 554 "parse-gram.y"
+#line 602 "src/parse-gram.y"
     {
-      yyerrok;
+      (yyval.symbol_decls) = (yyvsp[0].yytype_86);
     }
+#line 2668 "src/parse-gram.c"
     break;
 
   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)); }
+#line 606 "src/parse-gram.y"
+    {
+      (yyval.symbol_decls) = symbol_list_type_set ((yyvsp[0].yytype_86), (yyvsp[-1].TAG), (yylsp[-1]));
+    }
+#line 2676 "src/parse-gram.c"
     break;
 
   case 83:
-/* Line 1778 of yacc.c  */
-#line 561 "parse-gram.y"
+#line 610 "src/parse-gram.y"
     {
-    /* Free the current lhs. */
-    current_lhs (0, (yylsp[(1) - (4)]), 0);
-  }
+      (yyval.symbol_decls) = symbol_list_append ((yyvsp[-2].symbol_decls), symbol_list_type_set ((yyvsp[0].yytype_86), (yyvsp[-1].TAG), (yylsp[-1])));
+    }
+#line 2684 "src/parse-gram.c"
     break;
 
   case 84:
-/* Line 1778 of yacc.c  */
-#line 568 "parse-gram.y"
-    { grammar_current_rule_end ((yylsp[(1) - (1)])); }
+#line 618 "src/parse-gram.y"
+    {
+      symbol_class_set ((yyvsp[0].symbol), pct_type_sym, (yylsp[0]), false);
+      (yyval.yytype_86) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]));
+    }
+#line 2693 "src/parse-gram.c"
     break;
 
   case 85:
-/* Line 1778 of yacc.c  */
-#line 569 "parse-gram.y"
-    { grammar_current_rule_end ((yylsp[(3) - (3)])); }
-    break;
-
-  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 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 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)); }
+#line 623 "src/parse-gram.y"
+    {
+      symbol_class_set ((yyvsp[0].symbol), pct_type_sym, (yylsp[0]), false);
+      (yyval.yytype_86) = symbol_list_append ((yyvsp[-1].yytype_86), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])));
+    }
+#line 2702 "src/parse-gram.c"
     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)])); }
+#line 644 "src/parse-gram.y"
+    {
+      yyerrok;
+    }
+#line 2710 "src/parse-gram.c"
     break;
 
   case 91:
-/* Line 1778 of yacc.c  */
-#line 584 "parse-gram.y"
-    { grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
+#line 650 "src/parse-gram.y"
+                         { current_lhs ((yyvsp[-1].id_colon), (yylsp[-1]), (yyvsp[0].yytype_93)); }
+#line 2716 "src/parse-gram.c"
     break;
 
   case 92:
-/* Line 1778 of yacc.c  */
-#line 586 "parse-gram.y"
-    { grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
+#line 651 "src/parse-gram.y"
+    {
+      /* Free the current lhs. */
+      current_lhs (0, (yylsp[-4]), 0);
+    }
+#line 2725 "src/parse-gram.c"
     break;
 
   case 93:
-/* Line 1778 of yacc.c  */
-#line 590 "parse-gram.y"
-    { (yyval.named_ref) = 0; }
+#line 658 "src/parse-gram.y"
+                     { grammar_current_rule_end ((yylsp[0])); }
+#line 2731 "src/parse-gram.c"
     break;
 
   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)])); }
+#line 659 "src/parse-gram.y"
+                     { grammar_current_rule_end ((yylsp[0])); }
+#line 2737 "src/parse-gram.c"
     break;
 
   case 96:
-/* Line 1778 of yacc.c  */
-#line 604 "parse-gram.y"
-    { (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); }
+#line 666 "src/parse-gram.y"
+    { grammar_current_rule_begin (current_lhs_symbol, current_lhs_loc,
+                                  current_lhs_named_ref); }
+#line 2744 "src/parse-gram.c"
     break;
 
   case 97:
-/* Line 1778 of yacc.c  */
-#line 609 "parse-gram.y"
-    { (yyval.chars) = ""; }
+#line 669 "src/parse-gram.y"
+    { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].yytype_93)); }
+#line 2750 "src/parse-gram.c"
     break;
 
   case 98:
-/* Line 1778 of yacc.c  */
-#line 610 "parse-gram.y"
-    { (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); }
+#line 671 "src/parse-gram.y"
+    { grammar_current_rule_action_append ((yyvsp[-1].BRACED_CODE), (yylsp[-1]), (yyvsp[0].yytype_93), (yyvsp[-2].yytype_73)); }
+#line 2756 "src/parse-gram.c"
+    break;
+
+  case 99:
+#line 673 "src/parse-gram.y"
+    { grammar_current_rule_predicate_append ((yyvsp[0].BRACED_PREDICATE), (yylsp[0])); }
+#line 2762 "src/parse-gram.c"
     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;
-    }
+#line 675 "src/parse-gram.y"
+    { grammar_current_rule_empty_set ((yylsp[0])); }
+#line 2768 "src/parse-gram.c"
     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)])); }
+#line 677 "src/parse-gram.y"
+    { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); }
+#line 2774 "src/parse-gram.c"
     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)]));
-    }
+#line 679 "src/parse-gram.y"
+    { grammar_current_rule_dprec_set ((yyvsp[0].INT), (yylsp[0])); }
+#line 2780 "src/parse-gram.c"
     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)])); }
+#line 681 "src/parse-gram.y"
+    { grammar_current_rule_merge_set ((yyvsp[0].TAG), (yylsp[0])); }
+#line 2786 "src/parse-gram.c"
+    break;
+
+  case 104:
+#line 683 "src/parse-gram.y"
+    { grammar_current_rule_expect_sr ((yyvsp[0].INT), (yylsp[0])); }
+#line 2792 "src/parse-gram.c"
+    break;
+
+  case 105:
+#line 685 "src/parse-gram.y"
+    { grammar_current_rule_expect_rr ((yyvsp[0].INT), (yylsp[0])); }
+#line 2798 "src/parse-gram.c"
     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);
-    }
+#line 689 "src/parse-gram.y"
+                 { (yyval.yytype_93) = NULL; }
+#line 2804 "src/parse-gram.c"
     break;
 
-  case 108:
-/* Line 1778 of yacc.c  */
-#line 672 "parse-gram.y"
+  case 107:
+#line 690 "src/parse-gram.y"
+                 { (yyval.yytype_93) = named_ref_new ((yyvsp[0].BRACKETED_ID), (yylsp[0])); }
+#line 2810 "src/parse-gram.c"
+    break;
+
+  case 109:
+#line 723 "src/parse-gram.y"
+          { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; }
+#line 2816 "src/parse-gram.c"
+    break;
+
+  case 110:
+#line 724 "src/parse-gram.y"
+          { (yyval.value).kind = muscle_keyword; (yyval.value).chars = (yyvsp[0].ID); }
+#line 2822 "src/parse-gram.c"
+    break;
+
+  case 111:
+#line 725 "src/parse-gram.y"
+          { (yyval.value).kind = muscle_string;  (yyval.value).chars = (yyvsp[0].STRING); }
+#line 2828 "src/parse-gram.c"
+    break;
+
+  case 112:
+#line 726 "src/parse-gram.y"
+          { (yyval.value).kind = muscle_code;    (yyval.value).chars = strip_braces ((yyvsp[0].BRACED_CODE)); }
+#line 2834 "src/parse-gram.c"
+    break;
+
+  case 113:
+#line 739 "src/parse-gram.y"
+    { (yyval.id) = symbol_from_uniqstr ((yyvsp[0].ID), (yylsp[0])); }
+#line 2840 "src/parse-gram.c"
+    break;
+
+  case 114:
+#line 741 "src/parse-gram.y"
     {
-      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)]));
+      const char *var = "api.token.raw";
+      if (current_class == nterm_sym)
+        {
+          complain (&(yylsp[0]), complaint,
+                    _("character literals cannot be nonterminals"));
+          YYERROR;
+        }
+      if (muscle_percent_define_ifdef (var))
+        {
+          int indent = 0;
+          complain_indent (&(yylsp[0]), complaint, &indent,
+                           _("character literals cannot be used together"
+                             " with %s"), var);
+          indent += SUB_INDENT;
+          location loc = muscle_percent_define_get_loc (var);
+          complain_indent (&loc, complaint, &indent,
+                           _("definition of %s"), var);
+        }
+      (yyval.id) = symbol_get (char_name ((yyvsp[0].CHAR)), (yylsp[0]));
+      symbol_class_set ((yyval.id), token_sym, (yylsp[0]), false);
+      symbol_user_token_number_set ((yyval.id), (yyvsp[0].CHAR), (yylsp[0]));
+    }
+#line 2868 "src/parse-gram.c"
+    break;
+
+  case 115:
+#line 767 "src/parse-gram.y"
+           { (yyval.id_colon) = symbol_from_uniqstr ((yyvsp[0].ID_COLON), (yylsp[0])); }
+#line 2874 "src/parse-gram.c"
+    break;
+
+  case 118:
+#line 779 "src/parse-gram.y"
+    {
+      (yyval.string_as_id) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[0].STRING)), (yylsp[0]));
+      symbol_class_set ((yyval.string_as_id), token_sym, (yylsp[0]), false);
+    }
+#line 2883 "src/parse-gram.c"
+    break;
+
+  case 119:
+#line 787 "src/parse-gram.y"
+                     { (yyval.yytype_100) = NULL; }
+#line 2889 "src/parse-gram.c"
+    break;
+
+  case 122:
+#line 794 "src/parse-gram.y"
+    {
+      muscle_code_grow ("epilogue", translate_code ((yyvsp[0].EPILOGUE), (yylsp[0]), true), (yylsp[0]));
       code_scanner_last_string_free ();
     }
+#line 2898 "src/parse-gram.c"
     break;
 
 
-/* Line 1778 of yacc.c  */
-#line 2896 "parse-gram.c"
+#line 2902 "src/parse-gram.c"
+
         default: break;
       }
     if (yychar_backup != yychar)
@@ -2918,24 +2925,23 @@
   *++yyvsp = yyval;
   *++yylsp = yyloc;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -2946,7 +2952,7 @@
     {
       ++yynerrs;
 #if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
+      yyerror (&yylloc, YY_("syntax error"));
 #else
 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
                                         yyesa, &yyes, &yyes_capacity, \
@@ -2963,7 +2969,7 @@
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -2976,7 +2982,7 @@
                 yymsgp = yymsg;
               }
           }
-        yyerror (yymsgp);
+        yyerror (&yylloc, yymsgp);
         if (yysyntax_error_status == 2)
           goto yyexhaustedlab;
       }
@@ -2989,20 +2995,20 @@
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval, &yylloc);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval, &yylloc);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -3014,15 +3020,12 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  yyerror_range[1] = yylsp[1-yylen];
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -3035,29 +3038,29 @@
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+        {
+          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 (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
       yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp, yylsp);
+                  yystos[yystate], yyvsp, yylsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -3091,6 +3094,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -3098,16 +3102,21 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if 1
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
 yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
+  yyerror (&yylloc, YY_("memory exhausted"));
   yyresult = 2;
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -3117,14 +3126,14 @@
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval, &yylloc);
     }
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp, yylsp);
+                  yystos[*yyssp], yyvsp, yylsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -3137,14 +3146,9 @@
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-/* Line 2041 of yacc.c  */
-#line 682 "parse-gram.y"
-
+#line 800 "src/parse-gram.y"
 
 
 /* Return the location of the left-hand side of a rule whose
@@ -3155,7 +3159,6 @@
 static YYLTYPE
 lloc_default (YYLTYPE const *rhs, int n)
 {
-  int i;
   YYLTYPE loc;
 
   /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
@@ -3166,54 +3169,83 @@
   /* 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++)
+  for (int i = 1; i <= n; i++)
     if (! equal_boundaries (rhs[i].start, rhs[i].end))
       {
-	loc.start = rhs[i].start;
-	break;
+        loc.start = rhs[i].start;
+        break;
       }
 
   return loc;
 }
 
+static
+char *strip_braces (char *code)
+{
+  code[strlen (code) - 1] = 0;
+  return code + 1;
+}
 
-/* Add a lex-param or a parse-param (depending on TYPE) with
-   declaration DECL and location LOC.  */
+static
+char const *
+translate_code (char *code, location loc, bool plain)
+{
+  code_props plain_code;
+  if (plain)
+    code_props_plain_init (&plain_code, code, loc);
+  else
+    code_props_symbol_action_init (&plain_code, code, loc);
+  code_props_translate_code (&plain_code);
+  gram_scanner_last_string_free ();
+  return plain_code.code;
+}
+
+static
+char const *
+translate_code_braceless (char *code, location loc)
+{
+  return translate_code (strip_braces (code), loc, true);
+}
 
 static void
-add_param (char const *type, char *decl, location loc)
+add_param (param_type type, char *decl, location loc)
 {
-  static char const alphanum[26 + 26 + 1 + 10] =
+  static char const alphanum[26 + 26 + 1 + 10 + 1] =
     "abcdefghijklmnopqrstuvwxyz"
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     "_"
     "0123456789";
+
   char const *name_start = NULL;
-  char *p;
+  {
+    char *p;
+    /* Stop on last actual character.  */
+    for (p = decl; p[1]; p++)
+      if ((p == decl
+           || ! memchr (alphanum, p[-1], sizeof alphanum - 1))
+          && memchr (alphanum, p[0], sizeof alphanum - 10 - 1))
+        name_start = p;
 
-  /* Stop on last actual character.  */
-  for (p = decl; p[1]; p++)
-    if ((p == decl
-	 || ! memchr (alphanum, p[-1], sizeof alphanum))
-	&& memchr (alphanum, p[0], sizeof alphanum - 10))
-      name_start = p;
-
-  /* Strip the surrounding '{' and '}', and any blanks just inside
-     the braces.  */
-  --p;
-  while (c_isspace ((unsigned char) *p))
+    /* Strip the surrounding '{' and '}', and any blanks just inside
+       the braces.  */
     --p;
-  p[1] = '\0';
-  ++decl;
-  while (c_isspace ((unsigned char) *decl))
+    while (c_isspace ((unsigned char) *p))
+      --p;
+    p[1] = '\0';
     ++decl;
+    while (c_isspace ((unsigned char) *decl))
+      ++decl;
+  }
 
   if (! name_start)
-    complain_at (loc, _("missing identifier in parameter declaration"));
+    complain (&loc, complaint, _("missing identifier in parameter declaration"));
   else
     {
       char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
-      muscle_pair_list_grow (type, decl, name);
+      if (type & param_lex)
+        muscle_pair_list_grow ("lex_param", decl, name);
+      if (type & param_parse)
+        muscle_pair_list_grow ("parse_param", decl, name);
       free (name);
     }
 
@@ -3222,26 +3254,181 @@
 
 
 static void
-version_check (location const *loc, char const *version)
+handle_error_verbose (location const *loc, char const *directive)
 {
-  if (strverscmp (version, PACKAGE_VERSION) > 0)
+  bison_directive (loc, directive);
+  muscle_percent_define_insert (directive, *loc, muscle_keyword, "",
+                                MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+}
+
+
+static void
+handle_file_prefix (location const *loc,
+                    location const *dir_loc,
+                    char const *directive, char const *value)
+{
+  bison_directive (loc, directive);
+  bool warned = false;
+
+  if (location_empty (spec_file_prefix_loc))
     {
-      complain_at (*loc, "require bison %s, but have %s",
-                   version, PACKAGE_VERSION);
+      spec_file_prefix_loc = *loc;
+      spec_file_prefix = value;
+    }
+  else
+    {
+      duplicate_directive (directive, spec_file_prefix_loc, *loc);
+      warned = true;
+    }
+
+  if (!warned
+      && STRNEQ (directive, "%file-prefix"))
+    deprecated_directive (dir_loc, directive, "%file-prefix");
+}
+
+
+static void
+handle_name_prefix (location const *loc,
+                    char const *directive, char const *value)
+{
+  bison_directive (loc, directive);
+
+  char buf1[1024];
+  size_t len1 = sizeof (buf1);
+  char *old = asnprintf (buf1, &len1, "%s\"%s\"", directive, value);
+  if (!old)
+    xalloc_die ();
+
+  if (location_empty (spec_name_prefix_loc))
+    {
+      spec_name_prefix = value;
+      spec_name_prefix_loc = *loc;
+
+      char buf2[1024];
+      size_t len2 = sizeof (buf2);
+      char *new = asnprintf (buf2, &len2, "%%define api.prefix {%s}", value);
+      if (!new)
+        xalloc_die ();
+      deprecated_directive (loc, old, new);
+      if (new != buf2)
+        free (new);
+    }
+  else
+    duplicate_directive (old, spec_file_prefix_loc, *loc);
+
+  if (old != buf1)
+    free (old);
+}
+
+
+static void
+handle_pure_parser (location const *loc, char const *directive)
+{
+  bison_directive (loc, directive);
+  deprecated_directive (loc, directive, "%define api.pure");
+  muscle_percent_define_insert ("api.pure", *loc, muscle_keyword, "",
+                                MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+}
+
+
+/* Convert VERSION into an int (MAJOR * 100 + MINOR).  Return -1 on
+   errors.
+
+   Changes of behavior are only on minor version changes, so "3.0.5"
+   is the same as "3.0": 300. */
+static int
+str_to_version (char const *version)
+{
+  IGNORE_TYPE_LIMITS_BEGIN
+  int res = 0;
+  errno = 0;
+  char *cp = NULL;
+  long major = strtol (version, &cp, 10);
+  if (errno || cp == version || *cp != '.' || major < 0
+      || INT_MULTIPLY_WRAPV (major, 100, &res))
+    return -1;
+
+  ++cp;
+  char *cp1 = NULL;
+  long minor = strtol (cp, &cp1, 10);
+  if (errno || cp1 == cp || (*cp1 != '\0' && *cp1 != '.')
+      || ! (0 <= minor && minor < 100)
+      || INT_ADD_WRAPV (minor, res, &res))
+    return -1;
+
+  IGNORE_TYPE_LIMITS_END
+  return res;
+}
+
+
+static void
+handle_require (location const *loc, char const *version)
+{
+  required_version = str_to_version (version);
+  if (required_version == -1)
+    {
+      complain (loc, complaint, _("invalid version requirement: %s"),
+                version);
+      required_version = 0;
+      return;
+    }
+
+  /* Pretend to be at least 3.5, to check features published in that
+     version while developping it.  */
+  const char* api_version = "3.5";
+  const char* package_version =
+    0 < strverscmp (api_version, PACKAGE_VERSION)
+    ? api_version : PACKAGE_VERSION;
+  if (0 < strverscmp (version, package_version))
+    {
+      complain (loc, complaint, _("require bison %s, but have %s"),
+                version, package_version);
       exit (EX_MISMATCH);
     }
 }
 
 static void
-gram_error (location const *loc, char const *msg)
+handle_skeleton (location const *loc, char const *skel)
 {
-  complain_at (*loc, "%s", msg);
+  char const *skeleton_user = skel;
+  if (strchr (skeleton_user, '/'))
+    {
+      size_t dir_length = strlen (grammar_file);
+      while (dir_length && grammar_file[dir_length - 1] != '/')
+        --dir_length;
+      while (dir_length && grammar_file[dir_length - 1] == '/')
+        --dir_length;
+      char *skeleton_build =
+        xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
+      if (dir_length > 0)
+        {
+          memcpy (skeleton_build, grammar_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, *loc);
 }
 
-char const *
-token_name (int type)
+
+static void
+handle_yacc (location const *loc)
 {
-  return yytname[YYTRANSLATE (type)];
+  const char *directive = "%yacc";
+  bison_directive (loc, directive);
+  if (location_empty (yacc_loc))
+    yacc_loc = *loc;
+  else
+    duplicate_directive (directive, yacc_loc, *loc);
+}
+
+
+static void
+gram_error (location const *loc, char const *msg)
+{
+  complain (loc, complaint, "%s", msg);
 }
 
 static char const *
@@ -3256,3 +3443,30 @@
       return quotearg_style (escape_quoting_style, buf);
     }
 }
+
+static
+void
+current_lhs (symbol *sym, location loc, named_ref *ref)
+{
+  current_lhs_symbol = sym;
+  current_lhs_loc = loc;
+  if (sym)
+    symbol_location_as_lhs_set (sym, 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;
+}
+
+static void tron (FILE *yyo)
+{
+  begin_use_class ("value", yyo);
+}
+
+static void troff (FILE *yyo)
+{
+  end_use_class ("value", yyo);
+}
diff --git a/src/parse-gram.h b/src/parse-gram.h
index c709098..2677735 100644
--- a/src/parse-gram.h
+++ b/src/parse-gram.h
@@ -1,19 +1,20 @@
-/* A Bison parser, made by GNU Bison 2.6.5.63-3ada.  */
+/* A Bison parser, made by GNU Bison 3.5.  */
 
 /* Bison interface for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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/>.  */
 
@@ -26,16 +27,19 @@
    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.  */
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
+#ifndef YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED
+# define YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED
+/* Debug traces.  */
 #ifndef GRAM_DEBUG
 # if defined YYDEBUG
-#  if YYDEBUG
+#if YYDEBUG
 #   define GRAM_DEBUG 1
 #  else
 #   define GRAM_DEBUG 0
@@ -47,182 +51,208 @@
 #if GRAM_DEBUG
 extern int gram_debug;
 #endif
+/* "%code requires" blocks.  */
+#line 21 "src/parse-gram.y"
 
-/* Tokens.  */
+  #include "symlist.h"
+  #include "symtab.h"
+#line 251 "src/parse-gram.y"
+
+  typedef enum
+  {
+    param_none   = 0,
+    param_lex    = 1 << 0,
+    param_parse  = 1 << 1,
+    param_both   = param_lex | param_parse
+  } param_type;
+#line 703 "src/parse-gram.y"
+
+  #include "muscle-tab.h"
+  typedef struct
+  {
+    char const *chars;
+    muscle_kind kind;
+  } value_type;
+
+#line 78 "src/parse-gram.h"
+
+/* Token type.  */
 #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
-   };
+  enum gram_tokentype
+  {
+    GRAM_EOF = 0,
+    STRING = 3,
+    PERCENT_TOKEN = 4,
+    PERCENT_NTERM = 5,
+    PERCENT_TYPE = 6,
+    PERCENT_DESTRUCTOR = 7,
+    PERCENT_PRINTER = 8,
+    PERCENT_LEFT = 9,
+    PERCENT_RIGHT = 10,
+    PERCENT_NONASSOC = 11,
+    PERCENT_PRECEDENCE = 12,
+    PERCENT_PREC = 13,
+    PERCENT_DPREC = 14,
+    PERCENT_MERGE = 15,
+    PERCENT_CODE = 16,
+    PERCENT_DEFAULT_PREC = 17,
+    PERCENT_DEFINE = 18,
+    PERCENT_DEFINES = 19,
+    PERCENT_ERROR_VERBOSE = 20,
+    PERCENT_EXPECT = 21,
+    PERCENT_EXPECT_RR = 22,
+    PERCENT_FLAG = 23,
+    PERCENT_FILE_PREFIX = 24,
+    PERCENT_GLR_PARSER = 25,
+    PERCENT_INITIAL_ACTION = 26,
+    PERCENT_LANGUAGE = 27,
+    PERCENT_NAME_PREFIX = 28,
+    PERCENT_NO_DEFAULT_PREC = 29,
+    PERCENT_NO_LINES = 30,
+    PERCENT_NONDETERMINISTIC_PARSER = 31,
+    PERCENT_OUTPUT = 32,
+    PERCENT_PURE_PARSER = 33,
+    PERCENT_REQUIRE = 34,
+    PERCENT_SKELETON = 35,
+    PERCENT_START = 36,
+    PERCENT_TOKEN_TABLE = 37,
+    PERCENT_VERBOSE = 38,
+    PERCENT_YACC = 39,
+    BRACED_CODE = 40,
+    BRACED_PREDICATE = 41,
+    BRACKETED_ID = 42,
+    CHAR = 43,
+    COLON = 44,
+    EPILOGUE = 45,
+    EQUAL = 46,
+    ID = 47,
+    ID_COLON = 48,
+    PERCENT_PERCENT = 49,
+    PIPE = 50,
+    PROLOGUE = 51,
+    SEMICOLON = 52,
+    TAG = 53,
+    TAG_ANY = 54,
+    TAG_NONE = 55,
+    INT = 56,
+    PERCENT_PARAM = 57,
+    PERCENT_UNION = 58,
+    PERCENT_EMPTY = 59
+  };
 #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
 
-
-
+/* Value type.  */
 #if ! defined GRAM_STYPE && ! defined GRAM_STYPE_IS_DECLARED
-typedef union GRAM_STYPE
+union GRAM_STYPE
 {
-/* Line 2042 of yacc.c  */
-#line 115 "parse-gram.y"
 
-  symbol *symbol;
-  symbol_list *list;
-  int integer;
-  char const *chars;
-  char *code;
-  assoc assoc;
-  uniqstr uniqstr;
-  unsigned char character;
-  named_ref *named_ref;
+  /* precedence_declarator  */
+  assoc precedence_declarator;
+  /* "string"  */
+  char* STRING;
+  /* "{...}"  */
+  char* BRACED_CODE;
+  /* "%?{...}"  */
+  char* BRACED_PREDICATE;
+  /* "epilogue"  */
+  char* EPILOGUE;
+  /* "%{...%}"  */
+  char* PROLOGUE;
+  /* code_props_type  */
+  code_props_type code_props_type;
+  /* "integer"  */
+  int INT;
+  /* int.opt  */
+  int yytype_81;
+  /* named_ref.opt  */
+  named_ref* yytype_93;
+  /* "%param"  */
+  param_type PERCENT_PARAM;
+  /* token_decl  */
+  symbol* token_decl;
+  /* token_decl_for_prec  */
+  symbol* token_decl_for_prec;
+  /* id  */
+  symbol* id;
+  /* id_colon  */
+  symbol* id_colon;
+  /* symbol  */
+  symbol* symbol;
+  /* string_as_id  */
+  symbol* string_as_id;
+  /* string_as_id.opt  */
+  symbol* yytype_100;
+  /* generic_symlist  */
+  symbol_list* generic_symlist;
+  /* generic_symlist_item  */
+  symbol_list* generic_symlist_item;
+  /* nterm_decls  */
+  symbol_list* nterm_decls;
+  /* token_decls  */
+  symbol_list* token_decls;
+  /* token_decl.1  */
+  symbol_list* yytype_79;
+  /* token_decls_for_prec  */
+  symbol_list* token_decls_for_prec;
+  /* token_decl_for_prec.1  */
+  symbol_list* yytype_83;
+  /* symbol_decls  */
+  symbol_list* symbol_decls;
+  /* symbol_decl.1  */
+  symbol_list* yytype_86;
+  /* "%error-verbose"  */
+  uniqstr PERCENT_ERROR_VERBOSE;
+  /* "%<flag>"  */
+  uniqstr PERCENT_FLAG;
+  /* "%file-prefix"  */
+  uniqstr PERCENT_FILE_PREFIX;
+  /* "%name-prefix"  */
+  uniqstr PERCENT_NAME_PREFIX;
+  /* "%pure-parser"  */
+  uniqstr PERCENT_PURE_PARSER;
+  /* "[identifier]"  */
+  uniqstr BRACKETED_ID;
+  /* "identifier"  */
+  uniqstr ID;
+  /* "identifier:"  */
+  uniqstr ID_COLON;
+  /* "<tag>"  */
+  uniqstr TAG;
+  /* tag.opt  */
+  uniqstr yytype_73;
+  /* tag  */
+  uniqstr tag;
+  /* variable  */
+  uniqstr variable;
+  /* "character literal"  */
+  unsigned char CHAR;
+  /* value  */
+  value_type value;
+#line 233 "src/parse-gram.h"
 
-
-/* Line 2042 of yacc.c  */
-#line 194 "parse-gram.h"
-} GRAM_STYPE;
+};
+typedef union GRAM_STYPE GRAM_STYPE;
 # define GRAM_STYPE_IS_TRIVIAL 1
-# define gram_stype GRAM_STYPE /* obsolescent; will be withdrawn */
 # define GRAM_STYPE_IS_DECLARED 1
 #endif
 
+/* Location type.  */
 #if ! defined GRAM_LTYPE && ! defined GRAM_LTYPE_IS_DECLARED
-typedef struct GRAM_LTYPE
+typedef struct GRAM_LTYPE GRAM_LTYPE;
+struct GRAM_LTYPE
 {
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-} 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  */
+int gram_parse (void);
+
+#endif /* !YY_GRAM_SRC_PARSE_GRAM_H_INCLUDED  */
diff --git a/src/parse-gram.output b/src/parse-gram.output
new file mode 100644
index 0000000..2403bfc
--- /dev/null
+++ b/src/parse-gram.output
@@ -0,0 +1,2248 @@
+Terminals unused in grammar
+
+    "="
+
+
+Grammar
+
+    0 $accept: input "end of file"
+
+    1 input: prologue_declarations "%%" grammar epilogue.opt
+
+    2 prologue_declarations: %empty
+    3                      | prologue_declarations prologue_declaration
+
+    4 prologue_declaration: grammar_declaration
+    5                     | "%{...%}"
+    6                     | "%<flag>"
+    7                     | "%define" variable value
+    8                     | "%defines"
+    9                     | "%defines" "string"
+   10                     | "%error-verbose"
+   11                     | "%expect" "integer"
+   12                     | "%expect-rr" "integer"
+   13                     | "%file-prefix" "string"
+   14                     | "%glr-parser"
+   15                     | "%initial-action" "{...}"
+   16                     | "%language" "string"
+   17                     | "%name-prefix" "string"
+   18                     | "%no-lines"
+   19                     | "%nondeterministic-parser"
+   20                     | "%output" "string"
+
+   21 $@1: %empty
+
+   22 prologue_declaration: "%param" $@1 params
+   23                     | "%pure-parser"
+   24                     | "%require" "string"
+   25                     | "%skeleton" "string"
+   26                     | "%token-table"
+   27                     | "%verbose"
+   28                     | "%yacc"
+   29                     | error ";"
+   30                     | ";"
+
+   31 params: params "{...}"
+   32       | "{...}"
+
+   33 grammar_declaration: symbol_declaration
+   34                    | "%start" symbol
+   35                    | code_props_type "{...}" generic_symlist
+   36                    | "%default-prec"
+   37                    | "%no-default-prec"
+   38                    | "%code" "{...}"
+   39                    | "%code" "identifier" "{...}"
+
+   40 code_props_type: "%destructor"
+   41                | "%printer"
+
+   42 union_name: %empty
+   43           | "identifier"
+
+   44 grammar_declaration: "%union" union_name "{...}"
+
+   45 $@2: %empty
+
+   46 symbol_declaration: "%nterm" $@2 nterm_decls
+
+   47 $@3: %empty
+
+   48 symbol_declaration: "%token" $@3 token_decls
+   49                   | "%type" symbol_decls
+   50                   | precedence_declarator token_decls_for_prec
+
+   51 precedence_declarator: "%left"
+   52                      | "%right"
+   53                      | "%nonassoc"
+   54                      | "%precedence"
+
+   55 tag.opt: %empty
+   56        | "<tag>"
+
+   57 generic_symlist: generic_symlist_item
+   58                | generic_symlist generic_symlist_item
+
+   59 generic_symlist_item: symbol
+   60                     | tag
+
+   61 tag: "<tag>"
+   62    | "<*>"
+   63    | "<>"
+
+   64 nterm_decls: token_decls
+
+   65 token_decls: token_decl.1
+   66            | "<tag>" token_decl.1
+   67            | token_decls "<tag>" token_decl.1
+
+   68 token_decl.1: token_decl
+   69             | token_decl.1 token_decl
+
+   70 token_decl: id int.opt string_as_id.opt
+
+   71 int.opt: %empty
+   72        | "integer"
+
+   73 token_decls_for_prec: token_decl_for_prec.1
+   74                     | "<tag>" token_decl_for_prec.1
+   75                     | token_decls_for_prec "<tag>" token_decl_for_prec.1
+
+   76 token_decl_for_prec.1: token_decl_for_prec
+   77                      | token_decl_for_prec.1 token_decl_for_prec
+
+   78 token_decl_for_prec: id int.opt
+   79                    | string_as_id
+
+   80 symbol_decls: symbol_decl.1
+   81             | "<tag>" symbol_decl.1
+   82             | symbol_decls "<tag>" symbol_decl.1
+
+   83 symbol_decl.1: symbol
+   84              | symbol_decl.1 symbol
+
+   85 grammar: rules_or_grammar_declaration
+   86        | grammar rules_or_grammar_declaration
+
+   87 rules_or_grammar_declaration: rules
+   88                             | grammar_declaration ";"
+   89                             | error ";"
+
+   90 $@4: %empty
+
+   91 rules: id_colon named_ref.opt $@4 ":" rhses.1
+
+   92 rhses.1: rhs
+   93        | rhses.1 "|" rhs
+   94        | rhses.1 ";"
+
+   95 rhs: %empty
+   96    | rhs symbol named_ref.opt
+   97    | rhs tag.opt "{...}" named_ref.opt
+   98    | rhs "%?{...}"
+   99    | rhs "%empty"
+  100    | rhs "%prec" symbol
+  101    | rhs "%dprec" "integer"
+  102    | rhs "%merge" "<tag>"
+  103    | rhs "%expect" "integer"
+  104    | rhs "%expect-rr" "integer"
+
+  105 named_ref.opt: %empty
+  106              | "[identifier]"
+
+  107 variable: "identifier"
+
+  108 value: %empty
+  109      | "identifier"
+  110      | "string"
+  111      | "{...}"
+
+  112 id: "identifier"
+  113   | "character literal"
+
+  114 id_colon: "identifier:"
+
+  115 symbol: id
+  116       | string_as_id
+
+  117 string_as_id: "string"
+
+  118 string_as_id.opt: %empty
+  119                 | string_as_id
+
+  120 epilogue.opt: %empty
+  121             | "%%" "epilogue"
+
+
+Terminals, with rules where they appear
+
+    "end of file" (0) 0
+    error (256) 29 89
+    "string" <char*> (258) 9 13 16 17 20 24 25 110 117
+    "%token" (259) 48
+    "%nterm" (260) 46
+    "%type" (261) 49
+    "%destructor" (262) 40
+    "%printer" (263) 41
+    "%left" (264) 51
+    "%right" (265) 52
+    "%nonassoc" (266) 53
+    "%precedence" (267) 54
+    "%prec" (268) 100
+    "%dprec" (269) 101
+    "%merge" (270) 102
+    "%code" (271) 38 39
+    "%default-prec" (272) 36
+    "%define" (273) 7
+    "%defines" (274) 8 9
+    "%error-verbose" <uniqstr> (275) 10
+    "%expect" (276) 11 103
+    "%expect-rr" (277) 12 104
+    "%<flag>" <uniqstr> (278) 6
+    "%file-prefix" <uniqstr> (279) 13
+    "%glr-parser" (280) 14
+    "%initial-action" (281) 15
+    "%language" (282) 16
+    "%name-prefix" <uniqstr> (283) 17
+    "%no-default-prec" (284) 37
+    "%no-lines" (285) 18
+    "%nondeterministic-parser" (286) 19
+    "%output" (287) 20
+    "%pure-parser" <uniqstr> (288) 23
+    "%require" (289) 24
+    "%skeleton" (290) 25
+    "%start" (291) 34
+    "%token-table" (292) 26
+    "%verbose" (293) 27
+    "%yacc" (294) 28
+    "{...}" <char*> (295) 15 31 32 35 38 39 44 97 111
+    "%?{...}" <char*> (296) 98
+    "[identifier]" <uniqstr> (297) 106
+    "character literal" <unsigned char> (298) 113
+    ":" (299) 91
+    "epilogue" <char*> (300) 121
+    "=" (301)
+    "identifier" <uniqstr> (302) 39 43 107 109 112
+    "identifier:" <uniqstr> (303) 114
+    "%%" (304) 1 121
+    "|" (305) 93
+    "%{...%}" <char*> (306) 5
+    ";" (307) 29 30 88 89 94
+    "<tag>" <uniqstr> (308) 56 61 66 67 74 75 81 82 102
+    "<*>" (309) 62
+    "<>" (310) 63
+    "integer" <int> (311) 11 12 72 101 103 104
+    "%param" <param_type> (312) 22
+    "%union" (313) 44
+    "%empty" (314) 99
+
+
+Nonterminals, with rules where they appear
+
+    $accept (60)
+        on left: 0
+    input (61)
+        on left: 1
+        on right: 0
+    prologue_declarations (62)
+        on left: 2 3
+        on right: 1 3
+    prologue_declaration (63)
+        on left: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30
+        on right: 3
+    $@1 (64)
+        on left: 21
+        on right: 22
+    params (65)
+        on left: 31 32
+        on right: 22 31
+    grammar_declaration (66)
+        on left: 33 34 35 36 37 38 39 44
+        on right: 4 88
+    code_props_type <code_props_type> (67)
+        on left: 40 41
+        on right: 35
+    union_name (68)
+        on left: 42 43
+        on right: 44
+    symbol_declaration (69)
+        on left: 46 48 49 50
+        on right: 33
+    $@2 (70)
+        on left: 45
+        on right: 46
+    $@3 (71)
+        on left: 47
+        on right: 48
+    precedence_declarator <assoc> (72)
+        on left: 51 52 53 54
+        on right: 50
+    tag.opt <uniqstr> (73)
+        on left: 55 56
+        on right: 97
+    generic_symlist <symbol_list*> (74)
+        on left: 57 58
+        on right: 35 58
+    generic_symlist_item <symbol_list*> (75)
+        on left: 59 60
+        on right: 57 58
+    tag <uniqstr> (76)
+        on left: 61 62 63
+        on right: 60
+    nterm_decls <symbol_list*> (77)
+        on left: 64
+        on right: 46
+    token_decls <symbol_list*> (78)
+        on left: 65 66 67
+        on right: 48 64 67
+    token_decl.1 <symbol_list*> (79)
+        on left: 68 69
+        on right: 65 66 67 69
+    token_decl <symbol*> (80)
+        on left: 70
+        on right: 68 69
+    int.opt <int> (81)
+        on left: 71 72
+        on right: 70 78
+    token_decls_for_prec <symbol_list*> (82)
+        on left: 73 74 75
+        on right: 50 75
+    token_decl_for_prec.1 <symbol_list*> (83)
+        on left: 76 77
+        on right: 73 74 75 77
+    token_decl_for_prec <symbol*> (84)
+        on left: 78 79
+        on right: 76 77
+    symbol_decls <symbol_list*> (85)
+        on left: 80 81 82
+        on right: 49 82
+    symbol_decl.1 <symbol_list*> (86)
+        on left: 83 84
+        on right: 80 81 82 84
+    grammar (87)
+        on left: 85 86
+        on right: 1 86
+    rules_or_grammar_declaration (88)
+        on left: 87 88 89
+        on right: 85 86
+    rules (89)
+        on left: 91
+        on right: 87
+    $@4 (90)
+        on left: 90
+        on right: 91
+    rhses.1 (91)
+        on left: 92 93 94
+        on right: 91 93 94
+    rhs (92)
+        on left: 95 96 97 98 99 100 101 102 103 104
+        on right: 92 93 96 97 98 99 100 101 102 103 104
+    named_ref.opt <named_ref*> (93)
+        on left: 105 106
+        on right: 91 96 97
+    variable <uniqstr> (94)
+        on left: 107
+        on right: 7
+    value <value_type> (95)
+        on left: 108 109 110 111
+        on right: 7
+    id <symbol*> (96)
+        on left: 112 113
+        on right: 70 78 115
+    id_colon <symbol*> (97)
+        on left: 114
+        on right: 91
+    symbol <symbol*> (98)
+        on left: 115 116
+        on right: 34 59 83 84 96 100
+    string_as_id <symbol*> (99)
+        on left: 117
+        on right: 79 116 119
+    string_as_id.opt <symbol*> (100)
+        on left: 118 119
+        on right: 70
+    epilogue.opt (101)
+        on left: 120 121
+        on right: 1
+
+
+State 0
+
+    0 $accept: . input "end of file"
+    1 input: . prologue_declarations "%%" grammar epilogue.opt
+    2 prologue_declarations: . %empty
+    3                      | . prologue_declarations prologue_declaration
+
+    $default  reduce using rule 2 (prologue_declarations)
+
+    input                  go to state 1
+    prologue_declarations  go to state 2
+
+
+State 1
+
+    0 $accept: input . "end of file"
+
+    "end of file"  shift, and go to state 3
+
+
+State 2
+
+    1 input: prologue_declarations . "%%" grammar epilogue.opt
+    3 prologue_declarations: prologue_declarations . prologue_declaration
+    4 prologue_declaration: . grammar_declaration
+    5                     | . "%{...%}"
+    6                     | . "%<flag>"
+    7                     | . "%define" variable value
+    8                     | . "%defines"
+    9                     | . "%defines" "string"
+   10                     | . "%error-verbose"
+   11                     | . "%expect" "integer"
+   12                     | . "%expect-rr" "integer"
+   13                     | . "%file-prefix" "string"
+   14                     | . "%glr-parser"
+   15                     | . "%initial-action" "{...}"
+   16                     | . "%language" "string"
+   17                     | . "%name-prefix" "string"
+   18                     | . "%no-lines"
+   19                     | . "%nondeterministic-parser"
+   20                     | . "%output" "string"
+   22                     | . "%param" $@1 params
+   23                     | . "%pure-parser"
+   24                     | . "%require" "string"
+   25                     | . "%skeleton" "string"
+   26                     | . "%token-table"
+   27                     | . "%verbose"
+   28                     | . "%yacc"
+   29                     | . error ";"
+   30                     | . ";"
+   33 grammar_declaration: . symbol_declaration
+   34                    | . "%start" symbol
+   35                    | . code_props_type "{...}" generic_symlist
+   36                    | . "%default-prec"
+   37                    | . "%no-default-prec"
+   38                    | . "%code" "{...}"
+   39                    | . "%code" "identifier" "{...}"
+   40 code_props_type: . "%destructor"
+   41                | . "%printer"
+   44 grammar_declaration: . "%union" union_name "{...}"
+   46 symbol_declaration: . "%nterm" $@2 nterm_decls
+   48                   | . "%token" $@3 token_decls
+   49                   | . "%type" symbol_decls
+   50                   | . precedence_declarator token_decls_for_prec
+   51 precedence_declarator: . "%left"
+   52                      | . "%right"
+   53                      | . "%nonassoc"
+   54                      | . "%precedence"
+
+    error                       shift, and go to state 4
+    "%token"                    shift, and go to state 5
+    "%nterm"                    shift, and go to state 6
+    "%type"                     shift, and go to state 7
+    "%destructor"               shift, and go to state 8
+    "%printer"                  shift, and go to state 9
+    "%left"                     shift, and go to state 10
+    "%right"                    shift, and go to state 11
+    "%nonassoc"                 shift, and go to state 12
+    "%precedence"               shift, and go to state 13
+    "%code"                     shift, and go to state 14
+    "%default-prec"             shift, and go to state 15
+    "%define"                   shift, and go to state 16
+    "%defines"                  shift, and go to state 17
+    "%error-verbose"            shift, and go to state 18
+    "%expect"                   shift, and go to state 19
+    "%expect-rr"                shift, and go to state 20
+    "%<flag>"                   shift, and go to state 21
+    "%file-prefix"              shift, and go to state 22
+    "%glr-parser"               shift, and go to state 23
+    "%initial-action"           shift, and go to state 24
+    "%language"                 shift, and go to state 25
+    "%name-prefix"              shift, and go to state 26
+    "%no-default-prec"          shift, and go to state 27
+    "%no-lines"                 shift, and go to state 28
+    "%nondeterministic-parser"  shift, and go to state 29
+    "%output"                   shift, and go to state 30
+    "%pure-parser"              shift, and go to state 31
+    "%require"                  shift, and go to state 32
+    "%skeleton"                 shift, and go to state 33
+    "%start"                    shift, and go to state 34
+    "%token-table"              shift, and go to state 35
+    "%verbose"                  shift, and go to state 36
+    "%yacc"                     shift, and go to state 37
+    "%%"                        shift, and go to state 38
+    "%{...%}"                   shift, and go to state 39
+    ";"                         shift, and go to state 40
+    "%param"                    shift, and go to state 41
+    "%union"                    shift, and go to state 42
+
+    prologue_declaration   go to state 43
+    grammar_declaration    go to state 44
+    code_props_type        go to state 45
+    symbol_declaration     go to state 46
+    precedence_declarator  go to state 47
+
+
+State 3
+
+    0 $accept: input "end of file" .
+
+    $default  accept
+
+
+State 4
+
+   29 prologue_declaration: error . ";"
+
+    ";"  shift, and go to state 48
+
+
+State 5
+
+   47 $@3: . %empty
+   48 symbol_declaration: "%token" . $@3 token_decls
+
+    $default  reduce using rule 47 ($@3)
+
+    $@3  go to state 49
+
+
+State 6
+
+   45 $@2: . %empty
+   46 symbol_declaration: "%nterm" . $@2 nterm_decls
+
+    $default  reduce using rule 45 ($@2)
+
+    $@2  go to state 50
+
+
+State 7
+
+   49 symbol_declaration: "%type" . symbol_decls
+   80 symbol_decls: . symbol_decl.1
+   81             | . "<tag>" symbol_decl.1
+   82             | . symbol_decls "<tag>" symbol_decl.1
+   83 symbol_decl.1: . symbol
+   84              | . symbol_decl.1 symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 54
+
+    symbol_decls   go to state 55
+    symbol_decl.1  go to state 56
+    id             go to state 57
+    symbol         go to state 58
+    string_as_id   go to state 59
+
+
+State 8
+
+   40 code_props_type: "%destructor" .
+
+    $default  reduce using rule 40 (code_props_type)
+
+
+State 9
+
+   41 code_props_type: "%printer" .
+
+    $default  reduce using rule 41 (code_props_type)
+
+
+State 10
+
+   51 precedence_declarator: "%left" .
+
+    $default  reduce using rule 51 (precedence_declarator)
+
+
+State 11
+
+   52 precedence_declarator: "%right" .
+
+    $default  reduce using rule 52 (precedence_declarator)
+
+
+State 12
+
+   53 precedence_declarator: "%nonassoc" .
+
+    $default  reduce using rule 53 (precedence_declarator)
+
+
+State 13
+
+   54 precedence_declarator: "%precedence" .
+
+    $default  reduce using rule 54 (precedence_declarator)
+
+
+State 14
+
+   38 grammar_declaration: "%code" . "{...}"
+   39                    | "%code" . "identifier" "{...}"
+
+    "{...}"       shift, and go to state 60
+    "identifier"  shift, and go to state 61
+
+
+State 15
+
+   36 grammar_declaration: "%default-prec" .
+
+    $default  reduce using rule 36 (grammar_declaration)
+
+
+State 16
+
+    7 prologue_declaration: "%define" . variable value
+  107 variable: . "identifier"
+
+    "identifier"  shift, and go to state 62
+
+    variable  go to state 63
+
+
+State 17
+
+    8 prologue_declaration: "%defines" .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+    9                     | "%defines" . "string"
+
+    "string"  shift, and go to state 64
+
+    $default  reduce using rule 8 (prologue_declaration)
+
+
+State 18
+
+   10 prologue_declaration: "%error-verbose" .
+
+    $default  reduce using rule 10 (prologue_declaration)
+
+
+State 19
+
+   11 prologue_declaration: "%expect" . "integer"
+
+    "integer"  shift, and go to state 65
+
+
+State 20
+
+   12 prologue_declaration: "%expect-rr" . "integer"
+
+    "integer"  shift, and go to state 66
+
+
+State 21
+
+    6 prologue_declaration: "%<flag>" .
+
+    $default  reduce using rule 6 (prologue_declaration)
+
+
+State 22
+
+   13 prologue_declaration: "%file-prefix" . "string"
+
+    "string"  shift, and go to state 67
+
+
+State 23
+
+   14 prologue_declaration: "%glr-parser" .
+
+    $default  reduce using rule 14 (prologue_declaration)
+
+
+State 24
+
+   15 prologue_declaration: "%initial-action" . "{...}"
+
+    "{...}"  shift, and go to state 68
+
+
+State 25
+
+   16 prologue_declaration: "%language" . "string"
+
+    "string"  shift, and go to state 69
+
+
+State 26
+
+   17 prologue_declaration: "%name-prefix" . "string"
+
+    "string"  shift, and go to state 70
+
+
+State 27
+
+   37 grammar_declaration: "%no-default-prec" .
+
+    $default  reduce using rule 37 (grammar_declaration)
+
+
+State 28
+
+   18 prologue_declaration: "%no-lines" .
+
+    $default  reduce using rule 18 (prologue_declaration)
+
+
+State 29
+
+   19 prologue_declaration: "%nondeterministic-parser" .
+
+    $default  reduce using rule 19 (prologue_declaration)
+
+
+State 30
+
+   20 prologue_declaration: "%output" . "string"
+
+    "string"  shift, and go to state 71
+
+
+State 31
+
+   23 prologue_declaration: "%pure-parser" .
+
+    $default  reduce using rule 23 (prologue_declaration)
+
+
+State 32
+
+   24 prologue_declaration: "%require" . "string"
+
+    "string"  shift, and go to state 72
+
+
+State 33
+
+   25 prologue_declaration: "%skeleton" . "string"
+
+    "string"  shift, and go to state 73
+
+
+State 34
+
+   34 grammar_declaration: "%start" . symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    id            go to state 57
+    symbol        go to state 74
+    string_as_id  go to state 59
+
+
+State 35
+
+   26 prologue_declaration: "%token-table" .
+
+    $default  reduce using rule 26 (prologue_declaration)
+
+
+State 36
+
+   27 prologue_declaration: "%verbose" .
+
+    $default  reduce using rule 27 (prologue_declaration)
+
+
+State 37
+
+   28 prologue_declaration: "%yacc" .
+
+    $default  reduce using rule 28 (prologue_declaration)
+
+
+State 38
+
+    1 input: prologue_declarations "%%" . grammar epilogue.opt
+   33 grammar_declaration: . symbol_declaration
+   34                    | . "%start" symbol
+   35                    | . code_props_type "{...}" generic_symlist
+   36                    | . "%default-prec"
+   37                    | . "%no-default-prec"
+   38                    | . "%code" "{...}"
+   39                    | . "%code" "identifier" "{...}"
+   40 code_props_type: . "%destructor"
+   41                | . "%printer"
+   44 grammar_declaration: . "%union" union_name "{...}"
+   46 symbol_declaration: . "%nterm" $@2 nterm_decls
+   48                   | . "%token" $@3 token_decls
+   49                   | . "%type" symbol_decls
+   50                   | . precedence_declarator token_decls_for_prec
+   51 precedence_declarator: . "%left"
+   52                      | . "%right"
+   53                      | . "%nonassoc"
+   54                      | . "%precedence"
+   85 grammar: . rules_or_grammar_declaration
+   86        | . grammar rules_or_grammar_declaration
+   87 rules_or_grammar_declaration: . rules
+   88                             | . grammar_declaration ";"
+   89                             | . error ";"
+   91 rules: . id_colon named_ref.opt $@4 ":" rhses.1
+  114 id_colon: . "identifier:"
+
+    error               shift, and go to state 75
+    "%token"            shift, and go to state 5
+    "%nterm"            shift, and go to state 6
+    "%type"             shift, and go to state 7
+    "%destructor"       shift, and go to state 8
+    "%printer"          shift, and go to state 9
+    "%left"             shift, and go to state 10
+    "%right"            shift, and go to state 11
+    "%nonassoc"         shift, and go to state 12
+    "%precedence"       shift, and go to state 13
+    "%code"             shift, and go to state 14
+    "%default-prec"     shift, and go to state 15
+    "%no-default-prec"  shift, and go to state 27
+    "%start"            shift, and go to state 34
+    "identifier:"       shift, and go to state 76
+    "%union"            shift, and go to state 42
+
+    grammar_declaration           go to state 77
+    code_props_type               go to state 45
+    symbol_declaration            go to state 46
+    precedence_declarator         go to state 47
+    grammar                       go to state 78
+    rules_or_grammar_declaration  go to state 79
+    rules                         go to state 80
+    id_colon                      go to state 81
+
+
+State 39
+
+    5 prologue_declaration: "%{...%}" .
+
+    $default  reduce using rule 5 (prologue_declaration)
+
+
+State 40
+
+   30 prologue_declaration: ";" .
+
+    $default  reduce using rule 30 (prologue_declaration)
+
+
+State 41
+
+   21 $@1: . %empty
+   22 prologue_declaration: "%param" . $@1 params
+
+    $default  reduce using rule 21 ($@1)
+
+    $@1  go to state 82
+
+
+State 42
+
+   42 union_name: . %empty  ["{...}"]
+   43           | . "identifier"
+   44 grammar_declaration: "%union" . union_name "{...}"
+
+    "identifier"  shift, and go to state 83
+
+    $default  reduce using rule 42 (union_name)
+
+    union_name  go to state 84
+
+
+State 43
+
+    3 prologue_declarations: prologue_declarations prologue_declaration .
+
+    $default  reduce using rule 3 (prologue_declarations)
+
+
+State 44
+
+    4 prologue_declaration: grammar_declaration .
+
+    $default  reduce using rule 4 (prologue_declaration)
+
+
+State 45
+
+   35 grammar_declaration: code_props_type . "{...}" generic_symlist
+
+    "{...}"  shift, and go to state 85
+
+
+State 46
+
+   33 grammar_declaration: symbol_declaration .
+
+    $default  reduce using rule 33 (grammar_declaration)
+
+
+State 47
+
+   50 symbol_declaration: precedence_declarator . token_decls_for_prec
+   73 token_decls_for_prec: . token_decl_for_prec.1
+   74                     | . "<tag>" token_decl_for_prec.1
+   75                     | . token_decls_for_prec "<tag>" token_decl_for_prec.1
+   76 token_decl_for_prec.1: . token_decl_for_prec
+   77                      | . token_decl_for_prec.1 token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 86
+
+    token_decls_for_prec   go to state 87
+    token_decl_for_prec.1  go to state 88
+    token_decl_for_prec    go to state 89
+    id                     go to state 90
+    string_as_id           go to state 91
+
+
+State 48
+
+   29 prologue_declaration: error ";" .
+
+    $default  reduce using rule 29 (prologue_declaration)
+
+
+State 49
+
+   48 symbol_declaration: "%token" $@3 . token_decls
+   65 token_decls: . token_decl.1
+   66            | . "<tag>" token_decl.1
+   67            | . token_decls "<tag>" token_decl.1
+   68 token_decl.1: . token_decl
+   69             | . token_decl.1 token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 92
+
+    token_decls   go to state 93
+    token_decl.1  go to state 94
+    token_decl    go to state 95
+    id            go to state 96
+
+
+State 50
+
+   46 symbol_declaration: "%nterm" $@2 . nterm_decls
+   64 nterm_decls: . token_decls
+   65 token_decls: . token_decl.1
+   66            | . "<tag>" token_decl.1
+   67            | . token_decls "<tag>" token_decl.1
+   68 token_decl.1: . token_decl
+   69             | . token_decl.1 token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 92
+
+    nterm_decls   go to state 97
+    token_decls   go to state 98
+    token_decl.1  go to state 94
+    token_decl    go to state 95
+    id            go to state 96
+
+
+State 51
+
+  117 string_as_id: "string" .
+
+    $default  reduce using rule 117 (string_as_id)
+
+
+State 52
+
+  113 id: "character literal" .
+
+    $default  reduce using rule 113 (id)
+
+
+State 53
+
+  112 id: "identifier" .
+
+    $default  reduce using rule 112 (id)
+
+
+State 54
+
+   81 symbol_decls: "<tag>" . symbol_decl.1
+   83 symbol_decl.1: . symbol
+   84              | . symbol_decl.1 symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    symbol_decl.1  go to state 99
+    id             go to state 57
+    symbol         go to state 58
+    string_as_id   go to state 59
+
+
+State 55
+
+   49 symbol_declaration: "%type" symbol_decls .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   82 symbol_decls: symbol_decls . "<tag>" symbol_decl.1
+
+    "<tag>"  shift, and go to state 100
+
+    $default  reduce using rule 49 (symbol_declaration)
+
+
+State 56
+
+   80 symbol_decls: symbol_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   84 symbol_decl.1: symbol_decl.1 . symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 80 (symbol_decls)
+
+    id            go to state 57
+    symbol        go to state 101
+    string_as_id  go to state 59
+
+
+State 57
+
+  115 symbol: id .
+
+    $default  reduce using rule 115 (symbol)
+
+
+State 58
+
+   83 symbol_decl.1: symbol .
+
+    $default  reduce using rule 83 (symbol_decl.1)
+
+
+State 59
+
+  116 symbol: string_as_id .
+
+    $default  reduce using rule 116 (symbol)
+
+
+State 60
+
+   38 grammar_declaration: "%code" "{...}" .
+
+    $default  reduce using rule 38 (grammar_declaration)
+
+
+State 61
+
+   39 grammar_declaration: "%code" "identifier" . "{...}"
+
+    "{...}"  shift, and go to state 102
+
+
+State 62
+
+  107 variable: "identifier" .
+
+    $default  reduce using rule 107 (variable)
+
+
+State 63
+
+    7 prologue_declaration: "%define" variable . value
+  108 value: . %empty  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+  109      | . "identifier"
+  110      | . "string"
+  111      | . "{...}"
+
+    "string"      shift, and go to state 103
+    "{...}"       shift, and go to state 104
+    "identifier"  shift, and go to state 105
+
+    $default  reduce using rule 108 (value)
+
+    value  go to state 106
+
+
+State 64
+
+    9 prologue_declaration: "%defines" "string" .
+
+    $default  reduce using rule 9 (prologue_declaration)
+
+
+State 65
+
+   11 prologue_declaration: "%expect" "integer" .
+
+    $default  reduce using rule 11 (prologue_declaration)
+
+
+State 66
+
+   12 prologue_declaration: "%expect-rr" "integer" .
+
+    $default  reduce using rule 12 (prologue_declaration)
+
+
+State 67
+
+   13 prologue_declaration: "%file-prefix" "string" .
+
+    $default  reduce using rule 13 (prologue_declaration)
+
+
+State 68
+
+   15 prologue_declaration: "%initial-action" "{...}" .
+
+    $default  reduce using rule 15 (prologue_declaration)
+
+
+State 69
+
+   16 prologue_declaration: "%language" "string" .
+
+    $default  reduce using rule 16 (prologue_declaration)
+
+
+State 70
+
+   17 prologue_declaration: "%name-prefix" "string" .
+
+    $default  reduce using rule 17 (prologue_declaration)
+
+
+State 71
+
+   20 prologue_declaration: "%output" "string" .
+
+    $default  reduce using rule 20 (prologue_declaration)
+
+
+State 72
+
+   24 prologue_declaration: "%require" "string" .
+
+    $default  reduce using rule 24 (prologue_declaration)
+
+
+State 73
+
+   25 prologue_declaration: "%skeleton" "string" .
+
+    $default  reduce using rule 25 (prologue_declaration)
+
+
+State 74
+
+   34 grammar_declaration: "%start" symbol .
+
+    $default  reduce using rule 34 (grammar_declaration)
+
+
+State 75
+
+   89 rules_or_grammar_declaration: error . ";"
+
+    ";"  shift, and go to state 107
+
+
+State 76
+
+  114 id_colon: "identifier:" .
+
+    $default  reduce using rule 114 (id_colon)
+
+
+State 77
+
+   88 rules_or_grammar_declaration: grammar_declaration . ";"
+
+    ";"  shift, and go to state 108
+
+
+State 78
+
+    1 input: prologue_declarations "%%" grammar . epilogue.opt
+   33 grammar_declaration: . symbol_declaration
+   34                    | . "%start" symbol
+   35                    | . code_props_type "{...}" generic_symlist
+   36                    | . "%default-prec"
+   37                    | . "%no-default-prec"
+   38                    | . "%code" "{...}"
+   39                    | . "%code" "identifier" "{...}"
+   40 code_props_type: . "%destructor"
+   41                | . "%printer"
+   44 grammar_declaration: . "%union" union_name "{...}"
+   46 symbol_declaration: . "%nterm" $@2 nterm_decls
+   48                   | . "%token" $@3 token_decls
+   49                   | . "%type" symbol_decls
+   50                   | . precedence_declarator token_decls_for_prec
+   51 precedence_declarator: . "%left"
+   52                      | . "%right"
+   53                      | . "%nonassoc"
+   54                      | . "%precedence"
+   86 grammar: grammar . rules_or_grammar_declaration
+   87 rules_or_grammar_declaration: . rules
+   88                             | . grammar_declaration ";"
+   89                             | . error ";"
+   91 rules: . id_colon named_ref.opt $@4 ":" rhses.1
+  114 id_colon: . "identifier:"
+  120 epilogue.opt: . %empty  ["end of file"]
+  121             | . "%%" "epilogue"
+
+    error               shift, and go to state 75
+    "%token"            shift, and go to state 5
+    "%nterm"            shift, and go to state 6
+    "%type"             shift, and go to state 7
+    "%destructor"       shift, and go to state 8
+    "%printer"          shift, and go to state 9
+    "%left"             shift, and go to state 10
+    "%right"            shift, and go to state 11
+    "%nonassoc"         shift, and go to state 12
+    "%precedence"       shift, and go to state 13
+    "%code"             shift, and go to state 14
+    "%default-prec"     shift, and go to state 15
+    "%no-default-prec"  shift, and go to state 27
+    "%start"            shift, and go to state 34
+    "identifier:"       shift, and go to state 76
+    "%%"                shift, and go to state 109
+    "%union"            shift, and go to state 42
+
+    "end of file"  reduce using rule 120 (epilogue.opt)
+
+    grammar_declaration           go to state 77
+    code_props_type               go to state 45
+    symbol_declaration            go to state 46
+    precedence_declarator         go to state 47
+    rules_or_grammar_declaration  go to state 110
+    rules                         go to state 80
+    id_colon                      go to state 81
+    epilogue.opt                  go to state 111
+
+
+State 79
+
+   85 grammar: rules_or_grammar_declaration .
+
+    $default  reduce using rule 85 (grammar)
+
+
+State 80
+
+   87 rules_or_grammar_declaration: rules .
+
+    $default  reduce using rule 87 (rules_or_grammar_declaration)
+
+
+State 81
+
+   91 rules: id_colon . named_ref.opt $@4 ":" rhses.1
+  105 named_ref.opt: . %empty  [":"]
+  106              | . "[identifier]"
+
+    "[identifier]"  shift, and go to state 112
+
+    $default  reduce using rule 105 (named_ref.opt)
+
+    named_ref.opt  go to state 113
+
+
+State 82
+
+   22 prologue_declaration: "%param" $@1 . params
+   31 params: . params "{...}"
+   32       | . "{...}"
+
+    "{...}"  shift, and go to state 114
+
+    params  go to state 115
+
+
+State 83
+
+   43 union_name: "identifier" .
+
+    $default  reduce using rule 43 (union_name)
+
+
+State 84
+
+   44 grammar_declaration: "%union" union_name . "{...}"
+
+    "{...}"  shift, and go to state 116
+
+
+State 85
+
+   35 grammar_declaration: code_props_type "{...}" . generic_symlist
+   57 generic_symlist: . generic_symlist_item
+   58                | . generic_symlist generic_symlist_item
+   59 generic_symlist_item: . symbol
+   60                     | . tag
+   61 tag: . "<tag>"
+   62    | . "<*>"
+   63    | . "<>"
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 117
+    "<*>"                shift, and go to state 118
+    "<>"                 shift, and go to state 119
+
+    generic_symlist       go to state 120
+    generic_symlist_item  go to state 121
+    tag                   go to state 122
+    id                    go to state 57
+    symbol                go to state 123
+    string_as_id          go to state 59
+
+
+State 86
+
+   74 token_decls_for_prec: "<tag>" . token_decl_for_prec.1
+   76 token_decl_for_prec.1: . token_decl_for_prec
+   77                      | . token_decl_for_prec.1 token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    token_decl_for_prec.1  go to state 124
+    token_decl_for_prec    go to state 89
+    id                     go to state 90
+    string_as_id           go to state 91
+
+
+State 87
+
+   50 symbol_declaration: precedence_declarator token_decls_for_prec .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   75 token_decls_for_prec: token_decls_for_prec . "<tag>" token_decl_for_prec.1
+
+    "<tag>"  shift, and go to state 125
+
+    $default  reduce using rule 50 (symbol_declaration)
+
+
+State 88
+
+   73 token_decls_for_prec: token_decl_for_prec.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   77 token_decl_for_prec.1: token_decl_for_prec.1 . token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 73 (token_decls_for_prec)
+
+    token_decl_for_prec  go to state 126
+    id                   go to state 90
+    string_as_id         go to state 91
+
+
+State 89
+
+   76 token_decl_for_prec.1: token_decl_for_prec .
+
+    $default  reduce using rule 76 (token_decl_for_prec.1)
+
+
+State 90
+
+   71 int.opt: . %empty  [error, "string", "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "character literal", "identifier", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   72        | . "integer"
+   78 token_decl_for_prec: id . int.opt
+
+    "integer"  shift, and go to state 127
+
+    $default  reduce using rule 71 (int.opt)
+
+    int.opt  go to state 128
+
+
+State 91
+
+   79 token_decl_for_prec: string_as_id .
+
+    $default  reduce using rule 79 (token_decl_for_prec)
+
+
+State 92
+
+   66 token_decls: "<tag>" . token_decl.1
+   68 token_decl.1: . token_decl
+   69             | . token_decl.1 token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    token_decl.1  go to state 129
+    token_decl    go to state 95
+    id            go to state 96
+
+
+State 93
+
+   48 symbol_declaration: "%token" $@3 token_decls .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   67 token_decls: token_decls . "<tag>" token_decl.1
+
+    "<tag>"  shift, and go to state 130
+
+    $default  reduce using rule 48 (symbol_declaration)
+
+
+State 94
+
+   65 token_decls: token_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   69 token_decl.1: token_decl.1 . token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 65 (token_decls)
+
+    token_decl  go to state 131
+    id          go to state 96
+
+
+State 95
+
+   68 token_decl.1: token_decl .
+
+    $default  reduce using rule 68 (token_decl.1)
+
+
+State 96
+
+   70 token_decl: id . int.opt string_as_id.opt
+   71 int.opt: . %empty  [error, "string", "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "character literal", "identifier", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   72        | . "integer"
+
+    "integer"  shift, and go to state 127
+
+    $default  reduce using rule 71 (int.opt)
+
+    int.opt  go to state 132
+
+
+State 97
+
+   46 symbol_declaration: "%nterm" $@2 nterm_decls .
+
+    $default  reduce using rule 46 (symbol_declaration)
+
+
+State 98
+
+   64 nterm_decls: token_decls .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   67 token_decls: token_decls . "<tag>" token_decl.1
+
+    "<tag>"  shift, and go to state 130
+
+    $default  reduce using rule 64 (nterm_decls)
+
+
+State 99
+
+   81 symbol_decls: "<tag>" symbol_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   84 symbol_decl.1: symbol_decl.1 . symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 81 (symbol_decls)
+
+    id            go to state 57
+    symbol        go to state 101
+    string_as_id  go to state 59
+
+
+State 100
+
+   82 symbol_decls: symbol_decls "<tag>" . symbol_decl.1
+   83 symbol_decl.1: . symbol
+   84              | . symbol_decl.1 symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    symbol_decl.1  go to state 133
+    id             go to state 57
+    symbol         go to state 58
+    string_as_id   go to state 59
+
+
+State 101
+
+   84 symbol_decl.1: symbol_decl.1 symbol .
+
+    $default  reduce using rule 84 (symbol_decl.1)
+
+
+State 102
+
+   39 grammar_declaration: "%code" "identifier" "{...}" .
+
+    $default  reduce using rule 39 (grammar_declaration)
+
+
+State 103
+
+  110 value: "string" .
+
+    $default  reduce using rule 110 (value)
+
+
+State 104
+
+  111 value: "{...}" .
+
+    $default  reduce using rule 111 (value)
+
+
+State 105
+
+  109 value: "identifier" .
+
+    $default  reduce using rule 109 (value)
+
+
+State 106
+
+    7 prologue_declaration: "%define" variable value .
+
+    $default  reduce using rule 7 (prologue_declaration)
+
+
+State 107
+
+   89 rules_or_grammar_declaration: error ";" .
+
+    $default  reduce using rule 89 (rules_or_grammar_declaration)
+
+
+State 108
+
+   88 rules_or_grammar_declaration: grammar_declaration ";" .
+
+    $default  reduce using rule 88 (rules_or_grammar_declaration)
+
+
+State 109
+
+  121 epilogue.opt: "%%" . "epilogue"
+
+    "epilogue"  shift, and go to state 134
+
+
+State 110
+
+   86 grammar: grammar rules_or_grammar_declaration .
+
+    $default  reduce using rule 86 (grammar)
+
+
+State 111
+
+    1 input: prologue_declarations "%%" grammar epilogue.opt .
+
+    $default  reduce using rule 1 (input)
+
+
+State 112
+
+  106 named_ref.opt: "[identifier]" .
+
+    $default  reduce using rule 106 (named_ref.opt)
+
+
+State 113
+
+   90 $@4: . %empty
+   91 rules: id_colon named_ref.opt . $@4 ":" rhses.1
+
+    $default  reduce using rule 90 ($@4)
+
+    $@4  go to state 135
+
+
+State 114
+
+   32 params: "{...}" .
+
+    $default  reduce using rule 32 (params)
+
+
+State 115
+
+   22 prologue_declaration: "%param" $@1 params .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   31 params: params . "{...}"
+
+    "{...}"  shift, and go to state 136
+
+    $default  reduce using rule 22 (prologue_declaration)
+
+
+State 116
+
+   44 grammar_declaration: "%union" union_name "{...}" .
+
+    $default  reduce using rule 44 (grammar_declaration)
+
+
+State 117
+
+   61 tag: "<tag>" .
+
+    $default  reduce using rule 61 (tag)
+
+
+State 118
+
+   62 tag: "<*>" .
+
+    $default  reduce using rule 62 (tag)
+
+
+State 119
+
+   63 tag: "<>" .
+
+    $default  reduce using rule 63 (tag)
+
+
+State 120
+
+   35 grammar_declaration: code_props_type "{...}" generic_symlist .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "%param", "%union"]
+   58 generic_symlist: generic_symlist . generic_symlist_item
+   59 generic_symlist_item: . symbol
+   60                     | . tag
+   61 tag: . "<tag>"
+   62    | . "<*>"
+   63    | . "<>"
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 117
+    "<*>"                shift, and go to state 118
+    "<>"                 shift, and go to state 119
+
+    $default  reduce using rule 35 (grammar_declaration)
+
+    generic_symlist_item  go to state 137
+    tag                   go to state 122
+    id                    go to state 57
+    symbol                go to state 123
+    string_as_id          go to state 59
+
+
+State 121
+
+   57 generic_symlist: generic_symlist_item .
+
+    $default  reduce using rule 57 (generic_symlist)
+
+
+State 122
+
+   60 generic_symlist_item: tag .
+
+    $default  reduce using rule 60 (generic_symlist_item)
+
+
+State 123
+
+   59 generic_symlist_item: symbol .
+
+    $default  reduce using rule 59 (generic_symlist_item)
+
+
+State 124
+
+   74 token_decls_for_prec: "<tag>" token_decl_for_prec.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   77 token_decl_for_prec.1: token_decl_for_prec.1 . token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 74 (token_decls_for_prec)
+
+    token_decl_for_prec  go to state 126
+    id                   go to state 90
+    string_as_id         go to state 91
+
+
+State 125
+
+   75 token_decls_for_prec: token_decls_for_prec "<tag>" . token_decl_for_prec.1
+   76 token_decl_for_prec.1: . token_decl_for_prec
+   77                      | . token_decl_for_prec.1 token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    token_decl_for_prec.1  go to state 138
+    token_decl_for_prec    go to state 89
+    id                     go to state 90
+    string_as_id           go to state 91
+
+
+State 126
+
+   77 token_decl_for_prec.1: token_decl_for_prec.1 token_decl_for_prec .
+
+    $default  reduce using rule 77 (token_decl_for_prec.1)
+
+
+State 127
+
+   72 int.opt: "integer" .
+
+    $default  reduce using rule 72 (int.opt)
+
+
+State 128
+
+   78 token_decl_for_prec: id int.opt .
+
+    $default  reduce using rule 78 (token_decl_for_prec)
+
+
+State 129
+
+   66 token_decls: "<tag>" token_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   69 token_decl.1: token_decl.1 . token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 66 (token_decls)
+
+    token_decl  go to state 131
+    id          go to state 96
+
+
+State 130
+
+   67 token_decls: token_decls "<tag>" . token_decl.1
+   68 token_decl.1: . token_decl
+   69             | . token_decl.1 token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    token_decl.1  go to state 139
+    token_decl    go to state 95
+    id            go to state 96
+
+
+State 131
+
+   69 token_decl.1: token_decl.1 token_decl .
+
+    $default  reduce using rule 69 (token_decl.1)
+
+
+State 132
+
+   70 token_decl: id int.opt . string_as_id.opt
+  117 string_as_id: . "string"
+  118 string_as_id.opt: . %empty  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "character literal", "identifier", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+  119                 | . string_as_id
+
+    "string"  shift, and go to state 51
+
+    $default  reduce using rule 118 (string_as_id.opt)
+
+    string_as_id      go to state 140
+    string_as_id.opt  go to state 141
+
+
+State 133
+
+   82 symbol_decls: symbol_decls "<tag>" symbol_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   84 symbol_decl.1: symbol_decl.1 . symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 82 (symbol_decls)
+
+    id            go to state 57
+    symbol        go to state 101
+    string_as_id  go to state 59
+
+
+State 134
+
+  121 epilogue.opt: "%%" "epilogue" .
+
+    $default  reduce using rule 121 (epilogue.opt)
+
+
+State 135
+
+   91 rules: id_colon named_ref.opt $@4 . ":" rhses.1
+
+    ":"  shift, and go to state 142
+
+
+State 136
+
+   31 params: params "{...}" .
+
+    $default  reduce using rule 31 (params)
+
+
+State 137
+
+   58 generic_symlist: generic_symlist generic_symlist_item .
+
+    $default  reduce using rule 58 (generic_symlist)
+
+
+State 138
+
+   75 token_decls_for_prec: token_decls_for_prec "<tag>" token_decl_for_prec.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   77 token_decl_for_prec.1: token_decl_for_prec.1 . token_decl_for_prec
+   78 token_decl_for_prec: . id int.opt
+   79                    | . string_as_id
+  112 id: . "identifier"
+  113   | . "character literal"
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 75 (token_decls_for_prec)
+
+    token_decl_for_prec  go to state 126
+    id                   go to state 90
+    string_as_id         go to state 91
+
+
+State 139
+
+   67 token_decls: token_decls "<tag>" token_decl.1 .  [error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%define", "%defines", "%error-verbose", "%expect", "%expect-rr", "%<flag>", "%file-prefix", "%glr-parser", "%initial-action", "%language", "%name-prefix", "%no-default-prec", "%no-lines", "%nondeterministic-parser", "%output", "%pure-parser", "%require", "%skeleton", "%start", "%token-table", "%verbose", "%yacc", "%%", "%{...%}", ";", "<tag>", "%param", "%union"]
+   69 token_decl.1: token_decl.1 . token_decl
+   70 token_decl: . id int.opt string_as_id.opt
+  112 id: . "identifier"
+  113   | . "character literal"
+
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    $default  reduce using rule 67 (token_decls)
+
+    token_decl  go to state 131
+    id          go to state 96
+
+
+State 140
+
+  119 string_as_id.opt: string_as_id .
+
+    $default  reduce using rule 119 (string_as_id.opt)
+
+
+State 141
+
+   70 token_decl: id int.opt string_as_id.opt .
+
+    $default  reduce using rule 70 (token_decl)
+
+
+State 142
+
+   91 rules: id_colon named_ref.opt $@4 ":" . rhses.1
+   92 rhses.1: . rhs
+   93        | . rhses.1 "|" rhs
+   94        | . rhses.1 ";"
+   95 rhs: . %empty
+   96    | . rhs symbol named_ref.opt
+   97    | . rhs tag.opt "{...}" named_ref.opt
+   98    | . rhs "%?{...}"
+   99    | . rhs "%empty"
+  100    | . rhs "%prec" symbol
+  101    | . rhs "%dprec" "integer"
+  102    | . rhs "%merge" "<tag>"
+  103    | . rhs "%expect" "integer"
+  104    | . rhs "%expect-rr" "integer"
+
+    $default  reduce using rule 95 (rhs)
+
+    rhses.1  go to state 143
+    rhs      go to state 144
+
+
+State 143
+
+   91 rules: id_colon named_ref.opt $@4 ":" rhses.1 .  ["end of file", error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%no-default-prec", "%start", "identifier:", "%%", "%union"]
+   93 rhses.1: rhses.1 . "|" rhs
+   94        | rhses.1 . ";"
+
+    "|"  shift, and go to state 145
+    ";"  shift, and go to state 146
+
+    $default  reduce using rule 91 (rules)
+
+
+State 144
+
+   55 tag.opt: . %empty  ["{...}"]
+   56        | . "<tag>"
+   92 rhses.1: rhs .  ["end of file", error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%no-default-prec", "%start", "identifier:", "%%", "|", ";", "%union"]
+   96 rhs: rhs . symbol named_ref.opt
+   97    | rhs . tag.opt "{...}" named_ref.opt
+   98    | rhs . "%?{...}"
+   99    | rhs . "%empty"
+  100    | rhs . "%prec" symbol
+  101    | rhs . "%dprec" "integer"
+  102    | rhs . "%merge" "<tag>"
+  103    | rhs . "%expect" "integer"
+  104    | rhs . "%expect-rr" "integer"
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "%prec"              shift, and go to state 147
+    "%dprec"             shift, and go to state 148
+    "%merge"             shift, and go to state 149
+    "%expect"            shift, and go to state 150
+    "%expect-rr"         shift, and go to state 151
+    "%?{...}"            shift, and go to state 152
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 153
+    "%empty"             shift, and go to state 154
+
+    "{...}"   reduce using rule 55 (tag.opt)
+    $default  reduce using rule 92 (rhses.1)
+
+    tag.opt       go to state 155
+    id            go to state 57
+    symbol        go to state 156
+    string_as_id  go to state 59
+
+
+State 145
+
+   93 rhses.1: rhses.1 "|" . rhs
+   95 rhs: . %empty
+   96    | . rhs symbol named_ref.opt
+   97    | . rhs tag.opt "{...}" named_ref.opt
+   98    | . rhs "%?{...}"
+   99    | . rhs "%empty"
+  100    | . rhs "%prec" symbol
+  101    | . rhs "%dprec" "integer"
+  102    | . rhs "%merge" "<tag>"
+  103    | . rhs "%expect" "integer"
+  104    | . rhs "%expect-rr" "integer"
+
+    $default  reduce using rule 95 (rhs)
+
+    rhs  go to state 157
+
+
+State 146
+
+   94 rhses.1: rhses.1 ";" .
+
+    $default  reduce using rule 94 (rhses.1)
+
+
+State 147
+
+  100 rhs: rhs "%prec" . symbol
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+
+    id            go to state 57
+    symbol        go to state 158
+    string_as_id  go to state 59
+
+
+State 148
+
+  101 rhs: rhs "%dprec" . "integer"
+
+    "integer"  shift, and go to state 159
+
+
+State 149
+
+  102 rhs: rhs "%merge" . "<tag>"
+
+    "<tag>"  shift, and go to state 160
+
+
+State 150
+
+  103 rhs: rhs "%expect" . "integer"
+
+    "integer"  shift, and go to state 161
+
+
+State 151
+
+  104 rhs: rhs "%expect-rr" . "integer"
+
+    "integer"  shift, and go to state 162
+
+
+State 152
+
+   98 rhs: rhs "%?{...}" .
+
+    $default  reduce using rule 98 (rhs)
+
+
+State 153
+
+   56 tag.opt: "<tag>" .
+
+    $default  reduce using rule 56 (tag.opt)
+
+
+State 154
+
+   99 rhs: rhs "%empty" .
+
+    $default  reduce using rule 99 (rhs)
+
+
+State 155
+
+   97 rhs: rhs tag.opt . "{...}" named_ref.opt
+
+    "{...}"  shift, and go to state 163
+
+
+State 156
+
+   96 rhs: rhs symbol . named_ref.opt
+  105 named_ref.opt: . %empty  ["end of file", error, "string", "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%prec", "%dprec", "%merge", "%code", "%default-prec", "%expect", "%expect-rr", "%no-default-prec", "%start", "{...}", "%?{...}", "character literal", "identifier", "identifier:", "%%", "|", ";", "<tag>", "%union", "%empty"]
+  106              | . "[identifier]"
+
+    "[identifier]"  shift, and go to state 112
+
+    $default  reduce using rule 105 (named_ref.opt)
+
+    named_ref.opt  go to state 164
+
+
+State 157
+
+   55 tag.opt: . %empty  ["{...}"]
+   56        | . "<tag>"
+   93 rhses.1: rhses.1 "|" rhs .  ["end of file", error, "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%code", "%default-prec", "%no-default-prec", "%start", "identifier:", "%%", "|", ";", "%union"]
+   96 rhs: rhs . symbol named_ref.opt
+   97    | rhs . tag.opt "{...}" named_ref.opt
+   98    | rhs . "%?{...}"
+   99    | rhs . "%empty"
+  100    | rhs . "%prec" symbol
+  101    | rhs . "%dprec" "integer"
+  102    | rhs . "%merge" "<tag>"
+  103    | rhs . "%expect" "integer"
+  104    | rhs . "%expect-rr" "integer"
+  112 id: . "identifier"
+  113   | . "character literal"
+  115 symbol: . id
+  116       | . string_as_id
+  117 string_as_id: . "string"
+
+    "string"             shift, and go to state 51
+    "%prec"              shift, and go to state 147
+    "%dprec"             shift, and go to state 148
+    "%merge"             shift, and go to state 149
+    "%expect"            shift, and go to state 150
+    "%expect-rr"         shift, and go to state 151
+    "%?{...}"            shift, and go to state 152
+    "character literal"  shift, and go to state 52
+    "identifier"         shift, and go to state 53
+    "<tag>"              shift, and go to state 153
+    "%empty"             shift, and go to state 154
+
+    "{...}"   reduce using rule 55 (tag.opt)
+    $default  reduce using rule 93 (rhses.1)
+
+    tag.opt       go to state 155
+    id            go to state 57
+    symbol        go to state 156
+    string_as_id  go to state 59
+
+
+State 158
+
+  100 rhs: rhs "%prec" symbol .
+
+    $default  reduce using rule 100 (rhs)
+
+
+State 159
+
+  101 rhs: rhs "%dprec" "integer" .
+
+    $default  reduce using rule 101 (rhs)
+
+
+State 160
+
+  102 rhs: rhs "%merge" "<tag>" .
+
+    $default  reduce using rule 102 (rhs)
+
+
+State 161
+
+  103 rhs: rhs "%expect" "integer" .
+
+    $default  reduce using rule 103 (rhs)
+
+
+State 162
+
+  104 rhs: rhs "%expect-rr" "integer" .
+
+    $default  reduce using rule 104 (rhs)
+
+
+State 163
+
+   97 rhs: rhs tag.opt "{...}" . named_ref.opt
+  105 named_ref.opt: . %empty  ["end of file", error, "string", "%token", "%nterm", "%type", "%destructor", "%printer", "%left", "%right", "%nonassoc", "%precedence", "%prec", "%dprec", "%merge", "%code", "%default-prec", "%expect", "%expect-rr", "%no-default-prec", "%start", "{...}", "%?{...}", "character literal", "identifier", "identifier:", "%%", "|", ";", "<tag>", "%union", "%empty"]
+  106              | . "[identifier]"
+
+    "[identifier]"  shift, and go to state 112
+
+    $default  reduce using rule 105 (named_ref.opt)
+
+    named_ref.opt  go to state 165
+
+
+State 164
+
+   96 rhs: rhs symbol named_ref.opt .
+
+    $default  reduce using rule 96 (rhs)
+
+
+State 165
+
+   97 rhs: rhs tag.opt "{...}" named_ref.opt .
+
+    $default  reduce using rule 97 (rhs)
diff --git a/src/parse-gram.y b/src/parse-gram.y
index 5f77a5b..5815abc 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -1,6 +1,6 @@
-%{/* Bison Grammar Parser                             -*- C -*-
+/* Bison Grammar Parser                             -*- C -*-
 
-   Copyright (C) 2002-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -17,117 +17,132 @@
    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 "c-ctype.h"
-#include "complain.h"
-#include "conflicts.h"
-#include "files.h"
-#include "getargs.h"
-#include "gram.h"
-#include "muscle-tab.h"
-#include "named-ref.h"
-#include "quotearg.h"
-#include "reader.h"
-#include "symlist.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);
-
-#define YY_LOCATION_PRINT(File, Loc) \
-	  location_print (File, Loc)
-
-static void version_check (location const *loc, char const *version);
-
-/* Request detailed syntax error messages, and pass them to GRAM_ERROR.
-   FIXME: depends on the undocumented availability of YYLLOC.  */
-#undef  yyerror
-#define yyerror(Msg) \
-	gram_error (&yylloc, Msg)
-static void gram_error (location const *, char const *);
-
-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 = NULL;
-static symbol *current_lhs_symbol;
-static location current_lhs_location;
-static named_ref *current_lhs_named_ref;
-static int current_prec = 0;
-
-/** 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)
+%code requires
 {
-  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;
+  #include "symlist.h"
+  #include "symtab.h"
 }
 
+%code top
+{
+  /* On column 0 to please syntax-check.  */
+#include <config.h>
+}
 
-#define YYTYPE_INT16 int_fast16_t
-#define YYTYPE_INT8 int_fast8_t
-#define YYTYPE_UINT16 uint_fast16_t
-#define YYTYPE_UINT8 uint_fast8_t
-%}
+%code
+{
+  #include "system.h"
 
-%debug
-%define api.prefix "gram_"
-%define api.pure
+  #include <c-ctype.h>
+  #include <errno.h>
+  #include <intprops.h>
+  #include <quotearg.h>
+  #include <vasnprintf.h>
+  #include <xmemdup0.h>
+
+  #include "complain.h"
+  #include "conflicts.h"
+  #include "files.h"
+  #include "getargs.h"
+  #include "gram.h"
+  #include "named-ref.h"
+  #include "reader.h"
+  #include "scan-code.h"
+  #include "scan-gram.h"
+
+  static int current_prec = 0;
+  static location current_lhs_loc;
+  static named_ref *current_lhs_named_ref;
+  static symbol *current_lhs_symbol;
+  static symbol_class current_class = unknown_sym;
+
+  /** 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);
+
+  #define YYLLOC_DEFAULT(Current, Rhs, N)         \
+    (Current) = lloc_default (Rhs, N)
+  static YYLTYPE lloc_default (YYLTYPE const *, int);
+
+  #define YY_LOCATION_PRINT(File, Loc)            \
+    location_print (Loc, File)
+
+  /* Strip initial '{' and final '}' (must be first and last characters).
+     Return the result.  */
+  static char *strip_braces (char *code);
+
+  /* Convert CODE by calling code_props_plain_init if PLAIN, otherwise
+     code_props_symbol_action_init.  Call
+     gram_scanner_last_string_free to release the latest string from
+     the scanner (should be CODE). */
+  static char const *translate_code (char *code, location loc, bool plain);
+
+  /* Convert CODE by calling code_props_plain_init after having
+     stripped the first and last characters (expected to be '{', and
+     '}').  Call gram_scanner_last_string_free to release the latest
+     string from the scanner (should be CODE). */
+  static char const *translate_code_braceless (char *code, location loc);
+
+  /* Handle a %error-verbose directive.  */
+  static void handle_error_verbose (location const *loc, char const *directive);
+
+  /* Handle a %file-prefix directive.  */
+  static void handle_file_prefix (location const *loc,
+                                  location const *dir_loc,
+                                  char const *directive, char const *value);
+
+  /* Handle a %name-prefix directive.  */
+  static void handle_name_prefix (location const *loc,
+                                  char const *directive, char const *value);
+
+  /* Handle a %pure-parser directive.  */
+  static void handle_pure_parser (location const *loc, char const *directive);
+
+  /* Handle a %require directive.  */
+  static void handle_require (location const *loc, char const *version);
+
+  /* Handle a %skeleton directive.  */
+  static void handle_skeleton (location const *loc, char const *skel);
+
+  /* Handle a %yacc directive.  */
+  static void handle_yacc (location const *loc);
+
+  /* Implementation of yyerror.  */
+  static void gram_error (location const *, char const *);
+
+  /* A string that describes a char (e.g., 'a' -> "'a'").  */
+  static char const *char_name (char);
+
+  /* Add style to semantic values in traces.  */
+  static void tron (FILE *yyo);
+  static void troff (FILE *yyo);
+}
+
+%define api.header.include {"parse-gram.h"}
+%define api.prefix {gram_}
+%define api.pure full
+%define api.token.raw
+%define api.value.type union
+%define locations
+%define parse.error verbose
 %define parse.lac full
+%define parse.trace
 %defines
-%error-verbose
 %expect 0
-%locations
 %verbose
 
 %initial-action
 {
   /* Bison's grammar can initial empty locations, hence a default
      location is needed. */
-  boundary_set (&@$.start, current_file, 1, 1);
-  boundary_set (&@$.end, current_file, 1, 1);
+  boundary_set (&@$.start, grammar_file, 1, 1, 1);
+  boundary_set (&@$.end, grammar_file, 1, 1, 1);
 }
 
-%union
-{
-  symbol *symbol;
-  symbol_list *list;
-  int integer;
-  char const *chars;
-  char *code;
-  assoc assoc;
-  uniqstr uniqstr;
-  unsigned char character;
-  named_ref *named_ref;
-};
-
 /* Define the tokens together with their human representation.  */
 %token GRAM_EOF 0 "end of file"
 %token STRING     "string"
-%token INT        "integer"
 
 %token PERCENT_TOKEN       "%token"
 %token PERCENT_NTERM       "%nterm"
@@ -139,40 +154,37 @@
 %token PERCENT_LEFT        "%left"
 %token PERCENT_RIGHT       "%right"
 %token PERCENT_NONASSOC    "%nonassoc"
+%token PERCENT_PRECEDENCE  "%precedence"
 
 %token PERCENT_PREC          "%prec"
 %token PERCENT_DPREC         "%dprec"
 %token PERCENT_MERGE         "%merge"
 
-
 /*----------------------.
 | Global Declarations.  |
 `----------------------*/
 
 %token
   PERCENT_CODE            "%code"
-  PERCENT_DEBUG           "%debug"
   PERCENT_DEFAULT_PREC    "%default-prec"
   PERCENT_DEFINE          "%define"
   PERCENT_DEFINES         "%defines"
   PERCENT_ERROR_VERBOSE   "%error-verbose"
   PERCENT_EXPECT          "%expect"
-  PERCENT_EXPECT_RR	  "%expect-rr"
+  PERCENT_EXPECT_RR       "%expect-rr"
+  PERCENT_FLAG            "%<flag>"
   PERCENT_FILE_PREFIX     "%file-prefix"
   PERCENT_GLR_PARSER      "%glr-parser"
   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"
   PERCENT_NO_LINES        "%no-lines"
   PERCENT_NONDETERMINISTIC_PARSER
-			  "%nondeterministic-parser"
+                          "%nondeterministic-parser"
   PERCENT_OUTPUT          "%output"
-  PERCENT_PARSE_PARAM     "%parse-param"
   PERCENT_PURE_PARSER     "%pure-parser"
-  PERCENT_REQUIRE	  "%require"
+  PERCENT_REQUIRE         "%require"
   PERCENT_SKELETON        "%skeleton"
   PERCENT_START           "%start"
   PERCENT_TOKEN_TABLE     "%token-table"
@@ -181,8 +193,10 @@
 ;
 
 %token BRACED_CODE     "{...}"
+%token BRACED_PREDICATE "%?{...}"
 %token BRACKETED_ID    "[identifier]"
-%token CHAR            "char"
+%token CHAR            "character literal"
+%token COLON           ":"
 %token EPILOGUE        "epilogue"
 %token EQUAL           "="
 %token ID              "identifier"
@@ -191,39 +205,88 @@
 %token PIPE            "|"
 %token PROLOGUE        "%{...%}"
 %token SEMICOLON       ";"
-%token TYPE            "type"
-%token TYPE_TAG_ANY    "<*>"
-%token TYPE_TAG_NONE   "<>"
+%token TAG             "<tag>"
+%token TAG_ANY         "<*>"
+%token TAG_NONE        "<>"
 
-%type <character> CHAR
-%printer { fputs (char_name ($$), stderr); } CHAR
+ /* Experimental feature, don't rely on it.  */
+%code pre-printer  {tron (yyo);}
+%code post-printer {troff (yyo);}
 
-/* 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}", $$); }
-	 braceless content.opt "{...}" "%{...%}" EPILOGUE
+%type <unsigned char> CHAR
+%printer { fputs (char_name ($$), yyo); } <unsigned char>
 
-%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 <char*> "{...}" "%?{...}" "%{...%}" EPILOGUE STRING
+%printer { fputs ($$, yyo); }  <char*>
 
-%type <integer> INT
-%printer { fprintf (stderr, "%d", $$); } <integer>
+%type <uniqstr>
+  BRACKETED_ID ID ID_COLON
+  PERCENT_ERROR_VERBOSE PERCENT_FILE_PREFIX PERCENT_FLAG PERCENT_NAME_PREFIX
+  PERCENT_PURE_PARSER
+  TAG tag tag.opt variable
+%printer { fputs ($$, yyo); } <uniqstr>
+%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
+%printer { fprintf (yyo, "%s:", $$); } ID_COLON
+%printer { fprintf (yyo, "%%%s", $$); } PERCENT_FLAG
+%printer { fprintf (yyo, "<%s>", $$); } TAG tag
 
-%type <symbol> id id_colon string_as_id symbol symbol.prec
-%printer { fprintf (stderr, "%s", $$->tag); } <symbol>
-%printer { fprintf (stderr, "%s:", $$->tag); } id_colon
+%token <int> INT "integer"
+%printer { fprintf (yyo, "%d", $$); } <int>
+
+%type <symbol*> id id_colon string_as_id symbol token_decl token_decl_for_prec
+%printer { fprintf (yyo, "%s", $$ ? $$->tag : "<NULL>"); } <symbol*>
+%printer { fprintf (yyo, "%s:", $$->tag); } id_colon
 
 %type <assoc> precedence_declarator
-%type <list>  symbols.1 symbols.prec generic_symlist generic_symlist_item
-%type <named_ref> named_ref.opt
 
+%destructor { symbol_list_free ($$); } <symbol_list*>
+%printer { symbol_list_syms_print ($$, yyo); } <symbol_list*>
+
+%type <named_ref*> named_ref.opt
+
+/*---------.
+| %param.  |
+`---------*/
+%code requires
+{
+  typedef enum
+  {
+    param_none   = 0,
+    param_lex    = 1 << 0,
+    param_parse  = 1 << 1,
+    param_both   = param_lex | param_parse
+  } param_type;
+};
+%code
+{
+  /** Add a lex-param and/or a parse-param.
+   *
+   * \param type  where to push this formal argument.
+   * \param decl  the formal argument.  Destroyed.
+   * \param loc   the location in the source.
+   */
+  static void add_param (param_type type, char *decl, location loc);
+  static param_type current_param = param_none;
+};
+%token <param_type> PERCENT_PARAM "%param";
+%printer
+{
+  switch ($$)
+    {
+#define CASE(In, Out)                                           \
+      case param_ ## In: fputs ("%" #Out, yyo); break
+      CASE (lex,   lex-param);
+      CASE (parse, parse-param);
+      CASE (both,  param);
+#undef CASE
+      case param_none: aver (false); break;
+    }
+} <param_type>;
+
+
+                     /*==========\
+                     | Grammar.  |
+                     \==========*/
 %%
 
 input:
@@ -231,12 +294,12 @@
 ;
 
 
-	/*------------------------------------.
-	| Declarations: before the first %%.  |
-	`------------------------------------*/
+        /*------------------------------------.
+        | Declarations: before the first %%.  |
+        `------------------------------------*/
 
 prologue_declarations:
-  /* Nothing */
+  %empty
 | prologue_declarations prologue_declaration
 ;
 
@@ -244,31 +307,29 @@
   grammar_declaration
 | "%{...%}"
     {
-      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);
+                        translate_code ($1, @1, true), @1);
       code_scanner_last_string_free ();
     }
-| "%debug"                         { debug = true; }
-| "%define" variable content.opt
+| "%<flag>"
     {
-      muscle_percent_define_insert ($2, @2, $3,
+      muscle_percent_define_ensure ($1, @1, true);
+    }
+| "%define" variable value
+    {
+      muscle_percent_define_insert ($2, @$, $3.kind, $3.chars,
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
     }
 | "%defines"                       { defines_flag = true; }
 | "%defines" STRING
     {
       defines_flag = true;
-      spec_defines_file = xstrdup ($2);
+      spec_header_file = xstrdup ($2);
     }
-| "%error-verbose"                 { error_verbose = true; }
+| "%error-verbose"                 { handle_error_verbose (&@$, $1); }
 | "%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 */
+| "%expect-rr" INT                 { expected_rr_conflicts = $2; }
+| "%file-prefix" STRING            { handle_file_prefix (&@$, &@1, $1, $2); }
 | "%glr-parser"
     {
       nondeterministic_parser = true;
@@ -276,97 +337,49 @@
     }
 | "%initial-action" "{...}"
     {
-      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);
+      muscle_code_grow ("initial_action", translate_code ($2, @2, false), @2);
       code_scanner_last_string_free ();
     }
-| "%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 */
+| "%language" STRING            { language_argmatch ($2, grammar_prio, @1); }
+| "%name-prefix" STRING         { handle_name_prefix (&@$, $1, $2); }
 | "%no-lines"                   { no_lines_flag = true; }
-| "%nondeterministic-parser"	{ nondeterministic_parser = 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);
-    }
+| "%param" { current_param = $1; } params { current_param = param_none; }
+| "%pure-parser"                { handle_pure_parser (&@$, $1); }
+| "%require" STRING             { handle_require (&@2, $2); }
+| "%skeleton" STRING            { handle_skeleton (&@2, $2); }
 | "%token-table"                { token_table_flag = true; }
 | "%verbose"                    { report_flag |= report_states; }
-| "%yacc"                       { yacc_flag = true; }
+| "%yacc"                       { handle_yacc (&@$); }
+| error ";"                     { current_class = unknown_sym; yyerrok; }
 | /*FIXME: Err?  What is this horror doing here? */ ";"
 ;
 
+params:
+   params "{...}"  { add_param (current_param, $2, @2); }
+| "{...}"          { add_param (current_param, $1, @1); }
+;
+
+
+/*----------------------.
+| grammar_declaration.  |
+`----------------------*/
+
 grammar_declaration:
-  precedence_declaration
-| symbol_declaration
+  symbol_declaration
 | "%start" symbol
     {
       grammar_start_symbol_set ($2, @2);
     }
-| "%destructor" "{...}" generic_symlist
+| code_props_type "{...}" generic_symlist
     {
       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);
-      }
-    }
-| "%printer" "{...}" generic_symlist
-    {
-      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);
+        for (symbol_list *list = $3; list; list = list->next)
+          symbol_list_code_props_set (list, $1, &code);
         symbol_list_free ($3);
       }
     }
@@ -378,167 +391,244 @@
     {
       default_prec = false;
     }
-| "%code" braceless
+| "%code" "{...}"
     {
       /* Do not invoke muscle_percent_code_grow here since it invokes
          muscle_user_name_list_grow.  */
-      muscle_code_grow ("percent_code()", $2, @2);
+      muscle_code_grow ("percent_code()",
+                        translate_code_braceless ($2, @2), @2);
       code_scanner_last_string_free ();
     }
-| "%code" ID braceless
+| "%code" ID "{...}"
     {
-      muscle_percent_code_grow ($2, @2, $3, @3);
+      muscle_percent_code_grow ($2, @2, translate_code_braceless ($3, @3), @3);
       code_scanner_last_string_free ();
     }
 ;
 
+%type <code_props_type> code_props_type;
+%printer { fprintf (yyo, "%s", code_props_type_string ($$)); } <code_props_type>;
+code_props_type:
+  "%destructor"  { $$ = destructor; }
+| "%printer"     { $$ = printer; }
+;
 
-/*----------*
- | %union.  |
- *----------*/
+/*---------.
+| %union.  |
+`---------*/
 
 %token PERCENT_UNION "%union";
 
 union_name:
-  /* Nothing. */ {}
-| ID             { muscle_code_grow ("union_name", $1, @1); }
+  %empty {}
+| ID     { muscle_percent_define_insert ("api.value.union.name",
+                                         @1, muscle_keyword, $1,
+                                         MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
 ;
 
 grammar_declaration:
-  "%union" union_name braceless
+  "%union" union_name "{...}"
     {
       union_seen = true;
-      muscle_code_grow ("stype", $3, @3);
+      muscle_code_grow ("union_members", translate_code_braceless ($3, @3), @3);
       code_scanner_last_string_free ();
     }
 ;
 
 
-
-
+%type <symbol_list*> nterm_decls symbol_decls symbol_decl.1
+      token_decls token_decls_for_prec
+      token_decl.1 token_decl_for_prec.1;
 symbol_declaration:
-  "%nterm" { current_class = nterm_sym; } symbol_defs.1
+  "%nterm" { current_class = nterm_sym; } nterm_decls[syms]
     {
       current_class = unknown_sym;
-      current_type = NULL;
+      symbol_list_free ($syms);
     }
-| "%token" { current_class = token_sym; } symbol_defs.1
+| "%token" { current_class = token_sym; } token_decls[syms]
     {
       current_class = unknown_sym;
-      current_type = NULL;
+      symbol_list_free ($syms);
     }
-| "%type" TYPE symbols.1
+| "%type" symbol_decls[syms]
     {
-      symbol_list *list;
-      tag_seen = true;
-      for (list = $3; list; list = list->next)
-	symbol_type_set (list->content.sym, $2, @2);
-      symbol_list_free ($3);
+      symbol_list_free ($syms);
     }
-;
-
-precedence_declaration:
-  precedence_declarator type.opt symbols.prec
+| precedence_declarator token_decls_for_prec[syms]
     {
-      symbol_list *list;
       ++current_prec;
-      for (list = $3; list; list = list->next)
-	{
-	  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;
+      for (symbol_list *list = $syms; list; list = list->next)
+        symbol_precedence_set (list->content.sym, current_prec, $1, @1);
+      symbol_list_free ($syms);
     }
 ;
 
 precedence_declarator:
-  "%left"     { $$ = left_assoc; }
-| "%right"    { $$ = right_assoc; }
-| "%nonassoc" { $$ = non_assoc; }
+  "%left"       { $$ = left_assoc; }
+| "%right"      { $$ = right_assoc; }
+| "%nonassoc"   { $$ = non_assoc; }
+| "%precedence" { $$ = precedence_assoc; }
 ;
 
-type.opt:
-  /* Nothing. */ { current_type = NULL; }
-| TYPE           { current_type = $1; tag_seen = true; }
+tag.opt:
+  %empty { $$ = NULL; }
+| TAG    { $$ = $1; }
 ;
 
-/* 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_sym_new ($1, @1); }
-| symbols.1 symbol
-    { $$ = symbol_list_prepend ($1, symbol_list_sym_new ($2, @2)); }
-;
-
+%type <symbol_list*> generic_symlist generic_symlist_item;
 generic_symlist:
-  generic_symlist_item { $$ = $1; }
-| generic_symlist generic_symlist_item { $$ = symbol_list_prepend ($1, $2); }
+  generic_symlist_item
+| generic_symlist generic_symlist_item   { $$ = symbol_list_append ($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); }
+  symbol    { $$ = symbol_list_sym_new ($1, @1); }
+| tag       { $$ = symbol_list_type_new ($1, @1); }
 ;
 
-/* One token definition.  */
-symbol_def:
-  TYPE
-     {
-       current_type = $1;
-       tag_seen = true;
-     }
-| id
-     {
-       symbol_class_set ($1, current_class, @1, true);
-       symbol_type_set ($1, current_type, @1);
-     }
-| id INT
+tag:
+  TAG
+| "<*>" { $$ = uniqstr_new ("*"); }
+| "<>"  { $$ = uniqstr_new (""); }
+;
+
+/*-----------------------.
+| nterm_decls (%nterm).  |
+`-----------------------*/
+
+// A non empty list of possibly tagged symbols for %nterm.
+//
+// Can easily be defined like symbol_decls but restricted to ID, but
+// using token_decls allows to reudce the number of rules, and also to
+// make nicer error messages on "%nterm 'a'" or '%nterm FOO "foo"'.
+nterm_decls:
+  token_decls
+;
+
+/*-----------------------------------.
+| token_decls (%token, and %nterm).  |
+`-----------------------------------*/
+
+// A non empty list of possibly tagged symbols for %token or %nterm.
+token_decls:
+  token_decl.1[syms]
     {
-      symbol_class_set ($1, current_class, @1, true);
-      symbol_type_set ($1, current_type, @1);
-      symbol_user_token_number_set ($1, $2, @2);
+      $$ = $syms;
     }
-| id string_as_id
+| TAG token_decl.1[syms]
     {
-      symbol_class_set ($1, current_class, @1, true);
-      symbol_type_set ($1, current_type, @1);
-      symbol_make_alias ($1, $2, @$);
+      $$ = symbol_list_type_set ($syms, $TAG, @TAG);
     }
-| id INT string_as_id
+| token_decls TAG token_decl.1[syms]
     {
-      symbol_class_set ($1, current_class, @1, true);
-      symbol_type_set ($1, current_type, @1);
-      symbol_user_token_number_set ($1, $2, @2);
-      symbol_make_alias ($1, $3, @$);
+      $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG));
     }
 ;
 
-/* One or more symbol definitions. */
-symbol_defs.1:
-  symbol_def
-| symbol_defs.1 symbol_def
+// One or more symbol declarations for %token or %nterm.
+token_decl.1:
+  token_decl                { $$ = symbol_list_sym_new ($1, @1); }
+| token_decl.1 token_decl   { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); }
+
+// One symbol declaration for %token or %nterm.
+token_decl:
+  id int.opt[num] string_as_id.opt[alias]
+    {
+      $$ = $id;
+      symbol_class_set ($id, current_class, @id, true);
+      if (0 <= $num)
+        symbol_user_token_number_set ($id, $num, @num);
+      if ($alias)
+        symbol_make_alias ($id, $alias, @alias);
+    }
+;
+
+%type <int> int.opt;
+int.opt:
+  %empty  { $$ = -1; }
+| INT
+;
+
+/*-------------------------------------.
+| token_decls_for_prec (%left, etc.).  |
+`-------------------------------------*/
+
+// A non empty list of possibly tagged tokens for precedence declaration.
+//
+// Similar to %token (token_decls), but in '%left FOO 1 "foo"', it treats
+// FOO and "foo" as two different symbols instead of aliasing them.
+token_decls_for_prec:
+  token_decl_for_prec.1[syms]
+    {
+      $$ = $syms;
+    }
+| TAG token_decl_for_prec.1[syms]
+    {
+      $$ = symbol_list_type_set ($syms, $TAG, @TAG);
+    }
+| token_decls_for_prec TAG token_decl_for_prec.1[syms]
+    {
+      $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG));
+    }
+;
+
+// One or more token declarations for precedence declaration.
+token_decl_for_prec.1:
+  token_decl_for_prec
+    { $$ = symbol_list_sym_new ($1, @1); }
+| token_decl_for_prec.1 token_decl_for_prec
+    { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); }
+
+// One token declaration for precedence declaration.
+token_decl_for_prec:
+  id int.opt[num]
+    {
+      $$ = $id;
+      symbol_class_set ($id, token_sym, @id, false);
+      if (0 <= $num)
+        symbol_user_token_number_set ($id, $num, @num);
+    }
+| string_as_id
 ;
 
 
-	/*------------------------------------------.
-	| The grammar section: between the two %%.  |
-	`------------------------------------------*/
+/*-----------------------------------.
+| symbol_decls (argument of %type).  |
+`-----------------------------------*/
+
+// A non empty list of typed symbols (for %type).
+symbol_decls:
+  symbol_decl.1[syms]
+    {
+      $$ = $syms;
+    }
+| TAG symbol_decl.1[syms]
+    {
+      $$ = symbol_list_type_set ($syms, $TAG, @TAG);
+    }
+| symbol_decls TAG symbol_decl.1[syms]
+    {
+      $$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG, @TAG));
+    }
+;
+
+// One or more token declarations (for %type).
+symbol_decl.1:
+  symbol
+    {
+      symbol_class_set ($symbol, pct_type_sym, @symbol, false);
+      $$ = symbol_list_sym_new ($symbol, @symbol);
+    }
+  | symbol_decl.1 symbol
+    {
+      symbol_class_set ($symbol, pct_type_sym, @symbol, false);
+      $$ = symbol_list_append ($1, symbol_list_sym_new ($symbol, @symbol));
+    }
+;
+
+        /*------------------------------------------.
+        | The grammar section: between the two %%.  |
+        `------------------------------------------*/
 
 grammar:
   rules_or_grammar_declaration
@@ -557,81 +647,89 @@
 ;
 
 rules:
-  id_colon named_ref.opt { current_lhs ($1, @1, $2); } rhses.1
-  {
-    /* Free the current lhs. */
-    current_lhs (0, @1, 0);
-  }
+  id_colon named_ref.opt { current_lhs ($1, @1, $2); } ":" rhses.1
+    {
+      /* Free the current lhs. */
+      current_lhs (0, @1, 0);
+    }
 ;
 
 rhses.1:
-  rhs                { grammar_current_rule_end (@1); }
-| rhses.1 "|" rhs    { grammar_current_rule_end (@3); }
+  rhs                { grammar_current_rule_end (@rhs); }
+| rhses.1 "|" rhs    { grammar_current_rule_end (@rhs); }
 | rhses.1 ";"
 ;
 
+%token PERCENT_EMPTY "%empty";
 rhs:
-  /* Nothing.  */
-    { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
-				  current_lhs_named_ref); }
+  %empty
+    { grammar_current_rule_begin (current_lhs_symbol, current_lhs_loc,
+                                  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 tag.opt "{...}"[act] named_ref.opt[name]
+    { grammar_current_rule_action_append ($act, @act, $name, $[tag.opt]); }
+| rhs "%?{...}"
+    { grammar_current_rule_predicate_append ($2, @2); }
+| rhs "%empty"
+    { grammar_current_rule_empty_set (@2); }
 | rhs "%prec" symbol
     { grammar_current_rule_prec_set ($3, @3); }
 | rhs "%dprec" INT
     { grammar_current_rule_dprec_set ($3, @3); }
-| rhs "%merge" TYPE
+| rhs "%merge" TAG
     { grammar_current_rule_merge_set ($3, @3); }
+| rhs "%expect" INT
+    { grammar_current_rule_expect_sr ($3, @3); }
+| rhs "%expect-rr" INT
+    { grammar_current_rule_expect_rr ($3, @3); }
 ;
 
 named_ref.opt:
-  /* Nothing. */ { $$ = 0; }
-|
-  BRACKETED_ID   { $$ = named_ref_new($1, @1); }
+  %empty         { $$ = NULL; }
+| BRACKETED_ID   { $$ = named_ref_new ($1, @1); }
 ;
 
 
-/*----------------------------*
- | variable and content.opt.  |
- *---------------------------*/
+/*---------------------.
+| variable and value.  |
+`---------------------*/
 
-/* 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 requires {
+  #include "muscle-tab.h"
+  typedef struct
+  {
+    char const *chars;
+    muscle_kind kind;
+  } value_type;
+};
+%type <value_type> value;
+%printer
+{
+  switch ($$.kind)
     {
-      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;
+    case muscle_code:    fprintf (yyo,  "{%s}",  $$.chars); break;
+    case muscle_keyword: fprintf (yyo,   "%s",   $$.chars); break;
+    case muscle_string:  fprintf (yyo, "\"%s\"", $$.chars); break;
     }
+} <value_type>;
+
+value:
+  %empty  { $$.kind = muscle_keyword; $$.chars = ""; }
+| ID      { $$.kind = muscle_keyword; $$.chars = $1; }
+| STRING  { $$.kind = muscle_string;  $$.chars = $1; }
+| "{...}" { $$.kind = muscle_code;    $$.chars = strip_braces ($1); }
 ;
 
 
-/*---------------*
- | Identifiers.  |
- *---------------*/
+/*--------------.
+| Identifiers.  |
+`--------------*/
 
 /* Identifiers are returned as uniqstr values by the scanner.
    Depending on their use, we may need to make them genuine symbols.  */
@@ -641,6 +739,24 @@
     { $$ = symbol_from_uniqstr ($1, @1); }
 | CHAR
     {
+      const char *var = "api.token.raw";
+      if (current_class == nterm_sym)
+        {
+          complain (&@1, complaint,
+                    _("character literals cannot be nonterminals"));
+          YYERROR;
+        }
+      if (muscle_percent_define_ifdef (var))
+        {
+          int indent = 0;
+          complain_indent (&@1, complaint, &indent,
+                           _("character literals cannot be used together"
+                             " with %s"), var);
+          indent += SUB_INDENT;
+          location loc = muscle_percent_define_get_loc (var);
+          complain_indent (&loc, complaint, &indent,
+                           _("definition of %s"), var);
+        }
       $$ = symbol_get (char_name ($1), @1);
       symbol_class_set ($$, token_sym, @1, false);
       symbol_user_token_number_set ($$, $1, @1);
@@ -666,22 +782,23 @@
     }
 ;
 
+%type <symbol*> string_as_id.opt;
+string_as_id.opt:
+  %empty             { $$ = NULL; }
+| string_as_id
+;
+
 epilogue.opt:
-  /* Nothing.  */
+  %empty
 | "%%" EPILOGUE
     {
-      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);
+      muscle_code_grow ("epilogue", translate_code ($2, @2, true), @2);
       code_scanner_last_string_free ();
     }
 ;
 
 %%
 
-
 /* Return the location of the left-hand side of a rule whose
    right-hand side is RHS[1] ... RHS[N].  Ignore empty nonterminals in
    the right-hand side, and return an empty location equal to the end
@@ -690,7 +807,6 @@
 static YYLTYPE
 lloc_default (YYLTYPE const *rhs, int n)
 {
-  int i;
   YYLTYPE loc;
 
   /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
@@ -701,54 +817,83 @@
   /* 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++)
+  for (int i = 1; i <= n; i++)
     if (! equal_boundaries (rhs[i].start, rhs[i].end))
       {
-	loc.start = rhs[i].start;
-	break;
+        loc.start = rhs[i].start;
+        break;
       }
 
   return loc;
 }
 
+static
+char *strip_braces (char *code)
+{
+  code[strlen (code) - 1] = 0;
+  return code + 1;
+}
 
-/* Add a lex-param or a parse-param (depending on TYPE) with
-   declaration DECL and location LOC.  */
+static
+char const *
+translate_code (char *code, location loc, bool plain)
+{
+  code_props plain_code;
+  if (plain)
+    code_props_plain_init (&plain_code, code, loc);
+  else
+    code_props_symbol_action_init (&plain_code, code, loc);
+  code_props_translate_code (&plain_code);
+  gram_scanner_last_string_free ();
+  return plain_code.code;
+}
+
+static
+char const *
+translate_code_braceless (char *code, location loc)
+{
+  return translate_code (strip_braces (code), loc, true);
+}
 
 static void
-add_param (char const *type, char *decl, location loc)
+add_param (param_type type, char *decl, location loc)
 {
-  static char const alphanum[26 + 26 + 1 + 10] =
+  static char const alphanum[26 + 26 + 1 + 10 + 1] =
     "abcdefghijklmnopqrstuvwxyz"
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     "_"
     "0123456789";
+
   char const *name_start = NULL;
-  char *p;
+  {
+    char *p;
+    /* Stop on last actual character.  */
+    for (p = decl; p[1]; p++)
+      if ((p == decl
+           || ! memchr (alphanum, p[-1], sizeof alphanum - 1))
+          && memchr (alphanum, p[0], sizeof alphanum - 10 - 1))
+        name_start = p;
 
-  /* Stop on last actual character.  */
-  for (p = decl; p[1]; p++)
-    if ((p == decl
-	 || ! memchr (alphanum, p[-1], sizeof alphanum))
-	&& memchr (alphanum, p[0], sizeof alphanum - 10))
-      name_start = p;
-
-  /* Strip the surrounding '{' and '}', and any blanks just inside
-     the braces.  */
-  --p;
-  while (c_isspace ((unsigned char) *p))
+    /* Strip the surrounding '{' and '}', and any blanks just inside
+       the braces.  */
     --p;
-  p[1] = '\0';
-  ++decl;
-  while (c_isspace ((unsigned char) *decl))
+    while (c_isspace ((unsigned char) *p))
+      --p;
+    p[1] = '\0';
     ++decl;
+    while (c_isspace ((unsigned char) *decl))
+      ++decl;
+  }
 
   if (! name_start)
-    complain_at (loc, _("missing identifier in parameter declaration"));
+    complain (&loc, complaint, _("missing identifier in parameter declaration"));
   else
     {
       char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
-      muscle_pair_list_grow (type, decl, name);
+      if (type & param_lex)
+        muscle_pair_list_grow ("lex_param", decl, name);
+      if (type & param_parse)
+        muscle_pair_list_grow ("parse_param", decl, name);
       free (name);
     }
 
@@ -757,26 +902,181 @@
 
 
 static void
-version_check (location const *loc, char const *version)
+handle_error_verbose (location const *loc, char const *directive)
 {
-  if (strverscmp (version, PACKAGE_VERSION) > 0)
+  bison_directive (loc, directive);
+  muscle_percent_define_insert (directive, *loc, muscle_keyword, "",
+                                MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+}
+
+
+static void
+handle_file_prefix (location const *loc,
+                    location const *dir_loc,
+                    char const *directive, char const *value)
+{
+  bison_directive (loc, directive);
+  bool warned = false;
+
+  if (location_empty (spec_file_prefix_loc))
     {
-      complain_at (*loc, "require bison %s, but have %s",
-                   version, PACKAGE_VERSION);
+      spec_file_prefix_loc = *loc;
+      spec_file_prefix = value;
+    }
+  else
+    {
+      duplicate_directive (directive, spec_file_prefix_loc, *loc);
+      warned = true;
+    }
+
+  if (!warned
+      && STRNEQ (directive, "%file-prefix"))
+    deprecated_directive (dir_loc, directive, "%file-prefix");
+}
+
+
+static void
+handle_name_prefix (location const *loc,
+                    char const *directive, char const *value)
+{
+  bison_directive (loc, directive);
+
+  char buf1[1024];
+  size_t len1 = sizeof (buf1);
+  char *old = asnprintf (buf1, &len1, "%s\"%s\"", directive, value);
+  if (!old)
+    xalloc_die ();
+
+  if (location_empty (spec_name_prefix_loc))
+    {
+      spec_name_prefix = value;
+      spec_name_prefix_loc = *loc;
+
+      char buf2[1024];
+      size_t len2 = sizeof (buf2);
+      char *new = asnprintf (buf2, &len2, "%%define api.prefix {%s}", value);
+      if (!new)
+        xalloc_die ();
+      deprecated_directive (loc, old, new);
+      if (new != buf2)
+        free (new);
+    }
+  else
+    duplicate_directive (old, spec_file_prefix_loc, *loc);
+
+  if (old != buf1)
+    free (old);
+}
+
+
+static void
+handle_pure_parser (location const *loc, char const *directive)
+{
+  bison_directive (loc, directive);
+  deprecated_directive (loc, directive, "%define api.pure");
+  muscle_percent_define_insert ("api.pure", *loc, muscle_keyword, "",
+                                MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+}
+
+
+/* Convert VERSION into an int (MAJOR * 100 + MINOR).  Return -1 on
+   errors.
+
+   Changes of behavior are only on minor version changes, so "3.0.5"
+   is the same as "3.0": 300. */
+static int
+str_to_version (char const *version)
+{
+  IGNORE_TYPE_LIMITS_BEGIN
+  int res = 0;
+  errno = 0;
+  char *cp = NULL;
+  long major = strtol (version, &cp, 10);
+  if (errno || cp == version || *cp != '.' || major < 0
+      || INT_MULTIPLY_WRAPV (major, 100, &res))
+    return -1;
+
+  ++cp;
+  char *cp1 = NULL;
+  long minor = strtol (cp, &cp1, 10);
+  if (errno || cp1 == cp || (*cp1 != '\0' && *cp1 != '.')
+      || ! (0 <= minor && minor < 100)
+      || INT_ADD_WRAPV (minor, res, &res))
+    return -1;
+
+  IGNORE_TYPE_LIMITS_END
+  return res;
+}
+
+
+static void
+handle_require (location const *loc, char const *version)
+{
+  required_version = str_to_version (version);
+  if (required_version == -1)
+    {
+      complain (loc, complaint, _("invalid version requirement: %s"),
+                version);
+      required_version = 0;
+      return;
+    }
+
+  /* Pretend to be at least 3.5, to check features published in that
+     version while developping it.  */
+  const char* api_version = "3.5";
+  const char* package_version =
+    0 < strverscmp (api_version, PACKAGE_VERSION)
+    ? api_version : PACKAGE_VERSION;
+  if (0 < strverscmp (version, package_version))
+    {
+      complain (loc, complaint, _("require bison %s, but have %s"),
+                version, package_version);
       exit (EX_MISMATCH);
     }
 }
 
 static void
-gram_error (location const *loc, char const *msg)
+handle_skeleton (location const *loc, char const *skel)
 {
-  complain_at (*loc, "%s", msg);
+  char const *skeleton_user = skel;
+  if (strchr (skeleton_user, '/'))
+    {
+      size_t dir_length = strlen (grammar_file);
+      while (dir_length && grammar_file[dir_length - 1] != '/')
+        --dir_length;
+      while (dir_length && grammar_file[dir_length - 1] == '/')
+        --dir_length;
+      char *skeleton_build =
+        xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
+      if (dir_length > 0)
+        {
+          memcpy (skeleton_build, grammar_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, *loc);
 }
 
-char const *
-token_name (int type)
+
+static void
+handle_yacc (location const *loc)
 {
-  return yytname[YYTRANSLATE (type)];
+  const char *directive = "%yacc";
+  bison_directive (loc, directive);
+  if (location_empty (yacc_loc))
+    yacc_loc = *loc;
+  else
+    duplicate_directive (directive, yacc_loc, *loc);
+}
+
+
+static void
+gram_error (location const *loc, char const *msg)
+{
+  complain (loc, complaint, "%s", msg);
 }
 
 static char const *
@@ -791,3 +1091,30 @@
       return quotearg_style (escape_quoting_style, buf);
     }
 }
+
+static
+void
+current_lhs (symbol *sym, location loc, named_ref *ref)
+{
+  current_lhs_symbol = sym;
+  current_lhs_loc = loc;
+  if (sym)
+    symbol_location_as_lhs_set (sym, 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;
+}
+
+static void tron (FILE *yyo)
+{
+  begin_use_class ("value", yyo);
+}
+
+static void troff (FILE *yyo)
+{
+  end_use_class ("value", yyo);
+}
diff --git a/src/print_graph.c b/src/print-graph.c
similarity index 65%
rename from src/print_graph.c
rename to src/print-graph.c
index f4742b1..5295268 100644
--- a/src/print_graph.c
+++ b/src/print-graph.c
@@ -1,6 +1,7 @@
 /* Output a graph of the generated parser, for Bison.
 
-   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -18,9 +19,10 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+#include "print-graph.h"
+
 #include "system.h"
 
-#include "LR0.h"
 #include "closure.h"
 #include "complain.h"
 #include "conflicts.h"
@@ -29,7 +31,7 @@
 #include "gram.h"
 #include "graphviz.h"
 #include "lalr.h"
-#include "print_graph.h"
+#include "lr0.h"
 #include "reader.h"
 #include "state.h"
 #include "symtab.h"
@@ -43,31 +45,13 @@
    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)
 {
-  item_number *sitems = s->items;
-  rule *previous_rule = NULL;
-  size_t i;
+  item_number const *sitems = s->items;
+  sym_content *previous_lhs = NULL;
   size_t snritems = s->nitems;
 
-  /* Output all the items of a state, not only its kernel.  */
+  /* Output all the items of a state, not just its kernel.  */
   if (report_flag & report_itemsets)
     {
       closure (sitems, snritems);
@@ -77,30 +61,30 @@
 
   obstack_printf (oout, _("State %d"), s->number);
   obstack_sgrow (oout, "\\n\\l");
-  for (i = 0; i < snritems; i++)
+  for (size_t i = 0; i < snritems; ++i)
     {
-      item_number *sp;
-      item_number *sp1;
-      rule_number r;
+      item_number const *sp1 = ritem + sitems[i];
+      rule const *r = item_rule (sp1);
 
-      sp1 = sp = ritem + sitems[i];
+      obstack_printf (oout, "%3d ", r->number);
+      if (previous_lhs && UNIQSTR_EQ (previous_lhs->symbol->tag,
+                                      r->lhs->symbol->tag))
+        obstack_printf (oout, "%*s| ",
+                        (int) strlen (previous_lhs->symbol->tag), "");
+      else
+        obstack_printf (oout, "%s: ", escape (r->lhs->symbol->tag));
+      previous_lhs = r->lhs;
 
-      while (*sp >= 0)
-        sp++;
+      for (item_number const *sp = r->rhs; sp < sp1; sp++)
+        obstack_printf (oout, "%s ", escape (symbols[*sp]->tag));
 
-      r = item_number_as_rule_number (*sp);
+      obstack_1grow (oout, '.');
 
-      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_printf (oout, " %s", escape (symbols[*sp]->tag));
-
-      obstack_sgrow (oout, " .");
-
-      for (/* Nothing */; *sp >= 0; ++sp)
-        obstack_printf (oout, " %s", escape (symbols[*sp]->tag));
+      if (0 <= *r->rhs)
+        for (item_number const *sp = sp1; 0 <= *sp; ++sp)
+          obstack_printf (oout, " %s", escape (symbols[*sp]->tag));
+      else
+        obstack_printf (oout, " %%empty");
 
       /* Experimental feature: display the lookahead tokens. */
       if (report_flag & report_lookahead_tokens
@@ -108,7 +92,7 @@
         {
           /* Find the reduction we are handling.  */
           reductions *reds = s->reductions;
-          int redno = state_reduction_find (s, &rules[r]);
+          int redno = state_reduction_find (s, r);
 
           /* Print them if there are.  */
           if (reds->lookahead_tokens && redno != -1)
@@ -140,29 +124,28 @@
 print_actions (state const *s, FILE *fgraph)
 {
   transitions const *trans = s->transitions;
-  int i;
 
   if (!trans->num && !s->reductions)
     return;
 
-  for (i = 0; i < trans->num; i++)
+  for (int i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i))
       {
-	state *s1 = trans->states[i];
-	symbol_number sym = s1->accessing_symbol;
+        const state *s1 = trans->states[i];
+        const symbol_number sym = s1->accessing_symbol;
 
-	/* 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");
+        /* 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 (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);
+        if (TRANSITION_IS_ERROR (trans, i)
+            && STRNEQ (symbols[sym]->tag, "error"))
+          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);
@@ -182,8 +165,7 @@
   /* A node's label contains its items.  */
   obstack_init (&node_obstack);
   print_core (&node_obstack, s);
-  obstack_1grow (&node_obstack, '\0');
-  output_node (s->number, obstack_finish (&node_obstack), fgraph);
+  output_node (s->number, obstack_finish0 (&node_obstack), fgraph);
   obstack_free (&node_obstack, 0);
 
   /* Output the edges.  */
@@ -194,15 +176,12 @@
 void
 print_graph (void)
 {
-  state_number i;
   FILE *fgraph = xfopen (spec_graph_file, "w");
   start_graph (fgraph);
 
   /* Output nodes and edges. */
-  new_closure (nritems);
-  for (i = 0; i < nstates; i++)
+  for (int i = 0; i < nstates; i++)
     print_state (states[i], fgraph);
-  free_closure ();
 
   finish_graph (fgraph);
   xfclose (fgraph);
diff --git a/src/print_graph.h b/src/print-graph.h
similarity index 90%
rename from src/print_graph.h
rename to src/print-graph.h
index 02aa8b3..a3e2b67 100644
--- a/src/print_graph.h
+++ b/src/print-graph.h
@@ -1,6 +1,7 @@
 /* Output a graph of the generated parser, for Bison.
 
-   Copyright (C) 2000, 2006, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2006, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/print-xml.c b/src/print-xml.c
index e37a741..c4dac10 100644
--- a/src/print-xml.c
+++ b/src/print-xml.c
@@ -1,6 +1,7 @@
 /* Print an xml on generated parser, for Bison,
 
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -18,21 +19,21 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+#include "print-xml.h"
+
 #include "system.h"
 
+#include <bitset.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 "lr0.h"
 #include "print.h"
-#include "print-xml.h"
 #include "reader.h"
 #include "reduce.h"
 #include "state.h"
@@ -45,7 +46,8 @@
   char *ptr;
   size_t size;
 };
-static struct escape_buf escape_bufs[3];
+enum { num_escape_bufs = 3 };
+static struct escape_buf escape_bufs[num_escape_bufs];
 
 
 /*--------------------------------.
@@ -55,7 +57,6 @@
 static void
 print_core (FILE *out, int level, state *s)
 {
-  size_t i;
   item_number *sitems = s->items;
   size_t snritems = s->nitems;
 
@@ -64,53 +65,44 @@
   sitems = itemset;
   snritems = nitemset;
 
-  if (!snritems) {
-    xml_puts (out, level, "<itemset/>");
-    return;
-  }
+  if (!snritems)
+    {
+      xml_puts (out, level, "<itemset/>");
+      return;
+    }
 
   xml_puts (out, level, "<itemset>");
 
-  for (i = 0; i < snritems; i++)
+  for (size_t 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;
+      item_number *sp1 = ritem + sitems[i];
+      rule const *r = item_rule (sp1);
+      item_number *sp = 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;
-	    }
-	}
+        {
+          reductions *reds = s->reductions;
+          int red = state_reduction_find (s, 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\">",
+                          r->number, sp1 - sp);
+              state_rule_lookahead_tokens_print_xml (s, 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_printf (out, level + 1,
+                    "<item rule-number=\"%d\" point=\"%d\"/>",
+                    r->number,
+                    sp1 - sp);
     }
   xml_puts (out, level, "</itemset>");
 }
@@ -131,42 +123,43 @@
   for (i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i))
       {
-	n++;
+        n++;
       }
 
   /* Nothing to report. */
-  if (!n) {
-    xml_puts (out, level, "<transitions/>");
-    return;
-  }
+  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))
+        && TRANSITION_IS_SHIFT (trans, i))
       {
-	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
-	char const *tag = sym->tag;
-	state *s1 = trans->states[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);
+        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))
+        && !TRANSITION_IS_SHIFT (trans, i))
       {
-	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
-	char const *tag = sym->tag;
-	state *s1 = trans->states[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_printf (out, level + 1,
+                    "<transition type=\"goto\" symbol=\"%s\" state=\"%d\"/>",
+                    xml_escape (tag), s1->number);
       }
 
   xml_puts (out, level, "</transitions>");
@@ -189,46 +182,47 @@
       count = true;
 
   /* Nothing to report. */
-  if (!count) {
-    xml_puts (out, level, "<errors/>");
-    return;
-  }
+  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));
+        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').  |
+| 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)
+                 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");
+                "<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");
+                "<reduction symbol=\"%s\" rule=\"accept\" enabled=\"%s\"/>",
+                xml_escape (lookahead_token),
+                enabled ? "true" : "false");
 }
 
 
@@ -259,7 +253,7 @@
     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);
+      bitset_set (no_reduce_set, s->errs->symbols[i]->content->number);
 
   if (default_reduction)
     report = true;
@@ -267,29 +261,30 @@
   if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
-	bool count = bitset_test (no_reduce_set, 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;
-		}
-	    }
+        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;
-  }
+  if (!report)
+    {
+      xml_puts (out, level, "<reductions/>");
+      return;
+    }
 
   xml_puts (out, level, "<reductions>");
 
@@ -297,36 +292,36 @@
   if (reds->lookahead_tokens)
     for (i = 0; i < ntokens; i++)
       {
-	bool defaulted = false;
-	bool count = bitset_test (no_reduce_set, 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);
-		}
-	    }
+        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);
+                     "$default", default_reduction, true);
 
   xml_puts (out, level, "</reductions>");
 }
@@ -378,20 +373,18 @@
 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)
+  for (symbol_number i = 0; i < max_user_token_number + 1; i++)
+    if (token_translations[i] != undeftoken->content->number)
       {
-	char const *tag = symbols[token_translations[i]]->tag;
-        int precedence = symbols[token_translations[i]]->prec;
-        assoc associativity = symbols[token_translations[i]]->assoc;
+        char const *tag = symbols[token_translations[i]]->tag;
+        int precedence = symbols[token_translations[i]]->content->prec;
+        assoc associativity = symbols[token_translations[i]]->content->assoc;
         xml_indent (out, level + 2);
         fprintf (out,
                  "<terminal symbol-number=\"%d\" token-number=\"%d\""
@@ -409,14 +402,14 @@
 
   /* Nonterminals */
   xml_puts (out, level + 1, "<nonterminals>");
-  for (i = ntokens; i < nsyms + nuseless_nonterminals; i++)
+  for (symbol_number i = ntokens; i < nsyms + nuseless_nonterminals; i++)
     {
       char const *tag = symbols[i]->tag;
       xml_printf (out, level + 2,
-		  "<nonterminal symbol-number=\"%d\" name=\"%s\""
+                  "<nonterminal symbol-number=\"%d\" name=\"%s\""
                   " usefulness=\"%s\"/>",
-		  i, xml_escape (tag),
-                  reduce_nonterminal_useless_in_grammar (i)
+                  i, xml_escape (tag),
+                  reduce_nonterminal_useless_in_grammar (symbols[i]->content)
                     ? "useless-in-grammar" : "useful");
     }
   xml_puts (out, level + 1, "</nonterminals>");
@@ -426,8 +419,7 @@
 void
 xml_indent (FILE *out, int level)
 {
-  int i;
-  for (i = 0; i < level; i++)
+  for (int i = 0; i < level; i++)
     fputs ("  ", out);
 }
 
@@ -458,14 +450,13 @@
 {
   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;
+  char *p = buf->ptr;
 
   for (; *str; str++)
     switch (*str)
@@ -496,12 +487,11 @@
 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);
+
+  int level = 0;
   xml_printf (out, level,
               "<bison-xml-report version=\"%s\" bug-report=\"%s\""
               " url=\"%s\">",
@@ -511,28 +501,26 @@
 
   fputc ('\n', out);
   xml_printf (out, level + 1, "<filename>%s</filename>",
-	      xml_escape (grammar_file));
+              xml_escape (grammar_file));
 
   /* print grammar */
   print_grammar (out, level + 1);
 
-  new_closure (nritems);
-  no_reduce_set =  bitset_create (ntokens, BITSET_FIXED);
+  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++)
+  for (state_number 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);
+  for (int i = 0; i < num_escape_bufs; ++i)
+    free (escape_bufs[i].ptr);
 
   xfclose (out);
 }
diff --git a/src/print-xml.h b/src/print-xml.h
index c0ea2e7..162963f 100644
--- a/src/print-xml.h
+++ b/src/print-xml.h
@@ -1,6 +1,7 @@
 /* Output an xml of the generated parser, for Bison.
 
-   Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,6 +21,10 @@
 #ifndef PRINT_XML_H_
 # define PRINT_XML_H_
 
+# include <config.h>
+
+# include <stdio.h>
+
 void xml_indent (FILE *out, int level);
 void xml_puts (FILE *, int, char const *);
 void xml_printf (FILE *, int, char const *, ...);
diff --git a/src/print.c b/src/print.c
index 5fdb28b..97dd18f 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1,7 +1,7 @@
 /* Print information on generated parser, for bison,
 
-   Copyright (C) 1984, 1986, 1989, 2000-2005, 2007, 2009-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 2000-2005, 2007, 2009-2015, 2018-2019
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,13 +23,13 @@
 
 #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 "lr0.h"
 #include "muscle-tab.h"
 #include "print.h"
 #include "reader.h"
@@ -40,14 +40,6 @@
 
 static bitset no_reduce_set;
 
-#if 0
-static void
-print_token (int extnum, int token)
-{
-  fprintf (out, _(" type %d is %s\n"), extnum, tags[token]);
-}
-#endif
-
 
 
 /*---------------------------------------.
@@ -69,11 +61,8 @@
 static void
 print_core (FILE *out, state *s)
 {
-  size_t i;
   item_number *sitems = s->items;
   size_t snritems = s->nitems;
-  symbol *previous_lhs = NULL;
-
   /* Output all the items of a state, not only its kernel.  */
   if (report_flag & report_itemsets)
     {
@@ -87,33 +76,18 @@
 
   fputc ('\n', out);
 
-  for (i = 0; i < snritems; i++)
+  rule const *previous_rule = NULL;
+  for (size_t i = 0; i < snritems; i++)
     {
-      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);
-
-      rule_lhs_print (&rules[r], previous_lhs, out);
-      previous_lhs = rules[r].lhs;
-
-      for (sp = rules[r].rhs; sp < sp1; sp++)
-	fprintf (out, " %s", symbols[*sp]->tag);
-      fputs (" .", out);
-      for (/* Nothing */; *sp >= 0; ++sp)
-	fprintf (out, " %s", symbols[*sp]->tag);
+      item_number *sp1 = ritem + sitems[i];
+      rule const *r = item_rule (sp1);
+      item_print (sp1, previous_rule, out);
+      previous_rule = r;
 
       /* 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);
-
+        state_rule_lookahead_tokens_print (s, r, out);
       fputc ('\n', out);
     }
 }
@@ -129,15 +103,14 @@
 {
   transitions *trans = s->transitions;
   size_t width = 0;
-  int i;
 
   /* Compute the width of the lookahead token column.  */
-  for (i = 0; i < trans->num; i++)
+  for (int i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
-	&& TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
+        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
       {
-	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
-	max_length (&width, sym->tag);
+        symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
+        max_length (&width, sym->tag);
       }
 
   /* Nothing to report. */
@@ -148,22 +121,21 @@
   width += 2;
 
   /* Report lookahead tokens and shifts.  */
-  for (i = 0; i < trans->num; i++)
+  for (int i = 0; i < trans->num; i++)
     if (!TRANSITION_IS_DISABLED (trans, i)
-	&& TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
+        && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p)
       {
-	symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
-	const char *tag = sym->tag;
-	state *s1 = trans->states[i];
-	int j;
+        symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)];
+        const char *tag = sym->tag;
+        state *s1 = trans->states[i];
 
-	fprintf (out, "    %s", tag);
-	for (j = width - strlen (tag); j > 0; --j)
-	  fputc (' ', out);
-	if (display_transitions_p)
-	  fprintf (out, _("shift, and go to state %d\n"), s1->number);
-	else
-	  fprintf (out, _("go to state %d\n"), s1->number);
+        fprintf (out, "    %s", tag);
+        for (int j = width - strlen (tag); j > 0; --j)
+          fputc (' ', out);
+        if (display_transitions_p)
+          fprintf (out, _("shift, and go to state %d\n"), s1->number);
+        else
+          fprintf (out, _("go to state %d\n"), s1->number);
       }
 }
 
@@ -177,10 +149,9 @@
 {
   errs *errp = s->errs;
   size_t width = 0;
-  int i;
 
   /* Compute the width of the lookahead token column.  */
-  for (i = 0; i < errp->num; ++i)
+  for (int i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       max_length (&width, errp->symbols[i]->tag);
 
@@ -192,38 +163,37 @@
   width += 2;
 
   /* Report lookahead tokens and errors.  */
-  for (i = 0; i < errp->num; ++i)
+  for (int i = 0; i < errp->num; ++i)
     if (errp->symbols[i])
       {
-	const char *tag = errp->symbols[i]->tag;
-	int j;
-	fprintf (out, "    %s", tag);
-	for (j = width - strlen (tag); j > 0; --j)
-	  fputc (' ', out);
-	fputs (_("error (nonassociative)\n"), out);
+        const char *tag = errp->symbols[i]->tag;
+        fprintf (out, "    %s", tag);
+        for (int j = width - strlen (tag); j > 0; --j)
+          fputc (' ', out);
+        fputs (_("error (nonassociative)\n"), out);
       }
 }
 
 
 /*-------------------------------------------------------------------------.
-| Report a reduction of RULE on LOOKAHEAD_TOKEN (which can be `default').  |
+| 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 *lookahead_token,
-		 rule *r, bool enabled)
+                 const char *lookahead_token,
+                 rule *r, bool enabled)
 {
-  int j;
   fprintf (out, "    %s", lookahead_token);
-  for (j = width - strlen (lookahead_token); j > 0; --j)
+  for (int j = width - strlen (lookahead_token); j > 0; --j)
     fputc (' ', out);
   if (!enabled)
     fputc ('[', out);
   if (r->number)
-    fprintf (out, _("reduce using rule %d (%s)"), r->number, r->lhs->tag);
+    fprintf (out, _("reduce using rule %d (%s)"), r->number,
+             r->lhs->symbol->tag);
   else
     fprintf (out, _("accept"));
   if (!enabled)
@@ -239,49 +209,48 @@
 static void
 print_reductions (FILE *out, state *s)
 {
-  transitions *trans = s->transitions;
   reductions *reds = s->reductions;
-  rule *default_reduction = NULL;
-  size_t width = 0;
-  int i, j;
-  bool default_reduction_only = true;
-
   if (reds->num == 0)
     return;
 
+  rule *default_reduction = NULL;
   if (yydefact[s->number] != 0)
     default_reduction = &rules[yydefact[s->number] - 1];
 
+  transitions *trans = s->transitions;
+
   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)
+  {
+    int i;
+    FOR_EACH_SHIFT (trans, i)
+      bitset_set (no_reduce_set, TRANSITION_SYMBOL (trans, i));
+  }
+  for (int i = 0; i < s->errs->num; ++i)
     if (s->errs->symbols[i])
-      bitset_set (no_reduce_set, s->errs->symbols[i]->number);
+      bitset_set (no_reduce_set, s->errs->symbols[i]->content->number);
 
   /* Compute the width of the lookahead token column.  */
+  size_t width = 0;
   if (default_reduction)
     width = strlen (_("$default"));
 
   if (reds->lookahead_tokens)
-    for (i = 0; i < ntokens; i++)
+    for (int i = 0; i < ntokens; i++)
       {
-	bool count = bitset_test (no_reduce_set, 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)
-		    max_length (&width, symbols[i]->tag);
-		  count = true;
-		}
-	      else
-		{
-		  max_length (&width, symbols[i]->tag);
-		}
-	    }
+        for (int j = 0; j < reds->num; ++j)
+          if (bitset_test (reds->lookahead_tokens[j], i))
+            {
+              if (! count)
+                {
+                  if (reds->rules[j] != default_reduction)
+                    max_length (&width, symbols[i]->tag);
+                  count = true;
+                }
+              else
+                max_length (&width, symbols[i]->tag);
+            }
       }
 
   /* Nothing to report. */
@@ -291,55 +260,58 @@
   fputc ('\n', out);
   width += 2;
 
+  bool default_reduction_only = true;
+
   /* Report lookahead tokens (or $default) and reductions.  */
   if (reds->lookahead_tokens)
-    for (i = 0; i < ntokens; i++)
+    for (int i = 0; i < ntokens; i++)
       {
-	bool defaulted = false;
-	bool count = bitset_test (no_reduce_set, i);
+        bool defaulted = false;
+        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->lookahead_tokens[j], i))
-	    {
-	      if (! count)
-		{
-		  if (reds->rules[j] != default_reduction)
+        for (int j = 0; j < reds->num; ++j)
+          if (bitset_test (reds->lookahead_tokens[j], i))
+            {
+              if (! count)
+                {
+                  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
-		{
+                  else
+                    defaulted = true;
+                  count = true;
+                }
+              else
+                {
                   default_reduction_only = false;
-		  if (defaulted)
-		    print_reduction (out, width,
-				     symbols[i]->tag,
-				     default_reduction, true);
-		  defaulted = false;
-		  print_reduction (out, width,
-				   symbols[i]->tag,
-				   reds->rules[j], false);
-		}
-	    }
+                  if (defaulted)
+                    print_reduction (out, width,
+                                     symbols[i]->tag,
+                                     default_reduction, true);
+                  defaulted = false;
+                  print_reduction (out, width,
+                                   symbols[i]->tag,
+                                   reds->rules[j], false);
+                }
+            }
       }
 
   if (default_reduction)
     {
       char *default_reductions =
-        muscle_percent_define_get ("lr.default-reductions");
+        muscle_percent_define_get ("lr.default-reduction");
       print_reduction (out, width, _("$default"), default_reduction, true);
-      aver (0 == strcmp (default_reductions, "most")
-            || (0 == strcmp (default_reductions, "consistent")
+      aver (STREQ (default_reductions, "most")
+            || (STREQ (default_reductions, "consistent")
                 && default_reduction_only)
             || (reds->num == 1 && reds->rules[0]->number == 0));
+      (void) default_reduction_only;
       free (default_reductions);
     }
 }
@@ -385,145 +357,106 @@
 | Print information on the whole grammar.  |
 `-----------------------------------------*/
 
-#define END_TEST(End)				\
-do {						\
-  if (column + strlen(buffer) > (End))		\
-    {						\
-      fprintf (out, "%s\n   ", buffer);		\
-      column = 3;				\
-      buffer[0] = 0;				\
-    }						\
-} while (0)
+static void
+print_terminal_symbols (FILE *out)
+{
+  /* TERMINAL (type #) : rule #s terminal is on RHS */
+  fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));
+  for (symbol_number i = 0; i < max_user_token_number + 1; i++)
+    if (token_translations[i] != undeftoken->content->number)
+      {
+        const char *tag = symbols[token_translations[i]]->tag;
+        fprintf (out, "%4s%s", "", tag);
+        if (symbols[token_translations[i]]->content->type_name)
+          fprintf (out, " <%s>",
+                   symbols[token_translations[i]]->content->type_name);
+        fprintf (out, " (%d)", i);
+
+        for (rule_number r = 0; r < nrules; r++)
+          for (item_number *rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
+            if (item_number_as_symbol_number (*rhsp) == token_translations[i])
+              {
+                fprintf (out, " %d", r);
+                break;
+              }
+        fputc ('\n', out);
+      }
+  fputs ("\n\n", out);
+}
 
 
 static void
-print_grammar (FILE *out)
+print_nonterminal_symbols (FILE *out)
 {
-  symbol_number i;
-  char buffer[90];
-  int column = 0;
-
-  grammar_rules_print (out);
-
-  /* TERMINAL (type #) : rule #s terminal is on RHS */
-  fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));
-  for (i = 0; i < max_user_token_number + 1; i++)
-    if (token_translations[i] != undeftoken->number)
-      {
-	const char *tag = symbols[token_translations[i]]->tag;
-	rule_number r;
-	item_number *rhsp;
-
-	buffer[0] = 0;
-	column = strlen (tag);
-	fputs (tag, out);
-	END_TEST (65);
-	sprintf (buffer, " (%d)", i);
-
-	for (r = 0; r < nrules; r++)
-	  for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
-	    if (item_number_as_symbol_number (*rhsp) == token_translations[i])
-	      {
-		END_TEST (65);
-		sprintf (buffer + strlen (buffer), " %d", r);
-		break;
-	      }
-	fprintf (out, "%s\n", buffer);
-      }
-  fputs ("\n\n", out);
-
-
   fprintf (out, "%s\n\n", _("Nonterminals, with rules where they appear"));
-  for (i = ntokens; i < nsyms; i++)
+  for (symbol_number i = ntokens; i < nsyms; i++)
     {
-      int left_count = 0, right_count = 0;
-      rule_number r;
       const char *tag = symbols[i]->tag;
+      bool on_left = false;
+      bool on_right = false;
 
-      for (r = 0; r < nrules; r++)
-	{
-	  item_number *rhsp;
-	  if (rules[r].lhs->number == i)
-	    left_count++;
-	  for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
-	    if (item_number_as_symbol_number (*rhsp) == i)
-	      {
-		right_count++;
-		break;
-	      }
-	}
+      for (rule_number r = 0; r < nrules; r++)
+        {
+          on_left |= rules[r].lhs->number == i;
+          for (item_number *rhsp = rules[r].rhs; !on_right && 0 <= *rhsp; ++rhsp)
+            on_right |= item_number_as_symbol_number (*rhsp) == i;
+          if (on_left && on_right)
+            break;
+        }
 
-      buffer[0] = 0;
-      fputs (tag, out);
-      column = strlen (tag);
-      sprintf (buffer, " (%d)", i);
-      END_TEST (0);
+      int column = 4 + strlen (tag);
+      fprintf (out, "%4s%s", "", tag);
+      if (symbols[i]->content->type_name)
+        column += fprintf (out, " <%s>",
+                           symbols[i]->content->type_name);
+      fprintf (out, " (%d)\n", i);
 
-      if (left_count > 0)
-	{
-	  END_TEST (65);
-	  sprintf (buffer + strlen (buffer), _(" on left:"));
+      if (on_left)
+        {
+          fprintf (out, "%8s%s", "", _("on left:"));
+          for (rule_number r = 0; r < nrules; r++)
+            if (rules[r].lhs->number == i)
+              fprintf (out, " %d", r);
+          fputc ('\n', out);
+        }
 
-	  for (r = 0; r < nrules; r++)
-	    {
-	      if (rules[r].lhs->number == i)
-		{
-		  END_TEST (65);
-		  sprintf (buffer + strlen (buffer), " %d", r);
-		}
-	    }
-	}
-
-      if (right_count > 0)
-	{
-	  if (left_count > 0)
-	    sprintf (buffer + strlen (buffer), ",");
-	  END_TEST (65);
-	  sprintf (buffer + strlen (buffer), _(" on right:"));
-	  for (r = 0; r < nrules; r++)
-	    {
-	      item_number *rhsp;
-	      for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
-		if (item_number_as_symbol_number (*rhsp) == i)
-		  {
-		    END_TEST (65);
-		    sprintf (buffer + strlen (buffer), " %d", r);
-		    break;
-		  }
-	    }
-	}
-      fprintf (out, "%s\n", buffer);
+      if (on_right)
+        {
+          fprintf (out, "%8s%s", "", _("on right:"));
+          for (rule_number r = 0; r < nrules; r++)
+            for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
+              if (item_number_as_symbol_number (*rhsp) == i)
+                {
+                  fprintf (out, " %d", r);
+                  break;
+                }
+          fputc ('\n', out);
+        }
     }
 }
 
 void
 print_results (void)
 {
-  state_number i;
-
   /* We used to use just .out if SPEC_NAME_PREFIX (-p) was used, but
      that conflicts with Posix.  */
   FILE *out = xfopen (spec_verbose_file, "w");
 
   reduce_output (out);
   grammar_rules_partial_print (out,
-			       _("Rules useless in parser due to conflicts"),
+                               _("Rules useless in parser due to conflicts"),
                                  rule_useless_in_parser_p);
   conflicts_output (out);
 
-  print_grammar (out);
+  grammar_rules_print (out);
+  print_terminal_symbols (out);
+  print_nonterminal_symbols (out);
 
-  /* If the whole state item sets, not only the kernels, are wanted,
-     `closure' will be run, which needs memory allocation/deallocation.   */
-  if (report_flag & report_itemsets)
-    new_closure (nritems);
   /* Storage for print_reductions.  */
-  no_reduce_set =  bitset_create (ntokens, BITSET_FIXED);
-  for (i = 0; i < nstates; i++)
+  no_reduce_set = bitset_create (ntokens, BITSET_FIXED);
+  for (state_number i = 0; i < nstates; i++)
     print_state (out, states[i]);
   bitset_free (no_reduce_set);
-  if (report_flag & report_itemsets)
-    free_closure ();
 
   xfclose (out);
 }
diff --git a/src/print.h b/src/print.h
index f528aaf..8352006 100644
--- a/src/print.h
+++ b/src/print.h
@@ -1,6 +1,7 @@
 /* Print information on generated parser, for bison,
 
-   Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2009-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/reader.c b/src/reader.c
index 735e700..fc6a27e 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -1,7 +1,7 @@
 /* Input parser for Bison
 
    Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000-2003, 2005-2007,
-   2009-2012 Free Software Foundation, Inc.
+   2009-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -26,6 +26,7 @@
 #include "complain.h"
 #include "conflicts.h"
 #include "files.h"
+#include "fixits.h"
 #include "getargs.h"
 #include "gram.h"
 #include "muscle-tab.h"
@@ -45,9 +46,6 @@
 /* Was %union seen?  */
 bool union_seen = false;
 
-/* Was a tag seen?  */
-bool tag_seen = false;
-
 /* Should rules have a default precedence?  */
 bool default_prec = true;
 
@@ -59,12 +57,12 @@
 grammar_start_symbol_set (symbol *sym, location loc)
 {
   if (start_flag)
-    complain_at (loc, _("multiple %s declarations"), "%start");
+    complain (&loc, complaint, _("multiple %s declarations"), "%start");
   else
     {
       start_flag = true;
       startsymbol = sym;
-      startsymbol_location = loc;
+      startsymbol_loc = loc;
     }
 }
 
@@ -78,13 +76,13 @@
 static int
 get_merge_function (uniqstr name)
 {
+  if (! glr_parser)
+    return 0;
+
   merger_list *syms;
   merger_list head;
   int n;
 
-  if (! glr_parser)
-    return 0;
-
   head.next = merge_functions;
   for (syms = &head, n = 1; syms->next; syms = syms->next, n += 1)
     if (UNIQSTR_EQ (name, syms->next->name))
@@ -94,7 +92,7 @@
       syms->next = xmalloc (sizeof syms->next[0]);
       syms->next->name = uniqstr_new (name);
       /* After all symbol type declarations have been parsed, packgram invokes
-	 record_merge_function_type to set the type.  */
+         record_merge_function_type to set the type.  */
       syms->next->type = NULL;
       syms->next->next = NULL;
       merge_functions = head.next;
@@ -111,16 +109,14 @@
 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;
+  merger_list *merge_function;
+  int merger_find = 1;
   for (merge_function = merge_functions;
        merge_function != NULL && merger_find != merger;
        merge_function = merge_function->next)
@@ -128,22 +124,23 @@
   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);
+      int indent = 0;
+      complain_indent (&declaration_loc, complaint, &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"));
-   }
+      complain_indent (&merge_function->type_declaration_loc, complaint,
+                       &indent,
+                       _("previous declaration"));
+    }
   merge_function->type = uniqstr_new (type);
-  merge_function->type_declaration_location = declaration_loc;
+  merge_function->type_declaration_loc = declaration_loc;
 }
 
 /*--------------------------------------.
-| Free all merge-function definitions.	|
+| Free all merge-function definitions.  |
 `--------------------------------------*/
 
 void
@@ -201,9 +198,9 @@
 
   if (name->id == sym->tag)
     {
-      warn_at (name->loc,
-	       _("duplicated symbol name for %s ignored"),
-	       quote (sym->tag));
+      complain (&name->loc, Wother,
+                _("duplicated symbol name for %s ignored"),
+                quote (sym->tag));
       named_ref_free (name);
     }
   else
@@ -224,50 +221,43 @@
 
 void
 grammar_current_rule_begin (symbol *lhs, location loc,
-			    named_ref *lhs_name)
+                            named_ref *lhs_name)
 {
-  symbol_list* p;
-
   /* Start a new rule and record its lhs.  */
   ++nrules;
   previous_rule_end = grammar_end;
 
-  p = grammar_symbol_append (lhs, loc);
+  current_rule = grammar_symbol_append (lhs, loc);
   if (lhs_name)
-    assign_named_ref (p, named_ref_copy (lhs_name));
-
-  current_rule = grammar_end;
+    assign_named_ref (current_rule, named_ref_copy (lhs_name));
 
   /* Mark the rule's lhs as a nonterminal if not already so.  */
-  if (lhs->class == unknown_sym)
-    {
-      lhs->class = nterm_sym;
-      lhs->number = nvars;
-      ++nvars;
-    }
-  else if (lhs->class == token_sym)
-    complain_at (loc, _("rule given for %s, which is a token"), lhs->tag);
+  if (lhs->content->class == unknown_sym || lhs->content->class == pct_type_sym)
+    symbol_class_set (lhs, nterm_sym, empty_loc, false);
+  else if (lhs->content->class == token_sym)
+    complain (&loc, complaint, _("rule given for %s, which is a token"),
+              lhs->tag);
 }
 
 
 /*----------------------------------------------------------------------.
 | 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 |
+|   2. The symbol is a midrule symbol (i.e., the generated LHS          |
+|      replacing a midrule action) that was assigned to or used, as in  |
 |      "exp: { $$ = 1; } { $$ = $1; }".                                 |
 `----------------------------------------------------------------------*/
 
 static bool
 symbol_should_be_used (symbol_list const *s, bool *midrule_warning)
 {
-  if (symbol_destructor_get (s->content.sym)->code)
+  if (symbol_code_props_get (s->content.sym, destructor)->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))
+          && (symbol_list_n_get (s->midrule_parent_rule,
+                                 s->midrule_parent_rhs_index)
+              ->action_props.is_value_used)))
     {
       *midrule_warning = true;
       return true;
@@ -275,13 +265,14 @@
   return false;
 }
 
-/*----------------------------------------------------------------.
-| Check that the rule R is properly defined.  For instance, there |
-| should be no type clash on the default action.                  |
-`----------------------------------------------------------------*/
+/*-----------------------------------------------------------------.
+| Check that the rule R is properly defined.  For instance, there  |
+| should be no type clash on the default action.  Possibly install |
+| the default action.                                              |
+`-----------------------------------------------------------------*/
 
 static void
-grammar_rule_check (const symbol_list *r)
+grammar_rule_check_and_complete (symbol_list *r)
 {
   /* Type check.
 
@@ -290,56 +281,100 @@
 
      Don't worry about the default action if $$ is untyped, since $$'s
      value can't be used.  */
-  if (!r->action_props.code && r->content.sym->type_name)
+  if (!r->action_props.code && r->content.sym->content->type_name)
     {
       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->content.sym->type_name;
-	  const char *rhs_type =
-	    first_rhs->type_name ? first_rhs->type_name : "";
-	  if (!UNIQSTR_EQ (lhs_type, rhs_type))
-	    warn_at (r->location,
-		     _("type clash on default action: <%s> != <%s>"),
-		     lhs_type, rhs_type);
-	}
+        {
+          char const *lhs_type = r->content.sym->content->type_name;
+          char const *rhs_type =
+            first_rhs->content->type_name ? first_rhs->content->type_name : "";
+          if (!UNIQSTR_EQ (lhs_type, rhs_type))
+            complain (&r->rhs_loc, Wother,
+                      _("type clash on default action: <%s> != <%s>"),
+                      lhs_type, rhs_type);
+          else
+            {
+              /* Install the default action only for C++.  */
+              const bool is_cxx =
+                STREQ (language->language, "c++")
+                || (skeleton && (STREQ (skeleton, "glr.cc")
+                                 || STREQ (skeleton, "lalr1.cc")));
+              if (is_cxx)
+                {
+                  code_props_rule_action_init (&r->action_props, "{ $$ = $1; }",
+                                               r->rhs_loc, r,
+                                               /* name */ NULL,
+                                               /* type */ NULL,
+                                               /* is_predicate */ false);
+                  code_props_translate_code (&r->action_props);
+                }
+            }
+        }
       /* Warn if there is no default for $$ but we need one.  */
       else
-	warn_at (r->location,
-		 _("empty rule for typed nonterminal, and no action"));
+        complain (&r->rhs_loc, Wother,
+                  _("empty rule for typed nonterminal, and no action"));
     }
 
   /* Check that symbol values that should be used are in fact used.  */
   {
-    symbol_list const *l = r;
     int n = 0;
-    for (; l && l->content.sym; l = l->next, ++n)
+    for (symbol_list const *l = r; 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.  */
+            /* 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;
+            warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
             if (n)
-              warn_at_ptr (l->location, _("unused value: $%d"), n);
+              complain (&l->sym_loc, warn_flag, _("unused value: $%d"), n);
             else
-              warn_at_ptr (l->location, _("unset value: $$"));
+              complain (&l->rhs_loc, warn_flag, _("unset value: $$"));
           }
       }
   }
 
+  /* Check that %empty => empty rule.  */
+  if (r->percent_empty_loc.start.file
+      && r->next && r->next->content.sym)
+    {
+      complain (&r->percent_empty_loc, complaint,
+                _("%%empty on non-empty rule"));
+      fixits_register (&r->percent_empty_loc, "");
+    }
+
+  /* Check that empty rule => %empty.  */
+  if (!(r->next && r->next->content.sym)
+      && !r->midrule_parent_rule
+      && !r->percent_empty_loc.start.file
+      && warning_is_enabled (Wempty_rule))
+    {
+      complain (&r->rhs_loc, Wempty_rule, _("empty rule without %%empty"));
+      if (feature_flag & feature_caret)
+        location_caret_suggestion (r->rhs_loc, "%empty", stderr);
+      location loc = r->rhs_loc;
+      loc.end = loc.start;
+      fixits_register (&loc, " %empty ");
+    }
+
   /* 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);
+      && r->ruleprec->content->status != declared
+      && !r->ruleprec->content->prec)
+    complain (&r->rhs_loc, Wother,
+              _("token for %%prec is not defined: %s"), r->ruleprec->tag);
+
+  /* Check that the (main) action was not typed.  */
+  if (r->action_props.type)
+    complain (&r->rhs_loc, Wother,
+              _("only midrule actions can be typed: %s"), r->action_props.type);
 }
 
 
@@ -351,15 +386,15 @@
 grammar_current_rule_end (location loc)
 {
   /* 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_symbol_append (NULL, grammar_end->rhs_loc);
+  current_rule->rhs_loc = loc;
 }
 
 
 /*-------------------------------------------------------------------.
-| The previous action turns out the be a mid-rule action.  Attach it |
+| The previous action turns out to be a midrule action.  Attach it   |
 | to the current rule, i.e., create a dummy symbol, attach it this   |
-| mid-rule action, and append this dummy nonterminal to the current  |
+| midrule action, and append this dummy nonterminal to the current   |
 | rule.                                                              |
 `-------------------------------------------------------------------*/
 
@@ -372,9 +407,11 @@
 
   /* Make a DUMMY nonterminal, whose location is that of the midrule
      action.  Create the MIDRULE.  */
-  location dummy_location = current_rule->action_props.location;
-  symbol *dummy = dummy_symbol_get (dummy_location);
-  symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location);
+  location dummy_loc = current_rule->action_props.location;
+  symbol *dummy = dummy_symbol_get (dummy_loc);
+  symbol_type_set(dummy,
+                  current_rule->action_props.type, current_rule->action_props.location);
+  symbol_list *midrule = symbol_list_sym_new (dummy, dummy_loc);
 
   /* Remember named_ref of previous action. */
   named_ref *action_name = current_rule->action_props.named_ref;
@@ -384,27 +421,35 @@
   ++nrules;
   ++nritems;
   /* Attach its location and actions to that of the DUMMY.  */
-  midrule->location = dummy_location;
+  midrule->rhs_loc = dummy_loc;
   code_props_rule_action_init (&midrule->action_props,
                                current_rule->action_props.code,
                                current_rule->action_props.location,
-                               midrule, 0);
+                               midrule,
+                               /* name_ref */ NULL,
+                               /* type */ NULL,
+                               current_rule->action_props.is_predicate);
   code_props_none_init (&current_rule->action_props);
 
+  midrule->expected_sr_conflicts = current_rule->expected_sr_conflicts;
+  midrule->expected_rr_conflicts = current_rule->expected_rr_conflicts;
+  current_rule->expected_sr_conflicts = -1;
+  current_rule->expected_rr_conflicts = -1;
+
   if (previous_rule_end)
     previous_rule_end->next = midrule;
   else
     grammar = midrule;
 
   /* End the dummy's rule.  */
-  midrule->next = symbol_list_sym_new (NULL, dummy_location);
+  midrule->next = symbol_list_sym_new (NULL, dummy_loc);
   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_loc,
                                       action_name);
   grammar_end->midrule = midrule;
   midrule->midrule_parent_rule = current_rule;
@@ -418,18 +463,36 @@
 {
   /* 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.  */
+     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_and_complete 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;
+    duplicate_rule_directive ("%prec",
+                              current_rule->ruleprec->location, loc);
+  else
+    current_rule->ruleprec = precsym;
+}
+
+/* Set %empty for the current rule. */
+
+void
+grammar_current_rule_empty_set (location loc)
+{
+  /* If %empty is used and -Wno-empty-rule is not, then enable
+     -Wempty-rule.  */
+  if (warning_is_unset (Wempty_rule))
+    warning_argmatch ("empty-rule", 0, 0);
+  if (current_rule->percent_empty_loc.start.file)
+    duplicate_rule_directive ("%empty",
+                              current_rule->percent_empty_loc, loc);
+  else
+    current_rule->percent_empty_loc = loc;
 }
 
 /* Attach dynamic precedence DPREC to the current rule. */
@@ -438,12 +501,19 @@
 grammar_current_rule_dprec_set (int dprec, location loc)
 {
   if (! glr_parser)
-    warn_at (loc, _("%s affects only GLR parsers"), "%dprec");
+    complain (&loc, Wother, _("%s affects only GLR parsers"),
+              "%dprec");
   if (dprec <= 0)
-    complain_at (loc, _("%s must be followed by positive number"), "%dprec");
+    complain (&loc, complaint, _("%s must be followed by positive number"),
+              "%dprec");
   else if (current_rule->dprec != 0)
-    complain_at (loc, _("only one %s allowed per rule"), "%dprec");
-  current_rule->dprec = dprec;
+    duplicate_rule_directive ("%dprec",
+                              current_rule->dprec_loc, loc);
+  else
+    {
+      current_rule->dprec = dprec;
+      current_rule->dprec_loc = loc;
+    }
 }
 
 /* Attach a merge function NAME with argument type TYPE to current
@@ -453,131 +523,172 @@
 grammar_current_rule_merge_set (uniqstr name, location loc)
 {
   if (! glr_parser)
-    warn_at (loc, _("%s affects only GLR parsers"), "%merge");
+    complain (&loc, Wother, _("%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->merger_declaration_location = loc;
+    duplicate_rule_directive ("%merge",
+                              current_rule->merger_declaration_loc, loc);
+  else
+    {
+      current_rule->merger = get_merge_function (name);
+      current_rule->merger_declaration_loc = loc;
+    }
 }
 
 /* Attach SYM to the current rule.  If needed, move the previous
-   action as a mid-rule action.  */
+   action as a midrule action.  */
 
 void
 grammar_current_rule_symbol_append (symbol *sym, location loc,
-				    named_ref *name)
+                                    named_ref *name)
 {
-  symbol_list *p;
   if (current_rule->action_props.code)
     grammar_midrule_action ();
-  p = grammar_symbol_append (sym, loc);
+  symbol_list *p = grammar_symbol_append (sym, loc);
   if (name)
-    assign_named_ref(p, name);
+    assign_named_ref (p, name);
+  if (sym->content->status == undeclared || sym->content->status == used)
+    sym->content->status = needed;
 }
 
-/* Attach an ACTION to the current rule.  */
-
 void
 grammar_current_rule_action_append (const char *action, location loc,
-				    named_ref *name)
+                                    named_ref *name, uniqstr type)
 {
   if (current_rule->action_props.code)
     grammar_midrule_action ();
+  if (type)
+    complain (&loc, Wyacc,
+              _("POSIX Yacc does not support typed midrule actions"));
   /* 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);
+                               current_rule,
+                               name, type,
+                               /* is_predicate */ false);
+}
+
+void
+grammar_current_rule_predicate_append (const char *pred, location loc)
+{
+  if (current_rule->action_props.code)
+    grammar_midrule_action ();
+  code_props_rule_action_init (&current_rule->action_props, pred, loc,
+                               current_rule,
+                               NULL, NULL,
+                               /* is_predicate */ true);
+}
+
+/* Set the expected number of shift-reduce (reduce-reduce) conflicts for
+ * the current rule.  If a midrule is encountered later, the count
+ * is transferred to it and reset in the current rule to -1. */
+
+void
+grammar_current_rule_expect_sr (int count, location loc)
+{
+  (void) loc;
+  current_rule->expected_sr_conflicts = count;
+}
+
+void
+grammar_current_rule_expect_rr (int count, location loc)
+{
+  if (! glr_parser)
+    complain (&loc, Wother, _("%s affects only GLR parsers"),
+              "%expect-rr");
+  else
+    current_rule->expected_rr_conflicts = count;
 }
 
 
-/*---------------------------------------------------------------.
-| Convert the rules into the representation using RRHS, RLHS and |
-| RITEM.                                                         |
-`---------------------------------------------------------------*/
+/*---------------------------------------------.
+| Build RULES and RITEM from what was parsed.  |
+`---------------------------------------------*/
 
 static void
 packgram (void)
 {
-  unsigned int itemno = 0;
-  rule_number ruleno = 0;
-  symbol_list *p = grammar;
-
+  int itemno = 0;
   ritem = xnmalloc (nritems + 1, sizeof *ritem);
-
   /* This sentinel is used by build_relations in gram.c.  */
   *ritem++ = 0;
 
+  rule_number ruleno = 0;
   rules = xnmalloc (nrules, sizeof *rules);
 
-  while (p)
+  for (symbol_list *p = grammar; p; p = p->next)
     {
-      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->content.sym;
-      rules[ruleno].rhs = ritem + itemno;
-      rules[ruleno].prec = NULL;
-      rules[ruleno].dprec = p->dprec;
-      rules[ruleno].merger = p->merger;
-      rules[ruleno].precsym = NULL;
-      rules[ruleno].location = p->location;
-      rules[ruleno].useful = true;
-      rules[ruleno].action = p->action_props.code;
-      rules[ruleno].action_location = p->action_props.location;
-
-      /* 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;
+      symbol_list *lhs = p;
+      record_merge_function_type (lhs->merger, lhs->content.sym->content->type_name,
+                                  lhs->merger_declaration_loc);
+      /* 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 (lhs->midrule_parent_rule /* i.e., symbol_is_dummy (lhs->content.sym).  */
+          && (lhs->action_props.is_value_used
+              || (symbol_list_n_get (lhs->midrule_parent_rule,
+                                     lhs->midrule_parent_rhs_index)
+                  ->action_props.is_value_used)))
+        lhs->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);
+         symbols may appear unused, but the parsing algorithm ensures that
+         %destructor's are invoked appropriately.  */
+      if (lhs != grammar)
+        grammar_rule_check_and_complete (lhs);
 
-      for (p = p->next; p && p->content.sym; p = p->next)
-	{
-	  ++rule_length;
+      rules[ruleno].user_number = ruleno;
+      rules[ruleno].number = ruleno;
+      rules[ruleno].lhs = lhs->content.sym->content;
+      rules[ruleno].rhs = ritem + itemno;
+      rules[ruleno].prec = NULL;
+      rules[ruleno].dprec = lhs->dprec;
+      rules[ruleno].merger = lhs->merger;
+      rules[ruleno].precsym = NULL;
+      rules[ruleno].location = lhs->rhs_loc;
+      rules[ruleno].useful = true;
+      rules[ruleno].action = lhs->action_props.code;
+      rules[ruleno].action_loc = lhs->action_props.location;
+      rules[ruleno].is_predicate = lhs->action_props.is_predicate;
+      rules[ruleno].expected_sr_conflicts = lhs->expected_sr_conflicts;
+      rules[ruleno].expected_rr_conflicts = lhs->expected_rr_conflicts;
 
-	  /* 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"));
+      /* Traverse the rhs.  */
+      {
+        size_t rule_length = 0;
+        for (p = lhs->next; p->content.sym; p = p->next)
+          {
+            ++rule_length;
 
-	  /* item_number = symbol_number.
-	     But the former needs to contain more: negative rule numbers. */
-	  ritem[itemno++] =
-            symbol_number_as_item_number (p->content.sym->number);
-	  /* A rule gets by default the precedence and associativity
-	     of its last token.  */
-	  if (p->content.sym->class == token_sym && default_prec)
-	    rules[ruleno].prec = p->content.sym;
-	}
+            /* Don't allow rule_length == INT_MAX, since that might
+               cause confusion with strtol if INT_MAX == LONG_MAX.  */
+            if (rule_length == INT_MAX)
+              complain (&rules[ruleno].location, fatal, _("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->content.sym->content->number);
+            /* A rule gets by default the precedence and associativity
+               of its last token.  */
+            if (p->content.sym->content->class == token_sym && default_prec)
+              rules[ruleno].prec = p->content.sym->content;
+          }
+      }
 
       /* If this rule has a %prec,
          the specified symbol's precedence replaces the default.  */
-      if (ruleprec)
-	{
-	  rules[ruleno].precsym = ruleprec;
-	  rules[ruleno].prec = ruleprec;
-	}
+      if (lhs->ruleprec)
+        {
+          rules[ruleno].precsym = lhs->ruleprec->content;
+          rules[ruleno].prec = lhs->ruleprec->content;
+        }
+
       /* 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;
     }
 
   aver (itemno == nritems);
@@ -585,7 +696,8 @@
   if (trace_flag & trace_sets)
     ritem_print (stderr);
 }
-
+
+
 /*------------------------------------------------------------------.
 | Read in the grammar specification and record it in the format     |
 | described in gram.h.  All actions are copied into ACTION_OBSTACK, |
@@ -594,74 +706,69 @@
 `------------------------------------------------------------------*/
 
 void
-reader (void)
+reader (const char *gram)
 {
-  /* Initialize the symbol table.  */
+  /* Set up symbol_table, semantic_type_table, and the built-in
+     symbols.  */
   symbols_new ();
 
-  /* Construct the accept symbol. */
-  accept = symbol_get ("$accept", empty_location);
-  accept->class = nterm_sym;
-  accept->number = nvars++;
-
-  /* Construct the error token */
-  errtoken = symbol_get ("error", empty_location);
-  errtoken->class = token_sym;
-  errtoken->number = ntokens++;
-
-  /* Construct a token that represents all undefined literal tokens.
-     It is always token number 2.  */
-  undeftoken = symbol_get ("$undefined", empty_location);
-  undeftoken->class = token_sym;
-  undeftoken->number = ntokens++;
-
-  gram_in = xfopen (grammar_file, "r");
-
-  gram__flex_debug = trace_flag & trace_scan;
-  gram_debug = trace_flag & trace_parse;
-  gram_scanner_initialize ();
+  gram_scanner_open (gram);
   gram_parse ();
+  gram_scanner_close ();
+
   prepare_percent_define_front_end_variables ();
 
-  if (! complaint_issued)
+  if (complaint_status  < status_complaint)
     check_and_convert_grammar ();
-
-  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");
+  muscle_percent_define_default ("lr.keep-unreachable-state", "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");
+    char *lr_type = muscle_percent_define_get ("lr.type");
+    if (STRNEQ (lr_type, "canonical-lr"))
+      muscle_percent_define_default ("lr.default-reduction", "most");
     else
-      muscle_percent_define_default ("lr.default-reductions", "accepting");
+      muscle_percent_define_default ("lr.default-reduction", "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
-    };
+    static char const * const values[] =
+      {
+       "lr.type", "lr""(0)", "lalr", "ielr", "canonical-lr", NULL,
+       "lr.default-reduction", "most", "consistent", "accepting", NULL,
+       NULL
+      };
     muscle_percent_define_check_values (values);
   }
 }
 
+/* Find the first LHS which is not a dummy.  */
+
+static symbol *
+find_start_symbol (void)
+{
+  symbol_list *res = grammar;
+  /* Skip all the possible dummy rules of the first rule.  */
+  for (; symbol_is_dummy (res->content.sym); res = res->next)
+    /* Skip the LHS, and then all the RHS of the dummy rule.  */
+    for (res = res->next; res->content.sym; res = res->next)
+      continue;
+  return res->content.sym;
+}
+
 
 /*-------------------------------------------------------------.
 | Check the grammar that has just been read, and convert it to |
-| internal form.					       |
+| internal form.                                               |
 `-------------------------------------------------------------*/
 
 static void
@@ -669,16 +776,16 @@
 {
   /* Grammar has been read.  Do some checking.  */
   if (nrules == 0)
-    fatal (_("no rules in the input grammar"));
+    complain (NULL, fatal, _("no rules in the input grammar"));
 
   /* If the user did not define her ENDTOKEN, do it now. */
   if (!endtoken)
     {
-      endtoken = symbol_get ("$end", empty_location);
-      endtoken->class = token_sym;
-      endtoken->number = 0;
+      endtoken = symbol_get ("$end", empty_loc);
+      endtoken->content->class = token_sym;
+      endtoken->content->number = 0;
       /* Value specified by POSIX.  */
-      endtoken->user_token_number = 0;
+      endtoken->content->user_token_number = 0;
     }
 
   /* Report any undefined symbols and consider them nonterminals.  */
@@ -687,59 +794,46 @@
   /* 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);
+      symbol *start = find_start_symbol ();
+      grammar_start_symbol_set (start, start->location);
     }
 
   /* Insert the initial rule, whose line is that of the first rule
      (not that of the start symbol):
 
-     accept: %start EOF.  */
+     $accept: %start $end.  */
   {
-    symbol_list *p = symbol_list_sym_new (accept, empty_location);
-    p->location = grammar->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);
+    symbol_list *p = symbol_list_sym_new (accept, empty_loc);
+    p->rhs_loc = grammar->rhs_loc;
+    p->next = symbol_list_sym_new (startsymbol, empty_loc);
+    p->next->next = symbol_list_sym_new (endtoken, empty_loc);
+    p->next->next->next = symbol_list_sym_new (NULL, empty_loc);
     p->next->next->next->next = grammar;
     nrules += 1;
     nritems += 3;
     grammar = p;
   }
 
-  aver (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
+  aver (nsyms <= SYMBOL_NUMBER_MAXIMUM);
+  aver (nsyms == ntokens + nvars);
 
-  /* Assign the symbols their symbol numbers.  Write #defines for the
-     token symbols into FDEFINES if requested.  */
+  /* Assign the symbols their symbol numbers.  */
   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
+     Before invoking grammar_rule_check_and_complete (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);
-  }
+  for (symbol_list *sym = grammar; sym; sym = sym->next)
+    code_props_translate_code (&sym->action_props);
 
   /* Convert the grammar into the format described in gram.h.  */
   packgram ();
diff --git a/src/reader.h b/src/reader.h
index e154deb..8538015 100644
--- a/src/reader.h
+++ b/src/reader.h
@@ -1,7 +1,7 @@
 /* Input parser for Bison
 
-   Copyright (C) 2000-2003, 2005-2007, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 2000-2003, 2005-2007, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -32,29 +32,35 @@
   struct merger_list* next;
   uniqstr name;
   uniqstr type;
-  location type_declaration_location;
+  location type_declaration_loc;
 } merger_list;
 
 /* From the parser.  */
 extern int gram_debug;
 int gram_parse (void);
-char const *token_name (int type);
 
 
 /* From reader.c. */
 void grammar_start_symbol_set (symbol *sym, location loc);
 void grammar_current_rule_begin (symbol *lhs, location loc,
-				 named_ref *lhs_named_ref);
+                                 named_ref *lhs_named_ref);
 void grammar_current_rule_end (location loc);
 void grammar_midrule_action (void);
+/* Apply %empty to the current rule.  */
+void grammar_current_rule_empty_set (location loc);
 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_expect_sr (int count, location loc);
+void grammar_current_rule_expect_rr (int count, location loc);
 void grammar_current_rule_symbol_append (symbol *sym, location loc,
-					 named_ref *nref);
+                                         named_ref *nref);
+/* Attach an ACTION to the current rule.  */
 void grammar_current_rule_action_append (const char *action, location loc,
-					 named_ref *nref);
-void reader (void);
+                                         named_ref *nref, uniqstr tag);
+/* Attach a PREDICATE to the current rule.  */
+void grammar_current_rule_predicate_append (const char *predicate, location loc);
+void reader (const char *gram);
 void free_merger_functions (void);
 
 extern merger_list *merge_functions;
@@ -62,9 +68,6 @@
 /* Was %union seen?  */
 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 5338393..7dcfacf 100644
--- a/src/reduce.c
+++ b/src/reduce.c
@@ -1,7 +1,7 @@
 /* Grammar reduction for Bison.
 
-   Copyright (C) 1988-1989, 2000-2003, 2005-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1988-1989, 2000-2003, 2005-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -39,24 +39,29 @@
 #include "reduce.h"
 #include "symtab.h"
 
-/* Set of all nonterminals which are not useless.  */
+/* Set of nonterminals whose language is not empty.  */
 static bitset N;
 
-/* Set of all rules which have no useless nonterminals in their RHS.  */
+/* Set of rules that have no useless nonterminals in their RHS.  */
 static bitset P;
 
-/* Set of all accessible symbols.  */
+/* Set of accessible symbols.  */
 static bitset V;
 
 /* Set of symbols used to define rule precedence (so they are
-   `useless', but no warning should be issued).  */
+   'useless', but no warning should be issued).  */
 static bitset V1;
 
-static rule_number nuseful_productions;
-rule_number nuseless_productions;
-static int nuseful_nonterminals;
-symbol_number nuseless_nonterminals;
+int nuseless_productions;
+int nuseless_nonterminals;
 
+#define bitset_swap(Lhs, Rhs)                   \
+  do {                                          \
+    bitset lhs__ = Lhs;                         \
+    Lhs = Rhs;                                  \
+    Rhs = lhs__;                                \
+  } while (0)
+
 /*-------------------------------------------------------------------.
 | Another way to do this would be with a set for each production and |
 | then do subset tests against N0, but even for the C grammar the    |
@@ -66,33 +71,29 @@
 static bool
 useful_production (rule_number r, bitset N0)
 {
-  item_number *rhsp;
-
   /* A production is useful if all of the nonterminals in its appear
      in the set of useful nonterminals.  */
 
-  for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
+  for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
     if (ISVAR (*rhsp) && !bitset_test (N0, *rhsp - ntokens))
       return false;
   return true;
 }
 
 
-/*---------------------------------------------------------.
-| Remember that rules are 1-origin, symbols are 0-origin.  |
-`---------------------------------------------------------*/
+/*-----------------------------------------------------------------.
+| Compute N, the set of nonterminals whose language is not empty.  |
+|                                                                  |
+| Remember that rules are 1-origin, symbols are 0-origin.          |
+`-----------------------------------------------------------------*/
 
 static void
 useless_nonterminals (void)
 {
-  bitset Np, Ns;
-  rule_number r;
-
   /* N is set as built.  Np is set being built this iteration. P is
      set of all productions which have a RHS all in N.  */
 
-  Np = bitset_create (nvars, BITSET_FIXED);
-
+  bitset Np = bitset_create (nvars, BITSET_FIXED);
 
   /* The set being computed is a set of nonterminals which can derive
      the empty string or strings consisting of all terminals. At each
@@ -113,18 +114,16 @@
   while (1)
     {
       bitset_copy (Np, N);
-      for (r = 0; r < nrules; r++)
-	if (!bitset_test (P, r)
-	    && useful_production (r, N))
-	  {
-	    bitset_set (Np, rules[r].lhs->number - ntokens);
-	    bitset_set (P, r);
-	  }
+      for (rule_number r = 0; r < nrules; ++r)
+        if (!bitset_test (P, r)
+            && useful_production (r, N))
+          {
+            bitset_set (Np, rules[r].lhs->number - ntokens);
+            bitset_set (P, r);
+          }
       if (bitset_equal_p (N, Np))
-	break;
-      Ns = Np;
-      Np = N;
-      N = Ns;
+        break;
+      bitset_swap (N, Np);
     }
   bitset_free (N);
   N = Np;
@@ -134,8 +133,6 @@
 static void
 inaccessable_symbols (void)
 {
-  bitset Vp, Vs, Pp;
-
   /* Find out which productions are reachable and which symbols are
      used.  Starting with an empty set of productions and a set of
      symbols which only has the start symbol in it, iterate over all
@@ -159,69 +156,57 @@
      terminals are printed (if running in verbose mode) so that the
      user can know.  */
 
-  Vp = bitset_create (nsyms, BITSET_FIXED);
-  Pp = bitset_create (nrules, BITSET_FIXED);
+  bitset Vp = bitset_create (nsyms, BITSET_FIXED);
+  bitset Pp = bitset_create (nrules, BITSET_FIXED);
 
   /* If the start symbol isn't useful, then nothing will be useful. */
-  if (bitset_test (N, accept->number - ntokens))
+  if (bitset_test (N, accept->content->number - ntokens))
     {
-      bitset_set (V, accept->number);
+      bitset_set (V, accept->content->number);
 
       while (1)
-	{
-	  rule_number r;
-	  bitset_copy (Vp, V);
-	  for (r = 0; r < nrules; r++)
-	    {
-	      if (!bitset_test (Pp, r)
-		  && bitset_test (P, r)
-		  && bitset_test (V, rules[r].lhs->number))
-		{
-		  item_number *rhsp;
-		  for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
-		    if (ISTOKEN (*rhsp) || bitset_test (N, *rhsp - ntokens))
-		      bitset_set (Vp, *rhsp);
-		  bitset_set (Pp, r);
-		}
-	    }
-	  if (bitset_equal_p (V, Vp))
-	    break;
-	  Vs = Vp;
-	  Vp = V;
-	  V = Vs;
-	}
+        {
+          bitset_copy (Vp, V);
+          for (rule_number r = 0; r < nrules; ++r)
+            if (!bitset_test (Pp, r)
+                && bitset_test (P, r)
+                && bitset_test (V, rules[r].lhs->number))
+              {
+                for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
+                  if (ISTOKEN (*rhsp) || bitset_test (N, *rhsp - ntokens))
+                    bitset_set (Vp, *rhsp);
+                bitset_set (Pp, r);
+              }
+          if (bitset_equal_p (V, Vp))
+            break;
+          bitset_swap (V, Vp);
+        }
     }
 
   bitset_free (V);
   V = Vp;
 
-  /* Tokens 0, 1, and 2 are internal to Bison.  Consider them useful. */
-  bitset_set (V, endtoken->number);		/* end-of-input token */
-  bitset_set (V, errtoken->number);		/* error token */
-  bitset_set (V, undeftoken->number);		/* some undefined token */
+  /* These tokens (numbered 0, 1, and 2) are internal to Bison.
+     Consider them useful. */
+  bitset_set (V, endtoken->content->number);   /* end-of-input token */
+  bitset_set (V, errtoken->content->number);   /* error token */
+  bitset_set (V, undeftoken->content->number); /* some undefined token */
 
   bitset_free (P);
   P = Pp;
 
-  nuseful_productions = bitset_count (P);
+  int nuseful_productions = bitset_count (P);
   nuseless_productions = nrules - nuseful_productions;
 
-  nuseful_nonterminals = 0;
-  {
-    symbol_number i;
-    for (i = ntokens; i < nsyms; i++)
-      if (bitset_test (V, i))
-	nuseful_nonterminals++;
-  }
+  int nuseful_nonterminals = 0;
+  for (symbol_number i = ntokens; i < nsyms; ++i)
+    nuseful_nonterminals += bitset_test (V, i);
   nuseless_nonterminals = nvars - nuseful_nonterminals;
 
   /* A token that was used in %prec should not be warned about.  */
-  {
-    rule_number r;
-    for (r = 0; r < nrules; ++r)
-      if (rules[r].precsym != 0)
-	bitset_set (V1, rules[r].precsym->number);
-  }
+  for (rule_number r = 0; r < nrules; ++r)
+    if (rules[r].precsym != 0)
+      bitset_set (V1, rules[r].precsym->number);
 }
 
 
@@ -235,8 +220,7 @@
 {
   /* Report and flag useless productions.  */
   {
-    rule_number r;
-    for (r = 0; r < nrules; r++)
+    for (rule_number r = 0; r < nrules; ++r)
       rules[r].useful = bitset_test (P, r);
     grammar_rules_useless_report (_("rule useless in grammar"));
   }
@@ -247,34 +231,26 @@
     int useful = 0;
     int useless = nrules - nuseless_productions;
     rule *rules_sorted = xnmalloc (nrules, sizeof *rules_sorted);
-    rule_number r;
-    for (r = 0; r < nrules; ++r)
+    for (rule_number r = 0; r < nrules; ++r)
       rules_sorted[rules[r].useful ? useful++ : useless++] = rules[r];
     free (rules);
     rules = rules_sorted;
 
     /* Renumber the rules markers in RITEMS.  */
-    for (r = 0; r < nrules; ++r)
+    for (rule_number r = 0; r < nrules; ++r)
       {
-	item_number *rhsp = rules[r].rhs;
-	for (/* Nothing. */; *rhsp >= 0; ++rhsp)
-	  /* Nothing. */;
-	*rhsp = rule_number_as_item_number (r);
-	rules[r].number = r;
+        item_number *rhsp = rules[r].rhs;
+        for (/* Nothing. */; 0 <= *rhsp; ++rhsp)
+          continue;
+        *rhsp = rule_number_as_item_number (r);
+        rules[r].number = r;
       }
     nrules -= nuseless_productions;
   }
 
   /* Adjust NRITEMS.  */
-  {
-    rule_number r;
-    int length;
-    for (r = nrules; r < nrules + nuseless_productions; ++r)
-      {
-	length = rule_rhs_length (&rules[r]);
-	nritems -= length + 1;
-      }
-  }
+  for (rule_number r = nrules; r < nrules + nuseless_productions; ++r)
+    nritems -= rule_rhs_length (&rules[r]) + 1;
 }
 
 
@@ -282,58 +258,54 @@
 | Remove useless nonterminals.  |
 `------------------------------*/
 
+symbol_number *nterm_map = NULL;
+
 static void
 nonterminals_reduce (void)
 {
-  symbol_number i, n;
-
+  nterm_map = xnmalloc (nvars, sizeof *nterm_map);
   /* Map the nonterminals to their new index: useful first, useless
      afterwards.  Kept for later report.  */
-
-  symbol_number *nontermmap = xnmalloc (nvars, sizeof *nontermmap);
-  n = ntokens;
-  for (i = ntokens; i < nsyms; i++)
-    if (bitset_test (V, i))
-      nontermmap[i - ntokens] = n++;
-  for (i = ntokens; i < nsyms; i++)
-    if (!bitset_test (V, i))
-      {
-	nontermmap[i - ntokens] = n++;
-	warn_at (symbols[i]->location, _("nonterminal useless in grammar: %s"),
-		 symbols[i]->tag);
-      }
-
+  {
+    symbol_number n = ntokens;
+    for (symbol_number i = ntokens; i < nsyms; ++i)
+      if (bitset_test (V, i))
+        nterm_map[i - ntokens] = n++;
+    for (symbol_number i = ntokens; i < nsyms; ++i)
+      if (!bitset_test (V, i))
+        {
+          nterm_map[i - ntokens] = n++;
+          if (symbols[i]->content->status != used)
+            complain (&symbols[i]->location, Wother,
+                      _("nonterminal useless in grammar: %s"),
+                      symbols[i]->tag);
+        }
+  }
 
   /* Shuffle elements of tables indexed by symbol number.  */
   {
     symbol **symbols_sorted = xnmalloc (nvars, sizeof *symbols_sorted);
-
-    for (i = ntokens; i < nsyms; i++)
-      symbols[i]->number = nontermmap[i - ntokens];
-    for (i = ntokens; i < nsyms; i++)
-      symbols_sorted[nontermmap[i - ntokens] - ntokens] = symbols[i];
-    for (i = ntokens; i < nsyms; i++)
+    for (symbol_number i = ntokens; i < nsyms; ++i)
+      symbols[i]->content->number = nterm_map[i - ntokens];
+    for (symbol_number i = ntokens; i < nsyms; ++i)
+      symbols_sorted[nterm_map[i - ntokens] - ntokens] = symbols[i];
+    for (symbol_number i = ntokens; i < nsyms; ++i)
       symbols[i] = symbols_sorted[i - ntokens];
     free (symbols_sorted);
   }
 
+  /* Update nonterminal numbers in the RHS of the rules.  LHS are
+     pointers to the symbol structure, they don't need renumbering. */
   {
-    rule_number r;
-    for (r = 0; r < nrules; ++r)
-      {
-	item_number *rhsp;
-	for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp)
-	  if (ISVAR (*rhsp))
-	    *rhsp =  symbol_number_as_item_number (nontermmap[*rhsp
-							      - ntokens]);
-      }
-    accept->number = nontermmap[accept->number - ntokens];
+    for (rule_number r = 0; r < nrules; ++r)
+      for (item_number *rhsp = rules[r].rhs; 0 <= *rhsp; ++rhsp)
+        if (ISVAR (*rhsp))
+          *rhsp = symbol_number_as_item_number (nterm_map[*rhsp - ntokens]);
+    accept->content->number = nterm_map[accept->content->number - ntokens];
   }
 
   nsyms -= nuseless_nonterminals;
   nvars -= nuseless_nonterminals;
-
-  free (nontermmap);
 }
 
 
@@ -344,33 +316,31 @@
 void
 reduce_output (FILE *out)
 {
-  if (nuseless_nonterminals > 0)
+  if (nuseless_nonterminals)
     {
-      int i;
       fprintf (out, "%s\n\n", _("Nonterminals useless in grammar"));
-      for (i = 0; i < nuseless_nonterminals; ++i)
-	fprintf (out, "   %s\n", symbols[nsyms + i]->tag);
+      for (int i = 0; i < nuseless_nonterminals; ++i)
+        fprintf (out, "    %s\n", symbols[nsyms + i]->tag);
       fputs ("\n\n", out);
     }
 
   {
     bool b = false;
-    int i;
-    for (i = 0; i < ntokens; i++)
+    for (int i = 0; i < ntokens; ++i)
       if (reduce_token_unused_in_grammar (i))
-	{
-	  if (!b)
-	    fprintf (out, "%s\n\n", _("Terminals unused in grammar"));
-	  b = true;
-	  fprintf (out, "   %s\n", symbols[i]->tag);
-	}
+        {
+          if (!b)
+            fprintf (out, "%s\n\n", _("Terminals unused in grammar"));
+          b = true;
+          fprintf (out, "    %s\n", symbols[i]->tag);
+        }
     if (b)
       fputs ("\n\n", out);
   }
 
-  if (nuseless_productions > 0)
+  if (nuseless_productions)
     grammar_rules_partial_print (out, _("Rules useless in grammar"),
-				 rule_useless_in_grammar_p);
+                                 rule_useless_in_grammar_p);
 }
 
 
@@ -381,23 +351,21 @@
 static void
 reduce_print (void)
 {
-  if (nuseless_nonterminals > 0)
-    warn (ngettext ("%d nonterminal useless in grammar",
-                    "%d nonterminals useless in grammar",
-                    nuseless_nonterminals),
-          nuseless_nonterminals);
-  if (nuseless_productions > 0)
-    warn (ngettext ("%d rule useless in grammar",
-                    "%d rules useless in grammar",
-                    nuseless_productions),
-          nuseless_productions);
+  if (nuseless_nonterminals)
+    complain (NULL, Wother, ngettext ("%d nonterminal useless in grammar",
+                                      "%d nonterminals useless in grammar",
+                                      nuseless_nonterminals),
+              nuseless_nonterminals);
+  if (nuseless_productions)
+    complain (NULL, Wother, ngettext ("%d rule useless in grammar",
+                                      "%d rules useless in grammar",
+                                      nuseless_productions),
+              nuseless_productions);
 }
 
 void
 reduce_grammar (void)
 {
-  bool reduced;
-
   /* Allocate the global sets used to compute the reduced grammar */
 
   N = bitset_create (nvars, BITSET_FIXED);
@@ -408,32 +376,32 @@
   useless_nonterminals ();
   inaccessable_symbols ();
 
-  reduced = (nuseless_nonterminals + nuseless_productions > 0);
-  if (!reduced)
-    return;
+  /* Did we reduce something? */
+  if (nuseless_nonterminals || nuseless_productions)
+    {
+      reduce_print ();
 
-  reduce_print ();
+      if (!bitset_test (N, accept->content->number - ntokens))
+        complain (&startsymbol_loc, fatal,
+                  _("start symbol %s does not derive any sentence"),
+                  startsymbol->tag);
 
-  if (!bitset_test (N, accept->number - ntokens))
-    fatal_at (startsymbol_location,
-	      _("start symbol %s does not derive any sentence"),
-	      startsymbol->tag);
-
-  /* First reduce the nonterminals, as they renumber themselves in the
-     whole grammar.  If you change the order, nonterms would be
-     renumbered only in the reduced grammar.  */
-  if (nuseless_nonterminals > 0)
-    nonterminals_reduce ();
-  if (nuseless_productions > 0)
-    reduce_grammar_tables ();
+      /* First reduce the nonterminals, as they renumber themselves in the
+         whole grammar.  If you change the order, nonterms would be
+         renumbered only in the reduced grammar.  */
+      if (nuseless_nonterminals)
+        nonterminals_reduce ();
+      if (nuseless_productions)
+        reduce_grammar_tables ();
+    }
 
   if (trace_flag & trace_grammar)
     {
       grammar_dump (stderr, "Reduced Grammar");
 
-      fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals\
-, and %d productions.\n",
-	       grammar_file, ntokens, nvars, nrules);
+      fprintf (stderr, "reduced %s defines %d terminals, %d nonterminals"
+               ", and %d productions.\n",
+               grammar_file, ntokens, nvars, nrules);
     }
 }
 
@@ -445,10 +413,11 @@
 }
 
 bool
-reduce_nonterminal_useless_in_grammar (symbol_number i)
+reduce_nonterminal_useless_in_grammar (const sym_content *sym)
 {
-  aver (ntokens <= i && i < nsyms + nuseless_nonterminals);
-  return nsyms <= i;
+  symbol_number n = sym->number;
+  aver (ntokens <= n && n < nsyms + nuseless_nonterminals);
+  return nsyms <= n;
 }
 
 /*-----------------------------------------------------------.
@@ -462,4 +431,6 @@
   bitset_free (V);
   bitset_free (V1);
   bitset_free (P);
+  free (nterm_map);
+  nterm_map = NULL;
 }
diff --git a/src/reduce.h b/src/reduce.h
index c28824f..6810555 100644
--- a/src/reduce.h
+++ b/src/reduce.h
@@ -1,7 +1,7 @@
 /* Grammar reduction for Bison.
 
-   Copyright (C) 2000-2002, 2007, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2000-2002, 2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -24,9 +24,19 @@
 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);
+
+/** Whether symbol \a i is useless in the grammar.
+ * \pre  reduce_grammar was called before.
+ */
+bool reduce_nonterminal_useless_in_grammar (const sym_content *sym);
+
 void reduce_free (void);
 
-extern symbol_number nuseless_nonterminals;
-extern rule_number nuseless_productions;
+/** Map initial nterm numbers to the new ones.  Built by
+ * reduce_grammar.  Size nvars + nuseless_nonterminals.  */
+extern symbol_number *nterm_map;
+
+extern int nuseless_nonterminals;
+extern int nuseless_productions;
+
 #endif /* !REDUCE_H_ */
diff --git a/src/relation.c b/src/relation.c
index 49424c0..ebd3f21 100644
--- a/src/relation.c
+++ b/src/relation.c
@@ -1,7 +1,7 @@
 /* Binary relations.
 
-   Copyright (C) 2002, 2004-2005, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002, 2004-2005, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -27,19 +27,31 @@
 #include "relation.h"
 
 void
-relation_print (relation r, relation_node size, FILE *out)
+relation_print (const char *title,
+                relation r, relation_node size,
+                relation_node_print print, FILE *out)
 {
-  relation_node i;
-  relation_node j;
-
-  for (i = 0; i < size; ++i)
-    {
-      fprintf (out, "%3lu: ", (unsigned long int) i);
-      if (r[i])
-	for (j = 0; r[i][j] != END_NODE; ++j)
-	  fprintf (out, "%3lu ", (unsigned long int) r[i][j]);
-      fputc ('\n', out);
-    }
+  if (title)
+    fprintf (out, "%s:\n", title);
+  for (relation_node i = 0; i < size; ++i)
+    if (r[i])
+      {
+        fputs ("    ", out);
+        if (print)
+          print (i, out);
+        else
+          fprintf (out, "%3ld", (long) i);
+        fputc (':', out);
+        for (relation_node j = 0; r[i][j] != END_NODE; ++j)
+          {
+            fputc (' ', out);
+            if (print)
+              print (r[i][j], out);
+            else
+              fprintf (out, "%3ld", (long) r[i][j]);
+          }
+        fputc ('\n', out);
+      }
   fputc ('\n', out);
 }
 
@@ -52,8 +64,8 @@
 `---------------------------------------------------------------*/
 
 static relation R;
-static relation_nodes INDEX;
-static relation_nodes VERTICES;
+static relation_nodes indexes;
+static relation_nodes vertices;
 static relation_node top;
 static relation_node infinity;
 static bitsetv F;
@@ -61,59 +73,54 @@
 static void
 traverse (relation_node i)
 {
-  relation_node j;
-  relation_node height;
-
-  VERTICES[++top] = i;
-  INDEX[i] = height = top;
+  vertices[++top] = i;
+  relation_node height = indexes[i] = top;
 
   if (R[i])
-    for (j = 0; R[i][j] != END_NODE; ++j)
+    for (relation_node j = 0; R[i][j] != END_NODE; ++j)
       {
-	if (INDEX[R[i][j]] == 0)
-	  traverse (R[i][j]);
+        if (indexes[R[i][j]] == 0)
+          traverse (R[i][j]);
 
-	if (INDEX[i] > INDEX[R[i][j]])
-	  INDEX[i] = INDEX[R[i][j]];
+        if (indexes[i] > indexes[R[i][j]])
+          indexes[i] = indexes[R[i][j]];
 
-	bitset_or (F[i], F[i], F[R[i][j]]);
+        bitset_or (F[i], F[i], F[R[i][j]]);
       }
 
-  if (INDEX[i] == height)
+  if (indexes[i] == height)
     for (;;)
       {
-	j = VERTICES[top--];
-	INDEX[j] = infinity;
+        relation_node j = vertices[top--];
+        indexes[j] = infinity;
 
-	if (i == j)
-	  break;
+        if (i == j)
+          break;
 
-	bitset_copy (F[j], F[i]);
+        bitset_copy (F[j], F[i]);
       }
 }
 
 
 void
-relation_digraph (relation r, relation_node size, bitsetv *function)
+relation_digraph (relation r, relation_node size, bitsetv function)
 {
-  relation_node i;
-
   infinity = size + 2;
-  INDEX = xcalloc (size + 1, sizeof *INDEX);
-  VERTICES = xnmalloc (size + 1, sizeof *VERTICES);
+  indexes = xcalloc (size + 1, sizeof *indexes);
+  vertices = xnmalloc (size + 1, sizeof *vertices);
   top = 0;
 
   R = r;
-  F = *function;
+  F = function;
 
-  for (i = 0; i < size; i++)
-    if (INDEX[i] == 0 && R[i])
+  for (relation_node i = 0; i < size; i++)
+    if (indexes[i] == 0 && R[i])
       traverse (i);
 
-  free (INDEX);
-  free (VERTICES);
+  free (indexes);
+  free (vertices);
 
-  *function = F;
+  function = F;
 }
 
 
@@ -122,62 +129,54 @@
 `-------------------------------------------*/
 
 void
-relation_transpose (relation *R_arg, relation_node n)
+relation_transpose (relation *R_arg, relation_node size)
 {
   relation r = *R_arg;
-  /* The result. */
-  relation new_R = xnmalloc (n, sizeof *new_R);
-  /* END_R[I] -- next entry of NEW_R[I]. */
-  relation end_R = xnmalloc (n, sizeof *end_R);
-  /* NEDGES[I] -- total size of NEW_R[I]. */
-  size_t *nedges = xcalloc (n, sizeof *nedges);
-  relation_node i;
-  relation_node j;
 
   if (trace_flag & trace_sets)
-    {
-      fputs ("relation_transpose: input\n", stderr);
-      relation_print (r, n, stderr);
-    }
+    relation_print ("relation_transpose", r, size, NULL, stderr);
 
   /* Count. */
-  for (i = 0; i < n; i++)
+  /* NEDGES[I] -- total size of NEW_R[I]. */
+  size_t *nedges = xcalloc (size, sizeof *nedges);
+  for (relation_node i = 0; i < size; i++)
     if (r[i])
-      for (j = 0; r[i][j] != END_NODE; ++j)
-	++nedges[r[i][j]];
+      for (relation_node j = 0; r[i][j] != END_NODE; ++j)
+        ++nedges[r[i][j]];
 
   /* Allocate. */
-  for (i = 0; i < n; i++)
+  /* The result. */
+  relation new_R = xnmalloc (size, sizeof *new_R);
+  /* END_R[I] -- next entry of NEW_R[I]. */
+  relation end_R = xnmalloc (size, sizeof *end_R);
+  for (relation_node i = 0; i < size; i++)
     {
       relation_node *sp = NULL;
       if (nedges[i] > 0)
-	{
-	  sp = xnmalloc (nedges[i] + 1, sizeof *sp);
-	  sp[nedges[i]] = END_NODE;
-	}
+        {
+          sp = xnmalloc (nedges[i] + 1, sizeof *sp);
+          sp[nedges[i]] = END_NODE;
+        }
       new_R[i] = sp;
       end_R[i] = sp;
     }
 
   /* Store. */
-  for (i = 0; i < n; i++)
+  for (relation_node i = 0; i < size; i++)
     if (r[i])
-      for (j = 0; r[i][j] != END_NODE; ++j)
-	*end_R[r[i][j]]++ = i;
+      for (relation_node j = 0; r[i][j] != END_NODE; ++j)
+        *end_R[r[i][j]]++ = i;
 
   free (nedges);
   free (end_R);
 
   /* Free the input: it is replaced with the result. */
-  for (i = 0; i < n; i++)
+  for (relation_node i = 0; i < size; i++)
     free (r[i]);
   free (r);
 
   if (trace_flag & trace_sets)
-    {
-      fputs ("relation_transpose: output\n", stderr);
-      relation_print (new_R, n, stderr);
-    }
+    relation_print ("relation_transpose: output", new_R, size, NULL, stderr);
 
   *R_arg = new_R;
 }
diff --git a/src/relation.h b/src/relation.h
index 88c69b7..81d766c 100644
--- a/src/relation.h
+++ b/src/relation.h
@@ -1,6 +1,7 @@
 /* Binary relations.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -26,24 +27,29 @@
    If GRAPH is a relation, then GRAPH[Node] is a list of adjacent
    nodes, ended with END_NODE.  */
 
-#define END_NODE ((relation_node) -1)
+# define END_NODE ((relation_node) -1)
 
 typedef size_t relation_node;
 typedef relation_node *relation_nodes;
 typedef relation_nodes *relation;
 
+typedef void (relation_node_print) (relation_node node, FILE* out);
 
 /* Report a relation R that has SIZE vertices.  */
-void relation_print (relation r, relation_node size, FILE *out);
+void relation_print (const char *title,
+                     relation r, size_t size,
+                     relation_node_print print, FILE *out);
 
 /* Compute the transitive closure of the FUNCTION on the relation R
    with SIZE vertices.
 
-   If R (NODE-1, NODE-2) then on exit FUNCTION[NODE - 1] was extended
-   (unioned) with FUNCTION[NODE - 2].  */
-void relation_digraph (relation r, relation_node size, bitsetv *function);
+   If R (NODE1, NODE2) then on exit FUNCTION[NODE1] was extended
+   (unioned) with FUNCTION[NODE2].
 
-/* Destructively transpose *R_ARG, of size N.  */
-void relation_transpose (relation *R_arg, relation_node n);
+   FUNCTION is in-out, R is read only.  */
+void relation_digraph (const relation r, relation_node size, bitsetv function);
+
+/* Destructively transpose *R_ARG, of size SIZE.  */
+void relation_transpose (relation *R_arg, relation_node size);
 
 #endif /* ! RELATION_H_ */
diff --git a/src/scan-code-c.c b/src/scan-code-c.c
index 4a018f8..7d37b76 100644
--- a/src/scan-code-c.c
+++ b/src/scan-code-c.c
@@ -1,3 +1,3 @@
 #include <config.h>
 #include "system.h"
-#include "scan-code.c"
+#include "src/scan-code.c"
diff --git a/src/scan-code.c b/src/scan-code.c
index 8201dc9..d8567eb 100644
--- a/src/scan-code.c
+++ b/src/scan-code.c
@@ -1,22 +1,27 @@
-#line 2 "scan-code.c"
+#line 1 "src/scan-code.c"
 
-#line 4 "scan-code.c"
+#line 3 "src/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_scan_buffer code__scan_buffer
+#define yy_scan_string code__scan_string
+#define yy_scan_bytes code__scan_bytes
 #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 yypush_buffer_state code_push_buffer_state
+#define yypop_buffer_state code_pop_buffer_state
+#define yyensure_buffer_stack code_ensure_buffer_stack
+#define yy_flex_debug code__flex_debug
 #define yyin code_in
 #define yyleng code_leng
 #define yylex code_lex
@@ -35,8 +40,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -45,11 +50,244 @@
 /* %endif */
 
 /* %if-c-only */
-    
+#ifdef yy_create_buffer
+#define code__create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer code__create_buffer
+#endif
+
+#ifdef yy_delete_buffer
+#define code__delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer code__delete_buffer
+#endif
+
+#ifdef yy_scan_buffer
+#define code__scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer code__scan_buffer
+#endif
+
+#ifdef yy_scan_string
+#define code__scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string code__scan_string
+#endif
+
+#ifdef yy_scan_bytes
+#define code__scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes code__scan_bytes
+#endif
+
+#ifdef yy_init_buffer
+#define code__init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer code__init_buffer
+#endif
+
+#ifdef yy_flush_buffer
+#define code__flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer code__flush_buffer
+#endif
+
+#ifdef yy_load_buffer_state
+#define code__load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state code__load_buffer_state
+#endif
+
+#ifdef yy_switch_to_buffer
+#define code__switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer code__switch_to_buffer
+#endif
+
+#ifdef yypush_buffer_state
+#define code_push_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state code_push_buffer_state
+#endif
+
+#ifdef yypop_buffer_state
+#define code_pop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state code_pop_buffer_state
+#endif
+
+#ifdef yyensure_buffer_stack
+#define code_ensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack code_ensure_buffer_stack
+#endif
+
+#ifdef yylex
+#define code_lex_ALREADY_DEFINED
+#else
+#define yylex code_lex
+#endif
+
+#ifdef yyrestart
+#define code_restart_ALREADY_DEFINED
+#else
+#define yyrestart code_restart
+#endif
+
+#ifdef yylex_init
+#define code_lex_init_ALREADY_DEFINED
+#else
+#define yylex_init code_lex_init
+#endif
+
+#ifdef yylex_init_extra
+#define code_lex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra code_lex_init_extra
+#endif
+
+#ifdef yylex_destroy
+#define code_lex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy code_lex_destroy
+#endif
+
+#ifdef yyget_debug
+#define code_get_debug_ALREADY_DEFINED
+#else
+#define yyget_debug code_get_debug
+#endif
+
+#ifdef yyset_debug
+#define code_set_debug_ALREADY_DEFINED
+#else
+#define yyset_debug code_set_debug
+#endif
+
+#ifdef yyget_extra
+#define code_get_extra_ALREADY_DEFINED
+#else
+#define yyget_extra code_get_extra
+#endif
+
+#ifdef yyset_extra
+#define code_set_extra_ALREADY_DEFINED
+#else
+#define yyset_extra code_set_extra
+#endif
+
+#ifdef yyget_in
+#define code_get_in_ALREADY_DEFINED
+#else
+#define yyget_in code_get_in
+#endif
+
+#ifdef yyset_in
+#define code_set_in_ALREADY_DEFINED
+#else
+#define yyset_in code_set_in
+#endif
+
+#ifdef yyget_out
+#define code_get_out_ALREADY_DEFINED
+#else
+#define yyget_out code_get_out
+#endif
+
+#ifdef yyset_out
+#define code_set_out_ALREADY_DEFINED
+#else
+#define yyset_out code_set_out
+#endif
+
+#ifdef yyget_leng
+#define code_get_leng_ALREADY_DEFINED
+#else
+#define yyget_leng code_get_leng
+#endif
+
+#ifdef yyget_text
+#define code_get_text_ALREADY_DEFINED
+#else
+#define yyget_text code_get_text
+#endif
+
+#ifdef yyget_lineno
+#define code_get_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno code_get_lineno
+#endif
+
+#ifdef yyset_lineno
+#define code_set_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno code_set_lineno
+#endif
+
+#ifdef yywrap
+#define code_wrap_ALREADY_DEFINED
+#else
+#define yywrap code_wrap
+#endif
+
 /* %endif */
 
+#ifdef yyalloc
+#define code_alloc_ALREADY_DEFINED
+#else
+#define yyalloc code_alloc
+#endif
+
+#ifdef yyrealloc
+#define code_realloc_ALREADY_DEFINED
+#else
+#define yyrealloc code_realloc
+#endif
+
+#ifdef yyfree
+#define code_free_ALREADY_DEFINED
+#else
+#define yyfree code_free
+#endif
+
 /* %if-c-only */
 
+#ifdef yytext
+#define code_text_ALREADY_DEFINED
+#else
+#define yytext code_text
+#endif
+
+#ifdef yyleng
+#define code_leng_ALREADY_DEFINED
+#else
+#define yyleng code_leng
+#endif
+
+#ifdef yyin
+#define code_in_ALREADY_DEFINED
+#else
+#define yyin code_in
+#endif
+
+#ifdef yyout
+#define code_out_ALREADY_DEFINED
+#else
+#define yyout code_out
+#endif
+
+#ifdef yy_flex_debug
+#define code__flex_debug_ALREADY_DEFINED
+#else
+#define yy_flex_debug code__flex_debug
+#endif
+
+#ifdef yylineno
+#define code_lineno_ALREADY_DEFINED
+#else
+#define yylineno code_lineno
+#endif
+
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -127,50 +365,39 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#ifndef SIZE_MAX
+#define SIZE_MAX               (~(size_t)0)
+#endif
+
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
+/* begin standard C++ headers. */
 /* %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
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #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.
+/* Promotes a possibly negative, possibly signed char to an
+ *   integer in range [0..255] for use as an array index.
  */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -185,25 +412,29 @@
  * 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_NEW_FILE yyrestart( yyin  )
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -221,35 +452,35 @@
 #endif
 
 /* %if-not-reentrant */
-extern yy_size_t code_leng;
+extern int yyleng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *code_in, *code_out;
+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)
+    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up code_text. */ \
+		/* 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 code_text again */ \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
-
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -269,12 +500,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int 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
@@ -297,7 +528,7 @@
 
     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.
 	 */
@@ -314,8 +545,8 @@
 	 * 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.
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
 	 */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -324,13 +555,12 @@
 
 /* %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. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -345,7 +575,6 @@
 #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.
  */
@@ -355,118 +584,115 @@
 
 /* %if-not-reentrant */
 /* %not-for-header */
-
-/* yy_hold_char holds the character lost when code_text is formed. */
+/* 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 code_leng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 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 ...
+/* 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 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 );
+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 code_ensure_buffer_stack (void );
-static void code__load_buffer_state (void );
-static void code__init_buffer (YY_BUFFER_STATE b,FILE *file  );
+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 )
 
-#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  );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
 
 /* %endif */
 
-void *code_alloc (yy_size_t  );
-void *code_realloc (void *,yy_size_t  );
-void code_free (void *  );
+void *yyalloc ( yy_size_t  );
+void *yyrealloc ( void *, yy_size_t  );
+void yyfree ( void *  );
 
-#define yy_new_buffer code__create_buffer
-
+#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){ \
-        code_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            code__create_buffer(code_in,YY_BUF_SIZE ); \
+            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 ){\
-        code_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            code__create_buffer(code_in,YY_BUF_SIZE ); \
+            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] code_text/code_in/code_out/yy_state_type/code_lineno etc. def's & init go here */
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define code_wrap() 1
+#define code_wrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
+typedef flex_uint8_t YY_CHAR;
 
-typedef unsigned char YY_CHAR;
-
-FILE *code_in = (FILE *) 0, *code_out = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
-extern int code_lineno;
+extern int yylineno;
+int yylineno = 1;
 
-int code_lineno = 1;
+extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
+#define yytext_ptr yytext
 
-extern char *code_text;
-#define yytext_ptr code_text
+/* %% [1.5] DFA */
 
 /* %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[]  );
+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 yynoreturn yy_fatal_error ( const char* msg  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up code_text.
+ * corresponding action - sets up yytext.
  */
 #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); \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (int) (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 \ */\
+/* %% [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 29
-#define YY_END_OF_BUFFER 30
+#define YY_NUM_RULES 18
+#define YY_END_OF_BUFFER 19
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -474,37 +700,35 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[101] =
+static const flex_int16_t yy_accept[91] =
     {   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
-
+        0,    0,    0,    0,   19,   17,   16,   17,    2,   17,
+        6,   17,    5,    8,   11,    7,   17,   11,   11,   11,
+        1,    0,    0,    3,    4,    4,    4,    4,   12,    0,
+       12,   12,    0,    0,    9,   10,    0,   13,    0,   13,
+       13,    0,   14,    0,   15,    0,    0,    0,    0,    0,
+        0,    0,   12,    0,    0,    0,    0,    0,   13,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   12,    0,
+       12,   12,    0,   14,   12,   12,    0,    0,    0,    0
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static const YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        4,    2,    5,    1,    1,    1,    1,    1,    1,    1,
+        2,    2,    1,    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,
+        1,    2,    1,    4,    1,    5,    1,    1,    6,    1,
+        1,    7,    1,    1,    8,    9,   10,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,    1,    1,   12,
+        1,   13,    1,   14,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+       15,   16,   17,    1,    9,    1,    9,    9,    9,    9,
 
-       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,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        9,    9,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -521,126 +745,104 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[31] =
+static const YY_CHAR yy_meta[19] =
     {   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
+        1,    1,    2,    1,    1,    1,    1,    3,    3,    1,
+        3,    1,    2,    1,    1,    1,    1,    2
     } ;
 
-static yyconst flex_int16_t yy_base[113] =
+static const flex_int16_t yy_base[97] =
     {   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,
+        0,   13,  121,  120,    0,    3,    4,    5,    6,    7,
+       27,    0,   20,   21,  125,  178,  178,   26,  178,    8,
+      178,   41,  178,  178,   53,  178,   62,   74,   33,  119,
+      178,   37,   44,  105,  178,   46,  101,   48,  178,   99,
+        0,   96,   98,   91,  178,  178,   50,  178,   87,    0,
+       86,   87,  178,   76,  178,   52,   50,   68,   71,   73,
+       78,   74,    0,   16,   78,   84,   85,    0,    0,   94,
+       86,   96,   55,  107,    0,    0,   58,  118,  100,  124,
+      130,  136,  142,  106,   46,    0,  148,   43,    0,  178,
+      165,  168,    4,  171,    1,  174
 
-      172,  180,  186,  188,  192,  199,  203,  207,  210,  217,
-      222,  227
     } ;
 
-static yyconst flex_int16_t yy_def[113] =
+static const flex_int16_t yy_def[97] =
     {   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,
+       91,   91,    2,    2,    2,    2,    2,    2,    2,    2,
+        2,   11,   11,   11,   90,   90,   90,   90,   90,   90,
+       90,   92,   90,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
+       93,   90,   94,   90,   90,   90,   90,   90,   90,   95,
+       90,   90,   90,   96,   90,   90,   90,   90,   90,   90,
+       90,   92,   93,   94,   94,   90,   90,   27,   95,   90,
+       96,   96,   25,   94,   66,   70,   90,   96,   94,   94,
+       94,   94,   94,   96,   81,   81,   81,   87,   87,    0,
+       90,   90,   90,   90,   90,   90
 
-      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
-      100,  100
     } ;
 
-static yyconst flex_int16_t yy_nxt[274] =
+static const flex_int16_t yy_nxt[197] =
     {   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,
+       90,   90,   19,   69,   17,   19,   63,   21,   21,   33,
+       34,   23,   23,   17,   17,   20,   17,   17,   20,   22,
+       22,   22,   22,   65,   29,   29,   17,   17,   73,   17,
+       24,   25,   26,   30,   30,   31,   27,   53,   56,   57,
+       28,   32,   36,   37,   54,   33,   34,   59,   37,   61,
+       62,   67,   68,   56,   57,   74,   38,   39,   74,   31,
+       40,   41,   53,   42,   43,   32,   90,   44,   45,   33,
+       34,   46,   59,   37,   59,   37,   90,   47,   48,   61,
+       62,   49,   50,   72,   51,   65,   67,   68,   52,   38,
+       74,   75,   75,   72,   75,   70,   51,   51,   77,   66,
 
-       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,
+       39,   76,   76,   72,   76,   65,   42,   65,   78,   42,
+       48,   79,   73,   72,   80,   81,   60,   82,   77,   73,
+       58,   83,   84,   55,   90,   72,   18,   18,   90,   90,
+       77,   65,   90,   90,   82,   90,   74,   85,   86,   90,
+       86,   90,   73,   65,   90,   90,   82,   90,   73,   65,
+       87,   90,   90,   90,   73,   88,   89,   90,   89,   90,
+       90,   90,   90,   90,   79,   16,   16,   16,   35,   35,
+       35,   64,   90,   64,   71,   90,   71,   15,   90,   90,
+       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   90,   90,   90
 
-       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] =
+static const flex_int16_t yy_chk[197] =
     {   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,
+        0,    0,    5,   95,    1,    6,   93,    7,    8,   20,
+       20,    9,   10,    1,    1,    5,    1,    2,    6,    7,
+        8,    9,   10,   64,   13,   14,    2,    2,   64,    2,
+       11,   11,   11,   13,   14,   18,   11,   29,   32,   32,
+       11,   18,   22,   22,   29,   33,   33,   36,   36,   38,
+       38,   47,   47,   56,   56,   88,   22,   25,   85,   57,
+       25,   25,   77,   25,   25,   57,   73,   25,   27,   58,
+       58,   27,   59,   59,   60,   60,   62,   27,   28,   61,
+       61,   28,   28,   54,   28,   65,   67,   67,   28,   62,
+       65,   66,   66,   71,   66,   52,   51,   49,   71,   44,
 
-       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,
+       66,   70,   70,   72,   70,   43,   42,   79,   72,   40,
+       70,   74,   79,   84,   74,   74,   37,   74,   84,   74,
+       34,   74,   78,   30,   15,   78,    4,    3,    0,    0,
+       78,   80,    0,    0,   80,    0,   80,   81,   81,    0,
+       81,    0,   81,   82,    0,    0,   82,    0,   82,   83,
+       83,    0,    0,    0,   83,   87,   87,    0,   87,    0,
+        0,    0,    0,    0,   87,   91,   91,   91,   92,   92,
+       92,   94,    0,   94,   96,    0,   96,   90,   90,   90,
+       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   90,   90,   90
 
-       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;
+extern int yy_flex_debug;
+int yy_flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[29] =
+static const flex_int16_t yy_rule_linenum[18] =
     {   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
+      116,  126,  127,  137,  142,  147,  153,  154,  155,  156,
+      158,  166,  172,  182,  190,  200,  203
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -650,11 +852,11 @@
 #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"
+char *yytext;
+#line 1 "/Users/akim/src/gnu/bison/src/scan-code.l"
 /* Bison Action Scanner                             -*- C -*-
 
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -671,44 +873,46 @@
    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"
+#line 24 "/Users/akim/src/gnu/bison/src/scan-code.l"
+#include <c-ctype.h>
+#include <get-errno.h>
+#include <quote.h>
+
+#include <src/complain.h>
+#include <src/getargs.h>
+#include <src/muscle-tab.h>
+#include <src/reader.h>
+#include <src/scan-code.h>
+#include <src/symlist.h>
+
+#define FLEX_PREFIX(Id) code_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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);
+#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);
+                              const 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);
+                                  const location *dollar_loc);
+static void handle_action_at (symbol_list *rule, char *cp,
+                              const 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;
+static location current_loc;
+static location *loc = &current_loc;
 
 /* A string representing the most recent translation.  */
 static char *last_string;
@@ -716,22 +920,25 @@
 /* True if an untyped $$ or $n was seen.  */
 static bool untyped_var_seen;
 
-/* C and C++ comments in code. */
+#line 923 "src/scan-code.c"
+#line 72 "/Users/akim/src/gnu/bison/src/scan-code.l"
+ /* C and C++ comments in code. */
 
-/* Strings and characters in code. */
+ /* Strings and characters in code. */
 
-/* Whether in a rule or symbol action.  Specifies the translation
-of $ and @.  */
+ /* 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.  */
+   NUL and newline, as this simplifies our implementation.  We allow
+   "->" as a means to dereference a pointer.  */
 /* 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"
+#line 941 "src/scan-code.c"
 
 #define INITIAL 0
 #define SC_COMMENT 1
@@ -761,7 +968,7 @@
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals (void );
+static int yy_init_globals ( void );
 
 /* %endif */
 /* %if-reentrant */
@@ -771,31 +978,31 @@
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int code_lex_destroy (void );
+int yylex_destroy ( void );
 
-int code_get_debug (void );
+int yyget_debug ( void );
 
-void code_set_debug (int debug_flag  );
+void yyset_debug ( int debug_flag  );
 
-YY_EXTRA_TYPE code_get_extra (void );
+YY_EXTRA_TYPE yyget_extra ( void );
 
-void code_set_extra (YY_EXTRA_TYPE user_defined  );
+void yyset_extra ( YY_EXTRA_TYPE user_defined  );
 
-FILE *code_get_in (void );
+FILE *yyget_in ( void );
 
-void code_set_in  (FILE * in_str  );
+void yyset_in  ( FILE * _in_str  );
 
-FILE *code_get_out (void );
+FILE *yyget_out ( void );
 
-void code_set_out  (FILE * out_str  );
+void yyset_out  ( FILE * _out_str  );
 
-yy_size_t code_get_leng (void );
+			int yyget_leng ( void );
 
-char *code_get_text (void );
+char *yyget_text ( void );
 
-int code_get_lineno (void );
+int yyget_lineno ( void );
 
-void code_set_lineno (int line_number  );
+void yyset_lineno ( int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -806,34 +1013,35 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int code_wrap (void );
+extern "C" int yywrap ( void );
 #else
-extern int code_wrap (void );
+extern int yywrap ( void );
 #endif
 #endif
 
 /* %not-for-header */
-
+#ifndef YY_NO_UNPUT
+    
+#endif
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy ( char *, const char *, int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen ( const char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
-
 #ifdef __cplusplus
-static int yyinput (void );
+static int yyinput ( void );
 #else
-static int input (void );
+static int input ( void );
 #endif
 /* %ok-for-header */
 
@@ -846,7 +1054,12 @@
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -855,7 +1068,7 @@
 /* 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)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -870,20 +1083,20 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
-			     (c = getc( code_in )) != EOF && c != '\n'; ++n ) \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
 		if ( c == '\n' ) \
 			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( code_in ) ) \
+		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, code_in))==0 && ferror(code_in)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -891,7 +1104,7 @@
 				break; \
 				} \
 			errno=0; \
-			clearerr(code_in); \
+			clearerr(yyin); \
 			} \
 		}\
 \
@@ -924,11 +1137,9 @@
 
 /* %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 */
@@ -942,15 +1153,15 @@
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int code_lex (void);
+extern int yylex (void);
 
-#define YY_DECL int code_lex (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 code_text and code_leng
+/* Code executed at the beginning of each rule, after yytext and yyleng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -959,7 +1170,7 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -967,55 +1178,14 @@
 	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;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	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;
@@ -1027,35 +1197,56 @@
 		if ( ! (yy_start) )
 			(yy_start) = 1;	/* first start state */
 
-		if ( ! code_in )
+		if ( ! yyin )
 /* %if-c-only */
-			code_in = stdin;
+			yyin = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-		if ( ! code_out )
+		if ( ! yyout )
 /* %if-c-only */
-			code_out = stdout;
+			yyout = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
 		if ( ! YY_CURRENT_BUFFER ) {
-			code_ensure_buffer_stack ();
+			yyensure_buffer_stack ();
 			YY_CURRENT_BUFFER_LVALUE =
-				code__create_buffer(code_in,YY_BUF_SIZE );
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 		}
 
-		code__load_buffer_state( );
+		yy_load_buffer_state(  );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+/* %% [7.0] user's declarations go here */
+#line 98 "/Users/akim/src/gnu/bison/src/scan-code.l"
+
+
+
+  /* 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 1242 "src/scan-code.c"
+
+	while ( /*CONSTCOND*/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. */
+		/* Support of yytext. */
 		*yy_cp = (yy_hold_char);
 
 		/* yy_bp points to the position in yy_ch_buf of the start of
@@ -1068,7 +1259,7 @@
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			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;
@@ -1077,13 +1268,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 >= 101 )
-					yy_c = yy_meta[(unsigned int) yy_c];
+				if ( yy_current_state >= 91 )
+					yy_c = yy_meta[yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 100 );
+		while ( yy_current_state != 90 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1093,22 +1284,22 @@
 
 		YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for code_lineno update goes here */
+/* %% [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 ( code__flex_debug )
+		if ( yy_flex_debug )
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 29 )
+			else if ( yy_act < 18 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-				         (long)yy_rule_linenum[yy_act], code_text );
-			else if ( yy_act == 29 )
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 18 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
-				         code_text );
-			else if ( yy_act == 30 )
+				         yytext );
+			else if ( yy_act == 19 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1127,7 +1318,7 @@
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 132 "scan-code.l"
+#line 116 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW; BEGIN sc_context;
 	YY_BREAK
 
@@ -1139,13 +1330,13 @@
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 142 "scan-code.l"
+#line 126 "/Users/akim/src/gnu/bison/src/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"
+#line 127 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW;
 	YY_BREAK
 
@@ -1157,7 +1348,7 @@
 case 4:
 /* rule 4 can match eol */
 YY_RULE_SETUP
-#line 153 "scan-code.l"
+#line 137 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW;
 	YY_BREAK
 
@@ -1165,7 +1356,7 @@
 
 case 5:
 YY_RULE_SETUP
-#line 158 "scan-code.l"
+#line 142 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW; BEGIN sc_context;
 	YY_BREAK
 
@@ -1173,7 +1364,7 @@
 
 case 6:
 YY_RULE_SETUP
-#line 163 "scan-code.l"
+#line 147 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW; BEGIN sc_context;
 	YY_BREAK
 
@@ -1181,204 +1372,94 @@
 
 case 7:
 YY_RULE_SETUP
-#line 169 "scan-code.l"
-{
-    STRING_GROW;
-    BEGIN SC_CHARACTER;
-    need_semicolon = true;
-  }
+#line 153 "/Users/akim/src/gnu/bison/src/scan-code.l"
+STRING_GROW; BEGIN SC_CHARACTER;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 174 "scan-code.l"
-{
-    STRING_GROW;
-    BEGIN SC_STRING;
-    need_semicolon = true;
-  }
+#line 154 "/Users/akim/src/gnu/bison/src/scan-code.l"
+STRING_GROW; BEGIN SC_STRING;
 	YY_BREAK
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 179 "scan-code.l"
-{
-    STRING_GROW;
-    BEGIN SC_COMMENT;
-  }
+#line 155 "/Users/akim/src/gnu/bison/src/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;
-  }
+#line 156 "/Users/akim/src/gnu/bison/src/scan-code.l"
+STRING_GROW; BEGIN SC_LINE_COMMENT;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 187 "scan-code.l"
+#line 158 "/Users/akim/src/gnu/bison/src/scan-code.l"
 {
-    warn_at (*loc, _("stray '%s'"), code_text);
-    obstack_escape (&obstack_for_string, code_text);
-    need_semicolon = true;
+    complain (loc, Wother, _("stray '%s'"), yytext);
+    obstack_escape (&obstack_for_string, yytext);
   }
 	YY_BREAK
+
+
+
 case 12:
 YY_RULE_SETUP
-#line 192 "scan-code.l"
+#line 166 "/Users/akim/src/gnu/bison/src/scan-code.l"
 {
-    obstack_escape (&obstack_for_string, code_text);
-    need_semicolon = true;
+    ref_tail_fields = NULL;
+    handle_action_dollar (self->rule, yytext, loc);
+    if (ref_tail_fields)
+      obstack_sgrow (&obstack_for_string, ref_tail_fields);
   }
 	YY_BREAK
-
-
-
 case 13:
 YY_RULE_SETUP
-#line 200 "scan-code.l"
+#line 172 "/Users/akim/src/gnu/bison/src/scan-code.l"
 {
     ref_tail_fields = NULL;
-    handle_action_dollar (self->rule, code_text, *loc);
+    handle_action_at (self->rule, yytext, 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"
+#line 182 "/Users/akim/src/gnu/bison/src/scan-code.l"
 {
     const char *type_name = NULL;
-    fetch_type_name (code_text + 1, &type_name, *loc)[-1] = 0;
+    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;
   }
 	YY_BREAK
-case 26:
+case 15:
 YY_RULE_SETUP
-#line 275 "scan-code.l"
+#line 190 "/Users/akim/src/gnu/bison/src/scan-code.l"
 {
     obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
-    locations_flag = true;
+    muscle_percent_define_ensure("locations", *loc, true);
   }
 	YY_BREAK
 
 
 
 /* Escape M4 quoting characters in C code.  */
-case 27:
+case 16:
 YY_RULE_SETUP
-#line 285 "scan-code.l"
-obstack_escape (&obstack_for_string, code_text);
+#line 200 "/Users/akim/src/gnu/bison/src/scan-code.l"
+obstack_escape (&obstack_for_string, yytext);
 	YY_BREAK
 /* By default, grow the string obstack with the input.  */
-case 28:
-/* rule 28 can match eol */
+case 17:
+/* rule 17 can match eol */
 YY_RULE_SETUP
-#line 288 "scan-code.l"
+#line 203 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_GROW;
 	YY_BREAK
 /* End of processing. */
@@ -1389,16 +1470,16 @@
 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"
+#line 206 "/Users/akim/src/gnu/bison/src/scan-code.l"
 STRING_FINISH; return last_string;
 	YY_BREAK
 
-case 29:
+case 18:
 YY_RULE_SETUP
-#line 294 "scan-code.l"
+#line 209 "/Users/akim/src/gnu/bison/src/scan-code.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1402 "scan-code.c"
+#line 1482 "src/scan-code.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -1413,15 +1494,19 @@
 			{
 			/* 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
+			 * 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 = code_in;
+/* %if-c-only */
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
@@ -1476,11 +1561,11 @@
 				{
 				(yy_did_buffer_switch_on_eof) = 0;
 
-				if ( code_wrap( ) )
+				if ( yywrap(  ) )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
-					 * code_text, we can now 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
@@ -1529,12 +1614,12 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-} /* end of code_lex */
+	} /* end of user's declarations */
+} /* end of yylex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
-
 /* %ok-for-header */
 
 /* %endif */
@@ -1552,9 +1637,9 @@
 /* %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;
+    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = (yytext_ptr);
+	int number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1583,7 +1668,7 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -1596,7 +1681,7 @@
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -1610,7 +1695,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -1619,11 +1704,12 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					code_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyrealloc( (void *) b->yy_ch_buf,
+							 (yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -1651,7 +1737,7 @@
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			code_restart(code_in  );
+			yyrestart( yyin  );
 			}
 
 		else
@@ -1665,12 +1751,15 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if (((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  );
+		int 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, (yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+		/* "- 2" to take care of EOB's */
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
 	}
 
 	(yy_n_chars) += number_to_move;
@@ -1686,14 +1775,13 @@
 
 /* %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;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
 	yy_current_state = (yy_start);
@@ -1701,7 +1789,7 @@
 	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);
+		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 18);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -1710,10 +1798,10 @@
 		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];
+			if ( yy_current_state >= 91 )
+				yy_c = yy_meta[yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 		}
 
 	return yy_current_state;
@@ -1730,11 +1818,11 @@
 /* %if-c++-only */
 /* %endif */
 {
-	register int yy_is_jam;
+	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);
+	char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 30;
+	YY_CHAR yy_c = 18;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -1743,18 +1831,20 @@
 	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];
+		if ( yy_current_state >= 91 )
+			yy_c = yy_meta[yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 100);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+	yy_is_jam = (yy_current_state == 90);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
+#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -1784,7 +1874,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -1801,14 +1891,14 @@
 					 */
 
 					/* Reset buffer status. */
-					code_restart(code_in );
+					yyrestart( yyin );
 
 					/*FALLTHROUGH*/
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( code_wrap( ) )
-						return EOF;
+					if ( yywrap(  ) )
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -1827,10 +1917,10 @@
 		}
 
 	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve code_text */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
 	(yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and code_lineno */
+/* %% [19.0] update BOL and yylineno */
 
 	return c;
 }
@@ -1844,28 +1934,31 @@
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void code_restart  (FILE * input_file )
+    void yyrestart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
 	if ( ! YY_CURRENT_BUFFER ){
-        code_ensure_buffer_stack ();
+        yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
-            code__create_buffer(code_in,YY_BUF_SIZE );
+            yy_create_buffer( yyin, YY_BUF_SIZE );
 	}
 
-	code__init_buffer(YY_CURRENT_BUFFER,input_file );
-	code__load_buffer_state( );
+	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+	yy_load_buffer_state(  );
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** 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 )
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1873,10 +1966,10 @@
     
 	/* TODO. We should be able to replace this entire function body
 	 * with
-	 *		code_pop_buffer_state();
-	 *		code_push_buffer_state(new_buffer);
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
      */
-	code_ensure_buffer_stack ();
+	yyensure_buffer_stack ();
 	if ( YY_CURRENT_BUFFER == new_buffer )
 		return;
 
@@ -1889,25 +1982,29 @@
 		}
 
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	code__load_buffer_state( );
+	yy_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
+	 * 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 code__load_buffer_state  (void)
+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;
-	code_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %if-c-only */
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	(yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -1918,39 +2015,42 @@
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE code__create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE yy_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 )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
+		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 *) code_alloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	code__init_buffer(b,file );
+	yy_init_buffer( b, file );
 
 	return b;
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Destroy the buffer.
- * @param b a buffer created with code__create_buffer()
+ * @param b a buffer created with yy_create_buffer()
  * 
  */
 /* %if-c-only */
-    void code__delete_buffer (YY_BUFFER_STATE  b )
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1963,17 +2063,17 @@
 		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		code_free((void *) b->yy_ch_buf  );
+		yyfree( (void *) b->yy_ch_buf  );
 
-	code_free((void *) b  );
+	yyfree( (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.
+ * such as during a yyrestart() or at EOF.
  */
 /* %if-c-only */
-    static void code__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1981,13 +2081,17 @@
 {
 	int oerrno = errno;
     
-	code__flush_buffer(b );
+	yy_flush_buffer( b );
 
+/* %if-c-only */
 	b->yy_input_file = file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	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.
+    /* 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){
@@ -2010,7 +2114,7 @@
  * 
  */
 /* %if-c-only */
-    void code__flush_buffer (YY_BUFFER_STATE  b )
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2033,7 +2137,7 @@
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
 	if ( b == YY_CURRENT_BUFFER )
-		code__load_buffer_state( );
+		yy_load_buffer_state(  );
 }
 
 /* %if-c-or-c++ */
@@ -2044,7 +2148,7 @@
  *  
  */
 /* %if-c-only */
-void code_push_buffer_state (YY_BUFFER_STATE new_buffer )
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2052,9 +2156,9 @@
     	if (new_buffer == NULL)
 		return;
 
-	code_ensure_buffer_stack();
+	yyensure_buffer_stack();
 
-	/* This block is copied from code__switch_to_buffer. */
+	/* This block is copied from yy_switch_to_buffer. */
 	if ( YY_CURRENT_BUFFER )
 		{
 		/* Flush out information for old buffer. */
@@ -2068,8 +2172,8 @@
 		(yy_buffer_stack_top)++;
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-	/* copied from code__switch_to_buffer. */
-	code__load_buffer_state( );
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state(  );
 	(yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -2080,7 +2184,7 @@
  *  
  */
 /* %if-c-only */
-void code_pop_buffer_state (void)
+void yypop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2088,13 +2192,13 @@
     	if (!YY_CURRENT_BUFFER)
 		return;
 
-	code__delete_buffer(YY_CURRENT_BUFFER );
+	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) {
-		code__load_buffer_state( );
+		yy_load_buffer_state(  );
 		(yy_did_buffer_switch_on_eof) = 1;
 	}
 }
@@ -2105,7 +2209,7 @@
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void code_ensure_buffer_stack (void)
+static void yyensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2118,15 +2222,15 @@
 		 * 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 = 1; /* After all that talk, this was set to 1 anyways... */
+		(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 code_ensure_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;
@@ -2135,15 +2239,15 @@
 	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 */;
+		yy_size_t 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) = (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 code_ensure_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*));
@@ -2157,9 +2261,9 @@
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object. 
+ * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE code__scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
 	YY_BUFFER_STATE b;
     
@@ -2167,53 +2271,53 @@
 	     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;
+		return NULL;
 
-	b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in code__scan_buffer()" );
+		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_size = (int) (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_input_file = NULL;
 	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  );
+	yy_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
+/** 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
- *       code__scan_bytes() instead.
+ *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE code__scan_string (yyconst char * yystr )
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
 {
     
-	return code__scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes( yystr, (int) strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to code_lex() will
+/** 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 code__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -2221,19 +2325,19 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) code_alloc(n  );
+	n = (yy_size_t) (_yybytes_len + 2);
+	buf = (char *) yyalloc( n  );
 	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in code__scan_bytes()" );
+		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 = code__scan_buffer(buf,n );
+	b = yy_scan_buffer( buf, n );
 	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in code__scan_bytes()" );
+		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.
@@ -2249,9 +2353,9 @@
 #endif
 
 /* %if-c-only */
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (const char* msg )
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+			fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -2264,14 +2368,14 @@
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up code_text. */ \
+		/* Undo effects of setting up yytext. */ \
         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; \
+		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'; \
-		code_leng = yyless_macro_arg; \
+		yyleng = yyless_macro_arg; \
 		} \
 	while ( 0 )
 
@@ -2284,82 +2388,82 @@
 /** Get the current line number.
  * 
  */
-int code_get_lineno  (void)
+int yyget_lineno  (void)
 {
-        
-    return code_lineno;
+    
+    return yylineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *code_get_in  (void)
+FILE *yyget_in  (void)
 {
-        return code_in;
+        return yyin;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *code_get_out  (void)
+FILE *yyget_out  (void)
 {
-        return code_out;
+        return yyout;
 }
 
 /** Get the length of the current token.
  * 
  */
-yy_size_t code_get_leng  (void)
+int yyget_leng  (void)
 {
-        return code_leng;
+        return yyleng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *code_get_text  (void)
+char *yyget_text  (void)
 {
-        return code_text;
+        return yytext;
 }
 
 /* %if-reentrant */
 /* %endif */
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void code_set_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    code_lineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
- * @see code__switch_to_buffer
+ * @see yy_switch_to_buffer
  */
-void code_set_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        code_in = in_str ;
+        yyin = _in_str ;
 }
 
-void code_set_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        code_out = out_str ;
+        yyout = _out_str ;
 }
 
-int code_get_debug  (void)
+int yyget_debug  (void)
 {
-        return code__flex_debug;
+        return yy_flex_debug;
 }
 
-void code_set_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        code__flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -2373,50 +2477,50 @@
 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.
+     * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    code_in = stdin;
-    code_out = stdout;
+    yyin = stdin;
+    yyout = stdout;
 #else
-    code_in = (FILE *) 0;
-    code_out = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * code_lex_init()
+     * yylex_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)
+/* 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){
-		code__delete_buffer(YY_CURRENT_BUFFER  );
+		yy_delete_buffer( YY_CURRENT_BUFFER  );
 		YY_CURRENT_BUFFER_LVALUE = NULL;
-		code_pop_buffer_state();
+		yypop_buffer_state();
 	}
 
 	/* Destroy the stack itself. */
-	code_free((yy_buffer_stack) );
+	yyfree((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. */
+     * yylex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -2430,18 +2534,19 @@
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
 {
-	register int i;
+		
+	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 )
+static int yy_flex_strlen (const char * s )
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -2449,13 +2554,14 @@
 }
 #endif
 
-void *code_alloc (yy_size_t  size )
+void *yyalloc (yy_size_t  size )
 {
-	return (void *) malloc( size );
+			return malloc(size);
 }
 
-void *code_realloc  (void * ptr, yy_size_t  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
@@ -2463,12 +2569,12 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
-void code_free (void * ptr )
+void yyfree (void * ptr )
 {
-	free( (char *) ptr );	/* see code_realloc() for (char *) cast */
+			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -2478,8 +2584,7 @@
 
 /* %ok-for-header */
 
-#line 294 "scan-code.l"
-
+#line 209 "/Users/akim/src/gnu/bison/src/scan-code.l"
 
 
 static inline bool
@@ -2491,17 +2596,14 @@
 static inline bool
 contains_dot_or_dash (const char* p)
 {
-  for (; *p; ++p)
-    if (is_dot_or_dash (*p))
-      return true;
-  return false;
+  return !!strpbrk (p, ".-");
 }
 
 /* Defines a variant of a symbolic name resolution. */
 typedef struct
 {
   /* Index in symbol list. */
-  unsigned symbol_index;
+  int symbol_index;
 
   /* Matched symbol id and loc. */
   uniqstr id;
@@ -2528,8 +2630,8 @@
 #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 int variant_table_size = 0;
+static int variant_count = 0;
 
 static variant *
 variant_table_grow (void)
@@ -2538,9 +2640,9 @@
   if (variant_count > variant_table_size)
     {
       while (variant_count > variant_table_size)
-	variant_table_size = 2 * variant_table_size + 3;
+        variant_table_size = 2 * variant_table_size + 3;
       variant_table = xnrealloc (variant_table, variant_table_size,
-				 sizeof *variant_table);
+                                 sizeof *variant_table);
     }
   return &variant_table[variant_count - 1];
 }
@@ -2553,28 +2655,21 @@
   variant_table_size = variant_count = 0;
 }
 
-static char *
-find_prefix_end (const char *prefix, char *begin, char *end)
+static char const *
+find_prefix_end (char const *prefix, char const *cp, char const *end)
 {
-  char *ptr = begin;
+  for (; *prefix && cp != end; ++prefix, ++cp)
+    if (*prefix != *cp)
+      return NULL;
 
-  for (; *prefix && ptr != end; ++prefix, ++ptr)
-    if (*prefix != *ptr)
-      return 0;
-
-  if (*prefix)
-    return 0;
-
-  return ptr;
+  return *prefix ? NULL : cp;
 }
 
 static variant *
-variant_add (uniqstr id, location id_loc, unsigned symbol_index,
-	     char *cp, char *cp_end, bool explicit_bracketing)
+variant_add (uniqstr id, location id_loc, int symbol_index,
+             char const *cp, char const *cp_end, bool explicit_bracketing)
 {
-  char *prefix_end;
-
-  prefix_end = find_prefix_end (id, cp, cp_end);
+  char const *prefix_end = find_prefix_end (id, cp, cp_end);
   if (prefix_end &&
       (prefix_end == cp_end ||
        (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
@@ -2592,7 +2687,7 @@
 }
 
 static const char *
-get_at_spec (unsigned symbol_index)
+get_at_spec(int symbol_index)
 {
   static char at_buf[20];
   if (symbol_index == 0)
@@ -2603,77 +2698,82 @@
 }
 
 static void
-show_sub_messages (const char* cp, bool explicit_bracketing,
-                   int midrule_rhs_index, char dollar_or_at,
-                   bool is_warning, unsigned indent)
+show_sub_message (warnings warning,
+                  const char* cp, bool explicit_bracketing,
+                  int midrule_rhs_index, char dollar_or_at,
+                  int indent, const variant *var)
 {
-  unsigned i;
+  const char *at_spec = get_at_spec (var->symbol_index);
 
-  for (i = 0; i < variant_count; ++i)
+  if (var->err == 0)
+    complain_indent (&var->loc, warning, &indent,
+                     _("refers to: %c%s at %s"), dollar_or_at,
+                     var->id, at_spec);
+  else
     {
-      const variant *var = &variant_table[i];
-      const char *at_spec = get_at_spec (var->symbol_index);
+      const char *id;
+      location id_loc;
 
-      if (var->err == 0)
+      if (var->hidden_by)
         {
-          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);
+          id = var->hidden_by->id;
+          id_loc = var->hidden_by->loc;
         }
       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;
+        {
+          id = var->id;
+          id_loc = var->loc;
+        }
 
-	  /* Create the explanation message. */
-	  obstack_init (&msg_buf);
+      const char *tail = explicit_bracketing ? "" : cp + strlen (var->id);
 
-	  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);
+      /* Create the explanation message. */
+      static struct obstack msg_buf;
+      obstack_init (&msg_buf);
 
-	  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, _("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);
 
-	  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));
+      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
-            complain_at_indent (id_loc, &indent, "%s",
-                                (char *) obstack_finish (&msg_buf));
-	  obstack_free (&msg_buf, 0);
-	}
+            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)
+        obstack_printf (&msg_buf,
+                        _(", cannot be accessed from midrule action at $%d"),
+                        midrule_rhs_index);
+
+      complain_indent (&id_loc, warning, &indent, "%s",
+                        obstack_finish0 (&msg_buf));
+      obstack_free (&msg_buf, 0);
     }
 }
 
+static void
+show_sub_messages (warnings warning,
+                   const char* cp, bool explicit_bracketing,
+                   int midrule_rhs_index, char dollar_or_at,
+                   int indent)
+{
+  for (int i = 0; i < variant_count; ++i)
+    show_sub_message (warning | silent,
+                      cp, explicit_bracketing,
+                      midrule_rhs_index, dollar_or_at,
+                      indent, &variant_table[i]);
+}
+
 /* Returned from "parse_ref" when the reference
    is inappropriate. */
 #define INVALID_REF (INT_MIN)
@@ -2685,92 +2785,70 @@
 /* Parse named or positional reference. In case of positional
    references, can return negative values for $-n "deep" stack
    accesses. */
-static long int
+static long
 parse_ref (char *cp, symbol_list *rule, int rule_length,
-	   int midrule_rhs_index, char *text, location text_loc,
-	   char dollar_or_at)
+           int midrule_rhs_index, char *text, const 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);
+      long num = strtol (cp, &cp, 10);
       if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	return num;
+        return num;
       else
-	{
-	  complain_at (text_loc, _("integer out of range: %s"),
-                       quote (text));
-	  return INVALID_REF;
-	}
+        {
+          complain (text_loc, complaint, _("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;
+  bool const explicit_bracketing = *cp == '[';
 
-      explicit_bracketing = true;
-    }
+  if (explicit_bracketing)
+    ++cp;
   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;
+    ref_tail_fields = strpbrk (cp, ".-");
 
-      explicit_bracketing = false;
-    }
+  char const *cp_end = strchr (cp, explicit_bracketing ? ']' : '\0');
 
   /* Add all relevant variants. */
   {
-    unsigned symbol_index;
+    int symbol_index;
+    symbol_list *l;
     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;
+        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;
+        variant *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,
+        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)
+  int valid_variants = 0;
+  int valid_variant_index = 0;
+  for (int i = 0; i < variant_count; ++i)
     {
       variant *var = &variant_table[i];
-      unsigned symbol_index = var->symbol_index;
+      int symbol_index = var->symbol_index;
 
-      /* Check visibility from mid-rule actions. */
+      /* Check visibility from midrule actions. */
       if (midrule_rhs_index != 0
-	  && (symbol_index == 0 || midrule_rhs_index < symbol_index))
+          && (symbol_index == 0 || midrule_rhs_index < symbol_index))
         var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
 
       /* Check correct bracketing. */
@@ -2792,55 +2870,52 @@
     {
     case 0:
       {
-        unsigned len = (explicit_bracketing || !ref_tail_fields) ?
+        int len = (explicit_bracketing || !ref_tail_fields) ?
           cp_end - cp : ref_tail_fields - cp;
-        unsigned indent = 0;
+        int indent = 0;
 
-        complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
-                            quote (text));
+        complain_indent (text_loc, complaint, &indent,
+                         _("invalid reference: %s"), quote (text));
         indent += SUB_INDENT;
         if (len == 0)
           {
-            location sym_loc = text_loc;
+            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);
+            complain_indent (&sym_loc, complaint, &indent,
+                             _("syntax error after '%c', expecting integer, "
+                               "letter, '_', '[', or '$'"),
+                             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);
-          }
+          complain_indent (&rule->rhs_loc, complaint, &indent,
+                           _("symbol not found in production before $%d: "
+                             "%.*s"),
+                           midrule_rhs_index, len, cp);
         else
-          {
-            const char *format =
-              _("symbol not found in production: %.*s");
-            complain_at_indent (rule->location, &indent, format,
-                                len, cp);
-          }
+          complain_indent (&rule->rhs_loc, complaint, &indent,
+                           _("symbol not found in production: %.*s"),
+                           len, cp);
 
         if (variant_count > 0)
-          show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
-                             dollar_or_at, false, indent);
+          show_sub_messages (complaint,
+                             cp, explicit_bracketing, midrule_rhs_index,
+                             dollar_or_at, indent);
         return INVALID_REF;
       }
     case 1:
       {
-        unsigned indent = 0;
+        int 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);
+            complain_indent (text_loc, Wother, &indent,
+                             _("misleading reference: %s"), quote (text));
+            show_sub_messages (Wother,
+                               cp, explicit_bracketing, midrule_rhs_index,
+                               dollar_or_at, indent + SUB_INDENT);
           }
         {
-          unsigned symbol_index =
+          int symbol_index =
             variant_table[valid_variant_index].symbol_index;
           return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
         }
@@ -2848,17 +2923,15 @@
     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);
+        int indent = 0;
+        complain_indent (text_loc, complaint, &indent,
+                         _("ambiguous reference: %s"), quote (text));
+        show_sub_messages (complaint,
+                           cp, explicit_bracketing, midrule_rhs_index,
+                           dollar_or_at, indent + SUB_INDENT);
         return INVALID_REF;
       }
     }
-
-  /* Not reachable. */
-  return INVALID_REF;
 }
 
 /* Keeps track of the maximum number of semantic values to the left of
@@ -2874,19 +2947,21 @@
 static
 char *
 fetch_type_name (char *cp, char const **type_name,
-                 location dollar_loc)
+                 const location *dollar_loc)
 {
   if (*cp == '<')
     {
       *type_name = ++cp;
-      while (*cp != '>')
-	++cp;
+      /* Series of non-'>' or "->".  */
+      while (*cp != '>' || cp[-1] == '-')
+        ++cp;
 
       /* The '>' symbol will be later replaced by '\0'. Original
-	 'text' is needed for error messages. */
+         'text' is needed for error messages. */
       ++cp;
       if (untyped_var_seen)
-	complain_at (dollar_loc, _("explicit type given in untyped grammar"));
+        complain (dollar_loc, complaint,
+                  _("explicit type given in untyped grammar"));
       tag_seen = true;
     }
   return cp;
@@ -2901,13 +2976,10 @@
 `------------------------------------------------------------------*/
 
 static void
-handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
+handle_action_dollar (symbol_list *rule, char *text, const 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)
     {
@@ -2920,13 +2992,12 @@
       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. */
+  /* The type name if explicit, otherwise left null. */
+  char const *type_name = NULL;
+  char *cp = fetch_type_name (text + 1, &type_name, dollar_loc);
+  int n = parse_ref (cp, effective_rule, effective_rule_length,
+                     rule->midrule_parent_rhs_index, text, dollar_loc, '$');
+  /* End type_name.  Don't do it ealier: parse_ref depends on TEXT.  */
   if (type_name)
     cp[-1] = '\0';
 
@@ -2936,55 +3007,75 @@
       break;
 
     case LHS_REF:
-      if (!type_name)
-	type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
+      {
+        symbol_list *sym = symbol_list_n_get (rule, 0);
+        if (!type_name
+            && !sym->content.sym->content->type_name)
+          {
+            if (union_seen || tag_seen)
+              {
+                if (rule->midrule_parent_rule)
+                  complain (dollar_loc, complaint,
+                            _("$$ for the midrule at $%d of %s"
+                              " has no declared type"),
+                            rule->midrule_parent_rhs_index,
+                            quote (effective_rule->content.sym->tag));
+                else
+                  complain (dollar_loc, complaint,
+                            _("$$ of %s has no declared type"),
+                            quote (rule->content.sym->tag));
+              }
+            else
+              untyped_var_seen = true;
+          }
 
-      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;
+        obstack_printf (&obstack_for_string, "]b4_lhs_value(orig %d, ",
+                        sym->content.sym->content->number);
+        obstack_quote (&obstack_for_string, type_name);
+        obstack_sgrow (&obstack_for_string, ")[");
+        rule->action_props.is_value_used = true;
+      }
       break;
 
+      /* Reference to a RHS symbol.  */
     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;
-        }
+      {
+        if (max_left_semantic_context < 1 - n)
+          max_left_semantic_context = 1 - n;
+        symbol_list *sym = 0 < n ? symbol_list_n_get (effective_rule, n) : NULL;
+        if (!type_name
+            && (!sym || !sym->content.sym->content->type_name))
+          {
+            if (union_seen || tag_seen)
+              complain (dollar_loc, complaint,
+                        _("$%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;
+        obstack_printf (&obstack_for_string,
+                        "]b4_rhs_value(%d, %d, ",
+                        effective_rule_length, n);
+        if (sym)
+          obstack_printf (&obstack_for_string, "%s%d, ",
+                          sym->content.sym->content->class == nterm_sym ? "orig " : "",
+                          sym->content.sym->content->number);
+        else
+          obstack_sgrow (&obstack_for_string, "[], ");
+
+        obstack_quote (&obstack_for_string, type_name);
+        obstack_sgrow (&obstack_for_string, ")[");
+        if (0 < n)
+          {
+            if (muscle_percent_define_ifdef ("api.value.automove")
+                && sym->action_props.is_value_used)
+              complain (dollar_loc, Wother,
+                        _("multiple occurrences of $%d with api.value.automove"),
+                        n);
+            sym->action_props.is_value_used = true;
+          }
+      }
       break;
     }
 }
@@ -2996,12 +3087,10 @@
 `------------------------------------------------------*/
 
 static void
-handle_action_at (symbol_list *rule, char *text, location at_loc)
+handle_action_at (symbol_list *rule, char *text, const location *at_loc)
 {
-  char *cp = text + 1;
   symbol_list *effective_rule;
   int effective_rule_length;
-  int n;
 
   if (rule->midrule_parent_rule)
     {
@@ -3014,10 +3103,10 @@
       effective_rule_length = symbol_list_length (rule->next);
     }
 
-  locations_flag = true;
+  muscle_percent_define_ensure ("locations", *at_loc, true);
 
-  n = parse_ref (cp, effective_rule, effective_rule_length,
-                 rule->midrule_parent_rhs_index, text, at_loc, '@');
+  int n = parse_ref (text + 1, effective_rule, effective_rule_length,
+                     rule->midrule_parent_rhs_index, text, at_loc, '@');
   switch (n)
     {
     case INVALID_REF:
@@ -3029,7 +3118,7 @@
 
     default:
       obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
-		      effective_rule_length, n);
+                      effective_rule_length, n);
       break;
     }
 }
@@ -3039,25 +3128,24 @@
 | Initialize the scanner.  |
 `-------------------------*/
 
-/* Translate the dollars and ats in \a self, in the context \a sc_context
-   (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL).  */
+/* Translate the '$...' and '@...' 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;
+      yy_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);
+  yy_switch_to_buffer (yy_scan_string (self->code));
+  char *res = code_lex (self, sc_context);
+  yy_delete_buffer (YY_CURRENT_BUFFER);
 
   return res;
 }
@@ -3072,43 +3160,42 @@
   *self = code_props_none;
 }
 
-code_props const code_props_none = CODE_PROPS_NONE_INIT;
+code_props code_props_none = CODE_PROPS_NONE_INIT;
 
 void
 code_props_plain_init (code_props *self, char const *code,
-		       location code_loc)
+                       location code_loc)
 {
+  code_props_none_init (self);
   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)
 {
+  code_props_none_init (self);
   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)
+                             named_ref *name, uniqstr type,
+                             bool is_predicate)
 {
+  code_props_none_init (self);
   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;
+  self->type = type;
+  self->is_predicate = is_predicate;
 }
 
 void
@@ -3116,17 +3203,17 @@
 {
   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;
+    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;
     }
 }
 
@@ -3143,6 +3230,6 @@
   variant_table_free ();
 
   /* Reclaim Flex's buffers.  */
-  code_lex_destroy ();
+  yylex_destroy ();
 }
 
diff --git a/src/scan-code.h b/src/scan-code.h
index c8d554d..483fe9b 100644
--- a/src/scan-code.h
+++ b/src/scan-code.h
@@ -1,6 +1,7 @@
 /* Bison code properties structure and scanner.
 
-   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -22,6 +23,7 @@
 
 # include "location.h"
 # include "named-ref.h"
+# include "uniqstr.h"
 
 struct symbol_list;
 
@@ -66,11 +68,25 @@
    */
   bool is_value_used;
 
+  /**
+   * \c true iff this code is an action that is not to be deferred in
+   * a non-deterministic parser.
+   */
+  bool is_predicate;
+
+  /**
+   * Whether this is actually used (i.e., not completely masked by
+   * other code props).  */
+  bool is_used;
+
   /** \c NULL iff \c code_props::kind is not \c CODE_PROPS_RULE_ACTION.  */
   struct symbol_list *rule;
 
-  /* Named reference. */
+  /** Named reference. */
   named_ref *named_ref;
+
+  /** Type, for midrule actions.  */
+  uniqstr type;
 } code_props;
 
 /**
@@ -82,11 +98,21 @@
 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}
+# define CODE_PROPS_NONE_INIT                   \
+  {                                             \
+    /* .kind = */ CODE_PROPS_NONE,              \
+    /* .code = */ NULL,                         \
+    /* .location = */ EMPTY_LOCATION_INIT,      \
+    /* .is_value_used = */ false,               \
+    /* .is_predicate = */ false,                \
+    /* .is_used = */ false,                     \
+    /* .rule = */ NULL,                         \
+    /* .named_ref = */ NULL,                    \
+    /* .type = */ NULL,                         \
+  }
 
 /** Initialized by \c CODE_PROPS_NONE_INIT with no further modification.  */
-extern code_props const code_props_none;
+extern code_props code_props_none;
 
 /**
  * \pre
@@ -137,7 +163,8 @@
  */
 void code_props_rule_action_init (code_props *self, char const *code,
                                   location code_loc, struct symbol_list *rule,
-                                  named_ref *name);
+                                  named_ref *name, uniqstr type,
+                                  bool is_predicate);
 
 /**
  * \pre
diff --git a/src/scan-code.l b/src/scan-code.l
index 560d343..563baf5 100644
--- a/src/scan-code.l
+++ b/src/scan-code.l
@@ -1,6 +1,6 @@
 /* Bison Action Scanner                             -*- C -*-
 
-   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,24 +21,25 @@
 %option prefix="code_" outfile="lex.yy.c"
 
 %{
+#include <c-ctype.h>
+#include <get-errno.h>
+#include <quote.h>
+
+#include <src/complain.h>
+#include <src/getargs.h>
+#include <src/muscle-tab.h>
+#include <src/reader.h>
+#include <src/scan-code.h>
+#include <src/symlist.h>
+
+#define FLEX_PREFIX(Id) code_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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)
@@ -47,17 +48,18 @@
 #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);
+                              const 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);
+                                  const location *dollar_loc);
+static void handle_action_at (symbol_list *rule, char *cp,
+                              const 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;
+static location current_loc;
+static location *loc = &current_loc;
 
 /* A string representing the most recent translation.  */
 static char *last_string;
@@ -77,49 +79,30 @@
 
 /* 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>]+
+   NUL and newline, as this simplifies our implementation.  We allow
+   "->" as a means to dereference a pointer.  */
+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)*
+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])*
+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);
+        || sc_context == SC_RULE_ACTION
+        || sc_context == INITIAL);
   BEGIN sc_context;
 %}
 
@@ -139,8 +122,8 @@
 
 <SC_LINE_COMMENT>
 {
-  "\n"		 STRING_GROW; BEGIN sc_context;
-  {splice}	 STRING_GROW;
+  "\n"           STRING_GROW; BEGIN sc_context;
+  {splice}       STRING_GROW;
 }
 
 
@@ -150,48 +133,30 @@
 
 <SC_CHARACTER,SC_STRING>
 {
-  {splice}|\\{splice}.	STRING_GROW;
+  {splice}|\\{splice}.  STRING_GROW;
 }
 
 <SC_CHARACTER>
 {
-  "'"		STRING_GROW; BEGIN sc_context;
+  "'"           STRING_GROW; BEGIN sc_context;
 }
 
 <SC_STRING>
 {
-  "\""		STRING_GROW; BEGIN sc_context;
+  "\""          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;
-  }
+  "'"              STRING_GROW; BEGIN SC_CHARACTER;
+  "\""             STRING_GROW; BEGIN SC_STRING;
+  "/"{splice}"*"   STRING_GROW; BEGIN SC_COMMENT;
+  "/"{splice}"/"   STRING_GROW; BEGIN SC_LINE_COMMENT;
+
   [$@]  {
-    warn_at (*loc, _("stray '%s'"), yytext);
+    complain (loc, Wother, _("stray '%s'"), yytext);
     obstack_escape (&obstack_for_string, yytext);
-    need_semicolon = true;
-  }
-  [\[\]]  {
-    obstack_escape (&obstack_for_string, yytext);
-    need_semicolon = true;
   }
 }
 
@@ -199,74 +164,23 @@
 {
   "$"("<"{tag}">")?{ref}  {
     ref_tail_fields = NULL;
-    handle_action_dollar (self->rule, yytext, *loc);
+    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);
+    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;
+    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, ")[");
@@ -274,7 +188,7 @@
   }
   "@$" {
     obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
-    locations_flag = true;
+    muscle_percent_define_ensure("locations", *loc, true);
   }
 }
 
@@ -287,7 +201,7 @@
   /* By default, grow the string obstack with the input.  */
   .|\n        STRING_GROW;
 
-  /* End of processing. */
+ /* End of processing. */
   <<EOF>>     STRING_FINISH; return last_string;
 }
 
@@ -302,17 +216,14 @@
 static inline bool
 contains_dot_or_dash (const char* p)
 {
-  for (; *p; ++p)
-    if (is_dot_or_dash (*p))
-      return true;
-  return false;
+  return !!strpbrk (p, ".-");
 }
 
 /* Defines a variant of a symbolic name resolution. */
 typedef struct
 {
   /* Index in symbol list. */
-  unsigned symbol_index;
+  int symbol_index;
 
   /* Matched symbol id and loc. */
   uniqstr id;
@@ -339,8 +250,8 @@
 #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 int variant_table_size = 0;
+static int variant_count = 0;
 
 static variant *
 variant_table_grow (void)
@@ -349,9 +260,9 @@
   if (variant_count > variant_table_size)
     {
       while (variant_count > variant_table_size)
-	variant_table_size = 2 * variant_table_size + 3;
+        variant_table_size = 2 * variant_table_size + 3;
       variant_table = xnrealloc (variant_table, variant_table_size,
-				 sizeof *variant_table);
+                                 sizeof *variant_table);
     }
   return &variant_table[variant_count - 1];
 }
@@ -364,28 +275,21 @@
   variant_table_size = variant_count = 0;
 }
 
-static char *
-find_prefix_end (const char *prefix, char *begin, char *end)
+static char const *
+find_prefix_end (char const *prefix, char const *cp, char const *end)
 {
-  char *ptr = begin;
+  for (; *prefix && cp != end; ++prefix, ++cp)
+    if (*prefix != *cp)
+      return NULL;
 
-  for (; *prefix && ptr != end; ++prefix, ++ptr)
-    if (*prefix != *ptr)
-      return 0;
-
-  if (*prefix)
-    return 0;
-
-  return ptr;
+  return *prefix ? NULL : cp;
 }
 
 static variant *
-variant_add (uniqstr id, location id_loc, unsigned symbol_index,
-	     char *cp, char *cp_end, bool explicit_bracketing)
+variant_add (uniqstr id, location id_loc, int symbol_index,
+             char const *cp, char const *cp_end, bool explicit_bracketing)
 {
-  char *prefix_end;
-
-  prefix_end = find_prefix_end (id, cp, cp_end);
+  char const *prefix_end = find_prefix_end (id, cp, cp_end);
   if (prefix_end &&
       (prefix_end == cp_end ||
        (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
@@ -403,7 +307,7 @@
 }
 
 static const char *
-get_at_spec (unsigned symbol_index)
+get_at_spec(int symbol_index)
 {
   static char at_buf[20];
   if (symbol_index == 0)
@@ -414,77 +318,82 @@
 }
 
 static void
-show_sub_messages (const char* cp, bool explicit_bracketing,
-                   int midrule_rhs_index, char dollar_or_at,
-                   bool is_warning, unsigned indent)
+show_sub_message (warnings warning,
+                  const char* cp, bool explicit_bracketing,
+                  int midrule_rhs_index, char dollar_or_at,
+                  int indent, const variant *var)
 {
-  unsigned i;
+  const char *at_spec = get_at_spec (var->symbol_index);
 
-  for (i = 0; i < variant_count; ++i)
+  if (var->err == 0)
+    complain_indent (&var->loc, warning, &indent,
+                     _("refers to: %c%s at %s"), dollar_or_at,
+                     var->id, at_spec);
+  else
     {
-      const variant *var = &variant_table[i];
-      const char *at_spec = get_at_spec (var->symbol_index);
+      const char *id;
+      location id_loc;
 
-      if (var->err == 0)
+      if (var->hidden_by)
         {
-          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);
+          id = var->hidden_by->id;
+          id_loc = var->hidden_by->loc;
         }
       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;
+        {
+          id = var->id;
+          id_loc = var->loc;
+        }
 
-	  /* Create the explanation message. */
-	  obstack_init (&msg_buf);
+      const char *tail = explicit_bracketing ? "" : cp + strlen (var->id);
 
-	  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);
+      /* Create the explanation message. */
+      static struct obstack msg_buf;
+      obstack_init (&msg_buf);
 
-	  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, _("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);
 
-	  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));
+      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
-            complain_at_indent (id_loc, &indent, "%s",
-                                (char *) obstack_finish (&msg_buf));
-	  obstack_free (&msg_buf, 0);
-	}
+            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)
+        obstack_printf (&msg_buf,
+                        _(", cannot be accessed from midrule action at $%d"),
+                        midrule_rhs_index);
+
+      complain_indent (&id_loc, warning, &indent, "%s",
+                        obstack_finish0 (&msg_buf));
+      obstack_free (&msg_buf, 0);
     }
 }
 
+static void
+show_sub_messages (warnings warning,
+                   const char* cp, bool explicit_bracketing,
+                   int midrule_rhs_index, char dollar_or_at,
+                   int indent)
+{
+  for (int i = 0; i < variant_count; ++i)
+    show_sub_message (warning | silent,
+                      cp, explicit_bracketing,
+                      midrule_rhs_index, dollar_or_at,
+                      indent, &variant_table[i]);
+}
+
 /* Returned from "parse_ref" when the reference
    is inappropriate. */
 #define INVALID_REF (INT_MIN)
@@ -496,92 +405,70 @@
 /* Parse named or positional reference. In case of positional
    references, can return negative values for $-n "deep" stack
    accesses. */
-static long int
+static long
 parse_ref (char *cp, symbol_list *rule, int rule_length,
-	   int midrule_rhs_index, char *text, location text_loc,
-	   char dollar_or_at)
+           int midrule_rhs_index, char *text, const 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);
+      long num = strtol (cp, &cp, 10);
       if (1 - INT_MAX + rule_length <= num && num <= rule_length)
-	return num;
+        return num;
       else
-	{
-	  complain_at (text_loc, _("integer out of range: %s"),
-                       quote (text));
-	  return INVALID_REF;
-	}
+        {
+          complain (text_loc, complaint, _("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;
+  bool const explicit_bracketing = *cp == '[';
 
-      explicit_bracketing = true;
-    }
+  if (explicit_bracketing)
+    ++cp;
   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;
+    ref_tail_fields = strpbrk (cp, ".-");
 
-      explicit_bracketing = false;
-    }
+  char const *cp_end = strchr (cp, explicit_bracketing ? ']' : '\0');
 
   /* Add all relevant variants. */
   {
-    unsigned symbol_index;
+    int symbol_index;
+    symbol_list *l;
     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;
+        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;
+        variant *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,
+        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)
+  int valid_variants = 0;
+  int valid_variant_index = 0;
+  for (int i = 0; i < variant_count; ++i)
     {
       variant *var = &variant_table[i];
-      unsigned symbol_index = var->symbol_index;
+      int symbol_index = var->symbol_index;
 
-      /* Check visibility from mid-rule actions. */
+      /* Check visibility from midrule actions. */
       if (midrule_rhs_index != 0
-	  && (symbol_index == 0 || midrule_rhs_index < symbol_index))
+          && (symbol_index == 0 || midrule_rhs_index < symbol_index))
         var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
 
       /* Check correct bracketing. */
@@ -603,55 +490,52 @@
     {
     case 0:
       {
-        unsigned len = (explicit_bracketing || !ref_tail_fields) ?
+        int len = (explicit_bracketing || !ref_tail_fields) ?
           cp_end - cp : ref_tail_fields - cp;
-        unsigned indent = 0;
+        int indent = 0;
 
-        complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
-                            quote (text));
+        complain_indent (text_loc, complaint, &indent,
+                         _("invalid reference: %s"), quote (text));
         indent += SUB_INDENT;
         if (len == 0)
           {
-            location sym_loc = text_loc;
+            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);
+            complain_indent (&sym_loc, complaint, &indent,
+                             _("syntax error after '%c', expecting integer, "
+                               "letter, '_', '[', or '$'"),
+                             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);
-          }
+          complain_indent (&rule->rhs_loc, complaint, &indent,
+                           _("symbol not found in production before $%d: "
+                             "%.*s"),
+                           midrule_rhs_index, len, cp);
         else
-          {
-            const char *format =
-              _("symbol not found in production: %.*s");
-            complain_at_indent (rule->location, &indent, format,
-                                len, cp);
-          }
+          complain_indent (&rule->rhs_loc, complaint, &indent,
+                           _("symbol not found in production: %.*s"),
+                           len, cp);
 
         if (variant_count > 0)
-          show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
-                             dollar_or_at, false, indent);
+          show_sub_messages (complaint,
+                             cp, explicit_bracketing, midrule_rhs_index,
+                             dollar_or_at, indent);
         return INVALID_REF;
       }
     case 1:
       {
-        unsigned indent = 0;
+        int 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);
+            complain_indent (text_loc, Wother, &indent,
+                             _("misleading reference: %s"), quote (text));
+            show_sub_messages (Wother,
+                               cp, explicit_bracketing, midrule_rhs_index,
+                               dollar_or_at, indent + SUB_INDENT);
           }
         {
-          unsigned symbol_index =
+          int symbol_index =
             variant_table[valid_variant_index].symbol_index;
           return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
         }
@@ -659,17 +543,15 @@
     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);
+        int indent = 0;
+        complain_indent (text_loc, complaint, &indent,
+                         _("ambiguous reference: %s"), quote (text));
+        show_sub_messages (complaint,
+                           cp, explicit_bracketing, midrule_rhs_index,
+                           dollar_or_at, indent + SUB_INDENT);
         return INVALID_REF;
       }
     }
-
-  /* Not reachable. */
-  return INVALID_REF;
 }
 
 /* Keeps track of the maximum number of semantic values to the left of
@@ -685,19 +567,21 @@
 static
 char *
 fetch_type_name (char *cp, char const **type_name,
-                 location dollar_loc)
+                 const location *dollar_loc)
 {
   if (*cp == '<')
     {
       *type_name = ++cp;
-      while (*cp != '>')
-	++cp;
+      /* Series of non-'>' or "->".  */
+      while (*cp != '>' || cp[-1] == '-')
+        ++cp;
 
       /* The '>' symbol will be later replaced by '\0'. Original
-	 'text' is needed for error messages. */
+         'text' is needed for error messages. */
       ++cp;
       if (untyped_var_seen)
-	complain_at (dollar_loc, _("explicit type given in untyped grammar"));
+        complain (dollar_loc, complaint,
+                  _("explicit type given in untyped grammar"));
       tag_seen = true;
     }
   return cp;
@@ -712,13 +596,10 @@
 `------------------------------------------------------------------*/
 
 static void
-handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
+handle_action_dollar (symbol_list *rule, char *text, const 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)
     {
@@ -731,13 +612,12 @@
       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. */
+  /* The type name if explicit, otherwise left null. */
+  char const *type_name = NULL;
+  char *cp = fetch_type_name (text + 1, &type_name, dollar_loc);
+  int n = parse_ref (cp, effective_rule, effective_rule_length,
+                     rule->midrule_parent_rhs_index, text, dollar_loc, '$');
+  /* End type_name.  Don't do it ealier: parse_ref depends on TEXT.  */
   if (type_name)
     cp[-1] = '\0';
 
@@ -747,55 +627,75 @@
       break;
 
     case LHS_REF:
-      if (!type_name)
-	type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
+      {
+        symbol_list *sym = symbol_list_n_get (rule, 0);
+        if (!type_name
+            && !sym->content.sym->content->type_name)
+          {
+            if (union_seen || tag_seen)
+              {
+                if (rule->midrule_parent_rule)
+                  complain (dollar_loc, complaint,
+                            _("$$ for the midrule at $%d of %s"
+                              " has no declared type"),
+                            rule->midrule_parent_rhs_index,
+                            quote (effective_rule->content.sym->tag));
+                else
+                  complain (dollar_loc, complaint,
+                            _("$$ of %s has no declared type"),
+                            quote (rule->content.sym->tag));
+              }
+            else
+              untyped_var_seen = true;
+          }
 
-      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;
+        obstack_printf (&obstack_for_string, "]b4_lhs_value(orig %d, ",
+                        sym->content.sym->content->number);
+        obstack_quote (&obstack_for_string, type_name);
+        obstack_sgrow (&obstack_for_string, ")[");
+        rule->action_props.is_value_used = true;
+      }
       break;
 
+      /* Reference to a RHS symbol.  */
     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;
-        }
+      {
+        if (max_left_semantic_context < 1 - n)
+          max_left_semantic_context = 1 - n;
+        symbol_list *sym = 0 < n ? symbol_list_n_get (effective_rule, n) : NULL;
+        if (!type_name
+            && (!sym || !sym->content.sym->content->type_name))
+          {
+            if (union_seen || tag_seen)
+              complain (dollar_loc, complaint,
+                        _("$%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;
+        obstack_printf (&obstack_for_string,
+                        "]b4_rhs_value(%d, %d, ",
+                        effective_rule_length, n);
+        if (sym)
+          obstack_printf (&obstack_for_string, "%s%d, ",
+                          sym->content.sym->content->class == nterm_sym ? "orig " : "",
+                          sym->content.sym->content->number);
+        else
+          obstack_sgrow (&obstack_for_string, "[], ");
+
+        obstack_quote (&obstack_for_string, type_name);
+        obstack_sgrow (&obstack_for_string, ")[");
+        if (0 < n)
+          {
+            if (muscle_percent_define_ifdef ("api.value.automove")
+                && sym->action_props.is_value_used)
+              complain (dollar_loc, Wother,
+                        _("multiple occurrences of $%d with api.value.automove"),
+                        n);
+            sym->action_props.is_value_used = true;
+          }
+      }
       break;
     }
 }
@@ -807,12 +707,10 @@
 `------------------------------------------------------*/
 
 static void
-handle_action_at (symbol_list *rule, char *text, location at_loc)
+handle_action_at (symbol_list *rule, char *text, const location *at_loc)
 {
-  char *cp = text + 1;
   symbol_list *effective_rule;
   int effective_rule_length;
-  int n;
 
   if (rule->midrule_parent_rule)
     {
@@ -825,10 +723,10 @@
       effective_rule_length = symbol_list_length (rule->next);
     }
 
-  locations_flag = true;
+  muscle_percent_define_ensure ("locations", *at_loc, true);
 
-  n = parse_ref (cp, effective_rule, effective_rule_length,
-                 rule->midrule_parent_rhs_index, text, at_loc, '@');
+  int n = parse_ref (text + 1, effective_rule, effective_rule_length,
+                     rule->midrule_parent_rhs_index, text, at_loc, '@');
   switch (n)
     {
     case INVALID_REF:
@@ -840,7 +738,7 @@
 
     default:
       obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
-		      effective_rule_length, n);
+                      effective_rule_length, n);
       break;
     }
 }
@@ -850,13 +748,12 @@
 | Initialize the scanner.  |
 `-------------------------*/
 
-/* Translate the dollars and ats in \a self, in the context \a sc_context
-   (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL).  */
+/* Translate the '$...' and '@...' 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)
     {
@@ -867,7 +764,7 @@
 
   loc->start = loc->end = self->location.start;
   yy_switch_to_buffer (yy_scan_string (self->code));
-  res = code_lex (self, sc_context);
+  char *res = code_lex (self, sc_context);
   yy_delete_buffer (YY_CURRENT_BUFFER);
 
   return res;
@@ -883,43 +780,42 @@
   *self = code_props_none;
 }
 
-code_props const code_props_none = CODE_PROPS_NONE_INIT;
+code_props code_props_none = CODE_PROPS_NONE_INIT;
 
 void
 code_props_plain_init (code_props *self, char const *code,
-		       location code_loc)
+                       location code_loc)
 {
+  code_props_none_init (self);
   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)
 {
+  code_props_none_init (self);
   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)
+                             named_ref *name, uniqstr type,
+                             bool is_predicate)
 {
+  code_props_none_init (self);
   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;
+  self->type = type;
+  self->is_predicate = is_predicate;
 }
 
 void
@@ -927,17 +823,17 @@
 {
   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;
+    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;
     }
 }
 
diff --git a/src/scan-gram-c.c b/src/scan-gram-c.c
index 6bacac6..2b4fc67 100644
--- a/src/scan-gram-c.c
+++ b/src/scan-gram-c.c
@@ -1,3 +1,3 @@
 #include <config.h>
 #include "system.h"
-#include "scan-gram.c"
+#include "src/scan-gram.c"
diff --git a/src/scan-gram.c b/src/scan-gram.c
index 41d99a5..91a94c5 100644
--- a/src/scan-gram.c
+++ b/src/scan-gram.c
@@ -1,22 +1,27 @@
-#line 2 "scan-gram.c"
+#line 1 "src/scan-gram.c"
 
-#line 4 "scan-gram.c"
+#line 3 "src/scan-gram.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 gram__create_buffer
 #define yy_delete_buffer gram__delete_buffer
-#define yy_flex_debug gram__flex_debug
+#define yy_scan_buffer gram__scan_buffer
+#define yy_scan_string gram__scan_string
+#define yy_scan_bytes gram__scan_bytes
 #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 yypush_buffer_state gram_push_buffer_state
+#define yypop_buffer_state gram_pop_buffer_state
+#define yyensure_buffer_stack gram_ensure_buffer_stack
+#define yy_flex_debug gram__flex_debug
 #define yyin gram_in
 #define yyleng gram_leng
 #define yylex gram_lex
@@ -35,8 +40,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -45,11 +50,244 @@
 /* %endif */
 
 /* %if-c-only */
-    
+#ifdef yy_create_buffer
+#define gram__create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer gram__create_buffer
+#endif
+
+#ifdef yy_delete_buffer
+#define gram__delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer gram__delete_buffer
+#endif
+
+#ifdef yy_scan_buffer
+#define gram__scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer gram__scan_buffer
+#endif
+
+#ifdef yy_scan_string
+#define gram__scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string gram__scan_string
+#endif
+
+#ifdef yy_scan_bytes
+#define gram__scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes gram__scan_bytes
+#endif
+
+#ifdef yy_init_buffer
+#define gram__init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer gram__init_buffer
+#endif
+
+#ifdef yy_flush_buffer
+#define gram__flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer gram__flush_buffer
+#endif
+
+#ifdef yy_load_buffer_state
+#define gram__load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state gram__load_buffer_state
+#endif
+
+#ifdef yy_switch_to_buffer
+#define gram__switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer gram__switch_to_buffer
+#endif
+
+#ifdef yypush_buffer_state
+#define gram_push_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state gram_push_buffer_state
+#endif
+
+#ifdef yypop_buffer_state
+#define gram_pop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state gram_pop_buffer_state
+#endif
+
+#ifdef yyensure_buffer_stack
+#define gram_ensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack gram_ensure_buffer_stack
+#endif
+
+#ifdef yylex
+#define gram_lex_ALREADY_DEFINED
+#else
+#define yylex gram_lex
+#endif
+
+#ifdef yyrestart
+#define gram_restart_ALREADY_DEFINED
+#else
+#define yyrestart gram_restart
+#endif
+
+#ifdef yylex_init
+#define gram_lex_init_ALREADY_DEFINED
+#else
+#define yylex_init gram_lex_init
+#endif
+
+#ifdef yylex_init_extra
+#define gram_lex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra gram_lex_init_extra
+#endif
+
+#ifdef yylex_destroy
+#define gram_lex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy gram_lex_destroy
+#endif
+
+#ifdef yyget_debug
+#define gram_get_debug_ALREADY_DEFINED
+#else
+#define yyget_debug gram_get_debug
+#endif
+
+#ifdef yyset_debug
+#define gram_set_debug_ALREADY_DEFINED
+#else
+#define yyset_debug gram_set_debug
+#endif
+
+#ifdef yyget_extra
+#define gram_get_extra_ALREADY_DEFINED
+#else
+#define yyget_extra gram_get_extra
+#endif
+
+#ifdef yyset_extra
+#define gram_set_extra_ALREADY_DEFINED
+#else
+#define yyset_extra gram_set_extra
+#endif
+
+#ifdef yyget_in
+#define gram_get_in_ALREADY_DEFINED
+#else
+#define yyget_in gram_get_in
+#endif
+
+#ifdef yyset_in
+#define gram_set_in_ALREADY_DEFINED
+#else
+#define yyset_in gram_set_in
+#endif
+
+#ifdef yyget_out
+#define gram_get_out_ALREADY_DEFINED
+#else
+#define yyget_out gram_get_out
+#endif
+
+#ifdef yyset_out
+#define gram_set_out_ALREADY_DEFINED
+#else
+#define yyset_out gram_set_out
+#endif
+
+#ifdef yyget_leng
+#define gram_get_leng_ALREADY_DEFINED
+#else
+#define yyget_leng gram_get_leng
+#endif
+
+#ifdef yyget_text
+#define gram_get_text_ALREADY_DEFINED
+#else
+#define yyget_text gram_get_text
+#endif
+
+#ifdef yyget_lineno
+#define gram_get_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno gram_get_lineno
+#endif
+
+#ifdef yyset_lineno
+#define gram_set_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno gram_set_lineno
+#endif
+
+#ifdef yywrap
+#define gram_wrap_ALREADY_DEFINED
+#else
+#define yywrap gram_wrap
+#endif
+
 /* %endif */
 
+#ifdef yyalloc
+#define gram_alloc_ALREADY_DEFINED
+#else
+#define yyalloc gram_alloc
+#endif
+
+#ifdef yyrealloc
+#define gram_realloc_ALREADY_DEFINED
+#else
+#define yyrealloc gram_realloc
+#endif
+
+#ifdef yyfree
+#define gram_free_ALREADY_DEFINED
+#else
+#define yyfree gram_free
+#endif
+
 /* %if-c-only */
 
+#ifdef yytext
+#define gram_text_ALREADY_DEFINED
+#else
+#define yytext gram_text
+#endif
+
+#ifdef yyleng
+#define gram_leng_ALREADY_DEFINED
+#else
+#define yyleng gram_leng
+#endif
+
+#ifdef yyin
+#define gram_in_ALREADY_DEFINED
+#else
+#define yyin gram_in
+#endif
+
+#ifdef yyout
+#define gram_out_ALREADY_DEFINED
+#else
+#define yyout gram_out
+#endif
+
+#ifdef yy_flex_debug
+#define gram__flex_debug_ALREADY_DEFINED
+#else
+#define yy_flex_debug gram__flex_debug
+#endif
+
+#ifdef yylineno
+#define gram_lineno_ALREADY_DEFINED
+#else
+#define yylineno gram_lineno
+#endif
+
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -127,50 +365,39 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#ifndef SIZE_MAX
+#define SIZE_MAX               (~(size_t)0)
+#endif
+
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
+/* begin standard C++ headers. */
 /* %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
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #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.
+/* Promotes a possibly negative, possibly signed char to an
+ *   integer in range [0..255] for use as an array index.
  */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -185,25 +412,29 @@
  * 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 gram_restart(gram_in  )
-
+#define YY_NEW_FILE yyrestart( yyin  )
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -221,35 +452,35 @@
 #endif
 
 /* %if-not-reentrant */
-extern yy_size_t gram_leng;
+extern int yyleng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *gram_in, *gram_out;
+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)
+    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up gram_text. */ \
+		/* 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 gram_text again */ \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
-
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -269,12 +500,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int 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
@@ -297,7 +528,7 @@
 
     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.
 	 */
@@ -314,8 +545,8 @@
 	 * possible backing-up.
 	 *
 	 * When we actually see the EOF, we change the status to "new"
-	 * (via gram_restart()), so that the user can continue scanning by
-	 * just pointing gram_in at a new input file.
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
 	 */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -324,13 +555,12 @@
 
 /* %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. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -345,7 +575,6 @@
 #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.
  */
@@ -355,118 +584,115 @@
 
 /* %if-not-reentrant */
 /* %not-for-header */
-
-/* yy_hold_char holds the character lost when gram_text is formed. */
+/* 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 gram_leng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 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
- * instead of setting up a fresh gram_in.  A bit of a hack ...
+/* 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 gram_restart (FILE *input_file  );
-void gram__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE gram__create_buffer (FILE *file,int size  );
-void gram__delete_buffer (YY_BUFFER_STATE b  );
-void gram__flush_buffer (YY_BUFFER_STATE b  );
-void gram_push_buffer_state (YY_BUFFER_STATE new_buffer  );
-void gram_pop_buffer_state (void );
+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 gram_ensure_buffer_stack (void );
-static void gram__load_buffer_state (void );
-static void gram__init_buffer (YY_BUFFER_STATE b,FILE *file  );
+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 )
 
-#define YY_FLUSH_BUFFER gram__flush_buffer(YY_CURRENT_BUFFER )
-
-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,yy_size_t len  );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
 
 /* %endif */
 
-void *gram_alloc (yy_size_t  );
-void *gram_realloc (void *,yy_size_t  );
-void gram_free (void *  );
+void *yyalloc ( yy_size_t  );
+void *yyrealloc ( void *, yy_size_t  );
+void yyfree ( void *  );
 
-#define yy_new_buffer gram__create_buffer
-
+#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){ \
-        gram_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            gram__create_buffer(gram_in,YY_BUF_SIZE ); \
+            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 ){\
-        gram_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            gram__create_buffer(gram_in,YY_BUF_SIZE ); \
+            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] gram_text/gram_in/gram_out/yy_state_type/gram_lineno etc. def's & init go here */
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define gram_wrap() 1
+#define gram_wrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
+typedef flex_uint8_t YY_CHAR;
 
-typedef unsigned char YY_CHAR;
-
-FILE *gram_in = (FILE *) 0, *gram_out = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
-extern int gram_lineno;
+extern int yylineno;
+int yylineno = 1;
 
-int gram_lineno = 1;
+extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
+#define yytext_ptr yytext
 
-extern char *gram_text;
-#define yytext_ptr gram_text
+/* %% [1.5] DFA */
 
 /* %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[]  );
+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 yynoreturn yy_fatal_error ( const char* msg  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up gram_text.
+ * corresponding action - sets up yytext.
  */
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle gram_text and gram_leng for yymore() goes here \ */\
-	gram_leng = (size_t) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (int) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to gram_text[] goes here, if %array \ */\
+/* %% [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 109
-#define YY_END_OF_BUFFER 110
+#define YY_NUM_RULES 127
+#define YY_END_OF_BUFFER 128
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -474,465 +700,608 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[482] =
+static const flex_int16_t yy_accept[600] =
     {   0,
         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,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   91,   91,  111,  111,  111,  111,    0,    0,
+        0,    0,  128,   78,    2,    2,    2,   69,   78,   68,
+       78,    1,   64,   78,   65,   65,   60,   63,   75,   61,
+       64,   77,   71,   62,   78,   88,   88,   88,  126,  126,
+       93,  126,   92,  126,  126,  126,  126,  126,  126,  126,
+      126,   79,   95,  126,   94,   82,    2,    2,    1,   82,
+       81,   80,   82,   97,   97,   98,   96,   79,  117,  126,
+      116,  126,  126,  126,  120,  123,  124,  126,   90,  126,
 
-       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,
+      126,  115,  126,  114,  126,  113,  126,  112,   85,    2,
+        2,    1,   83,   85,   85,   84,   85,   86,    2,    2,
+        1,   86,   86,   78,    2,   76,   59,    0,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   70,   64,   64,    4,
+        3,   67,   65,   67,    0,   74,    0,   88,   87,   93,
+      110,  110,  108,   99,  110,  101,  102,  103,  104,  105,
+      106,  110,  107,  110,  126,    0,    0,    0,    0,    0,
+        0,   95,   97,   97,   98,  125,  118,  119,    0,  121,
+        0,  120,  122,    0,   89,    0,   90,    0,   91,    0,
 
-       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,
+      115,  111,  111,  111,  111,  111,  113,   85,   83,   59,
+        0,    0,   72,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,    3,   67,   66,   73,    0,   99,
+        0,    0,  100,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
 
-        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,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,    0,   99,    0,    0,   59,    7,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   21,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   33,   59,   59,
+       59,   59,   59,   59,   40,   59,   43,   59,   59,   46,
+        0,    0,    0,   59,    8,   59,   59,   59,   13,   14,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   24,
+       59,   59,   59,   59,   59,   59,   59,   29,   59,   31,
+       59,   59,   59,   59,   59,   37,   59,   39,   41,   44,
 
-       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
+       59,    0,    0,  109,    6,   59,   10,   59,   59,   59,
+       15,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   30,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,    0,   59,   11,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,    0,   57,   59,
+       59,   35,   59,   36,   59,   59,   59,   45,    5,    0,
+        0,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   20,   59,   59,   59,   59,   26,   59,   56,
+       27,   59,   59,   59,   59,   38,   59,   59,    0,   59,
+
+       59,   59,   59,   59,   16,   52,   59,   59,   59,   59,
+       22,   23,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,    0,    0,   59,   59,   12,   59,   59,   59,   59,
+       19,   59,   59,   59,   59,   59,   59,   34,   59,   59,
+       59,    0,   59,   59,   59,   59,   17,   59,   59,   49,
+       59,   59,   59,   32,   47,   42,   58,    9,   50,   59,
+       59,    0,   53,   59,   59,   49,   49,   59,   59,   59,
+       48,   51,   59,   59,   49,   59,   59,   59,   59,   18,
+       59,   59,   59,   59,   25,   55,   59,   59,   59,   59,
+       59,   54,   59,   59,   59,   59,   59,   28,    0
+
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static const YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
+        4,    4,    5,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        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,    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,
+        1,    6,    7,    8,    9,    7,   10,    7,   11,    7,
+        7,   12,    7,   13,   14,   15,   16,   17,   18,   18,
+       18,   18,   18,   18,   18,   19,   19,   20,   21,   22,
+       23,   24,   25,   26,   27,   27,   27,   27,   27,   27,
+       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
+       28,   28,   28,   28,   29,   28,   28,   30,   28,   28,
+       31,   32,   33,   26,   34,   26,   35,   36,   37,   38,
 
-       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,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+       39,   40,   41,   42,   43,   28,   44,   45,   46,   47,
+       48,   49,   50,   51,   52,   53,   54,   55,   28,   56,
+       57,   28,   58,   59,   60,   26,   61,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   62,   62,   62,
+       62,   62,   62,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,    1,    1,   65,   65,   65,   65,   65,   65,   65,
 
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+       65,   65,   65,   66,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   68,   67,   67,   69,
+       70,   70,   70,   71,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[59] =
+static const YY_CHAR yy_meta[73] =
     {   0,
-        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
+        1,    2,    3,    2,    2,    2,    1,    4,    1,    4,
+        4,    4,    4,    5,    6,    2,    7,    7,    7,    8,
+        9,   10,    9,   10,    8,    8,    7,    7,    7,    7,
+       11,    8,   12,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    9,    9,    9,
+        8,    8,    8,    8,    1,    1,    1,    1,    1,    1,
+        1,    8
     } ;
 
-static yyconst flex_int16_t yy_base[508] =
+static const flex_int16_t yy_base[618] =
     {   0,
-        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,
+        0, 1341,   68,   69,   81,  153,   85,   89,   99,  105,
+      102,  109,  157,  161,  231,  301,  179,  194,  371,  441,
+      195,  247,  241,  253,  266,  267,  273,  319,  513, 1340,
+      344,  362, 1348,    0, 1351, 1351, 1344, 1351,  576, 1351,
+     1351, 1351,  634,   63,  278,   59,    0, 1351,   71, 1351,
+        0, 1351, 1351, 1351, 1301, 1351, 1342, 1328, 1351, 1351,
+     1351, 1340, 1351,  702,   65, 1278,   75,   36,    0,  116,
+     1279, 1351, 1351, 1337, 1351, 1351, 1351, 1336, 1351,   75,
+     1351, 1351, 1293, 1323,  108, 1314, 1351, 1321, 1351, 1274,
+     1351,  143,  159,  255, 1351, 1351, 1351,  154, 1351, 1330,
 
-      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,
+      338, 1351, 1329, 1351,  392, 1351, 1328, 1351,    0, 1351,
+     1327,    0,    0,  176, 1351, 1351, 1284, 1351, 1351, 1325,
+     1351,  192, 1282,    0, 1351, 1351,    0,  350, 1283, 1277,
+      157,  184, 1281, 1278, 1275,  253, 1282,  267, 1266,  177,
+      170,  201,  344, 1272, 1279, 1282, 1351,    0,    0, 1351,
+        0,    0,  318,  398, 1292, 1351, 1272, 1351, 1351, 1351,
+     1351, 1311, 1351,  117,  441, 1351, 1351, 1351, 1351, 1351,
+     1351,  447, 1351,  471, 1351,  322,  326,  342,  347,  350,
+      356, 1351, 1299,  224, 1290, 1351, 1351, 1351,  489, 1351,
+      590, 1351, 1351,  634, 1351,  712, 1351,  719, 1279, 1307,
 
-      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,
+     1351, 1351,  741, 1277, 1305,  757, 1351,    0,    0,    0,
+      762, 1304, 1351, 1259, 1267,  228, 1253, 1254, 1251, 1252,
+       61, 1249, 1256, 1251,  254, 1260, 1245, 1249,  393, 1255,
+     1240, 1241,  243, 1240, 1240, 1248, 1249, 1252, 1235, 1241,
+     1235, 1240, 1231, 1244,    0,    0,    0, 1351, 1233,  123,
+      752,  758,  786,  359,  391,  407,  778,  416, 1276,  804,
+      294, 1275,  812,  348, 1274,  825,  284, 1273,  830,  835,
+     1272,  840,  845,  464, 1271, 1238, 1233, 1217,  286, 1217,
+     1230, 1215, 1219, 1227, 1226, 1225, 1249, 1209, 1220, 1207,
+     1245, 1223, 1216, 1217,  156,  245,  222, 1204, 1205,  279,
 
-        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,
+     1216, 1205, 1212, 1196, 1207, 1203, 1196, 1200, 1206, 1205,
+     1195, 1206, 1204, 1201, 1351,  835,  841, 1188,    0, 1197,
+     1183, 1189, 1184, 1197, 1176, 1181, 1194, 1216, 1191, 1179,
+     1184, 1172,    0, 1176, 1171, 1184,  416, 1183, 1178, 1181,
+     1176, 1166, 1178, 1170, 1161, 1168, 1174, 1173, 1158,  427,
+     1167, 1156, 1169, 1154,    0, 1159,    0, 1158, 1156,    0,
+     1197,  865,  871, 1145,    0, 1156, 1161, 1145,    0,    0,
+      428, 1145, 1148,  573, 1161, 1160, 1159, 1158, 1149,    0,
+     1142, 1150, 1142, 1148, 1140, 1134, 1132,    0, 1131,    0,
+     1169, 1144, 1142, 1131, 1128,    0, 1125,    0,  574,    0,
 
-      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,
+     1125,  485,  895, 1351,    0, 1123, 1123, 1137, 1118, 1117,
+      575, 1120, 1122, 1118, 1123, 1126, 1115, 1117, 1113, 1128,
+     1123, 1126, 1121, 1111, 1119,  913, 1108, 1117, 1104, 1119,
+     1114, 1104, 1098, 1097, 1110,  639,  678,    0, 1095, 1108,
+     1107, 1094, 1093, 1104, 1088, 1080, 1103, 1065, 1068, 1053,
+     1060, 1031,  999,  996,  997, 1010,  993,  921, 1351, 1008,
+      995,    0,  928,    0,  931,  942,  941,    0, 1351,  972,
+      966,  924,  923,  922,  918,  917,  916,  914,  924,  904,
+      917,  920,    0,  897,  890,  889,  883,    0,  876,    0,
+        0,  874,  848,  854,  835,    0,  850,  849,  861,  810,
 
-      384,  373,  138,  102,   88,   57,  676
+      806,  805,  819,  783,    0,    0,  769,  762,  751,  764,
+        0,    0,  757,  746,  733,  735,  739,  734,  733,  709,
+      707,  743,  594,  709,  702,    0,  692,  691,  680,  681,
+        0,  680,  676,  694,  695,  679,  665,    0,  643,  654,
+      626,  229,  618,  613,  595,  594,  935,  547,  555,  943,
+      541,  463,  462,    0,    0,    0,    0,    0,    0,  461,
+      458,  948, 1351,  716,  427,  957,  861,  421,  405,  395,
+        0,    0,  405,  392,  891,  387,  363,  347,  356,    0,
+      340,  335,  326,  318,    0,    0,  325,  293,  314,  255,
+      244,    0,  227,  192,  124,  124,   69,    0, 1351,  980,
+
+      992, 1004, 1016, 1028, 1040, 1047, 1050, 1057, 1063, 1075,
+     1087, 1097, 1104, 1107, 1114, 1122, 1129
     } ;
 
-static yyconst flex_int16_t yy_def[508] =
+static const flex_int16_t yy_def[618] =
     {   0,
-      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,
+      599,    1,  600,  600,  601,  601,    6,    6,  602,  602,
+      603,  603,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,  599,   29,
+      604,  604,  599,  605,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  606,  606,  605,  599,  599,  599,
+      607,  599,  599,  599,  605,  599,  599,  599,  599,  599,
+      599,  599,  599,  608,  599,  599,  599,  599,  609,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  610,  610,  599,  599,  610,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
 
-      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,
+      599,  599,  599,  599,  611,  599,  599,  599,  612,  599,
+      599,  612,  613,  599,  599,  599,  612,  599,  599,  599,
+      599,  599,  599,  605,  599,  599,  614,  599,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  599,   43,  607,  599,
+      615,  616,  606,  616,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  610,  610,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
 
-      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,
+      599,  599,  599,  599,  599,  599,  599,  612,  613,  614,
+      599,  599,  599,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  615,  616,  154,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  611,  599,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
 
-      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,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  599,  599,  599,  599,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      599,  599,  599,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
 
-      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,
+      614,  599,  599,  599,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  599,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  599,  599,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  599,  599,
+      599,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  617,  614,
 
-      481,  481,  481,  481,  481,  481,  481
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  617,  617,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  617,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  599,  599,  614,  614,  599,  599,  614,  614,  614,
+      614,  614,  614,  614,  599,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,    0,  599,
+
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599
     } ;
 
-static yyconst flex_int16_t yy_nxt[966] =
+static const flex_int16_t yy_nxt[1424] =
     {   0,
-       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,
+       34,   35,   36,   35,   37,   35,   34,   38,   34,   39,
+       40,   41,   42,   34,   43,   44,   45,   46,   46,   47,
+       48,   49,   50,   41,   34,   34,   51,   51,   51,   51,
+       52,   34,   34,   51,   51,   51,   51,   51,   51,   51,
+       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
+       51,   51,   51,   51,   51,   51,   51,   53,   54,   41,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   57,   57,  150,  153,  153,  153,  151,   58,
+       58,   59,  155,   61,   59,   62,  150,   73,   63,   74,
+      151,   73,   60,   74,  156,   75,   60,  178,  178,   75,
 
-       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,
+       77,   36,   77,   78,   77,  285,   77,   36,   77,   78,
+       77,   79,   64,   83,   80,   85,  286,   79,   81,  598,
+       80,  184,   85,   86,   81,   87,  175,  175,  175,   82,
+       86,  183,   87,  250,  250,   82,  177,  177,  177,  315,
+      315,   59,   59,   59,   59,   65,   66,   67,   68,   69,
+       70,   71,   72,   59,  187,   61,   59,   62,  188,   59,
+       63,   60,  597,   59,   89,   60,   90,   91,   89,  195,
+       90,   91,   92,   88,  189,  596,   92,  180,  180,  180,
+       88,   59,  190,   60,   64,  196,   89,  150,   60,   91,
+      191,  151,   60,  338,   92,  216,   59,   59,   60,   60,
 
-       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,
+      339,   89,   60,  150,   91,  217,   98,  151,  235,   92,
+       60,  232,  236,   59,   59,   59,   59,   65,   66,   67,
+       68,   69,   70,   71,   72,   60,   60,  233,   59,  218,
+      234,  469,   59,   59,  219,   60,  523,  184,   89,  220,
+       93,   91,  595,   99,  237,  100,   92,  183,   60,   59,
+       59,   60,   94,  238,   60,   99,  342,  100,   98,  343,
+       60,  594,   60,  278,  192,   59,   59,  279,  102,  102,
+      103,  103,  101,  104,  104,  106,  193,  107,   60,  280,
+       60,  301,  340,  108,  101,  302,  194,  224,   95,  341,
+       96,  225,  593,  290,  153,  153,  153,  105,  105,  195,
 
-       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,
+      226,  228,   59,   59,  105,   60,  592,  154,   89,  291,
+       93,   91,   59,  346,  229,  196,   92,  190,   59,  230,
+      321,  106,   94,  107,   59,  191,   60,  591,  322,  108,
+      347,  590,   60,  154,  153,  153,  153,   59,   59,  198,
+      199,  198,  200,  198,   59,  119,   36,  119,  120,  119,
+      105,  211,  211,  211,  212,  211,  121,  192,   95,  122,
+       96,  589,  588,  119,   36,  119,  120,  119,  587,  193,
+      123,  586,   59,   59,  121,   60,  585,  122,   89,  194,
+       93,   91,  239,  175,  175,  175,   92,  175,  175,  175,
+       59,  240,   94,  203,  204,  203,  205,  203,  584,  583,
 
-      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,
+      241,  582,   60,  175,  175,  175,  295,  213,  254,  254,
+      254,  255,  255,  255,  247,  247,  247,  256,  256,  256,
+      175,  175,  175,  206,  247,  581,  296,  187,   95,  381,
+       97,  188,  247,  247,  247,  247,  247,  247,  580,  297,
+      394,  409,   59,   59,  579,   60,  578,  189,   89,  381,
+       93,   91,  175,  175,  175,  577,   92,  251,  251,  251,
+      394,  410,   94,  252,  252,  252,  599,  251,  175,  175,
+      175,  576,   60,  252,  574,  251,  251,  251,  251,  251,
+      251,  252,  252,  252,  252,  252,  252,  253,  253,  253,
+      257,  258,  257,  259,  257,  206,  572,  253,   95,  571,
 
-      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,
+       97,  436,  436,  436,  570,  253,  253,  253,  253,  253,
+      253,  569,   59,  109,  110,   36,  110,  111,  110,  109,
+      109,  109,  109,  109,  109,  112,  109,  113,  114,  115,
+      115,  115,  109,  109,  109,  109,  109,  109,  109,  113,
+      113,  113,  113,  109,  109,  116,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
+      109,  109,  109,  109,  109,  126,  413,  433,  442,  568,
+      127,  260,  261,  260,  262,  260,  469,  565,  542,  564,
 
-      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,
+      128,  523,  127,  127,  127,  127,  413,  434,  443,  127,
+      127,  129,  130,  131,  132,  133,  134,  127,  135,  127,
+      136,  137,  138,  139,  140,  127,  141,  142,  143,  144,
+      145,  127,  146,  147,  124,  263,  264,  263,  265,  263,
+      124,  469,  124,  470,  471,  561,  560,  148,  148,  559,
+      149,  149,  149,  124,  558,  436,  436,  436,  124,  124,
+      149,  149,  149,  149,  557,  124,  124,  149,  149,  149,
+      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+      149,  472,  556,  555,  124,  124,  124,  124,  124,  124,
 
-      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,
+      124,  124,  124,  124,  124,  124,  162,  551,  552,  163,
+      554,  473,  163,  266,  267,  266,  268,  266,  164,  164,
+      198,  199,  198,  200,  198,  553,  163,  552,  552,  573,
+      165,  550,  549,  163,  548,  547,  166,  167,  546,  545,
+      544,  168,  270,  204,  270,  271,  270,  543,  169,  573,
+      523,  541,  170,  540,  171,  172,  173,  174,  273,  274,
+      273,  275,  273,  211,  211,  211,  212,  211,  316,  316,
+      316,  539,  538,  537,  317,  317,  317,  536,  316,  257,
+      258,  257,  259,  257,  317,  535,  316,  316,  316,  316,
+      316,  316,  317,  317,  317,  317,  317,  317,  534,  533,
 
-      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,
+      532,  531,  253,  253,  253,  260,  261,  260,  262,  260,
+      530,  529,  253,  263,  264,  263,  265,  263,  528,  213,
+      253,  253,  253,  253,  253,  253,  266,  267,  266,  268,
+      266,  198,  199,  198,  200,  198,  270,  204,  270,  271,
+      270,  270,  204,  270,  271,  270,  273,  274,  273,  275,
+      273,  362,  362,  362,  527,  526,  525,  363,  363,  363,
+      524,  362,  575,  575,  575,  575,  575,  363,  523,  362,
+      362,  362,  362,  362,  362,  363,  363,  363,  363,  363,
+      363,  403,  403,  403,  521,  520,  519,  404,  404,  404,
+      518,  403,  575,  575,  575,  575,  575,  404,  517,  403,
 
-      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
+      403,  403,  403,  403,  403,  404,  404,  404,  404,  404,
+      404,  252,  252,  252,  458,  458,  458,  458,  458,  516,
+      515,  252,  458,  458,  458,  458,  458,  514,  513,  252,
+      252,  252,  252,  252,  252,  459,  562,  562,  562,  562,
+      562,  512,  511,  459,  566,  566,  566,  566,  566,  562,
+      562,  562,  562,  562,  510,  509,  508,  563,  566,  566,
+      566,  566,  566,  507,  506,  567,  505,  504,  503,  502,
+      563,  501,  500,  499,  469,  498,  497,  496,  495,  567,
+       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       56,   56,   60,   60,   60,   60,   60,   60,   60,   60,
+
+       60,   60,   60,   60,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   84,   84,   84,   84,
+       84,   84,   84,   84,   84,   84,   84,   84,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      124,  494,  493,  492,  124,  124,  491,  124,  490,  489,
+      488,  124,  152,  152,  149,  149,  149,  161,  161,  161,
+      161,  161,  161,  161,  161,  161,  161,  161,  161,  179,
+      179,  179,  179,  179,  179,  183,  183,  183,  183,  183,
+      183,  183,  183,  183,  487,  183,  183,  202,  202,  202,
+      202,  202,  202,  202,  202,  202,  202,  208,  486,  485,
+
+      208,  208,  484,  483,  208,  208,  208,  208,  209,  209,
+      209,  210,  210,  210,  245,  245,  482,  245,  245,  245,
+      245,  245,  245,  245,  245,  245,  246,  246,  246,  522,
+      522,  481,  522,  522,  522,  522,  522,  522,  522,  522,
+      522,  480,  479,  478,  477,  476,  475,  474,  468,  467,
+      466,  465,  464,  463,  462,  461,  460,  457,  456,  455,
+      454,  453,  452,  451,  450,  449,  448,  447,  446,  445,
+      444,  441,  440,  439,  438,  437,  435,  432,  431,  430,
+      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  412,  411,  408,  407,
+
+      406,  405,  402,  401,  400,  399,  398,  397,  396,  395,
+      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  380,  379,  378,  377,  376,  375,  374,  373,
+      372,  371,  370,  369,  368,  367,  366,  365,  364,  361,
+      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
+      350,  349,  348,  345,  344,  337,  336,  335,  334,  333,
+      332,  331,  330,  329,  328,  327,  326,  325,  324,  323,
+      320,  319,  318,  274,  204,  267,  264,  261,  258,  314,
+      313,  312,  311,  310,  309,  308,  307,  306,  305,  304,
+      303,  300,  299,  298,  294,  293,  292,  289,  288,  287,
+
+      284,  283,  282,  281,  277,  276,  211,  204,  272,  199,
+      269,  185,  184,  161,  249,  248,  244,  243,  242,  231,
+      227,  223,  222,  221,  215,  214,  157,  125,  157,  125,
+      207,  201,  197,  186,  184,  185,  184,  157,  125,  182,
+      181,  176,  160,  159,  158,  157,  125,  599,  117,   55,
+       33,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599
     } ;
 
-static yyconst flex_int16_t yy_chk[966] =
+static const flex_int16_t yy_chk[1424] =
     {   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,    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,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    3,    4,   44,   46,   46,   46,   44,    3,
+        4,    5,   49,    5,    5,    5,   80,    7,    5,    7,
+       80,    8,    7,    8,   49,    7,    8,   68,   68,    8,
 
-       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,
+        9,    9,    9,    9,    9,  221,   10,   10,   10,   10,
+       10,    9,    5,   10,    9,   11,  221,   10,    9,  597,
+       10,   85,   12,   11,   10,   11,   65,   65,   65,    9,
+       12,   85,   12,  164,  164,   10,   67,   67,   67,  250,
+      250,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    6,   92,    6,    6,    6,   92,   13,
+        6,   13,  596,   14,   13,   14,   13,   13,   14,   98,
+       14,   14,   13,   11,   92,  595,   14,   70,   70,   70,
+       12,   17,   93,   17,    6,   98,   17,  114,   13,   17,
+       93,  114,   14,  295,   17,  131,   18,   21,   18,   21,
 
-       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,
+      295,   18,   21,  122,   18,  131,   21,  122,  141,   18,
+       17,  140,  141,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,   18,   21,  140,   13,  132,
+      140,  542,   14,   15,  132,   15,  542,  184,   15,  132,
+       15,   15,  594,   23,  142,   23,   15,  184,   23,   22,
+       17,   22,   15,  142,   22,   24,  297,   24,   22,  297,
+       24,  593,   15,  216,   94,   18,   21,  216,   25,   26,
+       25,   26,   23,   25,   26,   27,   94,   27,   22,  216,
+       27,  233,  296,   27,   24,  233,   94,  136,   15,  296,
+       15,  136,  591,  225,   45,   45,   45,   25,   26,  267,
 
-       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,
+      136,  138,   15,   16,   27,   16,  590,   45,   16,  225,
+       16,   16,   23,  300,  138,  267,   16,  261,   22,  138,
+      279,   28,   16,   28,   24,  261,   28,  589,  279,   28,
+      300,  588,   16,   45,  153,  153,  153,   25,   26,  101,
+      101,  101,  101,  101,   27,   31,   31,   31,   31,   31,
+       28,  128,  128,  128,  128,  128,   31,  264,   16,   31,
+       16,  587,  584,   32,   32,   32,   32,   32,  583,  264,
+       32,  582,   16,   19,   32,   19,  581,   32,   19,  264,
+       19,   19,  143,  176,  176,  176,   19,  177,  177,  177,
+       28,  143,   19,  105,  105,  105,  105,  105,  579,  578,
 
-       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,
+      143,  577,   19,  178,  178,  178,  229,  128,  179,  179,
+      179,  180,  180,  180,  154,  154,  154,  181,  181,  181,
+      254,  254,  254,  105,  154,  576,  229,  258,   19,  337,
+       19,  258,  154,  154,  154,  154,  154,  154,  574,  229,
+      350,  371,   19,   20,  573,   20,  570,  258,   20,  337,
+       20,   20,  255,  255,  255,  569,   20,  165,  165,  165,
+      350,  371,   20,  172,  172,  172,  274,  165,  256,  256,
+      256,  568,   20,  172,  565,  165,  165,  165,  165,  165,
+      165,  172,  172,  172,  172,  172,  172,  174,  174,  174,
+      189,  189,  189,  189,  189,  274,  561,  174,   20,  560,
 
-      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,
+       20,  402,  402,  402,  553,  174,  174,  174,  174,  174,
+      174,  552,   20,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       29,   29,   29,   29,   29,   39,  374,  399,  411,  551,
+       39,  191,  191,  191,  191,  191,  523,  549,  523,  548,
 
-      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,
+       39,  523,   39,   39,   39,   39,  374,  399,  411,   39,
+       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   43,  194,  194,  194,  194,  194,
+       43,  436,   43,  436,  436,  546,  545,   43,   43,  544,
+       43,   43,   43,   43,  543,  436,  436,  436,   43,   43,
+       43,   43,   43,   43,  541,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,  437,  540,  539,   43,   43,   43,   43,   43,   43,
 
-      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,
+       43,   43,   43,   43,   43,   43,   64,  534,  535,   64,
+      537,  437,   64,  196,  196,  196,  196,  196,   64,   64,
+      198,  198,  198,  198,  198,  536,   64,  534,  535,  564,
+       64,  533,  532,   64,  530,  529,   64,   64,  528,  527,
+      525,   64,  203,  203,  203,  203,  203,  524,   64,  564,
+      522,  521,   64,  520,   64,   64,   64,   64,  206,  206,
+      206,  206,  206,  211,  211,  211,  211,  211,  251,  251,
+      251,  519,  518,  517,  252,  252,  252,  516,  251,  257,
+      257,  257,  257,  257,  252,  515,  251,  251,  251,  251,
+      251,  251,  252,  252,  252,  252,  252,  252,  514,  513,
 
-      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,
+      510,  509,  253,  253,  253,  260,  260,  260,  260,  260,
+      508,  507,  253,  263,  263,  263,  263,  263,  504,  211,
+      253,  253,  253,  253,  253,  253,  266,  266,  266,  266,
+      266,  269,  269,  269,  269,  269,  270,  270,  270,  270,
+      270,  272,  272,  272,  272,  272,  273,  273,  273,  273,
+      273,  316,  316,  316,  503,  502,  501,  317,  317,  317,
+      500,  316,  567,  567,  567,  567,  567,  317,  499,  316,
+      316,  316,  316,  316,  316,  317,  317,  317,  317,  317,
+      317,  362,  362,  362,  498,  497,  495,  363,  363,  363,
+      494,  362,  575,  575,  575,  575,  575,  363,  493,  362,
 
-       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
+      362,  362,  362,  362,  362,  363,  363,  363,  363,  363,
+      363,  403,  403,  403,  426,  426,  426,  426,  426,  492,
+      489,  403,  458,  458,  458,  458,  458,  487,  486,  403,
+      403,  403,  403,  403,  403,  426,  547,  547,  547,  547,
+      547,  485,  484,  458,  550,  550,  550,  550,  550,  562,
+      562,  562,  562,  562,  482,  481,  480,  547,  566,  566,
+      566,  566,  566,  479,  478,  550,  477,  476,  475,  474,
+      562,  473,  472,  471,  470,  467,  466,  465,  463,  566,
+      600,  600,  600,  600,  600,  600,  600,  600,  600,  600,
+      600,  600,  601,  601,  601,  601,  601,  601,  601,  601,
+
+      601,  601,  601,  601,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  602,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  604,  604,
+      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
+      605,  461,  460,  457,  605,  605,  456,  605,  455,  454,
+      453,  605,  606,  606,  607,  607,  607,  608,  608,  608,
+      608,  608,  608,  608,  608,  608,  608,  608,  608,  609,
+      609,  609,  609,  609,  609,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  452,  610,  610,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  612,  451,  450,
+
+      612,  612,  449,  448,  612,  612,  612,  612,  613,  613,
+      613,  614,  614,  614,  615,  615,  447,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  616,  616,  616,  617,
+      617,  446,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  445,  444,  443,  442,  441,  440,  439,  435,  434,
+      433,  432,  431,  430,  429,  428,  427,  425,  424,  423,
+      422,  421,  420,  419,  418,  417,  416,  415,  414,  413,
+      412,  410,  409,  408,  407,  406,  401,  397,  395,  394,
+      393,  392,  391,  389,  387,  386,  385,  384,  383,  382,
+      381,  379,  378,  377,  376,  375,  373,  372,  368,  367,
+
+      366,  364,  361,  359,  358,  356,  354,  353,  352,  351,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+      339,  338,  336,  335,  334,  332,  331,  330,  329,  328,
+      327,  326,  325,  324,  323,  322,  321,  320,  318,  314,
+      313,  312,  311,  310,  309,  308,  307,  306,  305,  304,
+      303,  302,  301,  299,  298,  294,  293,  292,  291,  290,
+      289,  288,  287,  286,  285,  284,  283,  282,  281,  280,
+      278,  277,  276,  275,  271,  268,  265,  262,  259,  249,
+      244,  243,  242,  241,  240,  239,  238,  237,  236,  235,
+      234,  232,  231,  230,  228,  227,  226,  224,  223,  222,
+
+      220,  219,  218,  217,  215,  214,  212,  205,  204,  200,
+      199,  185,  183,  162,  157,  155,  146,  145,  144,  139,
+      137,  135,  134,  133,  130,  129,  123,  120,  117,  111,
+      107,  103,  100,   90,   88,   86,   84,   83,   78,   74,
+       71,   66,   62,   58,   57,   55,   37,   33,   30,    2,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int gram__flex_debug;
-int gram__flex_debug = 1;
+extern int yy_flex_debug;
+int yy_flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[109] =
+static const flex_int16_t yy_rule_linenum[127] =
     {   0,
-      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,
+      198,  201,  202,  203,  209,  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,  259,  260,  261,
+      262,  263,  264,  265,  266,  267,  271,  275,  279,  282,
+      283,  284,  285,  286,  287,  288,  289,  290,  292,  296,
+      297,  298,  299,  301,  308,  309,  313,  318,  321,  324,
+      327,  335,  342,  343,  344,  350,  357,  364,  384,  394,
+      409,  415,  434,  447,  463,  478,  495,  496,  507,  518,
+      519,  531,  540,  550,  569,  581,  595,  596,  607,  617,
 
-      625,  641,  642,  643,  659,  678,  718,  719
+      627,  628,  629,  630,  631,  632,  633,  636,  638,  646,
+      664,  669,  670,  676,  677,  688,  694,  700,  706,  722,
+      723,  727,  734,  750,  770,  809
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -942,11 +1311,11 @@
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *gram_text;
-#line 1 "scan-gram.l"
+char *yytext;
+#line 1 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 /* Bison Grammar Scanner                             -*- C -*-
 
-   Copyright (C) 2002-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -963,52 +1332,77 @@
    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-gram.l"
+#line 24 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+#include <errno.h>
+
+#include <c-ctype.h>
+#include <mbswidth.h>
+#include <quote.h>
+#include <quotearg.h>
+
+#include <src/complain.h>
+#include <src/files.h>
+#include <src/getargs.h>
+#include <src/gram.h>
+#include <src/reader.h>
+#include <src/scan-gram.h>
+#include <src/uniqstr.h>
+
+#define FLEX_PREFIX(Id) gram_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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
 
-#define FLEX_PREFIX(Id) gram_ ## Id
-#include "flex-scanner.h"
-
-#include "complain.h"
-#include "files.h"
-#include "gram.h"
-#include "quotearg.h"
-#include "reader.h"
-#include "uniqstr.h"
-
-#include <c-ctype.h>
-#include <mbswidth.h>
-#include <quote.h>
-
-#include "scan-gram.h"
-
 #define YY_DECL GRAM_LEX_DECL
 
-#define YY_USER_INIT					\
-   code_start = scanner_cursor = loc->start;		\
-
 /* Location of scanner cursor.  */
 static boundary scanner_cursor;
 
-#define YY_USER_ACTION  location_compute (loc, &scanner_cursor, gram_text, gram_leng);
+#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 (gram_in, buf, size))
+/* Report that yytext is an extension, and evaluate to its token type.  */
+#define BISON_DIRECTIVE(Directive)                              \
+  (bison_directive (loc, yytext), PERCENT_ ## Directive)
+
+#define RETURN_PERCENT_PARAM(Value)             \
+  RETURN_VALUE(PERCENT_PARAM, param_ ## Value)
+
+#define RETURN_PERCENT_FLAG(Value)                      \
+  RETURN_VALUE(PERCENT_FLAG, uniqstr_new (Value))
+
+#define RETURN_VALUE(Token, Value)              \
+  do {                                          \
+    val->Token = Value;                         \
+    return Token;                               \
+  } while (0)
 
 #define ROLLBACK_CURRENT_TOKEN                                  \
   do {                                                          \
-    scanner_cursor.column -= mbsnwidth (gram_text, gram_leng, 0);	\
+    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);     \
+    scanner_cursor.byte -= yyleng;                              \
     yyless (0);                                                 \
   } while (0)
 
+#define DEPRECATED(Msg)                                         \
+  do {                                                          \
+    deprecated_directive (loc, yytext, Msg);                    \
+    scanner_cursor.column -= mbsnwidth (Msg, strlen (Msg), 0);  \
+    scanner_cursor.byte -= strlen (Msg);                        \
+    for (size_t i = strlen (Msg); i != 0; --i)                  \
+      unput (Msg[i - 1]);                                       \
+  } while (0)
+
+/* The current file name.  Might change with #line.  */
+static uniqstr current_file = NULL;
+
 /* A string representing the most recently saved token.  */
-static char *last_string;
+static char *last_string = NULL;
 
 /* Bracketed identifier. */
-static uniqstr bracketed_id_str = 0;
+static uniqstr bracketed_id_str = NULL;
 static location bracketed_id_loc;
 static boundary bracketed_id_start;
 static int bracketed_id_context_state = 0;
@@ -1020,50 +1414,61 @@
 }
 
 static void handle_syncline (char *, location);
-static unsigned long int scan_integer (char const *p, int base, location loc);
+static 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. */
+#line 1422 "src/scan-gram.c"
+#line 112 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+ /* A C-like comment in directives/rules. */
 
-/* Strings and characters in directives/rules. */
+ /* Strings and characters in directives/rules. */
 
-/* A identifier was just read in directives/rules.  Special state
-to capture the sequence 'identifier :'. */
+ /* 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 %%). */
+ /* 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, as this simplifies our implementation.  We match
+    angle brackets in nested pairs: several languages use them for
+    generics/template types.  */
 
-/* C and C++ comments in code. */
+ /* Four 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 %%).
+    - predicate (code between '%?{' and '{' in middle section); */
 
-/* Strings and characters in code. */
+ /* C and C++ comments in code. */
 
-/* Bracketed identifiers support. */
+ /* Strings and characters in code. */
 
-/* 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.  */
+ /* Bracketed identifiers support. */
+
+ /* UTF-8 Encoded Unicode Code Point, from Flex's documentation. */
 /* Zero or more instances of backslash-newline.  Following GCC, allow
    white space between the backslash and the newline.  */
-#line 1052 "scan-gram.c"
+/* An equal sign, with optional leading whitespaces. This is used in some
+   deprecated constructs. */
+#line 1454 "src/scan-gram.c"
 
 #define INITIAL 0
 #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
+#define SC_TAG 5
+#define SC_PROLOGUE 6
+#define SC_BRACED_CODE 7
+#define SC_EPILOGUE 8
+#define SC_PREDICATE 9
+#define SC_COMMENT 10
+#define SC_LINE_COMMENT 11
+#define SC_STRING 12
+#define SC_CHARACTER 13
+#define SC_BRACKETED_ID 14
+#define SC_RETURN_BRACKETED_ID 15
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1085,7 +1490,7 @@
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals (void );
+static int yy_init_globals ( void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1095,31 +1500,31 @@
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int gram_lex_destroy (void );
+int yylex_destroy ( void );
 
-int gram_get_debug (void );
+int yyget_debug ( void );
 
-void gram_set_debug (int debug_flag  );
+void yyset_debug ( int debug_flag  );
 
-YY_EXTRA_TYPE gram_get_extra (void );
+YY_EXTRA_TYPE yyget_extra ( void );
 
-void gram_set_extra (YY_EXTRA_TYPE user_defined  );
+void yyset_extra ( YY_EXTRA_TYPE user_defined  );
 
-FILE *gram_get_in (void );
+FILE *yyget_in ( void );
 
-void gram_set_in  (FILE * in_str  );
+void yyset_in  ( FILE * _in_str  );
 
-FILE *gram_get_out (void );
+FILE *yyget_out ( void );
 
-void gram_set_out  (FILE * out_str  );
+void yyset_out  ( FILE * _out_str  );
 
-yy_size_t gram_get_leng (void );
+			int yyget_leng ( void );
 
-char *gram_get_text (void );
+char *yyget_text ( void );
 
-int gram_get_lineno (void );
+int yyget_lineno ( void );
 
-void gram_set_lineno (int line_number  );
+void yyset_lineno ( int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1130,34 +1535,37 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int gram_wrap (void );
+extern "C" int yywrap ( void );
 #else
-extern int gram_wrap (void );
+extern int yywrap ( void );
 #endif
 #endif
 
 /* %not-for-header */
-
+#ifndef YY_NO_UNPUT
+    
+    static void yyunput ( int c, char *buf_ptr  );
+    
+#endif
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy ( char *, const char *, int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen ( const char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
-
 #ifdef __cplusplus
-static int yyinput (void );
+static int yyinput ( void );
 #else
-static int input (void );
+static int input ( void );
 #endif
 /* %ok-for-header */
 
@@ -1170,7 +1578,12 @@
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1179,7 +1592,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( gram_text, gram_leng, 1, gram_out )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1194,20 +1607,20 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
-			     (c = getc( gram_in )) != EOF && c != '\n'; ++n ) \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
 		if ( c == '\n' ) \
 			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( gram_in ) ) \
+		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, gram_in))==0 && ferror(gram_in)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1215,7 +1628,7 @@
 				break; \
 				} \
 			errno=0; \
-			clearerr(gram_in); \
+			clearerr(yyin); \
 			} \
 		}\
 \
@@ -1248,11 +1661,9 @@
 
 /* %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 */
@@ -1266,15 +1677,15 @@
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int gram_lex (void);
+extern int yylex (void);
 
-#define YY_DECL int gram_lex (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 gram_text and gram_leng
+/* Code executed at the beginning of each rule, after yytext and yyleng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1283,56 +1694,25 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
 #define YY_RULE_SETUP \
-	if ( gram_leng > 0 ) \
+	if ( yyleng > 0 ) \
 		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
-				(gram_text[gram_leng - 1] == '\n'); \
+				(yytext[yyleng - 1] == '\n'); \
 	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;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	int yy_act;
     
-/* %% [7.0] user's declarations go here */
-#line 120 "scan-gram.l"
-
-
-  /* Nesting level of the current code in braces.  */
-  int braces_level PACIFY_CC (= 0);
-
-  /* Parent context state, when applicable.  */
-  int context_state PACIFY_CC (= 0);
-
-  /* Location of most recent identifier, when applicable.  */
-  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
-     start condition.  */
-  boundary code_start = scanner_cursor;
-
-  /* Where containing comment or string or character literal started,
-     when applicable.  */
-  boundary token_start PACIFY_CC (= scanner_cursor);
-
-
-
-  /*-----------------------.
-  | Scanning white space.  |
-  `-----------------------*/
-
-#line 1335 "scan-gram.c"
-
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -1344,35 +1724,76 @@
 		if ( ! (yy_start) )
 			(yy_start) = 1;	/* first start state */
 
-		if ( ! gram_in )
+		if ( ! yyin )
 /* %if-c-only */
-			gram_in = stdin;
+			yyin = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-		if ( ! gram_out )
+		if ( ! yyout )
 /* %if-c-only */
-			gram_out = stdout;
+			yyout = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
 		if ( ! YY_CURRENT_BUFFER ) {
-			gram_ensure_buffer_stack ();
+			yyensure_buffer_stack ();
 			YY_CURRENT_BUFFER_LVALUE =
-				gram__create_buffer(gram_in,YY_BUF_SIZE );
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 		}
 
-		gram__load_buffer_state( );
+		yy_load_buffer_state(  );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+/* %% [7.0] user's declarations go here */
+#line 159 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+
+
+  /* Nesting level.  Either for nested braces, or nested angle brackets
+     (but not mixed).  */
+  int nesting PACIFY_CC (= 0);
+
+  /* Parent context state, when applicable.  */
+  int context_state PACIFY_CC (= 0);
+
+  /* Location of most recent identifier, when applicable.  */
+  location id_loc PACIFY_CC (= empty_loc);
+
+  /* Where containing code started, when applicable.  Its initial
+     value is relevant only when yylex is invoked in the SC_EPILOGUE
+     start condition.  */
+  boundary code_start = scanner_cursor;
+
+  /* Where containing comment or string or character literal started,
+     when applicable.  */
+  boundary token_start PACIFY_CC (= scanner_cursor);
+
+  /* We cannot trust YY_USER_INIT, whose semantics changes over time
+     (it moved in Flex 2.5.38).  */
+  static bool first = true;
+  if (first)
+    {
+      scanner_cursor = loc->start;
+      first = false;
+    }
+
+
+
+  /*-----------------------.
+  | Scanning white space.  |
+  `-----------------------*/
+
+#line 1789 "src/scan-gram.c"
+
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 /* %% [8.0] yymore()-related code goes here */
 		yy_cp = (yy_c_buf_p);
 
-		/* Support of gram_text. */
+		/* Support of yytext. */
 		*yy_cp = (yy_hold_char);
 
 		/* yy_bp points to the position in yy_ch_buf of the start of
@@ -1386,7 +1807,7 @@
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			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;
@@ -1395,13 +1816,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 >= 482 )
-					yy_c = yy_meta[(unsigned int) yy_c];
+				if ( yy_current_state >= 600 )
+					yy_c = yy_meta[yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 481 );
+		while ( yy_current_state != 599 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1411,22 +1832,22 @@
 
 		YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for gram_lineno update goes here */
+/* %% [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 ( gram__flex_debug )
+		if ( yy_flex_debug )
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 109 )
+			else if ( yy_act < 127 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-				         (long)yy_rule_linenum[yy_act], gram_text );
-			else if ( yy_act == 109 )
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 127 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
-				         gram_text );
-			else if ( yy_act == 110 )
+				         yytext );
+			else if ( yy_act == 128 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1445,35 +1866,35 @@
 /* Comments and white space.  */
 case 1:
 YY_RULE_SETUP
-#line 149 "scan-gram.l"
-warn_at (*loc, _("stray ',' treated as white space"));
+#line 198 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+     complain (loc, Wother, _("stray ',' treated as white space"));
+  }
 	YY_BREAK
 case 2:
 /* rule 2 can match eol */
-#line 151 "scan-gram.l"
+#line 202 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 151 "scan-gram.l"
+#line 202 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 continue;
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 152 "scan-gram.l"
+#line 203 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     token_start = loc->start;
     context_state = YY_START;
     BEGIN SC_YACC_COMMENT;
   }
 	YY_BREAK
-/* #line directives are not documented, and may be withdrawn or
-     modified in future versions of Bison.  */
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 160 "scan-gram.l"
+#line 209 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    handle_syncline (gram_text + sizeof "#line " - 1, *loc);
+    handle_syncline (yytext + sizeof "#line " - 1, *loc);
   }
 	YY_BREAK
 
@@ -1481,7 +1902,7 @@
   | 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.  */
@@ -1489,326 +1910,398 @@
 
 case 6:
 YY_RULE_SETUP
-#line 178 "scan-gram.l"
-return PERCENT_NONASSOC;
+#line 227 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (NONASSOC);
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 179 "scan-gram.l"
-return PERCENT_CODE;
+#line 228 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (CODE);
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 180 "scan-gram.l"
-return PERCENT_DEBUG;
+#line 229 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_PERCENT_FLAG ("parse.trace");
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 181 "scan-gram.l"
-return PERCENT_DEFAULT_PREC;
+#line 230 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (DEFAULT_PREC);
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 182 "scan-gram.l"
-return PERCENT_DEFINE;
+#line 231 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (DEFINE);
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 183 "scan-gram.l"
-return PERCENT_DEFINES;
+#line 232 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (DEFINES);
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 184 "scan-gram.l"
-return PERCENT_DESTRUCTOR;
+#line 233 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (DESTRUCTOR);
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 185 "scan-gram.l"
-return PERCENT_DPREC;
+#line 234 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (DPREC);
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 186 "scan-gram.l"
-return PERCENT_ERROR_VERBOSE;
+#line 235 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (EMPTY);
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 187 "scan-gram.l"
-return PERCENT_EXPECT;
+#line 236 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (EXPECT);
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 188 "scan-gram.l"
-return PERCENT_EXPECT_RR;
+#line 237 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (EXPECT_RR);
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 189 "scan-gram.l"
-return PERCENT_FILE_PREFIX;
+#line 238 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_FILE_PREFIX, uniqstr_new (yytext));
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 190 "scan-gram.l"
-return PERCENT_YACC;
+#line 239 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (INITIAL_ACTION);
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 191 "scan-gram.l"
-return PERCENT_INITIAL_ACTION;
+#line 240 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (GLR_PARSER);
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 192 "scan-gram.l"
-return PERCENT_GLR_PARSER;
+#line 241 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (LANGUAGE);
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 193 "scan-gram.l"
-return PERCENT_LANGUAGE;
+#line 242 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_LEFT;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 194 "scan-gram.l"
-return PERCENT_LEFT;
+#line 243 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_PERCENT_PARAM (lex);
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 195 "scan-gram.l"
-return PERCENT_LEX_PARAM;
+#line 244 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_PERCENT_FLAG ("locations");
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 196 "scan-gram.l"
-return PERCENT_LOCATIONS;
+#line 245 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (MERGE);
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 197 "scan-gram.l"
-return PERCENT_MERGE;
+#line 246 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (NO_DEFAULT_PREC);
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 198 "scan-gram.l"
-return PERCENT_NAME_PREFIX;
+#line 247 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (NO_LINES);
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 199 "scan-gram.l"
-return PERCENT_NO_DEFAULT_PREC;
+#line 248 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_NONASSOC;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 200 "scan-gram.l"
-return PERCENT_NO_LINES;
+#line 249 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (NONDETERMINISTIC_PARSER);
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 201 "scan-gram.l"
-return PERCENT_NONASSOC;
+#line 250 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (NTERM);
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 202 "scan-gram.l"
-return PERCENT_NONDETERMINISTIC_PARSER;
+#line 251 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (OUTPUT);
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 203 "scan-gram.l"
-return PERCENT_NTERM;
+#line 252 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_PERCENT_PARAM (both);
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 204 "scan-gram.l"
-return PERCENT_OUTPUT;
+#line 253 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_PERCENT_PARAM (parse);
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 205 "scan-gram.l"
-return PERCENT_PARSE_PARAM;
+#line 254 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_PREC;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 206 "scan-gram.l"
-return PERCENT_PREC;
+#line 255 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (PRECEDENCE);
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 207 "scan-gram.l"
-return PERCENT_PRINTER;
+#line 256 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (PRINTER);
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 208 "scan-gram.l"
-return PERCENT_PURE_PARSER;
+#line 257 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (REQUIRE);
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 209 "scan-gram.l"
-return PERCENT_REQUIRE;
+#line 258 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_RIGHT;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 210 "scan-gram.l"
-return PERCENT_RIGHT;
+#line 259 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (SKELETON);
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 211 "scan-gram.l"
-return PERCENT_SKELETON;
+#line 260 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_START;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 212 "scan-gram.l"
-return PERCENT_START;
+#line 261 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (TOKEN);
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 213 "scan-gram.l"
+#line 262 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 return PERCENT_TOKEN;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 214 "scan-gram.l"
-return PERCENT_TOKEN;
+#line 263 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (TOKEN_TABLE);
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 215 "scan-gram.l"
-return PERCENT_TOKEN_TABLE;
+#line 264 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_TYPE;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 216 "scan-gram.l"
-return PERCENT_TYPE;
+#line 265 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PERCENT_UNION;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 217 "scan-gram.l"
-return PERCENT_UNION;
+#line 266 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return BISON_DIRECTIVE (VERBOSE);
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 218 "scan-gram.l"
-return PERCENT_VERBOSE;
-	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 219 "scan-gram.l"
+#line 267 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 return PERCENT_YACC;
 	YY_BREAK
+/* Deprecated since Bison 2.3b (2008-05-27), but the warning is
+     issued only since Bison 3.4. */
+case 47:
+YY_RULE_SETUP
+#line 271 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_PURE_PARSER, uniqstr_new (yytext));
+	YY_BREAK
+/* Deprecated since Bison 3.0 (2013-07-25), but the warning is
+     issued only since Bison 3.3. */
 case 48:
-/* rule 48 can match eol */
 YY_RULE_SETUP
-#line 221 "scan-gram.l"
-{
-    complain_at (*loc, _("invalid directive: %s"), quote (gram_text));
-  }
+#line 275 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
 	YY_BREAK
+/* Deprecated since Bison 2.6 (2012-07-19), but the warning is
+     issued only since Bison 3.3. */
 case 49:
+/* rule 49 can match eol */
 YY_RULE_SETUP
-#line 225 "scan-gram.l"
-return EQUAL;
+#line 279 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_NAME_PREFIX, uniqstr_new (yytext));
 	YY_BREAK
+/* Deprecated since Bison 2.7.90, 2012. */
 case 50:
 YY_RULE_SETUP
-#line 226 "scan-gram.l"
-return PIPE;
+#line 282 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%default-prec");
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 227 "scan-gram.l"
-return SEMICOLON;
+#line 283 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 228 "scan-gram.l"
-return TYPE_TAG_ANY;
+#line 284 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%expect-rr");
 	YY_BREAK
 case 53:
+/* rule 53 can match eol */
 YY_RULE_SETUP
-#line 229 "scan-gram.l"
-return TYPE_TAG_NONE;
+#line 285 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (PERCENT_FILE_PREFIX, uniqstr_new (yytext));
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 231 "scan-gram.l"
+#line 286 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%output \"y.tab.c\"");
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 287 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%no-default-prec");
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 288 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%no-lines");
+	YY_BREAK
+case 57:
+/* rule 57 can match eol */
+YY_RULE_SETUP
+#line 289 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%output");
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 290 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+DEPRECATED ("%token-table");
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 292 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    val->uniqstr = uniqstr_new (gram_text);
+    complain (loc, complaint, _("invalid directive: %s"), quote (yytext));
+  }
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 296 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return COLON;
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 297 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return EQUAL;
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 298 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return PIPE;
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 299 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return SEMICOLON;
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 301 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+    val->ID = uniqstr_new (yytext);
     id_loc = *loc;
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
   }
 	YY_BREAK
-case 55:
+case 65:
 YY_RULE_SETUP
-#line 238 "scan-gram.l"
-{
-    val->integer = scan_integer (gram_text, 10, *loc);
-    return INT;
-  }
+#line 308 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (INT, scan_integer (yytext, 10, *loc));
 	YY_BREAK
-case 56:
+case 66:
 YY_RULE_SETUP
-#line 242 "scan-gram.l"
-{
-    val->integer = scan_integer (gram_text, 16, *loc);
-    return INT;
-  }
+#line 309 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+RETURN_VALUE (INT, scan_integer (yytext, 16, *loc));
 	YY_BREAK
 /* Identifiers may not start with a digit.  Yet, don't silently
      accept "1FOO" as "1 FOO".  */
-case 57:
+case 67:
 YY_RULE_SETUP
-#line 249 "scan-gram.l"
+#line 313 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    complain_at (*loc, _("invalid identifier: %s"), quote (gram_text));
+    complain (loc, complaint, _("invalid identifier: %s"), quote (yytext));
   }
 	YY_BREAK
 /* Characters.  */
-case 58:
+case 68:
 YY_RULE_SETUP
-#line 254 "scan-gram.l"
+#line 318 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
 	YY_BREAK
 /* Strings. */
-case 59:
+case 69:
 YY_RULE_SETUP
-#line 257 "scan-gram.l"
+#line 321 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 token_start = loc->start; BEGIN SC_ESCAPED_STRING;
 	YY_BREAK
 /* Prologue. */
-case 60:
+case 70:
 YY_RULE_SETUP
-#line 260 "scan-gram.l"
+#line 324 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 code_start = loc->start; BEGIN SC_PROLOGUE;
 	YY_BREAK
 /* Code in between braces.  */
-case 61:
+case 71:
 YY_RULE_SETUP
-#line 263 "scan-gram.l"
+#line 327 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_GROW;
-    braces_level = 0;
+    nesting = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
   }
 	YY_BREAK
-/* A type. */
-case 62:
+/* Semantic predicate. */
+case 72:
+/* rule 72 can match eol */
 YY_RULE_SETUP
-#line 271 "scan-gram.l"
+#line 335 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    obstack_grow (&obstack_for_string, gram_text + 1, gram_leng - 2);
-    STRING_FINISH;
-    val->uniqstr = uniqstr_new (last_string);
-    STRING_FREE;
-    return TYPE;
+    nesting = 0;
+    code_start = loc->start;
+    BEGIN SC_PREDICATE;
   }
 	YY_BREAK
-case 63:
+/* A type. */
+case 73:
 YY_RULE_SETUP
-#line 279 "scan-gram.l"
+#line 342 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return TAG_ANY;
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 343 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+return TAG_NONE;
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 344 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+    nesting = 0;
+    token_start = loc->start;
+    BEGIN SC_TAG;
+  }
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 350 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     static int percent_percent_count;
     if (++percent_percent_count == 2)
@@ -1816,9 +2309,9 @@
     return PERCENT_PERCENT;
   }
 	YY_BREAK
-case 64:
+case 77:
 YY_RULE_SETUP
-#line 286 "scan-gram.l"
+#line 357 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     bracketed_id_str = NULL;
     bracketed_id_start = loc->start;
@@ -1826,59 +2319,72 @@
     BEGIN SC_BRACKETED_ID;
   }
 	YY_BREAK
-case 65:
+case 78:
 YY_RULE_SETUP
-#line 293 "scan-gram.l"
+#line 364 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    complain_at (*loc, "%s: %s",
-                 ngettext ("invalid character", "invalid characters", gram_leng),
-                 quote_mem (gram_text, gram_leng));
+    complain (loc, complaint, "%s: %s",
+              ngettext ("invalid character", "invalid characters", yyleng),
+              quote_mem (yytext, yyleng));
   }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 299 "scan-gram.l"
+#line 370 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     loc->start = loc->end = scanner_cursor;
     yyterminate ();
   }
 	YY_BREAK
 
+/*--------------------------------------------------------------.
+  | Supporting \0 complexifies our implementation for no expected |
+  | added value.                                                  |
+  `--------------------------------------------------------------*/
+
+
+case 79:
+YY_RULE_SETUP
+#line 384 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+complain (loc, complaint, _("invalid null character"));
+	YY_BREAK
+
 /*-----------------------------------------------------------------.
   | Scanning after an identifier, checking whether a colon is next.  |
   `-----------------------------------------------------------------*/
 
 
-case 66:
+case 80:
 YY_RULE_SETUP
-#line 312 "scan-gram.l"
+#line 394 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     if (bracketed_id_str)
       {
-	ROLLBACK_CURRENT_TOKEN;
-	BEGIN SC_RETURN_BRACKETED_ID;
-	*loc = id_loc;
-	return ID;
+        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;
+        bracketed_id_start = loc->start;
+        bracketed_id_context_state = YY_START;
+        BEGIN SC_BRACKETED_ID;
       }
   }
 	YY_BREAK
-case 67:
+case 81:
 YY_RULE_SETUP
-#line 327 "scan-gram.l"
+#line 409 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
+    ROLLBACK_CURRENT_TOKEN;
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
     return ID_COLON;
   }
 	YY_BREAK
-case 68:
+case 82:
 YY_RULE_SETUP
-#line 332 "scan-gram.l"
+#line 415 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
@@ -1887,7 +2393,7 @@
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
-#line 338 "scan-gram.l"
+#line 421 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
@@ -1900,53 +2406,54 @@
   `--------------------------------*/
 
 
-case 69:
+case 83:
 YY_RULE_SETUP
-#line 351 "scan-gram.l"
+#line 434 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     if (bracketed_id_str)
       {
-	complain_at (*loc, _("unexpected identifier in bracketed name: %s"),
-		     quote (gram_text));
+        complain (loc, complaint,
+                  _("unexpected identifier in bracketed name: %s"),
+                  quote (yytext));
       }
     else
       {
-	bracketed_id_str = uniqstr_new (gram_text);
-	bracketed_id_loc = *loc;
+        bracketed_id_str = uniqstr_new (yytext);
+        bracketed_id_loc = *loc;
       }
   }
 	YY_BREAK
-case 70:
+case 84:
 YY_RULE_SETUP
-#line 363 "scan-gram.l"
+#line 447 "/Users/akim/src/gnu/bison/src/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;
-	  }
+        if (INITIAL == bracketed_id_context_state)
+          {
+            val->BRACKETED_ID = bracketed_id_str;
+            bracketed_id_str = 0;
+            *loc = bracketed_id_loc;
+            return BRACKETED_ID;
+          }
       }
     else
-      complain_at (*loc, _("an identifier expected"));
+      complain (loc, complaint, _("an identifier expected"));
   }
 	YY_BREAK
-case 71:
+case 85:
 YY_RULE_SETUP
-#line 379 "scan-gram.l"
+#line 463 "/Users/akim/src/gnu/bison/src/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));
+    complain (loc, complaint, "%s: %s",
+              ngettext ("invalid character in bracketed name",
+                        "invalid characters in bracketed name", yyleng),
+              quote_mem (yytext, yyleng));
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_BRACKETED_ID):
-#line 386 "scan-gram.l"
+#line 470 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     BEGIN bracketed_id_context_state;
     unexpected_eof (bracketed_id_start, "]");
@@ -1955,12 +2462,12 @@
 
 
 
-case 72:
+case 86:
 YY_RULE_SETUP
-#line 394 "scan-gram.l"
+#line 478 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
-    val->uniqstr = bracketed_id_str;
+    val->BRACKETED_ID = bracketed_id_str;
     bracketed_id_str = 0;
     *loc = bracketed_id_loc;
     BEGIN INITIAL;
@@ -1973,19 +2480,19 @@
   `---------------------------------------------------------------*/
 
 
-case 73:
+case 87:
 YY_RULE_SETUP
-#line 411 "scan-gram.l"
+#line 495 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 BEGIN context_state;
 	YY_BREAK
-case 74:
-/* rule 74 can match eol */
+case 88:
+/* rule 88 can match eol */
 YY_RULE_SETUP
-#line 412 "scan-gram.l"
+#line 496 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 continue;
 	YY_BREAK
 case YY_STATE_EOF(SC_YACC_COMMENT):
-#line 413 "scan-gram.l"
+#line 497 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
 	YY_BREAK
 
@@ -1994,14 +2501,14 @@
   `------------------------------------------------------------*/
 
 
-case 75:
-/* rule 75 can match eol */
+case 89:
+/* rule 89 can match eol */
 YY_RULE_SETUP
-#line 423 "scan-gram.l"
+#line 507 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 424 "scan-gram.l"
+#line 508 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
 	YY_BREAK
 
@@ -2010,20 +2517,20 @@
   `--------------------------------------------------------------*/
 
 
-case 76:
-/* rule 76 can match eol */
+case 90:
+/* rule 90 can match eol */
 YY_RULE_SETUP
-#line 434 "scan-gram.l"
+#line 518 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 77:
-/* rule 77 can match eol */
+case 91:
+/* rule 91 can match eol */
 YY_RULE_SETUP
-#line 435 "scan-gram.l"
+#line 519 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 case YY_STATE_EOF(SC_LINE_COMMENT):
-#line 436 "scan-gram.l"
+#line 520 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 BEGIN context_state;
 	YY_BREAK
 
@@ -2033,94 +2540,105 @@
   `------------------------------------------------*/
 
 
-case 78:
-/* rule 78 can match eol */
+case 92:
 YY_RULE_SETUP
-#line 447 "scan-gram.l"
+#line 531 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    if (gram_text[0] == '\n')
-      unexpected_newline (token_start, "\"");
     STRING_FINISH;
-    loc->start = token_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return STRING;
+    loc->start = token_start;
+    complain (loc, Wyacc,
+              _("POSIX Yacc does not support string literals"));
+    RETURN_VALUE (STRING, last_string);
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 456 "scan-gram.l"
-{
-    unexpected_eof (token_start, "\"");
-    STRING_FINISH;
-    loc->start = token_start;
-    val->chars = last_string;
-    BEGIN INITIAL;
-    return STRING;
-  }
+#line 539 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (token_start, "\"");
+	YY_BREAK
+case 93:
+/* rule 93 can match eol */
+YY_RULE_SETUP
+#line 540 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_newline (token_start, "\"");
 	YY_BREAK
 
 /*----------------------------------------------------------.
   | Scanning a Bison character literal, decoding its escapes. |
-  | The initial quote is already eaten.			      |
+  | The initial quote is already eaten.                       |
   `----------------------------------------------------------*/
 
 
-case 79:
-/* rule 79 can match eol */
+case 94:
 YY_RULE_SETUP
-#line 473 "scan-gram.l"
+#line 550 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = token_start;
-    val->character = last_string[0];
+    val->CHAR = last_string[0];
+
+    /* FIXME: Eventually, make these errors.  */
+    if (last_string[0] == '\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"));
+      complain (loc, Wother, _("empty character literal"));
+      /* '\0' seems dangerous even if we are about to complain.  */
+      val->CHAR = '\'';
     }
-    if (gram_text[0] == '\n')
-      unexpected_newline (token_start, "'");
+    else if (last_string[1] != '\0')
+      complain (loc, Wother,
+                _("extra characters in character literal"));
     STRING_FREE;
     BEGIN INITIAL;
     return CHAR;
   }
 	YY_BREAK
+case 95:
+/* rule 95 can match eol */
+YY_RULE_SETUP
+#line 569 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_newline (token_start, "'");
+	YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#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;
-  }
+#line 570 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (token_start, "'");
 	YY_BREAK
 
+/*--------------------------------------------------------------.
+  | Scanning a tag.  The initial angle bracket is already eaten.  |
+  `--------------------------------------------------------------*/
 
 
-case 80:
+case 96:
 YY_RULE_SETUP
-#line 518 "scan-gram.l"
-complain_at (*loc, _("invalid null character"));
+#line 581 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = token_start;
+        val->TAG = uniqstr_new (last_string);
+        STRING_FREE;
+        BEGIN INITIAL;
+        return TAG;
+      }
+    STRING_GROW;
+  }
+	YY_BREAK
+case 97:
+/* rule 97 can match eol */
+YY_RULE_SETUP
+#line 595 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+STRING_GROW;
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 596 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+STRING_GROW; nesting += yyleng;
+	YY_BREAK
+case YY_STATE_EOF(SC_TAG):
+#line 598 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (token_start, ">");
 	YY_BREAK
 
 /*----------------------------.
@@ -2128,96 +2646,98 @@
   `----------------------------*/
 
 
-case 81:
+case 99:
 YY_RULE_SETUP
-#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 537 "scan-gram.l"
+#line 607 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     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
+    long c = strtol (yytext + 1, NULL, 8);
+    if (0 < c && c <= UCHAR_MAX)
       obstack_1grow (&obstack_for_string, c);
+    else
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
   }
 	YY_BREAK
-case 83:
+case 100:
 YY_RULE_SETUP
-#line 547 "scan-gram.l"
+#line 617 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+    verify (UCHAR_MAX < ULONG_MAX);
+    long c = strtol (yytext + 2, NULL, 16);
+    if (0 < c && c <= UCHAR_MAX)
+      obstack_1grow (&obstack_for_string, c);
+    else
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
+  }
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 627 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\a');
 	YY_BREAK
-case 84:
+case 102:
 YY_RULE_SETUP
-#line 548 "scan-gram.l"
+#line 628 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\b');
 	YY_BREAK
-case 85:
+case 103:
 YY_RULE_SETUP
-#line 549 "scan-gram.l"
+#line 629 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\f');
 	YY_BREAK
-case 86:
+case 104:
 YY_RULE_SETUP
-#line 550 "scan-gram.l"
+#line 630 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\n');
 	YY_BREAK
-case 87:
+case 105:
 YY_RULE_SETUP
-#line 551 "scan-gram.l"
+#line 631 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\r');
 	YY_BREAK
-case 88:
+case 106:
 YY_RULE_SETUP
-#line 552 "scan-gram.l"
+#line 632 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\t');
 	YY_BREAK
-case 89:
+case 107:
 YY_RULE_SETUP
-#line 553 "scan-gram.l"
+#line 633 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\v');
 	YY_BREAK
 /* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
-case 90:
+case 108:
 YY_RULE_SETUP
-#line 556 "scan-gram.l"
-obstack_1grow (&obstack_for_string, gram_text[1]);
+#line 636 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+obstack_1grow (&obstack_for_string, yytext[1]);
 	YY_BREAK
-case 91:
+case 109:
 YY_RULE_SETUP
-#line 558 "scan-gram.l"
+#line 638 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    int c = convert_ucn_to_byte (gram_text);
+    int c = convert_ucn_to_byte (yytext);
     if (c <= 0)
-      complain_at (*loc, _("invalid number after \\-escape: %s"),
-                   gram_text+1);
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
 	YY_BREAK
-case 92:
-/* rule 92 can match eol */
+case 110:
+/* rule 110 can match eol */
 YY_RULE_SETUP
-#line 566 "scan-gram.l"
+#line 646 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    char const *p = gram_text + 1;
+    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);
+    complain (loc, complaint, _("invalid character after \\-escape: %s"),
+              p);
   }
 	YY_BREAK
 
@@ -2226,47 +2746,47 @@
   `--------------------------------------------*/
 
 
-case 93:
-/* rule 93 can match eol */
+case 111:
+/* rule 111 can match eol */
 YY_RULE_SETUP
-#line 583 "scan-gram.l"
+#line 664 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 
 
 
-case 94:
+case 112:
 YY_RULE_SETUP
-#line 588 "scan-gram.l"
+#line 669 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 95:
-/* rule 95 can match eol */
+case 113:
+/* rule 113 can match eol */
 YY_RULE_SETUP
-#line 589 "scan-gram.l"
-unexpected_newline (token_start, "'"); BEGIN context_state;
+#line 670 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_newline (token_start, "'");
 	YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 590 "scan-gram.l"
-unexpected_eof (token_start, "'"); BEGIN context_state;
+#line 671 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (token_start, "'");
 	YY_BREAK
 
 
 
-case 96:
+case 114:
 YY_RULE_SETUP
-#line 595 "scan-gram.l"
+#line 676 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
 	YY_BREAK
-case 97:
-/* rule 97 can match eol */
+case 115:
+/* rule 115 can match eol */
 YY_RULE_SETUP
-#line 596 "scan-gram.l"
-unexpected_newline (token_start, "\""); BEGIN context_state;
+#line 677 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_newline (token_start, "\"");
 	YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 597 "scan-gram.l"
-unexpected_eof (token_start, "\""); BEGIN context_state;
+#line 678 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (token_start, "\"");
 	YY_BREAK
 
 /*---------------------------------------------------.
@@ -2274,9 +2794,9 @@
   `---------------------------------------------------*/
 
 
-case 98:
+case 116:
 YY_RULE_SETUP
-#line 607 "scan-gram.l"
+#line 688 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2284,9 +2804,9 @@
     BEGIN SC_CHARACTER;
   }
 	YY_BREAK
-case 99:
+case 117:
 YY_RULE_SETUP
-#line 613 "scan-gram.l"
+#line 694 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2294,10 +2814,10 @@
     BEGIN SC_STRING;
   }
 	YY_BREAK
-case 100:
-/* rule 100 can match eol */
+case 118:
+/* rule 118 can match eol */
 YY_RULE_SETUP
-#line 619 "scan-gram.l"
+#line 700 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2305,10 +2825,10 @@
     BEGIN SC_COMMENT;
   }
 	YY_BREAK
-case 101:
-/* rule 101 can match eol */
+case 119:
+/* rule 119 can match eol */
 YY_RULE_SETUP
-#line 625 "scan-gram.l"
+#line 706 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2317,57 +2837,72 @@
 	YY_BREAK
 
 /*-----------------------------------------------------------.
-  | Scanning some code in braces (actions). The initial "{" is |
-  | already eaten.                                             |
+  | Scanning some code in braces (actions, predicates). The    |
+  | initial "{" is already eaten.                              |
   `-----------------------------------------------------------*/
 
 
-case 102:
-/* rule 102 can match eol */
+case 120:
+/* rule 120 can match eol */
 YY_RULE_SETUP
-#line 641 "scan-gram.l"
-STRING_GROW; braces_level++;
+#line 722 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+STRING_GROW; nesting++;
 	YY_BREAK
-case 103:
-/* rule 103 can match eol */
+case 121:
+/* rule 121 can match eol */
 YY_RULE_SETUP
-#line 642 "scan-gram.l"
-STRING_GROW; braces_level--;
+#line 723 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+STRING_GROW; nesting--;
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 643 "scan-gram.l"
-{
-    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
+/* Tokenize '<<%' correctly (as '<<' '%') rather than incorrectly
      (as '<' '<%').  */
-case 105:
-/* rule 105 can match eol */
+case 122:
+/* rule 122 can match eol */
 YY_RULE_SETUP
-#line 659 "scan-gram.l"
+#line 727 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW;
 	YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
-#line 661 "scan-gram.l"
+case YY_STATE_EOF(SC_PREDICATE):
+#line 729 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (code_start, "}");
+	YY_BREAK
+
+
+
+case 123:
+YY_RULE_SETUP
+#line 734 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
-    unexpected_eof (code_start, "}");
-    STRING_FINISH;
-    loc->start = code_start;
-    val->code = last_string;
-    BEGIN INITIAL;
-    return BRACED_CODE;
+    obstack_1grow (&obstack_for_string, '}');
+
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = code_start;
+        BEGIN INITIAL;
+        RETURN_VALUE (BRACED_CODE, last_string);
+      }
+  }
+	YY_BREAK
+
+
+
+case 124:
+YY_RULE_SETUP
+#line 750 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+{
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = code_start;
+        BEGIN INITIAL;
+        RETURN_VALUE (BRACED_PREDICATE, last_string);
+      }
+    else
+      obstack_1grow (&obstack_for_string, '}');
   }
 	YY_BREAK
 
@@ -2376,27 +2911,19 @@
   `--------------------------------------------------------------*/
 
 
-case 106:
+case 125:
 YY_RULE_SETUP
-#line 678 "scan-gram.l"
+#line 770 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return PROLOGUE;
+    RETURN_VALUE (PROLOGUE, last_string);
   }
 	YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 686 "scan-gram.l"
-{
-    unexpected_eof (code_start, "%}");
-    STRING_FINISH;
-    loc->start = code_start;
-    val->chars = last_string;
-    BEGIN INITIAL;
-    return PROLOGUE;
-  }
+#line 777 "/Users/akim/src/gnu/bison/src/scan-gram.l"
+unexpected_eof (code_start, "%}");
 	YY_BREAK
 
 /*---------------------------------------------------------------.
@@ -2406,33 +2933,39 @@
 
 
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 704 "scan-gram.l"
+#line 788 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return EPILOGUE;
+    RETURN_VALUE (EPILOGUE, last_string);
   }
 	YY_BREAK
 
 /*-----------------------------------------------------.
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
-case 107:
-#line 719 "scan-gram.l"
-case 108:
-/* rule 108 can match eol */
+
+
+/* Accept multibyte characters in one block instead of byte after
+     byte, so that add_column_width and mbsnwidth can compute correct
+     screen width.
+
+     Add a fallthrough "|." so that non UTF-8 input is still accepted
+     and does not jam the scanner.  */
+case 126:
+/* rule 126 can match eol */
 YY_RULE_SETUP
-#line 719 "scan-gram.l"
+#line 809 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 STRING_GROW;
 	YY_BREAK
-case 109:
+
+case 127:
 YY_RULE_SETUP
-#line 721 "scan-gram.l"
+#line 812 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2436 "scan-gram.c"
+#line 2968 "src/scan-gram.c"
 case YY_STATE_EOF(SC_RETURN_BRACKETED_ID):
 	yyterminate();
 
@@ -2449,15 +2982,19 @@
 			{
 			/* We're scanning a new file or input source.  It's
 			 * possible that this happened because the user
-			 * just pointed gram_in at a new source and called
-			 * gram_lex().  If so, then we have to assure
+			 * 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 = gram_in;
+/* %if-c-only */
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
@@ -2512,11 +3049,11 @@
 				{
 				(yy_did_buffer_switch_on_eof) = 0;
 
-				if ( gram_wrap( ) )
+				if ( yywrap(  ) )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
-					 * gram_text, we can now 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
@@ -2565,12 +3102,12 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-} /* end of gram_lex */
+	} /* end of user's declarations */
+} /* end of yylex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
-
 /* %ok-for-header */
 
 /* %endif */
@@ -2588,9 +3125,9 @@
 /* %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;
+    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = (yytext_ptr);
+	int number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -2619,7 +3156,7 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -2632,7 +3169,7 @@
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -2646,7 +3183,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2655,11 +3192,12 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					gram_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyrealloc( (void *) b->yy_ch_buf,
+							 (yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -2687,7 +3225,7 @@
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			gram_restart(gram_in  );
+			yyrestart( yyin  );
 			}
 
 		else
@@ -2701,12 +3239,15 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if (((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  );
+		int 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, (yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+		/* "- 2" to take care of EOB's */
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
 	}
 
 	(yy_n_chars) += number_to_move;
@@ -2722,14 +3263,13 @@
 
 /* %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;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
 	yy_current_state = (yy_start);
@@ -2738,7 +3278,7 @@
 	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)] : 58);
+		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 72);
 		if ( yy_accept[yy_current_state] )
 			{
 			(yy_last_accepting_state) = yy_current_state;
@@ -2747,10 +3287,10 @@
 		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 >= 482 )
-				yy_c = yy_meta[(unsigned int) yy_c];
+			if ( yy_current_state >= 600 )
+				yy_c = yy_meta[yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 		}
 
 	return yy_current_state;
@@ -2767,11 +3307,11 @@
 /* %if-c++-only */
 /* %endif */
 {
-	register int yy_is_jam;
+	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);
+	char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 58;
+	YY_CHAR yy_c = 72;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -2780,18 +3320,63 @@
 	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 >= 482 )
-			yy_c = yy_meta[(unsigned int) yy_c];
+		if ( yy_current_state >= 600 )
+			yy_c = yy_meta[yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 481);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+	yy_is_jam = (yy_current_state == 599);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
+/* %if-c-only */
+
+    static void yyunput (int c, char * yy_bp )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+	char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up yytext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		int number_to_move = (yy_n_chars) + 2;
+		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+/* %% [18.0] update yylineno here */
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
 /* %if-c-only */
 
 /* %endif */
+#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -2821,7 +3406,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2838,14 +3423,14 @@
 					 */
 
 					/* Reset buffer status. */
-					gram_restart(gram_in );
+					yyrestart( yyin );
 
 					/*FALLTHROUGH*/
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( gram_wrap( ) )
-						return EOF;
+					if ( yywrap(  ) )
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2864,10 +3449,10 @@
 		}
 
 	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve gram_text */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
 	(yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and gram_lineno */
+/* %% [19.0] update BOL and yylineno */
 	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
 
 	return c;
@@ -2882,28 +3467,31 @@
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void gram_restart  (FILE * input_file )
+    void yyrestart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
 	if ( ! YY_CURRENT_BUFFER ){
-        gram_ensure_buffer_stack ();
+        yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
-            gram__create_buffer(gram_in,YY_BUF_SIZE );
+            yy_create_buffer( yyin, YY_BUF_SIZE );
 	}
 
-	gram__init_buffer(YY_CURRENT_BUFFER,input_file );
-	gram__load_buffer_state( );
+	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+	yy_load_buffer_state(  );
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
  */
 /* %if-c-only */
-    void gram__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2911,10 +3499,10 @@
     
 	/* TODO. We should be able to replace this entire function body
 	 * with
-	 *		gram_pop_buffer_state();
-	 *		gram_push_buffer_state(new_buffer);
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
      */
-	gram_ensure_buffer_stack ();
+	yyensure_buffer_stack ();
 	if ( YY_CURRENT_BUFFER == new_buffer )
 		return;
 
@@ -2927,25 +3515,29 @@
 		}
 
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	gram__load_buffer_state( );
+	yy_load_buffer_state(  );
 
 	/* We don't actually know whether we did this switch during
-	 * EOF (gram_wrap()) processing, but the only time this flag
-	 * is looked at is after gram_wrap() is called, so it's safe
+	 * 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 gram__load_buffer_state  (void)
+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;
-	gram_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %if-c-only */
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	(yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -2956,39 +3548,42 @@
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE gram__create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
 	YY_BUFFER_STATE b;
     
-	b = (YY_BUFFER_STATE) gram_alloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in gram__create_buffer()" );
+		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 *) gram_alloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in gram__create_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	gram__init_buffer(b,file );
+	yy_init_buffer( b, file );
 
 	return b;
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Destroy the buffer.
- * @param b a buffer created with gram__create_buffer()
+ * @param b a buffer created with yy_create_buffer()
  * 
  */
 /* %if-c-only */
-    void gram__delete_buffer (YY_BUFFER_STATE  b )
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3001,17 +3596,17 @@
 		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		gram_free((void *) b->yy_ch_buf  );
+		yyfree( (void *) b->yy_ch_buf  );
 
-	gram_free((void *) b  );
+	yyfree( (void *) b  );
 }
 
 /* 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.
+ * such as during a yyrestart() or at EOF.
  */
 /* %if-c-only */
-    static void gram__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3019,13 +3614,17 @@
 {
 	int oerrno = errno;
     
-	gram__flush_buffer(b );
+	yy_flush_buffer( b );
 
+/* %if-c-only */
 	b->yy_input_file = file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then gram__init_buffer was _probably_
-     * called from gram_restart() or through yy_get_next_buffer.
+    /* 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){
@@ -3048,7 +3647,7 @@
  * 
  */
 /* %if-c-only */
-    void gram__flush_buffer (YY_BUFFER_STATE  b )
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3071,7 +3670,7 @@
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
 	if ( b == YY_CURRENT_BUFFER )
-		gram__load_buffer_state( );
+		yy_load_buffer_state(  );
 }
 
 /* %if-c-or-c++ */
@@ -3082,7 +3681,7 @@
  *  
  */
 /* %if-c-only */
-void gram_push_buffer_state (YY_BUFFER_STATE new_buffer )
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3090,9 +3689,9 @@
     	if (new_buffer == NULL)
 		return;
 
-	gram_ensure_buffer_stack();
+	yyensure_buffer_stack();
 
-	/* This block is copied from gram__switch_to_buffer. */
+	/* This block is copied from yy_switch_to_buffer. */
 	if ( YY_CURRENT_BUFFER )
 		{
 		/* Flush out information for old buffer. */
@@ -3106,8 +3705,8 @@
 		(yy_buffer_stack_top)++;
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-	/* copied from gram__switch_to_buffer. */
-	gram__load_buffer_state( );
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state(  );
 	(yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -3118,7 +3717,7 @@
  *  
  */
 /* %if-c-only */
-void gram_pop_buffer_state (void)
+void yypop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3126,13 +3725,13 @@
     	if (!YY_CURRENT_BUFFER)
 		return;
 
-	gram__delete_buffer(YY_CURRENT_BUFFER );
+	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) {
-		gram__load_buffer_state( );
+		yy_load_buffer_state(  );
 		(yy_did_buffer_switch_on_eof) = 1;
 	}
 }
@@ -3143,7 +3742,7 @@
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void gram_ensure_buffer_stack (void)
+static void yyensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3156,15 +3755,15 @@
 		 * 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**)gram_alloc
+      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+		(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 gram_ensure_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;
@@ -3173,15 +3772,15 @@
 	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 */;
+		yy_size_t grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)gram_realloc
+		(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 gram_ensure_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*));
@@ -3195,9 +3794,9 @@
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object. 
+ * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE gram__scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
 	YY_BUFFER_STATE b;
     
@@ -3205,53 +3804,53 @@
 	     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;
+		return NULL;
 
-	b = (YY_BUFFER_STATE) gram_alloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in gram__scan_buffer()" );
+		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_size = (int) (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_input_file = NULL;
 	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;
 
-	gram__switch_to_buffer(b  );
+	yy_switch_to_buffer( b  );
 
 	return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to gram_lex() will
+/** 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
- *       gram__scan_bytes() instead.
+ *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE gram__scan_string (yyconst char * yystr )
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
 {
     
-	return gram__scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes( yystr, (int) strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to gram_lex() will
+/** 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 gram__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -3259,19 +3858,19 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) gram_alloc(n  );
+	n = (yy_size_t) (_yybytes_len + 2);
+	buf = (char *) yyalloc( n  );
 	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in gram__scan_bytes()" );
+		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 = gram__scan_buffer(buf,n );
+	b = yy_scan_buffer( buf, n );
 	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in gram__scan_bytes()" );
+		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.
@@ -3287,9 +3886,9 @@
 #endif
 
 /* %if-c-only */
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (const char* msg )
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+			fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -3302,14 +3901,14 @@
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up gram_text. */ \
+		/* Undo effects of setting up yytext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-		gram_text[gram_leng] = (yy_hold_char); \
-		(yy_c_buf_p) = gram_text + 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'; \
-		gram_leng = yyless_macro_arg; \
+		yyleng = yyless_macro_arg; \
 		} \
 	while ( 0 )
 
@@ -3322,82 +3921,82 @@
 /** Get the current line number.
  * 
  */
-int gram_get_lineno  (void)
+int yyget_lineno  (void)
 {
-        
-    return gram_lineno;
+    
+    return yylineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *gram_get_in  (void)
+FILE *yyget_in  (void)
 {
-        return gram_in;
+        return yyin;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *gram_get_out  (void)
+FILE *yyget_out  (void)
 {
-        return gram_out;
+        return yyout;
 }
 
 /** Get the length of the current token.
  * 
  */
-yy_size_t gram_get_leng  (void)
+int yyget_leng  (void)
 {
-        return gram_leng;
+        return yyleng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *gram_get_text  (void)
+char *yyget_text  (void)
 {
-        return gram_text;
+        return yytext;
 }
 
 /* %if-reentrant */
 /* %endif */
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void gram_set_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    gram_lineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
- * @see gram__switch_to_buffer
+ * @see yy_switch_to_buffer
  */
-void gram_set_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        gram_in = in_str ;
+        yyin = _in_str ;
 }
 
-void gram_set_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        gram_out = out_str ;
+        yyout = _out_str ;
 }
 
-int gram_get_debug  (void)
+int yyget_debug  (void)
 {
-        return gram__flex_debug;
+        return yy_flex_debug;
 }
 
-void gram_set_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        gram__flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -3411,50 +4010,50 @@
 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.
+     * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    gram_in = stdin;
-    gram_out = stdout;
+    yyin = stdin;
+    yyout = stdout;
 #else
-    gram_in = (FILE *) 0;
-    gram_out = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * gram_lex_init()
+     * yylex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* gram_lex_destroy is for both reentrant and non-reentrant scanners. */
-int gram_lex_destroy  (void)
+/* 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){
-		gram__delete_buffer(YY_CURRENT_BUFFER  );
+		yy_delete_buffer( YY_CURRENT_BUFFER  );
 		YY_CURRENT_BUFFER_LVALUE = NULL;
-		gram_pop_buffer_state();
+		yypop_buffer_state();
 	}
 
 	/* Destroy the stack itself. */
-	gram_free((yy_buffer_stack) );
+	yyfree((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. */
+     * yylex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -3468,18 +4067,19 @@
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
 {
-	register int i;
+		
+	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 )
+static int yy_flex_strlen (const char * s )
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -3487,13 +4087,14 @@
 }
 #endif
 
-void *gram_alloc (yy_size_t  size )
+void *yyalloc (yy_size_t  size )
 {
-	return (void *) malloc( size );
+			return malloc(size);
 }
 
-void *gram_realloc  (void * ptr, yy_size_t  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
@@ -3501,12 +4102,12 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
-void gram_free (void * ptr )
+void yyfree (void * ptr )
 {
-	free( (char *) ptr );	/* see gram_realloc() for (char *) cast */
+			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -3516,55 +4117,7 @@
 
 /* %ok-for-header */
 
-#line 721 "scan-gram.l"
-
-
-
-/* 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.  */
-
-static size_t
-no_cr_read (FILE *fp, char *buf, size_t size)
-{
-  size_t bytes_read = fread (buf, 1, size, fp);
-  if (bytes_read)
-    {
-      char *w = memchr (buf, '\r', bytes_read);
-      if (w)
-	{
-	  char const *r = ++w;
-	  char const *lim = buf + bytes_read;
-
-	  for (;;)
-	    {
-	      /* Found an '\r'.  Treat it like '\n', but ignore any
-		 '\n' that immediately follows.  */
-	      w[-1] = '\n';
-	      if (r == lim)
-		{
-		  int ch = getc (fp);
-		  if (ch != '\n' && ungetc (ch, fp) != ch)
-		    break;
-		}
-	      else if (*r == '\n')
-		r++;
-
-	      /* Copy until the next '\r'.  */
-	      do
-		{
-		  if (r == lim)
-		    return w - buf;
-		}
-	      while ((*w++ = *r++) != '\r');
-	    }
-
-	  return w - buf;
-	}
-    }
-
-  return bytes_read;
-}
+#line 812 "/Users/akim/src/gnu/bison/src/scan-gram.l"
 
 
 
@@ -3572,15 +4125,21 @@
 | Scan NUMBER for a base-BASE integer at location LOC.  |
 `------------------------------------------------------*/
 
-static unsigned long int
+static int
 scan_integer (char const *number, int base, location loc)
 {
   verify (INT_MAX < ULONG_MAX);
-  unsigned long int num = strtoul (number, NULL, base);
+  if (base == 16)
+    complain (&loc, Wyacc,
+              _("POSIX Yacc does not support hexadecimal literals"));
 
-  if (INT_MAX < num)
+  errno = 0;
+  long num = strtol (number, NULL, base);
+
+  if (! (0 <= num && num <= INT_MAX && errno == 0))
     {
-      complain_at (loc, _("integer out of range: %s"), quote (number));
+      complain (&loc, complaint, _("integer out of range: %s"),
+                quote (number));
       num = INT_MAX;
     }
 
@@ -3591,14 +4150,14 @@
 /*------------------------------------------------------------------.
 | Convert universal character name UCN to a single-byte character,  |
 | and return that character.  Return -1 if UCN does not correspond  |
-| to a single-byte character.					    |
+| to a single-byte character.                                       |
 `------------------------------------------------------------------*/
 
 static int
 convert_ucn_to_byte (char const *ucn)
 {
   verify (UCHAR_MAX <= INT_MAX);
-  unsigned long int code = strtoul (ucn + 2, NULL, 16);
+  long code = strtol (ucn + 2, NULL, 16);
 
   /* FIXME: Currently we assume Unicode-compatible unibyte characters
      on ASCII hosts (i.e., Latin-1 on hosts with 8-bit bytes).  On
@@ -3606,7 +4165,7 @@
      These limitations should be removed once we add support for
      multibyte characters.  */
 
-  if (UCHAR_MAX < code)
+  if (! (0 <= code && code <= UCHAR_MAX))
     return -1;
 
 #if ! ('$' == 0x24 && '@' == 0x40 && '`' == 0x60 && '~' == 0x7e)
@@ -3619,22 +4178,22 @@
        about.  */
     static signed char const table[] =
       {
-	'\0',   -1,   -1,   -1,   -1,   -1,   -1, '\a',
-	'\b', '\t', '\n', '\v', '\f', '\r',   -1,   -1,
-	  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-	  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-	 ' ',  '!',  '"',  '#',  '$',  '%',  '&', '\'',
-	 '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',
-	 '0',  '1',  '2',  '3',  '4',  '5',  '6',  '7',
-	 '8',  '9',  ':',  ';',  '<',  '=',  '>',  '?',
-	 '@',  'A',  'B',  'C',  'D',  'E',  'F',  'G',
-	 'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',
-	 'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',
-	 'X',  'Y',  'Z',  '[', '\\',  ']',  '^',  '_',
-	 '`',  'a',  'b',  'c',  'd',  'e',  'f',  'g',
-	 'h',  'i',  'j',  'k',  'l',  'm',  'n',  'o',
-	 'p',  'q',  'r',  's',  't',  'u',  'v',  'w',
-	 'x',  'y',  'z',  '{',  '|',  '}',  '~'
+        '\0',   -1,   -1,   -1,   -1,   -1,   -1, '\a',
+        '\b', '\t', '\n', '\v', '\f', '\r',   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+         ' ',  '!',  '"',  '#',  '$',  '%',  '&', '\'',
+         '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',
+         '0',  '1',  '2',  '3',  '4',  '5',  '6',  '7',
+         '8',  '9',  ':',  ';',  '<',  '=',  '>',  '?',
+         '@',  'A',  'B',  'C',  'D',  'E',  'F',  'G',
+         'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',
+         'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',
+         'X',  'Y',  'Z',  '[', '\\',  ']',  '^',  '_',
+         '`',  'a',  'b',  'c',  'd',  'e',  'f',  'g',
+         'h',  'i',  'j',  'k',  'l',  'm',  'n',  'o',
+         'p',  'q',  'r',  's',  't',  'u',  'v',  'w',
+         'x',  'y',  'z',  '{',  '|',  '}',  '~'
       };
 
     code = code < sizeof table ? table[code] : -1;
@@ -3653,27 +4212,28 @@
 handle_syncline (char *args, location loc)
 {
   char *file;
-  unsigned long int lineno = strtoul (args, &file, 10);
-  if (INT_MAX <= lineno)
+  errno = 0;
+  long lineno = strtol (args, &file, 10);
+  if (! (0 <= lineno && lineno <= INT_MAX && errno == 0))
     {
-      warn_at (loc, _("line number overflow"));
+      complain (&loc, Wother, _("line number overflow"));
       lineno = INT_MAX;
     }
 
-  file = mbschr (file, '"');
+  file = strchr (file, '"');
   if (file)
     {
-      *mbschr (file + 1, '"') = '\0';
+      *strchr (file + 1, '"') = '\0';
       current_file = uniqstr_new (file + 1);
     }
-  boundary_set (&scanner_cursor, current_file, lineno, 1);
+  boundary_set (&scanner_cursor, current_file, lineno, 1, 1);
 }
 
 
 /*----------------------------------------------------------------.
 | For a token or comment starting at START, report message MSGID, |
-| which should say that an end marker was found before		  |
-| the expected TOKEN_END.					  |
+| which should say that an end marker was found before the        |
+| expected TOKEN_END. Then, pretend that TOKEN_END was found.     |
 `----------------------------------------------------------------*/
 
 static void
@@ -3682,23 +4242,34 @@
   location loc;
   loc.start = start;
   loc.end = scanner_cursor;
+  size_t i = strlen (token_end);
+
+  /* Adjust scanner cursor so that any later message does not count
+     the characters about to be inserted.  */
+  scanner_cursor.column -= i;
+  scanner_cursor.byte -= i;
+
+  while (i != 0)
+    unput (token_end[--i]);
+
   token_end = quote (token_end);
   /* Instead of '\'', display "'".  */
-  if (!strcmp (token_end, "'\\''"))
+  if (STREQ (token_end, "'\\''"))
     token_end = "\"'\"";
-  complain_at (loc, _(msgid), token_end);
+  complain (&loc, complaint, msgid, token_end);
 }
 
 
 /*------------------------------------------------------------------------.
 | Report an unexpected EOF in a token or comment starting at START.       |
 | An end of file was encountered and the expected TOKEN_END was missing.  |
+| After reporting the problem, pretend that TOKEN_END was found.          |
 `------------------------------------------------------------------------*/
 
 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, _("missing %s at end of file"), token_end);
 }
 
 
@@ -3709,30 +4280,34 @@
 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, _("missing %s at end of line"), token_end);
 }
 
 
-/*-------------------------.
-| Initialize the scanner.  |
-`-------------------------*/
-
 void
-gram_scanner_initialize (void)
+gram_scanner_open (const char *gram)
 {
+  gram__flex_debug = trace_flag & trace_scan;
+  gram_debug = trace_flag & trace_parse;
   obstack_init (&obstack_for_string);
+  current_file = gram;
+  gram_in = xfopen (gram, "r");
 }
 
 
-/*-----------------------------------------------.
-| Free all the memory allocated to the scanner.  |
-`-----------------------------------------------*/
+void
+gram_scanner_close ()
+{
+  xfclose (gram_in);
+  /* Reclaim Flex's buffers.  */
+  yylex_destroy ();
+}
+
+
 
 void
 gram_scanner_free (void)
 {
   obstack_free (&obstack_for_string, 0);
-  /* Reclaim Flex's buffers.  */
-  gram_lex_destroy ();
 }
 
diff --git a/src/scan-gram.h b/src/scan-gram.h
index 72138a2..0b16e76 100644
--- a/src/scan-gram.h
+++ b/src/scan-gram.h
@@ -1,6 +1,7 @@
 /* Bison Grammar Scanner
 
-   Copyright (C) 2006-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2006-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,18 +21,15 @@
 #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);
+/* Initialize the scanner to read file GRAM. */
+void gram_scanner_open (const char *gram);
+/* Close the open files.  */
+void gram_scanner_close (void);
+
+/* Free all the memory allocated to the scanner. */
 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;
 
diff --git a/src/scan-gram.l b/src/scan-gram.l
index 9083dce..7fc23ab 100644
--- a/src/scan-gram.l
+++ b/src/scan-gram.l
@@ -1,6 +1,6 @@
 /* Bison Grammar Scanner                             -*- C -*-
 
-   Copyright (C) 2002-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -17,55 +17,80 @@
    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 debug nodefault noinput noyywrap never-interactive
 %option prefix="gram_" outfile="lex.yy.c"
 
 %{
+#include <errno.h>
+
+#include <c-ctype.h>
+#include <mbswidth.h>
+#include <quote.h>
+#include <quotearg.h>
+
+#include <src/complain.h>
+#include <src/files.h>
+#include <src/getargs.h>
+#include <src/gram.h>
+#include <src/reader.h>
+#include <src/scan-gram.h>
+#include <src/uniqstr.h>
+
+#define FLEX_PREFIX(Id) gram_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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
 
-#define FLEX_PREFIX(Id) gram_ ## Id
-#include "flex-scanner.h"
-
-#include "complain.h"
-#include "files.h"
-#include "gram.h"
-#include "quotearg.h"
-#include "reader.h"
-#include "uniqstr.h"
-
-#include <c-ctype.h>
-#include <mbswidth.h>
-#include <quote.h>
-
-#include "scan-gram.h"
-
 #define YY_DECL GRAM_LEX_DECL
 
-#define YY_USER_INIT					\
-   code_start = scanner_cursor = loc->start;		\
-
 /* Location of scanner cursor.  */
 static boundary scanner_cursor;
 
 #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))
+/* Report that yytext is an extension, and evaluate to its token type.  */
+#define BISON_DIRECTIVE(Directive)                              \
+  (bison_directive (loc, yytext), PERCENT_ ## Directive)
+
+#define RETURN_PERCENT_PARAM(Value)             \
+  RETURN_VALUE(PERCENT_PARAM, param_ ## Value)
+
+#define RETURN_PERCENT_FLAG(Value)                      \
+  RETURN_VALUE(PERCENT_FLAG, uniqstr_new (Value))
+
+#define RETURN_VALUE(Token, Value)              \
+  do {                                          \
+    val->Token = Value;                         \
+    return Token;                               \
+  } while (0)
 
 #define ROLLBACK_CURRENT_TOKEN                                  \
   do {                                                          \
-    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);	\
+    scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0);     \
+    scanner_cursor.byte -= yyleng;                              \
     yyless (0);                                                 \
   } while (0)
 
+#define DEPRECATED(Msg)                                         \
+  do {                                                          \
+    deprecated_directive (loc, yytext, Msg);                    \
+    scanner_cursor.column -= mbsnwidth (Msg, strlen (Msg), 0);  \
+    scanner_cursor.byte -= strlen (Msg);                        \
+    for (size_t i = strlen (Msg); i != 0; --i)                  \
+      unput (Msg[i - 1]);                                       \
+  } while (0)
+
+/* The current file name.  Might change with #line.  */
+static uniqstr current_file = NULL;
+
 /* A string representing the most recently saved token.  */
-static char *last_string;
+static char *last_string = NULL;
 
 /* Bracketed identifier. */
-static uniqstr bracketed_id_str = 0;
+static uniqstr bracketed_id_str = NULL;
 static location bracketed_id_loc;
 static boundary bracketed_id_start;
 static int bracketed_id_context_state = 0;
@@ -77,7 +102,7 @@
 }
 
 static void handle_syncline (char *, location);
-static unsigned long int scan_integer (char const *p, int base, location loc);
+static 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 *);
@@ -91,11 +116,19 @@
     to capture the sequence 'identifier :'. */
 %x SC_AFTER_IDENTIFIER
 
- /* Three types of user code:
+ /* 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, as this simplifies our implementation.  We match
+    angle brackets in nested pairs: several languages use them for
+    generics/template types.  */
+%x SC_TAG
+
+ /* Four 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
+    - epilogue (everything after the second %%).
+    - predicate (code between '%?{' and '{' in middle section); */
+%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE SC_PREDICATE
  /* C and C++ comments in code. */
 %x SC_COMMENT SC_LINE_COMMENT
  /* Strings and characters in code. */
@@ -103,30 +136,36 @@
  /* Bracketed identifiers support. */
 %x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID
 
-letter	   [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
-notletter [^.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]{-}[%\{]
-id	  {letter}({letter}|[-0-9])*
-int	  [0-9]+
+letter    [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
+id        {letter}({letter}|[-0-9])*
+int       [0-9]+
+xint      0[xX][0-9abcdefABCDEF]+
 
-/* 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>]+
+eol       \n|\r\n
+
+ /* UTF-8 Encoded Unicode Code Point, from Flex's documentation. */
+mbchar    [\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF]([\x80-\xBF]{2})|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x\90-\xBF]([\x80-\xBF]{2})|[\xF1-\xF3]([\x80-\xBF]{3})|\xF4[\x80-\x8F]([\x80-\xBF]{2})
 
 /* Zero or more instances of backslash-newline.  Following GCC, allow
    white space between the backslash and the newline.  */
-splice	 (\\[ \f\t\v]*\n)*
+splice   (\\[ \f\t\v]*{eol})*
+
+/* An equal sign, with optional leading whitespaces. This is used in some
+   deprecated constructs. */
+sp       [[:space:]]*
+eqopt    ({sp}=)?
 
 %%
 %{
-  /* Nesting level of the current code in braces.  */
-  int braces_level PACIFY_CC (= 0);
+  /* Nesting level.  Either for nested braces, or nested angle brackets
+     (but not mixed).  */
+  int nesting PACIFY_CC (= 0);
 
   /* Parent context state, when applicable.  */
   int context_state PACIFY_CC (= 0);
 
   /* Location of most recent identifier, when applicable.  */
-  location id_loc PACIFY_CC (= empty_location);
+  location id_loc PACIFY_CC (= empty_loc);
 
   /* Where containing code started, when applicable.  Its initial
      value is relevant only when yylex is invoked in the SC_EPILOGUE
@@ -136,6 +175,15 @@
   /* Where containing comment or string or character literal started,
      when applicable.  */
   boundary token_start PACIFY_CC (= scanner_cursor);
+
+  /* We cannot trust YY_USER_INIT, whose semantics changes over time
+     (it moved in Flex 2.5.38).  */
+  static bool first = true;
+  if (first)
+    {
+      scanner_cursor = loc->start;
+      first = false;
+    }
 %}
 
 
@@ -146,8 +194,10 @@
 <INITIAL,SC_AFTER_IDENTIFIER,SC_BRACKETED_ID,SC_RETURN_BRACKETED_ID>
 {
   /* Comments and white space.  */
-  ","          warn_at (*loc, _("stray ',' treated as white space"));
-  [ \f\n\t\v]  |
+  "," {
+     complain (loc, Wother, _("stray ',' treated as white space"));
+  }
+  [ \f\t\v\r]|{eol}  |
   "//".*       continue;
   "/*" {
     token_start = loc->start;
@@ -155,9 +205,7 @@
     BEGIN SC_YACC_COMMENT;
   }
 
-  /* #line directives are not documented, and may be withdrawn or
-     modified in future versions of Bison.  */
-  ^"#line "{int}(" \"".*"\"")?"\n" {
+  ^"#line "{int}(" \"".*"\"")?{eol} {
     handle_syncline (yytext + sizeof "#line " - 1, *loc);
   }
 }
@@ -168,93 +216,108 @@
   `----------------------------*/
 
   /* 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;
-  "%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"                 return PERCENT_INITIAL_ACTION;
-  "%glr-parser"                     return PERCENT_GLR_PARSER;
-  "%language"                       return PERCENT_LANGUAGE;
+  "%binary"                         return BISON_DIRECTIVE (NONASSOC);
+  "%code"                           return BISON_DIRECTIVE (CODE);
+  "%debug"                          RETURN_PERCENT_FLAG ("parse.trace");
+  "%default-prec"                   return BISON_DIRECTIVE (DEFAULT_PREC);
+  "%define"                         return BISON_DIRECTIVE (DEFINE);
+  "%defines"                        return BISON_DIRECTIVE (DEFINES);
+  "%destructor"                     return BISON_DIRECTIVE (DESTRUCTOR);
+  "%dprec"                          return BISON_DIRECTIVE (DPREC);
+  "%empty"                          return BISON_DIRECTIVE (EMPTY);
+  "%expect"                         return BISON_DIRECTIVE (EXPECT);
+  "%expect-rr"                      return BISON_DIRECTIVE (EXPECT_RR);
+  "%file-prefix"                    RETURN_VALUE (PERCENT_FILE_PREFIX, uniqstr_new (yytext));
+  "%initial-action"                 return BISON_DIRECTIVE (INITIAL_ACTION);
+  "%glr-parser"                     return BISON_DIRECTIVE (GLR_PARSER);
+  "%language"                       return BISON_DIRECTIVE (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;
+  "%lex-param"                      RETURN_PERCENT_PARAM (lex);
+  "%locations"                      RETURN_PERCENT_FLAG ("locations");
+  "%merge"                          return BISON_DIRECTIVE (MERGE);
+  "%no-default-prec"                return BISON_DIRECTIVE (NO_DEFAULT_PREC);
+  "%no-lines"                       return BISON_DIRECTIVE (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;
+  "%nondeterministic-parser"        return BISON_DIRECTIVE (NONDETERMINISTIC_PARSER);
+  "%nterm"                          return BISON_DIRECTIVE (NTERM);
+  "%output"                         return BISON_DIRECTIVE (OUTPUT);
+  "%param"                          RETURN_PERCENT_PARAM (both);
+  "%parse-param"                    RETURN_PERCENT_PARAM (parse);
   "%prec"                           return PERCENT_PREC;
-  "%printer"                        return PERCENT_PRINTER;
-  "%pure"[-_]"parser"               return PERCENT_PURE_PARSER;
-  "%require"                        return PERCENT_REQUIRE;
+  "%precedence"                     return BISON_DIRECTIVE (PRECEDENCE);
+  "%printer"                        return BISON_DIRECTIVE (PRINTER);
+  "%require"                        return BISON_DIRECTIVE (REQUIRE);
   "%right"                          return PERCENT_RIGHT;
-  "%skeleton"                       return PERCENT_SKELETON;
+  "%skeleton"                       return BISON_DIRECTIVE (SKELETON);
   "%start"                          return PERCENT_START;
-  "%term"                           return PERCENT_TOKEN;
+  "%term"                           return BISON_DIRECTIVE (TOKEN);
   "%token"                          return PERCENT_TOKEN;
-  "%token"[-_]"table"               return PERCENT_TOKEN_TABLE;
+  "%token-table"                    return BISON_DIRECTIVE (TOKEN_TABLE);
   "%type"                           return PERCENT_TYPE;
   "%union"                          return PERCENT_UNION;
-  "%verbose"                        return PERCENT_VERBOSE;
+  "%verbose"                        return BISON_DIRECTIVE (VERBOSE);
   "%yacc"                           return PERCENT_YACC;
 
-  "%"{id}|"%"{notletter}([[:graph:]])+ {
-    complain_at (*loc, _("invalid directive: %s"), quote (yytext));
+  /* Deprecated since Bison 2.3b (2008-05-27), but the warning is
+     issued only since Bison 3.4. */
+  "%pure"[-_]"parser"               RETURN_VALUE (PERCENT_PURE_PARSER, uniqstr_new (yytext));
+
+  /* Deprecated since Bison 3.0 (2013-07-25), but the warning is
+     issued only since Bison 3.3. */
+  "%error-verbose"                  RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
+
+  /* Deprecated since Bison 2.6 (2012-07-19), but the warning is
+     issued only since Bison 3.3. */
+  "%name"[-_]"prefix"{eqopt}{sp}    RETURN_VALUE (PERCENT_NAME_PREFIX, uniqstr_new (yytext));
+
+  /* Deprecated since Bison 2.7.90, 2012. */
+  "%default"[-_]"prec"              DEPRECATED ("%default-prec");
+  "%error"[-_]"verbose"             RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
+  "%expect"[-_]"rr"                 DEPRECATED ("%expect-rr");
+  "%file-prefix"{eqopt}             RETURN_VALUE (PERCENT_FILE_PREFIX, uniqstr_new (yytext));
+  "%fixed"[-_]"output"[-_]"files"   DEPRECATED ("%output \"y.tab.c\"");
+  "%no"[-_]"default"[-_]"prec"      DEPRECATED ("%no-default-prec");
+  "%no"[-_]"lines"                  DEPRECATED ("%no-lines");
+  "%output"{eqopt}                  DEPRECATED ("%output");
+  "%token"[-_]"table"               DEPRECATED ("%token-table");
+
+  "%"{id} {
+    complain (loc, complaint, _("invalid directive: %s"), quote (yytext));
   }
 
+  ":"                     return COLON;
   "="                     return EQUAL;
   "|"                     return PIPE;
   ";"                     return SEMICOLON;
-  "<*>"                   return TYPE_TAG_ANY;
-  "<>"                    return TYPE_TAG_NONE;
 
   {id} {
-    val->uniqstr = uniqstr_new (yytext);
+    val->ID = uniqstr_new (yytext);
     id_loc = *loc;
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
   }
 
-  {int} {
-    val->integer = scan_integer (yytext, 10, *loc);
-    return INT;
-  }
-  0[xX][0-9abcdefABCDEF]+ {
-    val->integer = scan_integer (yytext, 16, *loc);
-    return INT;
-  }
+  {int}      RETURN_VALUE (INT, scan_integer (yytext, 10, *loc));
+  {xint}     RETURN_VALUE (INT, scan_integer (yytext, 16, *loc));
 
   /* 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));
+    complain (loc, complaint, _("invalid identifier: %s"), quote (yytext));
   }
 
   /* Characters.  */
-  "'"	      token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
+  "'"         token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
 
   /* Strings. */
-  "\""	      token_start = loc->start; BEGIN SC_ESCAPED_STRING;
+  "\""        token_start = loc->start; BEGIN SC_ESCAPED_STRING;
 
   /* Prologue. */
   "%{"        code_start = loc->start; BEGIN SC_PROLOGUE;
@@ -262,18 +325,25 @@
   /* Code in between braces.  */
   "{" {
     STRING_GROW;
-    braces_level = 0;
+    nesting = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
   }
 
+  /* Semantic predicate. */
+  "%?"([ \f\t\v]|{eol})*"{" {
+    nesting = 0;
+    code_start = loc->start;
+    BEGIN SC_PREDICATE;
+  }
+
   /* A type. */
-  "<"{tag}">" {
-    obstack_grow (&obstack_for_string, yytext + 1, yyleng - 2);
-    STRING_FINISH;
-    val->uniqstr = uniqstr_new (last_string);
-    STRING_FREE;
-    return TYPE;
+  "<*>"       return TAG_ANY;
+  "<>"        return TAG_NONE;
+  "<"         {
+    nesting = 0;
+    token_start = loc->start;
+    BEGIN SC_TAG;
   }
 
   "%%" {
@@ -290,10 +360,10 @@
     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));
+  [^\[%A-Za-z0-9_<>{}\"\'*;|=/, \f\r\n\t\v]+|. {
+    complain (loc, complaint, "%s: %s",
+              ngettext ("invalid character", "invalid characters", yyleng),
+              quote_mem (yytext, yyleng));
   }
 
   <<EOF>> {
@@ -303,6 +373,17 @@
 }
 
 
+  /*--------------------------------------------------------------.
+  | Supporting \0 complexifies our implementation for no expected |
+  | added value.                                                  |
+  `--------------------------------------------------------------*/
+
+<SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING,SC_TAG>
+{
+  \0        complain (loc, complaint, _("invalid null character"));
+}
+
+
   /*-----------------------------------------------------------------.
   | Scanning after an identifier, checking whether a colon is next.  |
   `-----------------------------------------------------------------*/
@@ -312,19 +393,20 @@
   "[" {
     if (bracketed_id_str)
       {
-	ROLLBACK_CURRENT_TOKEN;
-	BEGIN SC_RETURN_BRACKETED_ID;
-	*loc = id_loc;
-	return ID;
+        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;
+        bracketed_id_start = loc->start;
+        bracketed_id_context_state = YY_START;
+        BEGIN SC_BRACKETED_ID;
       }
   }
   ":" {
+    ROLLBACK_CURRENT_TOKEN;
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
     return ID_COLON;
@@ -351,36 +433,37 @@
   {id} {
     if (bracketed_id_str)
       {
-	complain_at (*loc, _("unexpected identifier in bracketed name: %s"),
-		     quote (yytext));
+        complain (loc, complaint,
+                  _("unexpected identifier in bracketed name: %s"),
+                  quote (yytext));
       }
     else
       {
-	bracketed_id_str = uniqstr_new (yytext);
-	bracketed_id_loc = *loc;
+        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;
-	  }
+        if (INITIAL == bracketed_id_context_state)
+          {
+            val->BRACKETED_ID = bracketed_id_str;
+            bracketed_id_str = 0;
+            *loc = bracketed_id_loc;
+            return BRACKETED_ID;
+          }
       }
     else
-      complain_at (*loc, _("an identifier expected"));
+      complain (loc, complaint, _("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));
+  [^\].A-Za-z0-9_/ \f\r\n\t\v]+|. {
+    complain (loc, complaint, "%s: %s",
+              ngettext ("invalid character in bracketed name",
+                        "invalid characters in bracketed name", yyleng),
+              quote_mem (yytext, yyleng));
   }
 
   <<EOF>> {
@@ -393,7 +476,7 @@
 {
   . {
     ROLLBACK_CURRENT_TOKEN;
-    val->uniqstr = bracketed_id_str;
+    val->BRACKETED_ID = bracketed_id_str;
     bracketed_id_str = 0;
     *loc = bracketed_id_loc;
     BEGIN INITIAL;
@@ -409,7 +492,7 @@
 <SC_YACC_COMMENT>
 {
   "*/"     BEGIN context_state;
-  .|\n	   continue;
+  .|{eol}  continue;
   <<EOF>>  unexpected_eof (token_start, "*/"); BEGIN context_state;
 }
 
@@ -421,7 +504,7 @@
 <SC_COMMENT>
 {
   "*"{splice}"/"  STRING_GROW; BEGIN context_state;
-  <<EOF>>	  unexpected_eof (token_start, "*/"); BEGIN context_state;
+  <<EOF>>         unexpected_eof (token_start, "*/"); BEGIN context_state;
 }
 
 
@@ -431,9 +514,9 @@
 
 <SC_LINE_COMMENT>
 {
-  "\n"		 STRING_GROW; BEGIN context_state;
-  {splice}	 STRING_GROW;
-  <<EOF>>	 BEGIN context_state;
+  {eol}          STRING_GROW; BEGIN context_state;
+  {splice}       STRING_GROW;
+  <<EOF>>        BEGIN context_state;
 }
 
 
@@ -444,80 +527,75 @@
 
 <SC_ESCAPED_STRING>
 {
-  "\""|"\n" {
-    if (yytext[0] == '\n')
-      unexpected_newline (token_start, "\"");
+  "\"" {
     STRING_FINISH;
-    loc->start = token_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return STRING;
-  }
-  <<EOF>> {
-    unexpected_eof (token_start, "\"");
-    STRING_FINISH;
     loc->start = token_start;
-    val->chars = last_string;
-    BEGIN INITIAL;
-    return STRING;
+    complain (loc, Wyacc,
+              _("POSIX Yacc does not support string literals"));
+    RETURN_VALUE (STRING, last_string);
   }
+  <<EOF>>   unexpected_eof (token_start, "\"");
+  {eol}     unexpected_newline (token_start, "\"");
 }
 
   /*----------------------------------------------------------.
   | Scanning a Bison character literal, decoding its escapes. |
-  | The initial quote is already eaten.			      |
+  | The initial quote is already eaten.                       |
   `----------------------------------------------------------*/
 
 <SC_ESCAPED_CHARACTER>
 {
-  "'"|"\n" {
+  "'" {
     STRING_FINISH;
     loc->start = token_start;
-    val->character = last_string[0];
+    val->CHAR = last_string[0];
+
+    /* FIXME: Eventually, make these errors.  */
+    if (last_string[0] == '\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"));
+      complain (loc, Wother, _("empty character literal"));
+      /* '\0' seems dangerous even if we are about to complain.  */
+      val->CHAR = '\'';
     }
-    if (yytext[0] == '\n')
-      unexpected_newline (token_start, "'");
+    else if (last_string[1] != '\0')
+      complain (loc, Wother,
+                _("extra characters in character literal"));
     STRING_FREE;
     BEGIN INITIAL;
     return CHAR;
   }
-  <<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;
-  }
+  {eol}     unexpected_newline (token_start, "'");
+  <<EOF>>   unexpected_eof (token_start, "'");
 }
 
-<SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING>
+
+
+  /*--------------------------------------------------------------.
+  | Scanning a tag.  The initial angle bracket is already eaten.  |
+  `--------------------------------------------------------------*/
+
+<SC_TAG>
 {
-  \0	    complain_at (*loc, _("invalid null character"));
-}
+  ">" {
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = token_start;
+        val->TAG = uniqstr_new (last_string);
+        STRING_FREE;
+        BEGIN INITIAL;
+        return TAG;
+      }
+    STRING_GROW;
+  }
 
+  ([^<>]|->)+ STRING_GROW;
+  "<"+   STRING_GROW; nesting += yyleng;
+
+  <<EOF>>   unexpected_eof (token_start, ">");
+}
 
   /*----------------------------.
   | Decode escaped characters.  |
@@ -526,31 +604,32 @@
 <SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>
 {
   \\[0-7]{1,3} {
-    unsigned long int c = strtoul (yytext + 1, NULL, 8);
-    if (!c || UCHAR_MAX < c)
-      complain_at (*loc, _("invalid number after \\-escape: %s"),
-                   yytext+1);
-    else
+    verify (UCHAR_MAX < ULONG_MAX);
+    long c = strtol (yytext + 1, NULL, 8);
+    if (0 < c && c <= UCHAR_MAX)
       obstack_1grow (&obstack_for_string, c);
+    else
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
   }
 
   \\x[0-9abcdefABCDEF]+ {
     verify (UCHAR_MAX < ULONG_MAX);
-    unsigned long int c = strtoul (yytext + 2, NULL, 16);
-    if (!c || UCHAR_MAX < c)
-      complain_at (*loc, _("invalid number after \\-escape: %s"),
-                   yytext+1);
-    else
+    long c = strtol (yytext + 2, NULL, 16);
+    if (0 < c && c <= UCHAR_MAX)
       obstack_1grow (&obstack_for_string, c);
+    else
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
   }
 
-  \\a	obstack_1grow (&obstack_for_string, '\a');
-  \\b	obstack_1grow (&obstack_for_string, '\b');
-  \\f	obstack_1grow (&obstack_for_string, '\f');
-  \\n	obstack_1grow (&obstack_for_string, '\n');
-  \\r	obstack_1grow (&obstack_for_string, '\r');
-  \\t	obstack_1grow (&obstack_for_string, '\t');
-  \\v	obstack_1grow (&obstack_for_string, '\v');
+  \\a   obstack_1grow (&obstack_for_string, '\a');
+  \\b   obstack_1grow (&obstack_for_string, '\b');
+  \\f   obstack_1grow (&obstack_for_string, '\f');
+  \\n   obstack_1grow (&obstack_for_string, '\n');
+  \\r   obstack_1grow (&obstack_for_string, '\r');
+  \\t   obstack_1grow (&obstack_for_string, '\t');
+  \\v   obstack_1grow (&obstack_for_string, '\v');
 
   /* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
   \\("\""|"'"|"?"|"\\")  obstack_1grow (&obstack_for_string, yytext[1]);
@@ -558,19 +637,20 @@
   \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
     int c = convert_ucn_to_byte (yytext);
     if (c <= 0)
-      complain_at (*loc, _("invalid number after \\-escape: %s"),
-                   yytext+1);
+      complain (loc, complaint, _("invalid number after \\-escape: %s"),
+                yytext+1);
     else
       obstack_1grow (&obstack_for_string, c);
   }
-  \\(.|\n)	{
+  \\(.|{eol})      {
     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);
+    complain (loc, complaint, _("invalid character after \\-escape: %s"),
+              p);
   }
 }
 
@@ -580,21 +660,21 @@
 
 <SC_CHARACTER,SC_STRING>
 {
-  {splice}|\\{splice}[^\n\[\]]	STRING_GROW;
+  {splice}|\\{splice}[^\n\[\]]  STRING_GROW;
 }
 
 <SC_CHARACTER>
 {
-  "'"		STRING_GROW; BEGIN context_state;
-  \n		unexpected_newline (token_start, "'"); BEGIN context_state;
-  <<EOF>>	unexpected_eof (token_start, "'"); BEGIN context_state;
+  "'"           STRING_GROW; BEGIN context_state;
+  {eol}         unexpected_newline (token_start, "'");
+  <<EOF>>       unexpected_eof (token_start, "'");
 }
 
 <SC_STRING>
 {
-  "\""		STRING_GROW; BEGIN context_state;
-  \n		unexpected_newline (token_start, "\""); BEGIN context_state;
-  <<EOF>>	unexpected_eof (token_start, "\""); BEGIN context_state;
+  "\""          STRING_GROW; BEGIN context_state;
+  {eol}         unexpected_newline (token_start, "\"");
+  <<EOF>>       unexpected_eof (token_start, "\"");
 }
 
 
@@ -602,7 +682,7 @@
   | Strings, comments etc. can be found in user code.  |
   `---------------------------------------------------*/
 
-<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>
+<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE,SC_PREDICATE>
 {
   "'" {
     STRING_GROW;
@@ -632,42 +712,53 @@
 
 
   /*-----------------------------------------------------------.
-  | Scanning some code in braces (actions). The initial "{" is |
-  | already eaten.                                             |
+  | Scanning some code in braces (actions, predicates). The    |
+  | initial "{" is already eaten.                              |
   `-----------------------------------------------------------*/
 
-<SC_BRACED_CODE>
+<SC_BRACED_CODE,SC_PREDICATE>
 {
-  "{"|"<"{splice}"%"  STRING_GROW; braces_level++;
-  "%"{splice}">"      STRING_GROW; braces_level--;
-  "}" {
-    obstack_1grow (&obstack_for_string, '}');
+  "{"|"<"{splice}"%"  STRING_GROW; nesting++;
+  "%"{splice}">"      STRING_GROW; nesting--;
 
-    --braces_level;
-    if (braces_level < 0)
-      {
-	STRING_FINISH;
-	loc->start = code_start;
-	val->code = last_string;
-	BEGIN INITIAL;
-	return BRACED_CODE;
-      }
-  }
-
-  /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
+  /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrectly
      (as '<' '<%').  */
   "<"{splice}"<"  STRING_GROW;
 
-  <<EOF>> {
-    unexpected_eof (code_start, "}");
-    STRING_FINISH;
-    loc->start = code_start;
-    val->code = last_string;
-    BEGIN INITIAL;
-    return BRACED_CODE;
+  <<EOF>>   unexpected_eof (code_start, "}");
+}
+
+<SC_BRACED_CODE>
+{
+  "}" {
+    obstack_1grow (&obstack_for_string, '}');
+
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = code_start;
+        BEGIN INITIAL;
+        RETURN_VALUE (BRACED_CODE, last_string);
+      }
   }
 }
 
+<SC_PREDICATE>
+{
+  "}" {
+    --nesting;
+    if (nesting < 0)
+      {
+        STRING_FINISH;
+        loc->start = code_start;
+        BEGIN INITIAL;
+        RETURN_VALUE (BRACED_PREDICATE, last_string);
+      }
+    else
+      obstack_1grow (&obstack_for_string, '}');
+  }
+}
 
   /*--------------------------------------------------------------.
   | Scanning some prologue: from "%{" (already scanned) to "%}".  |
@@ -678,19 +769,11 @@
   "%}" {
     STRING_FINISH;
     loc->start = code_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return PROLOGUE;
+    RETURN_VALUE (PROLOGUE, last_string);
   }
 
-  <<EOF>> {
-    unexpected_eof (code_start, "%}");
-    STRING_FINISH;
-    loc->start = code_start;
-    val->chars = last_string;
-    BEGIN INITIAL;
-    return PROLOGUE;
-  }
+  <<EOF>>   unexpected_eof (code_start, "%}");
 }
 
 
@@ -704,9 +787,8 @@
   <<EOF>> {
     STRING_FINISH;
     loc->start = code_start;
-    val->chars = last_string;
     BEGIN INITIAL;
-    return EPILOGUE;
+    RETURN_VALUE (EPILOGUE, last_string);
   }
 }
 
@@ -715,72 +797,39 @@
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
 
-<SC_COMMENT,SC_LINE_COMMENT,SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE,SC_STRING,SC_CHARACTER,SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>.	|
-<SC_COMMENT,SC_LINE_COMMENT,SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE>\n	STRING_GROW;
-
-%%
-
-/* 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.  */
-
-static size_t
-no_cr_read (FILE *fp, char *buf, size_t size)
+<SC_COMMENT,SC_LINE_COMMENT,SC_BRACED_CODE,SC_PREDICATE,SC_PROLOGUE,SC_EPILOGUE,SC_STRING,SC_CHARACTER,SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>
 {
-  size_t bytes_read = fread (buf, 1, size, fp);
-  if (bytes_read)
-    {
-      char *w = memchr (buf, '\r', bytes_read);
-      if (w)
-	{
-	  char const *r = ++w;
-	  char const *lim = buf + bytes_read;
+  /* Accept multibyte characters in one block instead of byte after
+     byte, so that add_column_width and mbsnwidth can compute correct
+     screen width.
 
-	  for (;;)
-	    {
-	      /* Found an '\r'.  Treat it like '\n', but ignore any
-		 '\n' that immediately follows.  */
-	      w[-1] = '\n';
-	      if (r == lim)
-		{
-		  int ch = getc (fp);
-		  if (ch != '\n' && ungetc (ch, fp) != ch)
-		    break;
-		}
-	      else if (*r == '\n')
-		r++;
-
-	      /* Copy until the next '\r'.  */
-	      do
-		{
-		  if (r == lim)
-		    return w - buf;
-		}
-	      while ((*w++ = *r++) != '\r');
-	    }
-
-	  return w - buf;
-	}
-    }
-
-  return bytes_read;
+     Add a fallthrough "|." so that non UTF-8 input is still accepted
+     and does not jam the scanner.  */
+  {mbchar}|.   STRING_GROW;
 }
 
+%%
 
 
 /*------------------------------------------------------.
 | Scan NUMBER for a base-BASE integer at location LOC.  |
 `------------------------------------------------------*/
 
-static unsigned long int
+static int
 scan_integer (char const *number, int base, location loc)
 {
   verify (INT_MAX < ULONG_MAX);
-  unsigned long int num = strtoul (number, NULL, base);
+  if (base == 16)
+    complain (&loc, Wyacc,
+              _("POSIX Yacc does not support hexadecimal literals"));
 
-  if (INT_MAX < num)
+  errno = 0;
+  long num = strtol (number, NULL, base);
+
+  if (! (0 <= num && num <= INT_MAX && errno == 0))
     {
-      complain_at (loc, _("integer out of range: %s"), quote (number));
+      complain (&loc, complaint, _("integer out of range: %s"),
+                quote (number));
       num = INT_MAX;
     }
 
@@ -791,14 +840,14 @@
 /*------------------------------------------------------------------.
 | Convert universal character name UCN to a single-byte character,  |
 | and return that character.  Return -1 if UCN does not correspond  |
-| to a single-byte character.					    |
+| to a single-byte character.                                       |
 `------------------------------------------------------------------*/
 
 static int
 convert_ucn_to_byte (char const *ucn)
 {
   verify (UCHAR_MAX <= INT_MAX);
-  unsigned long int code = strtoul (ucn + 2, NULL, 16);
+  long code = strtol (ucn + 2, NULL, 16);
 
   /* FIXME: Currently we assume Unicode-compatible unibyte characters
      on ASCII hosts (i.e., Latin-1 on hosts with 8-bit bytes).  On
@@ -806,7 +855,7 @@
      These limitations should be removed once we add support for
      multibyte characters.  */
 
-  if (UCHAR_MAX < code)
+  if (! (0 <= code && code <= UCHAR_MAX))
     return -1;
 
 #if ! ('$' == 0x24 && '@' == 0x40 && '`' == 0x60 && '~' == 0x7e)
@@ -819,22 +868,22 @@
        about.  */
     static signed char const table[] =
       {
-	'\0',   -1,   -1,   -1,   -1,   -1,   -1, '\a',
-	'\b', '\t', '\n', '\v', '\f', '\r',   -1,   -1,
-	  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-	  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-	 ' ',  '!',  '"',  '#',  '$',  '%',  '&', '\'',
-	 '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',
-	 '0',  '1',  '2',  '3',  '4',  '5',  '6',  '7',
-	 '8',  '9',  ':',  ';',  '<',  '=',  '>',  '?',
-	 '@',  'A',  'B',  'C',  'D',  'E',  'F',  'G',
-	 'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',
-	 'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',
-	 'X',  'Y',  'Z',  '[', '\\',  ']',  '^',  '_',
-	 '`',  'a',  'b',  'c',  'd',  'e',  'f',  'g',
-	 'h',  'i',  'j',  'k',  'l',  'm',  'n',  'o',
-	 'p',  'q',  'r',  's',  't',  'u',  'v',  'w',
-	 'x',  'y',  'z',  '{',  '|',  '}',  '~'
+        '\0',   -1,   -1,   -1,   -1,   -1,   -1, '\a',
+        '\b', '\t', '\n', '\v', '\f', '\r',   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+          -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+         ' ',  '!',  '"',  '#',  '$',  '%',  '&', '\'',
+         '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',
+         '0',  '1',  '2',  '3',  '4',  '5',  '6',  '7',
+         '8',  '9',  ':',  ';',  '<',  '=',  '>',  '?',
+         '@',  'A',  'B',  'C',  'D',  'E',  'F',  'G',
+         'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',
+         'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',
+         'X',  'Y',  'Z',  '[', '\\',  ']',  '^',  '_',
+         '`',  'a',  'b',  'c',  'd',  'e',  'f',  'g',
+         'h',  'i',  'j',  'k',  'l',  'm',  'n',  'o',
+         'p',  'q',  'r',  's',  't',  'u',  'v',  'w',
+         'x',  'y',  'z',  '{',  '|',  '}',  '~'
       };
 
     code = code < sizeof table ? table[code] : -1;
@@ -853,27 +902,28 @@
 handle_syncline (char *args, location loc)
 {
   char *file;
-  unsigned long int lineno = strtoul (args, &file, 10);
-  if (INT_MAX <= lineno)
+  errno = 0;
+  long lineno = strtol (args, &file, 10);
+  if (! (0 <= lineno && lineno <= INT_MAX && errno == 0))
     {
-      warn_at (loc, _("line number overflow"));
+      complain (&loc, Wother, _("line number overflow"));
       lineno = INT_MAX;
     }
 
-  file = mbschr (file, '"');
+  file = strchr (file, '"');
   if (file)
     {
-      *mbschr (file + 1, '"') = '\0';
+      *strchr (file + 1, '"') = '\0';
       current_file = uniqstr_new (file + 1);
     }
-  boundary_set (&scanner_cursor, current_file, lineno, 1);
+  boundary_set (&scanner_cursor, current_file, lineno, 1, 1);
 }
 
 
 /*----------------------------------------------------------------.
 | For a token or comment starting at START, report message MSGID, |
-| which should say that an end marker was found before		  |
-| the expected TOKEN_END.					  |
+| which should say that an end marker was found before the        |
+| expected TOKEN_END. Then, pretend that TOKEN_END was found.     |
 `----------------------------------------------------------------*/
 
 static void
@@ -882,23 +932,34 @@
   location loc;
   loc.start = start;
   loc.end = scanner_cursor;
+  size_t i = strlen (token_end);
+
+  /* Adjust scanner cursor so that any later message does not count
+     the characters about to be inserted.  */
+  scanner_cursor.column -= i;
+  scanner_cursor.byte -= i;
+
+  while (i != 0)
+    unput (token_end[--i]);
+
   token_end = quote (token_end);
   /* Instead of '\'', display "'".  */
-  if (!strcmp (token_end, "'\\''"))
+  if (STREQ (token_end, "'\\''"))
     token_end = "\"'\"";
-  complain_at (loc, _(msgid), token_end);
+  complain (&loc, complaint, msgid, token_end);
 }
 
 
 /*------------------------------------------------------------------------.
 | Report an unexpected EOF in a token or comment starting at START.       |
 | An end of file was encountered and the expected TOKEN_END was missing.  |
+| After reporting the problem, pretend that TOKEN_END was found.          |
 `------------------------------------------------------------------------*/
 
 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, _("missing %s at end of file"), token_end);
 }
 
 
@@ -909,29 +970,33 @@
 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, _("missing %s at end of line"), token_end);
 }
 
 
-/*-------------------------.
-| Initialize the scanner.  |
-`-------------------------*/
-
 void
-gram_scanner_initialize (void)
+gram_scanner_open (const char *gram)
 {
+  gram__flex_debug = trace_flag & trace_scan;
+  gram_debug = trace_flag & trace_parse;
   obstack_init (&obstack_for_string);
+  current_file = gram;
+  gram_in = xfopen (gram, "r");
 }
 
 
-/*-----------------------------------------------.
-| Free all the memory allocated to the scanner.  |
-`-----------------------------------------------*/
+void
+gram_scanner_close ()
+{
+  xfclose (gram_in);
+  /* Reclaim Flex's buffers.  */
+  yylex_destroy ();
+}
+
+
 
 void
 gram_scanner_free (void)
 {
   obstack_free (&obstack_for_string, 0);
-  /* Reclaim Flex's buffers.  */
-  yylex_destroy ();
 }
diff --git a/src/scan-skel-c.c b/src/scan-skel-c.c
index fb1aea6..3e1e73d 100644
--- a/src/scan-skel-c.c
+++ b/src/scan-skel-c.c
@@ -1,3 +1,3 @@
 #include <config.h>
 #include "system.h"
-#include "scan-skel.c"
+#include "src/scan-skel.c"
diff --git a/src/scan-skel.c b/src/scan-skel.c
index 9841730..cfd1da6 100644
--- a/src/scan-skel.c
+++ b/src/scan-skel.c
@@ -1,22 +1,27 @@
-#line 2 "scan-skel.c"
+#line 1 "src/scan-skel.c"
 
-#line 4 "scan-skel.c"
+#line 3 "src/scan-skel.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 skel__create_buffer
 #define yy_delete_buffer skel__delete_buffer
-#define yy_flex_debug skel__flex_debug
+#define yy_scan_buffer skel__scan_buffer
+#define yy_scan_string skel__scan_string
+#define yy_scan_bytes skel__scan_bytes
 #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 yypush_buffer_state skel_push_buffer_state
+#define yypop_buffer_state skel_pop_buffer_state
+#define yyensure_buffer_stack skel_ensure_buffer_stack
+#define yy_flex_debug skel__flex_debug
 #define yyin skel_in
 #define yyleng skel_leng
 #define yylex skel_lex
@@ -35,8 +40,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -45,11 +50,244 @@
 /* %endif */
 
 /* %if-c-only */
-    
+#ifdef yy_create_buffer
+#define skel__create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer skel__create_buffer
+#endif
+
+#ifdef yy_delete_buffer
+#define skel__delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer skel__delete_buffer
+#endif
+
+#ifdef yy_scan_buffer
+#define skel__scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer skel__scan_buffer
+#endif
+
+#ifdef yy_scan_string
+#define skel__scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string skel__scan_string
+#endif
+
+#ifdef yy_scan_bytes
+#define skel__scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes skel__scan_bytes
+#endif
+
+#ifdef yy_init_buffer
+#define skel__init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer skel__init_buffer
+#endif
+
+#ifdef yy_flush_buffer
+#define skel__flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer skel__flush_buffer
+#endif
+
+#ifdef yy_load_buffer_state
+#define skel__load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state skel__load_buffer_state
+#endif
+
+#ifdef yy_switch_to_buffer
+#define skel__switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer skel__switch_to_buffer
+#endif
+
+#ifdef yypush_buffer_state
+#define skel_push_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state skel_push_buffer_state
+#endif
+
+#ifdef yypop_buffer_state
+#define skel_pop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state skel_pop_buffer_state
+#endif
+
+#ifdef yyensure_buffer_stack
+#define skel_ensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack skel_ensure_buffer_stack
+#endif
+
+#ifdef yylex
+#define skel_lex_ALREADY_DEFINED
+#else
+#define yylex skel_lex
+#endif
+
+#ifdef yyrestart
+#define skel_restart_ALREADY_DEFINED
+#else
+#define yyrestart skel_restart
+#endif
+
+#ifdef yylex_init
+#define skel_lex_init_ALREADY_DEFINED
+#else
+#define yylex_init skel_lex_init
+#endif
+
+#ifdef yylex_init_extra
+#define skel_lex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra skel_lex_init_extra
+#endif
+
+#ifdef yylex_destroy
+#define skel_lex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy skel_lex_destroy
+#endif
+
+#ifdef yyget_debug
+#define skel_get_debug_ALREADY_DEFINED
+#else
+#define yyget_debug skel_get_debug
+#endif
+
+#ifdef yyset_debug
+#define skel_set_debug_ALREADY_DEFINED
+#else
+#define yyset_debug skel_set_debug
+#endif
+
+#ifdef yyget_extra
+#define skel_get_extra_ALREADY_DEFINED
+#else
+#define yyget_extra skel_get_extra
+#endif
+
+#ifdef yyset_extra
+#define skel_set_extra_ALREADY_DEFINED
+#else
+#define yyset_extra skel_set_extra
+#endif
+
+#ifdef yyget_in
+#define skel_get_in_ALREADY_DEFINED
+#else
+#define yyget_in skel_get_in
+#endif
+
+#ifdef yyset_in
+#define skel_set_in_ALREADY_DEFINED
+#else
+#define yyset_in skel_set_in
+#endif
+
+#ifdef yyget_out
+#define skel_get_out_ALREADY_DEFINED
+#else
+#define yyget_out skel_get_out
+#endif
+
+#ifdef yyset_out
+#define skel_set_out_ALREADY_DEFINED
+#else
+#define yyset_out skel_set_out
+#endif
+
+#ifdef yyget_leng
+#define skel_get_leng_ALREADY_DEFINED
+#else
+#define yyget_leng skel_get_leng
+#endif
+
+#ifdef yyget_text
+#define skel_get_text_ALREADY_DEFINED
+#else
+#define yyget_text skel_get_text
+#endif
+
+#ifdef yyget_lineno
+#define skel_get_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno skel_get_lineno
+#endif
+
+#ifdef yyset_lineno
+#define skel_set_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno skel_set_lineno
+#endif
+
+#ifdef yywrap
+#define skel_wrap_ALREADY_DEFINED
+#else
+#define yywrap skel_wrap
+#endif
+
 /* %endif */
 
+#ifdef yyalloc
+#define skel_alloc_ALREADY_DEFINED
+#else
+#define yyalloc skel_alloc
+#endif
+
+#ifdef yyrealloc
+#define skel_realloc_ALREADY_DEFINED
+#else
+#define yyrealloc skel_realloc
+#endif
+
+#ifdef yyfree
+#define skel_free_ALREADY_DEFINED
+#else
+#define yyfree skel_free
+#endif
+
 /* %if-c-only */
 
+#ifdef yytext
+#define skel_text_ALREADY_DEFINED
+#else
+#define yytext skel_text
+#endif
+
+#ifdef yyleng
+#define skel_leng_ALREADY_DEFINED
+#else
+#define yyleng skel_leng
+#endif
+
+#ifdef yyin
+#define skel_in_ALREADY_DEFINED
+#else
+#define yyin skel_in
+#endif
+
+#ifdef yyout
+#define skel_out_ALREADY_DEFINED
+#else
+#define yyout skel_out
+#endif
+
+#ifdef yy_flex_debug
+#define skel__flex_debug_ALREADY_DEFINED
+#else
+#define yy_flex_debug skel__flex_debug
+#endif
+
+#ifdef yylineno
+#define skel_lineno_ALREADY_DEFINED
+#else
+#define yylineno skel_lineno
+#endif
+
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -127,50 +365,39 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#ifndef SIZE_MAX
+#define SIZE_MAX               (~(size_t)0)
+#endif
+
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
+/* begin standard C++ headers. */
 /* %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
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #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.
+/* Promotes a possibly negative, possibly signed char to an
+ *   integer in range [0..255] for use as an array index.
  */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -185,25 +412,29 @@
  * 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 skel_restart(skel_in  )
-
+#define YY_NEW_FILE yyrestart( yyin  )
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -221,35 +452,35 @@
 #endif
 
 /* %if-not-reentrant */
-extern yy_size_t skel_leng;
+extern int yyleng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *skel_in, *skel_out;
+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)
+    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up skel_text. */ \
+		/* 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 skel_text again */ \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
-
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -269,12 +500,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int 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
@@ -297,7 +528,7 @@
 
     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.
 	 */
@@ -314,8 +545,8 @@
 	 * possible backing-up.
 	 *
 	 * When we actually see the EOF, we change the status to "new"
-	 * (via skel_restart()), so that the user can continue scanning by
-	 * just pointing skel_in at a new input file.
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
 	 */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -324,13 +555,12 @@
 
 /* %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. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -345,7 +575,6 @@
 #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.
  */
@@ -355,118 +584,115 @@
 
 /* %if-not-reentrant */
 /* %not-for-header */
-
-/* yy_hold_char holds the character lost when skel_text is formed. */
+/* 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 skel_leng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 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
- * instead of setting up a fresh skel_in.  A bit of a hack ...
+/* 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 skel_restart (FILE *input_file  );
-void skel__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE skel__create_buffer (FILE *file,int size  );
-void skel__delete_buffer (YY_BUFFER_STATE b  );
-void skel__flush_buffer (YY_BUFFER_STATE b  );
-void skel_push_buffer_state (YY_BUFFER_STATE new_buffer  );
-void skel_pop_buffer_state (void );
+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 skel_ensure_buffer_stack (void );
-static void skel__load_buffer_state (void );
-static void skel__init_buffer (YY_BUFFER_STATE b,FILE *file  );
+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 )
 
-#define YY_FLUSH_BUFFER skel__flush_buffer(YY_CURRENT_BUFFER )
-
-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,yy_size_t len  );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
 
 /* %endif */
 
-void *skel_alloc (yy_size_t  );
-void *skel_realloc (void *,yy_size_t  );
-void skel_free (void *  );
+void *yyalloc ( yy_size_t  );
+void *yyrealloc ( void *, yy_size_t  );
+void yyfree ( void *  );
 
-#define yy_new_buffer skel__create_buffer
-
+#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
 	{ \
 	if ( ! YY_CURRENT_BUFFER ){ \
-        skel_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            skel__create_buffer(skel_in,YY_BUF_SIZE ); \
+            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 ){\
-        skel_ensure_buffer_stack (); \
+        yyensure_buffer_stack (); \
 		YY_CURRENT_BUFFER_LVALUE =    \
-            skel__create_buffer(skel_in,YY_BUF_SIZE ); \
+            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] skel_text/skel_in/skel_out/yy_state_type/skel_lineno etc. def's & init go here */
+/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define skel_wrap() 1
+#define skel_wrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
+typedef flex_uint8_t YY_CHAR;
 
-typedef unsigned char YY_CHAR;
-
-FILE *skel_in = (FILE *) 0, *skel_out = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
-extern int skel_lineno;
+extern int yylineno;
+int yylineno = 1;
 
-int skel_lineno = 1;
+extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
+#define yytext_ptr yytext
 
-extern char *skel_text;
-#define yytext_ptr skel_text
+/* %% [1.5] DFA */
 
 /* %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[]  );
+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 yynoreturn yy_fatal_error ( const char* msg  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up skel_text.
+ * corresponding action - sets up yytext.
  */
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle skel_text and skel_leng for yymore() goes here \ */\
-	skel_leng = (size_t) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
+	yyleng = (int) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to skel_text[] goes here, if %array \ */\
+/* %% [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 22
-#define YY_END_OF_BUFFER 23
+#define YY_NUM_RULES 24
+#define YY_END_OF_BUFFER 25
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -474,31 +700,33 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[45] =
+static const flex_int16_t yy_accept[67] =
     {   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
+        0,    0,    0,    0,    0,    0,   25,   13,   12,   11,
+       14,   21,   23,   22,   22,   13,   11,    5,    4,    1,
+       11,   11,   11,    2,    3,   14,   21,   19,   18,   20,
+       15,   16,   17,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,    7,    6,   11,   11,   11,
+       10,   11,   11,    8,    9,    0
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static const YY_CHAR yy_ec[256] =
     {   0,
         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,    2,    1,    1,    1,    1,    1,    1,    4,    5,
+        6,    1,    1,    6,    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,    7,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    7,    8,    7,    7,    7,    7,
+        1,    1,    1,    1,    1,    1,    8,    9,   10,    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,
+       11,   12,    1,    1,   13,    1,    1,   14,   15,   16,
+       17,   18,    1,    1,   19,   20,   21,    1,    1,    1,
+        1,    1,   22,    1,   23,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -515,79 +743,84 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[17] =
+static const YY_CHAR yy_meta[24] =
     {   0,
-        1,    1,    2,    3,    1,    4,    1,    5,    1,    1,
-        1,    1,    1,    1,    5,    5
+        1,    1,    2,    1,    3,    1,    4,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[53] =
+static const flex_int16_t yy_base[74] =
     {   0,
-        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
+        0,    1,   55,   54,    3,    7,   60,    0,  100,    8,
+        0,   29,  100,  100,  100,    0,   50,  100,  100,  100,
+       51,   41,    2,  100,  100,    0,  100,  100,  100,  100,
+      100,  100,  100,   37,   40,   37,   36,   28,   36,   28,
+       31,   28,   25,   26,   27,   29,   28,   17,   29,   26,
+       22,   21,    7,   11,   11,  100,  100,   17,   10,    4,
+      100,   14,    8,  100,  100,  100,   73,   77,   81,   85,
+       88,   92,   95
     } ;
 
-static yyconst flex_int16_t yy_def[53] =
+static const flex_int16_t yy_def[74] =
     {   0,
-       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
+       67,   67,   68,   68,   69,   69,   66,   70,   66,   71,
+       72,   73,   66,   66,   66,   70,   71,   66,   66,   66,
+       17,   17,   17,   66,   66,   72,   66,   66,   66,   66,
+       66,   66,   66,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   66,   66,   17,   17,   17,
+       66,   17,   17,   66,   66,    0,   66,   66,   66,   66,
+       66,   66,   66
     } ;
 
-static yyconst flex_int16_t yy_nxt[122] =
+static const flex_int16_t yy_nxt[124] =
     {   0,
-       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,
+       66,   66,    9,    9,   14,   15,   10,   10,   14,   15,
+       18,   19,   65,   36,   20,   37,   21,   22,   64,   63,
+       62,   61,   38,   60,   23,   59,   58,   57,   56,   24,
+       25,   28,   29,   55,   30,   31,   54,   53,   52,   51,
+       50,   49,   48,   47,   46,   45,   44,   43,   42,   41,
+       32,   33,   66,   66,   40,   39,   66,   35,   34,   66,
+       12,   12,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,    8,    8,    8,    8,   11,   11,   11,
+       11,   13,   13,   13,   13,   16,   66,   16,   17,   17,
+       66,   17,   26,   26,   26,   27,   27,   27,   27,    7,
 
-       26,   20,   44,   20,    7,   44,   44,   44,   44,   44,
-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
-       44
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66
     } ;
 
-static yyconst flex_int16_t yy_chk[122] =
+static const flex_int16_t yy_chk[124] =
     {   0,
-       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,
+        0,    0,    1,    2,    5,    5,    1,    2,    6,    6,
+       10,   10,   63,   23,   10,   23,   10,   10,   62,   60,
+       59,   58,   23,   55,   10,   54,   53,   52,   51,   10,
+       10,   12,   12,   50,   12,   12,   49,   48,   47,   46,
+       45,   44,   43,   42,   41,   40,   39,   38,   37,   36,
+       12,   12,   17,   17,   35,   34,   17,   22,   21,    7,
+        4,    3,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   17,   17,   67,   67,   67,   67,   68,   68,   68,
+       68,   69,   69,   69,   69,   70,    0,   70,   71,   71,
+        0,   71,   72,   72,   72,   73,   73,   73,   73,   66,
 
-       50,   52,    0,   52,   44,   44,   44,   44,   44,   44,
-       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
-       44
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int skel__flex_debug;
-int skel__flex_debug = 1;
+extern int yy_flex_debug;
+int yy_flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[22] =
+static const flex_int16_t yy_rule_linenum[24] =
     {   0,
-       72,   73,   74,   75,   76,   78,   79,   81,   90,   91,
-       92,  105,  107,  108,  109,  110,  111,  113,  134,  139,
-      140
+       74,   75,   76,   77,   78,   80,   81,   83,   84,   85,
+       88,   89,   90,  103,  105,  106,  107,  108,  109,  111,
+      130,  135,  136
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -597,11 +830,11 @@
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *skel_text;
-#line 1 "scan-skel.l"
+char *yytext;
+#line 1 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -618,39 +851,39 @@
    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-skel.l"
+#line 24 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+#include <dirname.h>
+#include <error.h>
+#include <path-join.h>
+#include <quotearg.h>
+
+#include <src/complain.h>
+#include <src/files.h>
+#include <src/getargs.h>
+#include <src/scan-skel.h>
+
+#define FLEX_PREFIX(Id) skel_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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
 
-#define FLEX_PREFIX(Id) skel_ ## Id
-#include "flex-scanner.h"
-
-#include <dirname.h>
-#include <error.h>
-#include <quotearg.h>
-
-#include "complain.h"
-#include "getargs.h"
-#include "files.h"
-#include "scan-skel.h"
-
 #define YY_DECL static int skel_lex (void)
 YY_DECL;
 
-#define QPUTS(String) \
-   fputs (quotearg_style (c_quoting_style, String), skel_out)
-
-static void at_directive_perform (int at_directive_argc,
-                                  char *at_directive_argv[],
-                                  char **outnamep, int *out_linenop);
+typedef void (*at_directive)(int, char**, char **, int*);
+static void at_init (int *argc, char *argv[], at_directive *at_ptr, at_directive fun);
+static void at_basename (int argc, char *argv[], char**, int*);
+static void at_complain (int argc, char *argv[], char**, int*);
+static void at_output (int argc, char *argv[], char **name, int *lineno);
 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 884 "src/scan-skel.c"
 
-
-#line 654 "scan-skel.c"
+#line 886 "src/scan-skel.c"
 
 #define INITIAL 0
 #define SC_AT_DIRECTIVE_ARGS 1
@@ -676,7 +909,7 @@
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals (void );
+static int yy_init_globals ( void );
 
 /* %endif */
 /* %if-reentrant */
@@ -686,31 +919,31 @@
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int skel_lex_destroy (void );
+int yylex_destroy ( void );
 
-int skel_get_debug (void );
+int yyget_debug ( void );
 
-void skel_set_debug (int debug_flag  );
+void yyset_debug ( int debug_flag  );
 
-YY_EXTRA_TYPE skel_get_extra (void );
+YY_EXTRA_TYPE yyget_extra ( void );
 
-void skel_set_extra (YY_EXTRA_TYPE user_defined  );
+void yyset_extra ( YY_EXTRA_TYPE user_defined  );
 
-FILE *skel_get_in (void );
+FILE *yyget_in ( void );
 
-void skel_set_in  (FILE * in_str  );
+void yyset_in  ( FILE * _in_str  );
 
-FILE *skel_get_out (void );
+FILE *yyget_out ( void );
 
-void skel_set_out  (FILE * out_str  );
+void yyset_out  ( FILE * _out_str  );
 
-yy_size_t skel_get_leng (void );
+			int yyget_leng ( void );
 
-char *skel_get_text (void );
+char *yyget_text ( void );
 
-int skel_get_lineno (void );
+int yyget_lineno ( void );
 
-void skel_set_lineno (int line_number  );
+void yyset_lineno ( int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -721,34 +954,35 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int skel_wrap (void );
+extern "C" int yywrap ( void );
 #else
-extern int skel_wrap (void );
+extern int yywrap ( void );
 #endif
 #endif
 
 /* %not-for-header */
-
+#ifndef YY_NO_UNPUT
+    
+#endif
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy ( char *, const char *, int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen ( const char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
-
 #ifdef __cplusplus
-static int yyinput (void );
+static int yyinput ( void );
 #else
-static int input (void );
+static int input ( void );
 #endif
 /* %ok-for-header */
 
@@ -761,7 +995,12 @@
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -770,7 +1009,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( skel_text, skel_leng, 1, skel_out )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -785,20 +1024,20 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
-			     (c = getc( skel_in )) != EOF && c != '\n'; ++n ) \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
 		if ( c == '\n' ) \
 			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( skel_in ) ) \
+		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, skel_in))==0 && ferror(skel_in)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -806,7 +1045,7 @@
 				break; \
 				} \
 			errno=0; \
-			clearerr(skel_in); \
+			clearerr(yyin); \
 			} \
 		}\
 \
@@ -839,11 +1078,9 @@
 
 /* %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 */
@@ -857,15 +1094,15 @@
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int skel_lex (void);
+extern int yylex (void);
 
-#define YY_DECL int skel_lex (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 skel_text and skel_leng
+/* Code executed at the beginning of each rule, after yytext and yyleng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -874,7 +1111,7 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -882,33 +1119,14 @@
 	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;
+	yy_state_type yy_current_state;
+	char *yy_cp, *yy_bp;
+	int yy_act;
     
-/* %% [7.0] user's declarations go here */
-#line 58 "scan-skel.l"
-
-
-
-  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 911 "scan-skel.c"
-
 	if ( !(yy_init) )
 		{
 		(yy_init) = 1;
@@ -920,35 +1138,56 @@
 		if ( ! (yy_start) )
 			(yy_start) = 1;	/* first start state */
 
-		if ( ! skel_in )
+		if ( ! yyin )
 /* %if-c-only */
-			skel_in = stdin;
+			yyin = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-		if ( ! skel_out )
+		if ( ! yyout )
 /* %if-c-only */
-			skel_out = stdout;
+			yyout = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
 		if ( ! YY_CURRENT_BUFFER ) {
-			skel_ensure_buffer_stack ();
+			yyensure_buffer_stack ();
 			YY_CURRENT_BUFFER_LVALUE =
-				skel__create_buffer(skel_in,YY_BUF_SIZE );
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 		}
 
-		skel__load_buffer_state( );
+		yy_load_buffer_state(  );
 		}
 
-	while ( 1 )		/* loops until end-of-file is reached */
+	{
+/* %% [7.0] user's declarations go here */
+#line 58 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+
+
+
+#line 62 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+  int out_lineno PACIFY_CC (= 0);
+  char *out_name = NULL;
+
+  /* Currently, only the @complain directive takes multiple arguments, and
+     never more than 7, with argv[0] being the directive name and argv[1]
+     being the type of complaint to dispatch. */
+#define ARGC_MAX 9
+  int argc = 0;
+  char *argv[ARGC_MAX];
+  at_directive at_ptr = NULL;
+
+
+#line 1183 "src/scan-skel.c"
+
+	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
 /* %% [8.0] yymore()-related code goes here */
 		yy_cp = (yy_c_buf_p);
 
-		/* Support of skel_text. */
+		/* Support of yytext. */
 		*yy_cp = (yy_hold_char);
 
 		/* yy_bp points to the position in yy_ch_buf of the start of
@@ -961,7 +1200,7 @@
 yy_match:
 		do
 			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			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;
@@ -970,13 +1209,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 >= 45 )
-					yy_c = yy_meta[(unsigned int) yy_c];
+				if ( yy_current_state >= 67 )
+					yy_c = yy_meta[yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 44 );
+		while ( yy_current_state != 66 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -986,22 +1225,22 @@
 
 		YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for skel_lineno update goes here */
+/* %% [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 ( skel__flex_debug )
+		if ( yy_flex_debug )
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 22 )
+			else if ( yy_act < 24 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-				         (long)yy_rule_linenum[yy_act], skel_text );
-			else if ( yy_act == 22 )
+				         (long)yy_rule_linenum[yy_act], yytext );
+			else if ( yy_act == 24 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
-				         skel_text );
-			else if ( yy_act == 23 )
+				         yytext );
+			else if ( yy_act == 25 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1019,173 +1258,173 @@
 
 case 1:
 YY_RULE_SETUP
-#line 72 "scan-skel.l"
-fputc ('@', skel_out);
+#line 74 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fputc ('@', yyout);
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 73 "scan-skel.l"
-fputc ('[', skel_out);
+#line 75 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fputc ('[', yyout);
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 74 "scan-skel.l"
-fputc (']', skel_out);
+#line 76 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fputc (']', yyout);
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 75 "scan-skel.l"
+#line 77 "/Users/akim/src/gnu/bison/src/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 76 "scan-skel.l"
+#line 78 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 continue;
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 78 "scan-skel.l"
-fprintf (skel_out, "%d", out_lineno + 1);
+#line 80 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fprintf (yyout, "%d", out_lineno + 1);
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 79 "scan-skel.l"
-QPUTS (outname);
+#line 81 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fputs (quotearg_style (c_quoting_style, out_name), yyout);
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#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;
-}
+#line 83 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+at_init (&argc, argv, &at_ptr, &at_basename);
 	YY_BREAK
-/* This pattern must not match more than the previous @ patterns. */
 case 9:
 YY_RULE_SETUP
-#line 90 "scan-skel.l"
-fail_for_invalid_at (skel_text);
+#line 84 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+at_init (&argc, argv, &at_ptr, &at_complain);
 	YY_BREAK
 case 10:
-/* rule 10 can match eol */
 YY_RULE_SETUP
-#line 91 "scan-skel.l"
-out_lineno++; ECHO;
+#line 85 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+at_init (&argc, argv, &at_ptr, &at_output);
 	YY_BREAK
+/* This pattern must not match more than the previous @ patterns. */
 case 11:
 YY_RULE_SETUP
-#line 92 "scan-skel.l"
+#line 88 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fail_for_invalid_at (yytext);
+	YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+#line 89 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+out_lineno++; ECHO;
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 90 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 ECHO;
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 94 "scan-skel.l"
+#line 92 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 {
-  if (outname)
+  if (out_name)
     {
-      free (outname);
-      xfclose (skel_out);
+      free (out_name);
+      xfclose (yyout);
     }
   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 107 "scan-skel.l"
-obstack_1grow (&obstack_for_string, '@');
-	YY_BREAK
 case 14:
+/* rule 14 can match eol */
 YY_RULE_SETUP
-#line 108 "scan-skel.l"
-obstack_1grow (&obstack_for_string, '[');
+#line 103 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+STRING_GROW;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 109 "scan-skel.l"
-obstack_1grow (&obstack_for_string, ']');
+#line 105 "/Users/akim/src/gnu/bison/src/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. */
+#line 106 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+obstack_1grow (&obstack_for_string, '[');
 	YY_BREAK
 case 17:
-/* rule 17 can match eol */
 YY_RULE_SETUP
-#line 111 "scan-skel.l"
-continue;
+#line 107 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+obstack_1grow (&obstack_for_string, ']');
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 113 "scan-skel.l"
+#line 108 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+continue; /* For starting an argument that begins with whitespace. */
+	YY_BREAK
+case 19:
+/* rule 19 can match eol */
+YY_RULE_SETUP
+#line 109 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+continue;
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 111 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 {
-    if (at_directive_argc >= AT_DIRECTIVE_ARGC_MAX)
-      fail_for_at_directive_too_many_args (at_directive_argv[0]);
+    if (argc >= ARGC_MAX)
+      fail_for_at_directive_too_many_args (argv[0]);
 
-    obstack_1grow (&obstack_for_string, '\0');
-    at_directive_argv[at_directive_argc++] =
-      obstack_finish (&obstack_for_string);
+    argv[argc++] = obstack_finish0 (&obstack_for_string);
 
     /* Like M4, skip whitespace after a comma.  */
-    if (skel_text[1] == ',')
+    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;
+        aver (at_ptr);
+        at_ptr (argc, argv, &out_name, &out_lineno);
+        obstack_free (&obstack_for_string, argv[0]);
+        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; }
+#line 130 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+fail_for_invalid_at (yytext);
+	YY_BREAK
+
+
+
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+#line 135 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+continue;
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 136 "/Users/akim/src/gnu/bison/src/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]);
-  }
+#line 141 "/Users/akim/src/gnu/bison/src/scan-skel.l"
+complain (NULL, fatal, _("unclosed %s directive in skeleton"), argv[0]);
 	YY_BREAK
 
-case 22:
+case 24:
 YY_RULE_SETUP
-#line 150 "scan-skel.l"
+#line 144 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1189 "scan-skel.c"
+#line 1427 "src/scan-skel.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -1200,15 +1439,19 @@
 			{
 			/* We're scanning a new file or input source.  It's
 			 * possible that this happened because the user
-			 * just pointed skel_in at a new source and called
-			 * skel_lex().  If so, then we have to assure
+			 * 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 = skel_in;
+/* %if-c-only */
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
@@ -1263,11 +1506,11 @@
 				{
 				(yy_did_buffer_switch_on_eof) = 0;
 
-				if ( skel_wrap( ) )
+				if ( yywrap(  ) )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
-					 * skel_text, we can now 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
@@ -1316,12 +1559,12 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-} /* end of skel_lex */
+	} /* end of user's declarations */
+} /* end of yylex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
-
 /* %ok-for-header */
 
 /* %endif */
@@ -1339,9 +1582,9 @@
 /* %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;
+    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	char *source = (yytext_ptr);
+	int number_to_move, i;
 	int ret_val;
 
 	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1370,7 +1613,7 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -1383,7 +1626,7 @@
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -1397,7 +1640,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -1406,11 +1649,12 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					skel_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyrealloc( (void *) b->yy_ch_buf,
+							 (yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -1438,7 +1682,7 @@
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			skel_restart(skel_in  );
+			yyrestart( yyin  );
 			}
 
 		else
@@ -1452,12 +1696,15 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if (((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  );
+		int 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, (yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+		/* "- 2" to take care of EOB's */
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
 	}
 
 	(yy_n_chars) += number_to_move;
@@ -1473,14 +1720,13 @@
 
 /* %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;
+	yy_state_type yy_current_state;
+	char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
 	yy_current_state = (yy_start);
@@ -1488,7 +1734,7 @@
 	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);
+		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;
@@ -1497,10 +1743,10 @@
 		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 >= 45 )
-				yy_c = yy_meta[(unsigned int) yy_c];
+			if ( yy_current_state >= 67 )
+				yy_c = yy_meta[yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 		}
 
 	return yy_current_state;
@@ -1517,11 +1763,11 @@
 /* %if-c++-only */
 /* %endif */
 {
-	register int yy_is_jam;
+	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);
+	char *yy_cp = (yy_c_buf_p);
 
-	register YY_CHAR yy_c = 1;
+	YY_CHAR yy_c = 1;
 	if ( yy_accept[yy_current_state] )
 		{
 		(yy_last_accepting_state) = yy_current_state;
@@ -1530,18 +1776,20 @@
 	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 >= 45 )
-			yy_c = yy_meta[(unsigned int) yy_c];
+		if ( yy_current_state >= 67 )
+			yy_c = yy_meta[yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 44);
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+	yy_is_jam = (yy_current_state == 66);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
+#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -1571,7 +1819,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -1588,14 +1836,14 @@
 					 */
 
 					/* Reset buffer status. */
-					skel_restart(skel_in );
+					yyrestart( yyin );
 
 					/*FALLTHROUGH*/
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( skel_wrap( ) )
-						return EOF;
+					if ( yywrap(  ) )
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -1614,10 +1862,10 @@
 		}
 
 	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve skel_text */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
 	(yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and skel_lineno */
+/* %% [19.0] update BOL and yylineno */
 
 	return c;
 }
@@ -1631,28 +1879,31 @@
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void skel_restart  (FILE * input_file )
+    void yyrestart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
 	if ( ! YY_CURRENT_BUFFER ){
-        skel_ensure_buffer_stack ();
+        yyensure_buffer_stack ();
 		YY_CURRENT_BUFFER_LVALUE =
-            skel__create_buffer(skel_in,YY_BUF_SIZE );
+            yy_create_buffer( yyin, YY_BUF_SIZE );
 	}
 
-	skel__init_buffer(YY_CURRENT_BUFFER,input_file );
-	skel__load_buffer_state( );
+	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+	yy_load_buffer_state(  );
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
  */
 /* %if-c-only */
-    void skel__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1660,10 +1911,10 @@
     
 	/* TODO. We should be able to replace this entire function body
 	 * with
-	 *		skel_pop_buffer_state();
-	 *		skel_push_buffer_state(new_buffer);
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
      */
-	skel_ensure_buffer_stack ();
+	yyensure_buffer_stack ();
 	if ( YY_CURRENT_BUFFER == new_buffer )
 		return;
 
@@ -1676,25 +1927,29 @@
 		}
 
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	skel__load_buffer_state( );
+	yy_load_buffer_state(  );
 
 	/* We don't actually know whether we did this switch during
-	 * EOF (skel_wrap()) processing, but the only time this flag
-	 * is looked at is after skel_wrap() is called, so it's safe
+	 * 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 skel__load_buffer_state  (void)
+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;
-	skel_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %if-c-only */
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	(yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -1705,39 +1960,42 @@
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE skel__create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
 	YY_BUFFER_STATE b;
     
-	b = (YY_BUFFER_STATE) skel_alloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in skel__create_buffer()" );
+		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 *) skel_alloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in skel__create_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	skel__init_buffer(b,file );
+	yy_init_buffer( b, file );
 
 	return b;
 }
 
+/* %if-c++-only */
+/* %endif */
+
 /** Destroy the buffer.
- * @param b a buffer created with skel__create_buffer()
+ * @param b a buffer created with yy_create_buffer()
  * 
  */
 /* %if-c-only */
-    void skel__delete_buffer (YY_BUFFER_STATE  b )
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1750,17 +2008,17 @@
 		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		skel_free((void *) b->yy_ch_buf  );
+		yyfree( (void *) b->yy_ch_buf  );
 
-	skel_free((void *) b  );
+	yyfree( (void *) b  );
 }
 
 /* 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.
+ * such as during a yyrestart() or at EOF.
  */
 /* %if-c-only */
-    static void skel__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1768,13 +2026,17 @@
 {
 	int oerrno = errno;
     
-	skel__flush_buffer(b );
+	yy_flush_buffer( b );
 
+/* %if-c-only */
 	b->yy_input_file = file;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 	b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then skel__init_buffer was _probably_
-     * called from skel_restart() or through yy_get_next_buffer.
+    /* 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){
@@ -1797,7 +2059,7 @@
  * 
  */
 /* %if-c-only */
-    void skel__flush_buffer (YY_BUFFER_STATE  b )
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1820,7 +2082,7 @@
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
 	if ( b == YY_CURRENT_BUFFER )
-		skel__load_buffer_state( );
+		yy_load_buffer_state(  );
 }
 
 /* %if-c-or-c++ */
@@ -1831,7 +2093,7 @@
  *  
  */
 /* %if-c-only */
-void skel_push_buffer_state (YY_BUFFER_STATE new_buffer )
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1839,9 +2101,9 @@
     	if (new_buffer == NULL)
 		return;
 
-	skel_ensure_buffer_stack();
+	yyensure_buffer_stack();
 
-	/* This block is copied from skel__switch_to_buffer. */
+	/* This block is copied from yy_switch_to_buffer. */
 	if ( YY_CURRENT_BUFFER )
 		{
 		/* Flush out information for old buffer. */
@@ -1855,8 +2117,8 @@
 		(yy_buffer_stack_top)++;
 	YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-	/* copied from skel__switch_to_buffer. */
-	skel__load_buffer_state( );
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state(  );
 	(yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -1867,7 +2129,7 @@
  *  
  */
 /* %if-c-only */
-void skel_pop_buffer_state (void)
+void yypop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1875,13 +2137,13 @@
     	if (!YY_CURRENT_BUFFER)
 		return;
 
-	skel__delete_buffer(YY_CURRENT_BUFFER );
+	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) {
-		skel__load_buffer_state( );
+		yy_load_buffer_state(  );
 		(yy_did_buffer_switch_on_eof) = 1;
 	}
 }
@@ -1892,7 +2154,7 @@
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void skel_ensure_buffer_stack (void)
+static void yyensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -1905,15 +2167,15 @@
 		 * 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**)skel_alloc
+      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+		(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 skel_ensure_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;
@@ -1922,15 +2184,15 @@
 	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 */;
+		yy_size_t grow_size = 8 /* arbitrary grow size */;
 
 		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)skel_realloc
+		(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 skel_ensure_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*));
@@ -1944,9 +2206,9 @@
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object. 
+ * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE skel__scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
 	YY_BUFFER_STATE b;
     
@@ -1954,53 +2216,53 @@
 	     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;
+		return NULL;
 
-	b = (YY_BUFFER_STATE) skel_alloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in skel__scan_buffer()" );
+		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_size = (int) (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_input_file = NULL;
 	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;
 
-	skel__switch_to_buffer(b  );
+	yy_switch_to_buffer( b  );
 
 	return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to skel_lex() will
+/** 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
- *       skel__scan_bytes() instead.
+ *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE skel__scan_string (yyconst char * yystr )
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
 {
     
-	return skel__scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes( yystr, (int) strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to skel_lex() will
+/** 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 skel__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -2008,19 +2270,19 @@
 	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) skel_alloc(n  );
+	n = (yy_size_t) (_yybytes_len + 2);
+	buf = (char *) yyalloc( n  );
 	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in skel__scan_bytes()" );
+		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 = skel__scan_buffer(buf,n );
+	b = yy_scan_buffer( buf, n );
 	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in skel__scan_bytes()" );
+		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.
@@ -2036,9 +2298,9 @@
 #endif
 
 /* %if-c-only */
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (const char* msg )
 {
-    	(void) fprintf( stderr, "%s\n", msg );
+			fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -2051,14 +2313,14 @@
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up skel_text. */ \
+		/* Undo effects of setting up yytext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-		skel_text[skel_leng] = (yy_hold_char); \
-		(yy_c_buf_p) = skel_text + 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'; \
-		skel_leng = yyless_macro_arg; \
+		yyleng = yyless_macro_arg; \
 		} \
 	while ( 0 )
 
@@ -2071,82 +2333,82 @@
 /** Get the current line number.
  * 
  */
-int skel_get_lineno  (void)
+int yyget_lineno  (void)
 {
-        
-    return skel_lineno;
+    
+    return yylineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *skel_get_in  (void)
+FILE *yyget_in  (void)
 {
-        return skel_in;
+        return yyin;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *skel_get_out  (void)
+FILE *yyget_out  (void)
 {
-        return skel_out;
+        return yyout;
 }
 
 /** Get the length of the current token.
  * 
  */
-yy_size_t skel_get_leng  (void)
+int yyget_leng  (void)
 {
-        return skel_leng;
+        return yyleng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *skel_get_text  (void)
+char *yyget_text  (void)
 {
-        return skel_text;
+        return yytext;
 }
 
 /* %if-reentrant */
 /* %endif */
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void skel_set_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    skel_lineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
- * @see skel__switch_to_buffer
+ * @see yy_switch_to_buffer
  */
-void skel_set_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        skel_in = in_str ;
+        yyin = _in_str ;
 }
 
-void skel_set_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        skel_out = out_str ;
+        yyout = _out_str ;
 }
 
-int skel_get_debug  (void)
+int yyget_debug  (void)
 {
-        return skel__flex_debug;
+        return yy_flex_debug;
 }
 
-void skel_set_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        skel__flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -2160,50 +2422,50 @@
 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.
+     * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    skel_in = stdin;
-    skel_out = stdout;
+    yyin = stdin;
+    yyout = stdout;
 #else
-    skel_in = (FILE *) 0;
-    skel_out = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * skel_lex_init()
+     * yylex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* skel_lex_destroy is for both reentrant and non-reentrant scanners. */
-int skel_lex_destroy  (void)
+/* 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){
-		skel__delete_buffer(YY_CURRENT_BUFFER  );
+		yy_delete_buffer( YY_CURRENT_BUFFER  );
 		YY_CURRENT_BUFFER_LVALUE = NULL;
-		skel_pop_buffer_state();
+		yypop_buffer_state();
 	}
 
 	/* Destroy the stack itself. */
-	skel_free((yy_buffer_stack) );
+	yyfree((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. */
+     * yylex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -2217,18 +2479,19 @@
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
 {
-	register int i;
+		
+	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 )
+static int yy_flex_strlen (const char * s )
 {
-	register int n;
+	int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -2236,13 +2499,14 @@
 }
 #endif
 
-void *skel_alloc (yy_size_t  size )
+void *yyalloc (yy_size_t  size )
 {
-	return (void *) malloc( size );
+			return malloc(size);
 }
 
-void *skel_realloc  (void * ptr, yy_size_t  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
@@ -2250,12 +2514,12 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
-void skel_free (void * ptr )
+void yyfree (void * ptr )
 {
-	free( (char *) ptr );	/* see skel_realloc() for (char *) cast */
+			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -2265,9 +2529,18 @@
 
 /* %ok-for-header */
 
-#line 150 "scan-skel.l"
+#line 144 "/Users/akim/src/gnu/bison/src/scan-skel.l"
 
 
+static void
+at_init (int *argc, char *argv[], at_directive *at_ptr, at_directive fun)
+{
+  *at_ptr = fun;
+  yytext[yyleng-1] = '\0';
+  obstack_grow (&obstack_for_string, yytext, yyleng);
+  argv[(*argc)++] = obstack_finish (&obstack_for_string);
+  BEGIN SC_AT_DIRECTIVE_ARGS;
+}
 
 /*------------------------.
 | Scan a Bison skeleton.  |
@@ -2292,136 +2565,100 @@
 {
   obstack_free (&obstack_for_string, 0);
   /* Reclaim Flex's buffers.  */
-  skel_lex_destroy ();
+  yylex_destroy ();
+}
+
+static inline warnings
+flag (const char *arg)
+{
+  /* compare with values issued from b4_error */
+  if (STREQ (arg, "complain"))
+    return complaint;
+  else if (STREQ (arg, "deprecated"))
+    return Wdeprecated;
+  else if (STREQ (arg, "fatal"))
+    return fatal;
+  else if (STREQ (arg, "note"))
+    return silent | complaint | no_caret;
+  else if (STREQ (arg, "warn"))
+    return Wother;
+  else
+    abort ();
 }
 
 static void
-at_directive_perform (int at_directive_argc,
-                      char *at_directive_argv[],
-                      char **outnamep, int *out_linenop)
+at_basename (int argc, char *argv[], char **out_namep, int *out_linenop)
 {
-  if (0 == strcmp (at_directive_argv[0], "@basename"))
+  (void) out_namep;
+  (void) out_linenop;
+  if (2 < argc)
+    fail_for_at_directive_too_many_args (argv[0]);
+  fputs (last_component (argv[1]), yyout);
+}
+
+static void
+at_complain (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+  if (argc < 4)
+    fail_for_at_directive_too_few_args (argv[0]);
+
+  (void) out_namep;
+  (void) out_linenop;
+
+  warnings w = flag (argv[1]);
+
+  location loc;
+  location *locp = NULL;
+  if (argv[2] && argv[2][0])
     {
-      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);
+      boundary_set_from_string (&loc.start, argv[2]);
+      boundary_set_from_string (&loc.end, argv[3]);
+      locp = &loc;
     }
-  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;
-    }
+  static int indent;
+  if (w & silent)
+    indent += SUB_INDENT;
   else
-    fail_for_invalid_at (at_directive_argv[0]);
+    indent = 0;
+  complain_args (locp, w, &indent, argc - 4, argv + 4);
+  if (w & silent)
+    indent -= SUB_INDENT;
+}
+
+static void
+at_output (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+  if (3 < argc)
+    fail_for_at_directive_too_many_args (argv[0]);
+  if (*out_namep)
+    {
+      free (*out_namep);
+      xfclose (yyout);
+    }
+  *out_namep = xpath_join (argv[1], 2 < argc ? argv[2] : NULL);
+  output_file_name_check (out_namep, true);
+  /* If there were errors, do not generate the output.  */
+  yyout = xfopen (complaint_status ? "/dev/null" : *out_namep, "w");
+  *out_linenop = 1;
 }
 
 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);
+  complain (NULL, 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);
+  complain (NULL, 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);
+  complain (NULL, fatal, "invalid @ in skeleton: %s", at);
 }
 
diff --git a/src/scan-skel.h b/src/scan-skel.h
index 2c6930b..20fa09d 100644
--- a/src/scan-skel.h
+++ b/src/scan-skel.h
@@ -1,6 +1,7 @@
 /* Scan Bison Skeletons.
 
-   Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
diff --git a/src/scan-skel.l b/src/scan-skel.l
index ed61b5c..121aac0 100644
--- a/src/scan-skel.l
+++ b/src/scan-skel.l
@@ -1,6 +1,6 @@
 /* Scan Bison Skeletons.                                       -*- C -*-
 
-   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2015, 2018-2019 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,32 +21,32 @@
 %option prefix="skel_" outfile="lex.yy.c"
 
 %{
+#include <dirname.h>
+#include <error.h>
+#include <path-join.h>
+#include <quotearg.h>
+
+#include <src/complain.h>
+#include <src/files.h>
+#include <src/getargs.h>
+#include <src/scan-skel.h>
+
+#define FLEX_PREFIX(Id) skel_ ## Id
+#include <src/flex-scanner.h>
+
 /* 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
 
-#define FLEX_PREFIX(Id) skel_ ## Id
-#include "flex-scanner.h"
-
-#include <dirname.h>
-#include <error.h>
-#include <quotearg.h>
-
-#include "complain.h"
-#include "getargs.h"
-#include "files.h"
-#include "scan-skel.h"
-
 #define YY_DECL static int skel_lex (void)
 YY_DECL;
 
-#define QPUTS(String) \
-   fputs (quotearg_style (c_quoting_style, String), yyout)
-
-static void at_directive_perform (int at_directive_argc,
-                                  char *at_directive_argv[],
-                                  char **outnamep, int *out_linenop);
+typedef void (*at_directive)(int, char**, char **, int*);
+static void at_init (int *argc, char *argv[], at_directive *at_ptr, at_directive fun);
+static void at_basename (int argc, char *argv[], char**, int*);
+static void at_complain (int argc, char *argv[], char**, int*);
+static void at_output (int argc, char *argv[], char **name, int *lineno);
 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);
@@ -59,42 +59,39 @@
 
 %{
   int out_lineno PACIFY_CC (= 0);
-  char *outname = NULL;
+  char *out_name = 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];
+  /* Currently, only the @complain directive takes multiple arguments, and
+     never more than 7, with argv[0] being the directive name and argv[1]
+     being the type of complaint to dispatch. */
+#define ARGC_MAX 9
+  int argc = 0;
+  char *argv[ARGC_MAX];
+  at_directive at_ptr = NULL;
 %}
 
 "@@" fputc ('@', yyout);
 "@{" fputc ('[', yyout);
 "@}" fputc (']', yyout);
-"@`" continue;  /* Used by b4_cat in ../data/bison.m4.  */
+"@'" continue;  /* Used by b4_cat in ../data/bison.m4.  */
 @\n  continue;
 
 "@oline@"  fprintf (yyout, "%d", out_lineno + 1);
-"@ofile@"  QPUTS (outname);
+"@ofile@"  fputs (quotearg_style (c_quoting_style, out_name), yyout);
 
-@[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;
-}
+"@basename("    at_init (&argc, argv, &at_ptr, &at_basename);
+"@complain("    at_init (&argc, argv, &at_ptr, &at_complain);
+"@output("      at_init (&argc, argv, &at_ptr, &at_output);
 
   /* This pattern must not match more than the previous @ patterns. */
-@[^@{}`(\n]*  fail_for_invalid_at (yytext);
-\n            out_lineno++; ECHO;
-[^@\n]+       ECHO;
+@[^@{}\'(\n]*   fail_for_invalid_at (yytext);
+\n              out_lineno++; ECHO;
+[^@\n]+         ECHO;
 
 <INITIAL><<EOF>> {
-  if (outname)
+  if (out_name)
     {
-      free (outname);
+      free (out_name);
       xfclose (yyout);
     }
   return EOF;
@@ -107,26 +104,24 @@
   "@@"   obstack_1grow (&obstack_for_string, '@');
   "@{"   obstack_1grow (&obstack_for_string, '[');
   "@}"   obstack_1grow (&obstack_for_string, ']');
-  "@`"   continue; /* For starting an argument that begins with whitespace. */
+  "@'"   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]);
+    if (argc >= ARGC_MAX)
+      fail_for_at_directive_too_many_args (argv[0]);
 
-    obstack_1grow (&obstack_for_string, '\0');
-    at_directive_argv[at_directive_argc++] =
-      obstack_finish (&obstack_for_string);
+    argv[argc++] = obstack_finish0 (&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;
+        aver (at_ptr);
+        at_ptr (argc, argv, &out_name, &out_lineno);
+        obstack_free (&obstack_for_string, argv[0]);
+        argc = 0;
         BEGIN INITIAL;
       }
   }
@@ -137,18 +132,26 @@
 <SC_AT_DIRECTIVE_SKIP_WS>
 {
   [ \t\r\n]    continue;
-  .            { yyless (0); BEGIN SC_AT_DIRECTIVE_ARGS; }
+  .            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]);
-  }
+  <<EOF>>  complain (NULL, fatal, _("unclosed %s directive in skeleton"), argv[0]);
 }
 
 %%
 
+static void
+at_init (int *argc, char *argv[], at_directive *at_ptr, at_directive fun)
+{
+  *at_ptr = fun;
+  yytext[yyleng-1] = '\0';
+  obstack_grow (&obstack_for_string, yytext, yyleng);
+  argv[(*argc)++] = obstack_finish (&obstack_for_string);
+  BEGIN SC_AT_DIRECTIVE_ARGS;
+}
+
 /*------------------------.
 | Scan a Bison skeleton.  |
 `------------------------*/
@@ -175,132 +178,96 @@
   yylex_destroy ();
 }
 
-static void
-at_directive_perform (int at_directive_argc,
-                      char *at_directive_argv[],
-                      char **outnamep, int *out_linenop)
+static inline warnings
+flag (const char *arg)
 {
-  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;
-    }
+  /* compare with values issued from b4_error */
+  if (STREQ (arg, "complain"))
+    return complaint;
+  else if (STREQ (arg, "deprecated"))
+    return Wdeprecated;
+  else if (STREQ (arg, "fatal"))
+    return fatal;
+  else if (STREQ (arg, "note"))
+    return silent | complaint | no_caret;
+  else if (STREQ (arg, "warn"))
+    return Wother;
   else
-    fail_for_invalid_at (at_directive_argv[0]);
+    abort ();
+}
+
+static void
+at_basename (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+  (void) out_namep;
+  (void) out_linenop;
+  if (2 < argc)
+    fail_for_at_directive_too_many_args (argv[0]);
+  fputs (last_component (argv[1]), yyout);
+}
+
+static void
+at_complain (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+  if (argc < 4)
+    fail_for_at_directive_too_few_args (argv[0]);
+
+  (void) out_namep;
+  (void) out_linenop;
+
+  warnings w = flag (argv[1]);
+
+  location loc;
+  location *locp = NULL;
+  if (argv[2] && argv[2][0])
+    {
+      boundary_set_from_string (&loc.start, argv[2]);
+      boundary_set_from_string (&loc.end, argv[3]);
+      locp = &loc;
+    }
+  static int indent;
+  if (w & silent)
+    indent += SUB_INDENT;
+  else
+    indent = 0;
+  complain_args (locp, w, &indent, argc - 4, argv + 4);
+  if (w & silent)
+    indent -= SUB_INDENT;
+}
+
+static void
+at_output (int argc, char *argv[], char **out_namep, int *out_linenop)
+{
+  if (3 < argc)
+    fail_for_at_directive_too_many_args (argv[0]);
+  if (*out_namep)
+    {
+      free (*out_namep);
+      xfclose (yyout);
+    }
+  *out_namep = xpath_join (argv[1], 2 < argc ? argv[2] : NULL);
+  output_file_name_check (out_namep, true);
+  /* If there were errors, do not generate the output.  */
+  yyout = xfopen (complaint_status ? "/dev/null" : *out_namep, "w");
+  *out_linenop = 1;
 }
 
 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);
+  complain (NULL, 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);
+  complain (NULL, 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);
+  complain (NULL, fatal, "invalid @ in skeleton: %s", at);
 }
diff --git a/src/state.c b/src/state.c
index 666e0cc..418f3fa 100644
--- a/src/state.c
+++ b/src/state.c
@@ -1,6 +1,7 @@
 /* Type definitions for the finite state machine for Bison.
 
-   Copyright (C) 2001-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2001-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -18,19 +19,22 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+#include "state.h"
+
 #include "system.h"
 
 #include <hash.h>
 
+#include "closure.h"
 #include "complain.h"
+#include "getargs.h"
 #include "gram.h"
-#include "state.h"
 #include "print-xml.h"
 
 
-			/*-------------------.
-			| Shifts and Gotos.  |
-			`-------------------*/
+                        /*-------------------.
+                        | Shifts and Gotos.  |
+                        `-------------------*/
 
 
 /*-----------------------------------------.
@@ -38,37 +42,30 @@
 `-----------------------------------------*/
 
 static transitions *
-transitions_new (int num, state **the_states)
+transitions_new (int num, state **dst)
 {
-  size_t states_size = num * sizeof *the_states;
+  size_t states_size = num * sizeof *dst;
   transitions *res = xmalloc (offsetof (transitions, states) + states_size);
   res->num = num;
-  memcpy (res->states, the_states, states_size);
+  memcpy (res->states, dst, states_size);
   return res;
 }
 
 
-/*-------------------------------------------------------.
-| Return the state such that SHIFTS contain a shift/goto |
-| to it on SYM.  Abort if none found.                    |
-`-------------------------------------------------------*/
-
 state *
-transitions_to (transitions *shifts, symbol_number sym)
+transitions_to (state *s, symbol_number sym)
 {
-  int j;
-  for (j = 0; ; j++)
-    {
-      aver (j < shifts->num);
-      if (TRANSITION_SYMBOL (shifts, j) == sym)
-	return shifts->states[j];
-    }
+  transitions *trans = s->transitions;
+  for (int i = 0; i < trans->num; ++i)
+    if (TRANSITION_SYMBOL (trans, i) == sym)
+      return trans->states[i];
+  abort ();
 }
 
 
-			/*--------------------.
-			| Error transitions.  |
-			`--------------------*/
+                        /*--------------------.
+                        | Error transitions.  |
+                        `--------------------*/
 
 
 /*---------------------------------.
@@ -81,16 +78,17 @@
   size_t symbols_size = num * sizeof *tokens;
   errs *res = xmalloc (offsetof (errs, symbols) + symbols_size);
   res->num = num;
-  memcpy (res->symbols, tokens, symbols_size);
+  if (tokens)
+    memcpy (res->symbols, tokens, symbols_size);
   return res;
 }
 
 
 
 
-			/*-------------.
-			| Reductions.  |
-			`-------------*/
+                        /*-------------.
+                        | Reductions.  |
+                        `-------------*/
 
 
 /*---------------------------------------.
@@ -110,9 +108,9 @@
 
 
 
-			/*---------.
-			| States.  |
-			`---------*/
+                        /*---------.
+                        | States.  |
+                        `---------*/
 
 
 state_number nstates = 0;
@@ -128,21 +126,19 @@
 
 state *
 state_new (symbol_number accessing_symbol,
-	   size_t nitems, item_number *core)
+           size_t nitems, item_number *core)
 {
-  state *res;
-  size_t items_size = nitems * sizeof *core;
-
   aver (nstates < STATE_NUMBER_MAXIMUM);
 
-  res = xmalloc (offsetof (state, items) + items_size);
+  size_t items_size = nitems * sizeof *core;
+  state *res = xmalloc (offsetof (state, items) + items_size);
   res->number = nstates++;
   res->accessing_symbol = accessing_symbol;
   res->transitions = NULL;
   res->reductions = NULL;
   res->errs = NULL;
   res->state_list = NULL;
-  res->consistent = 0;
+  res->consistent = false;
   res->solved_conflicts = NULL;
   res->solved_conflicts_xml = NULL;
 
@@ -157,12 +153,10 @@
 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);
+  size_t items_size = s->nitems * sizeof *s->items;
+  state *res = xmalloc (offsetof (state, items) + items_size);
   res->number = nstates++;
   res->accessing_symbol = s->accessing_symbol;
   res->transitions =
@@ -195,15 +189,32 @@
 }
 
 
+void
+state_transitions_print (const state *s, FILE *out)
+{
+  const transitions *trans = s->transitions;
+  fprintf (out, "transitions of %d (%d):\n",
+           s->number, trans->num);
+  for (int i = 0; i < trans->num; ++i)
+    fprintf (out, "  %d: (%d, %s, %d)\n",
+             i,
+             s->number,
+             symbols[s->transitions->states[i]->accessing_symbol]->tag,
+             s->transitions->states[i]->number);
+}
+
+
 /*---------------------------.
 | Set the transitions of S.  |
 `---------------------------*/
 
 void
-state_transitions_set (state *s, int num, state **trans)
+state_transitions_set (state *s, int num, state **dst)
 {
   aver (!s->transitions);
-  s->transitions = transitions_new (num, trans);
+  s->transitions = transitions_new (num, dst);
+  if (trace_flag & trace_automaton)
+    state_transitions_print (s, stderr);
 }
 
 
@@ -220,14 +231,13 @@
 
 
 int
-state_reduction_find (state *s, rule *r)
+state_reduction_find (state *s, rule const *r)
 {
-  int i;
   reductions *reds = s->reductions;
-  for (i = 0; i < reds->num; ++i)
+  for (int i = 0; i < reds->num; ++i)
     if (reds->rules[i] == r)
       return i;
-  return -1;
+  abort ();
 }
 
 
@@ -250,7 +260,7 @@
 `--------------------------------------------------*/
 
 void
-state_rule_lookahead_tokens_print (state *s, rule *r, FILE *out)
+state_rule_lookahead_tokens_print (state *s, rule const *r, FILE *out)
 {
   /* Find the reduction we are handling.  */
   reductions *reds = s->reductions;
@@ -264,17 +274,17 @@
       char const *sep = "";
       fprintf (out, "  [");
       BITSET_FOR_EACH (biter, reds->lookahead_tokens[red], k, 0)
-	{
-	  fprintf (out, "%s%s", sep, symbols[k]->tag);
-	  sep = ", ";
-	}
+        {
+          fprintf (out, "%s%s", sep, symbols[k]->tag);
+          sep = ", ";
+        }
       fprintf (out, "]");
     }
 }
 
 void
-state_rule_lookahead_tokens_print_xml (state *s, rule *r,
-				       FILE *out, int level)
+state_rule_lookahead_tokens_print_xml (state *s, rule const *r,
+                                       FILE *out, int level)
 {
   /* Find the reduction we are handling.  */
   reductions *reds = s->reductions;
@@ -287,10 +297,10 @@
       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_printf (out, level + 1, "<symbol>%s</symbol>",
+                      xml_escape (symbols[k]->tag));
+        }
       xml_puts (out, level, "</lookaheads>");
     }
 }
@@ -309,12 +319,10 @@
 static inline bool
 state_compare (state const *s1, state const *s2)
 {
-  size_t i;
-
   if (s1->nitems != s2->nitems)
     return false;
 
-  for (i = 0; i < s1->nitems; ++i)
+  for (size_t i = 0; i < s1->nitems; ++i)
     if (s1->items[i] != s2->items[i])
       return false;
 
@@ -332,8 +340,7 @@
 {
   /* Add up the state's item numbers to get a hash key.  */
   size_t key = 0;
-  size_t i;
-  for (i = 0; i < s->nitems; ++i)
+  for (size_t i = 0; i < s->nitems; ++i)
     key += s->items[i];
   return key % tablesize;
 }
@@ -352,11 +359,11 @@
 void
 state_hash_new (void)
 {
-  state_table = hash_initialize (HT_INITIAL_CAPACITY,
-				 NULL,
-				 state_hasher,
-				 state_comparator,
-				 NULL);
+  state_table = hash_xinitialize (HT_INITIAL_CAPACITY,
+                                  NULL,
+                                  state_hasher,
+                                  state_comparator,
+                                  NULL);
 }
 
 
@@ -393,11 +400,9 @@
 {
   size_t items_size = nitems * sizeof *core;
   state *probe = xmalloc (offsetof (state, items) + items_size);
-  state *entry;
-
   probe->nitems = nitems;
   memcpy (probe->items, core, items_size);
-  entry = hash_lookup (state_table, probe);
+  state *entry = hash_lookup (state_table, probe);
   free (probe);
   return entry;
 }
@@ -413,12 +418,9 @@
   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);
-  }
+  for (int i = 0; i < s->transitions->num; ++i)
+    if (!TRANSITION_IS_DISABLED (s->transitions, i))
+      state_record_reachable_states (s->transitions->states[i], reachable);
 }
 
 void
@@ -427,23 +429,20 @@
   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;
-          }
-      }
-  }
+  for (state_number 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);
 }
@@ -459,8 +458,8 @@
 void
 states_free (void)
 {
-  state_number i;
-  for (i = 0; i < nstates; ++i)
+  closure_free ();
+  for (state_number i = 0; i < nstates; ++i)
     state_free (states[i]);
   free (states);
 }
diff --git a/src/state.h b/src/state.h
index dfdc49d..031d959 100644
--- a/src/state.h
+++ b/src/state.h
@@ -1,7 +1,7 @@
 /* Type definitions for the finite state machine for Bison.
 
-   Copyright (C) 1984, 1989, 2000-2004, 2007, 2009-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2004, 2007, 2009-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -51,11 +51,11 @@
    lookahead token alone).  When the states are generated, these
    actions are represented in two other lists.
 
-   Each transition structure describes the possible transitions out
-   of one state, the state whose number is in the number field.  Each
-   contains a vector of numbers of the states that transitions can go
-   to.  The accessing_symbol fields of those states' cores say what
-   kind of input leads to them.
+   Each transition structure describes the possible transitions out of
+   one state (there are NUM of them).  Each contains a vector of
+   numbers of the states that transitions can go to.  The
+   accessing_symbol fields of those states' cores say what kind of
+   input leads to them.
 
    A transition to state zero should be ignored: conflict resolution
    deletes transitions by having them point to zero.
@@ -81,6 +81,8 @@
 #ifndef STATE_H_
 # define STATE_H_
 
+# include <stdbool.h>
+
 # include <bitset.h>
 
 # include "gram.h"
@@ -110,56 +112,56 @@
 
 typedef struct
 {
-  int num;
+  int num;            /** Size of destination STATES.  */
   state *states[1];
 } transitions;
 
 
 /* What is the symbol labelling the transition to
    TRANSITIONS->states[Num]?  Can be a token (amongst which the error
-   token), or non terminals in case of gotos.  */
+   token), or nonterminals in case of gotos.  */
 
-#define TRANSITION_SYMBOL(Transitions, Num) \
+# define TRANSITION_SYMBOL(Transitions, Num) \
   (Transitions->states[Num]->accessing_symbol)
 
 /* Is the TRANSITIONS->states[Num] a shift? (as opposed to gotos).  */
 
-#define TRANSITION_IS_SHIFT(Transitions, Num) \
+# define TRANSITION_IS_SHIFT(Transitions, Num) \
   (ISTOKEN (TRANSITION_SYMBOL (Transitions, Num)))
 
 /* Is the TRANSITIONS->states[Num] a goto?. */
 
-#define TRANSITION_IS_GOTO(Transitions, Num) \
+# define TRANSITION_IS_GOTO(Transitions, Num) \
   (!TRANSITION_IS_SHIFT (Transitions, Num))
 
 /* Is the TRANSITIONS->states[Num] labelled by the error token?  */
 
-#define TRANSITION_IS_ERROR(Transitions, Num) \
-  (TRANSITION_SYMBOL (Transitions, Num) == errtoken->number)
+# define TRANSITION_IS_ERROR(Transitions, Num) \
+  (TRANSITION_SYMBOL (Transitions, Num) == errtoken->content->number)
 
 /* When resolving a SR conflicts, if the reduction wins, the shift is
    disabled.  */
 
-#define TRANSITION_DISABLE(Transitions, Num) \
+# define TRANSITION_DISABLE(Transitions, Num) \
   (Transitions->states[Num] = NULL)
 
-#define TRANSITION_IS_DISABLED(Transitions, Num) \
+# define TRANSITION_IS_DISABLED(Transitions, Num) \
   (Transitions->states[Num] == NULL)
 
 
 /* Iterate over each transition over a token (shifts).  */
-#define FOR_EACH_SHIFT(Transitions, Iter)			\
-  for (Iter = 0;						\
-       Iter < Transitions->num					\
-	 && (TRANSITION_IS_DISABLED (Transitions, Iter)		\
-	     || TRANSITION_IS_SHIFT (Transitions, Iter));	\
-       ++Iter)							\
+# define FOR_EACH_SHIFT(Transitions, Iter)                      \
+  for (Iter = 0;                                                \
+       Iter < Transitions->num                                  \
+         && (TRANSITION_IS_DISABLED (Transitions, Iter)         \
+             || TRANSITION_IS_SHIFT (Transitions, Iter));       \
+       ++Iter)                                                  \
     if (!TRANSITION_IS_DISABLED (Transitions, Iter))
 
 
-/* Return the state such SHIFTS contain a shift/goto to it on SYM.
-   Abort if none found.  */
-struct state *transitions_to (transitions *shifts, symbol_number sym);
+/* The destination of the transition (shift/goto) from state S on
+   label SYM (term or nterm).  Abort if none found.  */
+struct state *transitions_to (state *s, symbol_number sym);
 
 
 /*-------.
@@ -208,9 +210,9 @@
      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;
+  /* Whether no lookahead sets on reduce actions are needed to decide
+     what to do in state S.  */
+  bool consistent;
 
   /* If some conflicts were solved thanks to precedence/associativity,
      a human readable description of the resolution.  */
@@ -228,25 +230,30 @@
 
 /* Create a new state with ACCESSING_SYMBOL for those items.  */
 state *state_new (symbol_number accessing_symbol,
-		  size_t core_size, item_number *core);
+                  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);
+/* Record that from S we can reach all the DST states (NUM of them).  */
+void state_transitions_set (state *s, int num, state **dst);
+
+/* Print the transitions of state s for debug.  */
+void state_transitions_print (const state *s, FILE *out);
 
 /* Set the reductions of STATE.  */
 void state_reductions_set (state *s, int num, rule **reds);
 
-int state_reduction_find (state *s, rule *r);
+/* The index of the reduction of state S that corresponds to rule R.
+   Aborts if there is no reduction of R in S.  */
+int state_reduction_find (state *s, rule const *r);
 
 /* Set the errs of STATE.  */
 void state_errs_set (state *s, int num, symbol **errors);
 
 /* Print on OUT all the lookahead tokens such that this STATE wants to
    reduce R.  */
-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);
+void state_rule_lookahead_tokens_print (state *s, rule const *r, FILE *out);
+void state_rule_lookahead_tokens_print_xml (state *s, rule const *r,
+                                            FILE *out, int level);
 
 /* Create/destroy the states hash table.  */
 void state_hash_new (void);
diff --git a/src/symlist.c b/src/symlist.c
index 69ac8a1..12751c8 100644
--- a/src/symlist.c
+++ b/src/symlist.c
@@ -1,7 +1,7 @@
 /* Lists of symbols for Bison
 
-   Copyright (C) 2002, 2005-2007, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002, 2005-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,10 +21,8 @@
 #include <config.h>
 #include "system.h"
 
-#include "complain.h"
 #include "symlist.h"
 
-
 /*--------------------------------------.
 | Create a list containing SYM at LOC.  |
 `--------------------------------------*/
@@ -36,19 +34,24 @@
 
   res->content_type = SYMLIST_SYMBOL;
   res->content.sym = sym;
-  res->location = res->sym_loc = loc;
+  res->sym_loc = loc;
+  res->named_ref = NULL;
 
   res->midrule = NULL;
   res->midrule_parent_rule = NULL;
   res->midrule_parent_rhs_index = 0;
 
-  code_props_none_init (&res->action_props);
-
+  /* Members used for LHS only.  */
+  res->rhs_loc = empty_loc;
   res->ruleprec = NULL;
+  res->percent_empty_loc = empty_loc;
+  code_props_none_init (&res->action_props);
   res->dprec = 0;
+  res->dprec_loc = empty_loc;
   res->merger = 0;
-
-  res->named_ref = NULL;
+  res->merger_declaration_loc = empty_loc;
+  res->expected_sr_conflicts = -1;
+  res->expected_rr_conflicts = -1;
 
   res->next = NULL;
 
@@ -66,8 +69,12 @@
   symbol_list *res = xmalloc (sizeof *res);
 
   res->content_type = SYMLIST_TYPE;
-  res->content.type_name = type_name;
-  res->location = res->sym_loc = loc;
+  res->content.sem_type = xmalloc (sizeof (semantic_type));
+  res->content.sem_type->tag = type_name;
+  res->content.sem_type->location = loc;
+  res->content.sem_type->status = undeclared;
+
+  res->sym_loc = loc;
   res->named_ref = NULL;
   res->next = NULL;
 
@@ -75,39 +82,12 @@
 }
 
 
-/*----------------------------------------.
-| Create a list containing a <*> at LOC.  |
-`----------------------------------------*/
-
 symbol_list *
-symbol_list_default_tagged_new (location loc)
+symbol_list_type_set (symbol_list *syms, uniqstr type_name, 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;
+  for (symbol_list *l = syms; l; l = l->next)
+    symbol_type_set (l->content.sym, type_name, loc);
+  return syms;
 }
 
 
@@ -118,13 +98,21 @@
 void
 symbol_list_syms_print (const symbol_list *l, FILE *f)
 {
+  fputc ('[', f);
+  char const *sep = "";
   for (/* Nothing. */; l && l->content.sym; l = l->next)
     {
-      symbol_print (l->content.sym, f);
-      fprintf (stderr, l->action_props.is_value_used ? " used" : " unused");
-      if (l && l->content.sym)
-	fprintf (f, ", ");
+      fputs (sep, f);
+      fputs (l->content_type == SYMLIST_SYMBOL ? "symbol: "
+             : l->content_type == SYMLIST_TYPE ? "type: "
+             : "invalid content_type: ",
+             f);
+      if (l->content_type == SYMLIST_SYMBOL)
+        symbol_print (l->content.sym, f);
+      fputs (l->action_props.is_value_used ? " (used)" : " (unused)", f);
+      sep = ", ";
     }
+  fputc (']', f);
 }
 
 
@@ -140,6 +128,23 @@
 }
 
 
+/*-------------------------.
+| Append NODE to the LIST. |
+`-------------------------*/
+
+symbol_list *
+symbol_list_append (symbol_list *list, symbol_list *node)
+{
+  if (!list)
+    return node;
+  symbol_list *next = list;
+  while (next->next)
+    next = next->next;
+  next->next = node;
+  return list;
+}
+
+
 /*-----------------------------------------------.
 | Free the LIST, but not the items it contains.  |
 `-----------------------------------------------*/
@@ -147,12 +152,13 @@
 void
 symbol_list_free (symbol_list *list)
 {
-  symbol_list *node, *next;
-  for (node = list; node; node = next)
+  for (symbol_list *next; list; list = next)
     {
-      next = node->next;
-      named_ref_free (node->named_ref);
-      free (node);
+      next = list->next;
+      named_ref_free (list->named_ref);
+      if (list->content_type == SYMLIST_TYPE)
+        free (list->content.sem_type);
+      free (list);
     }
 }
 
@@ -180,86 +186,53 @@
 symbol_list *
 symbol_list_n_get (symbol_list *l, int n)
 {
-  int i;
-
-  if (n < 0)
-    return NULL;
-
-  for (i = 0; i < n; ++i)
+  aver (0 <= n);
+  for (int i = 0; i < n; ++i)
     {
       l = l->next;
-      if (l == NULL
-          || (l->content_type == SYMLIST_SYMBOL && l->content.sym == NULL))
-	return NULL;
+      aver (l);
     }
-
+  aver (l->content_type == SYMLIST_SYMBOL);
+  aver (l->content.sym);
   return l;
 }
 
-
 /*--------------------------------------------------------------.
 | Get the data type (alternative in the union) of the value for |
 | symbol N in symbol list L.                                    |
 `--------------------------------------------------------------*/
 
 uniqstr
-symbol_list_n_type_name_get (symbol_list *l, location loc, int n)
+symbol_list_n_type_name_get (symbol_list *l, int n)
 {
-  l = symbol_list_n_get (l, n);
-  if (!l)
-    {
-      complain_at (loc, _("invalid $ value: $%d"), n);
-      return NULL;
-    }
-  aver (l->content_type == SYMLIST_SYMBOL);
-  return l->content.sym->type_name;
+  return symbol_list_n_get (l, n)->content.sym->content->type_name;
 }
 
 bool
 symbol_list_null (symbol_list *node)
 {
-  return !node ||
-    (node->content_type == SYMLIST_SYMBOL && !(node->content.sym));
+  return (!node
+          || (node->content_type == SYMLIST_SYMBOL && !node->content.sym));
 }
 
 void
-symbol_list_destructor_set (symbol_list *node, code_props const *destructor)
+symbol_list_code_props_set (symbol_list *node, code_props_type kind,
+                            code_props const *cprops)
 {
   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;
+    case SYMLIST_SYMBOL:
+      symbol_code_props_set (node->content.sym, kind, cprops);
+      if (node->content.sym->content->status == undeclared)
+        node->content.sym->content->status = used;
+      break;
+    case SYMLIST_TYPE:
+      semantic_type_code_props_set
+        (semantic_type_get (node->content.sem_type->tag,
+                            &node->content.sem_type->location),
+         kind, cprops);
+      if (node->content.sem_type->status == undeclared)
+        node->content.sem_type->status = used;
+      break;
     }
 }
diff --git a/src/symlist.h b/src/symlist.h
index 63577f7..a7225e1 100644
--- a/src/symlist.h
+++ b/src/symlist.h
@@ -1,7 +1,7 @@
 /* Lists of symbols for Bison
 
-   Copyright (C) 2002, 2005-2007, 2009-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 2002, 2005-2007, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -26,7 +26,9 @@
 # include "symtab.h"
 # include "named-ref.h"
 
-/* A list of symbols, used during the parsing to store the rules.  */
+/* A list of symbols, used during the parsing for many different
+   purposes: rules, symbol declarations or properties (such as
+   %destructor, etc.)...  */
 typedef struct symbol_list
 {
   /**
@@ -34,8 +36,8 @@
    * \c <>.
    */
   enum {
-    SYMLIST_SYMBOL, SYMLIST_TYPE,
-    SYMLIST_DEFAULT_TAGGED, SYMLIST_DEFAULT_TAGLESS
+    SYMLIST_SYMBOL,
+    SYMLIST_TYPE
   } content_type;
   union {
     /**
@@ -46,9 +48,11 @@
     /**
      * The semantic type iff <tt>symbol_list::content_type = SYMLIST_TYPE</tt>.
      */
-    uniqstr type_name;
+    semantic_type *sem_type;
   } content;
-  location location;
+
+  /* Named reference. */
+  named_ref *named_ref;
 
   /* Proper location of the symbol, not all the rule */
   location sym_loc;
@@ -64,18 +68,34 @@
   struct symbol_list *midrule_parent_rule;
   int midrule_parent_rhs_index;
 
+  /*--------------------------------------------------------------.
+  | Used for rules only (attached to the "LHS", one per rule even |
+  | when several RHSs are bound to a single lhs via "|").         |
+  `--------------------------------------------------------------*/
+
+  /* Location of the RHS. */
+  location rhs_loc;
+
+  /* Precedence/associativity.  */
+  symbol *ruleprec;
+
   /* 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;
+  /* The location of the first %empty for this rule, or \a
+     empty_loc.  */
+  location percent_empty_loc;
 
-  /* Named reference. */
-  named_ref *named_ref;
+  int dprec;
+  location dprec_loc;
+  int merger;
+  location merger_declaration_loc;
+
+  /* Counts of the number of expected conflicts for this rule, or -1 if none
+     given. */
+  int expected_sr_conflicts;
+  int expected_rr_conflicts;
 
   /* The list.  */
   struct symbol_list *next;
@@ -88,10 +108,10 @@
 /** Create a list containing \c type_name at \c loc.  */
 symbol_list *symbol_list_type_new (uniqstr type_name, 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);
+/** Assign the type \c type_name to all the members of \c syms.
+ ** \returns \c syms */
+symbol_list *symbol_list_type_set (symbol_list *syms,
+                                   uniqstr type_name, location loc);
 
 /** Print this list.
 
@@ -102,28 +122,30 @@
 /** Prepend \c node to \c list.  */
 symbol_list *symbol_list_prepend (symbol_list *list, symbol_list *node);
 
+/** Append \c node to \c list.  */
+symbol_list *symbol_list_append (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.  */
+/** Get item \c n in symbol list \c l.
+ ** \pre  0 <= n
+ ** \post res != NULL
+ **/
 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);
+uniqstr symbol_list_n_type_name_get (symbol_list *l, int n);
 
 /* 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);
+/** Set the \c \%destructor or \c \%printer for \c node as \c cprops.  */
+void symbol_list_code_props_set (symbol_list *node, code_props_type kind,
+                                 code_props const *cprops);
 
 #endif /* !SYMLIST_H_ */
diff --git a/src/symtab.c b/src/symtab.c
index 56cfe51..589da0a 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -1,7 +1,7 @@
 /* Symbol table manager for Bison.
 
-   Copyright (C) 1984, 1989, 2000-2002, 2004-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1984, 1989, 2000-2002, 2004-2015, 2018-2019 Free
+   Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -19,20 +19,31 @@
    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 "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.         |
-`-------------------------------------------------------------------*/
+#include "system.h"
+
+#include <assure.h>
+#include <fstrcmp.h>
+#include <hash.h>
+#include <quote.h>
+
+#include "complain.h"
+#include "getargs.h"
+#include "gram.h"
+#include "intprops.h"
+
+static struct hash_table *symbol_table = NULL;
+static struct hash_table *semantic_type_table = NULL;
+
+/*----------------------------------------------------------------.
+| Symbols sorted by tag.  Allocated by table_sort, after which no |
+| more symbols should be created.                                 |
+`----------------------------------------------------------------*/
 
 static symbol **symbols_sorted = NULL;
+static semantic_type **semantic_types_sorted = NULL;
+
 
 /*------------------------.
 | Distinguished symbols.  |
@@ -43,16 +54,42 @@
 symbol *endtoken = NULL;
 symbol *accept = NULL;
 symbol *startsymbol = NULL;
-location startsymbol_location;
+location startsymbol_loc;
 
-/*---------------------------------------.
-| Default %destructor's and %printer's.  |
-`---------------------------------------*/
+/* Precedence relation graph. */
+static symgraph **prec_nodes;
 
-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;
+/* Store which associativity is used.  */
+static bool *used_assoc = NULL;
+
+bool tag_seen = false;
+
+
+/*--------------------------.
+| Create a new sym_content. |
+`--------------------------*/
+
+static sym_content *
+sym_content_new (symbol *s)
+{
+  sym_content *res = xmalloc (sizeof *res);
+
+  res->symbol = s;
+
+  res->type_name = NULL;
+  for (int i = 0; i < CODE_PROPS_SIZE; ++i)
+    code_props_none_init (&res->props[i]);
+
+  res->number = NUMBER_UNDEFINED;
+  res->prec = 0;
+  res->assoc = undef_assoc;
+  res->user_token_number = USER_NUMBER_UNDEFINED;
+
+  res->class = unknown_sym;
+  res->status = undeclared;
+
+  return res;
+}
 
 /*---------------------------------.
 | Create a new symbol, named TAG.  |
@@ -62,51 +99,117 @@
 symbol_new (uniqstr tag, location loc)
 {
   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);
+  if (tag[0] != '\"' && tag[0] != '\'' && strchr (tag, '-'))
+    complain (&loc, Wyacc,
+              _("POSIX Yacc forbids dashes in symbol names: %s"), tag);
 
   res->tag = tag;
   res->location = loc;
-
-  res->type_name = NULL;
-  code_props_none_init (&res->destructor);
-  code_props_none_init (&res->printer);
-
-  res->number = NUMBER_UNDEFINED;
-  res->prec = 0;
-  res->assoc = undef_assoc;
-  res->user_token_number = USER_NUMBER_UNDEFINED;
-
+  res->location_of_lhs = false;
   res->alias = NULL;
-  res->class = unknown_sym;
-  res->declared = false;
+  res->content = sym_content_new (res);
+  res->is_alias = false;
 
   if (nsyms == SYMBOL_NUMBER_MAXIMUM)
-    fatal (_("too many symbols in input grammar (limit is %d)"),
-	   SYMBOL_NUMBER_MAXIMUM);
+    complain (NULL, fatal, _("too many symbols in input grammar (limit is %d)"),
+              SYMBOL_NUMBER_MAXIMUM);
   nsyms++;
   return res;
 }
 
+/*--------------------.
+| Free a sym_content. |
+`--------------------*/
+
+static void
+sym_content_free (sym_content *sym)
+{
+  free (sym);
+}
+
+
+/*---------------------------------------------------------.
+| Free a symbol and its associated content if appropriate. |
+`---------------------------------------------------------*/
+
+static void
+symbol_free (void *ptr)
+{
+  symbol *sym = (symbol *)ptr;
+  if (!sym->is_alias)
+    sym_content_free (sym->content);
+  free (sym);
+
+}
+
+/* If needed, swap first and second so that first has the earliest
+   location (according to location_cmp).
+
+   Many symbol features (e.g., 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.
+*/
+
+static void
+symbols_sort (symbol **first, symbol **second)
+{
+  if (0 < location_cmp ((*first)->location, (*second)->location))
+    {
+      symbol* tmp = *first;
+      *first = *second;
+      *second = tmp;
+    }
+}
+
+/* Likewise, for locations.  */
+
+static void
+locations_sort (location *first, location *second)
+{
+  if (0 < location_cmp (*first, *second))
+    {
+      location tmp = *first;
+      *first = *second;
+      *second = tmp;
+    }
+}
+
+char const *
+code_props_type_string (code_props_type kind)
+{
+  switch (kind)
+    {
+    case destructor:
+      return "%destructor";
+    case printer:
+      return "%printer";
+    }
+  abort ();
+}
+
+
 /*----------------------------------------.
 | Create a new semantic type, named TAG.  |
 `----------------------------------------*/
 
 static semantic_type *
-semantic_type_new (uniqstr tag)
+semantic_type_new (uniqstr tag, const location *loc)
 {
   semantic_type *res = xmalloc (sizeof *res);
 
   uniqstr_assert (tag);
   res->tag = tag;
-  code_props_none_init (&res->destructor);
-  code_props_none_init (&res->printer);
+  res->location = loc ? *loc : empty_loc;
+  res->status = undeclared;
+  for (int i = 0; i < CODE_PROPS_SIZE; ++i)
+    code_props_none_init (&res->props[i]);
 
   return res;
 }
@@ -116,56 +219,175 @@
 | Print a symbol.  |
 `-----------------*/
 
-#define SYMBOL_ATTR_PRINT(Attr)				\
-  if (s->Attr)						\
-    fprintf (f, " %s { %s }", #Attr, s->Attr)
+#define SYMBOL_ATTR_PRINT(Attr)                         \
+  if (s->content && s->content->Attr)                   \
+    fprintf (f, " %s { %s }", #Attr, s->content->Attr)
 
-#define SYMBOL_CODE_PRINT(Attr)                         \
-  if (s->Attr.code)                                     \
-    fprintf (f, " %s { %s }", #Attr, s->Attr.code)
+#define SYMBOL_CODE_PRINT(Attr)                                         \
+  if (s->content && s->content->props[Attr].code)                       \
+    fprintf (f, " %s { %s }", #Attr, s->content->props[Attr].code)
 
 void
-symbol_print (symbol *s, FILE *f)
+symbol_print (symbol const *s, FILE *f)
 {
   if (s)
     {
-      fprintf (f, "\"%s\"", s->tag);
+      symbol_class c = s->content->class;
+      fprintf (f, "%s: %s",
+               c == unknown_sym    ? "unknown"
+               : c == pct_type_sym ? "%type"
+               : c == token_sym    ? "token"
+               : c == nterm_sym    ? "nterm"
+               : NULL, /* abort.  */
+               s->tag);
       SYMBOL_ATTR_PRINT (type_name);
       SYMBOL_CODE_PRINT (destructor);
       SYMBOL_CODE_PRINT (printer);
     }
   else
-    fprintf (f, "<NULL>");
+    fputs ("<NULL>", f);
 }
 
 #undef SYMBOL_ATTR_PRINT
 #undef SYMBOL_CODE_PRINT
 
+
+/*----------------------------------.
+| Whether S is a valid identifier.  |
+`----------------------------------*/
+
+static bool
+is_identifier (uniqstr s)
+{
+  static char const alphanum[26 + 26 + 1 + 10] =
+    "abcdefghijklmnopqrstuvwxyz"
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+    "_"
+    "0123456789";
+  if (!s || ! memchr (alphanum, *s, sizeof alphanum - 10))
+    return false;
+  for (++s; *s; ++s)
+    if (! memchr (alphanum, *s, sizeof alphanum))
+      return false;
+  return true;
+}
+
+
+/*-----------------------------------------------.
+| Get the identifier associated to this symbol.  |
+`-----------------------------------------------*/
+uniqstr
+symbol_id_get (symbol const *sym)
+{
+  if (sym->alias)
+    sym = sym->alias;
+  return is_identifier (sym->tag) ? sym->tag : 0;
+}
+
+
 /*------------------------------------------------------------------.
 | Complain that S's WHAT is redeclared at SECOND, and was first set |
 | at FIRST.                                                         |
 `------------------------------------------------------------------*/
 
 static void
-symbol_redeclaration (symbol *s, const char *what, location first,
-                      location second)
+complain_symbol_redeclared (symbol *s, const char *what, location first,
+                            location second)
 {
-  unsigned i = 0;
-  complain_at_indent (second, &i, _("%s redeclaration for %s"), what, s->tag);
+  int i = 0;
+  locations_sort (&first, &second);
+  complain_indent (&second, complaint, &i,
+                   _("%s redeclaration for %s"), what, s->tag);
   i += SUB_INDENT;
-  complain_at_indent (first, &i, _("previous declaration"));
+  complain_indent (&first, complaint, &i,
+                   _("previous declaration"));
 }
 
 static void
-semantic_type_redeclaration (semantic_type *s, const char *what, location first,
-                             location second)
+complain_semantic_type_redeclared (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);
+  int i = 0;
+  locations_sort (&first, &second);
+  complain_indent (&second, complaint, &i,
+                   _("%s redeclaration for <%s>"), what, s->tag);
   i += SUB_INDENT;
-  complain_at_indent (first, &i, _("previous declaration"));
+  complain_indent (&first, complaint, &i,
+                   _("previous declaration"));
 }
 
+static void
+complain_class_redeclared (symbol *sym, symbol_class class, location second)
+{
+  int i = 0;
+  complain_indent (&second, complaint, &i,
+                   class == token_sym
+                   ? _("symbol %s redeclared as a token")
+                   : _("symbol %s redeclared as a nonterminal"), sym->tag);
+  if (!location_empty (sym->location))
+    {
+      i += SUB_INDENT;
+      complain_indent (&sym->location, complaint, &i,
+                       _("previous definition"));
+    }
+}
+
+static const symbol *
+symbol_from_uniqstr_fuzzy (const uniqstr key)
+{
+  aver (symbols_sorted);
+#define FSTRCMP_THRESHOLD 0.6
+  double best_similarity = FSTRCMP_THRESHOLD;
+  const symbol *res = NULL;
+  size_t count = hash_get_n_entries (symbol_table);
+  for (int i = 0; i < count; ++i)
+    {
+      symbol *sym = symbols_sorted[i];
+      if (STRNEQ (key, sym->tag)
+          && (sym->content->status == declared
+              || sym->content->status == undeclared))
+        {
+          double similarity = fstrcmp_bounded (key, sym->tag, best_similarity);
+          if (best_similarity < similarity)
+            {
+              res = sym;
+              best_similarity = similarity;
+            }
+        }
+    }
+  return res;
+}
+
+static void
+complain_symbol_undeclared (symbol *sym)
+{
+  assert (sym->content->status != declared);
+  const symbol *best = symbol_from_uniqstr_fuzzy (sym->tag);
+  if (best)
+    {
+      complain (&sym->location,
+                sym->content->status == needed ? complaint : Wother,
+                _("symbol %s is used, but is not defined as a token"
+                  " and has no rules; did you mean %s?"),
+                quote_n (0, sym->tag),
+                quote_n (1, best->tag));
+      if (feature_flag & feature_caret)
+        location_caret_suggestion (sym->location, best->tag, stderr);
+    }
+  else
+    complain (&sym->location,
+              sym->content->status == needed ? complaint : Wother,
+              _("symbol %s is used, but is not defined as a token"
+                " and has no rules"),
+              quote (sym->tag));
+}
+
+void
+symbol_location_as_lhs_set (symbol *sym, location loc)
+{
+  if (!sym->location_of_lhs)
+    sym->location = loc;
+}
 
 
 /*-----------------------------------------------------------------.
@@ -178,123 +400,81 @@
 {
   if (type_name)
     {
-      if (sym->type_name)
-	symbol_redeclaration (sym, "%type", sym->type_location, loc);
-      uniqstr_assert (type_name);
-      sym->type_name = type_name;
-      sym->type_location = loc;
+      tag_seen = true;
+      if (sym->content->type_name)
+        complain_symbol_redeclared (sym, "%type",
+                                    sym->content->type_loc, loc);
+      else
+        {
+          uniqstr_assert (type_name);
+          sym->content->type_name = type_name;
+          sym->content->type_loc = loc;
+        }
     }
 }
 
-/*-----------------------------------------.
-| Set the DESTRUCTOR associated with SYM.  |
-`-----------------------------------------*/
+/*--------------------------------------------------------.
+| Set the DESTRUCTOR or PRINTER associated with the SYM.  |
+`--------------------------------------------------------*/
 
 void
-symbol_destructor_set (symbol *sym, code_props const *destructor)
+symbol_code_props_set (symbol *sym, code_props_type kind,
+                       code_props const *code)
 {
-  if (sym->destructor.code)
-    symbol_redeclaration (sym, "%destructor", sym->destructor.location,
-                          destructor->location);
-  sym->destructor = *destructor;
+  if (sym->content->props[kind].code)
+    complain_symbol_redeclared (sym, code_props_type_string (kind),
+                                sym->content->props[kind].location,
+                                code->location);
+  else
+    sym->content->props[kind] = *code;
 }
 
-/*------------------------------------------.
-| Set the DESTRUCTOR associated with TYPE.  |
-`------------------------------------------*/
+/*-----------------------------------------------------.
+| Set the DESTRUCTOR or PRINTER associated with TYPE.  |
+`-----------------------------------------------------*/
 
 void
-semantic_type_destructor_set (semantic_type *type,
-                              code_props const *destructor)
+semantic_type_code_props_set (semantic_type *type,
+                              code_props_type kind,
+                              code_props const *code)
 {
-  if (type->destructor.code)
-    semantic_type_redeclaration (type, "%destructor",
-                                 type->destructor.location,
-                                 destructor->location);
-  type->destructor = *destructor;
+  if (type->props[kind].code)
+    complain_semantic_type_redeclared (type, code_props_type_string (kind),
+                                       type->props[kind].location,
+                                       code->location);
+  else
+    type->props[kind] = *code;
 }
 
-/*---------------------------------------.
-| Get the computed %destructor for SYM.  |
-`---------------------------------------*/
+/*---------------------------------------------------.
+| Get the computed %destructor or %printer for SYM.  |
+`---------------------------------------------------*/
 
-code_props const *
-symbol_destructor_get (symbol const *sym)
+code_props *
+symbol_code_props_get (symbol *sym, code_props_type kind)
 {
-  /* Per-symbol %destructor.  */
-  if (sym->destructor.code)
-    return &sym->destructor;
+  /* Per-symbol code props.  */
+  if (sym->content->props[kind].code)
+    return &sym->content->props[kind];
 
-  /* Per-type %destructor.  */
-  if (sym->type_name)
+  /* Per-type code props.  */
+  if (sym->content->type_name)
     {
-      code_props const *destructor =
-        &semantic_type_get (sym->type_name)->destructor;
-      if (destructor->code)
-        return destructor;
+      code_props *code =
+        &semantic_type_get (sym->content->type_name, NULL)->props[kind];
+      if (code->code)
+        return code;
     }
 
-  /* 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)
+  /* Apply default code props's only to user-defined symbols.  */
+  if (sym->tag[0] != '$' && sym != errtoken)
     {
-      code_props const *printer = &semantic_type_get (sym->type_name)->printer;
-      if (printer->code)
-        return printer;
+      code_props *code = &semantic_type_get (sym->content->type_name ? "*" : "",
+                                             NULL)->props[kind];
+      if (code->code)
+        return code;
     }
-
-  /* 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;
+  return &code_props_none;
 }
 
 /*-----------------------------------------------------------------.
@@ -307,12 +487,16 @@
 {
   if (a != undef_assoc)
     {
-      if (sym->prec != 0)
-	symbol_redeclaration (sym, assoc_to_string (a), sym->prec_location,
-                              loc);
-      sym->prec = prec;
-      sym->assoc = a;
-      sym->prec_location = loc;
+      sym_content *s = sym->content;
+      if (s->prec)
+        complain_symbol_redeclared (sym, assoc_to_string (a),
+                                    s->prec_loc, loc);
+      else
+        {
+          s->prec = prec;
+          s->assoc = a;
+          s->prec_loc = loc;
+        }
     }
 
   /* Only terminals have a precedence. */
@@ -324,27 +508,53 @@
 | Set the CLASS associated with SYM.  |
 `------------------------------------*/
 
+static void
+complain_pct_type_on_token (location *loc)
+{
+  complain (loc, Wyacc,
+            _("POSIX yacc reserves %%type to nonterminals"));
+}
+
 void
 symbol_class_set (symbol *sym, symbol_class class, location loc, bool declaring)
 {
-  if (sym->class != unknown_sym && sym->class != class)
+  aver (class != unknown_sym);
+  sym_content *s = sym->content;
+  if (class == pct_type_sym)
     {
-      complain_at (loc, _("symbol %s redefined"), sym->tag);
-      sym->declared = false;
+      if (s->class == token_sym)
+        complain_pct_type_on_token (&loc);
+      else if (s->class == unknown_sym)
+        s->class = class;
     }
-
-  if (class == nterm_sym && sym->class != nterm_sym)
-    sym->number = nvars++;
-  else if (class == token_sym && sym->number == NUMBER_UNDEFINED)
-    sym->number = ntokens++;
-
-  sym->class = class;
-
-  if (declaring)
+  else if (s->class != unknown_sym && s->class != pct_type_sym
+           && s->class != class)
+    complain_class_redeclared (sym, class, loc);
+  else
     {
-      if (sym->declared)
-	warn_at (loc, _("symbol %s redeclared"), sym->tag);
-      sym->declared = true;
+      if (class == token_sym && s->class == pct_type_sym)
+        complain_pct_type_on_token (&sym->location);
+
+      if (class == nterm_sym && s->class != nterm_sym)
+        s->number = nvars++;
+      else if (class == token_sym && s->number == NUMBER_UNDEFINED)
+        s->number = ntokens++;
+      s->class = class;
+
+      if (declaring)
+        {
+          if (s->status == declared)
+            {
+              int i = 0;
+              complain_indent (&loc, Wother, &i,
+                               _("symbol %s redeclared"), sym->tag);
+              i += SUB_INDENT;
+              complain_indent (&sym->location, Wother, &i,
+                               _("previous declaration"));
+            }
+          else
+            s->status = declared;
+        }
     }
 }
 
@@ -356,26 +566,30 @@
 void
 symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
 {
-  int *user_token_numberp;
-
-  if (sym->user_token_number != USER_NUMBER_HAS_STRING_ALIAS)
-    user_token_numberp = &sym->user_token_number;
+  int *user_token_numberp = &sym->content->user_token_number;
+  if (sym->content->class != token_sym)
+    complain (&loc, complaint,
+              _("nonterminals cannot be given an explicit number"));
+  else if (*user_token_numberp != USER_NUMBER_UNDEFINED
+           && *user_token_numberp != user_token_number)
+    complain (&loc, complaint, _("redefining user token number of %s"),
+              sym->tag);
+  else if (user_token_number == INT_MAX)
+    complain (&loc, complaint, _("user token number of %s too large"),
+              sym->tag);
   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);
-
-  *user_token_numberp = user_token_number;
-  /* User defined $end token? */
-  if (user_token_number == 0)
     {
-      endtoken = sym;
-      /* It is always mapped to 0, so it was already counted in
-	 NTOKENS.  */
-      if (endtoken->number != NUMBER_UNDEFINED)
-        --ntokens;
-      endtoken->number = 0;
+      *user_token_numberp = user_token_number;
+      /* User defined $end token? */
+      if (user_token_number == 0 && !endtoken)
+        {
+          endtoken = sym->content->symbol;
+          /* It is always mapped to 0, so it was already counted in
+             NTOKENS.  */
+          if (endtoken->content->number != NUMBER_UNDEFINED)
+            --ntokens;
+          endtoken->content->number = 0;
+        }
     }
 }
 
@@ -385,189 +599,169 @@
 | nonterminal.                                              |
 `----------------------------------------------------------*/
 
-static inline bool
+static void
 symbol_check_defined (symbol *sym)
 {
-  if (sym->class == unknown_sym)
+  sym_content *s = sym->content;
+  if (s->class == unknown_sym || s->class == pct_type_sym)
     {
-      complain_at
-	(sym->location,
-	 _("symbol %s is used, but is not defined as a token and has no rules"),
-	 sym->tag);
-      sym->class = nterm_sym;
-      sym->number = nvars++;
+      complain_symbol_undeclared (sym);
+      s->class = nterm_sym;
+      s->number = nvars++;
     }
 
-  return true;
+  if (s->class == token_sym
+      && sym->tag[0] == '"'
+      && !sym->is_alias)
+    complain (&sym->location, Wdangling_alias,
+              _("string literal %s not attached to a symbol"),
+              sym->tag);
+
+  for (int i = 0; i < 2; ++i)
+    symbol_code_props_get (sym, i)->is_used = true;
+
+  /* Set the semantic type status associated to the current symbol to
+     'declared' so that we could check semantic types unnecessary uses. */
+  if (s->type_name)
+    {
+      semantic_type *sem_type = semantic_type_get (s->type_name, NULL);
+      if (sem_type)
+        sem_type->status = declared;
+    }
 }
 
-static bool
-symbol_check_defined_processor (void *sym, void *null ATTRIBUTE_UNUSED)
+static void
+semantic_type_check_defined (semantic_type *sem_type)
 {
-  return symbol_check_defined (sym);
+  /* <*> and <> do not have to be "declared".  */
+  if (sem_type->status == declared
+      || !*sem_type->tag
+      || STREQ (sem_type->tag, "*"))
+    {
+      for (int i = 0; i < 2; ++i)
+        if (sem_type->props[i].kind != CODE_PROPS_NONE
+            && ! sem_type->props[i].is_used)
+          complain (&sem_type->location, Wother,
+                    _("useless %s for type <%s>"),
+                    code_props_type_string (i), sem_type->tag);
+    }
+  else
+    complain (&sem_type->location, Wother,
+              _("type <%s> is used, but is not associated to any symbol"),
+              sem_type->tag);
 }
 
+/*-------------------------------------------------------------------.
+| Merge the properties (precedence, associativity, etc.) of SYM, and |
+| its string-named alias STR; check consistency.                     |
+`-------------------------------------------------------------------*/
+
+static void
+symbol_merge_properties (symbol *sym, symbol *str)
+{
+  if (str->content->type_name != sym->content->type_name)
+    {
+      if (str->content->type_name)
+        symbol_type_set (sym,
+                         str->content->type_name, str->content->type_loc);
+      else
+        symbol_type_set (str,
+                         sym->content->type_name, sym->content->type_loc);
+    }
+
+
+  for (int i = 0; i < CODE_PROPS_SIZE; ++i)
+    if (str->content->props[i].code)
+      symbol_code_props_set (sym, i, &str->content->props[i]);
+    else if (sym->content->props[i].code)
+      symbol_code_props_set (str, i, &sym->content->props[i]);
+
+  if (sym->content->prec || str->content->prec)
+    {
+      if (str->content->prec)
+        symbol_precedence_set (sym, str->content->prec, str->content->assoc,
+                               str->content->prec_loc);
+      else
+        symbol_precedence_set (str, sym->content->prec, sym->content->assoc,
+                               sym->content->prec_loc);
+    }
+}
 
 void
 symbol_make_alias (symbol *sym, symbol *str, location loc)
 {
-  if (str->alias)
-    warn_at (loc, _("symbol %s used more than once as a literal string"),
-             str->tag);
+  if (sym->content->class != token_sym)
+    complain (&loc, complaint,
+              _("nonterminals cannot be given a string alias"));
+  else if (str->alias)
+    complain (&loc, Wother,
+              _("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);
+    complain (&loc, Wother,
+              _("symbol %s given more than one literal string"), sym->tag);
   else
     {
-      str->class = token_sym;
-      str->user_token_number = sym->user_token_number;
-      sym->user_token_number = USER_NUMBER_HAS_STRING_ALIAS;
+      symbol_merge_properties (sym, str);
+      sym_content_free (str->content);
+      str->content = sym->content;
+      str->content->symbol = str;
+      str->is_alias = true;
       str->alias = sym;
       sym->alias = str;
-      str->number = sym->number;
-      symbol_type_set (str, sym->type_name, loc);
     }
 }
 
 
-/*---------------------------------------------------------.
-| Check that THIS, and its alias, have same precedence and |
-| associativity.                                           |
-`---------------------------------------------------------*/
-
-static inline void
-symbol_check_alias_consistency (symbol *this)
-{
-  symbol *sym = this;
-  symbol *str = this->alias;
-
-  /* Check only the symbol in the symbol-string pair.  */
-  if (!(this->alias
-        && this->user_token_number == USER_NUMBER_HAS_STRING_ALIAS))
-    return;
-
-  if (str->type_name != sym->type_name)
-    {
-      if (str->type_name)
-	symbol_type_set (sym, str->type_name, str->type_location);
-      else
-	symbol_type_set (str, sym->type_name, sym->type_location);
-    }
-
-
-  if (str->destructor.code || sym->destructor.code)
-    {
-      if (str->destructor.code)
-	symbol_destructor_set (sym, &str->destructor);
-      else
-	symbol_destructor_set (str, &sym->destructor);
-    }
-
-  if (str->printer.code || sym->printer.code)
-    {
-      if (str->printer.code)
-	symbol_printer_set (sym, &str->printer);
-      else
-	symbol_printer_set (str, &sym->printer);
-    }
-
-  if (sym->prec || str->prec)
-    {
-      if (str->prec)
-	symbol_precedence_set (sym, str->prec, str->assoc,
-			       str->prec_location);
-      else
-	symbol_precedence_set (str, sym->prec, sym->assoc,
-			       sym->prec_location);
-    }
-}
-
-static bool
-symbol_check_alias_consistency_processor (void *this,
-					  void *null ATTRIBUTE_UNUSED)
-{
-  symbol_check_alias_consistency (this);
-  return true;
-}
-
-
 /*-------------------------------------------------------------------.
 | Assign a symbol number, and write the definition of the token name |
 | into FDEFINES.  Put in SYMBOLS.                                    |
 `-------------------------------------------------------------------*/
 
-static inline bool
+static void
 symbol_pack (symbol *this)
 {
-  aver (this->number != NUMBER_UNDEFINED);
-  if (this->class == nterm_sym)
-    this->number += ntokens;
-  else if (this->user_token_number == USER_NUMBER_HAS_STRING_ALIAS)
-    return true;
+  aver (this->content->number != NUMBER_UNDEFINED);
+  if (this->content->class == nterm_sym)
+    this->content->number += ntokens;
 
-  symbols[this->number] = this;
-  return true;
+  symbols[this->content->number] = this->content->symbol;
 }
 
-static bool
-symbol_pack_processor (void *this, void *null ATTRIBUTE_UNUSED)
-{
-  return symbol_pack (this);
-}
-
-
 static void
-user_token_number_redeclaration (int num, symbol *first, symbol *second)
+complain_user_token_number_redeclared (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);
+  int i = 0;
+  symbols_sort (&first, &second);
+  complain_indent (&second->location, complaint, &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);
+  complain_indent (&first->location, complaint, &i,
+                   _("previous declaration for %s"),
+                   first->tag);
 }
 
 /*--------------------------------------------------.
 | Put THIS in TOKEN_TRANSLATIONS if it is a token.  |
 `--------------------------------------------------*/
 
-static inline bool
+static void
 symbol_translation (symbol *this)
 {
-  /* Non-terminal? */
-  if (this->class == token_sym
-      && this->user_token_number != USER_NUMBER_HAS_STRING_ALIAS)
+  /* Nonterminal? */
+  if (this->content->class == token_sym
+      && !this->is_alias)
     {
-      /* A token which translation has already been set? */
-      if (token_translations[this->user_token_number] != undeftoken->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;
+      /* A token which translation has already been set?*/
+      if (token_translations[this->content->user_token_number]
+          != undeftoken->content->number)
+        complain_user_token_number_redeclared
+          (this->content->user_token_number,
+           symbols[token_translations[this->content->user_token_number]], this);
+      else
+        token_translations[this->content->user_token_number]
+          = this->content->number;
     }
-
-  return true;
-}
-
-static bool
-symbol_translation_processor (void *this, void *null ATTRIBUTE_UNUSED)
-{
-  return symbol_translation (this);
 }
 
 
@@ -578,9 +772,6 @@
 /* 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)
 {
@@ -640,16 +831,33 @@
 void
 symbols_new (void)
 {
-  symbol_table = hash_initialize (HT_INITIAL_CAPACITY,
-				  NULL,
-				  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);
+  symbol_table = hash_xinitialize (HT_INITIAL_CAPACITY,
+                                   NULL,
+                                   hash_symbol_hasher,
+                                   hash_symbol_comparator,
+                                   symbol_free);
+
+  /* Construct the accept symbol. */
+  accept = symbol_get ("$accept", empty_loc);
+  accept->content->class = nterm_sym;
+  accept->content->number = nvars++;
+
+  /* Construct the error token */
+  errtoken = symbol_get ("error", empty_loc);
+  errtoken->content->class = token_sym;
+  errtoken->content->number = ntokens++;
+
+  /* Construct a token that represents all undefined literal tokens.
+     It is always token number 2.  */
+  undeftoken = symbol_get ("$undefined", empty_loc);
+  undeftoken->content->class = token_sym;
+  undeftoken->content->number = ntokens++;
+
+  semantic_type_table = hash_xinitialize (HT_INITIAL_CAPACITY,
+                                          NULL,
+                                          hash_semantic_type_hasher,
+                                          hash_semantic_type_comparator,
+                                          free);
 }
 
 
@@ -662,10 +870,9 @@
 symbol_from_uniqstr (const uniqstr key, location loc)
 {
   symbol probe;
-  symbol *entry;
 
   probe.tag = key;
-  entry = hash_lookup (symbol_table, &probe);
+  symbol *entry = hash_lookup (symbol_table, &probe);
 
   if (!entry)
     {
@@ -685,18 +892,17 @@
 `-----------------------------------------------------------------------*/
 
 semantic_type *
-semantic_type_from_uniqstr (const uniqstr key)
+semantic_type_from_uniqstr (const uniqstr key, const location *loc)
 {
   semantic_type probe;
-  semantic_type *entry;
 
   probe.tag = key;
-  entry = hash_lookup (semantic_type_table, &probe);
+  semantic_type *entry = hash_lookup (semantic_type_table, &probe);
 
   if (!entry)
     {
       /* First insertion in the hash. */
-      entry = semantic_type_new (key);
+      entry = semantic_type_new (key, loc);
       if (!hash_insert (semantic_type_table, entry))
         xalloc_die ();
     }
@@ -722,9 +928,9 @@
 `-----------------------------------------------------------------------*/
 
 semantic_type *
-semantic_type_get (const char *key)
+semantic_type_get (const char *key, const location *loc)
 {
-  return semantic_type_from_uniqstr (uniqstr_new (key));
+  return semantic_type_from_uniqstr (uniqstr_new (key), loc);
 }
 
 
@@ -738,14 +944,12 @@
 {
   /* Incremented for each generated symbol.  */
   static int dummy_count = 0;
-  static char buf[256];
-
-  symbol *sym;
-
-  sprintf (buf, "$@%d", ++dummy_count);
-  sym = symbol_get (buf, loc);
-  sym->class = nterm_sym;
-  sym->number = nvars++;
+  char buf[32];
+  int len = snprintf (buf, sizeof buf, "$@%d", ++dummy_count);
+  assure (len < sizeof buf);
+  symbol *sym = symbol_get (buf, loc);
+  sym->content->class = nterm_sym;
+  sym->content->number = nvars++;
   return sym;
 }
 
@@ -766,42 +970,29 @@
   hash_free (semantic_type_table);
   free (symbols);
   free (symbols_sorted);
+  free (semantic_types_sorted);
 }
 
 
-/*---------------------------------------------------------------.
-| Look for undefined symbols, report an error, and consider them |
-| terminals.                                                     |
-`---------------------------------------------------------------*/
-
 static int
-symbols_cmp (symbol const *a, symbol const *b)
+symbol_cmp (void const *a, void const *b)
 {
-  return strcmp (a->tag, b->tag);
+  return location_cmp ((*(symbol * const *)a)->location,
+                       (*(symbol * const *)b)->location);
 }
 
-static int
-symbols_cmp_qsort (void const *a, void const *b)
-{
-  return symbols_cmp (*(symbol * const *)a, *(symbol * const *)b);
-}
+/* Store in *SORTED an array of pointers to the symbols contained in
+   TABLE, sorted (alphabetically) by tag. */
 
 static void
-symbols_do (Hash_processor processor, void *processor_data)
+table_sort (struct hash_table *table, symbol ***sorted)
 {
-  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);
-  }
+  aver (!*sorted);
+  size_t count = hash_get_n_entries (table);
+  *sorted = xnmalloc (count + 1, sizeof **sorted);
+  hash_get_entries (table, (void**)*sorted, count);
+  qsort (*sorted, count, sizeof **sorted, symbol_cmp);
+  (*sorted)[count] = NULL;
 }
 
 /*--------------------------------------------------------------.
@@ -812,7 +1003,20 @@
 void
 symbols_check_defined (void)
 {
-  symbols_do (symbol_check_defined_processor, NULL);
+  table_sort (symbol_table, &symbols_sorted);
+  /* semantic_type, like symbol, starts with a 'tag' field and then a
+     'location' field.  And here we only deal with arrays/hashes of
+     pointers, sizeof is not an issue.
+
+     So instead of implementing table_sort (and symbol_cmp) once for
+     each type, let's lie a bit to the typing system, and treat
+     'semantic_type' as if it were 'symbol'. */
+  table_sort (semantic_type_table, (symbol ***) &semantic_types_sorted);
+
+  for (int i = 0; symbols_sorted[i]; ++i)
+    symbol_check_defined (symbols_sorted[i]);
+  for (int i = 0; semantic_types_sorted[i]; ++i)
+    semantic_type_check_defined (semantic_types_sorted[i]);
 }
 
 /*------------------------------------------------------------------.
@@ -824,50 +1028,55 @@
 symbols_token_translations_init (void)
 {
   bool num_256_available_p = true;
-  int i;
 
   /* Find the highest user token number, and whether 256, the POSIX
      preferred user token number for the error token, is used.  */
   max_user_token_number = 0;
-  for (i = 0; i < ntokens; ++i)
+  for (int i = 0; i < ntokens; ++i)
     {
-      symbol *this = symbols[i];
+      sym_content *this = symbols[i]->content;
       if (this->user_token_number != USER_NUMBER_UNDEFINED)
-	{
-	  if (this->user_token_number > max_user_token_number)
-	    max_user_token_number = this->user_token_number;
-	  if (this->user_token_number == 256)
-	    num_256_available_p = false;
-	}
+        {
+          if (this->user_token_number > max_user_token_number)
+            max_user_token_number = this->user_token_number;
+          if (this->user_token_number == 256)
+            num_256_available_p = false;
+        }
     }
 
   /* If 256 is not used, assign it to error, to follow POSIX.  */
   if (num_256_available_p
-      && errtoken->user_token_number == USER_NUMBER_UNDEFINED)
-    errtoken->user_token_number = 256;
+      && errtoken->content->user_token_number == USER_NUMBER_UNDEFINED)
+    errtoken->content->user_token_number = 256;
 
   /* Set the missing user numbers. */
   if (max_user_token_number < 256)
     max_user_token_number = 256;
 
-  for (i = 0; i < ntokens; ++i)
+  for (int i = 0; i < ntokens; ++i)
     {
-      symbol *this = symbols[i];
+      sym_content *this = symbols[i]->content;
       if (this->user_token_number == USER_NUMBER_UNDEFINED)
-	this->user_token_number = ++max_user_token_number;
+        {
+          IGNORE_TYPE_LIMITS_BEGIN
+          if (INT_ADD_WRAPV (max_user_token_number, 1, &max_user_token_number))
+            complain (NULL, fatal, _("token number too large"));
+          IGNORE_TYPE_LIMITS_END
+          this->user_token_number = max_user_token_number;
+        }
       if (this->user_token_number > max_user_token_number)
-	max_user_token_number = this->user_token_number;
+        max_user_token_number = this->user_token_number;
     }
 
   token_translations = xnmalloc (max_user_token_number + 1,
-				 sizeof *token_translations);
+                                 sizeof *token_translations);
 
-  /* Initialize all entries for literal tokens to 2, the internal
-     token number for $undefined, which represents all invalid inputs.
-     */
-  for (i = 0; i < max_user_token_number + 1; i++)
-    token_translations[i] = undeftoken->number;
-  symbols_do (symbol_translation_processor, NULL);
+  /* Initialize all entries for literal tokens to the internal token
+     number for $undefined, which represents all invalid inputs.  */
+  for (int i = 0; i < max_user_token_number + 1; ++i)
+    token_translations[i] = undeftoken->content->number;
+  for (int i = 0; symbols_sorted[i]; ++i)
+    symbol_translation (symbols_sorted[i]);
 }
 
 
@@ -879,17 +1088,14 @@
 void
 symbols_pack (void)
 {
-  symbols_do (symbol_check_alias_consistency_processor, NULL);
-
   symbols = xcalloc (nsyms, sizeof *symbols);
-  symbols_do (symbol_pack_processor, NULL);
+  for (int i = 0; symbols_sorted[i]; ++i)
+    symbol_pack (symbols_sorted[i]);
 
   /* 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)
+    for (int writei = 0, readi = 0; readi < nsyms_old; readi += 1)
       {
         if (symbols[readi] == NULL)
           {
@@ -899,9 +1105,7 @@
         else
           {
             symbols[writei] = symbols[readi];
-            symbols[writei]->number = writei;
-            if (symbols[writei]->alias)
-              symbols[writei]->alias->number = writei;
+            symbols[writei]->content->number = writei;
             writei += 1;
           }
       }
@@ -910,77 +1114,192 @@
 
   symbols_token_translations_init ();
 
-  if (startsymbol->class == unknown_sym)
-    fatal_at (startsymbol_location,
-	      _("the start symbol %s is undefined"),
-	      startsymbol->tag);
-  else if (startsymbol->class == token_sym)
-    fatal_at (startsymbol_location,
-	      _("the start symbol %s is a token"),
-	      startsymbol->tag);
+  if (startsymbol->content->class == unknown_sym)
+    complain (&startsymbol_loc, fatal,
+              _("the start symbol %s is undefined"),
+              startsymbol->tag);
+  else if (startsymbol->content->class == token_sym)
+    complain (&startsymbol_loc, fatal,
+              _("the start symbol %s is a token"),
+              startsymbol->tag);
+}
+
+/*---------------------------------.
+| Initialize relation graph nodes. |
+`---------------------------------*/
+
+static void
+init_prec_nodes (void)
+{
+  prec_nodes = xcalloc (nsyms, sizeof *prec_nodes);
+  for (int i = 0; i < nsyms; ++i)
+    {
+      prec_nodes[i] = xmalloc (sizeof *prec_nodes[i]);
+      symgraph *s = prec_nodes[i];
+      s->id = i;
+      s->succ = 0;
+      s->pred = 0;
+    }
+}
+
+/*----------------.
+| Create a link.  |
+`----------------*/
+
+static symgraphlink *
+symgraphlink_new (graphid id, symgraphlink *next)
+{
+  symgraphlink *l = xmalloc (sizeof *l);
+  l->id = id;
+  l->next = next;
+  return l;
 }
 
 
+/*------------------------------------------------------------------.
+| Register the second symbol of the precedence relation, and return |
+| whether this relation is new.  Use only in register_precedence.   |
+`------------------------------------------------------------------*/
+
+static bool
+register_precedence_second_symbol (symgraphlink **first, graphid sym)
+{
+  if (!*first || sym < (*first)->id)
+    *first = symgraphlink_new (sym, *first);
+  else
+    {
+      symgraphlink *slist = *first;
+
+      while (slist->next && slist->next->id <= sym)
+        slist = slist->next;
+
+      if (slist->id == sym)
+        /* Relation already present. */
+        return false;
+
+      slist->next = symgraphlink_new (sym, slist->next);
+    }
+  return true;
+}
+
+/*------------------------------------------------------------------.
+| Register a new relation between symbols as used. The first symbol |
+| has a greater precedence than the second one.                     |
+`------------------------------------------------------------------*/
+
+void
+register_precedence (graphid first, graphid snd)
+{
+  if (!prec_nodes)
+    init_prec_nodes ();
+  register_precedence_second_symbol (&(prec_nodes[first]->succ), snd);
+  register_precedence_second_symbol (&(prec_nodes[snd]->pred), first);
+}
+
+
+/*---------------------------------------.
+| Deep clear a linked / adjacency list). |
+`---------------------------------------*/
+
+static void
+linkedlist_free (symgraphlink *node)
+{
+  if (node)
+    {
+      while (node->next)
+        {
+          symgraphlink *tmp = node->next;
+          free (node);
+          node = tmp;
+        }
+      free (node);
+    }
+}
+
+/*----------------------------------------------.
+| Clear and destroy association tracking table. |
+`----------------------------------------------*/
+
+static void
+assoc_free (void)
+{
+  for (int i = 0; i < nsyms; ++i)
+    {
+      linkedlist_free (prec_nodes[i]->pred);
+      linkedlist_free (prec_nodes[i]->succ);
+      free (prec_nodes[i]);
+    }
+  free (prec_nodes);
+}
+
+/*---------------------------------------.
+| Initialize association tracking table. |
+`---------------------------------------*/
+
+static void
+init_assoc (void)
+{
+  used_assoc = xcalloc (nsyms, sizeof *used_assoc);
+  for (graphid i = 0; i < nsyms; ++i)
+    used_assoc[i] = false;
+}
+
+/*------------------------------------------------------------------.
+| Test if the associativity for the symbols is defined and useless. |
+`------------------------------------------------------------------*/
+
+static inline bool
+is_assoc_useless (symbol *s)
+{
+  return s
+      && s->content->assoc != undef_assoc
+      && s->content->assoc != precedence_assoc
+      && !used_assoc[s->content->number];
+}
+
+/*-------------------------------.
+| Register a used associativity. |
+`-------------------------------*/
+
+void
+register_assoc (graphid i, graphid j)
+{
+  if (!used_assoc)
+    init_assoc ();
+  used_assoc[i] = true;
+  used_assoc[j] = true;
+}
+
 /*--------------------------------------------------.
-| Set default tagged/tagless %destructor/%printer.  |
+| Print a warning for unused precedence relations.  |
 `--------------------------------------------------*/
 
 void
-default_tagged_destructor_set (code_props const *destructor)
+print_precedence_warnings (void)
 {
-  if (default_tagged_destructor.code)
+  if (!prec_nodes)
+    init_prec_nodes ();
+  if (!used_assoc)
+    init_assoc ();
+  for (int i = 0; i < nsyms; ++i)
     {
-      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"));
+      symbol *s = symbols[i];
+      if (s
+          && s->content->prec != 0
+          && !prec_nodes[i]->pred
+          && !prec_nodes[i]->succ)
+        {
+          if (is_assoc_useless (s))
+            complain (&s->content->prec_loc, Wprecedence,
+                      _("useless precedence and associativity for %s"), s->tag);
+          else if (s->content->assoc == precedence_assoc)
+            complain (&s->content->prec_loc, Wprecedence,
+                      _("useless precedence for %s"), s->tag);
+        }
+      else if (is_assoc_useless (s))
+        complain (&s->content->prec_loc, Wprecedence,
+                  _("useless associativity for %s, use %%precedence"), s->tag);
     }
-  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;
+  free (used_assoc);
+  assoc_free ();
 }
diff --git a/src/symtab.h b/src/symtab.h
index 7d8cf98..729f1fb 100644
--- a/src/symtab.h
+++ b/src/symtab.h
@@ -1,6 +1,6 @@
 /* Definitions for symtab.c and callers, part of Bison.
 
-   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2007, 2009-2012 Free
+   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2015, 2018-2019 Free
    Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -38,28 +38,87 @@
 /** Symbol classes.  */
 typedef enum
 {
-  unknown_sym,          /**< Undefined.  */
-  token_sym,		/**< Terminal. */
-  nterm_sym		/**< Non-terminal. */
+  /** Undefined.  */
+  unknown_sym,
+  /** Declared with %type: same as Undefined, but triggered a Wyacc if
+      applied to a terminal. */
+  pct_type_sym,
+  /** Terminal. */
+  token_sym,
+  /** Nonterminal. */
+  nterm_sym
 } symbol_class;
 
 
 /** Internal token numbers. */
 typedef int symbol_number;
-#define SYMBOL_NUMBER_MAXIMUM INT_MAX
+# define SYMBOL_NUMBER_MAXIMUM INT_MAX
 
 
 typedef struct symbol symbol;
+typedef struct sym_content sym_content;
 
-/* When extending this structure, be sure to complete
-   symbol_check_alias_consistency.  */
+/* Declaration status of a symbol.
+
+   First, it is "undeclared".  Then, if "undeclared" and used in a
+   %printer/%destructor, it is "used".  If not "declared" but used in
+   a rule, it is "needed".  Finally, if declared (via a rule for
+   nonterminals, or %token), it is "declared".
+
+   When status are checked at the end, "declared" symbols are fine,
+   "used" symbols trigger warnings, otherwise it's an error.  */
+
+typedef enum
+  {
+    /** Used in the input file for an unknown reason (error).  */
+    undeclared,
+    /** Used by %destructor/%printer but not defined (warning).  */
+    used,
+    /** Used in the grammar (rules) but not defined (error).  */
+    needed,
+    /** Defined with %type or %token (good).  */
+    declared,
+  } declaration_status;
+
+enum code_props_type
+  {
+    destructor = 0,
+    printer = 1,
+  };
+typedef enum code_props_type code_props_type;
+
+enum { CODE_PROPS_SIZE = 2 };
+
 struct symbol
 {
   /** The key, name of the symbol.  */
   uniqstr tag;
-  /** The location of its first occurrence.  */
+
+  /** The "defining" location.  */
   location location;
 
+  /** Whether \a location is about the first uses as left-hand side
+      symbol of a rule (true), or simply the first occurrence (e.g.,
+      in a %type, or as a rhs symbol of a rule).  The former type of
+      location is more natural in error messages.  This Boolean helps
+      moving from location of the first occurrence to first use as
+      lhs. */
+  bool location_of_lhs;
+
+  /** Points to the other in the symbol-string pair for an alias. */
+  symbol *alias;
+
+  /** Whether this symbol is the alias of another or not. */
+  bool is_alias;
+
+  /** All the info about the pointed symbol is there. */
+  sym_content *content;
+};
+
+struct sym_content
+{
+  symbol *symbol;
+
   /** Its \c \%type.
 
       Beware that this is the type_name as was entered by the user,
@@ -69,51 +128,36 @@
   uniqstr type_name;
 
   /** Its \c \%type's location.  */
-  location type_location;
+  location type_loc;
 
-  /** Any \c \%destructor declared specifically for this symbol.
+  /** Any \c \%destructor (resp. \%printer) declared specificially for this
+      symbol.
 
-      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;
+      Access this field only through <tt>symbol</tt>'s interface functions. For
+      example, if <tt>symbol::destructor = NULL</tt> (resp. <tt>symbol::printer
+      = NULL</tt>), a default \c \%destructor (resp. \%printer) or a per-type
+      \c symbol_destructor_printer_get will compute the correct one. */
+  code_props props[CODE_PROPS_SIZE];
 
   symbol_number number;
-  location prec_location;
+  location prec_loc;
   int prec;
   assoc assoc;
+
+  /** The user specified token number.
+
+      E.g., %token FOO 42.*/
   int user_token_number;
 
-  /* 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;
+  declaration_status status;
 };
 
 /** Undefined user number.  */
-#define USER_NUMBER_UNDEFINED -1
-
-/* `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_HAS_STRING_ALIAS.  */
-#define USER_NUMBER_HAS_STRING_ALIAS -9991
+# define USER_NUMBER_UNDEFINED -1
 
 /* Undefined internal token number.  */
-#define NUMBER_UNDEFINED (-1)
-
-/** Print a symbol (for debugging). */
-void symbol_print (symbol *s, FILE *f);
+# define NUMBER_UNDEFINED (-1)
 
 /** Fetch (or create) the symbol associated to KEY.  */
 symbol *symbol_from_uniqstr (const uniqstr key, location loc);
@@ -126,48 +170,74 @@
    Its name cannot conflict with the user's names.  */
 symbol *dummy_symbol_get (location loc);
 
+
+/*--------------------.
+| Methods on symbol.  |
+`--------------------*/
+
+/** Print a symbol (for debugging). */
+void symbol_print (symbol const *s, FILE *f);
+
 /** Is this a dummy nonterminal?  */
 bool symbol_is_dummy (const symbol *sym);
 
+/** The name of the code_props type: "\%destructor" or "\%printer".  */
+char const *code_props_type_string (code_props_type kind);
+
+/** The name of the symbol that can be used as an identifier.
+ ** Consider the alias if needed.
+ ** Return 0 if there is none (e.g., the symbol is only defined as
+ ** a string). */
+uniqstr symbol_id_get (symbol const *sym);
+
 /**
  * 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);
 
+/**
+ * This symbol is used as the lhs of a rule.  Record this location
+ * as definition point, if not already done.
+ */
+void symbol_location_as_lhs_set (symbol *sym, 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 \c destructor associated with \c sym.  */
-void symbol_destructor_set (symbol *sym, code_props const *destructor);
+/** Set the \c \%destructor or \c \%printer associated with \c sym.  */
+void symbol_code_props_set (symbol *sym, code_props_type kind,
+                            code_props const *destructor);
 
-/** 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);
+/** Get the computed \c \%destructor or \c %printer for \c sym, which was
+    initialized with \c code_props_none_init if there's no \c \%destructor or
+    \c %printer.  */
+code_props *symbol_code_props_get (symbol *sym, code_props_type kind);
 
-/** Set the \c printer associated with \c sym.  */
-void symbol_printer_set (symbol *sym, code_props const *printer);
+/** Set the \c precedence associated with \c sym.
 
-/** 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.  */
+    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 \c class associated with \c sym.  */
+/** Set the \c class associated with \c sym.
+
+    Whether \c declaring means whether this class definition comes
+    from %nterm or %token (but not %type, prec/assoc, etc.).  */
 void symbol_class_set (symbol *sym, symbol_class class, location loc,
-		       bool declaring);
+                       bool declaring);
 
 /** Set the \c user_token_number associated with \c sym.  */
 void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
 
 
+
+/*------------------.
+| Special symbols.  |
+`------------------*/
+
 /** The error token. */
 extern symbol *errtoken;
 /** The token for unknown tokens.  */
@@ -182,8 +252,63 @@
 /** The user start symbol. */
 extern symbol *startsymbol;
 /** The location of the \c \%start declaration.  */
-extern location startsymbol_location;
+extern location startsymbol_loc;
 
+/** Whether a symbol declared with a type tag.  */
+extern bool tag_seen;
+
+
+/*-------------------.
+| Symbol Relations.  |
+`-------------------*/
+
+/* The symbol relations are represented by a directed graph. */
+
+/* The id of a node */
+typedef int graphid;
+
+typedef struct symgraphlink symgraphlink;
+
+struct symgraphlink
+{
+  /** The second \c symbol or group of a precedence relation.
+   * See \c symgraph. */
+  graphid id;
+
+  symgraphlink *next;
+};
+
+/* Symbol precedence graph, to store the used precedence relations between
+ * symbols. */
+
+typedef struct symgraph symgraph;
+
+struct symgraph
+{
+  /** Identifier for the node: equal to the number of the symbol. */
+  graphid id;
+
+  /** The list of related symbols that have a smaller precedence. */
+  symgraphlink *succ;
+
+  /** The list of related symbols that have a greater precedence. */
+  symgraphlink *pred;
+};
+
+/** Register a new precedence relation as used. */
+
+void register_precedence (graphid first, graphid snd);
+
+/** Print a warning for each symbol whose precedence and/or associativity
+ * is useless. */
+
+void print_precedence_warnings (void);
+
+/*----------------------.
+| Symbol associativity  |
+`----------------------*/
+
+void register_assoc (graphid i, graphid j);
 
 /*-----------------.
 | Semantic types.  |
@@ -197,31 +322,37 @@
   /** 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;
+  /** The location of its first occurrence.  */
+  location location;
+
+  /** Its status : "undeclared", "used" or "declared".
+      It cannot be "needed".  */
+  declaration_status status;
+
+  /** Any \c %destructor and %printer declared for this
+      semantic type.  */
+  code_props props[CODE_PROPS_SIZE];
+
 } semantic_type;
 
 /** Fetch (or create) the semantic type associated to KEY.  */
-semantic_type *semantic_type_from_uniqstr (const uniqstr key);
+semantic_type *semantic_type_from_uniqstr (const uniqstr key,
+                                           const location *loc);
 
 /** Fetch (or create) the semantic type associated to KEY.  */
-semantic_type *semantic_type_get (const char *key);
+semantic_type *semantic_type_get (const char *key, const location *loc);
 
-/** 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);
+/** Set the \c destructor or \c printer associated with \c type.  */
+void semantic_type_code_props_set (semantic_type *type,
+                                   code_props_type kind,
+                                   code_props const *code);
 
 /*----------------------------------.
 | Symbol and semantic type tables.  |
 `----------------------------------*/
 
-/** Create the symbol and semantic type tables.  */
+/** Create the symbol and semantic type tables, and the built-in
+    symbols.  */
 void symbols_new (void);
 
 /** Free all the memory allocated for symbols and semantic types.  */
@@ -238,19 +369,4 @@
    #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 35ff876..35d39f4 100644
--- a/src/system.h
+++ b/src/system.h
@@ -1,6 +1,7 @@
 /* System-dependent definitions for Bison.
 
-   Copyright (C) 2000-2007, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2007, 2009-2015, 2018-2019 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
@@ -18,7 +19,7 @@
 #ifndef BISON_SYSTEM_H
 # define BISON_SYSTEM_H
 
-/* flex 2.5.31 gratutiously defines macros like INT8_MIN.  But this
+/* flex 2.5.31 gratuitously 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>.  */
@@ -38,13 +39,23 @@
 # include <stddef.h>
 # include <stdlib.h>
 # include <string.h>
+
+# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
+# define STREQ(L, R)  (strcmp(L, R) == 0)
+# define STRNEQ(L, R) (!STREQ(L, R))
+
+/* Just like strncmp, but the second argument must be a literal string
+   and you don't specify the length.  */
+# define STRNCMP_LIT(S, Literal)                        \
+  strncmp (S, "" Literal "", sizeof (Literal) - 1)
+
+/* Whether Literal is a prefix of S.  */
+# define STRPREFIX_LIT(Literal, S)              \
+  (STRNCMP_LIT (S, Literal) == 0)
+
 # include <unistd.h>
 # include <inttypes.h>
 
-#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.  */
@@ -63,6 +74,19 @@
 # include <xalloc.h>
 
 
+/* See https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html. */
+# if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ < 5
+#  define IGNORE_TYPE_LIMITS_BEGIN \
+     _Pragma ("GCC diagnostic push") \
+     _Pragma ("GCC diagnostic ignored \"-Wtype-limits\"")
+#  define IGNORE_TYPE_LIMITS_END \
+     _Pragma ("GCC diagnostic pop")
+# else
+#  define IGNORE_TYPE_LIMITS_BEGIN
+#  define IGNORE_TYPE_LIMITS_END
+# endif
+
+
 /*-----------------.
 | GCC extensions.  |
 `-----------------*/
@@ -89,7 +113,7 @@
 #  endif
 # endif
 
-/* The __-protected variants of `format' and `printf' attributes
+/* 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
@@ -158,7 +182,9 @@
 # define obstack_chunk_free  free
 # include <obstack.h>
 
-# define obstack_sgrow(Obs, Str)                \
+/* String-grow: append Str to Obs.  */
+
+# define obstack_sgrow(Obs, Str) \
   obstack_grow (Obs, Str, strlen (Str))
 
 /* Output Str escaped for our postprocessing (i.e., escape M4 special
@@ -168,15 +194,15 @@
 
 # define obstack_escape(Obs, Str)                       \
   do {                                                  \
-    char const *p;                                      \
-    for (p = Str; *p; p++)                              \
-      switch (*p)                                       \
+    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;    \
+        default:  obstack_1grow (Obs, *p__ ); break;    \
         }                                               \
   } while (0)
 
@@ -204,7 +230,7 @@
 
 /* Append the ending 0, finish Obs, and return the string.  */
 
-# define obstack_finish0(Obs)                           \
+# define obstack_finish0(Obs)                                   \
   (obstack_1grow (Obs, '\0'), (char *) obstack_finish (Obs))
 
 
@@ -236,14 +262,4 @@
       }                                         \
   } while (0)
 
-
-/*---------------------------------------------.
-| Debugging memory allocation (must be last).  |
-`---------------------------------------------*/
-
-# if WITH_DMALLOC
-#  define DMALLOC_FUNC_CHECK
-#  include <dmalloc.h>
-# endif /* WITH_DMALLOC */
-
 #endif  /* ! BISON_SYSTEM_H */
diff --git a/src/tables.c b/src/tables.c
index eb827b7..ec89b3e 100644
--- a/src/tables.c
+++ b/src/tables.c
@@ -1,7 +1,7 @@
 /* Output the generated parsing program for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000-2006, 2009-2012 Free
-   Software Foundation, Inc.
+   Copyright (C) 1984, 1986, 1989, 1992, 2000-2006, 2009-2015, 2018-2019
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,6 +21,7 @@
 #include <config.h>
 #include "system.h"
 
+#include <bitset.h>
 #include <bitsetv.h>
 
 #include "complain.h"
@@ -35,7 +36,7 @@
 #include "tables.h"
 
 /* Several tables are indexed both by state and nonterminal numbers.
-   We call such an index a `vector'; i.e., a vector is either a state
+   We call such an index a 'vector'; i.e., a vector is either a state
    or a nonterminal number.
 
    Of course vector_number_t ought to be wide enough to contain
@@ -83,25 +84,25 @@
 
 static base_number **froms;
 static base_number **tos;
-static unsigned int **conflict_tos;
-static int *tally;
+static int **conflict_tos;
+static size_t *tally;
 static base_number *width;
 
 
 /* For a given state, N = ACTROW[SYMBOL]:
 
-   If N = 0, stands for `run the default action'.
-   If N = MIN, stands for `raise a syntax error'.
-   If N > 0, stands for `shift SYMBOL and go to n'.
-   If N < 0, stands for `reduce -N'.  */
+   If N = 0, stands for 'run the default action'.
+   If N = MIN, stands for 'raise a syntax error'.
+   If N > 0, stands for 'shift SYMBOL and go to n'.
+   If N < 0, stands for 'reduce -N'.  */
 typedef int action_number;
 #define ACTION_NUMBER_MINIMUM INT_MIN
 
 static action_number *actrow;
 
 /* FROMS and TOS are reordered to be compressed.  ORDER[VECTOR] is the
-   new vector number of VECTOR.  We skip `empty' vectors (i.e.,
-   TALLY[VECTOR] = 0), and call these `entries'.  */
+   new vector number of VECTOR.  We skip 'empty' vectors (i.e.,
+   TALLY[VECTOR] = 0), and call these 'entries'.  */
 static vector_number *order;
 static int nentries;
 
@@ -110,11 +111,13 @@
    computation equals to BASE_MINIMUM, later mapped to BASE_NINF to
    keep parser tables small.  */
 base_number base_ninf = 0;
-static base_number *pos = NULL;
+/* Bitset representing an integer set in the range
+   -nstates..table_size (as an upper bound) */
+static bitset pos_set = NULL;
 
-static unsigned int *conflrow;
-unsigned int *conflict_table;
-unsigned int *conflict_list;
+static int *conflrow;
+int *conflict_table;
+int *conflict_list;
 int conflict_list_cnt;
 static int conflict_list_free;
 
@@ -135,11 +138,11 @@
 state_number *yydefgoto;
 rule_number *yydefact;
 
-/*----------------------------------------------------------------.
-| If TABLE (and CHECK) appear to be small to be addressed at      |
-| DESIRED, grow them.  Note that TABLE[DESIRED] is to be used, so |
-| the desired size is at least DESIRED + 1.                       |
-`----------------------------------------------------------------*/
+/*-------------------------------------------------------------------.
+| If TABLE, CONFLICT_TABLE, and CHECK are too small to be addressed  |
+| at DESIRED, grow them.  TABLE[DESIRED] can be used, so the desired |
+| size is at least DESIRED + 1.                                      |
+`-------------------------------------------------------------------*/
 
 static void
 table_grow (int desired)
@@ -150,20 +153,23 @@
     table_size *= 2;
 
   if (trace_flag & trace_resource)
-    fprintf (stderr, "growing table and check from: %d to %d\n",
-	     old_size, table_size);
+    fprintf (stderr, "growing tables from %d to %d\n",
+             old_size, table_size);
 
   table = xnrealloc (table, table_size, sizeof *table);
-  conflict_table = xnrealloc (conflict_table, table_size,
-			      sizeof *conflict_table);
-  check = xnrealloc (check, table_size, sizeof *check);
+  memset (table + old_size, 0,
+          sizeof *table * (table_size - old_size));
 
-  for (/* Nothing. */; old_size < table_size; ++old_size)
-    {
-      table[old_size] = 0;
-      conflict_table[old_size] = 0;
-      check[old_size] = -1;
-    }
+  conflict_table = xnrealloc (conflict_table, table_size,
+                              sizeof *conflict_table);
+  memset (conflict_table + old_size, 0,
+          sizeof *conflict_table * (table_size - old_size));
+
+  check = xnrealloc (check, table_size, sizeof *check);
+  for (int i = old_size; i < table_size; ++i)
+    check[i] = -1;
+
+  bitset_resize (pos_set, table_size + nstates);
 }
 
 
@@ -171,46 +177,44 @@
 
 /*-------------------------------------------------------------------.
 | For GLR parsers, for each conflicted token in S, as indicated      |
-| by non-zero entries in CONFLROW, create a list of possible	     |
-| reductions that are alternatives to the shift or reduction	     |
+| by non-zero entries in CONFLROW, create a list of possible         |
+| reductions that are alternatives to the shift or reduction         |
 | currently recorded for that token in S.  Store the alternative     |
-| reductions followed by a 0 in CONFLICT_LIST, updating		     |
+| reductions followed by a 0 in CONFLICT_LIST, updating              |
 | CONFLICT_LIST_CNT, and storing an index to the start of the list   |
-| back into CONFLROW.						     |
+| back into CONFLROW.                                                |
 `-------------------------------------------------------------------*/
 
 static void
 conflict_row (state *s)
 {
-  int i, j;
-  reductions *reds = s->reductions;
-
   if (!nondeterministic_parser)
     return;
 
-  for (j = 0; j < ntokens; j += 1)
+  const reductions *reds = s->reductions;
+  for (state_number j = 0; j < ntokens; j += 1)
     if (conflrow[j])
       {
-	conflrow[j] = conflict_list_cnt;
+        conflrow[j] = conflict_list_cnt;
 
-	/* 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->lookahead_tokens[i], j)
-	      && (actrow[j]
-		  != rule_number_as_item_number (reds->rules[i]->number)))
-	    {
-	      aver (0 < conflict_list_free);
-	      conflict_list[conflict_list_cnt] = reds->rules[i]->number + 1;
-	      conflict_list_cnt += 1;
-	      conflict_list_free -= 1;
-	    }
+        /* Find all reductions for token J, and record all that do not
+           match ACTROW[J].  */
+        for (int i = 0; i < reds->num; i += 1)
+          if (bitset_test (reds->lookahead_tokens[i], j)
+              && (actrow[j]
+                  != rule_number_as_item_number (reds->rules[i]->number)))
+            {
+              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.  */
-	aver (0 < conflict_list_free);
-	conflict_list[conflict_list_cnt] = 0;
-	conflict_list_cnt += 1;
-	conflict_list_free -= 1;
+        /* Leave a 0 at the end.  */
+        aver (0 < conflict_list_free);
+        conflict_list[conflict_list_cnt] = 0;
+        conflict_list_cnt += 1;
+        conflict_list_free -= 1;
       }
 }
 
@@ -221,9 +225,9 @@
 | 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       |
-| ACTION_NUMBER_MINIMUM, a very negative number, means this	    |
-| situation is an error.  The parser recognizes this value	    |
-| specially.							    |
+| ACTION_NUMBER_MINIMUM, a very negative number, means this         |
+| situation is an error.  The parser recognizes this value          |
+| specially.                                                        |
 |                                                                   |
 | This is where conflicts are resolved.  The loop over lookahead    |
 | rules considered lower-numbered rules last, and the last rule     |
@@ -238,69 +242,69 @@
 static rule *
 action_row (state *s)
 {
-  int i;
-  rule *default_reduction = NULL;
-  reductions *reds = s->reductions;
-  transitions *trans = s->transitions;
-  errs *errp = s->errs;
-  /* Set to nonzero to inhibit having any default reduction.  */
-  bool nodefault = false;
-  bool conflicted = false;
-
-  for (i = 0; i < ntokens; i++)
+  for (state_number i = 0; i < ntokens; i++)
     actrow[i] = conflrow[i] = 0;
 
+  reductions *reds = s->reductions;
+  bool conflicted = false;
   if (reds->lookahead_tokens)
-    {
-      int j;
-      bitset_iterator biter;
-      /* loop over all the rules available here which require
-	 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->lookahead_tokens[i], j, 0)
-	{
-	  /* and record this rule as the rule to use if that
-	     token follows.  */
-	  if (actrow[j] != 0)
-	    {
-	      conflicted = true;
-	      conflrow[j] = 1;
-	    }
-	  actrow[j] = rule_number_as_item_number (reds->rules[i]->number);
-	}
-    }
+    /* loop over all the rules available here which require
+       lookahead (in reverse order to give precedence to the first
+       rule) */
+    for (int i = reds->num - 1; 0 <= i; --i)
+      /* and find each token which the rule finds acceptable
+         to come next */
+      {
+        bitset_iterator biter;
+        int j;
+        BITSET_FOR_EACH (biter, reds->lookahead_tokens[i], j, 0)
+          {
+            /* and record this rule as the rule to use if that
+               token follows.  */
+            if (actrow[j] != 0)
+              {
+                conflicted = true;
+                conflrow[j] = 1;
+              }
+            actrow[j] = rule_number_as_item_number (reds->rules[i]->number);
+          }
+      }
 
   /* Now see which tokens are allowed for shifts in this state.  For
      them, record the shift as the thing to do.  So shift is preferred
      to reduce.  */
-  FOR_EACH_SHIFT (trans, i)
-    {
-      symbol_number sym = TRANSITION_SYMBOL (trans, i);
-      state *shift_state = trans->states[i];
+  transitions *trans = s->transitions;
+  /* Set to nonzero to inhibit having any default reduction.  */
+  bool nodefault = false;
+  {
+    int i;
+    FOR_EACH_SHIFT (trans, i)
+      {
+        symbol_number sym = TRANSITION_SYMBOL (trans, i);
+        state *shift_state = trans->states[i];
 
-      if (actrow[sym] != 0)
-	{
-	  conflicted = true;
-	  conflrow[sym] = 1;
-	}
-      actrow[sym] = state_number_as_int (shift_state->number);
+        if (actrow[sym] != 0)
+          {
+            conflicted = true;
+            conflrow[sym] = 1;
+          }
+        actrow[sym] = state_number_as_int (shift_state->number);
 
-      /* Do not use any default reduction if there is a shift for
-	 error */
-      if (sym == errtoken->number)
-	nodefault = true;
-    }
+        /* Do not use any default reduction if there is a shift for
+           error */
+        if (sym == errtoken->content->number)
+          nodefault = true;
+      }
+  }
 
   /* See which tokens are an explicit error in this state (due to
      %nonassoc).  For them, record ACTION_NUMBER_MINIMUM as the
      action.  */
-  for (i = 0; i < errp->num; i++)
+  errs *errp = s->errs;
+  for (int i = 0; i < errp->num; i++)
     {
       symbol *sym = errp->symbols[i];
-      actrow[sym->number] = ACTION_NUMBER_MINIMUM;
+      actrow[sym->content->number] = ACTION_NUMBER_MINIMUM;
     }
 
   /* Turn off default reductions where requested by the user.  See
@@ -308,64 +312,59 @@
      labeled as consistent.  */
   {
     char *default_reductions =
-      muscle_percent_define_get ("lr.default-reductions");
-    if (0 != strcmp (default_reductions, "most") && !s->consistent)
+      muscle_percent_define_get ("lr.default-reduction");
+    if (STRNEQ (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.  */
-
+  rule *default_reduction = NULL;
   if (reds->num >= 1 && !nodefault)
     {
       if (s->consistent)
-	default_reduction = reds->rules[0];
+        default_reduction = reds->rules[0];
       else
-	{
-	  int max = 0;
-	  for (i = 0; i < reds->num; i++)
-	    {
-	      int count = 0;
-	      rule *r = reds->rules[i];
-	      symbol_number j;
+        {
+          int max = 0;
+          for (int i = 0; i < reds->num; i++)
+            {
+              int count = 0;
+              rule *r = reds->rules[i];
+              for (symbol_number j = 0; j < ntokens; j++)
+                if (actrow[j] == rule_number_as_item_number (r->number))
+                  count++;
 
-	      for (j = 0; j < ntokens; j++)
-		if (actrow[j] == rule_number_as_item_number (r->number))
-		  count++;
+              if (count > max)
+                {
+                  max = count;
+                  default_reduction = r;
+                }
+            }
 
-	      if (count > max)
-		{
-		  max = count;
-		  default_reduction = r;
-		}
-	    }
+          /* GLR parsers need space for conflict lists, so we can't
+             default conflicted entries.  For non-conflicted entries
+             or as long as we are not building a GLR parser,
+             actions that match the default are replaced with zero,
+             which means "use the default". */
 
-	  /* GLR parsers need space for conflict lists, so we can't
-	     default conflicted entries.  For non-conflicted entries
-	     or as long as we are not building a GLR parser,
-	     actions that match the default are replaced with zero,
-	     which means "use the default". */
-
-	  if (max > 0)
-	    {
-	      int j;
-	      for (j = 0; j < ntokens; j++)
-		if (actrow[j]
-                    == rule_number_as_item_number (default_reduction->number)
-		    && ! (nondeterministic_parser && conflrow[j]))
-		  actrow[j] = 0;
-	    }
-	}
+          if (0 < max)
+            for (symbol_number j = 0; j < ntokens; j++)
+              if (actrow[j]
+                  == rule_number_as_item_number (default_reduction->number)
+                  && ! (nondeterministic_parser && conflrow[j]))
+                actrow[j] = 0;
+        }
     }
 
   /* If have no default reduction, the default is an error.
      So replace any action which says "error" with "use default".  */
 
   if (!default_reduction)
-    for (i = 0; i < ntokens; i++)
+    for (symbol_number i = 0; i < ntokens; i++)
       if (actrow[i] == ACTION_NUMBER_MINIMUM)
-	actrow[i] = 0;
+        actrow[i] = 0;
 
   if (conflicted)
     conflict_row (s);
@@ -381,40 +380,33 @@
 static void
 save_row (state_number s)
 {
-  symbol_number i;
-  int count;
-  base_number *sp;
-  base_number *sp1;
-  base_number *sp2;
-  unsigned int *sp3;
-
   /* Number of non default actions in S.  */
-  count = 0;
-  for (i = 0; i < ntokens; i++)
+  size_t count = 0;
+  for (symbol_number i = 0; i < ntokens; i++)
     if (actrow[i] != 0)
       count++;
 
-  if (count == 0)
-    return;
+  if (count)
+    {
+      /* Allocate non defaulted actions.  */
+      base_number *sp1 = froms[s] = xnmalloc (count, sizeof *sp1);
+      base_number *sp2 = tos[s] = xnmalloc (count, sizeof *sp2);
+      int *sp3 = conflict_tos[s] =
+        nondeterministic_parser ? xnmalloc (count, sizeof *sp3) : NULL;
 
-  /* Allocate non defaulted actions.  */
-  froms[s] = sp = sp1 = xnmalloc (count, sizeof *sp1);
-  tos[s] = sp2 = xnmalloc (count, sizeof *sp2);
-  conflict_tos[s] = sp3 =
-    nondeterministic_parser ? xnmalloc (count, sizeof *sp3) : NULL;
+      /* Store non defaulted actions.  */
+      for (symbol_number i = 0; i < ntokens; i++)
+        if (actrow[i] != 0)
+          {
+            *sp1++ = i;
+            *sp2++ = actrow[i];
+            if (nondeterministic_parser)
+              *sp3++ = conflrow[i];
+          }
 
-  /* Store non defaulted actions.  */
-  for (i = 0; i < ntokens; i++)
-    if (actrow[i] != 0)
-      {
-	*sp1++ = i;
-	*sp2++ = actrow[i];
-	if (nondeterministic_parser)
-	  *sp3++ = conflrow[i];
-      }
-
-  tally[s] = count;
-  width[s] = sp1[-1] - sp[0] + 1;
+      tally[s] = count;
+      width[s] = sp1[-1] - froms[s][0] + 1;
+    }
 }
 
 
@@ -429,10 +421,6 @@
 static void
 token_actions (void)
 {
-  state_number i;
-  symbol_number j;
-  rule_number r;
-
   int nconflict = nondeterministic_parser ? conflicts_total_count () : 0;
 
   yydefact = xnmalloc (nstates, sizeof *yydefact);
@@ -446,28 +434,27 @@
 
   /* Find the rules which are reduced.  */
   if (!nondeterministic_parser)
-    for (r = 0; r < nrules; ++r)
+    for (rule_number r = 0; r < nrules; ++r)
       rules[r].useful = false;
 
-  for (i = 0; i < nstates; ++i)
+  for (state_number i = 0; i < nstates; ++i)
     {
       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
-	 really reduced, and which are not because of SR or RR
-	 conflicts.  */
+         really reduced, and which are not because of SR or RR
+         conflicts.  */
       if (!nondeterministic_parser)
-	{
-	  for (j = 0; j < ntokens; ++j)
-	    if (actrow[j] < 0 && actrow[j] != ACTION_NUMBER_MINIMUM)
-	      rules[item_number_as_rule_number (actrow[j])].useful = true;
-	  if (yydefact[i])
-	    rules[yydefact[i] - 1].useful = true;
-	}
+        {
+          for (symbol_number j = 0; j < ntokens; ++j)
+            if (actrow[j] < 0 && actrow[j] != ACTION_NUMBER_MINIMUM)
+              rules[item_number_as_rule_number (actrow[j])].useful = true;
+          if (yydefact[i])
+            rules[yydefact[i] - 1].useful = true;
+        }
     }
-
   free (actrow);
   free (conflrow);
 }
@@ -485,73 +472,65 @@
 static void
 save_column (symbol_number sym, state_number default_state)
 {
-  goto_number i;
-  base_number *sp;
-  base_number *sp1;
-  base_number *sp2;
-  int count;
-  vector_number symno = symbol_number_to_vector_number (sym);
-
-  goto_number begin = goto_map[sym - ntokens];
-  goto_number end = goto_map[sym - ntokens + 1];
+  const goto_number begin = goto_map[sym - ntokens];
+  const goto_number end = goto_map[sym - ntokens + 1];
 
   /* Number of non default GOTO.  */
-  count = 0;
-  for (i = begin; i < end; i++)
+  size_t count = 0;
+  for (goto_number i = begin; i < end; i++)
     if (to_state[i] != default_state)
       count++;
 
-  if (count == 0)
-    return;
+  if (count)
+    {
+      /* Allocate room for non defaulted gotos.  */
+      vector_number symno = symbol_number_to_vector_number (sym);
+      base_number *sp1 = froms[symno] = xnmalloc (count, sizeof *sp1);
+      base_number *sp2 = tos[symno] = xnmalloc (count, sizeof *sp2);
 
-  /* Allocate room for non defaulted gotos.  */
-  froms[symno] = sp = sp1 = xnmalloc (count, sizeof *sp1);
-  tos[symno] = sp2 = xnmalloc (count, sizeof *sp2);
+      /* Store the state numbers of the non defaulted gotos.  */
+      for (goto_number i = begin; i < end; i++)
+        if (to_state[i] != default_state)
+          {
+            *sp1++ = from_state[i];
+            *sp2++ = to_state[i];
+          }
 
-  /* Store the state numbers of the non defaulted gotos.  */
-  for (i = begin; i < end; i++)
-    if (to_state[i] != default_state)
-      {
-	*sp1++ = from_state[i];
-	*sp2++ = to_state[i];
-      }
-
-  tally[symno] = count;
-  width[symno] = sp1[-1] - sp[0] + 1;
+      tally[symno] = count;
+      width[symno] = sp1[-1] - froms[symno][0] + 1;
+    }
 }
 
 
-/*-------------------------------------------------------------.
-| Return `the' most common destination GOTO on SYM (a nterm).  |
-`-------------------------------------------------------------*/
+/*----------------------------------------------------------------.
+| The default state for SYM: the state which is 'the' most common |
+| GOTO destination on SYM (an nterm).                             |
+`----------------------------------------------------------------*/
 
 static state_number
 default_goto (symbol_number sym, size_t state_count[])
 {
-  state_number s;
-  goto_number i;
-  goto_number m = goto_map[sym - ntokens];
-  goto_number n = goto_map[sym - ntokens + 1];
-  state_number default_state = -1;
-  size_t max = 0;
+  const goto_number begin = goto_map[sym - ntokens];
+  const goto_number end = goto_map[sym - ntokens + 1];
+  state_number res = -1;
 
-  if (m == n)
-    return -1;
+  if (begin != end)
+    {
+      for (state_number s = 0; s < nstates; s++)
+        state_count[s] = 0;
 
-  for (s = 0; s < nstates; s++)
-    state_count[s] = 0;
+      for (goto_number i = begin; i < end; i++)
+        state_count[to_state[i]]++;
 
-  for (i = m; i < n; i++)
-    state_count[to_state[i]]++;
-
-  for (s = 0; s < nstates; s++)
-    if (state_count[s] > max)
-      {
-	max = state_count[s];
-	default_state = s;
-      }
-
-  return default_state;
+      size_t max = 0;
+      for (state_number s = 0; s < nstates; s++)
+        if (max < state_count[s])
+          {
+            max = state_count[s];
+            res = s;
+          }
+    }
+  return res;
 }
 
 
@@ -567,13 +546,12 @@
 static void
 goto_actions (void)
 {
-  symbol_number i;
   size_t *state_count = xnmalloc (nstates, sizeof *state_count);
   yydefgoto = xnmalloc (nvars, sizeof *yydefgoto);
 
   /* For a given nterm I, STATE_COUNT[S] is the number of times there
      is a GOTO to S on I.  */
-  for (i = ntokens; i < nsyms; ++i)
+  for (symbol_number i = ntokens; i < nsyms; ++i)
     {
       state_number default_state = default_goto (i, state_count);
       save_column (i, default_state);
@@ -591,34 +569,31 @@
 static void
 sort_actions (void)
 {
-  int i;
-
   nentries = 0;
 
-  for (i = 0; i < nvectors; i++)
-    if (tally[i] > 0)
+  for (int i = 0; i < nvectors; i++)
+    if (0 < tally[i])
       {
-	int k;
-	int t = tally[i];
-	int w = width[i];
-	int j = nentries - 1;
+        const size_t t = tally[i];
+        const int w = width[i];
+        int j = nentries - 1;
 
-	while (j >= 0 && (width[order[j]] < w))
-	  j--;
+        while (0 <= j && width[order[j]] < w)
+          j--;
 
-	while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
-	  j--;
+        while (0 <= j && width[order[j]] == w && tally[order[j]] < t)
+          j--;
 
-	for (k = nentries - 1; k > j; k--)
-	  order[k + 1] = order[k];
+        for (int k = nentries - 1; k > j; k--)
+          order[k + 1] = order[k];
 
-	order[j + 1] = i;
-	nentries++;
+        order[j + 1] = i;
+        nentries++;
       }
 }
 
 
-/* If VECTOR is a state which actions (reflected by FROMS, TOS, TALLY
+/* If VECTOR is a state whose actions (reflected by FROMS, TOS, TALLY
    and WIDTH of VECTOR) are common to a previous state, return this
    state number.
 
@@ -628,46 +603,38 @@
 matching_state (vector_number vector)
 {
   vector_number i = order[vector];
-  int t;
-  int w;
-  int prev;
-
   /* If VECTOR is a nterm, return -1.  */
-  if (nstates <= i)
-    return -1;
-
-  t = tally[i];
-  w = width[i];
-
-  /* If VECTOR has GLR conflicts, return -1 */
-  if (conflict_tos[i] != NULL)
+  if (i < nstates)
     {
-      int j;
-      for (j = 0; j < t; j += 1)
-	if (conflict_tos[i][j] != 0)
-	  return -1;
+      size_t t = tally[i];
+      int w = width[i];
+
+      /* If VECTOR has GLR conflicts, return -1 */
+      if (conflict_tos[i] != NULL)
+        for (int j = 0; j < t; j += 1)
+          if (conflict_tos[i][j] != 0)
+            return -1;
+
+      for (int prev = vector - 1; 0 <= prev; prev--)
+        {
+          vector_number j = order[prev];
+          /* Given how ORDER was computed, if the WIDTH or TALLY is
+             different, there cannot be a matching state.  */
+          if (width[j] != w || tally[j] != t)
+            return -1;
+          else
+            {
+              bool match = true;
+              for (int k = 0; match && k < t; k++)
+                if (tos[j][k] != tos[i][k]
+                    || froms[j][k] != froms[i][k]
+                    || (conflict_tos[j] != NULL && conflict_tos[j][k] != 0))
+                  match = false;
+              if (match)
+                return j;
+            }
+        }
     }
-
-  for (prev = vector - 1; prev >= 0; prev--)
-    {
-      vector_number j = order[prev];
-      int k;
-      int match = 1;
-
-      /* Given how ORDER was computed, if the WIDTH or TALLY is
-	 different, there cannot be a matching state.  */
-      if (width[j] != w || tally[j] != t)
-	return -1;
-
-      for (k = 0; match && k < t; k++)
-	if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k]
-	    || (conflict_tos[j] != NULL && conflict_tos[j][k] != 0))
-	  match = 0;
-
-      if (match)
-	return j;
-    }
-
   return -1;
 }
 
@@ -676,56 +643,53 @@
 pack_vector (vector_number vector)
 {
   vector_number i = order[vector];
-  int j;
-  int t = tally[i];
-  int loc = 0;
+  size_t t = tally[i];
   base_number *from = froms[i];
   base_number *to = tos[i];
-  unsigned int *conflict_to = conflict_tos[i];
+  int *conflict_to = conflict_tos[i];
 
   aver (t != 0);
 
-  for (j = lowzero - from[0]; ; j++)
+  for (base_number res = lowzero - from[0]; ; res++)
     {
-      int k;
       bool ok = true;
+      aver (res < table_size);
+      {
+        for (int k = 0; ok && k < t; k++)
+          {
+            int loc = res + state_number_as_int (from[k]);
+            if (table_size <= loc)
+              table_grow (loc);
 
-      aver (j < table_size);
+            if (table[loc] != 0)
+              ok = false;
+          }
 
-      for (k = 0; ok && k < t; k++)
-	{
-	  loc = j + state_number_as_int (from[k]);
-	  if (table_size <= loc)
-	    table_grow (loc);
-
-	  if (table[loc] != 0)
-	    ok = false;
-	}
-
-      for (k = 0; ok && k < vector; k++)
-	if (pos[k] == j)
-	  ok = false;
+        if (ok && bitset_test (pos_set, nstates + res))
+          ok = false;
+      }
 
       if (ok)
-	{
-	  for (k = 0; k < t; k++)
-	    {
-	      loc = j + from[k];
-	      table[loc] = to[k];
-	      if (nondeterministic_parser && conflict_to != NULL)
-		conflict_table[loc] = conflict_to[k];
-	      check[loc] = from[k];
-	    }
+        {
+          int loc PACIFY_CC (= -1);
+          for (int k = 0; k < t; k++)
+            {
+              loc = res + state_number_as_int (from[k]);
+              table[loc] = to[k];
+              if (nondeterministic_parser && conflict_to != NULL)
+                conflict_table[loc] = conflict_to[k];
+              check[loc] = from[k];
+            }
 
-	  while (table[lowzero] != 0)
-	    lowzero++;
+          while (table[lowzero] != 0)
+            lowzero++;
 
-	  if (loc > high)
-	    high = loc;
+          if (high < loc)
+            high = loc;
 
-	  aver (BASE_MINIMUM <= j && j <= BASE_MAXIMUM);
-	  return j;
-	}
+          aver (BASE_MINIMUM <= res && res <= BASE_MAXIMUM);
+          return res;
+        }
     }
 }
 
@@ -742,15 +706,14 @@
 table_ninf_remap (base_number tab[], int size, base_number ninf)
 {
   base_number res = 0;
-  int i;
 
-  for (i = 0; i < size; i++)
+  for (int i = 0; i < size; i++)
     if (tab[i] < res && tab[i] != ninf)
       res = tab[i];
 
   --res;
 
-  for (i = 0; i < size; i++)
+  for (int i = 0; i < size; i++)
     if (tab[i] == ninf)
       tab[i] = res;
 
@@ -760,10 +723,8 @@
 static void
 pack_table (void)
 {
-  int i;
-
   base = xnmalloc (nvectors, sizeof *base);
-  pos = xnmalloc (nentries, sizeof *pos);
+  pos_set = bitset_create (table_size + nstates, BITSET_FRUGAL);
   table = xcalloc (table_size, sizeof *table);
   conflict_table = xcalloc (table_size, sizeof *conflict_table);
   check = xnmalloc (table_size, sizeof *check);
@@ -771,25 +732,30 @@
   lowzero = 0;
   high = 0;
 
-  for (i = 0; i < nvectors; i++)
+  for (int i = 0; i < nvectors; i++)
     base[i] = BASE_MINIMUM;
 
-  for (i = 0; i < table_size; i++)
+  for (int i = 0; i < table_size; i++)
     check[i] = -1;
 
-  for (i = 0; i < nentries; i++)
+  for (int i = 0; i < nentries; i++)
     {
       state_number s = matching_state (i);
       base_number place;
 
       if (s < 0)
-	/* A new set of state actions, or a nonterminal.  */
-	place = pack_vector (i);
+        /* A new set of state actions, or a nonterminal.  */
+        place = pack_vector (i);
       else
-	/* Action of I were already coded for S.  */
-	place = base[s];
+        /* Action of I were already coded for S.  */
+        place = base[s];
 
-      pos[i] = place;
+      /* Store PLACE into POS_SET.  PLACE might not belong to the set
+         of possible values for instance with useless tokens.  It
+         would be more satisfying to eliminate the need for this
+         'if'.  */
+      if (0 <= nstates + place)
+        bitset_set (pos_set, nstates + place);
       base[order[i]] = place;
     }
 
@@ -797,7 +763,7 @@
   base_ninf = table_ninf_remap (base, nvectors, BASE_MINIMUM);
   table_ninf = table_ninf_remap (table, high + 1, ACTION_NUMBER_MINIMUM);
 
-  free (pos);
+  bitset_free (pos_set);
 }
 
 
@@ -810,13 +776,11 @@
 void
 tables_generate (void)
 {
-  int i;
-
   /* This is a poor way to make sure the sizes are properly
      correlated.  In particular the signedness is not taken into
      account.  But it's not useless.  */
-  verify (sizeof nstates <= sizeof nvectors
-	  && sizeof nvars <= sizeof nvectors);
+  verify (sizeof nstates <= sizeof nvectors);
+  verify (sizeof nvars <= sizeof nvectors);
 
   nvectors = state_number_as_int (nstates) + nvars;
 
@@ -841,7 +805,7 @@
   free (tally);
   free (width);
 
-  for (i = 0; i < nvectors; i++)
+  for (int i = 0; i < nvectors; i++)
     {
       free (froms[i]);
       free (tos[i]);
diff --git a/src/tables.h b/src/tables.h
index 8b5c1fa..fe12952 100644
--- a/src/tables.h
+++ b/src/tables.h
@@ -1,6 +1,7 @@
 /* Prepare the LALR and GLR parser tables.
 
-   Copyright (C) 2002, 2004, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -121,8 +122,8 @@
    keep parser tables small.  */
 extern base_number base_ninf;
 
-extern unsigned int *conflict_table;
-extern unsigned int *conflict_list;
+extern int *conflict_table;
+extern int *conflict_list;
 extern int conflict_list_cnt;
 
 extern base_number *table;
diff --git a/src/uniqstr.c b/src/uniqstr.c
index 62d09ca..3833b84 100644
--- a/src/uniqstr.c
+++ b/src/uniqstr.c
@@ -1,6 +1,7 @@
 /* Keep a unique copy of strings.
 
-   Copyright (C) 2002-2005, 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2005, 2009-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -55,19 +56,36 @@
 }
 
 uniqstr
-uniqstr_vsprintf (char const *format, ...)
+uniqstr_concat (int nargs, ...)
 {
   va_list args;
-  size_t length;
-  va_start (args, format);
-  length = vsnprintf (NULL, 0, format, args);
+
+  va_start (args, nargs);
+  size_t reslen = 0;
+  for (int i = 0; i < nargs; i++)
+    reslen += strlen (va_arg (args, char const *));
   va_end (args);
 
-  char res[length + 1];
-  va_start (args, format);
-  vsprintf (res, format, args);
+  char *str = xmalloc (reslen + 1);
+  char *p = str;
+
+  va_start (args, nargs);
+  for (int i = 0; i < nargs; i++)
+    {
+      char const *arg = va_arg (args, char const *);
+      size_t arglen = strlen (arg);
+      memcpy (p, arg, arglen);
+      p += arglen;
+    }
   va_end (args);
-  return uniqstr_new (res);
+
+  *p = '\0';
+  uniqstr res = hash_insert (uniqstrs_table, str);
+  if (!res)
+    xalloc_die ();
+  if (res != str)
+    free (str);
+  return res;
 }
 
 /*------------------------------.
@@ -77,10 +95,11 @@
 void
 uniqstr_assert (char const *str)
 {
-  if (!hash_lookup (uniqstrs_table, str))
+  uniqstr s = hash_lookup (uniqstrs_table, str);
+  if (!s || s != str)
     {
       error (0, 0,
-	     "not a uniqstr: %s", quotearg (str));
+             "not a uniqstr: %s", quotearg (str));
       abort ();
     }
 }
@@ -103,7 +122,17 @@
   return uniqstr_print (ustr);
 }
 
-
+
+int
+uniqstr_cmp (uniqstr l, uniqstr r)
+{
+  return (l == r ? 0
+          : !l ? -1
+          : !r ? +1
+          : strcmp (l, r));
+}
+
+
 /*-----------------------.
 | A uniqstr hash table.  |
 `-----------------------*/
@@ -111,7 +140,7 @@
 static bool
 hash_compare_uniqstr (void const *m1, void const *m2)
 {
-  return strcmp (m1, m2) == 0;
+  return STREQ (m1, m2);
 }
 
 static size_t
@@ -120,6 +149,7 @@
   return hash_string (m, tablesize);
 }
 
+
 /*----------------------------.
 | Create the uniqstrs table.  |
 `----------------------------*/
@@ -127,11 +157,11 @@
 void
 uniqstrs_new (void)
 {
-  uniqstrs_table = hash_initialize (HT_INITIAL_CAPACITY,
-				    NULL,
-				    hash_uniqstr,
-				    hash_compare_uniqstr,
-				    free);
+  uniqstrs_table = hash_xinitialize (HT_INITIAL_CAPACITY,
+                                     NULL,
+                                     hash_uniqstr,
+                                     hash_compare_uniqstr,
+                                     free);
 }
 
 
diff --git a/src/uniqstr.h b/src/uniqstr.h
index 677ecc4..1fd7318 100644
--- a/src/uniqstr.h
+++ b/src/uniqstr.h
@@ -1,6 +1,7 @@
 /* Keeping a unique copy of strings.
 
-   Copyright (C) 2002-2003, 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2008-2015, 2018-2019 Free Software
+   Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -20,6 +21,8 @@
 #ifndef UNIQSTR_H_
 # define UNIQSTR_H_
 
+# include <stdio.h>
+
 /*-----------------------------------------.
 | Pointers to unique copies of C strings.  |
 `-----------------------------------------*/
@@ -29,70 +32,38 @@
 /* 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.  |
-`--------------------------------------*/
-
-/* Create the string table.  */
-void uniqstrs_new (void);
+int uniqstr_cmp (uniqstr u1, uniqstr u2);
 
 /* Die if STR is not a uniqstr.  */
 void uniqstr_assert (char const *str);
 
+/*----------------.
+| Concatenation.  |
+`----------------*/
+
+/* Concatenate strings and return a uniqstr.  The goal of
+   this macro is to make the caller's code a little more succinct.  */
+# define UNIQSTR_CONCAT(...)                                            \
+  uniqstr_concat (ARRAY_CARDINALITY (((char const *[]) {__VA_ARGS__})), \
+                  __VA_ARGS__)
+uniqstr uniqstr_concat (int nargs, ...);
+
+/*--------------------.
+| Table of uniqstrs.  |
+`--------------------*/
+
+/* Create the string table.  */
+void uniqstrs_new (void);
+
 /* Free all the memory allocated for symbols.  */
 void uniqstrs_free (void);
 
 /* 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/yacc.in b/src/yacc.in
new file mode 100644
index 0000000..3ee622b
--- /dev/null
+++ b/src/yacc.in
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+@relocatable_sh@
+if test "@RELOCATABLE@" = yes; then
+  prefix="@prefix@"
+  exec_prefix="@exec_prefix@"
+  bindir="@bindir@"
+  orig_installdir="$bindir" # see Makefile.am's *_SCRIPTS variables
+  func_find_curr_installdir # determine curr_installdir
+  func_find_prefixes
+  relocate () {
+    echo "$1/" \
+    | sed -e "s%^${orig_installprefix}/%${curr_installprefix}/%" \
+    | sed -e 's,/$,,'
+  }
+else
+  relocate () {
+    echo "$1"
+  }
+fi
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=`relocate "@bindir@"`
+exec "$bindir/bison" -y "$@"
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index b6848d7..0000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,107 +0,0 @@
-## Process this file with automake to create Makefile.in.
-
-## Makefile for Bison testsuite.
-
-## 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/>.
-
-EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4
-
-DISTCLEANFILES       = atconfig $(check_SCRIPTS)
-MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
-
-## ------------ ##
-## package.m4.  ##
-## ------------ ##
-
-$(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)])'; \
-	} >$@.tmp
-	$(AM_V_at) mv $@.tmp $@
-
-## ------------ ##
-## Test suite.  ##
-## ------------ ##
-
-TESTSUITE_AT = \
-	local.at \
-	testsuite.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 \
-        java.at \
-	cxx-type.at glr-regression.at \
-	push.at
-
-TESTSUITE = $(srcdir)/testsuite
-
-AUTOTEST = $(AUTOM4TE) --language=autotest
-$(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/$@
-
-clean-local:
-	test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
-
-check-local: atconfig atlocal $(TESTSUITE)
-	$(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
-
-check_SCRIPTS = bison
-
-# Run the test suite on the *installed* tree.
-installcheck-local: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
-
-# Be real mean with it.
-.PHONY: maintainer-check-g++
-maintainer-check-g++: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) $(TESTSUITEFLAGS) --compile-c-with-cxx
-
-.PHONY: maintainer-check-posix
-maintainer-check-posix: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) $(TESTSUITEFLAGS) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
-
-.PHONY: maintainer-check-valgrind
-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
deleted file mode 100644
index 405e291..0000000
--- a/tests/Makefile.in
+++ /dev/null
@@ -1,1606 +0,0 @@
-# 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 = 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/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 = 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@
-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@
-EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4
-DISTCLEANFILES = atconfig $(check_SCRIPTS)
-MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
-TESTSUITE_AT = \
-	local.at \
-	testsuite.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 \
-        java.at \
-	cxx-type.at glr-regression.at \
-	push.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 ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	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 \
-	  *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):
-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)/$@
-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
-	$(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:
-	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:
-	@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
-
-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
-	-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: 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-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
-
-
-$(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)])'; \
-	} >$@.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/$@
-
-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: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
-
-# Be real mean with it.
-.PHONY: maintainer-check-g++
-maintainer-check-g++: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) $(TESTSUITEFLAGS) --compile-c-with-cxx
-
-.PHONY: maintainer-check-posix
-maintainer-check-posix: atconfig atlocal $(TESTSUITE)
-	$(TESTSUITE) $(TESTSUITEFLAGS) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
-
-.PHONY: maintainer-check-valgrind
-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 97c08c2..e22e259 100644
--- a/tests/actions.at
+++ b/tests/actions.at
@@ -1,6 +1,6 @@
 # Executing Actions.                               -*- Autotest -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -17,25 +17,25 @@
 
 AT_BANNER([[User Actions.]])
 
-## ------------------ ##
-## Mid-rule actions.  ##
-## ------------------ ##
+## ----------------- ##
+## Midrule actions.  ##
+## ----------------- ##
 
-AT_SETUP([Mid-rule actions])
+AT_SETUP([Midrule actions])
 
-# Bison once forgot the mid-rule actions.  It was because the action
-# was attached to the host rule (the one with the mid-rule action),
+# Bison once forgot the midrule actions.  It was because the action
+# was attached to the host rule (the one with the midrule action),
 # instead of being attached to the empty rule dedicated to this
 # action.
 
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
-%{
+%code {
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
-%}
+}
 %%
 exp:     { putchar ('0'); }
      '1' { putchar ('1'); }
@@ -52,23 +52,256 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["123456789"])[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([-d -v -o input.c input.y])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([input], 0,
 [[0123456789
 ]])
 
 AT_CLEANUP
 
 
+## ----------------------- ##
+## Typed midrule actions.  ##
+## ----------------------- ##
+
+AT_SETUP([Typed midrule actions])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%define parse.error verbose
+%debug
+%code {
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+%union {
+  int ival;
+}
+%type <ival> exp
+%%
+exp:     <ival>{ $$ = 0; }
+     '1' <ival>{ $$ = 1; }
+     '2' <ival>{ $$ = 2; }
+     '3' <ival>{ $$ = 3; }
+     '4' <ival>{ $$ = 4; }
+     '5' <ival>{ $$ = 5; }
+     '6' <ival>{ $$ = 6; }
+     '7' <ival>{ $$ = 7; }
+     '8' <ival>{ $$ = 8; }
+     '9' <ival>{ $$ = 9; }  <ival>{ $$ = 10; }  <ival>{ $$ = 11; }
+  {
+    $$ = $1 + $3 + $5 + $7 + $9 + $11 + $13 + $15 + $17 + $19 + $20 + $21;
+    printf ("%d\n", $$);
+  }
+;
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["123456789"])[
+]AT_MAIN_DEFINE[
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-d -v -o input.c input.y])
+AT_COMPILE([input])
+AT_PARSER_CHECK([input], 0,
+[[66
+]])
+
+AT_CLEANUP
+
+
+## ----------------------- ##
+## Implicitly empty rule.  ##
+## ----------------------- ##
+
+AT_SETUP([Implicitly empty rule])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[1.y]],
+[[%%
+exp: a b;
+a: /* empty. */ {};
+// A midrule action does not count as an empty rule.
+b: {} {};
+]])
+
+AT_BISON_CHECK([-fcaret -Wempty-rule 1.y], [0], [],
+[[1.y:11.17-18: warning: empty rule without %empty [-Wempty-rule]
+   11 | a: /* empty. */ {};
+      |                 ^~
+      |                 %empty
+1.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_DATA_GRAMMAR([[2.y]],
+[[%%
+exp: a b c;
+a: /* empty. */ {};
+b: %empty       {};
+c: /* empty. */ {};
+]])
+
+AT_BISON_CHECK([-fcaret 2.y], [0], [],
+[[2.y:11.17-18: warning: empty rule without %empty [-Wempty-rule]
+   11 | a: /* empty. */ {};
+      |                 ^~
+      |                 %empty
+2.y:13.17-18: warning: empty rule without %empty [-Wempty-rule]
+   13 | c: /* empty. */ {};
+      |                 ^~
+      |                 %empty
+2.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_BISON_CHECK([-fcaret -Wno-empty-rule 2.y], [0])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ------------------------ ##
+## Invalid uses of %empty.  ##
+## ------------------------ ##
+
+AT_SETUP([Invalid uses of %empty])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[one.y]],
+[[%%
+exp:
+  %empty {} %empty
+;
+]])
+
+AT_BISON_CHECK([-fcaret one.y], [1], [],
+[[one.y:11.13-18: error: only one %empty allowed per rule
+   11 |   %empty {} %empty
+      |             ^~~~~~
+one.y:11.3-8:       previous declaration
+   11 |   %empty {} %empty
+      |   ^~~~~~
+one.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_BISON_CHECK([-fcaret -u one.y], [1], [],
+[[one.y:11.13-18: error: only one %empty allowed per rule
+   11 |   %empty {} %empty
+      |             ^~~~~~
+one.y:11.3-8:       previous declaration
+   11 |   %empty {} %empty
+      |   ^~~~~~
+bison: file 'one.y' was updated (backup: 'one.y~')
+]])
+
+AT_CHECK([sed -e '1,8d' one.y], [],
+[[%%
+exp:
+  %empty {} @&t@
+;
+]])
+
+
+AT_DATA_GRAMMAR([[two.y]],
+[[%%
+exp:
+  'a' %empty    {}
+| %empty 'a'    {}
+| %empty {}     {}
+;
+]])
+
+AT_BISON_CHECK([-fcaret two.y], [1], [],
+[[two.y:11.7-12: error: %empty on non-empty rule
+   11 |   'a' %empty    {}
+      |       ^~~~~~
+two.y:12.3-8: error: %empty on non-empty rule
+   12 | | %empty 'a'    {}
+      |   ^~~~~~
+two.y:13.3-8: error: %empty on non-empty rule
+   13 | | %empty {}     {}
+      |   ^~~~~~
+two.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ---------------------- ##
+## Valid uses of %empty.  ##
+## ---------------------- ##
+
+AT_SETUP([Valid uses of %empty])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%debug
+%code
+{
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+%%
+exp: %empty {}
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+]AT_MAIN_DEFINE[
+]])
+
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([input])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## -------------------- ##
+## Add missing %empty.  ##
+## -------------------- ##
+
+AT_SETUP([Add missing %empty])
+
+AT_DATA([input.y],
+[[%%
+exp: a b c d e
+a: {}
+b:{
+};
+c:
+d
+:
+e:
+%%
+]])
+
+AT_BISON_CHECK([--update -Wall input.y], [], [], [ignore])
+AT_CHECK([cat input.y], [],
+[[%%
+exp: a b c d e
+a:  %empty {}
+b: %empty {
+};
+c: %empty @&t@
+d
+: %empty @&t@
+e: %empty @&t@
+%%
+]])
+
+# No warnings.
+AT_BISON_CHECK([-Wall input.y])
+
+AT_CLEANUP
+
+
 ## ------------------ ##
 ## Initial location.  ##
 ## ------------------ ##
@@ -81,8 +314,7 @@
 
 AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" $2])
 AT_DATA_GRAMMAR([[input.y]],
-[[%defines /* FIXME: Required by lalr1.cc in Bison 2.6. */
-%locations
+[[%locations
 %debug
 %skeleton "$1"
 ]$2[
@@ -95,15 +327,15 @@
 ]AT_YYLEX_DECLARE[
 }
 %%
-exp: { ]AT_SKEL_CC_IF([[std::cerr << @$ << std::endl]],
-                      [[YY_LOCATION_PRINT(stderr, @$); fputc ('\n', stderr)]])[; }
+exp: { ]AT_CXX_IF([[std::cerr << @$ << '\n']],
+                  [[LOCATION_PRINT(stderr, @$); fputc ('\n', stderr)]])[; }
 %%
 ]AT_YYERROR_DEFINE[
 
 ]AT_YYLEX_PROTOTYPE[
 {]AT_PURE_IF([
   YYUSE(lvalp);
-  YYUSE(llocp);], [AT_SKEL_CC_IF([
+  YYUSE(llocp);], [AT_CXX_IF([
   YYUSE(lvalp);
   YYUSE(llocp);])])[
   return 'x';
@@ -111,17 +343,17 @@
 
 int
 main (void)
-{]AT_SKEL_CC_IF([[
+{]AT_CXX_IF([[
   yy::parser p;
-  p.set_debug_level (!!getenv("YYDEBUG"));
+  p.set_debug_level (!!getenv ("YYDEBUG"));
   return p.parse ();]], [[
-  yydebug = !!getenv("YYDEBUG");
+  yydebug = !!getenv ("YYDEBUG");
   return !!yyparse (]AT_PARAM_IF([0])[);]])[
 }
 ]])
 
 AT_FULL_COMPILE([input])
-AT_PARSER_CHECK([./input], 1, [],
+AT_PARSER_CHECK([input], 1, [],
 [m4_default([$4], [1.1])
 m4_default([$4], [1.1])[: syntax error
 ]])
@@ -150,7 +382,7 @@
 AT_TEST([yacc.c], [%define api.pure full],
 [[%{
 # define YYLTYPE int
-# define YY_LOCATION_PRINT(Stream, Loc)      \
+# define LOCATION_PRINT(Stream, Loc)      \
    (void) (Loc)
 # define YYLLOC_DEFAULT(Current, Rhs, N)    \
   (Current) = ((Rhs)[N ? 1 : 0])
@@ -161,7 +393,7 @@
 AT_TEST([yacc.c], [%define api.pure full],
 [[%{
 # define YYLTYPE int
-# define YY_LOCATION_PRINT(Stream, Loc)      \
+# define LOCATION_PRINT(Stream, Loc)      \
     fprintf ((Stream), "%d", (Loc))
 # define YYLLOC_DEFAULT(Current, Rhs, N)    \
   (Current) = ((Rhs)[N ? 1 : 0])
@@ -178,29 +410,27 @@
 ## Location Print.  ##
 ## ---------------- ##
 
-# AT_TEST(SKELETON-NAME, DIRECTIVES, [MORE-DIRECTIVES], [LOCATION = 1.1])
-# -----------------------------------------------------------------------
+# AT_TEST(SKELETON-NAME, DIRECTIVES, [MORE-DIRECTIVES])
+# -----------------------------------------------------
 # 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
+[[%locations
 %debug
 %skeleton "$1"
 ]$2[
 ]$3[
 %code
 {
-# include <stdio.h>
-# include <stdlib.h> /* getenv */
+#include <stdio.h> /* putchar. */
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
 }
 %%
-exp:;
+exp: %empty;
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
@@ -208,12 +438,15 @@
 int
 main (void)
 {
+  ]AT_YYLTYPE[ loc;
+]AT_GLR_CC_IF([loc.initialize();])[
 #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)[;\
+  loc.]AT_FIRST_LINE[ = L1;           \
+  loc.]AT_FIRST_COLUMN[ = C1;         \
+  loc.]AT_LAST_LINE[ = L2;            \
+  loc.]AT_LAST_COLUMN[ = C2;          \
+  ]AT_CXX_IF([std::cout << loc],
+                 [LOCATION_PRINT(stdout, loc)])[;\
   putchar ('\n');
 
   TEST(1, 1, 1, 1);
@@ -228,7 +461,7 @@
 ]])
 
 AT_FULL_COMPILE([input])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([input], 0,
 [[1.1
 2.1-9
 3.1-4.0
@@ -240,11 +473,8 @@
 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])
+## FIXME: test Java and D.
+m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
 
 m4_popdef([AT_TEST])
 
@@ -258,13 +488,13 @@
 
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
-%{
+%code {
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
 # define USE(Var)
-%}
+}
 
 %union
 {
@@ -295,16 +525,12 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 AT_BISON_CHECK([-d -v -o input.c input.y], 0)
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([input], 0,
 [[15
 ]])
 
@@ -314,7 +540,6 @@
 AT_DATA_GRAMMAR([[input.y]],
 [[
 %{
-#include <stdio.h>
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
   typedef struct { int val; } stype;
@@ -330,15 +555,11 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 AT_FULL_COMPILE([input])
-AT_PARSER_CHECK([[./input]], [[0]],
+AT_PARSER_CHECK([[input]], [[0]],
 [[6
 ]])
 
@@ -371,12 +592,14 @@
 
 #define YYINITDEPTH 10
 #define YYMAXDEPTH 10
-#define RANGE(Location) ]AT_LALR1_CC_IF([(Location).begin.line, (Location).end.line],
+#define RANGE(Location) ]AT_CXX_IF([(Location).begin.line, (Location).end.line],
       [(Location).first_line, (Location).last_line])[
 
+#define USE(SYM)
+
 /* Display the symbol type Symbol.  */
 #define V(Symbol, Value, Location, Sep) \
-   fprintf (stderr, #Symbol " (%d@%d-%d)" Sep, Value, RANGE(Location))
+   fprintf (stderr, #Symbol " (%d@%d-%d)%s", Value, RANGE(Location), Sep)
 }
 
 $5
@@ -391,15 +614,17 @@
 ]AT_LALR1_CC_IF([], [AT_YYERROR_DECLARE])
 [}
 
-]m4_ifval([$6], [%type <ival> '(' 'x' 'y' ')' ';' thing line input END])[
+]m4_ifval([$6],
+[%type <ival> '(' 'x' 'y' ')' ';' thing line input
+              '!' raise check-spontaneous-errors END])[
 
 /* FIXME: This %printer isn't actually tested.  */
 %printer
   {
-    ]AT_LALR1_CC_IF([debug_stream () << $$;],
-                    [fprintf (yyoutput, "%d", $$)])[;
+    ]AT_CXX_IF([yyo << $$;],
+               [fprintf (yyo, "%d", $$)])[;
   }
-  input line thing 'x' 'y'
+  '(' 'x' 'y' ')' ';' thing line input '!' raise check-spontaneous-errors END
 
 %destructor
   { fprintf (stderr, "Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
@@ -414,6 +639,14 @@
   thing
 
 %destructor
+  { fprintf (stderr, "Freeing nterm raise (%d@%d-%d)\n", $$, RANGE (@$)); }
+  raise
+
+%destructor
+  { fprintf (stderr, "Freeing nterm check-spontaneous-errors (%d@%d-%d)\n", $$, RANGE (@$)); }
+  check-spontaneous-errors
+
+%destructor
   { fprintf (stderr, "Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
   'x'
 
@@ -429,13 +662,13 @@
 %%
 /*
    This grammar is made to exercise error recovery.
-   "Lines" starting with `(' support error recovery, with
+   "Lines" starting with '(' support error recovery, with
    ')' as synchronizing token.  Lines starting with 'x' can never
    be recovered from if in error.
 */
 
 input:
-  /* Nothing. */
+  %empty
     {
       $$ = 0;
       V(input, $$, @$, ": /* Nothing */\n");
@@ -448,6 +681,38 @@
       V(line,  $1, @1, " ");
       V(input, $2, @2, "\n");
     }
+| '!' check-spontaneous-errors
+  {
+    $$ = $2;
+  }
+;
+
+check-spontaneous-errors:
+  raise         { abort(); USE(($$, $1)); }
+| '(' raise ')' { abort(); USE(($$, $2)); }
+| error
+  {
+    $$ = 5;
+    V(check-spontaneous-errors, $$, @$, ": ");
+    fprintf (stderr, "error (@%d-%d)\n", RANGE(@1));
+  }
+;
+
+raise:
+  %empty
+  {
+    $$ = 4;
+    V(raise, $$, @$, ": %empty\n");
+    YYERROR;
+  }
+| '!' '!'
+  {
+    $$ = 5;
+    V(raise, $$, @$, ": ");
+    V(!, $1, @2, " ");
+    V(!, $2, @2, "\n");
+    YYERROR;
+  }
 ;
 
 line:
@@ -482,7 +747,7 @@
       $$ = -1;
       V(line,  $$, @$, ": ");
       V('(',   $1, @1, " ");
-      fprintf (stderr, "error (@%d-%d) ", RANGE (@2));
+      fprintf (stderr, "error (@%d-%d) ", RANGE(@2));
       V(')',   $3, @3, "\n");
     }
 ;
@@ -497,20 +762,20 @@
 ;
 %%
 /* Alias to ARGV[1]. */
-const char *source = YY_NULL;
+const char *source = YY_NULLPTR;
 
 ]AT_YYERROR_DEFINE[
 
 static
 ]AT_YYLEX_PROTOTYPE[
 {
-  static unsigned int counter = 0;
+  static int counter = 0;
 
   int c = ]AT_VAL[]m4_ifval([$6], [.ival])[ = counter++;
+  assert (c <= YY_CAST (int, strlen (source)));
   /* As in BASIC, line numbers go from 10 to 10.  */
-  ]AT_LOC_FIRST_LINE[ = ]AT_LOC_FIRST_COLUMN[ = 10 * c;
+  ]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])
     fprintf (stderr, "sending: '%c'", source[c]);
   else
@@ -518,9 +783,8 @@
   fprintf (stderr, " (%d@%d-%d)\n", c, RANGE (]AT_LOC[));
   return source[c];
 }
-]AT_LALR1_CC_IF(
-[static bool yydebug;
-int
+]AT_LALR1_CC_IF([static bool yydebug;])[
+]AT_CXX_IF([int
 yyparse ()
 {
   yy::parser parser;
@@ -534,7 +798,7 @@
 {
   int status;
   yydebug = !!getenv ("YYDEBUG");
-  assert (argc == 2);
+  assert (argc == 2); (void) argc;
   source = argv[1];
   status = yyparse ();
   switch (status)
@@ -555,7 +819,7 @@
 # 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)
@@ -569,12 +833,44 @@
 Successful parse.
 ]])
 
+# Check the location of empty reductions raising an error
+# -------------------------------------------------------
+# Here, the error is after token "!@0-9", so the error is raised from
+# @9-9, and the error recovery detects that it starts from @9-9 and
+# ends where starts the next token: END@10-19.
+#
+# So error recovery reports error@9-19.
+AT_PARSER_CHECK([input '!'], 0, [],
+[[sending: '!' (0@0-9)
+sending: END (1@10-19)
+raise (4@9-9): %empty
+check-spontaneous-errors (5@9-19): error (@9-19)
+Freeing token END (1@10-19)
+Freeing nterm input (5@0-19)
+Successful parse.
+]])
+
+# Check the location of not empty reductions raising an error
+# -----------------------------------------------------------
+# This time the error is raised from a rule with 2 rhs symbols: @10-29.
+# It is recovered @10-29.
+AT_PARSER_CHECK([[input '!!!']], 0, [],
+[[sending: '!' (0@0-9)
+sending: '!' (1@10-19)
+sending: '!' (2@20-29)
+raise (5@10-29): ! (1@20-29) ! (2@20-29)
+check-spontaneous-errors (5@10-29): error (@10-29)
+sending: END (3@30-39)
+Freeing token END (3@30-39)
+Freeing nterm input (5@0-29)
+Successful parse.
+]])
 
 # Check locations in error recovery
 # ---------------------------------
 # '(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.10-19.18: syntax error, unexpected 'y', expecting 'x'
@@ -592,7 +888,7 @@
 
 # Syntax errors caught by the parser
 # ----------------------------------
-# Exercise the discarding of stack top and input until `error'
+# Exercise the discarding of stack top and input until 'error'
 # can be reduced.
 #
 #     '(', 'x', 'x', 'x', 'x', 'x', ')',
@@ -604,7 +900,7 @@
 #     '(', '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)
@@ -652,7 +948,7 @@
 #     '(', 'x', ')',
 #     '(', 'x', ')',
 #     'x'
-AT_PARSER_CHECK([./input '(x)(x)x'], 1, [],
+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)
@@ -680,7 +976,7 @@
 # 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)
@@ -738,7 +1034,7 @@
 
 $3
 _AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4],
-[%error-verbose
+[%define parse.error verbose
 %debug
 %verbose
 %locations
@@ -751,11 +1047,14 @@
 AT_CHECK_PRINTER_AND_DESTRUCTOR([])
 AT_CHECK_PRINTER_AND_DESTRUCTOR([], [ with union])
 
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [ with union])
+
 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([%glr-parser])
-AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [ with union])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"])
+AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "glr.cc"], [ with union])
 
 
 
@@ -767,40 +1066,38 @@
 # called for $end, and that $$ and @$ work correctly.
 
 AT_SETUP([Default tagless %printer and %destructor])
-AT_BISON_OPTION_PUSHDEFS([%locations])
+AT_BISON_OPTION_PUSHDEFS([%locations %debug])
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %locations
 
-%{
-# include <stdio.h>
-# include <stdlib.h>
+%code {
 ]AT_YYLEX_DECLARE[
 ]AT_YYERROR_DECLARE[
 # define USE(SYM)
-%}
+}
 
 %printer {
-  fprintf (yyoutput, "<*> printer should not be called.\n");
+  #error "<*> printer should not be used."
 } <*>
 
 %printer {
-  fprintf (yyoutput, "<> printer for '%c' @ %d", $$, @$.first_column);
+  fprintf (yyo, "<> printer for '%c' @ %d", $$, @$.first_column);
 } <>
 %destructor {
-  fprintf (stdout, "<> destructor for '%c' @ %d.\n", $$, @$.first_column);
+  printf ("<> destructor for '%c' @ %d.\n", $$, @$.first_column);
 } <>
 
 %printer {
-  fprintf (yyoutput, "'b'/'c' printer for '%c' @ %d", $$, @$.first_column);
+  fprintf (yyo, "'b'/'c' printer for '%c' @ %d", $$, @$.first_column);
 } 'b' 'c'
 %destructor {
-  fprintf (stdout, "'b'/'c' destructor for '%c' @ %d.\n", $$, @$.first_column);
+  printf ("'b'/'c' destructor for '%c' @ %d.\n", $$, @$.first_column);
 } 'b' 'c'
 
 %destructor {
-  fprintf (yyoutput, "<*> destructor should not be called.\n");
+  #error "<*> destructor should not be used."
 } <*>
 
 %%
@@ -810,18 +1107,15 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["abcd"], [[yylval = res]])[
-
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:30.3-5: warning: useless %destructor for type <*> [-Wother]
+input.y:30.3-5: warning: useless %printer for type <*> [-Wother]
+]])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 1,
+AT_PARSER_CHECK([input --debug], 1,
 [[<> destructor for 'd' @ 4.
 'b'/'c' destructor for 'c' @ 3.
 'b'/'c' destructor for 'b' @ 2.
@@ -865,21 +1159,19 @@
 ## ------------------------------------------------------ ##
 
 AT_SETUP([Default tagged and per-type %printer and %destructor])
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.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");
+  #error "<> printer should not be used."
 } <>
 
 %union { int field0; int field1; int field2; }
@@ -887,26 +1179,26 @@
 %type <field1> 'e'
 %type <field2> 'f'
 %printer {
-  fprintf (yyoutput, "<*>/<field2>/e printer");
+  fprintf (yyo, "<*>/<field2>/e printer");
 } <*> 'e' <field2>
 %destructor {
-  fprintf (stdout, "<*>/<field2>/e destructor.\n");
+  printf ("<*>/<field2>/e destructor.\n");
 } <*> 'e' <field2>
 
 %type <field1> 'b'
-%printer { fprintf (yyoutput, "<field1> printer"); } <field1>
-%destructor { fprintf (stdout, "<field1> destructor.\n"); } <field1>
+%printer { fprintf (yyo, "<field1> printer"); } <field1>
+%destructor { printf ("<field1> destructor.\n"); } <field1>
 
 %type <field0> 'c'
-%printer { fprintf (yyoutput, "'c' printer"); } 'c'
-%destructor { fprintf (stdout, "'c' destructor.\n"); } 'c'
+%printer { fprintf (yyo, "'c' printer"); } 'c'
+%destructor { printf ("'c' destructor.\n"); } 'c'
 
 %type <field1> 'd'
-%printer { fprintf (yyoutput, "'d' printer"); } 'd'
-%destructor { fprintf (stdout, "'d' destructor.\n"); } 'd'
+%printer { fprintf (yyo, "'d' printer"); } 'd'
+%destructor { printf ("'d' destructor.\n"); } 'd'
 
 %destructor {
-  fprintf (yyoutput, "<> destructor should not be called.\n");
+  #error "<> destructor should not be used."
 } <>
 
 %%
@@ -922,18 +1214,15 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["abcdef"])[
-
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:22.3-4: warning: useless %destructor for type <> [-Wother]
+input.y:22.3-4: warning: useless %printer for type <> [-Wother]
+]])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 1,
+AT_PARSER_CHECK([input --debug], 1,
 [[<*>/<field2>/e destructor.
 <*>/<field2>/e destructor.
 'd' destructor.
@@ -990,41 +1279,39 @@
 
 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],
+# AT_TEST(TYPED)
+# --------------
+m4_pushdef([AT_TEST],
 [m4_if($1, 0,
   [m4_pushdef([kind], []) m4_pushdef([not_kind], [*])],
   [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [])])
 
-AT_BISON_OPTION_PUSHDEFS([%locations])
+AT_BISON_OPTION_PUSHDEFS([%locations %debug])
 AT_DATA_GRAMMAR([[input]]$1[[.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %locations
 
-%{
-# include <stdio.h>
-# include <stdlib.h>
+%code {
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
 # define USE(SYM)
-%}
+}
 
 %destructor {
-  fprintf (yyoutput, "<]]not_kind[[> destructor should not be called.\n");
+  #error "<]]not_kind[[> destructor should not be used."
 } <]]not_kind[[>
 
 %token END 0
 %printer {
-  fprintf (yyoutput, "<]]kind[[> for '%c' @ %d", $$, @$.first_column);
+  fprintf (yyo, "<]]kind[[> for '%c' @ %d", $$, @$.first_column);
 } <]]kind[[>
 %destructor {
-  fprintf (stdout, "<]]kind[[> for '%c' @ %d.\n", $$, @$.first_column);
+  printf ("<]]kind[[> for '%c' @ %d.\n", $$, @$.first_column);
 } <]]kind[[>
 
 %printer {
-  fprintf (yyoutput, "<]]not_kind[[> printer should not be called.\n");
+  #error "<]]not_kind[[> printer should not be used."
 } <]]not_kind[[>
 
 ]]m4_if($1, 0, [[[
@@ -1037,7 +1324,7 @@
 start: { $$ = 'S'; } ;
 
 %%
-
+#include <stdlib.h> /* abort */
 static int
 yylex (void)
 {
@@ -1050,25 +1337,28 @@
   return 0;
 }
 ]AT_YYERROR_DEFINE[
-
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input$1.c input$1.y])
+AT_BISON_CHECK([-o input$1.c input$1.y], [], [],
+[m4_if([$1], [0],
+[[input0.y:30.3-5: warning: useless %destructor for type <*> [-Wother]
+input0.y:30.3-5: warning: useless %printer for type <*> [-Wother]
+]],
+[[input1.y:30.3-4: warning: useless %destructor for type <> [-Wother]
+input1.y:30.3-4: warning: useless %printer for type <> [-Wother]
+]])])
+
 AT_COMPILE([input$1])
-AT_PARSER_CHECK([./input$1], 0,
+
+AT_PARSER_CHECK([input$1 --debug], 0,
 [[<]]kind[[> for 'E' @ 1.
 <]]kind[[> for 'S' @ 1.
 ]],
 [[Starting parse
 Entering state 0
-Reducing stack by rule 1 (line 42):
+Reducing stack by rule 1 (line 49):
 -> $$ = nterm start (1.1: <]]kind[[> for 'S' @ 1)
 Stack now 0
 Entering state 1
@@ -1084,8 +1374,10 @@
 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_TEST(0)
+AT_TEST(1)
+
+m4_popdef([AT_TEST])
 
 AT_CLEANUP
 
@@ -1105,7 +1397,7 @@
 #       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_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([[input.y]],
 [[%debug
 
@@ -1118,7 +1410,7 @@
 %}
 
 %printer {
-  fprintf (yyoutput, "'%c'", $$);
+  fprintf (yyo, "'%c'", $$);
 } <> <*>
 %destructor {
   fprintf (stderr, "DESTROY '%c'\n", $$);
@@ -1136,18 +1428,16 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["abd"], [yylval = res])[
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:23.6-8: warning: useless %destructor for type <*> [-Wother]
+input.y:23.6-8: warning: useless %printer for type <*> [-Wother]
+]])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], [1], [],
+AT_PARSER_CHECK([input --debug], [1], [],
 [[Starting parse
 Entering state 0
 Reading a token: Next token is token 'a' ('a')
@@ -1197,7 +1487,7 @@
 #   - 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.)
+#     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
@@ -1205,7 +1495,7 @@
 #     true for $undefined and the error token, so there are three warnings for
 #     %printer and three for %destructor.)
 
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([[input.y]],
 [[%debug /* So that %printer is actually compiled.  */
 
@@ -1219,7 +1509,7 @@
 
 %printer {
   char chr = $$;
-  fprintf (yyoutput, "'%c'", chr);
+  fprintf (yyo, "'%c'", chr);
 } <> <*>
 %destructor {
   char chr = $$;
@@ -1236,46 +1526,43 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:24.3-4: warning: useless %destructor for type <> [-Wother]
+input.y:24.3-4: warning: useless %printer for type <> [-Wother]
+]])
 AT_COMPILE([input])
 
 AT_CLEANUP
 
 
 
-## ------------------------------------------------------ ##
-## Default %printer and %destructor for mid-rule values.  ##
-## ------------------------------------------------------ ##
+## ----------------------------------------------------- ##
+## Default %printer and %destructor for midrule values.  ##
+## ----------------------------------------------------- ##
 
-AT_SETUP([Default %printer and %destructor for mid-rule values])
+AT_SETUP([Default %printer and %destructor for midrule values])
 
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 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)
+# define LOCATION_PRINT(File, Loc)
 %}
 
-%printer { fprintf (yyoutput, "%d", @$); } <>
+%printer    { fprintf (yyo, "%d", @$); } <>
 %destructor { fprintf (stderr, "DESTROY %d\n", @$); } <>
-%printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
-%destructor { fprintf (yyoutput, "<*> destructor should not be called"); } <*>
+%printer    { #error "<*> printer should not be used" } <*>
+%destructor { #error "<*> destructor should not be used" } <*>
 
 %%
 
@@ -1291,31 +1578,34 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 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
+[[input.y:24.57-59: warning: useless %destructor for type <*> [-Wother]
+input.y:24.57-59: warning: useless %printer for type <*> [-Wother]
+input.y:33.3-23: warning: unset value: $$ [-Wother]
+input.y:32.3-23: warning: unused value: $3 [-Wother]
 ]])
 
 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.
-   ^^^^^^^^^^^^^^^^^^^^^
+[[input.y:24.57-59: warning: useless %destructor for type <*> [-Wother]
+   24 | %printer    { #error "<*> printer should not be used" } <*>
+      |                                                         ^~~
+input.y:24.57-59: warning: useless %printer for type <*> [-Wother]
+   24 | %printer    { #error "<*> printer should not be used" } <*>
+      |                                                         ^~~
+input.y:33.3-23: warning: unset value: $$ [-Wother]
+   33 |   {           @$ = 4; } // Only used.
+      |   ^~~~~~~~~~~~~~~~~~~~~
+input.y:32.3-23: warning: unused value: $3 [-Wother]
+   32 |   { USE ($$); @$ = 3; } // Only set.
+      |   ^~~~~~~~~~~~~~~~~~~~~
 ]])
 
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 1,,
+AT_PARSER_CHECK([input --debug], 1,,
 [[Starting parse
 Entering state 0
 Reducing stack by rule 1 (line 30):
@@ -1364,7 +1654,7 @@
 # -------------------------------------------
 m4_define([AT_CHECK_ACTION_LOCATIONS],
 [AT_SETUP([[@$ in ]$1[ implies %locations]])
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([[input.y]],
 [[%code {
   #include <stdio.h>
@@ -1391,11 +1681,7 @@
 }
 
 ]AT_YYERROR_DEFINE[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 AT_BISON_CHECK([[-o input.c input.y]])
@@ -1412,8 +1698,9 @@
 ## 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.
+# Check that we can use qualified $$ (v.g., $<type>$) not only in rule
+# actions, but also where $$ is valid: %destructor/%printer and
+# %initial-action.
 #
 # FIXME: Not actually checking %destructor, but it's the same code as
 # %printer...
@@ -1426,12 +1713,10 @@
 m4_pushdef([AT_TEST],
 [AT_SETUP([[Qualified $$ in actions: $1]])
 
-AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1"])
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1" %debug])
 
 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
 {
@@ -1443,12 +1728,16 @@
 
 # define YYSTYPE sem_type
 
-]AT_SKEL_CC_IF([[
+]AT_CXX_IF([[
+# include <cstdio> // EOF.
 # include <iostream>
-  static void
-  report (std::ostream& yyo, int ival, float fval)
+  namespace
   {
-    yyo << "ival: " << ival << ", fval: " <<  fval;
+    void
+    report (std::ostream& yyo, int ival, float fval)
+    {
+      yyo << "ival: " << ival << ", fval: " <<  fval;
+    }
   }
 ]], [[
 # include <stdio.h>
@@ -1476,7 +1765,7 @@
 %initial-action
 {
   $<ival>$ = 42;
-  $<fval>$ = 4.2;
+  $<fval>$ = 4.2f;
 }
 
 %%
@@ -1487,30 +1776,20 @@
 };
 %%
 ]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE(AT_SKEL_CC_IF([[{yy::parser::token::UNTYPED,
+]AT_YYLEX_DEFINE(AT_CXX_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_VAL.ival = toknum * 10;
+                  AT_VAL.fval = YY_CAST (float, toknum) / 10.0f;])[
+]AT_MAIN_DEFINE[
 ]])
 
 AT_FULL_COMPILE([[input]])
-AT_PARSER_CHECK([./input], 0, [], [stderr])
+AT_PARSER_CHECK([input --debug], 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,
+AT_CHECK([[sed -ne '/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)
@@ -1526,122 +1805,9 @@
 AT_CLEANUP
 ])
 
-AT_TEST([yacc.c])
-AT_TEST([glr.c])
-AT_TEST([lalr1.cc])
-AT_TEST([glr.cc])
-
+m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [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.  ##
 ## -------------------------------------------------- ##
@@ -1676,7 +1842,7 @@
 // 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*/ {
+accept: %empty {
   assert (yychar == YYEMPTY);
   yychar = 'b';
   YYACCEPT;
@@ -1685,16 +1851,12 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["a"])[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 AT_BISON_CHECK([[-o input.c input.y]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[0]], [],
+AT_PARSER_CHECK([[input]], [[0]], [],
 [['b' destructor
 'a' destructor
 ]])
@@ -1707,13 +1869,13 @@
 
 AT_SETUP([[YYBACKUP]])
 
-AT_BISON_OPTION_PUSHDEFS([%pure-parser])
+AT_BISON_OPTION_PUSHDEFS([%pure-parser %debug])
 
 AT_DATA_GRAMMAR([input.y],
 [[
-%error-verbose
+%define parse.error verbose
 %debug
-%pure-parser
+%define api.pure
 %code {
 # include <stdio.h>
 # include <stdlib.h>
@@ -1736,19 +1898,13 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["bcd"], [*lvalp = (toknum + 1) * 10])[
-
-int
-main (void)
-{
-  yydebug = !!getenv("YYDEBUG");
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([[-o input.c input.y]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[0]],
+AT_PARSER_CHECK([[input]], [[0]],
 [[a: 123
 a: 456
 ]])
diff --git a/tests/atlocal.in b/tests/atlocal.in
index f817f94..8f2c64c 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -1,7 +1,7 @@
-# @configure_input@					-*- shell-script -*-
+# @configure_input@                                     -*- shell-script -*-
 # Configurable variable values for Bison test suite.
 
-# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015, 2018-2019 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,8 +16,8 @@
 # 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="-I$abs_top_builddir/lib @CPPFLAGS@"
+# We need 'testsuite.h' (srcdir/test).
+CPPFLAGS="-I$abs_top_srcdir/tests @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
@@ -36,30 +36,65 @@
 : ${CXX='@CXX@'}
 
 # Is the compiler GCC?
-GCC='@GCC@'
+: ${GCC='@GCC@'}
 
 # 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@'
+: ${NO_WERROR_CFLAGS='@CFLAGS@  @WARN_CFLAGS@  @WARN_CFLAGS_TEST@'}
+: ${NO_WERROR_CXXFLAGS='@CXXFLAGS@ @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@'}
+: ${WNO_DEPRECATED_CXXFLAGS='@WNO_DEPRECATED_CXXFLAGS@'}
 
 # But most of the time, we want -Werror.
-  CFLAGS="$NO_WERROR_CFLAGS   @WERROR_CFLAGS@"
-CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@"
+: ${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@'
+# If 'exit 77'; skip all C++ tests; otherwise ':'.
+: ${BISON_CXX_WORKS='@BISON_CXX_WORKS@'}
+
+# Compiler flags to disable exception support.
+: ${NO_EXCEPTIONS_CXXFLAGS='@NO_EXCEPTIONS_CXXFLAGS@'}
+
+# Requiring a specific C++ standard.
+: ${CXX98_CXXFLAGS='@CXX98_CXXFLAGS@'}
+: ${CXX03_CXXFLAGS='@CXX03_CXXFLAGS@'}
+: ${CXX11_CXXFLAGS='@CXX11_CXXFLAGS@'}
+: ${CXX14_CXXFLAGS='@CXX14_CXXFLAGS@'}
+: ${CXX17_CXXFLAGS='@CXX17_CXXFLAGS@'}
+: ${CXX2A_CXXFLAGS='@CXX2A_CXXFLAGS@'}
+
+# Be sure that the C++ compiler is not broken because of gnulib.  This
+# cannot be checked in configure (gnulib is not parameterized yet),
+# and checking this in every C++ test in AC_COMPILE_CXX is too costly.
+#
+# http://lists.gnu.org/archive/html/bug-bison/2013-06/msg00001.html
+#
+# FIXME: Check (say 2014) whether this is still needed.
+if $BISON_CXX_WORKS; then
+  # See AT_DATA_SOURCE_PROLOGUE.
+  cat >conftest.cc <<EOF
+#include <testsuite.h>
+#include <iostream>
+
+int main ()
+{
+  std::cout << "Works\n";
+}
+EOF
+  $CXX $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS -o conftest conftest.cc
+  case $? in
+   0);;
+   *) BISON_CXX_WORKS="as_fn_error 77 cannot-compile-simple-program";;
+  esac
+  rm -fr conftest*
+fi
 
 # 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"
+  $C_COMPILER_POSIXLY_CORRECT || BISON_C_WORKS=false
+  $CXX_COMPILER_POSIXLY_CORRECT || BISON_CXX_WORKS=false
 fi
 
 # Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known.
@@ -67,7 +102,7 @@
   CC_IS_CXX=1
   CC=$CXX
   NO_WERROR_CFLAGS=$NO_WERROR_CXXFLAGS
-  CFLAGS=$CXXFLAGS
+  CFLAGS="$CXXFLAGS $WNO_DEPRECATED_CXXFLAGS"
   BISON_C_WORKS=$BISON_CXX_WORKS
 else
   CC_IS_CXX=0
@@ -78,26 +113,34 @@
 ## Other.  ##
 ## ------- ##
 
+# Empty if no D compiler was found.
+: ${DC='@DC@'}
+: ${DCFLAGS='@DCFLAGS@'}
+if test x"$DC" = x; then
+  BISON_DC_WORKS=false
+else
+  BISON_DC_WORKS=true
+fi
+
 # Empty if no javac was found
-CONF_JAVAC='@CONF_JAVAC@'
+: ${CONF_JAVAC='@CONF_JAVAC@'}
 
 # Empty if no Java VM was found
-CONF_JAVA='@CONF_JAVA@'
+: ${CONF_JAVA='@CONF_JAVA@'}
 
-# We need egrep.
+# We need egrep and perl.
 : ${EGREP='@EGREP@'}
+: ${PERL='@PERL@'}
 
 # Use simple quotes (lib/quote.c).
 LC_CTYPE=C
 export LC_CTYPE
 
 # Are special link options needed?
-LDFLAGS='@LDFLAGS@'
+: ${LDFLAGS='@LDFLAGS@'}
 
 # Are special libraries needed?
-LIBS="$abs_top_builddir/lib/libbison.a @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.in b/tests/bison.in
index f21b2bc..98be011 100644
--- a/tests/bison.in
+++ b/tests/bison.in
@@ -2,7 +2,7 @@
 # @configure_input@
 # Wrapper around a non installed bison to make it work as an installed one.
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -25,23 +25,43 @@
 BISON_PKGDATADIR=$abs_top_srcdir/data
 export BISON_PKGDATADIR
 
-$PREBISON "$abs_top_builddir/src/bison" ${1+"$@"}
+stderr=tmp-bison.$$
+
+# If stderr is a tty, force --color=yes to simulate --color=auto
+# although we save and modify stderr.
+if test -t 2; then
+    set x --color=yes ${1+"$@"}
+    shift
+fi
+
+# We redirect stderr, which breaks the computation of the terminal
+# screen width.  So export COLUMNS to Bison, hoping for the shell to
+# have defined it.
+: ${COLUMNS=`(tput cols) 2>/dev/null || echo 132`}
+export COLUMNS
+$PREBISON "$abs_top_builddir/src/bison" ${1+"$@"} 2>"$stderr"
 status=$?
 
+# Neutralize path differences in error messages so that check and
+# installcheck behave the same way.
+sed -e "s,$abs_top_builddir/src/,,g" <"$stderr" >&2
+rm -f "$stderr"
+
 # 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)
+    */src/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;' \
+      # We are called by ylwrap which (if it's an old version) 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\.[chy])"}{"src/$1"}g;'       \
+                -e 's{GRAM_Y_TAB_H}{GRAM_SRC_PARSE_GRAM_H}g;'           \
            y.tab.[ch]
     fi
     ;;
diff --git a/tests/c++.at b/tests/c++.at
index a5d8385..84735d8 100644
--- a/tests/c++.at
+++ b/tests/c++.at
@@ -1,7 +1,7 @@
 # Checking the C++ Features.                    -*- Autotest -*-
 
-# Copyright (C) 2004-2005, 2007, 2009-2012 Free Software Foundation,
-# Inc.
+# Copyright (C) 2004-2005, 2007-2015, 2018-2019 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
@@ -19,6 +19,676 @@
 AT_BANNER([[C++ Features.]])
 
 
+## -------------------------- ##
+## C++ Locations Unit Tests.  ##
+## -------------------------- ##
+
+AT_SETUP([C++ Locations Unit Tests])
+
+AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "lalr1.cc"])
+AT_DATA_GRAMMAR([[input.y]],
+[[%code {#include <sstream>}
+%locations
+%debug
+%skeleton "lalr1.cc"
+%code
+{
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+%%
+exp: %empty;
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+
+template <typename T>
+bool
+check (const T& in, const std::string& s)
+{
+  std::stringstream os;
+  os << in;
+  if (os.str () != s)
+    {
+      std::cerr << "fail: " << os.str () << ", expected: " << s << '\n';
+      return false;
+    }
+  return true;
+}
+
+int
+main (void)
+{
+  int fail = 0;
+  ]AT_YYLTYPE[ loc;  fail += check (loc, "1.1");
+                     fail += check (loc + 10, "1.1-10");
+  loc += 10;         fail += check (loc, "1.1-10");
+  loc += -5;         fail += check (loc, "1.1-5");
+                     fail += check (loc - 5, "1.1");
+  loc -= 5;          fail += check (loc, "1.1");
+  // Check that we don't go below.
+  // http://lists.gnu.org/archive/html/bug-bison/2013-02/msg00000.html
+  loc -= 10;         fail += check (loc, "1.1");
+
+  loc.columns (10); loc.lines (10); fail += check (loc, "1.1-11.0");
+  loc.lines (-2);                   fail += check (loc, "1.1-9.0");
+  loc.lines (-10);                  fail += check (loc, "1.1");
+
+  ]AT_YYLTYPE[ loc2 (YY_NULLPTR, 5, 10);
+                   fail += check (loc2, "5.10");
+                   fail += check (loc + loc2, "1.1-5.9");
+  loc += loc2;     fail += check (loc, "1.1-5.9");
+  return !fail;
+}
+]])
+
+AT_FOR_EACH_CXX([
+  AT_FULL_COMPILE([input])
+  AT_PARSER_CHECK([input], 0)
+])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## -------------------------------------- ##
+## C++ Variant-based Symbols Unit Tests.  ##
+## -------------------------------------- ##
+
+# Not checking the grammar, only the variants and variant based
+# symbols.
+
+AT_SETUP([C++ Variant-based Symbols Unit Tests])
+
+AT_KEYWORDS([variant])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" %debug $1])
+# Store strings and integers in a vector of strings.
+AT_DATA_GRAMMAR([list.yy],
+[[%skeleton "lalr1.cc"
+%define api.value.type variant
+%define parse.assert
+%debug
+
+%code top
+{
+  // Get access to stack_symbol_type for the tests.
+# define private public
+}
+%code provides
+{
+  ]AT_YYLEX_DECLARE[
+}
+
+%token <int> INT "int"
+%type <std::vector<int>> exp
+
+%printer { yyo << $$; } <int>
+%printer
+  {
+    for (std::vector<int>::const_iterator i = $$.begin (); i != $$.end (); ++i)
+      {
+        if (i != $$.begin ())
+          yyo << ", ";
+        yyo << *i;
+      }
+  } <std::vector<int>>
+
+%code requires { #include <vector> }
+%code { int yylex (yy::parser::semantic_type* lvalp); }
+
+%%
+exp: "int" { $$.push_back ($1); }
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+
+template <typename Exp, typename Eff>
+void assert_eq (const Exp& exp, const Eff& eff)
+{
+  if (getenv ("DEBUG"))
+    std::cerr << "Assert: " << exp << " == " << eff << '\n';
+  if (exp != eff)
+    std::cerr << "Assertion failed: " << exp << " != " << eff << '\n';
+}
+
+int main()
+{
+  using yy::parser;
+  // symbol_type: construction, accessor.
+  {
+    parser::symbol_type s = parser::make_INT (12);
+    assert_eq (s.value.as<int> (), 12);
+  }
+
+  // symbol_type: move constructor.
+#if 201103L <= YY_CPLUSPLUS
+  {
+    auto s = parser::make_INT (42);
+    auto s2 = std::move (s);
+    assert_eq (s2.value.as<int> (), 42);
+    // Used to crash here, because s was improperly cleared, and
+    // its destructor tried to delete its (moved) value.
+  }
+#endif
+
+  // symbol_type: copy constructor.
+  {
+    parser::symbol_type s = parser::make_INT (51);
+    parser::symbol_type s2 = s;
+    assert_eq (s.value.as<int> (), 51);
+    assert_eq (s2.value.as<int> (), 51);
+  }
+
+  // stack_symbol_type: construction, accessor.
+  {
+#if 201103L <= YY_CPLUSPLUS
+    auto ss = parser::stack_symbol_type(1, parser::make_INT(123));
+#else
+    parser::symbol_type s = parser::make_INT (123);
+    parser::stack_symbol_type ss(1, s);
+#endif
+    assert_eq (ss.value.as<int> (), 123);
+  }
+
+  // Pushing on the stack.
+  // Sufficiently many so that it will be resized.
+  // Probably 3 times (starting at 200).
+  {
+    parser::stack_type st;
+    const int mucho = 1700;
+    const int int_reduction_state = 1; // Read list.output to find it.
+    for (int i = 0; i < mucho; ++i)
+      {
+#if 201103L <= YY_CPLUSPLUS
+        st.push(parser::stack_symbol_type{int_reduction_state,
+                                          parser::make_INT (i)});
+#else
+        parser::symbol_type s = parser::make_INT (i);
+        parser::stack_symbol_type ss (int_reduction_state, s);
+        st.push (ss);
+#endif
+      }
+    for (int i = mucho - 1; 0 <= i; --i)
+      {
+        assert_eq (st[0].value.as<int>(), i);
+        st.pop ();
+      }
+  }
+}
+]])
+
+AT_BISON_CHECK([[-o list.cc list.yy]])
+AT_FOR_EACH_CXX([
+  AT_COMPILE_CXX([list])
+  AT_PARSER_CHECK([list])
+])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+## --------------------------------------------------- ##
+## Multiple occurrences of $n and api.value.automove.  ##
+## --------------------------------------------------- ##
+
+AT_SETUP([Multiple occurrences of $n and api.value.automove])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([input.yy],
+[[%skeleton "lalr1.cc"
+%define api.value.automove
+%token <int> NUMBER "number"
+%type <int> exp
+%%
+exp:
+  "number"          { $$ = $1; $$; }
+| "twice" exp       { $$ = $2 + $2; }
+| "thrice" exp[val] { $$ = $2 + $val + $2; }
+]])
+
+AT_BISON_CHECK([[-fcaret input.yy]], [0], [],
+[[input.yy:16.33-34: warning: multiple occurrences of $2 with api.value.automove [-Wother]
+   16 | | "twice" exp       { $$ = $2 + $2; }
+      |                                 ^~
+input.yy:17.33-36: warning: multiple occurrences of $2 with api.value.automove [-Wother]
+   17 | | "thrice" exp[val] { $$ = $2 + $val + $2; }
+      |                                 ^~~~
+input.yy:17.40-41: warning: multiple occurrences of $2 with api.value.automove [-Wother]
+   17 | | "thrice" exp[val] { $$ = $2 + $val + $2; }
+      |                                        ^~
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ---------- ##
+## Variants.  ##
+## ---------- ##
+
+# Check that the variants are properly supported, including in error
+# recovery.
+
+# AT_TEST([DIRECTIVES])
+# ---------------------
+# Check the support of variants in C++, with the additional DIRECTIVES.
+m4_pushdef([AT_TEST],
+[AT_SETUP([Variants $1])
+
+AT_KEYWORDS([variant])
+
+AT_BISON_OPTION_PUSHDEFS([%debug $1])
+# Store strings and integers in a vector of strings.
+AT_DATA_GRAMMAR([list.y],
+[[%debug
+%define api.value.type variant
+]m4_bpatsubst([$1], [\\n], [
+])[
+
+%code top // code for the .cc file.
+{
+#include <cstdlib> // abort, getenv
+#include <iostream>
+#include <vector>
+#include <sstream>
+#include <string>
+
+  class string
+  {
+    public:
+      string () {}
+
+      string (const std::string& s)
+        : val_(s)
+      {}
+
+      string (const string& s)
+        : val_(s.val_)
+      {}
+
+      string& operator= (const string& s)
+      {
+        val_ = s.val_;
+        return *this;
+      }
+
+#if defined __cplusplus && 201103L <= __cplusplus
+      string (string&& s) noexcept
+        : val_(std::move(s.val_))
+      {
+        s.val_.clear();
+      }
+
+      string& operator= (string&& s)
+      {
+        val_ = std::move(s.val_);
+        s.val_.clear ();
+        return *this;
+      }
+#endif
+
+      friend
+      std::ostream& operator<< (std::ostream& o, const string& s)
+      {
+        return o << s.val_;
+      }
+
+    private:
+      std::string val_;
+  };
+
+  typedef std::vector<string> strings_type;
+
+  namespace yy
+  {
+    // Must be available early, as is used in %destructor.
+    std::ostream&
+    operator<<(std::ostream& o, const strings_type& s)
+    {
+      o << '(';
+      for (strings_type::const_iterator i = s.begin (); i != s.end (); ++i)
+        {
+          if (i != s.begin ())
+            o << ", ";
+          o << *i;
+        }
+      return o << ')';
+    }
+  }
+}
+
+%code // code for the .cc file.
+{
+  namespace yy
+  {
+    static
+    ]AT_YYLEX_PROTOTYPE[;
+
+    // Conversion to string.
+    template <typename T>
+      inline
+      string
+      to_string (const T& t)
+    {
+      std::ostringstream o;
+      o << t;
+      return string (o.str ());
+    }
+  }
+}
+
+%token <::string> TEXT;
+%token <int> NUMBER;
+%token END_OF_FILE 0;
+%token COMMA ","
+
+// Starting with :: to ensure we don't output "<::" which starts by the
+// digraph for the left square bracket.
+%type <::string> item;
+// Using the template type to exercize its parsing.
+%type <::std::vector<string>> list;
+
+%printer { yyo << $$; } <int> <::string> <::std::vector<string>>;
+%destructor { std::cerr << "Destroy: " << $$ << '\n'; } <*>;
+%destructor { std::cerr << "Destroy: \"" << $$ << "\"\n"; } <::string>;
+%%
+
+result:
+  list          { std::cout << $][1 << '\n'; }
+;
+
+list:
+  item          { $$.push_back ($][1); }
+| list "," item { $$ = $][1; $$.push_back ($][3); }
+| list error    { $$ = $][1; }
+;
+
+item:
+  TEXT          { $$ = $][1; }
+| NUMBER        { int v = $][1; if (v == 3) YYERROR; else $$ = to_string (v); }
+;
+%%
+]AT_TOKEN_CTOR_IF([],
+[[#ifdef TWO_STAGE_BUILD
+# define BUILD(Type, Value) build<Type> () = Value
+#else
+# define BUILD(Type, Value) build (Value)
+#endif
+]])[
+#define STAGE_MAX 5
+namespace yy
+{
+  static
+  ]AT_YYLEX_PROTOTYPE[
+  {
+    // The 5 is a syntax error whose recovery requires that we discard
+    // the lookahead.  This tests a regression, see
+    // <http://savannah.gnu.org/support/?108481>.
+    static char const *input = "0,1,2,3,45,6";
+    switch (int stage = *input++)
+    {
+      case 0:]AT_TOKEN_CTOR_IF([[
+        return parser::make_END_OF_FILE (]AT_LOCATION_IF([location ()])[);]],
+[AT_LOCATION_IF([
+        *llocp = location ();])[
+        return parser::token::END_OF_FILE;]])[
+
+      case ',':]AT_TOKEN_CTOR_IF([[
+        return parser::make_COMMA (]AT_LOCATION_IF([location ()])[);]],
+[AT_LOCATION_IF([
+        *llocp = location ();])[
+        return parser::token::COMMA;]])[
+
+      default:
+        stage = stage - '0';
+        if (stage % 2)
+         {]AT_TOKEN_CTOR_IF([[
+           return parser::make_NUMBER (stage]AT_LOCATION_IF([, location ()])[);]], [[
+           lvalp->BUILD (int, stage);]AT_LOCATION_IF([
+           *llocp = location ();])[
+           return parser::token::NUMBER;]])[
+         }
+       else
+         {]AT_TOKEN_CTOR_IF([[
+           return parser::make_TEXT (to_string (stage)]AT_LOCATION_IF([, location ()])[);]], [[
+           lvalp->BUILD (string, to_string (stage));]AT_LOCATION_IF([
+           *llocp = location ();])[
+           return parser::token::TEXT;]])[
+         }
+    }
+  }
+}
+
+]AT_YYERROR_DEFINE[
+]AT_MAIN_DEFINE[
+]])
+
+AT_DATA_SOURCE([[modern.cc]],
+[[#include <iostream>
+int main()
+{
+#if defined __cplusplus && 201103L <= __cplusplus
+  std::cout << "Modern C++: " << __cplusplus << '\n';
+  return 0;
+#else
+  std::cout << "Legac++\n";
+  return 1;
+#endif
+}
+]])
+
+AT_FOR_EACH_CXX([
+AT_FULL_COMPILE([list])
+
+# Are we compiling with modern C++ enabled?
+AT_COMPILE_CXX([modern])
+here=. # Pacify cfg.mk's sc_at_parser_check.
+AT_CHECK([$here/modern], [ignore], [ignore])
+if test $at_status = 0; then
+  modern=true
+else
+  modern=false
+fi
+
+if AT_AUTOMOVE_IF([$modern], [false]); then
+  AT_PARSER_CHECK([list], 0,
+[[(0, 1, 2, 4, 6)
+]],
+[[Destroy: ""
+Destroy: ""
+Destroy: 1
+Destroy: ""
+Destroy: ()
+Destroy: ""
+Destroy: ""
+Destroy: ()
+Destroy: ""
+Destroy: 3
+Destroy: ()
+Destroy: ""
+Destroy: ""
+Destroy: ()
+Destroy: ()
+Destroy: 5
+Destroy: ()
+Destroy: ""
+Destroy: ""
+Destroy: ()
+Destroy: (0, 1, 2, 4, 6)
+]])
+else
+  AT_PARSER_CHECK([list], 0,
+[[(0, 1, 2, 4, 6)
+]],
+[[Destroy: "0"
+Destroy: "0"
+Destroy: 1
+Destroy: "1"
+Destroy: (0)
+Destroy: "2"
+Destroy: "2"
+Destroy: (0, 1)
+Destroy: ""
+Destroy: 3
+Destroy: (0, 1, 2)
+Destroy: "4"
+Destroy: "4"
+Destroy: (0, 1, 2)
+Destroy: (0, 1, 2, 4)
+Destroy: 5
+Destroy: (0, 1, 2, 4)
+Destroy: "6"
+Destroy: "6"
+Destroy: (0, 1, 2, 4)
+Destroy: (0, 1, 2, 4, 6)
+]])
+fi
+])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+AT_TEST([[%skeleton "lalr1.cc"]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %define api.value.automove]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %locations]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %code {\n#define TWO_STAGE_BUILD\n}]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %define api.token.constructor]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %define api.token.constructor %define api.token.prefix {TOK_}]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %define api.token.constructor %define api.token.prefix {TOK_} %locations]])
+AT_TEST([[%skeleton "lalr1.cc" %define parse.assert %define api.token.constructor %define api.token.prefix {TOK_} %locations %define api.value.automove]])
+
+m4_popdef([AT_TEST])
+
+
+
+## ------------------------------------ ##
+## Variants and Typed Midrule Actions.  ##
+## ------------------------------------ ##
+
+AT_SETUP([Variants and Typed Midrule Actions])
+
+# See http://lists.gnu.org/archive/html/bug-bison/2017-06/msg00000.html.
+#
+# Check that typed midrule actions behave properly (pre-construction
+# of $$ before the user action, support of %printer and %destructor,
+# etc.).
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%skeleton "lalr1.cc"
+%defines
+
+%debug
+%define parse.assert
+%define api.value.type variant
+%define api.token.constructor
+%define parse.error verbose
+
+%code
+{
+  #include <iostream>
+  namespace yy
+  {
+    static yy::parser::symbol_type yylex();
+  }
+}
+
+%token <int> NUMBER;
+%type <int> expr;
+%token EOI 0;
+%printer { yyo << $$; } <int>;
+%destructor { std::cerr << "destroy: " << $$ << '\n'; } <int>
+%%
+expr:
+  NUMBER { $$ = $1 * 10; }
+| expr <int>{ $$ = 20; } NUMBER
+  {
+    std::cerr << "expr: " << $1 << ' ' << $2 << ' ' << $3 << '\n';
+    $$ = 40;
+  }
+;
+
+%%
+namespace yy
+{
+  parser::symbol_type yylex()
+  {
+    static int loc = 0;
+    switch (loc++)
+      {
+      case 0:
+        return parser::make_NUMBER (1);
+      case 1:
+        return parser::make_NUMBER (30);
+      default:
+        return parser::make_EOI ();
+      }
+  }
+
+  void parser::error(const std::string& message)
+  {
+    std::cerr << message << '\n';
+  }
+}
+
+int main()
+{
+  yy::parser p;
+  p.set_debug_level (1);
+  return p.parse();
+}
+]])
+
+AT_FOR_EACH_CXX([
+AT_FULL_COMPILE([[input]])
+# This used to print "Discarding 'a'." again at the end.
+AT_PARSER_CHECK([[input]], [[0]], [[]],
+[[Starting parse
+Entering state 0
+Reading a token: Next token is token NUMBER (1)
+Shifting token NUMBER (1)
+Entering state 1
+Reducing stack by rule 1 (line 34):
+   $1 = token NUMBER (1)
+-> $$ = nterm expr (10)
+destroy: 1
+Stack now 0
+Entering state 2
+Reading a token: Next token is token NUMBER (30)
+Reducing stack by rule 2 (line 35):
+-> $$ = nterm @1 (20)
+Stack now 2 0
+Entering state 4
+Next token is token NUMBER (30)
+Shifting token NUMBER (30)
+Entering state 5
+Reducing stack by rule 3 (line 35):
+   $1 = nterm expr (10)
+   $2 = nterm @1 (20)
+   $3 = token NUMBER (30)
+expr: 10 20 30
+-> $$ = nterm expr (40)
+destroy: 30
+destroy: 20
+destroy: 10
+Stack now 0
+Entering state 2
+Reading a token: Next token is token EOI ()
+Shifting token EOI ()
+Entering state 3
+Cleanup: popping token EOI ()
+Cleanup: popping nterm expr (40)
+destroy: 40
+]])
+])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
 ## ----------------------- ##
 ## Doxygen Documentation.  ##
 ## ----------------------- ##
@@ -27,22 +697,23 @@
 [m4_case([$1],
          [Public],  [m4_pushdef([AT_DOXYGEN_PRIVATE], [NO])],
          [Private], [m4_pushdef([AT_DOXYGEN_PRIVATE], [YES])],
-	 [m4_fatal([invalid argument: $1])])
+         [m4_fatal([invalid argument: $1])])
 AT_SETUP([Doxygen $1 Documentation])
 
-AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" %locations])
 AT_DATA([input.yy],
-[[%skeleton "lalr1.cc"
+[[%require "3.2"
+%skeleton "lalr1.cc"
 %locations
-%debug
 %defines
+%debug
 %%
-exp:;
+exp: %empty;
 %%
 ]AT_YYERROR_DEFINE[
 ]])
 
-AT_BISON_CHECK([-o input.cc input.yy], 0)
+AT_BISON_CHECK([-o input.cc input.yy])
 
 AT_DATA([Doxyfile],
 [# The PROJECT_NAME tag is a single word (or a sequence of words
@@ -89,7 +760,7 @@
 EXTRACT_STATIC         = AT_DOXYGEN_PRIVATE
 ])
 
-AT_CHECK([doxygen --version || exit 77], 0, ignore)
+AT_REQUIRE([doxygen --version], 0, ignore)
 AT_CHECK([doxygen], 0, [], [ignore])
 
 AT_BISON_OPTION_POPDEFS
@@ -101,28 +772,28 @@
 AT_CHECK_DOXYGEN([Public])
 AT_CHECK_DOXYGEN([Private])
 
+
 ## ------------ ##
 ## Namespaces.  ##
 ## ------------ ##
 
-# AT_CHECK_NAMESPACE(NAMESPACE-DECL, [COMPILE-ERROR])
-# ---------------------------------------------------
+# AT_TEST(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]],
+m4_pushdef([AT_TEST],
+[AT_BISON_OPTION_PUSHDEFS([%language "C++" %define api.namespace {$1}])
+AT_DATA_GRAMMAR([[input.yy]],
 [[%language "C++"
-%defines
-%define namespace "]$1["
+%define api.namespace {]$1[}
 %union { int i; }
 %define global_tokens_and_yystype
+%locations
 
 %code {
   // YYSTYPE contains a namespace reference.
-  int yylex (YYSTYPE *lval) {
+  int yylex (YYSTYPE *lval, const ]$1[::parser::location_type*) {
     lval->i = 3;
     return 0;
   }
@@ -138,85 +809,329 @@
 ]$1[::parser::error (const ]$1[::parser::location_type &loc,
                      const std::string &msg)
 {
-  std::cerr << "At " << loc << ": " << msg << std::endl;
+  std::cerr << "At " << loc << ": " << msg << '\n';
 }
 
-int
-main (void)
-{
-  ]$1[::parser p;
-  return p.parse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
-AT_BISON_CHECK([[-o input.cc input.y]])
+
+AT_BISON_CHECK([[-o input.cc input.yy]])
 
 m4_if([$#], [1],
-[AT_COMPILE_CXX([[input]], [[input.cc]])
-AT_PARSER_CHECK([[./input]])])
-
+[AT_FOR_EACH_CXX([
+  AT_COMPILE_CXX([[input]])
+  AT_PARSER_CHECK([[input]])])])
+AT_BISON_OPTION_POPDEFS
 ])
 
 AT_SETUP([[Relative namespace references]])
-AT_CHECK_NAMESPACE([[foo]])
-AT_CHECK_NAMESPACE([[foo::bar]])
-AT_CHECK_NAMESPACE([[foo::bar::baz]])
+AT_TEST([[foo]])
+AT_TEST([[foo::bar]])
+AT_TEST([[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_TEST([[::foo]])
+AT_TEST([[::foo::bar]])
+AT_TEST([[::foo::bar::baz]])
+AT_TEST([[@tb@::foo]])
+AT_TEST([[  @tb@ ::foo::bar]])
+AT_TEST([[  ::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_TEST([[:foo:bar]], [[-]])
+AT_TEST([[foo: :bar]], [[-]])
+# This one is interesting because '[3]' is encoded as '@<:@3@:>@', which
+# contains single occurrences of ':'.
+AT_TEST([[foo[3]::bar::baz]], [[-]])
+AT_TEST([[foo::bar,baz]], [[-]])
+AT_TEST([[foo::bar::(baz /* Pacify Emacs ) */]], [[-]])
 AT_CLEANUP
 
+m4_popdef([AT_TEST])
+
+
+## -------------------------------------- ##
+## Syntax error discarding no lookahead.  ##
+## -------------------------------------- ##
+
+# After a syntax error, lalr1.cc used to not check whether there
+# actually is a lookahead before discarding the lookahead.  As a result,
+# it mistakenly invoked the destructor for the previous lookahead.
+
+AT_SETUP([[Syntax error discarding no lookahead]])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%skeleton "lalr1.cc"
+
+%code {
+  #include <string>
+  int yylex (yy::parser::semantic_type *);
+  #define USE(Args)
+}
+
+%define parse.error verbose
+
+%nonassoc 'a' ;
+
+%destructor {
+  std::cerr << "Discarding 'a'.\n";
+} 'a'
+
+%%
+
+start: error-reduce consistent-error 'a' { USE ($3); };
+
+error-reduce:
+  'a' 'a' consistent-error 'a' { USE (($1, $2, $4)); }
+| 'a' error { std::cerr << "Reducing 'a'.\n"; USE ($1); }
+;
+
+consistent-error:
+  'a'
+| %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 ;
+
+%%
+
+int
+yylex (yy::parser::semantic_type *)
+{
+  static char const *input = "aa";
+  return *input++;
+}
+
+void
+yy::parser::error (const std::string &m)
+{
+  std::cerr << m << '\n';
+}
+
+]AT_MAIN_DEFINE[
+]])
+
+AT_FOR_EACH_CXX([
+AT_FULL_COMPILE([[input]])
+# This used to print "Discarding 'a'." again at the end.
+AT_PARSER_CHECK([[input]], [[1]], [[]],
+[[syntax error
+Discarding 'a'.
+Reducing 'a'.
+]])
+])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## --------------------------- ##
+## Syntax error as exception.  ##
+## --------------------------- ##
+
+# AT_TEST([BISON-DIRECTIVES = ''])
+m4_pushdef([AT_TEST],
+[AT_SETUP([[Syntax error as exception: $1]])
+
+AT_BISON_OPTION_PUSHDEFS([$1 %debug])
+
+AT_DATA_GRAMMAR([[input.yy]],
+[[$1
+%defines
+
+%code
+{
+  #include <cstdlib>
+  int yylex (yy::parser::semantic_type *);
+}
+
+%define parse.error verbose
+%define parse.trace
+%%
+
+start: with-recovery | '!' without-recovery;
+
+with-recovery:
+  %empty
+| with-recovery item
+| with-recovery error   { std::cerr << "caught error\n"; }
+;
+
+without-recovery:
+  %empty
+| without-recovery item
+;
+
+item:
+  'a'
+| 's'
+  {
+    throw syntax_error ("invalid expression");
+  }
+
+%%
+
+void
+yy::parser::error (const std::string &m)
+{
+  std::cerr << "error: " << m << '\n';
+}
+]AT_MAIN_DEFINE[
+]])
+
+# Another file to check syntax_error's linkage.
+AT_DATA_SOURCE([scan.cc],
+[[#include <cstdio>  // getchar
+#include "input.hh"
+
+// 'a': valid item, 's': syntax error, 'l': lexical error.
+int
+yylex (yy::parser::semantic_type *lval)
+{
+  switch (int res = getchar ())
+  {
+    // Don't choke on echo's \n.
+    case '\n':
+      return yylex (lval);
+    case 'l':
+      throw yy::parser::syntax_error ("invalid character");
+    default:
+      return res;
+  }
+}
+]])
+
+AT_BISON_CHECK([[-o input.cc input.yy]])
+
+AT_FOR_EACH_CXX([
+  AT_LANG_COMPILE([[input]], [[input.cc scan.cc]])
+
+  # Leave enough valid tokens to make sure we recovered from the
+  # previous error, otherwise we might hide some error messages
+  # (discarded during error recoevery).
+  echo "asaaalaa" >in
+  AT_PARSER_CHECK([[input < in]], [[0]], [[]],
+[[error: invalid expression
+caught error
+error: invalid character
+caught error
+]])
+
+  echo "!as" >in
+  AT_PARSER_CHECK([[input < in]], [1], [],
+[[error: invalid expression
+]])
+
+  echo "!al" >in
+  AT_PARSER_CHECK([[input < in]], [1], [],
+[[error: invalid character
+]])
+
+]) # AT_FOR_EACH_CXX
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+AT_TEST([%skeleton "lalr1.cc"])
+AT_TEST([%skeleton "glr.cc"])
+
+m4_popdef([AT_TEST])
+
+
 
 ## ------------------ ##
 ## Exception safety.  ##
 ## ------------------ ##
 
-AT_SETUP([[Exception safety]])
+# AT_TEST([BISON-DIRECTIVES = ''], [WITH-RECOVERY = "with"])
+# ----------------------------------------------------------
+# Check that no object is leaked when exceptions are thrown.
+# WITH-RECOVERY = "with" or "without".
+m4_pushdef([AT_TEST],
+[AT_SETUP([[Exception safety $2 error recovery $1]])
 
-AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" $1])
 
 AT_DATA_GRAMMAR([[input.yy]],
 [[%skeleton "lalr1.cc"
-%defines // FIXME: Mandated in 2.6.
 %debug
-%error-verbose
-
+%define parse.error verbose
+$1
 %code requires
 {
   #include <cassert>
   #include <cstdlib> // size_t and getenv.
   #include <iostream>
-  #include <list>
+  #include <set>
+  #include <string>
 
   bool debug = false;
 
-  /// A class that counts its number of instances.
+  /// A class that tracks its instances.
   struct Object
   {
-    typedef std::list<const Object*> objects;
-    static objects instances;
     char val;
 
+    Object ()
+      : val ('?')
+    {
+      log (this, "Object::Object");
+      Object::instances.insert (this);
+    }
+
+    Object (const Object& that)
+      : val (that.val)
+    {
+      log (this, "Object::Object");
+      Object::instances.insert (this);
+    }
+
+    Object (char v)
+      : val (v)
+    {
+      log (this, "Object::Object");
+      Object::instances.insert (this);
+    }
+
+    ~Object ()
+    {
+      log (this, "Object::~Object");
+      objects::iterator i = instances.find (this);
+      // Make sure this object is alive.
+      assert (i != instances.end ());
+      Object::instances.erase (i);
+    }
+
+    Object& operator= (const Object& that)
+    {
+      val = that.val;
+      return *this;
+    }
+
+    Object& operator= (char v)
+    {
+      val = v;
+      return *this;
+    }
+
+    // Static part.
+    typedef std::set<const Object*> objects;
+    static objects instances;
+
     static bool
     empty ()
     {
-      return instances.empty();
+      return instances.empty ();
     }
 
     static void
@@ -236,22 +1151,9 @@
               std::cerr << sep << *i;
               sep = ", ";
             }
-          std::cerr << " }" << std::endl;
+          std::cerr << " }\n";
         }
     }
-
-    Object (char v)
-      : val (v)
-    {
-      instances.push_back(this);
-      log (this, "Object::Object");
-    }
-
-    ~Object ()
-    {
-      instances.remove(this);
-      log (this, "Object::~Object");
-    }
   };
 }
 
@@ -265,17 +1167,21 @@
   static char const *input;
 }
 
+]AT_VARIANT_IF([[
+%printer
+{
+  yyo << &$$ << " '" << $$.val << '\'';
+  if ($$.val == 'p')
+    throw std::runtime_error ("printer");
+} <Object>;
+
+%token <Object> 'a' 'E' 'e' 'p' 'R' 's' 'T'
+%type  <Object> list item
+]], [[
 %union
 {
   Object *obj;
 }
-
-%initial-action
-{
-  if (strchr (input, 'i'))
-    throw std::runtime_error ("initial-action");
-}
-
 %destructor { delete $$; } <obj>;
 %printer
 {
@@ -286,27 +1192,36 @@
 
 %token <obj> 'a' 'E' 'e' 'p' 'R' 's' 'T'
 %type  <obj> list item
+]])[
+
+%initial-action
+{
+  if (strchr (input, 'i'))
+    throw std::runtime_error ("initial-action");
+}
 
 %%
 
-start: list { delete $1; };
+start: list {]AT_VARIANT_IF([], [ delete $][1]; )[};
 
 list:
-  item       { $$ = $1; }
-| item list  { $$ = $1; delete $2; } // Right recursion to load the stack.
+  item       { $$ = $][1; }
+  // Right recursion to load the stack.
+| item list  { $$ = $][1; ]AT_VARIANT_IF([], [delete $][2]; )[}
 ;
 
 item:
-  'a'  { $$ = $1; }
-| 'e'  { YYUSE ($$); YYUSE($1); error (location_type(), "syntax error"); }
+  'a'     { $$ = $][1; }
+| 'e'     { YYUSE ($$); YYUSE ($][1); error ("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; }
+| 'E' 'a' { YYUSE ($][1); $$ = $][2; }
+| 'R'     { ]AT_VARIANT_IF([], [$$ = YY_NULLPTR; delete $][1]; )[YYERROR; }
+| 'p'     { $$ = $][1; }
+| 's'     { $$ = $][1; throw std::runtime_error ("reduction"); }
+| 'T'     { ]AT_VARIANT_IF([], [$$ = YY_NULLPTR; delete $][1]; )[YYABORT; }
+]m4_if([$2], [with],
+[[| error   { $$ = ]AT_VARIANT_IF([], [new ])[Object ('R'); yyerrok; }]])[
 ;
 %%
 
@@ -321,23 +1236,24 @@
   // 'R': call YYERROR in the action
   // 's': reduction throws.
   // 'T': call YYABORT in the action
-  switch (int res = *input++)
+  switch (char res = *input++)
   {
-    case 'l':
-      throw std::runtime_error ("yylex");
-    default:
-      lvalp->obj = new Object (res);
-      // Fall through.
-    case 0:
-      return res;
+  case 'l':
+    throw std::runtime_error ("yylex");
+  default:
+    lvalp->]AT_VARIANT_IF([build<Object> (res)],
+                          [obj = new Object (res)])[;
+    goto zero;
+  zero:
+  case 0:
+    return res;
   }
 }
 
 /* A C++ error reporting function.  */
 void
-yy::parser::error (const location_type& l, const std::string& m)
+yy::parser::error (const std::string& m)
 {
-  YYUSE (l);
   throw std::runtime_error (m);
 }
 
@@ -350,7 +1266,7 @@
       input = argv[1];
       break;
     case 3:
-      assert (!strcmp (argv[1], "--debug"));
+      assert (std::string(argv[1]) == "--debug");
       debug = 1;
       input = argv[2];
       break;
@@ -368,49 +1284,258 @@
   }
   catch (const std::exception& e)
   {
-    std::cerr << "exception caught: " << e.what () << std::endl;
+    std::cerr << "exception caught: " << e.what () << '\n';
   }
   catch (...)
   {
-    std::cerr << "unknown exception caught" << std::endl;
+    std::cerr << "unknown exception caught\n";
   }
-  Object::log (YY_NULL, "end");
+  Object::log (YY_NULLPTR, "end");
   assert (Object::empty());
   return res;
 }
 ]])
 AT_BISON_CHECK([[-o input.cc --report=all input.yy]])
+
+AT_FOR_EACH_CXX([
 AT_COMPILE_CXX([[input]])
 
-AT_PARSER_CHECK([[./input aaaas]], [[2]], [[]],
+AT_PARSER_CHECK([[input aaaas]], [[2]], [[]],
 [[exception caught: reduction
 ]])
 
-AT_PARSER_CHECK([[./input aaaal]], [[2]], [[]],
+AT_PARSER_CHECK([[input aaaal]], [[2]], [[]],
 [[exception caught: yylex
 ]])
 
-AT_PARSER_CHECK([[./input i]], [[2]], [[]],
+AT_PARSER_CHECK([[input i]], [[2]], [[]],
 [[exception caught: initial-action
 ]])
 
-AT_PARSER_CHECK([[./input aaaap]])
+AT_PARSER_CHECK([[input aaaap]])
 
-AT_PARSER_CHECK([[./input --debug aaaap]], [[2]], [[]], [[stderr]])
+AT_PARSER_CHECK([[input --debug aaaap]], [[2]], [[]], [[stderr]])
 AT_CHECK([[grep '^exception caught: printer$' stderr]], [], [ignore])
 
-AT_PARSER_CHECK([[./input aaaae]], [[2]], [[]],
+AT_PARSER_CHECK([[input aaaae]], [[2]], [[]],
 [[exception caught: syntax error
 ]])
 
-AT_PARSER_CHECK([[./input aaaaE]], [[2]], [[]],
+AT_PARSER_CHECK([[input aaaaE]], [[2]], [[]],
 [[exception caught: syntax error, unexpected $end, expecting 'a'
 ]])
 
-AT_PARSER_CHECK([[./input aaaaT]], [[1]])
+AT_PARSER_CHECK([[input aaaaT]], [[1]])
 
-# There is error-recovery, so exit success.
-AT_PARSER_CHECK([[./input aaaaR]], [[0]])
+AT_PARSER_CHECK([[input aaaaR]], [m4_if([$2], [with], [0], [1])])
+])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])
+
+AT_TEST([], [with])
+AT_TEST([], [without])
+AT_TEST([%define api.value.type variant], [with])
+AT_TEST([%define api.value.type variant], [without])
+
+m4_popdef([AT_TEST])
+
+## ------------------------------------- ##
+## C++ GLR parser identifier shadowing.  ##
+## ------------------------------------- ##
+
+AT_SETUP([[C++ GLR parser identifier shadowing]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([input.yy], [
+%skeleton "glr.cc"
+
+%union
+{
+  int ival;
+}
+
+%token <ival> ZERO;
+
+%code
+{
+  int yylex (yy::parser::semantic_type *lvalp);
+}
+
+%%
+exp: ZERO
+
+%%
+
+int yylex (yy::parser::semantic_type *lvalp)
+{
+  // Note: this argument is unused, but named on purpose.  There used to be a
+  // bug with a macro that erroneously expanded this identifier to
+  // yystackp->yyval.
+  YYUSE (lvalp);
+  return yy::parser::token::ZERO;
+}
+
+void yy::parser::error (std::string const&)
+{}
+
+int main ()
+{}
+])
+
+AT_BISON_CHECK([[-o input.cc input.yy]])
+AT_FOR_EACH_CXX([AT_COMPILE_CXX([[input]])])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ------------------ ##
+## Shared locations.  ##
+## ------------------ ##
+
+AT_SETUP([Shared locations])
+
+# AT_TEST([PREFIX], [DIRECTIVES])
+# -------------------------------
+# Generate and compile to *.o.  Make sure there is no (allowed) YY*
+# nor yy* identifiers in the header after applying api.prefix.  Check
+# that headers can be compiled by a C++ compiler.
+m4_pushdef([AT_TEST],
+[AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" %define api.namespace {$1} $2])
+AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])
+AT_DATA_GRAMMAR([$1.yy],
+[[%skeleton "lalr1.cc"
+%define api.namespace {$1}
+$2
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+exp: '0';
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["0"])[
+]])
+
+AT_BISON_CHECK([-fcaret -o $1.cc $1.yy])
+AT_LANG_COMPILE([$1.o], [], [-Iinclude])
+
+AT_LOC_POPDEF
+AT_BISON_OPTION_POPDEFS
+])
+
+mkdir -p include/ast
+
+AT_TEST([x1],
+        [%defines
+         %locations
+         %define api.location.file "include/ast/loc.hh"
+         %define api.location.include {<ast/loc.hh>}])
+
+# Check the CPP guard and Doxyen comments.
+AT_CHECK([sed -ne '/INCLUDED/p;/\\file/{p;n;p;}' include/ast/loc.hh], [],
+[[ ** \file ast/loc.hh
+ ** Define the x1::location class.
+#ifndef YY_YY_AST_LOC_HH_INCLUDED
+# define YY_YY_AST_LOC_HH_INCLUDED
+#endif // !YY_YY_AST_LOC_HH_INCLUDED
+]])
+
+AT_TEST([x2],
+        [%defines
+         %locations
+         %code requires {#include <ast/loc.hh>}
+         %define api.location.type {x1::location}])
+
+m4_popdef([AT_TEST])
+
+AT_DATA([main.cc],
+[AT_DATA_SOURCE_PROLOGUE
+[#include "x1.hh"
+#include "x2.hh"
+
+#define RUN(S)                                  \
+  do {                                          \
+    S::parser parser;                           \
+    int res = parser.parse();                   \
+    if (res)                                    \
+      std::cerr << #S": " << res << '\n';       \
+  } while (false)
+
+int
+main (void)
+{
+  RUN(x1);
+  RUN(x2);
+}
+]])# main.cc
+
+
+AT_COMPILE_CXX([parser], [[x[12].o main.cc]], [-Iinclude])
+AT_PARSER_CHECK([parser], [0])
+
+AT_CLEANUP
+
+
+
+## ---------------- ##
+## Default action.  ##
+## ---------------- ##
+
+# In C++ we generate explicitly the code for the default action
+# instead of simply copying blindly the semantic value buffer.  This
+# is important when copying raw memory is not enough, as exemplified
+# by move-only types.
+
+AT_SETUP([Default action])
+AT_KEYWORDS([action])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"
+%define api.token.constructor
+%define api.value.type variant])
+
+AT_DATA_GRAMMAR([test.y],
+[[%code requires {
+#include <memory> // unique_ptr
+}
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+]AT_BISON_OPTIONS[
+%define api.value.automove
+%token ONE TWO EOI 0
+%type <std::unique_ptr<int>> ONE TWO one two one.opt two.opt
+%%
+exp: one.opt two.opt { std::cout << *$][1 << ", " << *$][2 << '\n'; }
+one.opt: one | %empty {}
+two.opt: two | %empty {}
+one: ONE
+two: TWO
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["12"],
+[ if (res == '1')
+    return yy::parser::make_ONE (std::make_unique<int> (10));
+  else if (res == '2')
+    return yy::parser::make_TWO (std::make_unique<int> (20));
+  else
+    return yy::parser::make_EOI ();
+])[
+]AT_MAIN_DEFINE[
+]])
+
+AT_LANG_FOR_EACH_STD([
+  AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; continue])
+  AT_FULL_COMPILE([[test]], [], [], [], [-fcaret])
+  AT_PARSER_CHECK([[test]], 0, [[10, 20
+]])
+])
 
 AT_BISON_OPTION_POPDEFS
 
diff --git a/tests/calc.at b/tests/calc.at
index f72836e..4d15b73 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -1,6 +1,6 @@
 # Simple calculator.                         -*- Autotest -*-
 
-# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2015, 2018-2019 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
@@ -19,50 +19,29 @@
 ## Compile the grammar described in the documentation.  ##
 ## ---------------------------------------------------- ##
 
+# -------------- #
+# AT_CALC_MAIN.  #
+# -------------- #
 
-# ------------------------- #
-# Helping Autotest macros.  #
-# ------------------------- #
+m4_pushdef([AT_CALC_MAIN],   [AT_LANG_DISPATCH([$0], $@)])
 
+m4_define([AT_CALC_MAIN(c)],
+[[#include <assert.h>
+#include <unistd.h>
 
-# _AT_DATA_CALC_Y($1, $2, $3, [BISON-DIRECTIVES])
-# -----------------------------------------------
-# 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
-
-m4_pushdef([AT_CALC_MAIN],
-[#include <assert.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else
-# undef alarm
-# define alarm(seconds) /* empty */
-#endif
-
-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_CXX_IF([[
+namespace
 {
-  ]AT_NAME_PREFIX[::parser parser]AT_PARAM_IF([ (result, count)])[;
-#if ]AT_API_PREFIX[DEBUG
-  parser.set_debug_level (1);
-#endif
-  return parser.parse ();
+  /* 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 ();
+  }
 }
 ]])[
 
@@ -77,10 +56,12 @@
   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);
+  /* 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 was enough for regular users,
+     but the Hydra build farm, which is heavily loaded needs more.  */
+
+  alarm (200);
 
   if (argc == 2)
     input = fopen (argv[1], "r");
@@ -93,24 +74,44 @@
       return 3;
     }
 
-]AT_SKEL_CC_IF([], [m4_bmatch([$4], [%debug],
-[  ]AT_NAME_PREFIX[debug = 1;])])[
+]AT_CXX_IF([], [AT_DEBUG_IF([  ]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);
+  assert (global_result == result); (void) result;
+  assert (global_count == count);   (void) count;
   return status;
 }
 ]])
 
+m4_copy([AT_CALC_MAIN(c)], [AT_CALC_MAIN(c++)])
 
-m4_pushdef([AT_CALC_LEX],
+m4_define([AT_CALC_MAIN(d)],
+[[int main (string[] args)
+{
+  semantic_value result = 0;
+  int count = 0;
+
+  File input = args.length == 2 ? File (args[1], "r") : stdin;
+  auto l = calcLexer (input);
+  auto p = new YYParser (l);
+  return !p.parse ();
+}
+]])
+
+
+
+# --------------- #
+# AT_CALC_YYLEX.  #
+# --------------- #
+
+m4_pushdef([AT_CALC_YYLEX],   [AT_LANG_DISPATCH([$0], $@)])
+
+
+m4_define([AT_CALC_YYLEX(c)],
 [[#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;
@@ -138,35 +139,28 @@
 {
   ]AT_USE_LEX_ARGS[;
 ]AT_LOCATION_IF([
-  /* Wrong when C == `\n'. */
+  /* Wrong when C == '\n'. */
   AT_LOC = last_yylloc;
 ])[
   ungetc (c, input);
 }
 
 static int
-read_signed_integer (]AT_YYLEX_FORMALS[)
+read_integer (]AT_YYLEX_FORMALS[)
 {
   int c = get_char (]AT_YYLEX_ARGS[);
-  int sign = 1;
-  int n = 0;
+  int res = 0;
 
   ]AT_USE_LEX_ARGS[;
-  if (c == '-')
-    {
-      c = get_char (]AT_YYLEX_ARGS[);
-      sign = -1;
-    }
-
   while (isdigit (c))
     {
-      n = 10 * n + (c - '0');
+      res = 10 * res + (c - '0');
       c = get_char (]AT_YYLEX_ARGS[);
     }
 
   unget_char (]AT_YYLEX_PRE_ARGS[ c);
 
-  return sign * n;
+  return res;
 }
 
 
@@ -179,7 +173,7 @@
 ]AT_YYLEX_PROTOTYPE[
 {
   int c;
-  /* Skip current token, then white spaces.  */
+  /* Skip white spaces.  */
   do
     {
 ]AT_LOCATION_IF(
@@ -189,43 +183,176 @@
     }
   while ((c = get_char (]AT_YYLEX_ARGS[)) == ' ' || c == '\t');
 
-  /* process numbers   */
-  if (c == '.' || isdigit (c))
+  /* Process numbers.   */
+  if (isdigit (c))
     {
       unget_char (]AT_YYLEX_PRE_ARGS[ c);
-      ]AT_VAL[.ival = read_signed_integer (]AT_YYLEX_ARGS[);
-      return NUM;
+      ]AT_VAL[.ival = read_integer (]AT_YYLEX_ARGS[);
+      return ]AT_TOKEN_PREFIX[NUM;
     }
 
   /* Return end-of-file.  */
   if (c == EOF)
-    return CALC_EOF;
+    return ]AT_TOKEN_PREFIX[CALC_EOF;
 
   /* Return single chars. */
   return c;
 }
 ]])
 
+m4_copy([AT_CALC_YYLEX(c)], [AT_CALC_YYLEX(c++)])
+
+m4_define([AT_CALC_YYLEX(d)],
+[[import std.range.primitives;
+import std.stdio;
+
+auto calcLexer(R)(R range)
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  return new CalcLexer!R(range);
+}
+
+auto calcLexer (File f)
+{
+  import std.algorithm : map, joiner;
+  import std.utf : byDchar;
+
+  return f.byChunk(1024)        // avoid making a syscall roundtrip per char
+          .map!(chunk => cast(char[]) chunk) // because byChunk returns ubyte[]
+          .joiner               // combine chunks into a single virtual range of char
+          .calcLexer;           // forward to other overload
+}
+
+class CalcLexer(R) : Lexer
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  R input;
+
+  this(R r) {
+    input = r;
+  }
+
+  ]AT_YYERROR_DEFINE[
+
+  YYSemanticType semanticVal_;]AT_LOCATION_IF([[
+  YYLocation location = new YYLocation;
+
+  public final @property YYPosition startPos()
+  {
+    return location.begin;
+  }
+
+  public final @property YYPosition endPos()
+  {
+    return location.end;
+  }
+]])[
+  public final @property YYSemanticType semanticVal()
+  {
+    return semanticVal_;
+  }
+
+  int parseInt ()
+  {
+    auto res = 0;
+    import std.uni : isNumber;
+    while (input.front.isNumber)
+      {
+        res = res * 10 + (input.front - '0');]AT_LOCATION_IF([[
+        location.end.column += 1;]])[
+        input.popFront;
+      }
+    return res;
+  }
+
+  int yylex ()
+  {]AT_LOCATION_IF([[
+    location.begin = location.end;]])[
+
+    import std.uni : isWhite, isNumber;
+
+    // Skip initial spaces
+    while (!input.empty && input.front != '\n' && isWhite (input.front))
+      {
+        input.popFront;]AT_LOCATION_IF([[
+        location.begin.column += 1;
+        location.end.column += 1;]])[
+      }
+
+    // Handle EOF.
+    if (input.empty)
+      return YYTokenType.EOF;
+
+    // Numbers.
+    if (input.front.isNumber)
+      {
+        semanticVal_.ival = parseInt;
+        return YYTokenType.NUM;
+      }
+
+    // Individual characters
+    auto c = input.front;]AT_LOCATION_IF([[
+    if (c == '\n')
+      {
+        location.end.line += 1;
+        location.end.column = 1;
+      }
+    else
+      location.end.column += 1;]])[
+    input.popFront;
+    return c;
+  }
+}
+]])
+
+
+# -------------- #
+# AT_DATA_CALC.  #
+# -------------- #
+
+
+# _AT_DATA_CALC_Y($1, $2, $3, [BISON-DIRECTIVES])
+# -----------------------------------------------
+# 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_YYLEX 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])[
+]$4[
+]AT_CXX_IF([%define global_tokens_and_yystype])[
+]AT_D_IF([[
+%code imports {
+  alias semantic_value = int;
+}
+]], [[
 %code requires
 {
-]AT_LOCATION_TYPE_IF([[
-# include <iostream>
-  struct Point
+]AT_LOCATION_TYPE_SPAN_IF([[
+  typedef struct
   {
     int l;
     int c;
-  };
+  } Point;
 
-  struct Span
+  typedef struct
   {
     Point first;
     Point last;
-  };
+  } Span;
 
 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
   do                                                                    \
@@ -238,21 +365,29 @@
       {                                                                 \
         (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;      \
       }                                                                 \
-  while (false)
+  while (0)
+
+]AT_C_IF(
+[[#include <stdio.h>
+void location_print (FILE *o, Span s);
+#define LOCATION_PRINT location_print
+]])[
 
 ]])[
   /* 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>;
+%printer { ]AT_CXX_IF([[yyo << $$]],
+                      [[fprintf (yyo, "%d", $$)]])[; } <ival>;
 
+]AT_D_IF([], [[
 %code provides
 {
   #include <stdio.h>
@@ -264,34 +399,35 @@
 
 %code
 {
-#include <assert.h>
-#include <string.h>
-#define USE(Var)
+  #include <assert.h>
+  #include <string.h>
+  #define USE(Var)
 
-FILE *input;
-static int power (int base, int exponent);
+  FILE *input;
+  static int power (int base, int exponent);
 
-]AT_YYERROR_DECLARE[
-]AT_YYLEX_DECLARE_EXTERN[
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE_EXTERN[
 }
+]])[
 
-]AT_SKEL_CC_IF([AT_LOCATION_TYPE_IF([[
+]AT_LOCATION_TYPE_SPAN_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 */
-%right '^'    /* exponentiation        */
+%precedence NEG /* negation--unary minus */
+%right '^'      /* exponentiation        */
 
 /* Grammar follows */
 %%
@@ -302,15 +438,17 @@
 
 line:
   '\n'
-| exp '\n'           { ]AT_PARAM_IF([*result = global_result = $1], [USE ($1)])[; }
+| exp '\n'           { ]AT_PARAM_IF([*result = global_result = $1;], [AT_D_IF([], [USE ($1);])])[ }
 ;
 
 exp:
-  NUM                { $$ = $1;             }
+  NUM
 | exp '=' exp
   {
-    if ($1 != $3)
-      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);
+    if ($1 != $3)]AT_D_IF([
+      stderr.writefln ("calc: error: %d != %d", $1, $3);], [
+      fprintf (stderr, "calc: error: %d != %d\n", $1, $3);], [
+      ])[
     $$ = $1;
   }
 | exp '+' exp        { $$ = $1 + $3;        }
@@ -320,13 +458,13 @@
 | '-' exp  %prec NEG { $$ = -$2;            }
 | exp '^' exp        { $$ = power ($1, $3); }
 | '(' exp ')'        { $$ = $2;             }
-| '(' error ')'      { $$ = 1111; yyerrok;  }
-| '!'                { $$ = 0; YYERROR;     }
-| '-' error          { $$ = 0; YYERROR;     }
+| '(' error ')'      { $$ = 1111; ]AT_D_IF([], [yyerrok;])[  }
+| '!'                { $$ = 0; ]AT_D_IF([return YYERROR], [YYERROR])[;     }
+| '-' error          { $$ = 0; ]AT_D_IF([return YYERROR], [YYERROR])[;     }
 ;
 %%
 
-static int
+int
 power (int base, int exponent)
 {
   int res = 1;
@@ -336,8 +474,10 @@
   return res;
 }
 
-]AT_SKEL_CC_IF(
-[AT_LOCATION_TYPE_IF([[
+]AT_LOCATION_TYPE_SPAN_IF([AT_CXX_IF([[
+#include <iostream>
+namespace
+{
   std::ostream&
   operator<< (std::ostream& o, const Span& s)
   {
@@ -348,30 +488,39 @@
       o << '-' << s.last.c - 1;
     return o;
   }
+}
+]], [[
+void
+location_print (FILE *o, Span s)
+{
+  fprintf (o, "%d.%d", s.first.l, s.first.c);
+  if (s.first.l != s.last.l)
+    fprintf (o, "-%d.%d", s.last.l, s.last.c - 1);
+  else if (s.first.c != s.last.c - 1)
+    fprintf (o, "-%d", s.last.c - 1);
+}
 ]])])[
 ]AT_YYERROR_DEFINE[
 ]AT_DEFINES_IF([],
-[AT_CALC_LEX
+[AT_CALC_YYLEX
 AT_CALC_MAIN])])
 
-AT_DEFINES_IF([AT_DATA_SOURCE([[calc-lex.c]AT_SKEL_CC_IF([[c]])],
-[[#include "calc.h]AT_SKEL_CC_IF([[h]])["
+AT_DEFINES_IF([AT_DATA_SOURCE([[calc-lex.]AT_LANG_EXT],
+[[#include "calc.]AT_LANG_HDR["
 
-]AT_CALC_LEX])
-AT_DATA_SOURCE([[calc-main.c]AT_SKEL_CC_IF([[c]])],
-[[#include "calc.h]AT_SKEL_CC_IF([[h]])["
+]AT_CALC_YYLEX])
+AT_DATA_SOURCE([[calc-main.]AT_LANG_EXT],
+[[#include "calc.]AT_LANG_HDR["
 
 ]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' and, if %defines was specified, `calc-lex.c' or
-# `calc-lex.cc'.
+# 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])
 ])
@@ -380,10 +529,9 @@
 
 # _AT_CHECK_CALC(BISON-OPTIONS, INPUT, [NUM-STDERR-LINES])
 # --------------------------------------------------------
-# Run `calc' on INPUT and expect no STDOUT nor STDERR.
+# Run 'calc' on INPUT and expect no STDOUT nor STDERR.
 #
-# If BISON-OPTIONS contains `%debug' but not `%glr-parser', then
-#
+# If BISON-OPTIONS contains '%debug' but not '%glr-parser', then
 # NUM-STDERR-LINES is the number of expected lines on stderr.
 # Currently this is ignored, though, since the output format is fluctuating.
 #
@@ -393,7 +541,7 @@
 [AT_DATA([[input]],
 [[$2
 ]])
-AT_PARSER_CHECK([./calc input], 0, [], [stderr])
+AT_PARSER_CHECK([calc input], 0, [], [stderr])
 ])
 
 
@@ -401,7 +549,7 @@
 #                      [NUM-STDERR-LINES],
 #                      [VERBOSE-AND-LOCATED-ERROR-MESSAGE])
 # ---------------------------------------------------------
-# Run `calc' on INPUT, and expect a `syntax 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.
@@ -409,22 +557,22 @@
 # NUM-STDERR-LINES is the number of expected lines on stderr.
 # Currently this is ignored, though, since the output format is fluctuating.
 #
-# If BISON-OPTIONS contains `%location', then make sure the ERROR-LOCATION
+# If BISON-OPTIONS contains '%location', then make sure the ERROR-LOCATION
 # is correctly output on stderr.
 #
-# If BISON-OPTIONS contains `%error-verbose', then make sure the
-# IF-YYERROR-VERBOSE message is properly output after `syntax error, '
+# If BISON-OPTIONS contains '%define parse.error verbose', then make sure the
+# IF-YYERROR-VERBOSE message is properly output after 'syntax error, '
 # on STDERR.
 #
-# If BISON-OPTIONS contains `%debug' but not `%glr', then NUM-STDERR-LINES
+# If BISON-OPTIONS contains '%debug' but not '%glr', then NUM-STDERR-LINES
 # is the number of expected lines on stderr.
 m4_define([_AT_CHECK_CALC_ERROR],
 [m4_bmatch([$3], [^/],
-           [AT_PARSER_CHECK([./calc $3], $2, [], [stderr])],
+           [AT_PARSER_CHECK([calc $3], $2, [], [stderr])],
            [AT_DATA([[input]],
 [[$3
 ]])
-AT_PARSER_CHECK([./calc input], $2, [], [stderr])])
+AT_PARSER_CHECK([calc input], $2, [], [stderr])])
 
 # Normalize the observed and expected error messages, depending upon the
 # options.
@@ -445,58 +593,63 @@
 / \$[[0-9$]]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
+
 # 2. Create the reference error message.
 AT_DATA([[expout]],
 [$5
 ])
+
 # 3. If locations are not used, remove them.
 AT_YYERROR_SEES_LOC_IF([],
 [[sed 's/^[-0-9.]*: //' expout >at-expout
 mv at-expout expout]])
-# 4. If error-verbose is not used, strip the`, unexpected....' part.
-m4_bmatch([$1], [%error-verbose], [],
+
+# 4. If error-verbose is not used, strip the', unexpected....' part.
+m4_bmatch([$1], [%define parse.error verbose], [],
 [[sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout]])
+
 # 5. Check
 AT_CHECK([cat stderr], 0, [expout])
 ])
 
 
-# AT_CHECK_SPACES([FILE])
-# -----------------------
+# AT_CHECK_SPACES([FILES])
+# ------------------------
 # 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 '
+[AT_PERL_CHECK([-ne '
   chomp;
-  print "$.: {$_}\n"
+  print "$ARGV:$.: {$_}\n"
     if (# No starting/ending empty lines.
         (eof || $. == 1) && /^\s*$/
-        # No trailing space.  FIXME: not ready for "maint".
-        # || /\s$/
+        # No trailing space.
+        || /\s$/
+        # No tabs.
+        || /\t/
         )' $1
-])dnl
+])
 ])
 
 
-# AT_CHECK_CALC([BISON-OPTIONS])
-# ------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# AT_CHECK_CALC([BISON-OPTIONS], [COMPILER-OPTIONS])
+# --------------------------------------------------
+# Start a testing chunk which compiles 'calc' grammar with
 # BISON-OPTIONS, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC],
-[m4_ifval([$2], [m4_fatal([$0: expected a single argument])])
+[m4_ifval([$3], [m4_fatal([$0: expected at most two arguments])])
 
 # We use integers to avoid dependencies upon the precision of doubles.
-AT_SETUP([Calculator $1])
+AT_SETUP([Calculator $1 $2])
 
 AT_BISON_OPTION_PUSHDEFS([$1])
 
 AT_DATA_CALC_Y([$1])
-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])])])
+AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]], [[], []]), [$2], [-Wno-deprecated])
+AT_CHECK_SPACES([calc.AT_LANG_EXT AT_DEFINES_IF([calc.AT_LANG_HDR])])
 
-# Test the priorities.
+# Test the precedences.
 _AT_CHECK_CALC([$1],
 [1 + 2 * 3 = 7
 1 + 2 * -3 = -5
@@ -540,7 +693,7 @@
 #   - (* * *): nothing to pop, a lot to discard
 #   - (1 + 2 * *): some to pop and discard
 #
-# - test the action associated to `error'
+# - 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
@@ -567,7 +720,7 @@
 calc: error: 2222 != 1])
 
 # Check that yyerrok works properly: second error is not reported,
-# third and fourth are.  Parse status is succesfull.
+# third and fourth are.  Parse status is succesful.
 _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 '!'
@@ -589,7 +742,7 @@
 
 # AT_CHECK_CALC_LALR([BISON-OPTIONS])
 # -----------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# Start a testing chunk which compiles 'calc' grammar with
 # BISON-OPTIONS, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_LALR],
 [AT_CHECK_CALC($@)])
@@ -598,28 +751,30 @@
 
 AT_CHECK_CALC_LALR([%defines])
 AT_CHECK_CALC_LALR([%locations])
+AT_CHECK_CALC_LALR([%locations %define api.location.type {Span}])
 
-AT_CHECK_CALC_LALR([%name-prefix="calc"]) dnl test deprecated `='
+AT_CHECK_CALC_LALR([%name-prefix "calc"])
 AT_CHECK_CALC_LALR([%verbose])
 AT_CHECK_CALC_LALR([%yacc])
-AT_CHECK_CALC_LALR([%error-verbose])
+AT_CHECK_CALC_LALR([%define parse.error verbose])
 
 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([%define parse.error verbose %locations])
 
-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([%define parse.error verbose %locations %defines %define api.prefix {calc} %verbose %yacc])
+AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %name-prefix "calc" %define api.token.prefix {TOK_} %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 %define api.prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines %define api.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([%define api.pure full %define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure full %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc])
 
-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}])
+AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
+AT_CHECK_CALC_LALR([%no-lines %define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 # ----------------------- #
 # Simple GLR Calculator.  #
@@ -629,7 +784,7 @@
 
 # AT_CHECK_CALC_GLR([BISON-OPTIONS])
 # ----------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# Start a testing chunk which compiles 'calc' grammar with
 # BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
 m4_define([AT_CHECK_CALC_GLR],
 [AT_CHECK_CALC([%glr-parser] $@)])
@@ -639,25 +794,28 @@
 
 AT_CHECK_CALC_GLR([%defines])
 AT_CHECK_CALC_GLR([%locations])
+AT_CHECK_CALC_GLR([%locations %define api.location.type {Span}])
 AT_CHECK_CALC_GLR([%name-prefix "calc"])
-AT_CHECK_CALC_GLR([%define api.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([%define parse.error verbose])
 
 AT_CHECK_CALC_GLR([%define api.pure %locations])
-AT_CHECK_CALC_GLR([%error-verbose %locations])
+AT_CHECK_CALC_GLR([%define parse.error verbose %locations])
 
-AT_CHECK_CALC_GLR([%error-verbose %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define parse.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 %define api.prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %define api.prefix {calc} %define api.token.prefix {TOK_} %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%define api.pure %error-verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define api.pure %define parse.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 %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}])
+AT_CHECK_CALC_GLR([%define api.pure %define parse.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 %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+AT_CHECK_CALC_GLR([%no-lines %define api.pure %define parse.error verbose %debug %locations %defines %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
 
 
 # ----------------------------- #
@@ -667,26 +825,36 @@
 AT_BANNER([[Simple LALR(1) C++ Calculator.]])
 
 # First let's try using %skeleton
-AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations])
+AT_CHECK_CALC([%skeleton "lalr1.cc" %defines])
 
 # AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
 # ---------------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# 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([%language "C++" %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" $1], [$2])])
 
 AT_CHECK_CALC_LALR1_CC([])
-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([%locations])
+AT_CHECK_CALC_LALR1_CC([%locations], [$NO_EXCEPTIONS_CXXFLAGS])
+AT_CHECK_CALC_LALR1_CC([%locations %define api.location.type {Span}])
+AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %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([%locations %define parse.error verbose %define api.prefix {calc} %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%locations %define parse.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 %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug %define api.prefix {calc} %define api.token.prefix {TOK_} %verbose %yacc])
 
+AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+AT_CHECK_CALC_LALR1_CC([%define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+AT_CHECK_CALC_LALR1_CC([%defines %locations %define api.location.file none])
+AT_CHECK_CALC_LALR1_CC([%defines %locations %define api.location.file "my-location.hh"])
+
+AT_CHECK_CALC_LALR1_CC([%no-lines %defines %locations %define api.location.file "my-location.hh"])
 
 
 # --------------------------- #
@@ -696,24 +864,60 @@
 AT_BANNER([[Simple GLR C++ Calculator.]])
 
 # Again, we try also using %skeleton.
-AT_CHECK_CALC([%skeleton "glr.cc" %defines %locations])
+AT_CHECK_CALC([%skeleton "glr.cc"])
 
 # AT_CHECK_CALC_GLR_CC([BISON-OPTIONS])
 # -------------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# 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([%language "C++" %glr-parser %defines %locations] $@)])
+[AT_CHECK_CALC([%language "C++" %glr-parser] $@)])
 
 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([%locations])
+AT_CHECK_CALC_GLR_CC([%locations %define api.location.type {Span}])
+AT_CHECK_CALC_GLR_CC([%defines %define parse.error verbose %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%define parse.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([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" %define api.token.prefix {TOK_} %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 %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%locations %defines %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+AT_CHECK_CALC_GLR_CC([%no-lines %locations %defines %define parse.error verbose %debug %define api.prefix {calc} %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
+
+
+# --------------------------- #
+# Simple LALR1 D Calculator.  #
+# --------------------------- #
+
+AT_BANNER([[Simple LALR(1) D Calculator.]])
+
+# First let's try using %skeleton
+AT_CHECK_CALC([%skeleton "lalr1.d"])
+
+# AT_CHECK_CALC_LALR1_D([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_D],
+[AT_CHECK_CALC([%language "D" $1], [$2])])
+
+AT_CHECK_CALC_LALR1_D([])
+AT_CHECK_CALC_LALR1_D([%locations])
+#AT_CHECK_CALC_LALR1_D([%locations %define api.location.type {Span}])
+AT_CHECK_CALC_LALR1_D([%define parse.error verbose %define api.prefix {calc} %verbose])
+
+AT_CHECK_CALC_LALR1_D([%debug])
+
+AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %verbose])
+#AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %define api.token.prefix {TOK_} %verbose])
+
+#AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %verbose %parse-param {semantic_value *result} %parse-param {int *count}])
+#AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %parse-param {semantic_value *result} %parse-param {int *count}])
+
+m4_popdef([AT_CALC_MAIN])
+m4_popdef([AT_CALC_YYLEX])
diff --git a/tests/conflicts.at b/tests/conflicts.at
index 5653b48..92050fb 100644
--- a/tests/conflicts.at
+++ b/tests/conflicts.at
@@ -1,7 +1,7 @@
 # Exercising Bison on conflicts.                         -*- Autotest -*-
 
-# Copyright (C) 2002-2005, 2007, 2009-2012 Free Software Foundation,
-# Inc.
+# Copyright (C) 2002-2005, 2007-2015, 2018-2019 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
@@ -18,6 +18,250 @@
 
 AT_BANNER([[Conflicts.]])
 
+## ------------------------- ##
+## Token declaration order.  ##
+## ------------------------- ##
+
+# This test checks that token are declared left to right when in a precedence
+# statement.
+
+AT_SETUP([Token declaration order])
+
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA_GRAMMAR([[input.y]],
+[[%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%token A B C
+%token D
+%right E F G
+%right H I
+%right J
+%left  K
+%left  L M N
+%nonassoc O P Q
+%precedence R S T U
+%precedence V W
+%%
+exp: A
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int main (void)
+{
+  assert (A < B);
+  assert (B < C);
+  assert (C < D);
+  assert (D < E);
+  assert (E < F);
+  assert (F < G);
+  assert (G < H);
+  assert (H < I);
+  assert (I < J);
+  assert (J < K);
+  assert (K < L);
+  assert (L < M);
+  assert (M < N);
+  assert (N < O);
+  assert (O < P);
+  assert (P < Q);
+  assert (Q < R);
+  assert (R < S);
+  assert (S < T);
+  assert (T < U);
+  assert (U < V);
+  assert (V < W);
+  return 0;
+}
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
+
+AT_PARSER_CHECK([input])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+
+
+## --------------------------------------------------- ##
+## Token declaration order: literals vs. identifiers.  ##
+## --------------------------------------------------- ##
+
+# This test checks that when several tokens are declared by the same keyword,
+# some of them defined as a character ('a'), others as simple textual reference
+# (A), they are declared correctly left to right.
+# Previously, the following test would declare the states in the order 'o' 'p'
+# M N, instead of M N 'o' 'p'.
+
+AT_SETUP([Token declaration order: literals vs. identifiers])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%token 'a' 'b' C D
+%token E F 'g' 'h'
+%right 'i' 'j' K L
+%right M N 'o' 'p'
+%%
+exp: 'a'
+   | 'b'
+   | C
+   | D
+   | E
+   | F
+   | 'g'
+   | 'h'
+   | 'i'
+   | 'j'
+   | K
+   | L
+   | M
+   | N
+   | 'o'
+   | 'p'
+;
+%%
+]])
+
+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: . exp $end
+    1 exp: . 'a'
+    2    | . 'b'
+    3    | . C
+    4    | . D
+    5    | . E
+    6    | . F
+    7    | . 'g'
+    8    | . 'h'
+    9    | . 'i'
+   10    | . 'j'
+   11    | . K
+   12    | . L
+   13    | . M
+   14    | . N
+   15    | . 'o'
+   16    | . 'p'
+
+    'a'  shift, and go to state 1
+    'b'  shift, and go to state 2
+    C    shift, and go to state 3
+    D    shift, and go to state 4
+    E    shift, and go to state 5
+    F    shift, and go to state 6
+    'g'  shift, and go to state 7
+    'h'  shift, and go to state 8
+    'i'  shift, and go to state 9
+    'j'  shift, and go to state 10
+    K    shift, and go to state 11
+    L    shift, and go to state 12
+    M    shift, and go to state 13
+    N    shift, and go to state 14
+    'o'  shift, and go to state 15
+    'p'  shift, and go to state 16
+
+    exp  go to state 17
+
+
+State 1
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Useless associativity warning.  ##
+## ------------------------------- ##
+
+AT_SETUP([Useless associativity warning])
+
+AT_DATA([[input.y]],
+[[%token EQ "=" PL "+" ST "*"  LP "("
+%nonassoc "="
+%left "+"
+%left "*"
+%precedence "("
+%%
+stmt:
+  exp
+| "var" "=" exp
+;
+
+exp:
+  exp "+" exp
+| exp "*" "num"
+| "(" exp ")"
+| "num"
+;
+]])
+
+AT_BISON_CHECK([-Wprecedence input.y], 0, [],
+[[input.y:2.1-9: warning: useless precedence and associativity for "=" [-Wprecedence]
+input.y:4.1-5: warning: useless associativity for "*", use %precedence [-Wprecedence]
+input.y:5.1-11: warning: useless precedence for "(" [-Wprecedence]
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------- ##
+## Useless precedence warning.  ##
+## ---------------------------- ##
+
+AT_SETUP([Useless precedence warning])
+
+AT_DATA([[input.y]],
+[[%token A B U V W X Y Z
+%precedence Z
+%left X
+%precedence Y
+%left W
+%right V
+%nonassoc U
+%%
+a: b
+ | a U b
+ | f
+;
+b: c
+ | b V c
+;
+c: d
+ | c W d
+;
+d: A
+ | d X d
+ | d Y A
+;
+f: B
+ | f Z B
+;
+]])
+
+AT_BISON_CHECK([-Wprecedence -fcaret -o input.c input.y], 0, [],
+[[input.y:7.1-9: warning: useless precedence and associativity for U [-Wprecedence]
+    7 | %nonassoc U
+      | ^~~~~~~~~
+input.y:6.1-6: warning: useless precedence and associativity for V [-Wprecedence]
+    6 | %right V
+      | ^~~~~~
+input.y:5.1-5: warning: useless precedence and associativity for W [-Wprecedence]
+    5 | %left W
+      | ^~~~~
+input.y:2.1-11: warning: useless precedence for Z [-Wprecedence]
+    2 | %precedence Z
+      | ^~~~~~~~~~~
+]])
+
+AT_CLEANUP
+
 
 ## ---------------- ##
 ## S/R in initial.  ##
@@ -34,17 +278,17 @@
 [[%expect 1
 %%
 exp: e 'e';
-e: 'e' | /* Nothing. */;
+e: '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 */
+[[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
 ]])
 
 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. */;
-         ^
+[[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
+    4 | e: 'e' | %empty;
+      |          ^~~~~~
 ]])
 
 AT_CLEANUP
@@ -103,17 +347,17 @@
 
 m4_pushdef([AT_EXPECTING], [m4_if($2, [correct], [[, expecting $end]])])
 
-AT_PARSER_CHECK([./input '0<0'])
-AT_PARSER_CHECK([./input '0<0<0'], [1], [],
+AT_PARSER_CHECK([input '0<0'])
+AT_PARSER_CHECK([input '0<0<0'], [1], [],
          [syntax error, unexpected '<'AT_EXPECTING
 ])
 
-AT_PARSER_CHECK([./input '0>0'])
-AT_PARSER_CHECK([./input '0>0>0'], [1], [],
+AT_PARSER_CHECK([input '0>0'])
+AT_PARSER_CHECK([input '0>0>0'], [1], [],
          [syntax error, unexpected '>'AT_EXPECTING
 ])
 
-AT_PARSER_CHECK([./input '0<0>0'], [1], [],
+AT_PARSER_CHECK([input '0<0>0'], [1], [],
          [syntax error, unexpected '>'AT_EXPECTING
 ])
 
@@ -124,10 +368,10 @@
 
 # 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]],
+AT_NONASSOC_AND_EOF_CHECK([[-Dlr.default-reduction=consistent]],
                           [[correct]])
 
-# lr.default-reductions=consistent happens to work for this test case.
+# lr.default-reduction=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
@@ -148,105 +392,68 @@
 
 
 
-## -------------------------------------- ##
-## %error-verbose and consistent errors.  ##
-## -------------------------------------- ##
+## ------------------------------------------- ##
+## parse.error=verbose and consistent errors.  ##
+## ------------------------------------------- ##
 
-AT_SETUP([[%error-verbose and consistent errors]])
-
+AT_CONSISTENT_ERRORS_CHECK([BISON-DIRECTIVE],
+                           [GRAMMAR],
+                           [INPUT],
+                           [UNEXPECTED-TOKEN], [EXPECTED-TOKEN])
 m4_pushdef([AT_CONSISTENT_ERRORS_CHECK], [
 
-AT_BISON_OPTION_PUSHDEFS([$1])
+AT_SETUP([[parse.error=verbose and consistent errors: ]$1])
 
-m4_pushdef([AT_YYLEX_PROTOTYPE],
-[AT_SKEL_CC_IF([[int yylex (yy::parser::semantic_type *lvalp)]],
-               [[int yylex (YYSTYPE *lvalp)]])])
+AT_BISON_OPTION_PUSHDEFS([$1 AT_CXX_IF([[%defines]], [[%define api.pure]])])
 
-AT_SKEL_JAVA_IF([AT_DATA], [AT_DATA_GRAMMAR])([input.y],
-[AT_SKEL_JAVA_IF([[
+AT_DATA_GRAMMAR([input.y],
+[AT_JAVA_IF([[
 
 %code imports {
   import java.io.IOException;
 }]], [[
 
-%code {]AT_SKEL_CC_IF([[
-  #include <cassert>
-  #include <string>]], [[
+%code {
   #include <assert.h>
-  #include <stdio.h>
-  ]AT_YYERROR_DECLARE])[
-  ]AT_YYLEX_PROTOTYPE[;
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
   #define USE(Var)
 }
 
-]AT_SKEL_CC_IF([[%defines]], [[%define api.pure]])])[
+]AT_CXX_IF([[%defines]], [[%define api.pure]])])[
+
+]AT_YACC_IF([[
+%code {
+  #if defined __GNUC__ && 8 <= __GNUC__
+  # pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+  #endif
+}
+]])[
 
 ]$1[
 
-%error-verbose
+%define parse.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([[
+]AT_JAVA_IF([[%code lexer {
+  ]AT_YYLEX_DEFINE([$3], [[return new Integer(1)]])[
+  ]AT_YYERROR_DEFINE[
 };
-
-%%]])[
+%%
+]], [[
+%%
+]AT_YYLEX_DEFINE(["$3"], [[*lvalp = 1]])[
+]AT_YYERROR_DEFINE[
+]])[
 
 /*-------.
 | 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_MAIN_DEFINE
+])
 
 AT_FULL_COMPILE([[input]])
 
@@ -254,17 +461,19 @@
                                   $5, [a],  [[, expecting 'a']],
                                   $5, [b],  [[, expecting 'b']])])
 
-AT_SKEL_JAVA_IF([AT_JAVA_PARSER_CHECK([[input]], [[0]]],
-                [AT_PARSER_CHECK([[./input]], [[1]]]),
+AT_PARSER_CHECK([[input]], [[1]],
 [[]],
 [[syntax error, unexpected ]$4[]AT_EXPECTING[
 ]])
 
 m4_popdef([AT_EXPECTING])
-m4_popdef([AT_YYLEX_PROTOTYPE])
 AT_BISON_OPTION_POPDEFS
 
-])
+AT_CLEANUP
+]) dnl AT_CONSISTENT_ERRORS_CHECK
+
+
+
 
 m4_pushdef([AT_PREVIOUS_STATE_GRAMMAR],
 [[%nonassoc 'a';
@@ -277,7 +486,7 @@
   | 'a' shift
   ;
 
-default-reduction: /*empty*/ ;
+default-reduction: %empty ;
 shift: 'b' ;
 
 // Provide another context in which all rules are useful so that this
@@ -318,12 +527,12 @@
 
 # Even canonical LR doesn't foresee the error for 'a'!
 AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
-                             %define lr.default-reductions consistent]],
+                             %define lr.default-reduction consistent]],
                            [AT_PREVIOUS_STATE_GRAMMAR],
                            [AT_PREVIOUS_STATE_INPUT],
                            [[$end]], [[ab]])
 AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr
-                             %define lr.default-reductions accepting]],
+                             %define lr.default-reduction accepting]],
                            [AT_PREVIOUS_STATE_GRAMMAR],
                            [AT_PREVIOUS_STATE_INPUT],
                            [[$end]], [[ab]])
@@ -332,7 +541,7 @@
                            [AT_PREVIOUS_STATE_INPUT],
                            [[$end]], [[ab]])
 
-# Only LAC gets it right.
+# Only LAC gets it right.  In C.
 AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr
                              %define parse.lac full]],
                            [AT_PREVIOUS_STATE_GRAMMAR],
@@ -344,6 +553,20 @@
                            [AT_PREVIOUS_STATE_INPUT],
                            [[$end]], [[b]])
 
+# Only LAC gets it right.  In C++.
+AT_CONSISTENT_ERRORS_CHECK([[%language "c++"
+                             %define lr.type canonical-lr
+                             %define parse.lac full]],
+                           [AT_PREVIOUS_STATE_GRAMMAR],
+                           [AT_PREVIOUS_STATE_INPUT],
+                           [[$end]], [[b]])
+AT_CONSISTENT_ERRORS_CHECK([[%language "c++"
+                             %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])
 
@@ -377,15 +600,16 @@
   { USE ($][1); }
 ;
 
-consistent-reduction: /*empty*/ {
-  assert (yychar == ]AT_SKEL_CC_IF([[yyempty_]], [[YYEMPTY]])[);
+consistent-reduction: %empty
+{
+  assert (yychar == YYEMPTY);
   yylval = 0;
   yychar = 'b';
 } ;
 
 consistent-error:
   'a' { USE ($][1); }
-| /*empty*/ %prec 'a'
+| %empty %prec 'a'
 ;
 
 // Provide another context in which all rules are useful so that this
@@ -402,19 +626,15 @@
                            [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.
+# No C++ or Java test because yychar cannot be manipulated by users.
 
-AT_CONSISTENT_ERRORS_CHECK([[%define lr.default-reductions consistent]],
+AT_CONSISTENT_ERRORS_CHECK([[%define lr.default-reduction 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_CONSISTENT_ERRORS_CHECK([[%define lr.default-reduction accepting]],
                            [AT_USER_ACTION_GRAMMAR],
                            [AT_USER_ACTION_INPUT],
                            [[$end]], [[a]])
@@ -428,7 +648,7 @@
                            [AT_USER_ACTION_INPUT],
                            [['b']], [[none]])
 AT_CONSISTENT_ERRORS_CHECK([[%define parse.lac full
-                             %define lr.default-reductions accepting]],
+                             %define lr.default-reduction accepting]],
                            [AT_USER_ACTION_GRAMMAR],
                            [AT_USER_ACTION_INPUT],
                            [[$end]], [[none]])
@@ -438,7 +658,6 @@
 
 m4_popdef([AT_CONSISTENT_ERRORS_CHECK])
 
-AT_CLEANUP
 
 
 
@@ -462,7 +681,7 @@
   ]AT_YYLEX_DECLARE[
 }
 
-%error-verbose
+%define parse.error verbose
 %nonassoc 'a'
 
 %%
@@ -498,42 +717,37 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["aaa"])[
-
-int
-main (void)
-{
-  return yyparse ();
-}
-]])
+]AT_MAIN_DEFINE
+])
 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
+[[input.y: warning: 2 shift/reduce conflicts [-Wconflicts-sr]
 ]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[1]], [[]],
+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
+[[input.y: warning: 2 shift/reduce conflicts [-Wconflicts-sr]
 ]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[1]], [[]],
+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
+[[input.y: warning: 2 shift/reduce conflicts [-Wconflicts-sr]
 ]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[1]], [[]],
+AT_PARSER_CHECK([[input]], [[1]], [[]],
 [[syntax error, unexpected 'a', expecting 'b' or 'c'
 ]])
 
@@ -554,8 +768,8 @@
 ]])
 
 AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
-[input.y: conflicts: 1 shift/reduce
-])
+[[input.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+]])
 
 # Check the contents of the report.
 AT_CHECK([cat input.output], [],
@@ -572,18 +786,19 @@
 
 Terminals, with rules where they appear
 
-$end (0) 0
-error (256)
-NUM (258) 2
-OP (259) 1
+    $end (0) 0
+    error (256)
+    NUM (258) 2
+    OP (259) 1
 
 
 Nonterminals, with rules where they appear
 
-$accept (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
+    $accept (5)
+        on left: 0
+    exp (6)
+        on left: 1 2
+        on right: 0 1
 
 
 State 0
@@ -675,18 +890,19 @@
 
 Terminals, with rules where they appear
 
-$end (0) 0
-error (256)
-NUM (258) 2
-OP (259) 1
+    $end (0) 0
+    error (256)
+    NUM (258) 2
+    OP (259) 1
 
 
 Nonterminals, with rules where they appear
 
-$accept (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
+    $accept (5)
+        on left: 0
+    exp (6)
+        on left: 1 2
+        on right: 0 1
 
 
 State 0
@@ -747,6 +963,122 @@
 AT_CLEANUP
 
 
+## ---------------------- ##
+## %precedence suffices.  ##
+## ---------------------- ##
+
+AT_SETUP([%precedence suffices])
+
+AT_DATA([input.y],
+[[%precedence "then"
+%precedence "else"
+%%
+stmt:
+  "if" cond "then" stmt
+| "if" cond "then" stmt "else" stmt
+| "stmt"
+;
+
+cond:
+  "exp"
+;
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+
+AT_CLEANUP
+
+
+## ------------------------------ ##
+## %precedence does not suffice.  ##
+## ------------------------------ ##
+
+AT_SETUP([%precedence does not suffice])
+
+AT_DATA([input.y],
+[[%precedence "then"
+%precedence "else"
+%%
+stmt:
+  "if" cond "then" stmt
+| "if" cond "then" stmt "else" stmt
+| "stmt"
+;
+
+cond:
+  "exp"
+| cond "then" cond
+;
+]])
+
+AT_BISON_CHECK([-o input.c input.y], 0, [],
+[[input.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+input.y:12.3-18: warning: rule useless in parser due to conflicts [-Wother]
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------------------- ##
+## Syntax error in consistent error state.  ##
+## ---------------------------------------- ##
+
+# AT_TEST(SKELETON-NAME)
+# ----------------------
+# Make sure yysyntax_error does nothing silly when called on yytoken
+# == YYEMPTY.
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([Syntax error in consistent error state: $1])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1"])
+
+AT_DATA_GRAMMAR([input.y],
+[[%define parse.error verbose
+%skeleton "$1"
+%%
+%nonassoc 'a';
+
+start: 'a' consistent-error-on-a-a 'a';
+
+consistent-error-on-a-a:
+    'a' default-reduction
+  | 'a' default-reduction 'a'
+  ;
+
+default-reduction: %empty;
+
+%code {
+  #include <stdio.h>
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+};
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE("aa")[
+]AT_MAIN_DEFINE[
+]])
+
+AT_BISON_CHECK([-o input.AT_LANG_EXT input.y], 0, [],
+[[input.y:17.5-25: warning: rule useless in parser due to conflicts [-Wother]
+input.y:18.5-29: warning: rule useless in parser due to conflicts [-Wother]
+]])
+AT_LANG_COMPILE([input])
+AT_PARSER_CHECK([[input]], 1, [],
+[[syntax error
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+## FIXME: test Java and D.
+m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
+
+m4_popdef([AT_TEST])
+
+
+
 ## -------------------------------- ##
 ## Defaulted Conflicted Reduction.  ##
 ## -------------------------------- ##
@@ -757,13 +1089,13 @@
 #    $end           reduce using rule 3 (num)
 #    $end           [reduce using rule 4 (id)]
 #
-# But when `reduce 3' is the default action, we'd produce:
+# But when 'reduce 3' is the default action, we'd produce:
 #
 #    $end           [reduce using rule 4 (id)]
 #    $default    reduce using rule 3 (num)
 #
 # In this precise case (a reduction is masked by the default
-# reduction), we make the `reduce 3' explicit:
+# reduction), we make the 'reduce 3' explicit:
 #
 #    $end           reduce using rule 3 (num)
 #    $end           [reduce using rule 4 (id)]
@@ -784,8 +1116,8 @@
 ]])
 
 AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
-[[input.y: conflicts: 1 reduce/reduce
-input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
+[[input.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+input.y:4.6-8: warning: rule useless in parser due to conflicts [-Wother]
 ]])
 
 # Check the contents of the report.
@@ -812,21 +1144,24 @@
 
 Terminals, with rules where they appear
 
-$end (0) 0
-'0' (48) 3 4
-error (256)
+    $end (0) 0
+    '0' (48) 3 4
+    error (256)
 
 
 Nonterminals, with rules where they appear
 
-$accept (4)
-    on left: 0
-exp (5)
-    on left: 1 2, on right: 0
-num (6)
-    on left: 3, on right: 1
-id (7)
-    on left: 4, on right: 2
+    $accept (4)
+        on left: 0
+    exp (5)
+        on left: 1 2
+        on right: 0
+    num (6)
+        on left: 3
+        on right: 1
+    id (7)
+        on left: 4
+        on right: 2
 
 
 State 0
@@ -901,9 +1236,8 @@
 ]])
 
 AT_BISON_CHECK([-o input.c input.y], 1, [],
-[input.y: conflicts: 1 shift/reduce
-input.y: error: expected 0 shift/reduce conflicts
-])
+[[input.y: error: shift/reduce conflicts: 1 found, 0 expected
+]])
 AT_CLEANUP
 
 
@@ -938,9 +1272,8 @@
 ]])
 
 AT_BISON_CHECK([-o input.c input.y], 1, [],
-[input.y: conflicts: 1 shift/reduce
-input.y: error: expected 2 shift/reduce conflicts
-])
+[[input.y: error: shift/reduce conflicts: 1 found, 2 expected
+]])
 AT_CLEANUP
 
 
@@ -958,9 +1291,165 @@
 ]])
 
 AT_BISON_CHECK([-o input.c input.y], 1, [],
-[input.y: conflicts: 1 reduce/reduce
-input.y: error: expected 0 reduce/reduce conflicts
-])
+[[input.y: error: reduce/reduce conflicts: 1 found, 0 expected
+]])
+AT_CLEANUP
+
+
+## ------------------------------------ ##
+## %expect in grammar rule not enough.  ##
+## ------------------------------------ ##
+
+AT_SETUP([%expect in grammar rule not enough])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 1
+%%
+exp: exp OP exp %expect 0 | NUM;
+]])
+
+AT_BISON_CHECK([-o input.c input.y], 1, [],
+[[input.y:4.6-25: error: shift/reduce conflicts for rule 1: 1 found, 0 expected
+]])
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## %expect in grammar rule right.  ##
+## ------------------------------- ##
+
+AT_SETUP([%expect in grammar rule right])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 1
+%%
+exp: exp OP exp %expect 1 | NUM;
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_CLEANUP
+
+
+## -------------------------- ##
+## %expect in grammar rules.  ##
+## -------------------------- ##
+
+AT_SETUP([%expect in grammar rules])
+
+AT_DATA([input.y],
+[[%expect 4
+%%
+exp:
+  "number"
+| exp "+" exp  %expect 2
+| exp "*" exp  %expect 2
+]])
+
+AT_BISON_CHECK([-o input.c -rall input.y])
+AT_CLEANUP
+
+
+## ---------------------------------- ##
+## %expect in grammar rule too much.  ##
+## ---------------------------------- ##
+
+AT_SETUP([%expect in grammar rule too much])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 1
+%%
+exp: exp OP exp | NUM %expect 1;
+]])
+
+AT_BISON_CHECK([-o input.c input.y], 1, [],
+[[input.y:4.19-31: error: shift/reduce conflicts for rule 2: 0 found, 1 expected
+]])
+AT_CLEANUP
+
+
+## ---------------------------- ##
+## %expect-rr in grammar rule.  ##
+## ---------------------------- ##
+
+AT_SETUP([%expect-rr in grammar rule])
+
+AT_DATA([input.y],
+[[%glr-parser
+%expect-rr 3
+%%
+exp
+: a '1'
+| a '2'
+| a '3'
+| b '1'
+| b '2'
+| b '3'
+a:
+b: %expect-rr 3
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_CLEANUP
+
+
+## ------------------------------------- ##
+## %expect-rr too much in grammar rule.  ##
+## ------------------------------------- ##
+
+AT_SETUP([%expect-rr too much in grammar rule])
+
+AT_DATA([input.y],
+[[%glr-parser
+%expect-rr 3
+%%
+exp
+: a '1'
+| a '2'
+| a '3'
+| b '1'
+| b '2'
+| b '3'
+a:
+b: %expect-rr 4
+]])
+
+AT_BISON_CHECK([-fcaret -o input.c input.y], 1, [],
+[[input.y:12.4-15: error: reduce/reduce conflicts for rule 8: 3 found, 4 expected
+   12 | b: %expect-rr 4
+      |    ^~~~~~~~~~~~
+]])
+AT_CLEANUP
+
+
+## --------------------------------------- ##
+## %expect-rr not enough in grammar rule.  ##
+## --------------------------------------- ##
+
+AT_SETUP([%expect-rr not enough in grammar rule])
+
+AT_DATA([input.y],
+[[%glr-parser
+%expect-rr 3
+%%
+exp
+: a '1'
+| a '2'
+| a '3'
+| b '1'
+| b '2'
+| b '3'
+a:
+b: %expect-rr 2
+]])
+
+AT_BISON_CHECK([-fcaret -o input.c input.y], 1, [],
+[[input.y:12.4-15: error: reduce/reduce conflicts for rule 8: 3 found, 2 expected
+   12 | b: %expect-rr 2
+      |    ^~~~~~~~~~~~
+]])
 AT_CLEANUP
 
 
@@ -1001,8 +1490,10 @@
    ;
 ]])
 
-AT_BISON_CHECK([-o input.c input.y], 0, [],
-[[input.y: conflicts: 4 shift/reduce
+AT_BISON_CHECK([-Wall -o input.c input.y], 0, [],
+[[input.y: warning: 4 shift/reduce conflicts [-Wconflicts-sr]
+input.y:1.1-5: warning: useless precedence and associativity for '+' [-Wprecedence]
+input.y:2.1-5: warning: useless precedence and associativity for '*' [-Wprecedence]
 ]])
 AT_CLEANUP
 
@@ -1104,14 +1595,15 @@
 ]])
 
 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 */
+[[input.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+input.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+input.y:12.5-20: warning: rule useless in parser due to conflicts [-Wother]
+input.y:20.5-20: warning: rule useless in parser due to conflicts [-Wother]
+input.y:21.4: warning: rule useless in parser due to conflicts [-Wother]
+input.y:25.14: warning: rule useless in parser due to conflicts [-Wother]
+input.y:25.16: warning: rule useless in parser due to conflicts [-Wother]
+input.y:31.5-7: warning: rule useless in parser due to conflicts [-Wother]
+input.y:32.4: warning: rule useless in parser due to conflicts [-Wother]
 ]])
 
 AT_CHECK([[cat input.output]], 0,
@@ -1120,13 +1612,13 @@
     2 resolved_conflict: 'a' unreachable1
 
     4 unreachable1: 'a' unreachable2
-    5             | /* empty */
+    5             | %empty
 
-    6 unreachable2: /* empty */
-    7             | /* empty */
+    6 unreachable2: %empty
+    7             | %empty
 
     9 reported_conflicts: 'a'
-   10                   | /* empty */
+   10                   | %empty
 
 
 State 4 conflicts: 1 shift/reduce
@@ -1140,40 +1632,45 @@
     1 start: resolved_conflict 'a' reported_conflicts 'a'
 
     2 resolved_conflict: 'a' unreachable1
-    3                  | /* empty */
+    3                  | %empty
 
     4 unreachable1: 'a' unreachable2
-    5             | /* empty */
+    5             | %empty
 
-    6 unreachable2: /* empty */
-    7             | /* empty */
+    6 unreachable2: %empty
+    7             | %empty
 
     8 reported_conflicts: 'a'
     9                   | 'a'
-   10                   | /* empty */
+   10                   | %empty
 
 
 Terminals, with rules where they appear
 
-$end (0) 0
-'a' (97) 1 2 4 8 9
-error (256)
+    $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
+    $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
@@ -1181,7 +1678,7 @@
     0 $accept: . start $end
     1 start: . resolved_conflict 'a' reported_conflicts 'a'
     2 resolved_conflict: . 'a' unreachable1
-    3                  | .  ['a']
+    3                  | . %empty  ['a']
 
     $default  reduce using rule 3 (resolved_conflict)
 
@@ -1217,7 +1714,7 @@
     1 start: resolved_conflict 'a' . reported_conflicts 'a'
     8 reported_conflicts: . 'a'
     9                   | . 'a'
-   10                   | .  ['a']
+   10                   | . %empty  ['a']
 
     'a'  shift, and go to state 5
 
@@ -1251,16 +1748,17 @@
 ]])
 
 AT_DATA([[input-keep.y]],
-[[%define lr.keep-unreachable-states
+[[%define lr.keep-unreachable-state
 ]])
 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 */
+[[input-keep.y: warning: 2 shift/reduce conflicts [-Wconflicts-sr]
+input-keep.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+input-keep.y:22.4: warning: rule useless in parser due to conflicts [-Wother]
+input-keep.y:26.16: warning: rule useless in parser due to conflicts [-Wother]
+input-keep.y:32.5-7: warning: rule useless in parser due to conflicts [-Wother]
+input-keep.y:33.4: warning: rule useless in parser due to conflicts [-Wother]
 ]])
 
 AT_CLEANUP
@@ -1290,11 +1788,11 @@
   | 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' ;
+empty_a:  %empty %prec 'a' ;
+empty_b:  %empty %prec 'b' ;
+empty_c1: %empty %prec 'c' ;
+empty_c2: %empty %prec 'c' ;
+empty_c3: %empty %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,
@@ -1309,11 +1807,11 @@
     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']
+    9 empty_a: . %empty  ['a']
+   10 empty_b: . %empty  []
+   11 empty_c1: . %empty  []
+   12 empty_c2: . %empty  []
+   13 empty_c3: . %empty  ['c']
 
     'b'  shift, and go to state 1
 
@@ -1385,11 +1883,11 @@
     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']
+    9 empty_a: . %empty  []
+   10 empty_b: . %empty  []
+   11 empty_c1: . %empty  []
+   12 empty_c2: . %empty  ['c']
+   13 empty_c3: . %empty  ['c']
 
     'a'  error (nonassociative)
     'b'  error (nonassociative)
@@ -1415,9 +1913,40 @@
 AT_CLEANUP
 
 
-## --------------------------------- ##
-## -W versus %expect and %expect-rr  ##
-## --------------------------------- ##
+## -------------------- ##
+## %expect-rr non GLR.  ##
+## -------------------- ##
+
+AT_SETUP([[%expect-rr non GLR]])
+
+AT_DATA([[1.y]],
+[[%expect-rr 0
+%%
+exp: 'a'
+]])
+
+AT_BISON_CHECK([[1.y]], [[0]], [],
+[[1.y: warning: %expect-rr applies only to GLR parsers [-Wother]
+]])
+
+AT_DATA([[2.y]],
+[[%expect-rr 1
+%%
+exp: 'a' | 'a';
+]])
+
+AT_BISON_CHECK([[2.y]], [[0]], [],
+[[2.y: warning: %expect-rr applies only to GLR parsers [-Wother]
+2.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+2.y:3.12-14: warning: rule useless in parser due to conflicts [-Wother]
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------------- ##
+## -W versus %expect and %expect-rr.  ##
+## ---------------------------------- ##
 
 AT_SETUP([[-W versus %expect and %expect-rr]])
 
@@ -1443,17 +1972,27 @@
 ]])
 
 AT_BISON_CHECK([[sr-rr.y]], [[0]], [[]],
-[[sr-rr.y: conflicts: 1 shift/reduce, 1 reduce/reduce
+[[sr-rr.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+sr-rr.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
 ]])
 AT_BISON_CHECK([[-Wno-conflicts-sr sr-rr.y]], [[0]], [[]],
-[[sr-rr.y: conflicts: 1 reduce/reduce
+[[sr-rr.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
 ]])
 AT_BISON_CHECK([[-Wno-conflicts-rr sr-rr.y]], [[0]], [[]],
-[[sr-rr.y: conflicts: 1 shift/reduce
+[[sr-rr.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
 ]])
 
-[for gram in sr-rr sr rr; do
+[
+# This is piece of code is rather complex for a simple task: try every
+# combination of (0 or 1 real SR) x (0 or 1 real RR) x (don't %expect
+# or %expect 0, 1, or 2 SR) x (don't %expect-rr or %expect-rr 0, 1, or 2
+# RR).
+
+# Number and types of genuine conflicts in the grammar.
+for gram in sr-rr sr rr; do
+  # Number of expected s/r conflicts.
   for sr_exp_i in '' 0 1 2; do
+    # Number of expected r/r conflicts.
     for rr_exp_i in '' 0 1 2; do
       test -z "$sr_exp_i" && test -z "$rr_exp_i" && continue
 
@@ -1476,36 +2015,38 @@
       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
+      # Number of found conflicts.
+      case $gram in
+        (sr)    sr_count=1; rr_count=0;;
+        (rr)    sr_count=0; rr_count=1;;
+        (sr-rr) sr_count=1; rr_count=1;;
+      esac
+
+      # Update number of expected conflicts: if %expect is given then
+      # %expect-rr defaults to 0, and vice-versa.  Leave empty if
+      # nothing expected.
+      case $sr_exp_i:$rr_exp_i in
+        ?:) rr_exp_i=0;;
+        :?) sr_exp_i=0;;
+      esac
 
       # 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
+        {
+          if test -z "$sr_exp_i" && test "$sr_count" -ne 0; then
+            echo "warning: $sr_count shift/reduce conflicts"
+          elif test "$sr_exp_i" -ne "$sr_count"; then
+            echo "error: shift/reduce conflicts: $sr_count found, $sr_exp_i expected"
+          fi
+          if test -z "$rr_exp_i" && test "$rr_count" -ne 0; then
+            echo "warning: $rr_count reduce/reduce conflicts"
+          elif test "$rr_exp_i" -ne "$rr_count"; then
+            echo "error: reduce/reduce conflicts: $rr_count found, $rr_exp_i expected"
+          fi
+        } | sed -e "s/^/$file: /" > experr
         ]AT_BISON_CHECK([[-Wnone $file]], [[1]], [[]], [[experr]])[
         ]AT_BISON_CHECK([[-Werror $file]], [[1]], [[]], [[experr]])[
       fi
diff --git a/tests/cxx-type.at b/tests/cxx-type.at
index b0e5fdc..9240117 100644
--- a/tests/cxx-type.at
+++ b/tests/cxx-type.at
@@ -1,6 +1,6 @@
 # Checking GLR Parsing.                         -*- Autotest -*-
 
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015, 2018-2019 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
@@ -94,19 +94,19 @@
 
 stmt : expr ';'  $2     { $$ = ]$[1; }
      | decl      $3
-     | error ';'        { $$ = new_nterm ("<error>", YY_NULL, YY_NULL, YY_NULL); }
+     | error ';'        { $$ = new_nterm ("<error>", YY_NULLPTR, YY_NULLPTR, YY_NULLPTR); }
      | '@'              { YYACCEPT; }
      ;
 
 expr : ID
      | TYPENAME '(' expr ')'
-                        { $$ = 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); }
+                        { $$ = new_nterm ("<cast>(%s,%s)", ]$[3, ]$[1, YY_NULLPTR); }
+     | expr '+' expr    { $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, YY_NULLPTR); }
+     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", ]$[1, ]$[3, YY_NULLPTR); }
      ;
 
 decl : TYPENAME declarator ';'
-                        { $$ = new_nterm ("<declare>(%s,%s)", ]$[1, ]$[2, YY_NULL); }
+                        { $$ = new_nterm ("<declare>(%s,%s)", ]$[1, ]$[2, YY_NULLPTR); }
      | TYPENAME declarator '=' expr ';'
                         { $$ = new_nterm ("<init-declare>(%s,%s,%s)", ]$[1,
                                           ]$[2, ]$[4); }
@@ -127,7 +127,7 @@
 int
 main (int argc, char **argv)
 {
-  assert (argc == 2);
+  assert (argc == 2); (void) argc;
   if (!freopen (argv[1], "r", stdin))
     return 3;
   return yyparse ();
@@ -137,9 +137,6 @@
 
 ]AT_YYLEX_PROTOTYPE[
 {
-  char buffer[256];
-  int c;
-  unsigned int i;
   static int lineNum = 1;
   static int colNum = 0;
 
@@ -152,6 +149,7 @@
 
   while (1)
     {
+      int c;
       assert (!feof (stdin));
       c = getchar ();
       switch (c)
@@ -175,11 +173,12 @@
             yylloc.first_column = colNum;]])[
             if (isalpha (c))
               {
-                i = 0;
+                char buffer[256];
+                unsigned i = 0;
 
                 do
                   {
-                    buffer[i++] = c;
+                    buffer[i++] = YY_CAST (char, c);
                     colNum += 1;
                     assert (i != sizeof buffer - 1);
                     c = getchar ();
@@ -188,14 +187,14 @@
 
                 ungetc (c, stdin);
                 buffer[i++] = 0;
-                tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
-                yylval = new_term (strcpy ((char *) malloc (i), buffer));
+                tok = isupper (YY_CAST (unsigned char, buffer[0])) ? TYPENAME : ID;
+                yylval = new_term (strcpy (YY_CAST (char *, malloc (i)), buffer));
               }
             else
               {
                 colNum += 1;
                 tok = c;
-                yylval = YY_NULL;
+                yylval = YY_NULLPTR;
               }]AT_LOCATION_IF([[
             yylloc.last_column = colNum-1;]])[
             return tok;
@@ -207,7 +206,7 @@
 static Node *
 new_nterm (char const *form, Node *child0, Node *child1, Node *child2)
 {
-  Node *node = (Node *) malloc (sizeof (Node));
+  Node *node = YY_CAST (Node *, malloc (sizeof (Node)));
   node->nterm.isNterm = 1;
   node->nterm.parents = 0;
   node->nterm.form = form;
@@ -226,7 +225,7 @@
 static Node *
 new_term (char *text)
 {
-  Node *node = (Node *) malloc (sizeof (Node));
+  Node *node = YY_CAST (Node *, malloc (sizeof (Node)));
   node->term.isNterm = 0;
   node->term.parents = 0;
   node->term.text = text;
@@ -256,30 +255,27 @@
 static char *
 node_to_string (Node *node)
 {
-  char *child0;
-  char *child1;
-  char *child2;
-  char *buffer;
+  char *res;
   if (!node)
     {
-      buffer = (char *) malloc (1);
-      buffer[0] = 0;
+      res = YY_CAST (char *, malloc (1));
+      res[0] = 0;
     }
   else if (node->nodeInfo.isNterm == 1)
     {
-      child0 = node_to_string (node->nterm.children[0]);
-      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);
-      sprintf (buffer, node->nterm.form, child0, child1, child2);
-      free (child0);
-      free (child1);
+      char *child0 = node_to_string (node->nterm.children[0]);
+      char *child1 = node_to_string (node->nterm.children[1]);
+      char *child2 = node_to_string (node->nterm.children[2]);
+      res = YY_CAST (char *, malloc (strlen (node->nterm.form) + strlen (child0)
+                                     + strlen (child1) + strlen (child2) + 1));
+      sprintf (res, node->nterm.form, child0, child1, child2);
       free (child2);
+      free (child1);
+      free (child0);
     }
   else
-    buffer = strdup (node->term.text);
-  return buffer;
+    res = strdup (node->term.text);
+  return res;
 }
 
 ]]
@@ -287,7 +283,7 @@
 [[static YYSTYPE
 stmtMerge (YYSTYPE x0, YYSTYPE x1)
 {
-  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULL);
+  return new_nterm ("<OR>(%s,%s)", x0, x1, YY_NULLPTR);
 }
 ]])
 )
@@ -394,60 +390,60 @@
 AT_SETUP([GLR: Resolve ambiguity, impure, no locations])
 _AT_TEST_GLR_CXXTYPES([],
                       [%dprec 1], [%dprec 2])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_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_PARSER_CHECK([[types test-input]], 0,
                 [_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([%define api.pure],
                       [%dprec 1], [%dprec 2])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 
 AT_SETUP([GLR: Resolve ambiguity, pure, locations])
 _AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
                       [%dprec 1], [%dprec 2])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_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>])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_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>])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_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([%define api.pure],
                       [%merge <stmtMerge>], [%merge <stmtMerge>])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
 AT_CLEANUP
 AT_SETUP([GLR: Merge conflicting parses, pure, locations])
 _AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
                       [%merge <stmtMerge>],[%merge <stmtMerge>])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_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],
+_AT_TEST_GLR_CXXTYPES([%define parse.error verbose],
                       [%merge <stmtMerge>], [%merge <stmtMerge>])
-AT_PARSER_CHECK([[./types test-input]], 0,
+AT_PARSER_CHECK([[types test-input]], 0,
                 [_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR])
 AT_CLEANUP
diff --git a/tests/diagnostics.at b/tests/diagnostics.at
new file mode 100644
index 0000000..cd596be
--- /dev/null
+++ b/tests/diagnostics.at
Binary files differ
diff --git a/tests/existing.at b/tests/existing.at
index 1b6fa4d..018178b 100644
--- a/tests/existing.at
+++ b/tests/existing.at
@@ -1,7 +1,7 @@
 # Exercising Bison on actual grammars.                   -*- Autotest -*-
 
-# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2012 Free Software
-# Foundation, Inc.
+# Copyright (C) 1989-1992, 2000-2005, 2007, 2009-2015, 2018-2019 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
@@ -71,13 +71,13 @@
 ## ----------------------- ##
 
 # We have been careful to strip all the actions excepts the
-# mid-rule actions.
+# midrule actions.
 #
 # There are 65 SR conflicts.  Bison was once wrong, due to an incorrect
 # computation of nullable.  It reported 485 SR conflicts!
 
 AT_TEST_EXISTING_GRAMMAR([[GNU AWK 3.1.0 Grammar]],
-[[%error-verbose
+[[%define parse.error verbose
 
 %token FUNC_CALL NAME REGEXP
 %token ERROR
@@ -115,281 +115,281 @@
 ]],
 [[
 start
-	: opt_nls program opt_nls
-	;
+        : opt_nls program opt_nls
+        ;
 
 program
-	: rule
-	| program rule
-	| error
-	| program error
-	| /* empty */
-	;
+        : 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
-	;
+        : 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
-	;
+        : NAME
+        | FUNC_CALL
+        | lex_builtin
+        ;
 
 lex_builtin
-	: LEX_BUILTIN
-	| LEX_LENGTH
-	;
+        : LEX_BUILTIN
+        | LEX_LENGTH
+        ;
 
 function_prologue
-	: LEX_FUNCTION {} func_name '(' opt_param_list r_paren opt_nls
-	;
+        : 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
-	;
+        : l_brace statements r_brace opt_semi opt_nls
+        | l_brace r_brace opt_semi opt_nls
+        ;
 
 pattern
-	: exp
-	| exp ',' exp
-	;
+        : 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 '/'
-	;
+        /*
+         * 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
-	;
+        : 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
+        | statements statement
+        | error
+        | statements error
+        ;
 
 statement_term
-	: nls
-	| semi opt_nls
-	;
+        : 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
-	;
+        : 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
-	;
+        : 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
-	;
+        : 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
-	;
+        : NEWLINE
+        | nls NEWLINE
+        ;
 
 opt_nls
-	: /* empty */
-	| nls
-	;
+        : /* empty */
+        | nls
+        ;
 
 input_redir
-	: /* empty */
-	| '<' simp_exp
-	;
+        : /* empty */
+        | '<' simp_exp
+        ;
 
 output_redir
-	: /* empty */
-	| '>' exp
-	| APPEND_OP exp
-	| '|' exp
-	| TWOWAYIO exp
-	;
+        : /* empty */
+        | '>' exp
+        | APPEND_OP exp
+        | '|' exp
+        | TWOWAYIO exp
+        ;
 
 opt_param_list
-	: /* empty */
-	| param_list
-	;
+        : /* empty */
+        | param_list
+        ;
 
 param_list
-	: NAME
-	| param_list comma NAME
-	| error
-	| param_list error
-	| param_list comma error
-	;
+        : NAME
+        | param_list comma NAME
+        | error
+        | param_list error
+        | param_list comma error
+        ;
 
 /* optional expression, as in for loop */
 opt_exp
-	: /* empty */
-	| exp
-	;
+        : /* empty */
+        | exp
+        ;
 
 opt_rexpression_list
-	: /* empty */
-	| rexpression_list
-	;
+        : /* empty */
+        | rexpression_list
+        ;
 
 rexpression_list
-	: rexp
-	| rexpression_list comma rexp
-	| error
-	| rexpression_list error
-	| rexpression_list error rexp
-	| rexpression_list comma error
-	;
+        : rexp
+        | rexpression_list comma rexp
+        | error
+        | rexpression_list error
+        | rexpression_list error rexp
+        | rexpression_list comma error
+        ;
 
 opt_expression_list
-	: /* empty */
-	| expression_list
-	;
+        : /* empty */
+        | expression_list
+        ;
 
 expression_list
-	: exp
-	| expression_list comma exp
-	| error
-	| expression_list error
-	| expression_list error exp
-	| expression_list comma error
-	;
+        : 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
-	;
+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
-	;
+        : 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
+        /* 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
-	;
+        : '!' 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
-	;
+        : /* empty */
+        | variable
+        ;
 
 variable
-	: NAME
-	| NAME '[' expression_list ']'
-	| '$' non_post_simp_exp
-	;
+        : NAME
+        | NAME '[' expression_list ']'
+        | '$' non_post_simp_exp
+        ;
 
 l_brace
-	: '{' opt_nls
-	;
+        : '{' opt_nls
+        ;
 
 r_brace
-	: '}' opt_nls
-	;
+        : '}' opt_nls
+        ;
 
 r_paren
-	: ')'
-	;
+        : ')'
+        ;
 
 opt_semi
-	: /* empty */
-	| semi
-	;
+        : /* empty */
+        | semi
+        ;
 
 semi
-	: ';'
-	;
+        : ';'
+        ;
 
-comma	: ',' opt_nls
-	;
+comma   : ',' opt_nls
+        ;
 ]],
 
 dnl INPUT
@@ -403,32 +403,61 @@
 dnl
 dnl   getline $!(4*0);
 dnl
-dnl That is, they shift `*' immediately and make it part of the getline
+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 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 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;'.
+dnl don't like even 'print $!4;'.
 [[LEX_GETLINE, '$', '!', YNUMBER, '*', YNUMBER, ';']],
 
 dnl BISON-STDERR
-[AT_COND_CASE([[canonical LR]],
-[[input.y: conflicts: 265 shift/reduce]],
-[[input.y: conflicts: 65 shift/reduce]])[
+[[input.y:66.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:170.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:175.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:180.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:188.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:202.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:207.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:221.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:300.10: warning: empty rule without %empty [-Wempty-rule]
+input.y:323.10: warning: empty rule without %empty [-Wempty-rule]
+]AT_COND_CASE([[canonical LR]],
+[[input.y: warning: 265 shift/reduce conflicts [-Wconflicts-sr]]],
+[[input.y: warning: 65 shift/reduce conflicts [-Wconflicts-sr]]])[
+input.y:39.1-5: warning: useless associativity for FUNC_CALL, use %precedence [-Wprecedence]
+input.y:44.1-5: warning: useless associativity for YNUMBER, use %precedence [-Wprecedence]
+input.y:44.1-5: warning: useless associativity for YSTRING, use %precedence [-Wprecedence]
+input.y:42.1-9: warning: useless precedence and associativity for APPEND_OP [-Wprecedence]
+input.y:33.1-6: warning: useless associativity for ASSIGNOP, use %precedence [-Wprecedence]
+input.y:43.1-5: warning: useless associativity for CONCAT_OP, use %precedence [-Wprecedence]
+input.y:37.1-5: warning: useless precedence and associativity for LEX_GETLINE [-Wprecedence]
+input.y:38.1-9: warning: useless associativity for LEX_IN, use %precedence [-Wprecedence]
+input.y:49.1-5: warning: useless associativity for INCREMENT, use %precedence [-Wprecedence]
+input.y:49.1-5: warning: useless associativity for DECREMENT, use %precedence [-Wprecedence]
+input.y:39.1-5: warning: useless associativity for LEX_BUILTIN, use %precedence [-Wprecedence]
+input.y:39.1-5: warning: useless associativity for LEX_LENGTH, use %precedence [-Wprecedence]
+input.y:40.1-9: warning: useless precedence and associativity for ',' [-Wprecedence]
+input.y:47.1-6: warning: useless associativity for '!', use %precedence [-Wprecedence]
+input.y:47.1-6: warning: useless associativity for UNARY, use %precedence [-Wprecedence]
+input.y:50.1-5: warning: useless associativity for '$', use %precedence [-Wprecedence]
+input.y:51.1-5: warning: useless associativity for '(', use %precedence [-Wprecedence]
+input.y:51.1-5: warning: useless precedence and associativity for ')' [-Wprecedence]
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]],
 
 dnl LAST-STATE
@@ -447,7 +476,7 @@
 dnl   - 58 -> 327: reduce -> shift on '*', '/', and '%'
 dnl   - 61 -> 328: reduce -> shift on '*', '/', and '%'
 [AT_COND_CASE([[LALR]], [],
-[[@@ -712,7 +712,7 @@
+[[@@ -747,7 +747,7 @@
    156         | . '$' non_post_simp_exp
 
      NAME  shift, and go to state 9
@@ -456,7 +485,7 @@
 
      NAME      [reduce using rule 152 (opt_variable)]
      '$'       [reduce using rule 152 (opt_variable)]
-@@ -5379,7 +5379,7 @@
+@@ -5414,7 +5414,7 @@
    156         | . '$' non_post_simp_exp
 
      NAME  shift, and go to state 9
@@ -465,7 +494,7 @@
 
      NAME      [reduce using rule 152 (opt_variable)]
      '$'       [reduce using rule 152 (opt_variable)]
-@@ -5399,7 +5399,7 @@
+@@ -5434,7 +5434,7 @@
    156         | . '$' non_post_simp_exp
 
      NAME  shift, and go to state 9
@@ -474,7 +503,7 @@
 
      NAME      [reduce using rule 152 (opt_variable)]
      '$'       [reduce using rule 152 (opt_variable)]
-@@ -6214,7 +6214,7 @@
+@@ -6249,7 +6249,7 @@
    156         | . '$' non_post_simp_exp
 
      NAME  shift, and go to state 9
@@ -483,7 +512,7 @@
 
      NAME      [reduce using rule 152 (opt_variable)]
      '$'       [reduce using rule 152 (opt_variable)]
-@@ -11099,3 +11099,274 @@
+@@ -11134,3 +11134,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)
@@ -783,33 +812,33 @@
 AT_TEST_EXISTING_GRAMMAR([[GNU Cim Grammar]],
 [[
 %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
+        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
+        HASSIGNVALUE HASSIGNREF
+        /*HDOT*/ HPAREXPSEPARATOR HLABELSEPARATOR HSTATEMENTSEPARATOR
+        HBEGPAR HENDPAR
+        HEQR HNER
+        HADD HSUB HMUL HDIV HINTDIV HEXP
+        HDOTDOTDOT
 
 %token HIDENTIFIER
 %token HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
@@ -829,7 +858,7 @@
 
 %left HVALRELOPERATOR HREFRELOPERATOR HOBJRELOPERATOR
 
-%left	HCONC
+%left   HCONC
 
 %left HTERMOPERATOR
 %left UNEAR
@@ -845,531 +874,562 @@
 [[
 /* 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
+                        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
-		;
+                ;
+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
+                ;
 TYPE            :       HREF HBEGPAR
-			HIDENTIFIER
-				{}
-			HENDPAR
-		|       HTEXT
-		|       HBOOLEAN
-		|       HCHARACTER
-		|       HSHORT HINTEGER
-		|       HINTEGER
-		|       HREAL
-		|       HLONG HREAL
-		;
+                        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
-		;
+/*              |       HELSE
+                        HIF
+                        EXPRESSION
+                        HTHEN   {}
+                        BLOCK   {}
+                        MBEE_ELSE_PART          {}*/
+                |       HELSE   {}
+                        BLOCK
+                ;
 FOR_LIST        :       FOR_LIST_ELEMENT
-		|       FOR_LIST_ELEMENT
-			HPAREXPSEPARATOR
-			FOR_LIST
-		;
+                |       FOR_LIST_ELEMENT
+                        HPAREXPSEPARATOR
+                        FOR_LIST
+                ;
 FOR_LIST_ELEMENT:       EXPRESSION
-			MBEE_F_L_EL_R_PT
-		;
+                        MBEE_F_L_EL_R_PT
+                ;
 MBEE_F_L_EL_R_PT:       /*EMPT*/
-		|       HWHILE
-			EXPRESSION
-		|       HSTEP
-			EXPRESSION
-			HUNTIL
-			EXPRESSION
-		;
+                |       HWHILE
+                        EXPRESSION
+                |       HSTEP
+                        EXPRESSION
+                        HUNTIL
+                        EXPRESSION
+                ;
 GOTO            :       HGO
-			HTO
-		|       HGOTO
-		;
+                        HTO
+                |       HGOTO
+                ;
 CONN_STATE_R_PT :       WHEN_CLAUSE_LIST
-		|       HDO   {}
-			BLOCK
-		;
+                |       HDO   {}
+                        BLOCK
+                ;
 WHEN_CLAUSE_LIST:       HWHEN
-			HIDENTIFIER
-			HDO    {}
-			BLOCK
-		|       WHEN_CLAUSE_LIST
-			HWHEN
-			HIDENTIFIER
-			HDO    {}
-			BLOCK
-		;
+                        HIDENTIFIER
+                        HDO    {}
+                        BLOCK
+                |       WHEN_CLAUSE_LIST
+                        HWHEN
+                        HIDENTIFIER
+                        HDO    {}
+                        BLOCK
+                ;
 MBEE_OTWI_CLAUS :       /*EMPT*/
-		|       HOTHERWISE {}
+                |       HOTHERWISE {}
 
-			BLOCK
-		;
-ACTIVATOR	:	HACTIVATE
-		|	HREACTIVATE
-		;
-SCHEDULE	:	/*EMPT*/
-		|	ATDELAY EXPRESSION	{}
-			PRIOR
-		|	BEFOREAFTER		{}
-			EXPRESSION
-		;
-ATDELAY		:	HAT
-		|	HDELAY
-		;
-BEFOREAFTER	:	HBEFORE
-		|	HAFTER
-		;
-PRIOR		:	/*EMPT*/
-		|	HPRIOR
-		;
+                        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*/
-		;
+                        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
-		;
+                ;
+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
-		;
+                |       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
-		;
+                |       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
-		;
+                |       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
+                        HPAREXPSEPARATOR
+                        ARRAY_SEGMENT
+                ;
 ARRAY_SEGMENT_EL:       HIDENTIFIER
-		;
+                ;
 BAUND_PAIR_LIST :       BAUND_PAIR
-		|       BAUND_PAIR
-			HPAREXPSEPARATOR
-			BAUND_PAIR_LIST
-		;
+                |       BAUND_PAIR
+                        HPAREXPSEPARATOR
+                        BAUND_PAIR_LIST
+                ;
 BAUND_PAIR      :       EXPRESSION
-			HLABELSEPARATOR
-			EXPRESSION
-		;
+                        HLABELSEPARATOR
+                        EXPRESSION
+                ;
 SWITCH_LIST     :       EXPRESSION
-		|       EXPRESSION
-			HPAREXPSEPARATOR
-			SWITCH_LIST
-		;
+                |       EXPRESSION
+                        HPAREXPSEPARATOR
+                        SWITCH_LIST
+                ;
 HEADING         :       MBEE_FMAL_PAR_P HSTATEMENTSEPARATOR {}
-			MBEE_MODE_PART  {}
-			MBEE_SPEC_PART  {}
-			MBEE_PROT_PART  {}
-			MBEE_VIRT_PART
-		;
+                        MBEE_MODE_PART  {}
+                        MBEE_SPEC_PART  {}
+                        MBEE_PROT_PART  {}
+                        MBEE_VIRT_PART
+                ;
 MBEE_FMAL_PAR_P :       /*EMPT*/
-		|       FMAL_PAR_PART
-		;
+                |       FMAL_PAR_PART
+                ;
 FMAL_PAR_PART   :       HBEGPAR NO_TYPE
-			MBEE_LISTV HENDPAR
-		;
+                        MBEE_LISTV HENDPAR
+                ;
 MBEE_LISTV      :       /*EMPT*/
-		|       LISTV
-		;
+                |       LISTV
+                ;
 LISTV           :       HIDENTIFIER
-		|	FPP_CATEG HDOTDOTDOT
-		|       HIDENTIFIER     {}
-			HPAREXPSEPARATOR LISTV
-		|       FPP_SPEC
-		|       FPP_SPEC
-			HPAREXPSEPARATOR LISTV
-		;
+                |       FPP_CATEG HDOTDOTDOT
+                |       HIDENTIFIER     {}
+                        HPAREXPSEPARATOR LISTV
+                |       FPP_SPEC
+                |       FPP_SPEC
+                        HPAREXPSEPARATOR LISTV
+                ;
 FPP_HEADING     :       HBEGPAR NO_TYPE
-			FPP_MBEE_LISTV HENDPAR
-		;
+                        FPP_MBEE_LISTV HENDPAR
+                ;
 FPP_MBEE_LISTV  :       /*EMPT*/
-		|       FPP_LISTV
-		;
-FPP_LISTV       :	FPP_CATEG HDOTDOTDOT
-		|       FPP_SPEC
-		|       FPP_SPEC
-			HPAREXPSEPARATOR LISTV
-		;
+                |       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 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. */ }
-		;
+                |       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
-		;
+                |       HDOTDOTDOT
+                |       HIDENTIFIER     {}
+                        HPAREXPSEPARATOR IDENTIFIER_LISTV
+                ;
 MBEE_MODE_PART  :       /*EMPT*/
-		|       MODE_PART
-		;
+                |       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
-		;
+                |       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
-		;
+                        IDENTIFIER_LISTV
+                        HSTATEMENTSEPARATOR
+                ;
 VAR_PART        :       HVAR            {}
-			IDENTIFIER_LISTV
-			HSTATEMENTSEPARATOR
-		;
+                        IDENTIFIER_LISTV
+                        HSTATEMENTSEPARATOR
+                ;
 VALUE_PART      :       HVALUE          {}
-			IDENTIFIER_LISTV HSTATEMENTSEPARATOR
-		;
+                        IDENTIFIER_LISTV HSTATEMENTSEPARATOR
+                ;
 MBEE_SPEC_PART  :       /*EMPT*/
-		|       SPEC_PART
-		;
+                |       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
-		;
+                |       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_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
+                ;
 PROTECTION_PART :       PROT_SPECIFIER IDENTIFIER_LIST
-			HSTATEMENTSEPARATOR
-		|       PROTECTION_PART  PROT_SPECIFIER
-			IDENTIFIER_LIST HSTATEMENTSEPARATOR
-		;
+                        HSTATEMENTSEPARATOR
+                |       PROTECTION_PART  PROT_SPECIFIER
+                        IDENTIFIER_LIST HSTATEMENTSEPARATOR
+                ;
 PROT_SPECIFIER  :       HHIDDEN
-		|       HPROTECTED
-		|       HHIDDEN
-			HPROTECTED
-		|       HPROTECTED
-			HHIDDEN
-		;
+                |       HPROTECTED
+                |       HHIDDEN
+                        HPROTECTED
+                |       HPROTECTED
+                        HHIDDEN
+                ;
 MBEE_VIRT_PART  :       /*EMPT*/
-		|       VIRTUAL_PART
-		;
+                |       VIRTUAL_PART
+                ;
 VIRTUAL_PART    :       HVIRTUAL
-			HLABELSEPARATOR
-			MBEE_SPEC_PART
-		;
+                        HLABELSEPARATOR
+                        MBEE_SPEC_PART
+                ;
 IDENTIFIER_LIST :       HIDENTIFIER
-		|       IDENTIFIER_LIST HPAREXPSEPARATOR
-			HIDENTIFIER
-		;
+                |       IDENTIFIER_LIST HPAREXPSEPARATOR
+                        HIDENTIFIER
+                ;
 IDENTIFIER_LISTC:       HIDENTIFIER
-			MBEE_CONSTANT
-		|       IDENTIFIER_LISTC HPAREXPSEPARATOR
-			HIDENTIFIER
-			MBEE_CONSTANT
-		;
-MBEE_CONSTANT	:	/* EMPTY */
-		|	HVALRELOPERATOR
-				{}
-			EXPRESSION
-		;
+                        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
-		|
+                |       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
-		;
+                        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
-		;
+                |       HBEGPAR
+                        ARGUMENT_LIST HENDPAR
+                ;
 MBEE_ARG_R_PT   :       /*EMPTY*/
-		|       HBEGPAR
-			ARGUMENT_LIST HENDPAR
-		;
+                |       HBEGPAR
+                        ARGUMENT_LIST HENDPAR
+                ;
 ARGUMENT_LIST   :       EXPRESSION
-		|       EXPRESSION
-			HPAREXPSEPARATOR
-			ARGUMENT_LIST
-		;
+                |       EXPRESSION
+                        HPAREXPSEPARATOR
+                        ARGUMENT_LIST
+                ;
 ]],
 
 dnl INPUT
 [[]],
 
 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]])[
+[[input.y:128.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:137.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:142.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:161.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:179.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:205.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:213.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:225.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:292.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:294.20: warning: empty rule without %empty [-Wempty-rule]
+input.y:367.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:373.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:387.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:401.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:413.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:443.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:471.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:474.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:489.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:506.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:587.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:591.18: warning: empty rule without %empty [-Wempty-rule]
+]AT_COND_CASE([[canonical LR]],
+[[input.y: warning: 1876 shift/reduce conflicts [-Wconflicts-sr]
+input.y: warning: 144 reduce/reduce conflicts [-Wconflicts-rr]]],
+[[input.y: warning: 78 shift/reduce conflicts [-Wconflicts-sr]
+input.y: warning: 10 reduce/reduce conflicts [-Wconflicts-rr]]])[
+input.y:72.1-5: warning: useless associativity for HQUA, use %precedence [-Wprecedence]
+input.y:53.1-6: warning: useless associativity for HASSIGN, use %precedence [-Wprecedence]
+input.y:54.1-5: warning: useless associativity for HORELSE, use %precedence [-Wprecedence]
+input.y:55.1-5: warning: useless associativity for HANDTHEN, use %precedence [-Wprecedence]
+input.y:61.1-5: warning: useless associativity for HNOT, use %precedence [-Wprecedence]
+input.y:68.1-5: warning: useless associativity for UNEAR, use %precedence [-Wprecedence]
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]],
 
 dnl LAST-STATE
@@ -1401,7 +1461,7 @@
 # Bison once reported shift/reduce conflicts that it shouldn't have.
 
 AT_TEST_EXISTING_GRAMMAR([[GNU pic (Groff 1.18.1) Grammar]],
-[[%error-verbose
+[[%define parse.error verbose
 
 %token LABEL
 %token VARIABLE
@@ -1535,7 +1595,7 @@
 
 %left LEFT RIGHT
 /* Give attributes that take an optional expression a higher
-precedence than left and right, so that eg `line chop left'
+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
@@ -1548,7 +1608,7 @@
 /* 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'
+/* 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
@@ -1570,367 +1630,367 @@
 ]],
 [[
 top:
-	optional_separator
-	| element_list
-	;
+        optional_separator
+        | element_list
+        ;
 
 element_list:
-	optional_separator middle_element_list optional_separator
-	;
+        optional_separator middle_element_list optional_separator
+        ;
 
 middle_element_list:
-	element
-	| middle_element_list separator element
-	;
+        element
+        | middle_element_list separator element
+        ;
 
 optional_separator:
-	/* empty */
-	| separator
-	;
+        /* empty */
+        | separator
+        ;
 
 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
-	;
+        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
-	;
+        RESET VARIABLE
+        | reset_variables VARIABLE
+        | reset_variables ',' VARIABLE
+        ;
 
 print_args:
-	print_arg
-	| print_args print_arg
-	;
+        print_arg
+        | print_args print_arg
+        ;
 
 print_arg:
-	expr							%prec ','
-	| text
-	| position						%prec ','
-	;
+        expr                                                    %prec ','
+        | text
+        | position                                              %prec ','
+        ;
 
 simple_if:
-	IF any_expr THEN
-		{}
-	DELIMITED
-	;
+        IF any_expr THEN
+                {}
+        DELIMITED
+        ;
 
 until:
-	/* empty */
-	| UNTIL TEXT
-	;
+        /* empty */
+        | UNTIL TEXT
+        ;
 
 any_expr:
-	expr
-	| text_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
-	;
+        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
-	;
+        /* 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
-	;
+        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
-	;
+        /* 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
-	;
+        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 ')'
-	;
+        TEXT
+        | SPRINTF '(' TEXT sprintf_args ')'
+        ;
 
 sprintf_args:
-	/* empty */
-	| sprintf_args ',' expr
-	;
+        /* empty */
+        | sprintf_args ',' expr
+        ;
 
 position:
-	position_not_place
-	| place
-	;
+        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 '>'
-	;
+        expr_pair
+        | position '+' expr_pair
+        | position '-' expr_pair
+        | '(' position ',' position ')'
+        | expr between position AND position
+        | expr '<' position ',' position '>'
+        ;
 
 between:
-	BETWEEN
-	| OF THE WAY BETWEEN
-	;
+        BETWEEN
+        | OF THE WAY BETWEEN
+        ;
 
 expr_pair:
-	expr ',' expr
-	| '(' 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
-	;
+        /* 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
-	;
+        LABEL
+        | nth_primitive
+        | label '.' LABEL
+        ;
 
 ordinal:
-	ORDINAL
-	| '`' any_expr TH
-	;
+        ORDINAL
+        | '`' any_expr TH
+        ;
 
 optional_ordinal_last:
-	LAST
-	| ordinal LAST
-	;
+        LAST
+        | ordinal LAST
+        ;
 
 nth_primitive:
-	ordinal object_type
-	| optional_ordinal_last object_type
-	;
+        ordinal object_type
+        | optional_ordinal_last object_type
+        ;
 
 object_type:
-	BOX
-	| CIRCLE
-	| ELLIPSE
-	| ARC
-	| LINE
-	| ARROW
-	| SPLINE
-	| '[' ']'
-	| TEXT
-	;
+        BOX
+        | CIRCLE
+        | ELLIPSE
+        | ARC
+        | LINE
+        | ARROW
+        | SPLINE
+        | '[' ']'
+        | TEXT
+        ;
 
 label_path:
-	'.' LABEL
-	| label_path '.' LABEL
-	;
+        '.' 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
-	;
+        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
-	;
+        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
-	;
+        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
-	;
+        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
+        ;
 ]],
 
 dnl INPUT
@@ -1951,7 +2011,94 @@
 [[VARIABLE, '=', LABEL, LEFT, DOT_X]],
 
 dnl BISON-STDERR
-[[input.y:470.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
+[[input.y:202.20: warning: empty rule without %empty [-Wempty-rule]
+input.y:270.7: warning: empty rule without %empty [-Wempty-rule]
+input.y:292.13: warning: empty rule without %empty [-Wempty-rule]
+input.y:309.18: warning: empty rule without %empty [-Wempty-rule]
+input.y:382.14: warning: empty rule without %empty [-Wempty-rule]
+input.y:471.11-48: warning: rule useless in parser due to conflicts [-Wother]
+input.y:154.1-5: warning: useless associativity for LABEL, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for VARIABLE, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for NUMBER, use %precedence [-Wprecedence]
+input.y:141.1-5: warning: useless associativity for TEXT, use %precedence [-Wprecedence]
+input.y:157.1-5: warning: useless associativity for ORDINAL, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for LAST, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for UP, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for DOWN, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for BOX, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for CIRCLE, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for ELLIPSE, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for ARC, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for LINE, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for ARROW, use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for SPLINE, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for HEIGHT, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for RADIUS, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for WIDTH, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for DIAMETER, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for FROM, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for TO, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for AT, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless precedence and associativity for SOLID [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for DOTTED, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for DASHED, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for CHOP, use %precedence [-Wprecedence]
+input.y:147.1-5: warning: useless precedence and associativity for LJUST [-Wprecedence]
+input.y:147.1-5: warning: useless precedence and associativity for RJUST [-Wprecedence]
+input.y:147.1-5: warning: useless precedence and associativity for ABOVE [-Wprecedence]
+input.y:147.1-5: warning: useless precedence and associativity for BELOW [-Wprecedence]
+input.y:176.1-5: warning: useless associativity for OF, use %precedence [-Wprecedence]
+input.y:176.1-5: warning: useless associativity for BETWEEN, use %precedence [-Wprecedence]
+input.y:177.1-5: warning: useless associativity for AND, use %precedence [-Wprecedence]
+input.y:157.1-5: warning: useless associativity for HERE, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_N, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_E, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_W, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_S, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_NE, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_SE, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_NW, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_SW, use %precedence [-Wprecedence]
+input.y:166.1-5: warning: useless associativity for DOT_C, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for DOT_START, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for DOT_END, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for SIN, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for COS, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for ATAN2, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for LOG, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for EXP, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for SQRT, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for K_MAX, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for K_MIN, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for INT, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for RAND, use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for SRAND, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for TOP, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for BOTTOM, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for UPPER, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for LOWER, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for LEFT_CORNER, use %precedence [-Wprecedence]
+input.y:167.1-5: warning: useless associativity for RIGHT_CORNER, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for NORTH, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for SOUTH, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for EAST, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for WEST, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for CENTER, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for END, use %precedence [-Wprecedence]
+input.y:168.1-5: warning: useless associativity for START, use %precedence [-Wprecedence]
+input.y:140.1-5: warning: useless associativity for PLOT, use %precedence [-Wprecedence]
+input.y:162.1-5: warning: useless associativity for THICKNESS, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless associativity for FILL, use %precedence [-Wprecedence]
+input.y:153.1-5: warning: useless precedence and associativity for COLORED [-Wprecedence]
+input.y:153.1-5: warning: useless precedence and associativity for OUTLINED [-Wprecedence]
+input.y:141.1-5: warning: useless associativity for SPRINTF, use %precedence [-Wprecedence]
+input.y:137.1-5: warning: useless associativity for '.', use %precedence [-Wprecedence]
+input.y:156.1-5: warning: useless associativity for '(', use %precedence [-Wprecedence]
+input.y:157.1-5: warning: useless associativity for '`', use %precedence [-Wprecedence]
+input.y:159.1-5: warning: useless associativity for '@<:@', use %precedence [-Wprecedence]
+input.y:170.1-5: warning: useless associativity for ',', use %precedence [-Wprecedence]
+input.y:181.1-6: warning: useless associativity for '!', use %precedence [-Wprecedence]
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]],
 
 dnl LAST-STATE
@@ -1966,7 +2113,7 @@
 dnl   - 339 -> 426
 dnl   - 383 -> 427
 [AT_COND_CASE([[LALR]], [],
-[[@@ -1223,7 +1223,7 @@
+[[@@ -1249,7 +1249,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -1975,7 +2122,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -1377,7 +1377,7 @@
+@@ -1403,7 +1403,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -1984,7 +2131,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -1854,7 +1854,7 @@
+@@ -1880,7 +1880,7 @@
 
      text                   go to state 162
      place                  go to state 114
@@ -1993,7 +2140,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -2047,7 +2047,7 @@
+@@ -2073,7 +2073,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2002,7 +2149,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -2571,7 +2571,7 @@
+@@ -2597,7 +2597,7 @@
      position_not_place     go to state 99
      expr_pair              go to state 191
      place                  go to state 101
@@ -2011,7 +2158,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -2732,7 +2732,7 @@
+@@ -2758,7 +2758,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2020,7 +2167,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -2875,7 +2875,7 @@
+@@ -2901,7 +2901,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2029,7 +2176,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -3018,7 +3018,7 @@
+@@ -3044,7 +3044,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2038,7 +2185,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -3256,7 +3256,7 @@
+@@ -3282,7 +3282,7 @@
 
  State 102
 
@@ -2047,7 +2194,7 @@
    147      | label . corner
    153 label: label . '.' LABEL
    180 corner: . DOT_N
-@@ -3645,7 +3645,7 @@
+@@ -3671,7 +3671,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2056,7 +2203,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -3804,7 +3804,7 @@
+@@ -3830,7 +3830,7 @@
      text_expr              go to state 239
      text                   go to state 113
      place                  go to state 114
@@ -2065,7 +2212,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -4481,7 +4481,7 @@
+@@ -4507,7 +4507,7 @@
      $default  reduce using rule 89 (object_spec)
 
      place                  go to state 114
@@ -2074,7 +2221,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -4673,7 +4673,7 @@
+@@ -4699,7 +4699,7 @@
      $default  reduce using rule 91 (object_spec)
 
      place                  go to state 114
@@ -2083,7 +2230,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -4867,7 +4867,7 @@
+@@ -4893,7 +4893,7 @@
      $default  reduce using rule 95 (object_spec)
 
      place                  go to state 114
@@ -2092,7 +2239,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -5065,7 +5065,7 @@
+@@ -5091,7 +5091,7 @@
      $default  reduce using rule 93 (object_spec)
 
      place                  go to state 114
@@ -2101,7 +2248,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -5260,7 +5260,7 @@
+@@ -5286,7 +5286,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2110,7 +2257,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -5403,7 +5403,7 @@
+@@ -5429,7 +5429,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2119,7 +2266,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -5546,7 +5546,7 @@
+@@ -5572,7 +5572,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2128,7 +2275,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -5689,7 +5689,7 @@
+@@ -5715,7 +5715,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2137,7 +2284,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -6475,7 +6475,7 @@
+@@ -6501,7 +6501,7 @@
 
      expr_pair              go to state 280
      place                  go to state 114
@@ -2146,7 +2293,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -6633,7 +6633,7 @@
+@@ -6659,7 +6659,7 @@
      $default  reduce using rule 105 (object_spec)
 
      place                  go to state 114
@@ -2155,7 +2302,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -6825,7 +6825,7 @@
+@@ -6851,7 +6851,7 @@
      $default  reduce using rule 107 (object_spec)
 
      place                  go to state 114
@@ -2164,7 +2311,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -7017,7 +7017,7 @@
+@@ -7043,7 +7043,7 @@
      $default  reduce using rule 114 (object_spec)
 
      place                  go to state 114
@@ -2173,7 +2320,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -7264,7 +7264,7 @@
+@@ -7290,7 +7290,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2182,7 +2329,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -7408,7 +7408,7 @@
+@@ -7434,7 +7434,7 @@
      $default  reduce using rule 109 (object_spec)
 
      place                  go to state 114
@@ -2191,7 +2338,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -7819,12 +7819,12 @@
+@@ -7845,12 +7845,12 @@
      position_not_place     go to state 296
      expr_pair              go to state 100
      place                  go to state 297
@@ -2206,7 +2353,7 @@
 
 
  State 165
-@@ -7987,7 +7987,7 @@
+@@ -8013,7 +8013,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2215,7 +2362,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8172,7 +8172,7 @@
+@@ -8198,7 +8198,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2224,7 +2371,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8333,7 +8333,7 @@
+@@ -8359,7 +8359,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2233,7 +2380,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8494,7 +8494,7 @@
+@@ -8520,7 +8520,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2242,7 +2389,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8655,7 +8655,7 @@
+@@ -8681,7 +8681,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2251,7 +2398,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8816,7 +8816,7 @@
+@@ -8842,7 +8842,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2260,7 +2407,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -8977,7 +8977,7 @@
+@@ -9003,7 +9003,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2269,7 +2416,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9138,7 +9138,7 @@
+@@ -9164,7 +9164,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2278,7 +2425,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9299,7 +9299,7 @@
+@@ -9325,7 +9325,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2287,7 +2434,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9460,7 +9460,7 @@
+@@ -9486,7 +9486,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2296,7 +2443,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9623,7 +9623,7 @@
+@@ -9649,7 +9649,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2305,7 +2452,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9784,7 +9784,7 @@
+@@ -9810,7 +9810,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2314,7 +2461,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -9921,7 +9921,7 @@
+@@ -9947,7 +9947,7 @@
 
      $default  reduce using rule 47 (any_expr)
 
@@ -2323,7 +2470,7 @@
 
 
  State 193
-@@ -10152,7 +10152,7 @@
+@@ -10178,7 +10178,7 @@
 
      expr_pair              go to state 317
      place                  go to state 114
@@ -2332,7 +2479,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -10298,7 +10298,7 @@
+@@ -10324,7 +10324,7 @@
 
      expr_pair              go to state 318
      place                  go to state 114
@@ -2341,7 +2488,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -10622,7 +10622,7 @@
+@@ -10648,7 +10648,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2350,7 +2497,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -10765,7 +10765,7 @@
+@@ -10791,7 +10791,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2359,7 +2506,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -10908,7 +10908,7 @@
+@@ -10934,7 +10934,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2368,7 +2515,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11051,7 +11051,7 @@
+@@ -11077,7 +11077,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2377,7 +2524,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11194,7 +11194,7 @@
+@@ -11220,7 +11220,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2386,7 +2533,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11337,7 +11337,7 @@
+@@ -11363,7 +11363,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2395,7 +2542,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11480,7 +11480,7 @@
+@@ -11506,7 +11506,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2404,7 +2551,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11637,7 +11637,7 @@
+@@ -11663,7 +11663,7 @@
      position_not_place     go to state 99
      expr_pair              go to state 100
      place                  go to state 101
@@ -2413,7 +2560,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11780,7 +11780,7 @@
+@@ -11806,7 +11806,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2422,7 +2569,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -11923,7 +11923,7 @@
+@@ -11949,7 +11949,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2431,7 +2578,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12066,7 +12066,7 @@
+@@ -12092,7 +12092,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2440,7 +2587,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12209,7 +12209,7 @@
+@@ -12235,7 +12235,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2449,7 +2596,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12352,7 +12352,7 @@
+@@ -12378,7 +12378,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2458,7 +2605,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12495,7 +12495,7 @@
+@@ -12521,7 +12521,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2467,7 +2614,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12638,7 +12638,7 @@
+@@ -12664,7 +12664,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2476,7 +2623,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -12794,12 +12794,12 @@
+@@ -12820,12 +12820,12 @@
      position_not_place     go to state 99
      expr_pair              go to state 100
      place                  go to state 101
@@ -2491,7 +2638,7 @@
 
 
  State 238
-@@ -12937,7 +12937,7 @@
+@@ -12963,7 +12963,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2500,7 +2647,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -13160,7 +13160,7 @@
+@@ -13186,7 +13186,7 @@
      text_expr              go to state 342
      text                   go to state 113
      place                  go to state 114
@@ -2509,7 +2656,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -13319,7 +13319,7 @@
+@@ -13345,7 +13345,7 @@
      text_expr              go to state 344
      text                   go to state 113
      place                  go to state 114
@@ -2518,7 +2665,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -13502,7 +13502,7 @@
+@@ -13528,7 +13528,7 @@
      text_expr              go to state 348
      text                   go to state 113
      place                  go to state 114
@@ -2527,7 +2674,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -13661,7 +13661,7 @@
+@@ -13687,7 +13687,7 @@
      text_expr              go to state 350
      text                   go to state 113
      place                  go to state 114
@@ -2536,7 +2683,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -13804,7 +13804,7 @@
+@@ -13830,7 +13830,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2545,7 +2692,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -14747,7 +14747,7 @@
+@@ -14773,7 +14773,7 @@
      position_not_place     go to state 99
      expr_pair              go to state 191
      place                  go to state 101
@@ -2554,7 +2701,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -15074,7 +15074,7 @@
+@@ -15100,7 +15100,7 @@
      text                   go to state 113
      expr_pair              go to state 365
      place                  go to state 114
@@ -2563,7 +2710,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -15693,12 +15693,12 @@
+@@ -15719,12 +15719,12 @@
      position_not_place     go to state 99
      expr_pair              go to state 100
      place                  go to state 101
@@ -2578,7 +2725,7 @@
 
 
  State 315
-@@ -16124,7 +16124,7 @@
+@@ -16150,7 +16150,7 @@
 
      $default  reduce using rule 239 (expr)
 
@@ -2587,7 +2734,7 @@
 
      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 @@
+@@ -17260,7 +17260,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2596,7 +2743,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -17416,7 +17416,7 @@
+@@ -17442,7 +17442,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2605,7 +2752,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -17577,7 +17577,7 @@
+@@ -17603,7 +17603,7 @@
      text_expr              go to state 112
      text                   go to state 113
      place                  go to state 114
@@ -2614,7 +2761,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -17772,12 +17772,12 @@
+@@ -17798,12 +17798,12 @@
      position_not_place     go to state 99
      expr_pair              go to state 100
      place                  go to state 101
@@ -2629,7 +2776,7 @@
 
 
  State 383
-@@ -18071,7 +18071,7 @@
+@@ -18097,7 +18097,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2638,7 +2785,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -18221,7 +18221,7 @@
+@@ -18247,7 +18247,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2647,7 +2794,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -18830,7 +18830,7 @@
+@@ -18856,7 +18856,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2656,7 +2803,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -18987,7 +18987,7 @@
+@@ -19013,7 +19013,7 @@
      '!'           shift, and go to state 94
 
      place                  go to state 114
@@ -2665,7 +2812,7 @@
      ordinal                go to state 103
      optional_ordinal_last  go to state 104
      nth_primitive          go to state 105
-@@ -19089,3 +19089,440 @@
+@@ -19115,3 +19115,440 @@
     29 placeless_element: FOR VARIABLE '=' expr TO expr optional_by DO $@6 DELIMITED .
 
      $default  reduce using rule 29 (placeless_element)
diff --git a/tests/glr-regression.at b/tests/glr-regression.at
index e08904b..8cf9846 100644
--- a/tests/glr-regression.at
+++ b/tests/glr-regression.at
@@ -1,6 +1,6 @@
 # Checking GLR Parsing: Regression Tests           -*- Autotest -*-
 
-# Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software
+# Copyright (C) 2002-2003, 2005-2007, 2009-2015, 2018-2019 Free Software
 # Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
@@ -41,9 +41,9 @@
 %}
 
 
+%define parse.assert
 %glr-parser
 
-
 /* -------- productions ------ */
 %%
 
@@ -67,12 +67,12 @@
   return 0;
 }
 
-const char *input = YY_NULL;
+const char *input = YY_NULLPTR;
 
 int
 main (int argc, const char* argv[])
 {
-  assert (argc == 2);
+  assert (argc == 2); (void) argc;
   input = argv[1];
   return yyparse ();
 }
@@ -87,11 +87,11 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr1.c glr-regr1.y]], 0, [],
-[glr-regr1.y: conflicts: 1 shift/reduce
-])
+AT_BISON_CHECK([[-o glr-regr1.c -rall glr-regr1.y]], 0, [],
+[[glr-regr1.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+]])
 AT_COMPILE([glr-regr1])
-AT_PARSER_CHECK([[./glr-regr1 BPBPB]], 0,
+AT_PARSER_CHECK([[glr-regr1 BPBPB]], 0,
 [[E -> 'B'
 E -> 'B'
 E -> E 'P' E
@@ -128,6 +128,7 @@
   ]AT_YYLEX_DECLARE[
 %}
 
+%define parse.assert
 %glr-parser
 
 %%
@@ -153,7 +154,7 @@
     { $$ = $1; }
   | var ',' var_list
     {
-      char *s = (char *) realloc ($1, strlen ($1) + 1 + strlen ($3) + 1);
+      char *s = YY_CAST (char *, realloc ($1, strlen ($1) + 1 + strlen ($3) + 1));
       strcat (s, ",");
       strcat (s, $3);
       free ($3);
@@ -172,7 +173,6 @@
 yylex (void)
 {
   char buf[50];
-  char *s;
   assert (!feof (stdin));
   switch (fscanf (input, " %1[a-z,]", buf))
   {
@@ -181,15 +181,19 @@
   case EOF:
     return 0;
   default:
+    if (fscanf (input, "%49s", buf) != 1)
+      return 0;
+    else
+      {
+        char *s;
+        assert (strlen (buf) < sizeof buf - 1);
+        s = YY_CAST (char *, malloc (strlen (buf) + 1));
+        strcpy (s, buf);
+        yylval = s;
+        return 'V';
+      }
     break;
   }
-  if (fscanf (input, "%49s", buf) != 1)
-    return 0;
-  assert (strlen (buf) < sizeof buf - 1);
-  s = (char *) malloc (strlen (buf) + 1);
-  strcpy (s, buf);
-  yylval = s;
-  return 'V';
 }
 
 int
@@ -207,22 +211,22 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr2a.c glr-regr2a.y]], 0, [],
-[glr-regr2a.y: conflicts: 2 shift/reduce
-])
+AT_BISON_CHECK([[-o glr-regr2a.c -rall glr-regr2a.y]], 0, [],
+[[glr-regr2a.y: warning: 2 shift/reduce conflicts [-Wconflicts-sr]
+]])
 AT_COMPILE([glr-regr2a])
 
 AT_DATA([input1.txt],
 [[s VARIABLE_1 t v x q
 ]])
-AT_PARSER_CHECK([[./glr-regr2a input1.txt]], 0,
+AT_PARSER_CHECK([[glr-regr2a input1.txt]], 0,
 [[Variable: 'VARIABLE_1'
 ]])
 
 AT_DATA([input2.txt],
 [[s VARIABLE_1 , ANOTHER_VARIABLE_2 t e
 ]])
-AT_PARSER_CHECK([[./glr-regr2a input2.txt]],
+AT_PARSER_CHECK([[glr-regr2a input2.txt]],
 0,
 [[Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2'
 ]])
@@ -230,7 +234,7 @@
 AT_DATA([input3.txt],
 [[s VARIABLE_3 t v x
 ]])
-AT_PARSER_CHECK([[./glr-regr2a input3.txt]], 0,
+AT_PARSER_CHECK([[glr-regr2a input3.txt]], 0,
 [[Variable: 'VARIABLE_3'
 ]])
 
@@ -262,6 +266,7 @@
 
 %}
 
+%define parse.assert
 %glr-parser
 
 %token BAD_CHAR
@@ -304,7 +309,7 @@
 }
 ]AT_YYERROR_DEFINE[
 
-FILE *input = YY_NULL;
+FILE *input = YY_NULLPTR;
 
 int P[] = { P1, P2 };
 int O[] = { O1, O2 };
@@ -326,7 +331,7 @@
 }
 
 int
-main(int argc, char* argv[])
+main (int argc, char* argv[])
 {
   int res;
   input = stdin;
@@ -340,15 +345,16 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr3.c glr-regr3.y]], 0, [],
-[glr-regr3.y: conflicts: 1 shift/reduce, 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr3.c -rall glr-regr3.y]], 0, [],
+[[glr-regr3.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+glr-regr3.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr3])
 
 AT_DATA([input.txt],
 [[p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2
 ]])
-AT_PARSER_CHECK([[./glr-regr3 input.txt]],
+AT_PARSER_CHECK([[glr-regr3 input.txt]],
 0,
 [[Result: 1c04
 ]])
@@ -366,6 +372,7 @@
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr4.y],
 [[
+%define parse.assert
 %union { char *ptr; }
 %type <ptr> S A A1 A2 B
 %glr-parser
@@ -418,7 +425,7 @@
 {
   char const format[] = "%s <- %s";
   char *value = *ptrs_next++ =
-    (char *) malloc (strlen (parent) + strlen (child) + sizeof format);
+    YY_CAST (char *, malloc (strlen (parent) + strlen (child) + sizeof format));
   sprintf (value, format, parent, child);
   return value;
 }
@@ -428,19 +435,19 @@
 {
   char const format[] = "merge{ %s and %s }";
   char *value = *ptrs_next++ =
-    (char *) malloc (strlen (s1.ptr) + strlen (s2.ptr) + sizeof format);
+    YY_CAST (char *, malloc (strlen (s1.ptr) + strlen (s2.ptr) + sizeof format));
   sprintf (value, format, s1.ptr, s2.ptr);
   return value;
 }
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr4.c glr-regr4.y]], 0, [],
-[glr-regr4.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr4.c -rall glr-regr4.y]], 0, [],
+[[glr-regr4.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr4])
 
-AT_PARSER_CHECK([[./glr-regr4]], 0,
+AT_PARSER_CHECK([[glr-regr4]], 0,
 [[merge{ S <- merge{ A <- A1 <- 'a' and A <- A2 <- 'a' } and S <- B <- 'a' }
 ]], [])
 
@@ -465,6 +472,7 @@
   enum { MAGIC_VALUE = -1057808125 }; /* originally chosen at random */
 %}
 
+%define parse.assert
 %glr-parser
 %union { int value; }
 %type <value> start
@@ -485,22 +493,18 @@
    ;
 
 %%
-]AT_YYLEX_DEFINE(["a"])[
 ]AT_YYERROR_DEFINE[
-int
-main (void)
-{
-  return yyparse () != 1;
-}
+]AT_YYLEX_DEFINE(["a"])[
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr5.c glr-regr5.y]], 0, [],
-[glr-regr5.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr5.c -rall glr-regr5.y]], 0, [],
+[[glr-regr5.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr5])
 
-AT_PARSER_CHECK([[./glr-regr5]], 0, [],
+AT_PARSER_CHECK([[glr-regr5]], 1, [],
 [syntax is ambiguous
 ])
 
@@ -524,6 +528,7 @@
   ]AT_YYLEX_DECLARE[
 %}
 
+%define parse.assert
 %glr-parser
 %union { int value; }
 %type <value> 'a'
@@ -539,20 +544,16 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["a"])[
-int
-main (void)
-{
-  return yyparse () != 1;
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr6.c glr-regr6.y]], 0, [],
-[glr-regr6.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr6.c -rall glr-regr6.y]], 0, [],
+[[glr-regr6.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr6])
 
-AT_PARSER_CHECK([[./glr-regr6]], 0,
+AT_PARSER_CHECK([[glr-regr6]], 1,
 [Destructor called.
 ],
 [syntax is ambiguous
@@ -584,6 +585,7 @@
   static count_node *tail;
 %}
 
+%define parse.assert
 %glr-parser
 %union { count_node *node; }
 %type <node> 'a'
@@ -598,7 +600,7 @@
 start:
     stack1 start
   | stack2 start
-  | /* empty */
+  | %empty
   ;
 stack1: 'a' ;
 stack2: 'a' ;
@@ -608,7 +610,7 @@
 static int
 yylex (void)
 {
-  yylval.node = (count_node*) malloc (sizeof *yylval.node);
+  yylval.node = YY_CAST (count_node*, malloc (sizeof *yylval.node));
   if (!yylval.node)
     {
       fprintf (stderr, "Test inconclusive.\n");
@@ -636,12 +638,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr7.c glr-regr7.y]], 0, [],
-[glr-regr7.y: conflicts: 2 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr7.c -rall glr-regr7.y]], 0, [],
+[[glr-regr7.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr7])
 
-AT_PARSER_CHECK([[./glr-regr7]], 2, [],
+AT_PARSER_CHECK([[glr-regr7]], 2, [],
 [memory exhausted
 ])
 
@@ -650,7 +652,7 @@
 
 ## ------------------------------------------------------------------------- ##
 ## Incorrect default location for empty right-hand sides.  Adapted from bug  ##
-## report by Claudia Hermann.						     ##
+## report by Claudia Hermann.                                                ##
 ## See http://lists.gnu.org/archive/html/bug-bison/2005-10/msg00069.html and ##
 ## http://lists.gnu.org/archive/html/bug-bison/2005-10/msg00072.html         ##
 ## ------------------------------------------------------------------------- ##
@@ -671,30 +673,31 @@
 %token T_PORT
 %token T_SIGNAL
 
+%define parse.assert
 %glr-parser
 
 %%
 
 
-PortClause	: T_PORT InterfaceDeclaration T_PORT
-		{ printf("%d/%d - %d/%d - %d/%d\n",
-			 @1.first_column, @1.last_column,
-			 @2.first_column, @2.last_column,
-			 @3.first_column, @3.last_column); }
-	;
+PortClause      : T_PORT InterfaceDeclaration T_PORT
+                { printf("%d/%d - %d/%d - %d/%d\n",
+                         @1.first_column, @1.last_column,
+                         @2.first_column, @2.last_column,
+                         @3.first_column, @3.last_column); }
+        ;
 
-InterfaceDeclaration	: OptConstantWord	%dprec 1
-	| OptSignalWord	%dprec 2
-	;
+InterfaceDeclaration    : OptConstantWord       %dprec 1
+        | OptSignalWord %dprec 2
+        ;
 
-OptConstantWord	: /* empty */
-	| T_CONSTANT
-	;
+OptConstantWord : %empty
+        | T_CONSTANT
+        ;
 
-OptSignalWord	: /* empty */
-		{ printf("empty: %d/%d\n", @$.first_column, @$.last_column); }
-	| T_SIGNAL
-	;
+OptSignalWord   : %empty
+                { printf("empty: %d/%d\n", @$.first_column, @$.last_column); }
+        | T_SIGNAL
+        ;
 
 %%
 
@@ -721,21 +724,16 @@
     }
 }
 
-int
-main (void)
-{
-  yyparse();
-  return 0;
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr8.c glr-regr8.y]], 0, [],
-[glr-regr8.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr8.c -rall glr-regr8.y]], 0, [],
+[[glr-regr8.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr8])
 
-AT_PARSER_CHECK([[./glr-regr8]], 0,
+AT_PARSER_CHECK([[glr-regr8]], 0,
 [empty: 9/9
 1/9 - 9/9 - 13/17
 ],
@@ -765,6 +763,7 @@
 # define USE(Var)
 %}
 
+%define parse.assert
 %glr-parser
 %union { int dummy; }
 %type <dummy> 'a'
@@ -810,12 +809,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr9.c glr-regr9.y]], 0, [],
-[glr-regr9.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr9.c -rall glr-regr9.y]], 0, [],
+[[glr-regr9.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr9])
 
-AT_PARSER_CHECK([[./glr-regr9]], 0, [],
+AT_PARSER_CHECK([[glr-regr9]], 0, [],
 [memory exhausted
 ])
 
@@ -840,6 +839,7 @@
   static char garbage[GARBAGE_SIZE];
 %}
 
+%define parse.assert
 %glr-parser
 %union { char *ptr; }
 %type <ptr> start
@@ -866,12 +866,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr10.c glr-regr10.y]], 0, [],
-[glr-regr10.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr10.c -rall glr-regr10.y]], 0, [],
+[[glr-regr10.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr10])
 
-AT_PARSER_CHECK([[./glr-regr10]], 0, [], [])
+AT_PARSER_CHECK([[glr-regr10]], 0, [], [])
 
 AT_CLEANUP
 
@@ -893,6 +893,7 @@
 # define USE(val)
 %}
 
+%define parse.assert
 %glr-parser
 %union { int dummy; }
 %type <int> 'a'
@@ -924,12 +925,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr11.c glr-regr11.y]], 0, [],
-[glr-regr11.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr11.c -rall glr-regr11.y]], 0, [],
+[[glr-regr11.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr11])
 
-AT_PARSER_CHECK([[./glr-regr11]], 0, [], [])
+AT_PARSER_CHECK([[glr-regr11]], 0, [], [])
 
 AT_CLEANUP
 
@@ -943,6 +944,7 @@
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr12.y],
 [[
+%define parse.assert
 %glr-parser
 %union { int dummy; }
 %token PARENT_RHS_AFTER
@@ -1012,8 +1014,7 @@
 merge (YYSTYPE s1, YYSTYPE s2)
 {
   /* Not invoked. */
-  char dummy = s1.dummy + s2.dummy;
-  return dummy;
+  return s1.dummy + s2.dummy;
 }
 
 ]AT_YYERROR_DEFINE[
@@ -1027,17 +1028,17 @@
   int exit_status = yyparse ();
   if (parent_rhs_before_value)
     {
-      fprintf (stderr, "`parent_rhs_before' destructor not called.\n");
+      fprintf (stderr, "'parent_rhs_before' destructor not called.\n");
       exit_status = 1;
     }
   if (merged_value)
     {
-      fprintf (stderr, "`merged' destructor not called.\n");
+      fprintf (stderr, "'merged' destructor not called.\n");
       exit_status = 1;
     }
   if (parent_rhs_after_value)
     {
-      fprintf (stderr, "`PARENT_RHS_AFTER' destructor not called.\n");
+      fprintf (stderr, "'PARENT_RHS_AFTER' destructor not called.\n");
       exit_status = 1;
     }
   return exit_status;
@@ -1045,18 +1046,19 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr12.c glr-regr12.y]], 0, [],
-[glr-regr12.y: conflicts: 1 shift/reduce, 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr12.c -rall glr-regr12.y]], 0, [],
+[[glr-regr12.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+glr-regr12.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr12])
 
-AT_PARSER_CHECK([[./glr-regr12]], 0, [], [])
+AT_PARSER_CHECK([[glr-regr12]], 0, [], [])
 
 AT_CLEANUP
 
 
 ## ------------------------------------------------------------------------- ##
-## Incorrect lookahead during deterministic GLR.  See			     ##
+## Incorrect lookahead during deterministic GLR.  See                        ##
 ## <http://lists.gnu.org/archive/html/help-bison/2005-07/msg00017.html> and  ##
 ## <http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00060.html>.  ##
 ## ------------------------------------------------------------------------- ##
@@ -1082,6 +1084,7 @@
   #define USE(value)
 %}
 
+%define parse.assert
 %union { char value; }
 %type <value> 'a' 'b'
 %glr-parser
@@ -1130,7 +1133,7 @@
 
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["ab"],
-                 [yylval.value = res + 'A' - 'a'])[
+                 [yylval.value = YY_CAST (char, res + 'A' - 'a')])[
 
 static void
 print_lookahead (char const *reduction)
@@ -1144,10 +1147,10 @@
     {
       printf ("'%c', yylval='", yychar);
       if (yylval.value > ' ')
-	printf ("%c", yylval.value);
+        printf ("%c", yylval.value);
       printf ("', yylloc=(%d,%d),(%d,%d)",
-	      yylloc.first_line, yylloc.first_column,
-	      yylloc.last_line, yylloc.last_column);
+              yylloc.first_line, yylloc.first_column,
+              yylloc.last_line, yylloc.last_column);
     }
   printf ("\n");
 }
@@ -1162,10 +1165,10 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr13.c glr-regr13.y]], 0, [], [])
+AT_BISON_CHECK([[-o glr-regr13.c -rall glr-regr13.y]], 0, [], [])
 AT_COMPILE([glr-regr13])
 
-AT_PARSER_CHECK([[./glr-regr13]], 0,
+AT_PARSER_CHECK([[glr-regr13]], 0,
 [defstate_init <- empty string:
   yychar=YYEMPTY
 nondefstate <- empty string:
@@ -1222,6 +1225,7 @@
   #define USE(value)
 %}
 
+%define parse.assert
 %type <value> 'a' 'b' 'c' 'd' stack_explosion
 %glr-parser
 %locations
@@ -1244,7 +1248,7 @@
   | conflict defstate_look 'a' nonconflict2 'b' defstate_shift %dprec 2 {
     USE ($3); USE ($5);
     print_lookahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
-		      " defstate_shift");
+                      " defstate_shift");
   }
   ;
 
@@ -1291,7 +1295,7 @@
     USE ($1);
     if (yychar != 'd' && yychar != YYEOF)
       {
-	fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
+        fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
       }
   }
   ;
@@ -1300,7 +1304,7 @@
     USE ($1);
     if (yychar != 'd' && yychar != YYEOF)
       {
-	fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
+        fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
       }
   }
   ;
@@ -1309,7 +1313,7 @@
     USE ($1);
     if (yychar != 'd' && yychar != YYEOF)
       {
-	fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
+        fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
       }
   }
   ;
@@ -1317,8 +1321,8 @@
   {
     if (yychar != YYEMPTY)
       {
-	fprintf (stderr,
-		 "Found lookahead where shouldn't during stack explosion.\n");
+        fprintf (stderr,
+                 "Found lookahead where shouldn't during stack explosion.\n");
       }
   }
   ;
@@ -1330,11 +1334,11 @@
 yylex (void)
 {
   static char const input[] = "abcdddd";
-  static size_t toknum;
-  assert (toknum < sizeof input);
+  static int toknum = 0;
+  assert (toknum < YY_CAST (int, sizeof input));
   yylloc.first_line = yylloc.last_line = 1;
   yylloc.first_column = yylloc.last_column = toknum + 1;
-  yylval.value = input[toknum] + 'A' - 'a';
+  yylval.value = YY_CAST (char, input[toknum] + 'A' - 'a');
   return input[toknum++];
 }
 
@@ -1350,10 +1354,10 @@
     {
       printf ("'%c', yylval='", yychar);
       if (yylval.value > ' ')
-	printf ("%c", yylval.value);
+        printf ("%c", yylval.value);
       printf ("', yylloc=(%d,%d),(%d,%d)",
-	      yylloc.first_line, yylloc.first_column,
-	      yylloc.last_line, yylloc.last_column);
+              yylloc.first_line, yylloc.first_column,
+              yylloc.last_line, yylloc.last_column);
     }
   printf ("\n");
 }
@@ -1361,8 +1365,7 @@
 static char
 merge (union YYSTYPE s1, union YYSTYPE s2)
 {
-  char dummy = s1.value + s2.value;
-  return dummy;
+  return YY_CAST (char, s1.value + s2.value);
 }
 
 int
@@ -1375,12 +1378,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr14.c glr-regr14.y]], 0, [],
-[glr-regr14.y: conflicts: 3 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr14.c -rall glr-regr14.y]], 0, [],
+[[glr-regr14.y: warning: 5 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr14])
 
-AT_PARSER_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:
@@ -1407,6 +1410,7 @@
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr15.y],
 [[
+%define parse.assert
 %glr-parser
 %destructor { parent_rhs_before_value = 0; } parent_rhs_before
 
@@ -1460,7 +1464,7 @@
   int exit_status = yyparse () != 1;
   if (parent_rhs_before_value)
     {
-      fprintf (stderr, "`parent_rhs_before' destructor not called.\n");
+      fprintf (stderr, "'parent_rhs_before' destructor not called.\n");
       exit_status = 1;
     }
   return exit_status;
@@ -1468,12 +1472,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr15.c glr-regr15.y]], 0, [],
-[glr-regr15.y: conflicts: 2 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr15.c -rall glr-regr15.y]], 0, [],
+[[glr-regr15.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr15])
 
-AT_PARSER_CHECK([[./glr-regr15]], 0, [],
+AT_PARSER_CHECK([[glr-regr15]], 0, [],
 [syntax is ambiguous
 ])
 
@@ -1489,6 +1493,7 @@
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr16.y],
 [[
+%define parse.assert
 %glr-parser
 %destructor { lookahead_value = 0; } 'b'
 
@@ -1528,12 +1533,12 @@
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr16.c glr-regr16.y]], 0, [],
-[glr-regr16.y: conflicts: 1 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr16.c -rall glr-regr16.y]], 0, [],
+[[glr-regr16.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr16])
 
-AT_PARSER_CHECK([[./glr-regr16]], 0, [],
+AT_PARSER_CHECK([[glr-regr16]], 0, [],
 [syntax error
 ])
 
@@ -1550,10 +1555,11 @@
 
 AT_DATA_GRAMMAR([glr-regr17.y],
 [[
+%define parse.assert
 %glr-parser
 %locations
 %define api.pure
-%error-verbose
+%define parse.error verbose
 
 %union { int dummy; }
 
@@ -1589,8 +1595,8 @@
 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
 {
   static char const input[] = "ab";
-  static size_t toknum;
-  assert (toknum < sizeof input);
+  static int toknum = 0;
+  assert (toknum < YY_CAST (int, sizeof input));
   lvalp->dummy = 0;
   llocp->first_line = llocp->last_line = 2;
   llocp->first_column = toknum + 1;
@@ -1598,20 +1604,16 @@
   return input[toknum++];
 }
 
-int
-main (void)
-{
-  return yyparse () != 1;
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([[-o glr-regr17.c glr-regr17.y]], 0, [],
-[glr-regr17.y: conflicts: 3 reduce/reduce
-])
+AT_BISON_CHECK([[-o glr-regr17.c -rall glr-regr17.y]], 0, [],
+[[glr-regr17.y: warning: 3 reduce/reduce conflicts [-Wconflicts-rr]
+]])
 AT_COMPILE([glr-regr17])
 
-AT_PARSER_CHECK([[./glr-regr17]], 0, [],
+AT_PARSER_CHECK([[glr-regr17]], 1, [],
 [1.1-2.2: syntax is ambiguous
 ])
 
@@ -1626,7 +1628,8 @@
 
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([glr-regr18.y],
-[[%glr-parser
+[[%define parse.assert
+%glr-parser
 
 %{
   #include <stdlib.h>
@@ -1639,7 +1642,6 @@
   int type2;
   int type3;
 }
-
 %%
 
 sym1: sym2 %merge<merge> { $$ = $1; } ;
@@ -1653,20 +1655,16 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE[
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 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_BISON_CHECK([[-o glr-regr18.c -rall glr-regr18.y]], 1, [],
+[[glr-regr18.y:28.18-24: error: result type clash on merge function 'merge': <type2> != <type1>
+glr-regr18.y:27.18-24:     previous declaration
+glr-regr18.y:29.13-19: error: result type clash on merge function 'merge': <type3> != <type2>
+glr-regr18.y:28.18-24:     previous declaration
+]])
 
 AT_CLEANUP
 
@@ -1677,16 +1675,16 @@
 
 AT_SETUP([Ambiguity reports])
 
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([input.y],
-[[
-%{
+[[%{
   #include <stdio.h>
   #include <stdlib.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 %}
 
+%define parse.assert
 %debug
 %glr-parser
 
@@ -1698,23 +1696,18 @@
 b: 'b';
 d: /* nada.  */;
 %%
-]AT_YYLEX_DEFINE(["abc"])[
 ]AT_YYERROR_DEFINE[
-int
-main (void)
-{
-  yydebug = 1;
-  return !!yyparse ();
-}
+]AT_YYLEX_DEFINE(["abc"])[
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([[-o input.c input.y]], 0, [],
-[input.y: conflicts: 1 reduce/reduce
-])
+[[input.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+]])
 AT_COMPILE([input])
 
-AT_PARSER_CHECK([[./input]], 1, [],
+AT_PARSER_CHECK([[input --debug]], 1, [],
 [Starting parse
 Entering state 0
 Reading a token: Next token is token 'a' ()
@@ -1723,24 +1716,24 @@
 Reading a token: Next token is token 'b' ()
 Shifting token 'b' ()
 Entering state 3
-Reducing stack 0 by rule 3 (line 25):
+Reducing stack 0 by rule 3 (line 27):
    $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):
+Reducing stack 0 by rule 4 (line 28):
 -> $$ = 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.
+Reduced stack 1 by rule 2 (line 24); 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.
+Reduced stack 0 by rule 1 (line 24); action deferred.  Now in state 2.
 Merging stack 0 into stack 1.
 Stack 1 Entering state 2
 Now at end of input.
@@ -1773,3 +1766,67 @@
 ])
 
 AT_CLEANUP
+
+
+## ----------------------------------------------------------------- ##
+## Predicates.                                                       ##
+##                                                                   ##
+## http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00004.html ##
+## http://lists.gnu.org/archive/html/bug-bison/2018-05/msg00033.html ##
+## ----------------------------------------------------------------- ##
+
+AT_SETUP([Predicates])
+
+AT_DATA_GRAMMAR([input.y],
+[[%define parse.assert
+%glr-parser
+%define parse.error verbose
+%expect-rr 1
+%code requires
+{
+  #include <assert.h>
+  #include <stdbool.h>
+  bool new_syntax = false;
+  const char *input = YY_NULLPTR;
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+widget:
+  %? {new_syntax} 'w' id new_args  { printf("new"); }
+| %?{!new_syntax} 'w' id old_args  { printf("old"); }
+;
+id: 'i';
+new_args: 'n';
+old_args: 'o';
+%%
+]AT_YYERROR_DEFINE[
+
+int
+yylex (void)
+{
+  return *input++;
+}
+
+int
+main (int argc, const char* argv[])
+{
+  assert (argc == 2); (void) argc;
+  // First char decides whether new, or old syntax.
+  // Then the input.
+  new_syntax = argv[1][0] == 'N';
+  input = argv[1] + 1;
+  return yyparse ();
+}
+]])
+
+AT_BISON_CHECK([[-o input.c input.y]])
+AT_COMPILE([input])
+AT_PARSER_CHECK([[input Nwin]], [0], [new])
+AT_PARSER_CHECK([[input Owin]], [1], [], [[syntax error, unexpected 'n', expecting 'o'
+]])
+AT_PARSER_CHECK([[input Owio]], [0], [old])
+AT_PARSER_CHECK([[input Nwio]], [1], [], [[syntax error, unexpected 'o', expecting 'n'
+]])
+
+AT_CLEANUP
diff --git a/tests/headers.at b/tests/headers.at
index 351b8a7..3142743 100644
--- a/tests/headers.at
+++ b/tests/headers.at
@@ -1,6 +1,6 @@
 # Bison Parser Headers.                               -*- Autotest -*-
 
-# Copyright (C) 2001-2002, 2006-2007, 2009-2012 Free Software
+# Copyright (C) 2001-2002, 2006-2007, 2009-2015, 2018-2019 Free Software
 # Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
@@ -41,7 +41,7 @@
 ]AT_YYLEX_DECLARE_EXTERN[
 %}
 %%
-dummy:;
+dummy: %empty;
 %%
 #include <$1.h>
 ])
@@ -65,35 +65,28 @@
 ## export YYLTYPE.  ##
 ## ---------------- ##
 
-
 AT_SETUP([export YYLTYPE])
 
+AT_BISON_OPTION_PUSHDEFS([%name-prefix "my_"])
 AT_DATA_GRAMMAR([input.y],
-[%locations
+[[%locations
 
 %name-prefix "my_"
 %{
 #include <stdio.h>
 #include <stdlib.h>
 
-static int
-my_lex (void)
-{
-  return EOF;
-}
-
-static void
-my_error (const char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-}
-
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
 %}
 %%
-exp:;
-])
+exp: %empty;
+]])
 
-AT_BISON_CHECK([--defines -o input.c input.y])
+AT_BISON_CHECK([--defines -o input.c input.y], [], [],
+[[input.y:11.1-18: warning: deprecated directive: '%name-prefix "my_"', use '%define api.prefix {my_}' [-Wdeprecated]
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
 
 # YYLTYPE should be defined, and MY_LLOC declared.
 AT_DATA([caller.c],
@@ -102,11 +95,7 @@
 
 int my_parse (void);
 
-int
-main (void)
-{
-  return my_parse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 # Link and execute, just to make sure everything is fine (and in
@@ -114,9 +103,93 @@
 AT_COMPILE([caller.o])
 AT_COMPILE([input.o])
 AT_COMPILE([caller], [caller.o input.o])
-AT_PARSER_CHECK([./caller])
+AT_PARSER_CHECK([caller])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## -------------- ##
+## Sane headers.  ##
+## -------------- ##
+
+# AT_TEST([DIRECTIVES], [COMPILER-FLAGS])
+# ---------------------------------------
+# Check that headers are self-contained and protected againt multiple
+# inclusions.
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([Sane headers: $1])
+
+AT_BISON_OPTION_PUSHDEFS([$1])
+AT_DATA_GRAMMAR([input.y],
+[[$1
+%define parse.error verbose
+]AT_VARIANT_IF([%token <int> 'x'], [%union {int integer;}])[
+%code {
+#include <stdio.h> /* printf. */
+]AT_PUSH_IF([[
+#if defined __GNUC__ && (7 == __GNUC__ || 9 == __GNUC__)
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
+]])[
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+exp:
+  'x' { printf ("x\n"); }
+;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE(["x"])[
+]])
+
+AT_BISON_CHECK([-d -o input.AT_LANG_EXT input.y])
+
+AT_LANG_COMPILE([input.o])
+
+AT_DATA([main.cc],
+[AT_DATA_SOURCE_PROLOGUE
+AT_MAIN_DEFINE
+])
+
+# Check that the headers are self-contained, and protected against
+# multiple inclusions.  While at it, check they are sane for C++.
+for h in *.AT_LANG_HDR
+do
+  # No shell expansion with AT_DATA.
+  cat >$h.AT_LANG_EXT <<EOF
+AT_DATA_SOURCE_PROLOGUE
+#include "$h"
+#include "$h"
+EOF
+  AT_LANG_COMPILE([$h.o])
+done
+
+AT_BISON_OPTION_POPDEFS
 
 AT_CLEANUP
+])# AT_TEST
+
+AT_TEST([])
+AT_TEST([%locations %debug])
+
+AT_TEST([%glr-parser])
+AT_TEST([%locations %debug %glr-parser])
+
+AT_TEST([%define api.pure])
+AT_TEST([%define api.push-pull both])
+AT_TEST([%define api.pure %define api.push-pull both])
+
+AT_TEST([%language "c++"])
+AT_TEST([%locations %debug %language "c++"])
+AT_TEST([%language "c++" %define api.value.type variant %define parse.assert])
+
+AT_TEST([%locations %language "c++" %glr-parser])
+
+
 
 ## ----------------- ##
 ## Several parsers.  ##
@@ -127,20 +200,25 @@
 # 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.
+# nor yy* identifiers in the header after applying api.prefix.  Check
+# that headers can be compiled by a C++ compiler.
 m4_pushdef([AT_TEST],
-[AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
+[AT_BISON_OPTION_PUSHDEFS([%define api.prefix {$1_} $2])
 AT_DATA_GRAMMAR([$1.y],
-[[%define api.prefix "$1_"
+[[%define api.prefix {$1_}
 $2
-%error-verbose
+%define parse.error verbose
 %union
 {
   int integer;
 }
 %{
-#include <stdio.h>
+#include <stdio.h> /* printf. */
+]AT_PUSH_IF([[
+#if defined __GNUC__ && (7 == __GNUC__ || 9 == __GNUC__)
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
+]])[
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 %}
@@ -154,6 +232,7 @@
 | 'x' '6' { printf ("x6\n"); }
 | 'x' '7' { printf ("x7\n"); }
 | 'x' '8' { printf ("x8\n"); }
+| 'x' '9' { printf ("x9\n"); }
 ;
 
 %%
@@ -161,7 +240,7 @@
 ]AT_YYLEX_DEFINE(["$1"])[
 ]])
 
-AT_BISON_CHECK([-d -o $1.AT_SKEL_CC_IF([cc], [c]) $1.y])
+AT_BISON_CHECK([-d -o $1.AT_LANG_EXT $1.y])
 
 AT_LANG_COMPILE([$1.o])
 AT_CHECK([[echo "$1" >>expout]])
@@ -188,13 +267,13 @@
 }
 #endif
 #include "x5.hh"
-//#include "x6.hh"
+#include "x9.hh"
 
 #define RUN(S)                                  \
   do {                                          \
     int res = S;                                \
     if (res)                                    \
-      std::cerr << #S": " << res << std::endl;  \
+      std::cerr << #S": " << res << '\n';       \
   } while (false)
 
 int
@@ -209,8 +288,8 @@
   RUN(x6_parse());
   RUN(x7_parse());
   RUN(x8_parse());
-//  x6_::parser p6;
-//  RUN(p6.parse());
+  x9_::parser p9;
+  RUN(p9.parse());
   return 0;
 }
 ]])# main.cc
@@ -223,26 +302,40 @@
 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([x9], [%locations %code requires {#include "location.hh"} %define api.location.type {x5_::location} %debug %language "c++"])
 #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 that api.prefix works properly:
 #
-# Check there is no 'YY' left.
-# Ignore comments, YYChar (template parameter), YYPARSE_PARAM
-# (obsolete), YYPUSH_MORE(_DEFINED)?  (constant definition),
-# YY_\w+_INCLUDED (header guards).
+# - no 'yy' left.
+#   C++ output relies on namespaces and still uses yy a lot.
 #
-# YYDEBUG (not renamed) can be read, but not changed.
-AT_CHECK([[$PERL -n -0777 -e '
+# - no 'YY' left.
+#   Ignore comments, YYChar (template parameter), YYPUSH_MORE(_DEFINED)?
+#   (constant definition), YY_\w+_INCLUDED (header guards).
+#   YYDEBUG (not renamed) can be read, but not changed.
+AT_PERL_CHECK([[-n -0777 -e '
   s{/\*.*?\*/}{}gs;
   s{//.*}{}g;
-  s{\b(YYChar
-      |YYPARSE_PARAM
-      |YYPUSH_MORE(_DEFINED)?
+  s{\b((defined|if)\ YYDEBUG
+      |YYChar
+      |YYPUSH_MORE(?:_DEFINED)?
+      |YYUSE
+      |YY_ATTRIBUTE(?:_PURE|_UNUSED)
+      |YY(?:_REINTERPRET)?_CAST
+      |YY_CONSTEXPR
+      |YY_COPY
+      |YY_CPLUSPLUS
+      |YY_IGNORE_(?:MAYBE_UNINITIALIZED|USELESS_CAST)_(?:BEGIN|END)
+      |YY_INITIAL_VALUE
+      |YY_MOVE
+      |YY_MOVE_OR_COPY
+      |YY_MOVE_REF
+      |YY_NOEXCEPT
+      |YY_NOTHROW
+      |YY_NULLPTR
+      |YY_RVREF
       |YY_\w+_INCLUDED
-      |YY_NULL
-      |(defined|if)\ YYDEBUG
       )\b}{}gx;
   while (/^(.*YY.*)$/gm)
   {
@@ -257,24 +350,11 @@
   }
 ' -- *.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]])
+AT_COMPILE_CXX([parser], [[x[1-9].o -DCC_IS_CXX=$CC_IS_CXX main.cc]])
+AT_PARSER_CHECK([parser], [0], [[expout]])
 
 m4_popdef([AT_TEST])
 
diff --git a/tests/input.at b/tests/input.at
index 6b87633..96e20a7 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -1,6 +1,6 @@
 # Checking the Bison scanner.                    -*- Autotest -*-
 
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015, 2018-2019 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
@@ -20,6 +20,60 @@
 # Mostly test that we are robust to mistakes.
 
 
+## ----------------------------- ##
+## Invalid number of arguments.  ##
+## ----------------------------- ##
+
+AT_SETUP([Invalid number of arguments])
+
+AT_BISON_CHECK([], [1], [],
+[[bison: missing operand
+Try 'bison --help' for more information.
+]])
+
+AT_BISON_CHECK([1.y 2.y], [1], [],
+[[bison: extra operand '2.y'
+Try 'bison --help' for more information.
+]])
+
+# For some reason, on some systems we use the system's getopt, not the
+# one we ship in gnulib.  So we can get two different error messages.
+# See https://lists.gnu.org/archive/html/bison-patches/2018-10/msg00154.html
+AT_BISON_CHECK([--skeleton], [1], [], [stderr])
+AT_CHECK([[sed -e \
+  "s/requires an argument -- skeleton/'--skeleton' requires an argument/" \
+  stderr]], 0,
+[[bison: option '--skeleton' requires an argument
+Try 'bison --help' for more information.
+]])
+
+AT_CLEANUP
+
+
+
+## ----------------- ##
+## Invalid options.  ##
+## ----------------- ##
+
+AT_SETUP([Invalid options])
+
+AT_DATA([input.y],
+[[%%
+exp: '0'
+]])
+
+# We used to accept these, as -f, --report and others were sharing
+# their code with -W.
+AT_BISON_CHECK([-ferror=caret input.y], [1], [], [ignore])
+AT_BISON_CHECK([--report=error=itemsets input.y], [1], [], [ignore])
+
+# We used to accept any character after "-Werror", instead of ensuring
+# this is "=".
+AT_BISON_CHECK([-Werror?all input.y], [1], [], [ignore])
+
+AT_CLEANUP
+
+
 ## ---------------- ##
 ## Invalid inputs.  ##
 ## ---------------- ##
@@ -36,7 +90,7 @@
 %-
 %{
 ]])
-AT_CHECK([[$PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' input.y || exit 77]])
+AT_PERL_REQUIRE([[-pi -e 's/\\(\d{3})/chr(oct($1))/ge' input.y]])
 
 AT_BISON_CHECK([input.y], [1], [],
 [[input.y:1.1-2: error: invalid characters: '\0\001\002\377?'
@@ -76,6 +130,298 @@
 AT_CLEANUP
 
 
+## -------------------------- ##
+## Yacc warnings on symbols.  ##
+## -------------------------- ##
+
+AT_SETUP([Yacc warnings on symbols])
+
+AT_DATA([input.y],
+[[%nterm exp
+%token NUM 0x40 "number"
+%%
+exp: "number";
+]])
+
+AT_BISON_CHECK([-fcaret -Wyacc input.y], [0], [],
+[[input.y:1.1-6: warning: POSIX Yacc does not support %nterm [-Wyacc]
+    1 | %nterm exp
+      | ^~~~~~
+input.y:2.12-15: warning: POSIX Yacc does not support hexadecimal literals [-Wyacc]
+    2 | %token NUM 0x40 "number"
+      |            ^~~~
+input.y:2.17-24: warning: POSIX Yacc does not support string literals [-Wyacc]
+    2 | %token NUM 0x40 "number"
+      |                 ^~~~~~~~
+input.y:4.6-13: warning: POSIX Yacc does not support string literals [-Wyacc]
+    4 | exp: "number";
+      |      ^~~~~~~~
+]])
+
+AT_CLEANUP
+
+
+## --------------- ##
+## Yacc warnings.  ##
+## --------------- ##
+
+AT_SETUP([Yacc warnings])
+
+AT_DATA([input.y],
+[[%destructor {} <int>
+%printer {} <int>
+%type <int> exp a b
+%%
+exp: a b             { $$ = $1 + $2; };
+a: <int>{ $$ = 42; } { $$ = $1; };
+b: %empty            { $$ = 42; };
+]])
+
+AT_BISON_CHECK([-fcaret -Wyacc input.y], [0], [],
+[[input.y:1.1-11: warning: POSIX Yacc does not support %destructor [-Wyacc]
+    1 | %destructor {} <int>
+      | ^~~~~~~~~~~
+input.y:2.1-8: warning: POSIX Yacc does not support %printer [-Wyacc]
+    2 | %printer {} <int>
+      | ^~~~~~~~
+input.y:6.9-20: warning: POSIX Yacc does not support typed midrule actions [-Wyacc]
+    6 | a: <int>{ $$ = 42; } { $$ = $1; };
+      |         ^~~~~~~~~~~~
+input.y:7.4-9: warning: POSIX Yacc does not support %empty [-Wyacc]
+    7 | b: %empty            { $$ = 42; };
+      |    ^~~~~~
+]])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## Yacc's %type.  ##
+## -------------- ##
+
+AT_SETUP([Yacc's %type])
+
+AT_DATA([input.y],
+[[%token TOKEN1
+%nterm nterm1
+%type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+%token TOKEN2
+%nterm nterm2
+%%
+expr: nterm1 nterm2 nterm3
+nterm1: TOKEN1
+nterm2: TOKEN2
+nterm3: "TOKEN3"
+]])
+
+AT_BISON_CHECK([-fcaret -Wyacc input.y], [0], [],
+[[input.y:2.1-6: warning: POSIX Yacc does not support %nterm [-Wyacc]
+    2 | %nterm nterm1
+      | ^~~~~~
+input.y:3.14-19: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+    3 | %type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+      |              ^~~~~~
+input.y:3.28-35: warning: POSIX Yacc does not support string literals [-Wyacc]
+    3 | %type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+      |                            ^~~~~~~~
+input.y:3.28-35: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+    3 | %type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+      |                            ^~~~~~~~
+input.y:3.58-60: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+    3 | %type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+      |                                                          ^~~
+input.y:5.1-6: warning: POSIX Yacc does not support %nterm [-Wyacc]
+    5 | %nterm nterm2
+      | ^~~~~~
+input.y:3.21-26: warning: POSIX yacc reserves %type to nonterminals [-Wyacc]
+    3 | %type <ival> TOKEN1 TOKEN2 "TOKEN3" nterm1 nterm2 nterm3 '+'
+      |                     ^~~~~~
+input.y:10.9-16: warning: POSIX Yacc does not support string literals [-Wyacc]
+   10 | nterm3: "TOKEN3"
+      |         ^~~~~~~~
+]])
+
+AT_CLEANUP
+
+
+## ----------------------------- ##
+## Invalid symbol declarations.  ##
+## ----------------------------- ##
+
+AT_SETUP([Invalid symbol declarations])
+
+AT_DATA([input.y],
+[[%nterm expr "expression";
+%nterm term 123;
+%nterm fact 124 "factor";
+%nterm '+' '*';
+%nterm "number";
+%token "tok1" 1;
+%left "tok2" 2;
+%type "tok3" 3;
+%%
+expr: expr '+' term | term;
+term: term '*' fact | fact;
+fact: "number";
+]])
+
+AT_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:1.13-24: error: nonterminals cannot be given a string alias
+    1 | %nterm expr "expression";
+      |             ^~~~~~~~~~~~
+input.y:2.13-15: error: nonterminals cannot be given an explicit number
+    2 | %nterm term 123;
+      |             ^~~
+input.y:3.13-15: error: nonterminals cannot be given an explicit number
+    3 | %nterm fact 124 "factor";
+      |             ^~~
+input.y:3.17-24: error: nonterminals cannot be given a string alias
+    3 | %nterm fact 124 "factor";
+      |                 ^~~~~~~~
+input.y:4.8-10: error: character literals cannot be nonterminals
+    4 | %nterm '+' '*';
+      |        ^~~
+input.y:5.8-15: error: syntax error, unexpected string, expecting character literal or identifier or <tag>
+    5 | %nterm "number";
+      |        ^~~~~~~~
+input.y:6.8-13: error: syntax error, unexpected string, expecting character literal or identifier or <tag>
+    6 | %token "tok1" 1;
+      |        ^~~~~~
+input.y:7.14: error: syntax error, unexpected integer
+    7 | %left "tok2" 2;
+      |              ^
+input.y:8.14: error: syntax error, unexpected integer
+    8 | %type "tok3" 3;
+      |              ^
+]])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## Dangling aliases.  ##
+## ------------------ ##
+
+AT_SETUP([Dangling aliases])
+
+AT_DATA([input.y],
+[[%token FOO "foo"
+%type <val> "bar"
+%%
+expr: "foo" "bar" "baz"
+]])
+
+AT_BISON_CHECK([-fcaret -Wdangling input.y], [0], [],
+[[input.y:2.13-17: warning: string literal "bar" not attached to a symbol [-Wdangling-alias]
+    2 | %type <val> "bar"
+      |             ^~~~~
+input.y:4.19-23: warning: string literal "baz" not attached to a symbol [-Wdangling-alias]
+    4 | expr: "foo" "bar" "baz"
+      |                   ^~~~~
+]])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## Symbol declarations.  ##
+## --------------------- ##
+
+# Check the parsing of %token, %nterm, %type and %left...
+AT_SETUP([Symbol declarations])
+
+AT_DATA([dump-symbols.m4],
+[[m4@&t@_define([b4_symbol_dump],
+[$1, d@&t@nl
+b4_symbol_if([$1], [is_token], [Token], [Nonterminal]), d@&t@nl
+b4_symbol([$1], [tag]), d@&t@nl
+b4_symbol([$1], [id]), d@&t@nl
+b4_symbol([$1], [user_number]), d@&t@nl
+b4_symbol([$1], [type]),
+])
+
+b4_output_begin([symbols.csv])
+number, class, tag, id, user_number, type,
+b4_symbol_foreach([b4_symbol_dump])d@&t@nl
+b4_output_end
+]])
+
+AT_DATA([input.y],
+[[%token 'a' A1 1 "A1" A2 A3 "A3" A4 4
+      <type_b> 'b' B5 5 "B5" B6 B7 "B8" B9 9
+      <type_c> 'c' C10 10 "C10" C11 C12 "C12" C13 13
+
+%left 'd' D20 20 "D20" D21 D22 "D22" D23 23
+      <type_e> 'e' E25 25 "E25" E26 E27 "E28" E29 29
+      <type_f> 'f' F30 30 "F30" F31 F32 "F32" F33 33
+
+%type 'g' G40 "D40" G21 G22 G23
+      <type_h> 'h' H25 "H25" H26 H27 "H28" H29
+      <type_i> 'i' I30 "I30" I31 I32 "I32" I33
+
+%nterm j60 j61 j62 j63
+      <type_k> k75 k76 k77 k79
+      <type_l> l80 l81 l82 l83
+%%
+exp:;
+]])
+
+AT_BISON_CHECK([-Wno-other -S./dump-symbols.m4 input.y])
+AT_CHECK([cat symbols.csv], [],
+[[number, class, tag, id, user_number, type,
+0, Token, $end, , 0, ,
+1, Nonterminal, error, error, 256, ,
+2, Nonterminal, $undefined, , 257, ,
+3, Token, 'a', , 97, ,
+4, Token, "A1", A1, 1, ,
+5, Token, A2, A2, 258, ,
+6, Token, "A3", A3, 259, ,
+7, Token, A4, A4, 4, ,
+8, Token, 'b', , 98, type_b,
+9, Token, "B5", B5, 5, type_b,
+10, Token, B6, B6, 260, type_b,
+11, Token, "B8", B7, 261, type_b,
+12, Token, B9, B9, 9, type_b,
+13, Token, 'c', , 99, type_c,
+14, Token, "C10", C10, 10, type_c,
+15, Token, C11, C11, 262, type_c,
+16, Token, "C12", C12, 263, type_c,
+17, Token, C13, C13, 13, type_c,
+18, Token, 'd', , 100, ,
+19, Token, D20, D20, 20, ,
+20, Token, "D20", , 264, ,
+21, Token, D21, D21, 265, ,
+22, Token, D22, D22, 266, ,
+23, Token, "D22", , 267, ,
+24, Token, D23, D23, 23, ,
+25, Token, 'e', , 101, type_e,
+26, Token, E25, E25, 25, type_e,
+27, Token, "E25", , 268, type_e,
+28, Token, E26, E26, 269, type_e,
+29, Token, E27, E27, 270, type_e,
+30, Token, "E28", , 271, type_e,
+31, Token, E29, E29, 29, type_e,
+32, Token, 'f', , 102, type_f,
+33, Token, F30, F30, 30, type_f,
+34, Token, "F30", , 272, type_f,
+35, Token, F31, F31, 273, type_f,
+36, Token, F32, F32, 274, type_f,
+37, Token, "F32", , 275, type_f,
+38, Token, F33, F33, 33, type_f,
+39, Token, 'g', , 103, ,
+40, Token, "D40", , 276, ,
+41, Token, 'h', , 104, type_h,
+42, Token, "H25", , 277, type_h,
+43, Token, "H28", , 278, type_h,
+44, Token, 'i', , 105, type_i,
+45, Token, "I30", , 279, type_i,
+46, Token, "I32", , 280, type_i,
+47, Nonterminal, $accept, , -1, ,
+48, Nonterminal, exp, exp, -1, ,
+]])
+
+AT_CLEANUP
+
 
 ## ------------ ##
 ## Invalid $n.  ##
@@ -85,13 +431,17 @@
 
 AT_DATA([input.y],
 [[%%
-exp: { $$ = $1 ; };
-exp: { @$ = @1 ; };
+exp: %empty { $$ = $1 ; };
+exp: %empty { @$ = @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_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:2.20-21: error: integer out of range: '$1'
+    2 | exp: %empty { $$ = $1 ; };
+      |                    ^~
+input.y:3.20-21: error: integer out of range: '@1'
+    3 | exp: %empty { @$ = @1 ; };
+      |                    ^~
 ]])
 
 AT_CLEANUP
@@ -110,16 +460,26 @@
 %%
 exp: foo { $$; } foo { $2; } foo
    | foo
-   | /* Empty. */
+   | %empty
    ;
 ]])
 
-AT_BISON_CHECK([input.y], [1], [],
+AT_BISON_CHECK([-fcaret input.y], [1], [],
 [[input.y:5.12-13: error: $$ for the midrule at $2 of 'exp' has no declared type
+    5 | exp: foo { $$; } foo { $2; } foo
+      |            ^~
 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
+    5 | exp: foo { $$; } foo { $2; } foo
+      |                        ^~
+input.y:5.6-32: warning: type clash on default action: <bar> != <> [-Wother]
+    5 | exp: foo { $$; } foo { $2; } foo
+      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:6.6-8: warning: type clash on default action: <bar> != <> [-Wother]
+    6 |    | foo
+      |      ^~~
+input.y:7.6-11: warning: empty rule for typed nonterminal, and no action [-Wother]
+    7 |    | %empty
+      |      ^~~~~~
 ]])
 
 AT_CLEANUP
@@ -129,153 +489,184 @@
 # --------------------------------
 # 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;]]])
+%type <integer> a b c d e f g h i j k l m n o;
+%destructor { destroy ($$); } <integer>;]]])
 
 
 # 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.
-
+# ----------------------------------------------------------------
+# Generate a grammar to test unused values, and compile 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, [
+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' 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; }
+| 'm' m { $][2; } | 'n' n { $][2; } | 'o' o { $][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[; };
+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[; };
+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, [
+l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };
+m: INT | INT <integer>{ $][$ = $][1; } INT <integer>{ $][$ = $][2 + $][3; } INT { $][$ = $][4 + $][5; };
+n: INT | INT <integer>{ } INT <integer>{ } INT { };
+o: INT | INT <integer>{ } INT <integer>{ } INT { $][$ = $][1 + $][2 + $][3 + $][4 + $][5; };
+]]m4_ifval([$1], [
 _AT_UNUSED_VALUES_DECLARATIONS])
 )
 
-AT_BISON_CHECK(m4_ifval($2, [--warnings=midrule-values ])[-fcaret input.y],
+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; } { };
-                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-]]]))
+[[input.y:12.10-32: warning: unset value: $][$ [-Wother]
+   12 | a: INT | INT { } INT { } INT { };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~
+input.y:12.10-12: warning: unused value: $][1 [-Wother]
+   12 | a: INT | INT { } INT { } INT { };
+      |          ^~~
+input.y:12.18-20: warning: unused value: $][3 [-Wother]
+   12 | a: INT | INT { } INT { } INT { };
+      |                  ^~~
+input.y:12.26-28: warning: unused value: $][5 [-Wother]
+   12 | a: INT | INT { } INT { } INT { };
+      |                          ^~~
+input.y:13.10-15: warning: empty rule for typed nonterminal, and no action [-Wother]
+   13 | b: INT | %empty;
+      |          ^~~~~~
+]]m4_ifval([$2], [[[input.y:14.14-20: warning: unset value: $][$ [-Wmidrule-values]
+   14 | c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+      |              ^~~~~~~
+input.y:14.26-41: warning: unset value: $][$ [-Wmidrule-values]
+   14 | c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+      |                          ^~~~~~~~~~~~~~~~
+]]])[[input.y:14.10-62: warning: unset value: $][$ [-Wother]
+   14 | c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:14.22-24: warning: unused value: $][3 [-Wother]
+   14 | c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+      |                      ^~~
+input.y:14.43-45: warning: unused value: $][5 [-Wother]
+   14 | c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+      |                                           ^~~
+]]m4_ifval([$2], [[[input.y:15.14-16: warning: unset value: $][$ [-Wmidrule-values]
+   15 | d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+      |              ^~~
+]]])[[input.y:15.10-49: warning: unset value: $][$ [-Wother]
+   15 | d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:15.18-20: warning: unused value: $][3 [-Wother]
+   15 | d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+      |                  ^~~
+input.y:15.30-32: warning: unused value: $][5 [-Wother]
+   15 | d: INT | INT { } INT { $][1; } INT { $<integer>2; };
+      |                              ^~~
+input.y:16.10-37: warning: unset value: $][$ [-Wother]
+   16 | e: INT | INT { } INT {  } INT { $][1; };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:16.18-20: warning: unused value: $][3 [-Wother]
+   16 | e: INT | INT { } INT {  } INT { $][1; };
+      |                  ^~~
+input.y:16.27-29: warning: unused value: $][5 [-Wother]
+   16 | e: INT | INT { } INT {  } INT { $][1; };
+      |                           ^~~
+input.y:18.10-58: warning: unset value: $][$ [-Wother]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:18.10-12: warning: unused value: $][1 [-Wother]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |          ^~~
+]]m4_ifval([$2], [[[input.y:18.14-29: warning: unused value: $][2 [-Wmidrule-values]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |              ^~~~~~~~~~~~~~~~
+]]])[[input.y:18.31-33: warning: unused value: $][3 [-Wother]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |                               ^~~
+]]m4_ifval([$2], [[[input.y:18.35-50: warning: unused value: $][4 [-Wmidrule-values]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |                                   ^~~~~~~~~~~~~~~~
+]]])[[input.y:18.52-54: warning: unused value: $][5 [-Wother]
+   18 | g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+      |                                                    ^~~
+input.y:19.10-72: warning: unset value: $][$ [-Wother]
+   19 | h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:19.10-12: warning: unused value: $][1 [-Wother]
+   19 | h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+      |          ^~~
+input.y:19.31-33: warning: unused value: $][3 [-Wother]
+   19 | h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+      |                               ^~~
+]]m4_ifval([$2], [[[input.y:19.35-64: warning: unused value: $][4 [-Wmidrule-values]
+   19 | h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+      |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+]]])[[input.y:19.66-68: warning: unused value: $][5 [-Wother]
+   19 | h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+      |                                                                  ^~~
+]]m4_ifval([$2], [[[input.y:21.18-37: warning: unused value: $][3 [-Wmidrule-values]
+   21 | j: INT | INT INT { $<integer>$ = 1; } { $][$ = $][1 + $][2; };
+      |                  ^~~~~~~~~~~~~~~~~~~~
+]]])[[input.y:22.10-68: warning: unset value: $][$ [-Wother]
+   22 | k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:22.10-12: warning: unused value: $][1 [-Wother]
+   22 | k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+      |          ^~~
+input.y:22.14-16: warning: unused value: $][2 [-Wother]
+   22 | k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+      |              ^~~
+]]m4_ifval([$2], [[[input.y:22.35-64: warning: unused value: $][4 [-Wmidrule-values]
+   22 | k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+      |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+]]])[[input.y:25.23-25: warning: unset value: $][$ [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                       ^~~
+input.y:25.40-42: warning: unset value: $][$ [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                                        ^~~
+input.y:25.10-50: warning: unset value: $][$ [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:25.10-12: warning: unused value: $][1 [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |          ^~~
+input.y:25.23-25: warning: unused value: $][2 [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                       ^~~
+input.y:25.27-29: warning: unused value: $][3 [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                           ^~~
+input.y:25.40-42: warning: unused value: $][4 [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                                        ^~~
+input.y:25.44-46: warning: unused value: $][5 [-Wother]
+   25 | n: INT | INT <integer>{ } INT <integer>{ } INT { };
+      |                                            ^~~
+input.y:26.23-25: warning: unset value: $][$ [-Wother]
+   26 | o: INT | INT <integer>{ } INT <integer>{ } INT { $][$ = $][1 + $][2 + $][3 + $][4 + $][5; };
+      |                       ^~~
+input.y:26.40-42: warning: unset value: $][$ [-Wother]
+   26 | o: INT | INT <integer>{ } INT <integer>{ } INT { $][$ = $][1 + $][2 + $][3 + $][4 + $][5; };
+      |                                        ^~~
+]])
+
 ])
 
 ## --------------- ##
@@ -298,62 +689,151 @@
 AT_CLEANUP
 
 
+## ------------------- ##
+## Symbol redeclared.  ##
+## ------------------- ##
+
+AT_SETUP([Symbol redeclared])
+
+AT_DATA([[input.y]],
+[[%token FOO FOO
+%token BAR 12 BAR 12
+%token EOF 0 EOF 0
+%%
+exp: FOO BAR
+]])
+
+AT_BISON_CHECK([-fcaret input.y], [0], [],
+[[input.y:1.12-14: warning: symbol FOO redeclared [-Wother]
+    1 | %token FOO FOO
+      |            ^~~
+input.y:1.8-10:      previous declaration
+    1 | %token FOO FOO
+      |        ^~~
+input.y:2.15-17: warning: symbol BAR redeclared [-Wother]
+    2 | %token BAR 12 BAR 12
+      |               ^~~
+input.y:2.8-10:      previous declaration
+    2 | %token BAR 12 BAR 12
+      |        ^~~
+input.y:3.14-16: warning: symbol EOF redeclared [-Wother]
+    3 | %token EOF 0 EOF 0
+      |              ^~~
+input.y:3.8-10:      previous declaration
+    3 | %token EOF 0 EOF 0
+      |        ^~~
+]])
+
+AT_CLEANUP
+
+
+## --------------------------- ##
+## Symbol class redefinition.  ##
+## --------------------------- ##
+
+AT_SETUP([Symbol class redefinition])
+
+AT_DATA([[input.y]],
+[[%token FOO
+%nterm FOO BAR
+%token BAR
+%nterm error // The token error cannot be redefined as an nterm.
+%%
+FOO: BAR
+BAR:
+]])
+
+AT_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:2.8-10: error: symbol FOO redeclared as a nonterminal
+    2 | %nterm FOO BAR
+      |        ^~~
+input.y:1.8-10:     previous definition
+    1 | %token FOO
+      |        ^~~
+input.y:3.8-10: error: symbol BAR redeclared as a token
+    3 | %token BAR
+      |        ^~~
+input.y:2.12-14:    previous definition
+    2 | %nterm FOO BAR
+      |            ^~~
+input.y:4.8-12: error: symbol error redeclared as a nonterminal
+    4 | %nterm error // The token error cannot be redefined as an nterm.
+      |        ^~~~~
+input.y:6.1-3: error: rule given for FOO, which is a token
+    6 | FOO: BAR
+      | ^~~
+]])
+
+AT_CLEANUP
+
+
 ## --------------------------------------------- ##
 ## Default %printer and %destructor redeclared.  ##
 ## --------------------------------------------- ##
 
 AT_SETUP([Default %printer and %destructor redeclared])
 
-AT_DATA([[input.y]],
-[[%destructor { destroy ($$); } <*> <*>
-%printer { print ($$); } <*> <*>
+# AT_TEST([*])
+# ------------
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <$1> <$1>
+%printer { print ($$); } <$1> <$1>
 
-%destructor { destroy ($$); } <*>
-%printer { print ($$); } <*>
-
-%destructor { destroy ($$); } <> <>
-%printer { print ($$); } <> <>
-
-%destructor { destroy ($$); } <>
-%printer { print ($$); } <>
+%destructor { destroy ($$); } <$1>
+%printer { print ($$); } <$1>
 
 %%
 
-start: ;
+start: %empty;
 
-%destructor { destroy ($$); } <*>;
-%printer { print ($$); } <*>;
-
-%destructor { destroy ($$); } <>;
-%printer { print ($$); } <>;
+%destructor { destroy ($$); } <$1>;
+%printer { print ($$); } <$1>;
 ]])
 
-AT_BISON_CHECK([input.y], [1], [],
-[[input.y:1.13-29: error: redeclaration for default tagged %destructor
+AT_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:1.13-29: error: %destructor redeclaration for <>
+    1 | %destructor { destroy ($$); } <> <>
+      |             ^~~~~~~~~~~~~~~~~
 input.y:1.13-29:     previous declaration
-input.y:2.10-24: error: redeclaration for default tagged %printer
+    1 | %destructor { destroy ($$); } <> <>
+      |             ^~~~~~~~~~~~~~~~~
+input.y:2.10-24: error: %printer redeclaration for <>
+    2 | %printer { print ($$); } <> <>
+      |          ^~~~~~~~~~~~~~~
 input.y:2.10-24:     previous declaration
-input.y:4.13-29: error: redeclaration for default tagged %destructor
+    2 | %printer { print ($$); } <> <>
+      |          ^~~~~~~~~~~~~~~
+input.y:4.13-29: error: %destructor redeclaration for <>
+    4 | %destructor { destroy ($$); } <>
+      |             ^~~~~~~~~~~~~~~~~
 input.y:1.13-29:     previous declaration
-input.y:5.10-24: error: redeclaration for default tagged %printer
+    1 | %destructor { destroy ($$); } <> <>
+      |             ^~~~~~~~~~~~~~~~~
+input.y:5.10-24: error: %printer redeclaration for <>
+    5 | %printer { print ($$); } <>
+      |          ^~~~~~~~~~~~~~~
 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
+    2 | %printer { print ($$); } <> <>
+      |          ^~~~~~~~~~~~~~~
+input.y:11.13-29: error: %destructor redeclaration for <>
+   11 | %destructor { destroy ($$); } <>;
+      |             ^~~~~~~~~~~~~~~~~
+input.y:1.13-29:      previous declaration
+    1 | %destructor { destroy ($$); } <> <>
+      |             ^~~~~~~~~~~~~~~~~
+input.y:12.10-24: error: %printer redeclaration for <>
+   12 | %printer { print ($$); } <>;
+      |          ^~~~~~~~~~~~~~~
+input.y:2.10-24:      previous declaration
+    2 | %printer { print ($$); } <> <>
+      |          ^~~~~~~~~~~~~~~
 ]])
+])
+
+AT_TEST([], [], [])
+AT_TEST([], [*], [*])
+m4_popdef([AT_TEST])
 
 AT_CLEANUP
 
@@ -373,7 +853,7 @@
 
 %%
 
-start: ;
+start: %empty;
 
 %destructor { destroy ($$); } <field2> <field1>;
 %printer { print ($$); } <field2> <field1>;
@@ -383,24 +863,150 @@
 [[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:1.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:2.10-24:     previous declaration
 input.y:11.13-29: error: %destructor redeclaration for <field2>
 input.y:1.13-29:      previous declaration
+input.y:11.13-29: error: %destructor redeclaration for <field1>
+input.y:1.13-29:      previous declaration
+input.y:12.10-24: error: %printer redeclaration for <field2>
+input.y:2.10-24:      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
 
 
+## ------------------- ##
+## Undefined symbols.  ##
+## ------------------- ##
+
+AT_SETUP([Undefined symbols])
+
+AT_DATA([[input.y]],
+[[%printer {} foo baz
+%destructor {} bar
+%type <foo> qux
+%%
+exp: bar;
+]])
+
+AT_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:1.13-15: warning: symbol 'foo' is used, but is not defined as a token and has no rules [-Wother]
+    1 | %printer {} foo baz
+      |             ^~~
+input.y:1.17-19: warning: symbol 'baz' is used, but is not defined as a token and has no rules [-Wother]
+    1 | %printer {} foo baz
+      |                 ^~~
+input.y:2.16-18: error: symbol 'bar' is used, but is not defined as a token and has no rules
+    2 | %destructor {} bar
+      |                ^~~
+input.y:3.13-15: warning: symbol 'qux' is used, but is not defined as a token and has no rules [-Wother]
+    3 | %type <foo> qux
+      |             ^~~
+]])
+
+AT_CLEANUP
+
+
+## ----------------------------------------------------- ##
+## Unassociated types used for a printer or destructor.  ##
+## ----------------------------------------------------- ##
+
+AT_SETUP([Unassociated types used for a printer or destructor])
+
+AT_DATA([[input.y]],
+[[%token <type1> tag1
+%type <type2> tag2
+
+%printer { } <type1> <type3>
+%destructor { } <type2> <type4>
+
+%%
+
+exp: tag1 { $1; }
+   | tag2 { $1; }
+
+tag2: "a" { $$; }
+]])
+
+AT_BISON_CHECK([input.y], [0], [],
+[[input.y:4.22-28: warning: type <type3> is used, but is not associated to any symbol [-Wother]
+input.y:5.25-31: warning: type <type4> is used, but is not associated to any symbol [-Wother]
+]])
+
+AT_CLEANUP
+
+
+## --------------------------------- ##
+## Useless printers or destructors.  ##
+## --------------------------------- ##
+
+AT_SETUP([Useless printers or destructors])
+
+# AT_TEST([INPUT], [STDERR])
+# --------------------------
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[$1
+])
+AT_BISON_CHECK([input.y], [0], [], [$2
+])])
+
+AT_TEST([[%token <type1> token1
+%token <type2> token2
+%token <type3> token3
+%token <type4> token4
+%token <type5> token51 token52
+%token <type6> token61 token62
+%token <type7> token7
+
+%printer {} token1
+%destructor {} token2
+%printer {} token51
+%destructor {} token61
+
+%printer {} token7
+
+%printer {} <type1>
+%destructor {} <type2>
+%printer {} <type3>
+%destructor {} <type4>
+
+%printer {} <type5>
+%destructor {} <type6>
+
+%destructor {} <type7>
+
+%%
+exp: "a";]],
+[[input.y:16.13-19: warning: useless %printer for type <type1> [-Wother]
+input.y:17.16-22: warning: useless %destructor for type <type2> [-Wother]]])
+
+# If everybody is typed, <> is useless.
+AT_TEST([[%type <type> exp
+%token <type> a
+%printer {} <> <*>
+%%
+exp: a;]],
+[[input.y:3.13-14: warning: useless %printer for type <> [-Wother]]])
+
+# If nobody is typed, <*> is useless.
+AT_TEST([[%token a
+%printer {} <> <*>
+%%
+exp: a;]],
+[[input.y:2.16-18: warning: useless %printer for type <*> [-Wother]]])
+
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
+
+
 ## ---------------------------------------- ##
 ## Unused values with default %destructor.  ##
 ## ---------------------------------------- ##
@@ -418,10 +1024,16 @@
 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_BISON_CHECK([-fcaret input.y], [0], [],
+[[input.y:6.8-45: warning: unset value: $$ [-Wother]
+    6 | start: end end tagged tagged { $<tag>1; $3; } ;
+      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:6.12-14: warning: unused value: $2 [-Wother]
+    6 | start: end end tagged tagged { $<tag>1; $3; } ;
+      |            ^~~
+input.y:7.6-8: warning: unset value: $$ [-Wother]
+    7 | end: { } ;
+      |      ^~~
 ]])
 
 AT_DATA([[input.y]],
@@ -436,8 +1048,8 @@
 ]])
 
 AT_BISON_CHECK([input.y], [0], [],
-[[input.y:6.23-28: warning: unused value: $4
-input.y:8.9-11: warning: unset value: $$
+[[input.y:6.23-28: warning: unused value: $4 [-Wother]
+input.y:8.9-11: warning: unset value: $$ [-Wother]
 ]])
 
 AT_CLEANUP
@@ -459,10 +1071,73 @@
 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_BISON_CHECK([-fcaret input.y], [0], [],
+[[input.y:6.8-22: warning: unset value: $$ [-Wother]
+    6 | start: end end { $1; } ;
+      |        ^~~~~~~~~~~~~~~
+input.y:6.12-14: warning: unused value: $2 [-Wother]
+    6 | start: end end { $1; } ;
+      |            ^~~
+input.y:7.6-8: warning: unset value: $$ [-Wother]
+    7 | end: { }  ;
+      |      ^~~
+]])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## Duplicate string.  ##
+## ------------------ ##
+
+
+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
+   string, as LE and GE below. */
+
+%token NUM
+%token LE "<="
+%token GE "<="
+
+%%
+exp: '(' exp ')' | NUM ;
+%%
+]])
+AT_BISON_OPTION_POPDEFS
+
+AT_BISON_CHECK([-v -o input.c input.y], 0, [],
+[[input.y:6.11-14: warning: symbol "<=" used more than once as a literal string [-Wother]
+]])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## Token collisions.  ##
+## ------------------ ##
+
+AT_SETUP([Token collisions])
+
+AT_DATA([[input.y]],
+[[%token FOO 42 "foo"
+         BAR 42 "foo"
+%%
+exp: FOO BAR;
+]])
+
+AT_BISON_CHECK([-fcaret input.y], [1], [],
+[[input.y:2.17-21: warning: symbol "foo" used more than once as a literal string [-Wother]
+    2 |          BAR 42 "foo"
+      |                 ^~~~~
+input.y:2.10-12: error: user token number 42 redeclaration for BAR
+    2 |          BAR 42 "foo"
+      |          ^~~
+input.y:1.15-19:     previous declaration for "foo"
+    1 | %token FOO 42 "foo"
+      |               ^~~~~
 ]])
 
 AT_CLEANUP
@@ -474,34 +1149,118 @@
 
 AT_SETUP([Incompatible Aliases])
 
-AT_DATA([input.y],
-[[%token foo "foo"
+m4_pushdef([AT_TEST],
+[AT_DATA([input.y], [$1])
+AT_BISON_CHECK([-fcaret input.y], [1], [], [$2])
+])
 
-%type <bar>       foo
-%printer {bar}    foo
-%destructor {bar} foo
-%left             foo
+# Use the string-alias first to check the order between "first
+# declaration" and second.
 
-%type <baz>       "foo"
-%printer {baz}    "foo"
-%destructor {baz} "foo"
-%left             "foo"
-
+AT_TEST([[%token foo "foo"
+%type <bar> "foo"
+%type <baz> foo
 %%
 exp: foo;
+]],
+[[input.y:3.7-11: error: %type redeclaration for foo
+    3 | %type <baz> foo
+      |       ^~~~~
+input.y:2.7-11:     previous declaration
+    2 | %type <bar> "foo"
+      |       ^~~~~
 ]])
 
-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_TEST([[%token foo "foo"
+%printer {bar} "foo"
+%printer {baz} foo
+%%
+exp: foo;
+]],
+[[input.y:3.10-14: error: %printer redeclaration for foo
+    3 | %printer {baz} foo
+      |          ^~~~~
+input.y:2.10-14:     previous declaration
+    2 | %printer {bar} "foo"
+      |          ^~~~~
 ]])
 
+AT_TEST([[%token foo "foo"
+%destructor {bar} "foo"
+%destructor {baz} foo
+%%
+exp: foo;
+]],
+[[input.y:3.13-17: error: %destructor redeclaration for foo
+    3 | %destructor {baz} foo
+      |             ^~~~~
+input.y:2.13-17:     previous declaration
+    2 | %destructor {bar} "foo"
+      |             ^~~~~
+]])
+
+AT_TEST([[%token foo "foo"
+%left "foo"
+%left foo
+%%
+exp: foo;
+]],
+[[input.y:3.1-5: error: %left redeclaration for foo
+    3 | %left foo
+      | ^~~~~
+input.y:2.1-5:     previous declaration
+    2 | %left "foo"
+      | ^~~~~
+]])
+
+# This time, declare the alias after its use.
+
+# Precedence/associativity.
+AT_TEST([[%left "foo"
+%left foo
+%token foo "foo"
+%%
+exp: foo;
+]],
+[[input.y:2.1-5: error: %left redeclaration for foo
+    2 | %left foo
+      | ^~~~~
+input.y:1.1-5:     previous declaration
+    1 | %left "foo"
+      | ^~~~~
+]])
+
+# Printer.
+AT_TEST([[%printer {} "foo"
+%printer {} foo
+%token foo "foo"
+%%
+exp: foo;
+]],
+[[input.y:2.10-11: error: %printer redeclaration for foo
+    2 | %printer {} foo
+      |          ^~
+input.y:1.10-11:     previous declaration
+    1 | %printer {} "foo"
+      |          ^~
+]])
+
+# Destructor.
+AT_TEST([[%destructor {} "foo"
+%destructor {} foo
+%token foo "foo"
+%%
+exp: foo;
+]],
+[[input.y:2.13-14: error: %destructor redeclaration for foo
+    2 | %destructor {} foo
+      |             ^~
+input.y:1.13-14:     previous declaration
+    1 | %destructor {} "foo"
+      |             ^~
+]])
+
+m4_popdef([AT_TEST])
 AT_CLEANUP
 
 
@@ -525,8 +1284,10 @@
 AT_DATA([input.y],
 [{}
 ])
-AT_BISON_CHECK([input.y], [1], [],
+AT_BISON_CHECK([-fcaret  input.y], [1], [],
 [[input.y:1.1-2: error: syntax error, unexpected {...}
+    1 | {}
+      | ^~
 ]])
 
 
@@ -614,7 +1375,7 @@
 
 two: '\x000000000000000000000000000000000000000000000000000000000000000000002';
 oline: '@' 'o' 'l' 'i' 'n' 'e' '@' '_' '_' 'o' 'l' 'i' 'n' 'e' '_' '_';
-output.or.oline.opt: ;|oline;;|output;;;
+output.or.oline.opt: %empty;|oline;;|output;;;
 output: '#' 'o' 'u' 't' 'p' 'u' 't' ' ';
 %%
 /* Exercise M4 quoting: '@:>@@:>@', @<:@, 2.  */
@@ -633,26 +1394,23 @@
   static char const input[] = "@<:@\1\2$@{@oline@__@&t@oline__\
 #output "; /* "
   */
-  static size_t toknum;
-  assert (toknum < sizeof input);
+  enum { input_elts = sizeof input };
+  (void) input_elts;
+  static int toknum;
+  assert (0 <= toknum && toknum < input_elts);
   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;
 #include "input.h"
 
 int yyparse (void);
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
@@ -660,7 +1418,7 @@
 AT_COMPILE([input.o])
 AT_COMPILE([main.o])
 AT_COMPILE([input], [input.o main.o])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([input], 0,
 [[[@<:@],
 ]])
 
@@ -674,6 +1432,7 @@
 AT_SETUP([Typed symbol aliases])
 
 # Bison 2.0 broke typed symbol aliases - ensure they work.
+AT_BISON_OPTION_PUSHDEFS
 
 AT_DATA_GRAMMAR([input.y],
 [[%union
@@ -689,6 +1448,7 @@
 
 AT_BISON_CHECK([-o input.c input.y])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -698,12 +1458,14 @@
 
 m4_define([AT_CHECK_REQUIRE],
 [AT_SETUP([Require $1])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[%require "$1";
 %%
-empty_file:;
+empty_file: %empty;
 ]])
 AT_BISON_CHECK([-o input.c input.y], $2, [], ignore)
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 ])
 
@@ -719,9 +1481,10 @@
 
 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.
+# Bison once thought a character token and its alias were different
+# symbols with the same user token number.
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[%token 'a' "a"
 %%
@@ -731,6 +1494,7 @@
 
 AT_BISON_CHECK([-o input.c input.y])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -760,18 +1524,17 @@
 ]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
+AT_BISON_CHECK([--yacc input.y], [], [],
+[[input.y:1.1-5: warning: POSIX Yacc does not support %code [-Wyacc]
+input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc]
+input.y:10.21-34: warning: POSIX Yacc does not support string literals [-Wyacc]
+input.y:12.23-38: warning: POSIX Yacc does not support string literals [-Wyacc]
+input.y:13.1-5: warning: POSIX Yacc does not support %code [-Wyacc]
+input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc]
+input.y:22.15-28: warning: POSIX Yacc does not support string literals [-Wyacc]
+input.y:24.17-32: warning: POSIX Yacc does not support string literals [-Wyacc]
 ]])
 
 # Dashes are fine for GNU Bison.
@@ -797,6 +1560,7 @@
 input.y:12.10: error: invalid character: '-'
 ]])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -806,6 +1570,7 @@
 
 AT_SETUP([Numbered tokens])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([redecl.y],
 [[%token DECIMAL_1     11259375
          HEXADECIMAL_1 0xabcdef
@@ -832,9 +1597,12 @@
 
 AT_BISON_CHECK([too-large.y], [1], [],
 [[too-large.y:9.22-42: error: integer out of range: '999999999999999999999'
+too-large.y:9.22-42: error: user token number of TOO_LARGE_DEC too large
 too-large.y:10.24-44: error: integer out of range: '0xFFFFFFFFFFFFFFFFFFF'
+too-large.y:10.24-44: error: user token number of TOO_LARGE_HEX too large
 ]])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -844,10 +1612,10 @@
 
 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.
+# 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
@@ -859,7 +1627,7 @@
 
 %%
 
-start: ;
+start: %empty;
 
 // Used to report a syntax error because it didn't see any kind of symbol
 // identifier.
@@ -871,31 +1639,22 @@
 %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
-          ^^
+    1 | %token A "a
+      |          ^~
 input.y:4.10-5.0: error: missing "'" at end of line
- %token C '1
-          ^^
+    4 | %token C '1
+      |          ^~
 input.y:14.11-15.0: error: missing "'" at end of line
- %type <f> 'a
-           ^^
+   14 | %type <f> 'a
+      |           ^~
 input.y:16.11-17.0: error: missing '"' at end of line
- %type <f> "a
-           ^^
+   16 | %type <f> "a
+      |           ^~
 input.y:19.13-20.0: error: missing '}' at end of file
- %destructor { free ($$)
-             ^^^^^^^^^^^
+   19 | %destructor { free ($$)
+      |             ^~~~~~~~~~~
 input.y:20.1: error: syntax error, unexpected end of file
 ]])
 
@@ -908,12 +1667,12 @@
 
 AT_SETUP([%start after first rule])
 
-# Bison once complained that a %start after the first rule was a redeclaration
-# of the start symbol.
+# Bison once complained that a %start after the first rule was a
+# redeclaration of the start symbol.
 
 AT_DATA([input.y],
 [[%%
-false_start: ;
+false_start: %empty;
 start: false_start ;
 %start start;
 ]])
@@ -934,7 +1693,7 @@
 AT_DATA([input.y],
 [[%%
 start: PREC %prec PREC ;
-PREC: ;
+PREC: %empty;
 ]])
 
 AT_BISON_CHECK([input.y], [1], [],
@@ -958,7 +1717,7 @@
 ]])
 
 AT_BISON_CHECK([[input.y]], [[0]], [],
-[[input.y:2.8-17: warning: token for %prec is not defined: PREC
+[[input.y:2.8-17: warning: token for %prec is not defined: PREC [-Wother]
 ]])
 
 AT_CLEANUP
@@ -976,7 +1735,7 @@
 %code bad {}
 %code format {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[input-c.y]], [[1]], [],
 [[input-c.y:1.7: error: %code qualifier 'q' is not used
@@ -990,7 +1749,7 @@
 %code bad {}
  %code bad {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[input-c-glr.y]], [[1]], [],
 [[input-c-glr.y:1.7: error: %code qualifier 'q' is not used
@@ -1003,7 +1762,7 @@
 %code bad {}
  %code q {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[input-c++.y]], [[1]], [],
 [[input-c++.y:1.7: error: %code qualifier 'q' is not used
@@ -1016,7 +1775,7 @@
 %code q {}
 %code q {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[input-c++-glr.y]], [[1]], [],
 [[input-c++-glr.y:1.7-9: error: %code qualifier 'bad' is not used
@@ -1029,7 +1788,7 @@
 %code q {}
 %code q {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[special-char-@@.y]], [[1]], [],
 [[special-char-@@.y:1.7-9: error: %code qualifier 'bad' is not used
@@ -1042,7 +1801,7 @@
 %code q {}
 %code q {}
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[special-char-@:>@.y]], [[1]], [],
 [[special-char-@:>@.y:1.7-9: error: %code qualifier 'bad' is not used
@@ -1054,6 +1813,46 @@
 
 
 ## ---------------- ##
+## Multiple %code.  ##
+## ---------------- ##
+
+AT_SETUP([Multiple %code])
+
+# Make sure that repeated arguments to %code are separated by
+# end-of-lines.  At some point, a missing eol would leave synclines
+# appended to the previous value.  Here, we use CPP directive to
+# introduce dependency on the absence/presence of the eol.
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA([input.y],
+[[%code {#include <assert.h>}
+%code {#define A B}
+%code {#define B C}
+%code {#define C D}
+%code {#define D 42}
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%%
+start: %empty;
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+int main (void)
+{
+  assert (A == 42);
+  return 0;
+}
+]])
+AT_FULL_COMPILE([input])
+AT_PARSER_CHECK([input])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ---------------- ##
 ## %define errors.  ##
 ## ---------------- ##
 
@@ -1066,24 +1865,25 @@
 %define special1 "@:>@"
 %define special2 "@<:@"
 %%
-start: ;
+start: %empty;
 ]])
 
 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
+[[input-redefined.y:2.1-20: warning: %define variable 'var' redefined [-Wother]
+input-redefined.y:1.1-20:     previous definition
+input-redefined.y:3.2-21: error: %define variable 'var' redefined
+input-redefined.y:2.1-20:     previous definition
+input-redefined.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]])
 
 AT_DATA([input-unused.y],
 [[%define var "value"
 %%
-start: ;
+start: %empty;
 ]])
 
 AT_BISON_CHECK([[input-unused.y]], [[1]], [],
-[[input-unused.y:1.9-11: error: %define variable 'var' is not used
+[[input-unused.y:1.1-19: error: %define variable 'var' is not used
 ]])
 
 AT_CLEANUP
@@ -1107,7 +1907,7 @@
 AT_DATA([[input.y]],
 [[%define var-dfg "gram"
 %%
-start: ;
+start: %empty;
 ]])
 AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \
                  -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \
@@ -1124,165 +1924,274 @@
 AT_DATA([[input-dg.y]],
 [[%define var "gram"
 %%
-start: ;
+start: %empty;
 ]])
 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
+[[input-dg.y:1.1-18: error: %define variable 'var' redefined
+<command line>:3:      previous definition
+input-dg.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]])
 
 AT_DATA([[input-dg.y]],
 [[%define var "gram"
 %%
-start: ;
+start: %empty;
 ]])
 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
+[[input-dg.y:1.1-18: error: %define variable 'var' redefined
+    1 | %define var "gram"
+      | ^~~~~~~~~~~~~~~~~~
+<command line>:4:      previous definition
+input-dg.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]])
 
 AT_DATA([[input-unused.y]],
 [[%%
-start: ;
+start: %empty;
 ]])
 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
+[[<command line>:3: error: %define variable 'unused-d' is not used
+<command line>:4: error: %define variable 'unused-f' is not used
 ]])
 
 AT_CLEANUP
 
+
 ## --------------------------- ##
 ## %define Boolean variables.  ##
 ## --------------------------- ##
 
-AT_SETUP([[%define Boolean variables]])
+AT_SETUP([["%define" Boolean variables]])
 
 AT_DATA([Input.y],
 [[%language "Java"
-%define public "maybe"
-%define parser_class_name "Input"
+%define api.parser.class {Input}
+%define api.parser.public {maybe}
 %%
-start: ;
+start: %empty;
 ]])
 
 AT_BISON_CHECK([[Input.y]], [1], [],
-[[Input.y:2.9-14: error: invalid value for %define Boolean variable 'public'
+[[Input.y:3.1-33: error: invalid value for %define Boolean variable 'api.parser.public'
 ]])
 
 AT_CLEANUP
 
+
+## ------------------------ ##
+## %define code variables.  ##
+## ------------------------ ##
+
+AT_SETUP([["%define" code variables]])
+
+m4_pushdef([AT_TEST],
+[AT_DATA([input.yy],
+[[%skeleton "lalr1.cc" %locations
+%define api.location.type ]$1[quux]$2[
+%define api.namespace     ]$1[quux]$2[
+%define api.prefix        ]$1[quux]$2[
+%define api.token.prefix  ]$1[quux]$2[
+%token TOK // Otherwise api.token.prefix is unused.
+%%
+start: TOK;
+]])
+
+AT_BISON_CHECK([[input.yy]], [0], [],
+[[input.yy:2.$3: warning: %define variable 'api.location.type' requires '{...}' values [-Wdeprecated]
+input.yy:4.$3: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated]
+input.yy:5.$3: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated]
+input.yy:3.$3: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated]
+]])
+])
+
+AT_TEST([],  [],  [1-30])
+AT_TEST(["], ["], [1-32])
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
+
+
+## --------------------------- ##
+## %define keyword variables.  ##
+## --------------------------- ##
+
+AT_SETUP([["%define" keyword variables]])
+
+m4_pushdef([AT_TEST],
+[AT_DATA([input.y],
+[[%define api.pure                ]$1[true]$2[
+%define api.push-pull             ]$1[both]$2[
+%define lr.default-reduction      ]$1[most]$2[
+%define lr.keep-unreachable-state ]$1[true]$2[
+%define lr.type                   ]$1[lalr]$2[
+%%
+exp: %empty
+]])
+
+AT_BISON_CHECK([[input.y]], [0], [],
+[[input.y:5.1-40: warning: %define variable 'lr.type' requires keyword values [-Wdeprecated]
+input.y:3.1-40: warning: %define variable 'lr.default-reduction' requires keyword values [-Wdeprecated]
+input.y:4.1-40: warning: %define variable 'lr.keep-unreachable-state' requires keyword values [-Wdeprecated]
+input.y:1.1-38: warning: %define variable 'api.pure' requires keyword values [-Wdeprecated]
+input.y:2.1-40: warning: %define variable 'api.push-pull' requires keyword values [-Wdeprecated]
+]])
+])
+
+AT_TEST(["], ["])
+AT_TEST([{], [}])
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
+
+
 ## ------------------------ ##
 ## %define enum variables.  ##
 ## ------------------------ ##
 
-AT_SETUP([[%define enum variables]])
+AT_SETUP([["%define" enum variables]])
+
+# Check errors from the front-end, and the back-end.  Since the
+# front-end quits before calling the back-end, these tests cannot be
+# fused.
 
 # Front-end.
 AT_DATA([[input.y]],
-[[%define lr.default-reductions bogus
+[[%define lr.default-reduction bogus
 %%
-start: ;
+start: %empty;
 ]])
-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'
+AT_BISON_CHECK([[-fcaret input.y]], [[1]], [[]],
+[[input.y:1.1-34: error: invalid value for %define variable 'lr.default-reduction': 'bogus'
+    1 | %define lr.default-reduction bogus
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:1.1-34:     accepted value: 'most'
+input.y:1.1-34:     accepted value: 'consistent'
+input.y:1.1-34:     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: ;
+start: %empty;
 ]])
-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_BISON_CHECK([[-fcaret input.y]], [[1]], [[]],
+[[input.y:1.1-29: error: invalid value for %define variable 'api.push-pull': 'neither'
+    1 | %define api.push-pull neither
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y:1.1-29:     accepted value: 'pull'
+input.y:1.1-29:     accepted value: 'push'
+input.y:1.1-29:     accepted value: 'both'
 ]])
 
 AT_CLEANUP
 
+
+
+## ------------------------ ##
+## %define file variables.  ##
+## ------------------------ ##
+
+AT_SETUP([["%define" file variables]])
+
+AT_DATA([[input.y]],
+[[%skeleton "lalr1.cc"
+%locations
+%define api.location.file {bogus}
+%%
+start: %empty;
+]])
+AT_BISON_CHECK([[-fcaret input.y]], [[1]], [[]],
+[[input.y:3.1-33: error: %define variable 'api.location.file' requires 'none' or '"..."' values
+    3 | %define api.location.file {bogus}
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+]])
+
+AT_CLEANUP
+
+
 ## -------------------------------- ##
 ## %define backward compatibility.  ##
 ## -------------------------------- ##
 
-AT_SETUP([[%define backward compatibility]])
+AT_SETUP([["%define" backward compatibility]])
 
-# The error messages tell us whether underscores in these variables are
-# being converted to dashes.
-
+# The error messages tell us whether the variables are properly updated.
 AT_DATA([[input.y]],
-[[%define api.push_pull "neither"
+[[%define api.push_pull both
+%define lr.keep_unreachable_states maybe
+%define namespace "foo"
+%define variant
+%define parser_class_name {parser}
 %%
-start: ;
+start: %empty;
 ]])
-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_BISON_CHECK([[-fcaret input.y]], [1], [],
+[[input.y:1.1-26: warning: deprecated directive: '%define api.push_pull both', use '%define api.push-pull both' [-Wdeprecated]
+    1 | %define api.push_pull both
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~
+      | %define api.push-pull both
+input.y:2.1-40: warning: deprecated directive: '%define lr.keep_unreachable_states maybe', use '%define lr.keep-unreachable-state maybe' [-Wdeprecated]
+    2 | %define lr.keep_unreachable_states maybe
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      | %define lr.keep-unreachable-state maybe
+input.y:3.1-23: warning: deprecated directive: '%define namespace "foo"', use '%define api.namespace {foo}' [-Wdeprecated]
+    3 | %define namespace "foo"
+      | ^~~~~~~~~~~~~~~~~~~~~~~
+      | %define api.namespace {foo}
+input.y:4.1-15: warning: deprecated directive: '%define variant', use '%define api.value.type variant' [-Wdeprecated]
+    4 | %define variant
+      | ^~~~~~~~~~~~~~~
+      | %define api.value.type variant
+input.y:5.1-34: warning: deprecated directive: '%define parser_class_name {parser}', use '%define api.parser.class {parser}' [-Wdeprecated]
+    5 | %define parser_class_name {parser}
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      | %define api.parser.class {parser}
+input.y:2.1-40: error: invalid value for %define Boolean variable 'lr.keep-unreachable-state'
+    2 | %define lr.keep_unreachable_states maybe
+      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
 ]])
 
 AT_CLEANUP
 
+
 ## ------------------------- ##
 ## Unused %define api.pure.  ##
 ## ------------------------- ##
 
 AT_SETUP([[Unused %define api.pure]])
 
-# AT_CHECK_API_PURE(DECLS, VALUE)
+# AT_TEST(DECLS, VALUE, LOCATION)
 # -------------------------------
-# Make sure Bison reports that `%define api.pure VALUE' is unused when DECLS
+# Make sure Bison reports that '%define api.pure VALUE' is unused when DECLS
 # are specified.
-m4_define([AT_CHECK_API_PURE],
+m4_pushdef([AT_TEST],
 [
 AT_DATA([[input.y]],
 [[%define api.pure ]$2[
 ]$1[
 %%
-start: ;
+start: %empty;
 ]])
 
 AT_BISON_CHECK([[input.y]], [[1]], [],
-[[input.y:1.9-16: error: %define variable 'api.pure' is not used
+[[input.y:]$3[: 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_TEST([[%language "c++"]],             [[]],      [[1.1-16]])
+AT_TEST([[%language "c++"]],             [[false]], [[1.1-22]])
+AT_TEST([[%language "c++" %glr-parser]], [[""]],    [[1.1-19]])
+AT_TEST([[%language "c++" %glr-parser]], [[false]], [[1.1-22]])
+AT_TEST([[%language "java"]],            [[true]],  [[1.1-21]])
+AT_TEST([[%language "java"]],            [[false]], [[1.1-22]])
+
+m4_popdef([AT_TEST])
 
 AT_CLEANUP
 
+
 ## -------------------------------- ##
 ## C++ namespace reference errors.  ##
 ## -------------------------------- ##
@@ -1297,41 +2206,42 @@
 AT_DATA([[input.y]],
 [[%language "C++"
 %defines
-%define namespace "]$1["
+%define api.namespace {]$1[}
 %%
-start: ;
+start: %empty;
 ]])
 
 AT_BISON_CHECK([[input.y]], [1], [],
 [m4_foreach([b4_arg], m4_dquote(m4_shift($@)),
-[[input.y:3.9-17: error: ]b4_arg[
-]])])
+[b4_arg
+])])
 ])
 
 AT_CHECK_NAMESPACE_ERROR([[]],
-                         [[namespace reference is empty]])
-AT_CHECK_NAMESPACE_ERROR([[ 		  	 	]],
-                         [[namespace reference is empty]])
+                         [[input.y:3.1-24: error: namespace reference is empty]])
+AT_CHECK_NAMESPACE_ERROR([[ @tb@@tb@  @tb@ @tb@]],
+                         [[input.y:3.1-57: 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 "::"]])
+                         [[input.y:3.1-34: error: namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo:: @tb@::bar]],
+                         [[input.y:3.1-38: error: namespace reference has consecutive "::"]])
 AT_CHECK_NAMESPACE_ERROR([[::::bar]],
-                         [[namespace reference has consecutive "::"]])
+                         [[input.y:3.1-31: error: 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 "::"]])
+                         [[input.y:3.1-32: error: namespace reference has consecutive "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo::bar::@tb@::]],
+                         [[input.y:3.1-43: error: namespace reference has consecutive "::"]],
+                         [[input.y:3.1-43: error: 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 "::"]])
+                         [[input.y:3.1-34: error: namespace reference has a trailing "::"]])
+AT_CHECK_NAMESPACE_ERROR([[foo::bar:: @tb@]],
+                         [[input.y:3.1-41: error: namespace reference has a trailing "::"]])
 AT_CHECK_NAMESPACE_ERROR([[::]],
-                         [[namespace reference has a trailing "::"]])
+                         [[input.y:3.1-26: error: namespace reference has a trailing "::"]])
 
 AT_CLEANUP
 
+
 ## ------------------------ ##
 ## Bad character literals.  ##
 ## ------------------------ ##
@@ -1339,59 +2249,63 @@
 # 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],
+AT_DATA_NO_FINAL_EOL([empty.y],
 [[%%
 start: '';
 start: '
-]])
-AT_CHECK([[$PERL -e "print 'start: \'';" >> empty.y || exit 77]])
+start: ']])
 
-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
+AT_BISON_CHECK([-fcaret empty.y], [1], [],
+[[empty.y:2.8-9: warning: empty character literal [-Wother]
+    2 | start: '';
+      |        ^~
 empty.y:3.8-4.0: error: missing "'" at end of line
-empty.y:4.8: warning: empty character literal
+    3 | start: '
+      |        ^
+empty.y:3.8-4.0: warning: empty character literal [-Wother]
+    3 | start: '
+      |        ^
 empty.y:4.8: error: missing "'" at end of file
+    4 | start: '
+      |        ^
+empty.y:4.8: warning: empty character literal [-Wother]
+    4 | start: '
+      |        ^
 ]])
 
-AT_DATA([two.y],
+AT_DATA_NO_FINAL_EOL([two.y],
 [[%%
 start: 'ab';
 start: 'ab
-]])
-AT_CHECK([[$PERL -e "print 'start: \'ab';" >> two.y || exit 77]])
+start: 'ab]])
 
 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:2.8-11: warning: extra characters in character literal [-Wother]
 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:3.8-4.0: warning: extra characters in character literal [-Wother]
 two.y:4.8-10: error: missing "'" at end of file
+two.y:4.8-10: warning: extra characters in character literal [-Wother]
 ]])
 
-AT_DATA([three.y],
+AT_DATA_NO_FINAL_EOL([three.y],
 [[%%
 start: 'abc';
 start: 'abc
-]])
-AT_CHECK([[$PERL -e "print 'start: \'abc';" >> three.y || exit 77]])
+start: 'abc]])
 
 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:2.8-12: warning: extra characters in character literal [-Wother]
 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:3.8-4.0: warning: extra characters in character literal [-Wother]
 three.y:4.8-11: error: missing "'" at end of file
+three.y:4.8-11: warning: extra characters in character literal [-Wother]
 ]])
 
 AT_CLEANUP
 
+
 ## ------------------------- ##
 ## Bad escapes in literals.  ##
 ## ------------------------- ##
@@ -1409,30 +2323,29 @@
 # 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_PERL_REQUIRE([[-e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y]])
 
 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.8-13: warning: empty character literal [-Wother]
 input.y:2.16-17: error: invalid number after \-escape: 0
-input.y:2.15-18: warning: empty character literal
+input.y:2.15-18: warning: empty character literal [-Wother]
 input.y:2.21-25: error: invalid number after \-escape: xfff
-input.y:2.20-26: warning: empty character literal
+input.y:2.20-26: warning: empty character literal [-Wother]
 input.y:2.29-31: error: invalid number after \-escape: x0
-input.y:2.28-32: warning: empty character literal
+input.y:2.28-32: warning: empty character literal [-Wother]
 input.y:3.9-14: error: invalid number after \-escape: uffff
-input.y:3.8-15: warning: empty character literal
+input.y:3.8-15: warning: empty character literal [-Wother]
 input.y:3.18-23: error: invalid number after \-escape: u0000
-input.y:3.17-24: warning: empty character literal
+input.y:3.17-24: warning: empty character literal [-Wother]
 input.y:3.27-36: error: invalid number after \-escape: Uffffffff
-input.y:3.26-37: warning: empty character literal
+input.y:3.26-37: warning: empty character literal [-Wother]
 input.y:3.40-49: error: invalid number after \-escape: U00000000
-input.y:3.39-50: warning: empty character literal
+input.y:3.39-50: warning: empty character literal [-Wother]
 input.y:4.9-10: error: invalid character after \-escape: ' '
-input.y:4.8-11: warning: empty character literal
+input.y:4.8-11: warning: empty character literal [-Wother]
 input.y:4.14-15: error: invalid character after \-escape: A
-input.y:4.13-16: warning: empty character literal
+input.y:4.13-16: warning: empty character literal [-Wother]
 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
@@ -1441,59 +2354,83 @@
 
 AT_CLEANUP
 
+
 ## ------------------------- ##
 ## LAC: Errors for %define.  ##
 ## ------------------------- ##
 
 AT_SETUP([[LAC: Errors for %define]])
+AT_KEYWORDS([lac])
 
 AT_DATA([[input.y]],
 [[%%
-start: ;
+start: %empty;
 ]])
 
 # 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
+[[<command line>:3: 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
+[[<command line>:3: error: %define variable 'parse.lac.memory-trace' is not used
+]])
+
+# parse.lac.* options are useless in C++ even if LAC isn't actually activated.
+AT_BISON_CHECK([[-Dparse.lac.es-capacity-initial=1 -L C++ -Dparse.lac input.y]],
+               [[1]], [],
+[[<command line>:3: error: %define variable 'parse.lac.es-capacity-initial' is not used
+]])
+AT_BISON_CHECK([[-Dparse.lac.memory-trace=full -L C++ -Dparse.lac  input.y]],
+               [[1]], [],
+[[<command line>:3: 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]])
+## ---------------------- ##
+## -Werror combinations.  ##
+## ---------------------- ##
+
+AT_SETUP([[-Werror combinations]])
 
 AT_DATA([[input.y]],
 [[%%
-foo-bar: ;
+a: '0' { $$ = $; };
 ]])
 
 # -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
+[[input.y:2.15: warning: stray '$' [-Wother]
 ]])
 AT_BISON_CHECK([[-W input.y]], [[0]], [[]],
-[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+[[input.y:2.15: warning: stray '$' [-Wother]
 ]])
 AT_BISON_CHECK([[-Wno-none input.y]], [[0]], [[]],
-[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+[[input.y:2.15: warning: stray '$' [-Wother]
 ]])
 
 # -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
+AT_BISON_CHECK([[-Werror,none,other input.y]], [[1]], [[]],
+[[input.y:2.15: error: stray '$' [-Werror=other]
 ]])
-[mv stderr experr]
-AT_BISON_CHECK([[-Werror,no-all,yacc input.y]], [[1]], [[]], [[experr]])
+AT_BISON_CHECK([[-Werror,no-all,other input.y]], [[1]], [[]],
+[[input.y:2.15: error: stray '$' [-Werror=other]
+]])
+
+# Check that -Wno-error keeps warnings enabled, but non fatal.
+AT_BISON_CHECK([[-Werror -Wno-error=other input.y]], [[0]], [[]],
+[[input.y:2.15: warning: stray '$' [-Wother]
+]])
+
+AT_BISON_CHECK([[-Wno-error=other -Werror input.y]], [[0]], [[]],
+[[input.y:2.15: warning: stray '$' [-Wother]
+]])
+
+AT_BISON_CHECK([[-Werror=other -Wno-other input.y]], [[0]], [[]],
+[[]])
 
 AT_CLEANUP
 
@@ -1502,7 +2439,7 @@
 ## %name-prefix and %define api.prefix are incompatible.  ##
 ## ------------------------------------------------------ ##
 
-AT_SETUP([[%name-prefix and %define api.prefix are incompatible]])
+AT_SETUP([[%name-prefix and api.prefix are incompatible]])
 
 # AT_TEST(DIRECTIVES, OPTIONS, ERROR-LOCATION)
 # --------------------------------------------
@@ -1510,52 +2447,105 @@
 [AT_DATA([[input.y]],
 [[$1
 %%
-exp:;
+exp: %empty;
 ]])
-AT_BISON_CHECK([[$2 input.y]], [[1]], [[]],
+AT_BISON_CHECK([[$2 -Wno-deprecated 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])
+AT_TEST([%define api.prefix {foo} %name-prefix "bar"], [], [input.y:1.1-24])
+AT_TEST([], [-Dapi.prefix={foo} -p bar],                   [<command line>:3])
+AT_TEST([%name-prefix "bar"], [-Dapi.prefix={foo}],        [<command line>:3])
+AT_TEST([%define api.prefix {foo}], [-p bar],              [input.y:1.1-24])
 
 m4_popdef([AT_TEST])
 
 AT_CLEANUP
 
 
+## ----------------------- ##
+## Redefined %union name.  ##
+## ----------------------- ##
+
+AT_SETUP([[Redefined %union name]])
+
+# AT_TEST(DIRECTIVES, EXIT-STATUS, ERROR)
+# ---------------------------------------
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[$1
+%%
+exp: %empty;
+])
+
+AT_BISON_CHECK([[input.y]], [$2], [[]],
+[$3])
+])
+
+AT_TEST([[%union foo {};
+%union {};
+%union foo {};
+%define api.value.union.name foo]],
+[0],
+[[input.y:3.8-10: warning: %define variable 'api.value.union.name' redefined [-Wother]
+input.y:1.8-10:     previous definition
+input.y:4.1-32: warning: %define variable 'api.value.union.name' redefined [-Wother]
+input.y:3.8-10:     previous definition
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_TEST([[%define api.value.union.name {foo}]], [1],
+[[input.y:1.1-34: error: %define variable 'api.value.union.name' requires keyword values
+input.y:1.1-34: error: %define variable 'api.value.union.name' is not used
+]])
+
+AT_TEST([[%define api.value.union.name "foo"]], [1],
+[[input.y:1.1-34: error: %define variable 'api.value.union.name' requires keyword values
+input.y:1.1-34: error: %define variable 'api.value.union.name' is not used
+]])
+
+m4_popdef([AT_TEST])
+AT_CLEANUP
+
+
+
+
 ## -------------- ##
 ## Stray $ or @.  ##
 ## -------------- ##
 
 AT_SETUP([[Stray $ or @]])
+AT_BISON_OPTION_PUSHDEFS
 
 # 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
+[[%type <TYPE> exp
+%token <TYPE> TOK TOK2
 %destructor     { $%; @%; } <*> exp TOK;
 %initial-action { $%; @%; };
 %printer        { $%; @%; } <*> exp TOK;
+%{ $ @ %} // Should not warn.
 %%
 exp: TOK        { $%; @%; $$ = $1; };
+%%
+$ @ // Should not warn.
 ]])
 
-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_BISON_CHECK([[-Wall input.y]], 0, [],
+[[input.y:11.19: warning: stray '$' [-Wother]
+input.y:11.23: warning: stray '@' [-Wother]
+input.y:12.19: warning: stray '$' [-Wother]
+input.y:12.23: warning: stray '@' [-Wother]
+input.y:13.19: warning: stray '$' [-Wother]
+input.y:13.23: warning: stray '@' [-Wother]
+input.y:16.19: warning: stray '$' [-Wother]
+input.y:16.23: warning: stray '@' [-Wother]
 ]])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -1576,6 +2566,7 @@
 [AT_DATA([[input.y]],
 [[%type <$1(DEAD %type)> exp
 %token <$1(DEAD %token)> a
+%token b
 %initial-action
 {
   $$;
@@ -1596,13 +2587,13 @@
 };
 %%
 exp:
-  a a[last]
+  a a[name] b
   {
     $$;
     $][1;
     $<$1(DEAD action 1)>$
     $<$1(DEAD action 2)>1
-    $<$1(DEAD action 3)>last
+    $<$1(DEAD action 3)>name
     $<$1(DEAD action 4)>0
     ;
   };
@@ -1622,3 +2613,259 @@
 m4_popdef([AT_TEST])
 
 AT_CLEANUP
+
+
+##----------------------- ##
+## Deprecated directives. ##
+## ---------------------- ##
+
+AT_SETUP([[Deprecated directives]])
+
+AT_KEYWORDS([[deprec]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%default_prec
+%error_verbose
+%expect_rr 0
+%file-prefix = "foo"
+%file-prefix
+ =
+"bar"
+	%fixed-output_files
+        %fixed_output-files
+%fixed-output-files
+%name-prefix= "foo"
+%no-default_prec
+%no_default-prec
+%no_lines
+%output = "output.c"
+%pure_parser
+%token_table
+%error-verbose
+%glr-parser
+%name-prefix "bar"
+%%
+exp : '0'
+]])
+
+AT_DATA([errors-all],
+[[input.y:10.1-13: warning: deprecated directive: '%default_prec', use '%default-prec' [-Wdeprecated]
+fix-it:"input.y":{10:1-10:14}:"%default-prec"
+input.y:11.1-14: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated]
+fix-it:"input.y":{11:1-11:15}:"%define parse.error verbose"
+input.y:12.1-10: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated]
+fix-it:"input.y":{12:1-12:11}:"%expect-rr"
+input.y:13.1-14: warning: deprecated directive: '%file-prefix =', use '%file-prefix' [-Wdeprecated]
+fix-it:"input.y":{13:1-13:15}:"%file-prefix"
+input.y:14.1-16.5: warning: duplicate directive: '%file-prefix\n =' [-Wother]
+input.y:13.1-20:       previous declaration
+fix-it:"input.y":{14:1-16:6}:""
+input.y:17.9-27: warning: deprecated directive: '%fixed-output_files', use '%output "y.tab.c"' [-Wdeprecated]
+fix-it:"input.y":{17:2-17:21}:"%output \"y.tab.c\""
+input.y:18.9-27: warning: deprecated directive: '%fixed_output-files', use '%output "y.tab.c"' [-Wdeprecated]
+fix-it:"input.y":{18:9-18:28}:"%output \"y.tab.c\""
+input.y:19.1-19: warning: deprecated directive: '%fixed-output-files', use '%output "y.tab.c"' [-Wdeprecated]
+fix-it:"input.y":{19:1-19:20}:"%output \"y.tab.c\""
+input.y:20.1-19: warning: deprecated directive: '%name-prefix= "foo"', use '%define api.prefix {foo}' [-Wdeprecated]
+fix-it:"input.y":{20:1-20:20}:"%define api.prefix {foo}"
+input.y:21.1-16: warning: deprecated directive: '%no-default_prec', use '%no-default-prec' [-Wdeprecated]
+fix-it:"input.y":{21:1-21:17}:"%no-default-prec"
+input.y:22.1-16: warning: deprecated directive: '%no_default-prec', use '%no-default-prec' [-Wdeprecated]
+fix-it:"input.y":{22:1-22:17}:"%no-default-prec"
+input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wdeprecated]
+fix-it:"input.y":{23:1-23:10}:"%no-lines"
+input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated]
+fix-it:"input.y":{24:1-24:10}:"%output"
+input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%define api.pure' [-Wdeprecated]
+fix-it:"input.y":{25:1-25:13}:"%define api.pure"
+input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated]
+fix-it:"input.y":{26:1-26:13}:"%token-table"
+input.y:27.1-14: warning: %define variable 'parse.error' redefined [-Wother]
+input.y:11.1-14:     previous definition
+fix-it:"input.y":{27:1-27:15}:""
+input.y:29.1-18: warning: duplicate directive: '%name-prefix "bar"' [-Wother]
+input.y:13.1-20:     previous declaration
+fix-it:"input.y":{29:1-29:19}:""
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_CHECK([cp errors-all experr])
+AT_BISON_CHECK([[-ffixit input.y]], [], [], [experr])
+
+AT_CHECK([[sed -e '/^fix-it:/d' errors-all >experr]])
+AT_BISON_CHECK([[input.y]], [], [], [experr])
+
+
+# Update the input file.  Make sure we generated nothing.
+AT_CHECK([rm -f output.c])
+AT_CHECK([cp input.y input.y.orig])
+AT_CHECK([sed -e '/fix-it/d' <errors-all >experr])
+AT_CHECK([echo "bison: file 'input.y' was updated (backup: 'input.y~')" >>experr])
+AT_BISON_CHECK([[--update input.y]], [], [[]], [experr])
+
+# Check the backup.
+AT_CHECK([diff input.y.orig input.y~])
+
+# Check we did not generate any file.
+AT_CHECK([test ! -f output.c])
+
+# Check the update.
+AT_CHECK([sed -e '1,8d' input.y], [],
+[[
+%default-prec
+%define parse.error verbose
+%expect-rr 0
+%file-prefix "foo"
+	%output "y.tab.c"
+        %output "y.tab.c"
+%output "y.tab.c"
+%define api.prefix {foo}
+%no-default-prec
+%no-default-prec
+%no-lines
+%output "output.c"
+%define api.pure
+%token-table
+%glr-parser
+%%
+exp : '0'
+]])
+
+AT_BISON_CHECK([[input.y]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ---------------------------- ##
+## Unput's effect on locations. ##
+## ---------------------------- ##
+
+# When the scanner detects a deprecated construct, it unputs the
+# correct version, but it should *not* have any impact on the scanner
+# cursor. If it does, the locations of directives on the same line
+# become erroneous.
+
+AT_SETUP([[Unput's effect on locations]])
+
+AT_KEYWORDS([[deprec]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%glr-parser
+%expect_rr 42 %expect_rr 42
+              %expect_rr 42
+%error_verbose %error_verbose
+               %error_verbose
+%% exp: '0'
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[input.y:11.1-10: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated]
+input.y:11.15-24: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated]
+input.y:12.15-24: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated]
+input.y:13.1-14: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated]
+input.y:13.16-29: warning: %define variable 'parse.error' redefined [-Wother]
+input.y:13.1-14:      previous definition
+input.y:14.16-29: warning: %define variable 'parse.error' redefined [-Wother]
+input.y:13.16-29:     previous definition
+input.y: error: reduce/reduce conflicts: 0 found, 42 expected
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## -------------------------- ##
+## Non-deprecated directives. ##
+## -------------------------- ##
+
+AT_SETUP([[Non-deprecated directives]])
+
+AT_KEYWORDS([[deprec]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[
+%default-prec
+%define parse.error verbose
+%expect-rr 42
+%file-prefix "foo"
+%file-prefix
+"bar"
+%no-default-prec
+%no-lines
+%output "foo"
+%token-table
+%% exp : '0'
+]])
+
+AT_BISON_CHECK([[input.y]], [[0]], [[]],
+[[input.y:14.1-15.5: warning: duplicate directive: '%file-prefix' [-Wother]
+input.y:13.1-18:       previous declaration
+input.y: warning: %expect-rr applies only to GLR parsers [-Wother]
+input.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## -------------------- ##
+## Cannot type action.  ##
+## -------------------- ##
+
+AT_SETUP([[Cannot type action]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%%
+exp: <int> {}
+]])
+
+AT_BISON_CHECK([[-fcaret input.y]], [[0]], [[]],
+[[input.y:10.6-13: warning: only midrule actions can be typed: int [-Wother]
+   10 | exp: <int> {}
+      |      ^~~~~~~~
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## -------------------------------------- ##
+## Character literals and api.token.raw.  ##
+## -------------------------------------- ##
+
+AT_SETUP([[Character literals and api.token.raw]])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA_GRAMMAR([[input.y]],
+[[%define api.token.raw
+%token 'a'
+%%
+exp: 'b' "c" {}
+]])
+
+AT_BISON_CHECK([[-fcaret input.y]], [[1]], [[]],
+[[input.y:10.8-10: error: character literals cannot be used together with api.token.raw
+   10 | %token 'a'
+      |        ^~~
+input.y:9.1-21:      definition of api.token.raw
+    9 | %define api.token.raw
+      | ^~~~~~~~~~~~~~~~~~~~~
+input.y:12.6-8: error: character literals cannot be used together with api.token.raw
+   12 | exp: 'b' "c" {}
+      |      ^~~
+input.y:9.1-21:     definition of api.token.raw
+    9 | %define api.token.raw
+      | ^~~~~~~~~~~~~~~~~~~~~
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
diff --git a/tests/java.at b/tests/java.at
index db3f500..2fbfe6d 100644
--- a/tests/java.at
+++ b/tests/java.at
@@ -1,6 +1,6 @@
 # Java tests for simple calculator.           -*- Autotest -*-
 
-# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007-2015, 2018-2019 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
@@ -19,25 +19,49 @@
 
 
 # ------------------------- #
+# Java invalid directives.  #
+# ------------------------- #
+
+AT_SETUP([Java invalid directives])
+
+AT_DATA([[YYParser.y]], [
+%language "Java"
+%defines
+%destructor { /* Nothing. */ } exp
+%%
+exp:
+])
+
+AT_BISON_CHECK([[-fcaret YYParser.y]], [1], [],
+[[YYParser.y: error: %defines does not make sense in Java
+YYParser.y:4.13-30: error: %destructor does not make sense in Java
+    4 | %destructor { /* Nothing. */ } exp
+      |             ^~~~~~~~~~~~~~~~~~
+]])
+
+AT_CLEANUP
+
+
+# ------------------------- #
 # 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
+# ----------------------------------------------------
+# 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],
+AT_DATA_GRAMMAR([Calc.y],
 [[/* Infix notation calculator--calc */
 %language "Java"
-%name-prefix "Calc"
-%define parser_class_name "Calc"
+%define api.prefix {Calc}
+%define api.parser.class {Calc}
 %define public
 
 ]$4[
@@ -54,11 +78,11 @@
 %token <Integer> NUM "number"
 %type  <Integer> exp
 
-%nonassoc '=' /* comparison            */
+%nonassoc '='       /* comparison            */
 %left '-' '+'
 %left '*' '/'
-%left NEG     /* negation--unary minus */
-%right '^'    /* exponentiation        */
+%precedence NEG     /* negation--unary minus */
+%right '^'          /* exponentiation        */
 
 /* Grammar follows */
 %%
@@ -103,17 +127,17 @@
 ]])[
   StreamTokenizer st;
 
-  public ]AT_LEXPARAM_IF([[YYLexer]], [[CalcLexer]]) (InputStream is)
+  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);
+    st.whitespaceChars ('\t', '\t');
+    st.whitespaceChars (' ', ' ');
+    st.wordChars ('0', '9');
   }
 
-AT_LOCATION_IF([[
+]AT_LOCATION_IF([[
   Position yypos = new Position (1, 0);
 
   public Position getStartPos() {
@@ -133,80 +157,40 @@
   }
 
   public int yylex () throws IOException {
-    int ttype = st.nextToken ();
-    ]AT_LOCATION_IF([[yypos = new Position (yypos.lineno (),
-                                            yypos.token () + 1);]])[
+    int ttype = st.nextToken ();]AT_LOCATION_IF([[
+    yypos = new Position (yypos.lineno (), yypos.token () + 1);]])[
     if (ttype == st.TT_EOF)
-      return Calc.EOF;
+      return EOF;
 
     else if (ttype == st.TT_EOL)
-      {
-        ]AT_LOCATION_IF([[yypos = new Position (yypos.lineno () + 1, 0);]])[
+      {]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;
+        return 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_JAVA_POSITION_DEFINE[
 ]])
+
 AT_BISON_OPTION_POPDEFS
 ])# _AT_DATA_JAVA_CALC_Y
 
 
 # AT_DATA_CALC_Y([BISON-OPTIONS])
 # -------------------------------
-# Produce `calc.y'.
+# Produce 'calc.y'.
 m4_define([AT_DATA_JAVA_CALC_Y],
 [_AT_DATA_JAVA_CALC_Y($[1], $[2], $[3], [$1])
 ])
@@ -215,7 +199,7 @@
 # _AT_CHECK_JAVA_CALC_ERROR(BISON-OPTIONS, INPUT,
 #                           [VERBOSE-AND-LOCATED-ERROR-MESSAGE])
 # --------------------------------------------------------------
-# Run `calc' on INPUT, and expect a `syntax 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.
@@ -240,8 +224,8 @@
 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], [],
+# 3. If error-verbose is not used, strip the', unexpected....' part.
+m4_bmatch([$1], [%define parse.error verbose], [],
 [[sed 's/syntax error, .*$/syntax error/' expout >at-expout
 mv at-expout expout]])
 # 4. Check
@@ -249,8 +233,8 @@
 ])
 
 # _AT_CHECK_JAVA_CALC([BISON-DIRECTIVES], [BISON-CODE])
-# -----------------------------------------------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# -----------------------------------------------------
+# 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.
@@ -263,10 +247,10 @@
 $2
 }])
 
-AT_BISON_CHECK([-o Calc.java Calc.y])
+AT_BISON_CHECK([-Wno-deprecated -o Calc.java Calc.y])
 AT_JAVA_COMPILE([Calc.java])
 
-# Test the priorities.
+# Test the precedences.
 AT_DATA([[input]],
 [[1 + 2 * 3 = 7
 1 + 2 * -3 = -5
@@ -310,7 +294,7 @@
 #   - (* * *): nothing to pop, a lot to discard
 #   - (1 + 2 * *): some to pop and discard
 #
-# - test the action associated to `error'
+# - 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
@@ -341,15 +325,15 @@
 
 
 # AT_CHECK_JAVA_CALC([BISON-DIRECTIVES])
-# --------------------------------------------------------
-# Start a testing chunk which compiles `calc' grammar with
+# --------------------------------------
+# 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.
+# Run the test with and without %define parse.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([%define parse.error verbose $1], [$2])
 _AT_CHECK_JAVA_CALC([%locations $1], [$2])
-_AT_CHECK_JAVA_CALC([%error-verbose %locations $1], [$2])
+_AT_CHECK_JAVA_CALC([%define parse.error verbose %locations $1], [$2])
 ])# AT_CHECK_JAVA_CALC
 
 
@@ -384,7 +368,7 @@
 
 # AT_CHECK_JAVA_MINIMAL([DIRECTIVES], [PARSER_ACTION], [POSITION_CLASS])
 # ----------------------------------------------------------------------
-# Check that a mininal parser with DIRECTIVES compiles in Java.
+# Check that a minimal parser with DIRECTIVES compiles in Java.
 # Put the Java code in YYParser.java.
 m4_define([AT_CHECK_JAVA_MINIMAL],
 [
@@ -392,25 +376,26 @@
 %language "Java"
 %locations
 %debug
-%error-verbose
+%define parse.error verbose
 %token-table
+%token END "end"
 $1
 %%
-start: "end" {$2};
+start: END {$2};
 %%
 class m4_default([$3], [Position]) {}
 ])
-AT_BISON_CHECK([[YYParser.y]])
+AT_BISON_CHECK([[-Wno-deprecated 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],
+#       [3:YYLEX_ACTION], [4:LEXER_BODY], [5:PARSER_ACTION], [6:VALUE_TYPE],
 #       [7:POSITION_TYPE], [8:LOCATION_TYPE])
 # ---------------------------------------------------------------------
-# Check that a mininal parser with DIRECTIVES and a "%code lexer".
+# Check that a minimal 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],
@@ -443,14 +428,13 @@
 # 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])
-])
-])
+[AT_CHECK([grep -c '^$1$' YYParser.java], [ignore], [m4_default([$2], [1])
+])])
 
 
-# ----------------------------------- #
-# Java parser class and package names #
-# ----------------------------------- #
+# ------------------------------------- #
+# Java parser class and package names.  #
+# ------------------------------------- #
 
 AT_SETUP([Java parser class and package names])
 
@@ -460,18 +444,24 @@
 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_MINIMAL([[%define api.prefix {Prefix}]])
+AT_CHECK_JAVA_GREP([[class PrefixParser]])
+
+AT_CHECK_JAVA_MINIMAL([[%define api.token.prefix {TOK_}]])
+AT_CHECK_JAVA_GREP([[.*TOK_END.*]])
+
+AT_CHECK_JAVA_MINIMAL([[%define api.parser.class {ParserClassName}]])
 AT_CHECK_JAVA_GREP([[class ParserClassName]])
 
-AT_CHECK_JAVA_MINIMAL([[%define package "user_java_package"]])
+AT_CHECK_JAVA_MINIMAL([[%define package {user_java_package}]])
 AT_CHECK_JAVA_GREP([[package user_java_package;]])
 
 AT_CLEANUP
 
 
-# --------------------------- #
-# Java parser class modifiers #
-# --------------------------- #
+# ----------------------------- #
+# Java parser class modifiers.  #
+# ----------------------------- #
 
 AT_SETUP([Java parser class modifiers])
 
@@ -524,6 +514,12 @@
 %define strictfp]])
 AT_CHECK_JAVA_GREP([[public final strictfp class YYParser]])
 
+# FIXME: Can't do a Java compile because javacomp.sh is configured for 1.3
+AT_CHECK_JAVA_MINIMAL([[
+%define annotations {/*@Deprecated @SuppressWarnings("unchecked") @SuppressWarnings({"unchecked", "deprecation"}) @SuppressWarnings(value={"unchecked", "deprecation"})*/}
+%define public]])
+AT_CHECK_JAVA_GREP([[/\*@Deprecated @SuppressWarnings("unchecked") @SuppressWarnings({"unchecked", "deprecation"}) @SuppressWarnings(value={"unchecked", "deprecation"})\*/ public class YYParser]])
+
 AT_CLEANUP
 
 
@@ -533,15 +529,15 @@
 
 AT_SETUP([Java parser class extends and implements])
 
-AT_CHECK_JAVA_MINIMAL([[%define extends "Thread"]])
+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_MINIMAL([[%define implements {Cloneable}]])
 AT_CHECK_JAVA_GREP([[class YYParser implements Cloneable]])
 
 AT_CHECK_JAVA_MINIMAL([[
-%define extends "Thread"
-%define implements "Cloneable"]])
+%define extends {Thread}
+%define implements {Cloneable}]])
 AT_CHECK_JAVA_GREP([[class YYParser extends Thread implements Cloneable]])
 
 AT_CLEANUP
@@ -554,54 +550,54 @@
 AT_SETUP([Java %parse-param and %lex-param])
 
 AT_CHECK_JAVA_MINIMAL([])
-AT_CHECK_JAVA_GREP([[ *public YYParser (Lexer yylexer) {]])
+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_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_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_GREP([[ *public YYParser () *]])
+AT_CHECK_JAVA_GREP([[ *protected YYParser (Lexer yylexer) *]])
 
 AT_CHECK_JAVA_MINIMAL_W_LEXER([[%parse-param {int parse_param1}]],
-	[], [[return EOF;]])
+    [], [[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_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;]])
+    [], [[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_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) {]])
+    [], [[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) {]])
+    [], [[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([[
@@ -609,14 +605,14 @@
 %parse-param {long parse_param2}
 %lex-param {char lex_param1}
 %lex-param {short lex_param2}]],
-	[], [[return EOF;]], [[YYLexer (char lex_param1, 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([[ *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_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
 
@@ -627,74 +623,74 @@
 
 AT_SETUP([Java throws specifications])
 
-# %define throws	- 0 1 2
-# %define lex-throws	- 0 1 2
-# %code lexer		  0 1
+# %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"]])])
+        -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]])])
+        -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();]])])
+        -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"]])])
+        -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]])])
+        -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]])])
+        -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_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();}]])])
+        -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();]])])
+        -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_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_CHECK_JAVA_MINIMAL_W_LEXER([
 AT_JT_throws_define
 AT_JT_lex_throws_define
 AT_JT_initial_action],
@@ -710,27 +706,54 @@
 AT_CLEANUP
 
 
-# --------------------------------------------- #
-# Java stype, position_class and location_class #
-# --------------------------------------------- #
+# ------------------------------------- #
+# Java constructor init and init_throws #
+# ------------------------------------- #
 
-AT_SETUP([Java stype, position_class and location_class])
+AT_SETUP([Java constructor init and init_throws])
+
+m4_pushdef([AT_Witness],
+[super("Test Thread"); if (true) throw new InterruptedException();])
 
 AT_CHECK_JAVA_MINIMAL([[
-%define stype "java.awt.Color"
+%define extends {Thread}
+%code init { ]AT_Witness[ }
+%define init_throws {InterruptedException}
+%lex-param {int lex_param}]])
+AT_CHECK([[grep ']AT_Witness[' YYParser.java]], 0, [ignore])
+
+AT_CHECK_JAVA_MINIMAL_W_LEXER([[
+%define extends {Thread}
+%code init { ]AT_Witness[ }
+%define init_throws {InterruptedException}]], [], [[return EOF;]])
+AT_CHECK([[grep ']AT_Witness[' YYParser.java]], 0, [ignore])
+
+m4_popdef([AT_Witness])
+
+AT_CLEANUP
+
+
+# ------------------------------------------ #
+# Java value, position, and location types.  #
+# ------------------------------------------ #
+
+AT_SETUP([Java value, position, and location types])
+
+AT_CHECK_JAVA_MINIMAL([[
+%define api.value.type {java.awt.Color}
 %type<java.awt.Color> start;
-%define api.location.type "MyLoc"
-%define api.position.type "MyPos"
+%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"
+%define api.value.type {java.awt.Color}
 %type<java.awt.Color> start;
-%define api.location.type "MyLoc"
-%define api.position.type "MyPos"
+%define api.location.type {MyLoc}
+%define api.position.type {MyPos}
 %code { class MyPos {} }]], [], [[return EOF;]], [],
 [[$$ = $<java.awt.Color>1;]],
 [[java.awt.Color]], [[MyPos]], [[MyLoc]])
diff --git a/tests/javapush.at b/tests/javapush.at
new file mode 100644
index 0000000..0271296
--- /dev/null
+++ b/tests/javapush.at
@@ -0,0 +1,867 @@
+# Checking Java Push Parsing.                            -*- Autotest -*-
+
+# Copyright (C) 2013-2015, 2018-2019 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 Java push parser tests are intended primarily
+# to verify that the sequence of states that the parser
+# traverses is the same as a pull parser would traverse.
+
+##################################################
+# Provide a way to generate data with and without push parsing
+# so  it is possible to capture the output for comparison
+# (except the "trivial" tests).
+# Use "both" rather than "push" so we can also set it to "pull" to
+# get the "experr" data.
+
+m4_define([PUSHPULLFLAG],[-Dapi.push-pull=both])
+
+# AT_CHECK_JAVA_GREP(FILE, [LINE], [COUNT=1])
+# -------------------------------------------
+# Check that FILE contains exactly COUNT lines matching ^LINE$
+# with grep.  Unquoted so that COUNT can be a shell expression.
+m4_define([AT_CHECK_JAVA_GREP],
+[AT_CHECK_UNQUOTED([grep -c '^$2$' $1], [ignore], [m4_default([$3], [1])
+])])
+
+##################################################
+
+AT_BANNER([[Java Push Parsing Tests]])
+
+# Define a single copy of the trivial parser grammar.
+# This is missing main(), so two versions
+# are instantiated with different main() procedures.
+m4_define([AT_TRIVIAL_GRAMMAR],
+[[
+%define api.parser.class {YYParser}
+%define parse.error verbose
+%define parse.trace
+
+%code imports {
+import java.io.*;
+import java.util.*;
+}
+
+%%
+
+start: 'a' 'b' 'c' ;
+
+%%
+]])
+
+# Define comon code across to be included in
+# class Main for the trivial parser tests.
+m4_define([AT_TRIVIAL_COMMON],[[
+  static class YYerror implements YYParser.Lexer
+  {
+    public Object getLVal() {return null;}
+    public int yylex () throws java.io.IOException { return 0; }
+    public void yyerror (String msg) { System.err.println(msg); }
+  }
+
+  static YYParser parser = null;
+  static YYerror yyerror = null;
+  static int teststate = -1;
+
+  static void setup()
+    throws IOException
+  {
+      yyerror = new YYerror();
+      parser = new YYParser(yyerror);
+      parser.setDebugLevel(1);
+      teststate = -1;
+  }
+
+  static String[] teststatename
+    = new String[]{"YYACCEPT","YYABORT","YYERROR","UNKNOWN","YYPUSH_MORE"};
+
+  static void check(int teststate, int expected, String msg)
+  {
+    System.err.println("teststate="+teststatename[teststate]
+                       +"; expected="+teststatename[expected]);
+    if (teststate != expected)
+        {
+            System.err.println("unexpected state: "+msg);
+            System.exit(1);
+        }
+  }
+]])
+
+m4_define([AT_TRIVIAL_PARSER],[[
+  ]AT_TRIVIAL_GRAMMAR[
+
+  public class Main
+  {
+
+  ]AT_TRIVIAL_COMMON[
+
+  static public void main (String[] args)
+    throws IOException
+  {
+      setup();
+
+      teststate = parser.push_parse('a', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('a', null)");
+
+      setup();
+
+      teststate = parser.push_parse('a', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('a', null)");
+      teststate = parser.push_parse('b', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('b', null)");
+      teststate = parser.push_parse('c', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('c', null)");
+      teststate = parser.push_parse('\0', null);
+      check(teststate,YYParser.YYACCEPT,"push_parse('\\0', null)");
+
+      /* Reuse the parser instance and cause a failure */
+      teststate = parser.push_parse('b', null);
+      check(teststate,YYParser.YYABORT,"push_parse('b', null)");
+
+      System.exit(0);
+  }
+
+}
+]])
+
+m4_define([AT_TRIVIAL_PARSER_INITIAL_ACTION],[[
+  ]AT_TRIVIAL_GRAMMAR[
+
+  public class Main
+  {
+
+  ]AT_TRIVIAL_COMMON[
+
+  static public void main (String[] args)
+    throws IOException
+  {
+      setup();
+
+      teststate = parser.push_parse('a', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('a', null)");
+      teststate = parser.push_parse('b', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('b', null)");
+      teststate = parser.push_parse('c', null);
+      check(teststate,YYParser.YYPUSH_MORE,"push_parse('c', null)");
+      teststate = parser.push_parse('\0', null);
+      check(teststate,YYParser.YYACCEPT,"push_parse('\\0', null)");
+
+      System.exit(0);
+  }
+
+}
+]])
+
+## ----------------------------------------------------- ##
+## Trivial Push Parser with api.push-pull verification.  ##
+## ----------------------------------------------------- ##
+
+AT_SETUP([Trivial Push Parser with api.push-pull verification])
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA([[input.y]],
+[[%language "Java"
+]AT_TRIVIAL_PARSER[
+]])
+
+# Verify that the proper procedure(s) are generated for each case.
+AT_BISON_CHECK([[-Dapi.push-pull=pull -o Main.java input.y]])
+AT_CHECK_JAVA_GREP([[Main.java]],
+                   [[.*public boolean parse ().*]],
+                   [1])
+# If BISON_USE_PUSH_FOR_PULL is set, then we have one occurrence of
+# this function, otherwise it should not be there.
+AT_CHECK_JAVA_GREP([[Main.java]],
+        [[.*public int push_parse (int yylextoken, Object yylexval).*]],
+        [${BISON_USE_PUSH_FOR_PULL-0}])
+
+AT_BISON_CHECK([[-Dapi.push-pull=both -o Main.java input.y]])
+AT_CHECK_JAVA_GREP([[Main.java]],
+                   [[.*public boolean parse ().*]],
+                   [1])
+AT_CHECK_JAVA_GREP([[Main.java]],
+        [[.*public int push_parse (int yylextoken, Object yylexval).*]],
+        [1])
+
+AT_BISON_CHECK([[-Dapi.push-pull=push -o Main.java input.y]])
+AT_CHECK_JAVA_GREP([[Main.java]],
+                   [[.*public boolean parse ().*]],
+                   [0])
+AT_CHECK_JAVA_GREP([[Main.java]],
+        [[.*public int push_parse (int yylextoken, Object yylexval).*]],
+        [1])
+
+AT_JAVA_COMPILE([[Main.java]])
+AT_JAVA_PARSER_CHECK([Main], 0, [], [stderr-nolog])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+## ------------------------------------------ ##
+## Trivial Push Parser with %initial-action.  ##
+## ------------------------------------------ ##
+
+AT_SETUP([Trivial Push Parser with %initial-action])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[input.y]],
+[[%language "Java"
+%initial-action {
+System.err.println("Initial action invoked");
+}
+]AT_TRIVIAL_PARSER_INITIAL_ACTION[
+]])
+AT_BISON_OPTION_POPDEFS
+AT_BISON_CHECK([[-Dapi.push-pull=push -o Main.java input.y]])
+AT_CHECK_JAVA_GREP([[Main.java]],
+  [[System.err.println("Initial action invoked");]])
+AT_JAVA_COMPILE([[Main.java]])
+AT_JAVA_PARSER_CHECK([Main], 0, [], [stderr-nolog])
+# Verify that initial action is called exactly once.
+AT_CHECK_JAVA_GREP(
+        [[stderr]],
+        [[Initial action invoked]],
+        [1])
+AT_CLEANUP
+
+# Define a single copy of the Calculator grammar.
+m4_define([AT_CALC_BODY],[
+%code imports {
+  import java.io.*;
+}
+
+%code {
+  static StringReader
+  getinput(String filename) throws IOException
+  {
+    // Yes, there are better alternatives to StringBuffer.  But we
+    // don't really care about performances here, while portability
+    // to older Java matters.
+    StringBuffer buf = new StringBuffer();
+    FileReader file = new FileReader(filename);
+    int c;
+    while (0 < (c = file.read()))
+      buf.append((char)c);
+    file.close();
+    return new StringReader(buf.toString());
+  }
+}
+
+/* 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'    { System.out.println("total = "+$[]1); }
+| 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;}
+;
+])
+
+
+
+## ------------------------------------- ##
+## Calc parser with api.push-pull both.  ##
+## ------------------------------------- ##
+
+
+# Test that the states transitioned by the push parser are the
+# same as for the pull parser.  This test is assumed to work
+# if it produces the same partial trace of stack states as is
+# produced when using pull parsing.  The output is verbose,
+# but seems essential for verifying push parsing.
+
+AT_SETUP([Calc parser with api.push-pull both])
+AT_BISON_OPTION_PUSHDEFS
+
+# Define the calculator input.
+# Warning: if you changes the input file
+# then the locations test file position numbers
+# may be incorrect and you will have
+# to modify that file as well.
+
+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
+]])
+
+# Compose pieces to build the actual .y file.
+AT_DATA([Calc.y],
+[[/* Infix notation calculator--calc */
+%language "Java"
+
+%define api.parser.class {Calc}
+%define parse.trace
+
+%code {
+  static class UserLexer implements Calc.Lexer
+  {
+    StreamTokenizer st;
+    StringReader rdr;
+
+    public UserLexer(StringReader reader)
+    {
+      rdr = reader;
+      st = new StreamTokenizer(rdr);
+      st.resetSyntax();
+      st.eolIsSignificant(true);
+      st.whitespaceChars('\t', '\t');
+      st.whitespaceChars(' ', ' ');
+      st.wordChars('0', '9');
+    }
+
+    Integer yylval;
+
+    public Object getLVal() { return yylval; }
+
+    public void yyerror(String msg) { System.err.println(msg); }
+
+    public int yylex () throws IOException
+    {
+      switch (st.nextToken()) {
+      case StreamTokenizer.TT_EOF: return EOF;
+      case StreamTokenizer.TT_EOL: return (int) '\n';
+      case StreamTokenizer.TT_WORD:
+          yylval = new Integer (st.sval);
+          return NUM;
+      default: return st.ttype;
+      }
+    }
+  }
+}
+
+%code {
+  public static void main (String[] args)
+        throws IOException
+  {
+      StringReader reader = getinput(args[0]);
+      UserLexer lexer = new UserLexer(reader);
+      Calc calc = new Calc(lexer);
+      calc.setDebugLevel(1);
+      calc.parse();
+  }//main
+}
+
+]AT_CALC_BODY[
+
+]])
+
+# This data was captured from running a pull parser.
+AT_DATA([[expout]],[[Stack now 0
+Stack now 0 2
+Stack now 0 9
+Stack now 0 9 19
+Stack now 0 9 19 2
+Stack now 0 9 19 28
+Stack now 0 9 19 28 20
+Stack now 0 9 19 28 20 2
+Stack now 0 9 19 28 20 29
+Stack now 0 9 19 28
+Stack now 0 9
+Stack now 0 9 17
+Stack now 0 9 17 2
+Stack now 0 9 17 26
+Stack now 0 9
+Stack now 0 9 23
+Stack now 0 8
+Stack now 0 7
+Stack now 0 7 2
+Stack now 0 7 9
+Stack now 0 7 9 19
+Stack now 0 7 9 19 2
+Stack now 0 7 9 19 28
+Stack now 0 7 9 19 28 20
+Stack now 0 7 9 19 28 20 3
+Stack now 0 7 9 19 28 20 3 2
+Stack now 0 7 9 19 28 20 3 12
+Stack now 0 7 9 19 28 20 29
+Stack now 0 7 9 19 28
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 3
+Stack now 0 7 9 17 3 2
+Stack now 0 7 9 17 3 12
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 4
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 3
+Stack now 0 7 3 2
+Stack now 0 7 3 12
+Stack now 0 7 3 12 22
+Stack now 0 7 3 12 22 2
+Stack now 0 7 3 12 22 31
+Stack now 0 7 3 12
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 3
+Stack now 0 7 9 17 3 2
+Stack now 0 7 9 17 3 12
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 5
+Stack now 0 7 5 3
+Stack now 0 7 5 3 2
+Stack now 0 7 5 3 12
+Stack now 0 7 5 14
+Stack now 0 7 5 14 25
+Stack now 0 7 9
+Stack now 0 7 9 22
+Stack now 0 7 9 22 2
+Stack now 0 7 9 22 31
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 2
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 4
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 3
+Stack now 0 7 3 3
+Stack now 0 7 3 3 3
+Stack now 0 7 3 3 3 2
+Stack now 0 7 3 3 3 12
+Stack now 0 7 3 3 12
+Stack now 0 7 3 12
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 3
+Stack now 0 7 9 17 3 2
+Stack now 0 7 9 17 3 12
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 4
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 2
+Stack now 0 7 9
+Stack now 0 7 9 18
+Stack now 0 7 9 18 2
+Stack now 0 7 9 18 27
+Stack now 0 7 9
+Stack now 0 7 9 18
+Stack now 0 7 9 18 2
+Stack now 0 7 9 18 27
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 3
+Stack now 0 7 9 17 3 2
+Stack now 0 7 9 17 3 12
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 2
+Stack now 0 7 9
+Stack now 0 7 9 18
+Stack now 0 7 9 18 5
+Stack now 0 7 9 18 5 2
+Stack now 0 7 9 18 5 14
+Stack now 0 7 9 18 5 14 18
+Stack now 0 7 9 18 5 14 18 2
+Stack now 0 7 9 18 5 14 18 27
+Stack now 0 7 9 18 5 14
+Stack now 0 7 9 18 5 14 25
+Stack now 0 7 9 18 27
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 2
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 4
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 2
+Stack now 0 7 9
+Stack now 0 7 9 22
+Stack now 0 7 9 22 2
+Stack now 0 7 9 22 31
+Stack now 0 7 9 22 31 22
+Stack now 0 7 9 22 31 22 2
+Stack now 0 7 9 22 31 22 31
+Stack now 0 7 9 22 31
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 2
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 5
+Stack now 0 7 5 2
+Stack now 0 7 5 14
+Stack now 0 7 5 14 22
+Stack now 0 7 5 14 22 2
+Stack now 0 7 5 14 22 31
+Stack now 0 7 5 14
+Stack now 0 7 5 14 25
+Stack now 0 7 9
+Stack now 0 7 9 22
+Stack now 0 7 9 22 2
+Stack now 0 7 9 22 31
+Stack now 0 7 9
+Stack now 0 7 9 17
+Stack now 0 7 9 17 2
+Stack now 0 7 9 17 26
+Stack now 0 7 9
+Stack now 0 7 9 23
+Stack now 0 7 16
+Stack now 0 7
+Stack now 0 7 15
+]])
+
+AT_BISON_CHECK([PUSHPULLFLAG [-o Calc.java Calc.y]])
+
+AT_JAVA_COMPILE([[Calc.java]])
+# Verify that this is a push parser.
+AT_CHECK_JAVA_GREP([[Calc.java]],
+                   [[.*public void push_parse_initialize().*]])
+# Capture stderr output for comparison purposes.
+AT_JAVA_PARSER_CHECK([Calc input], 0, [ignore-nolog], [stderr-nolog])
+# Extract the "Stack Now" lines from the error output,
+# send them to stdout (via the sed command) and compare to expout.
+# NOTE: because the target is "expout", this macro automatically
+# compares the output of the sed command with the contents of
+# the file "expout" (defined above).
+AT_CHECK([[sed -e '/^Stack now.*$/p' -e d ./stderr]],
+         [ignore], [expout], [ignore-nolog])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## ---------------------------------------------------------------- ##
+## Calc parser with %locations %code lexer and api.push-pull both.  ##
+## ---------------------------------------------------------------- ##
+
+
+# This test looks for location reporting by looking
+# at the lexer output with locations enabled.
+# It defines a lexer that reports location info.
+AT_SETUP([Calc parser with %locations %code lexer and api.push-pull both])
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA([Calc.y],
+[[/* Infix notation calculator--calc.  */
+%language "Java"
+
+%define api.parser.class {Calc}
+%define parse.trace
+%lex-param { Reader rdr }
+%locations
+
+%code imports {
+  import java.io.*;
+}
+
+%code lexer {
+  StreamTokenizer st;
+  Integer yylval;
+
+  public YYLexer(Reader rdr)
+  {
+    st = new StreamTokenizer(rdr);
+    st.resetSyntax();
+    st.eolIsSignificant(true);
+    st.whitespaceChars('\t', '\t');
+    st.whitespaceChars(' ', ' ');
+    st.wordChars('0', '9');
+  }
+
+  Position yypos = new Position (1, 0);
+
+  public Position getStartPos() { return yypos; }
+
+  public Position getEndPos() { return yypos; }
+
+  public Object getLVal() { return yylval; }
+
+  public void yyerror(Location loc, String msg)
+  {
+    System.err.println(loc+":"+msg);
+  }
+
+  public int yylex () throws IOException
+  {
+    yypos = new Position (yypos.lineno (),yypos.token () + 1);
+    switch (st.nextToken()) {
+    case StreamTokenizer.TT_EOF:
+        return EOF;
+    case StreamTokenizer.TT_EOL:
+        yypos = new Position (yypos.lineno () + 1, 0);
+        return (int) '\n';
+    case StreamTokenizer.TT_WORD:
+        yylval = new Integer (st.sval);
+        return NUM;
+    default:
+      return st.ttype;
+    }
+  }
+}
+
+%code { ]AT_JAVA_POSITION_DEFINE[ }
+
+%code {
+  public static void main (String[] args)
+          throws IOException
+  {
+    StringReader reader = getinput(args[0]);
+    Calc calc = new Calc(reader);
+    calc.setDebugLevel(1);
+    calc.parse();
+  }
+}
+
+]AT_CALC_BODY[
+
+]])
+
+# Define the expected calculator output.
+# This should match the output from a pull parser.
+AT_DATA([output],[[total = 7
+total = -5
+total = -1
+total = 1
+total = -1
+total = -4
+total = 2
+total = 256
+total = 64
+]])
+
+AT_DATA([locations],[[Next token is token "number" (1.1: 1)
+Next token is token '+' (1.2: 1)
+Next token is token "number" (1.3: 2)
+Next token is token '*' (1.4: 2)
+Next token is token "number" (1.5: 3)
+Next token is token '=' (1.6: 3)
+Next token is token '=' (1.6: 3)
+Next token is token '=' (1.6: 3)
+Next token is token "number" (1.7: 7)
+Next token is token '\n' (2.0: 7)
+Next token is token '\n' (2.0: 7)
+Next token is token "number" (2.1: 1)
+Next token is token '+' (2.2: 1)
+Next token is token "number" (2.3: 2)
+Next token is token '*' (2.4: 2)
+Next token is token '-' (2.5: 2)
+Next token is token "number" (2.6: 3)
+Next token is token '=' (2.7: 3)
+Next token is token '=' (2.7: 3)
+Next token is token '=' (2.7: 3)
+Next token is token '=' (2.7: 3)
+Next token is token '-' (2.8: 3)
+Next token is token "number" (2.9: 5)
+Next token is token '\n' (3.0: 5)
+Next token is token '\n' (3.0: 5)
+Next token is token '\n' (3.0: 5)
+Next token is token '\n' (4.0: 5)
+Next token is token '-' (4.1: 5)
+Next token is token "number" (4.2: 1)
+Next token is token '^' (4.3: 1)
+Next token is token "number" (4.4: 2)
+Next token is token '=' (4.5: 2)
+Next token is token '=' (4.5: 2)
+Next token is token '=' (4.5: 2)
+Next token is token '-' (4.6: 2)
+Next token is token "number" (4.7: 1)
+Next token is token '\n' (5.0: 1)
+Next token is token '\n' (5.0: 1)
+Next token is token '\n' (5.0: 1)
+Next token is token '(' (5.1: 1)
+Next token is token '-' (5.2: 1)
+Next token is token "number" (5.3: 1)
+Next token is token ')' (5.4: 1)
+Next token is token ')' (5.4: 1)
+Next token is token '^' (5.5: 1)
+Next token is token "number" (5.6: 2)
+Next token is token '=' (5.7: 2)
+Next token is token '=' (5.7: 2)
+Next token is token "number" (5.8: 1)
+Next token is token '\n' (6.0: 1)
+Next token is token '\n' (6.0: 1)
+Next token is token '\n' (7.0: 1)
+Next token is token '-' (7.1: 1)
+Next token is token '-' (7.2: 1)
+Next token is token '-' (7.3: 1)
+Next token is token "number" (7.4: 1)
+Next token is token '=' (7.5: 1)
+Next token is token '=' (7.5: 1)
+Next token is token '=' (7.5: 1)
+Next token is token '=' (7.5: 1)
+Next token is token '-' (7.6: 1)
+Next token is token "number" (7.7: 1)
+Next token is token '\n' (8.0: 1)
+Next token is token '\n' (8.0: 1)
+Next token is token '\n' (8.0: 1)
+Next token is token '\n' (9.0: 1)
+Next token is token "number" (9.1: 1)
+Next token is token '-' (9.2: 1)
+Next token is token "number" (9.3: 2)
+Next token is token '-' (9.4: 2)
+Next token is token '-' (9.4: 2)
+Next token is token "number" (9.5: 3)
+Next token is token '=' (9.6: 3)
+Next token is token '=' (9.6: 3)
+Next token is token '-' (9.7: 3)
+Next token is token "number" (9.8: 4)
+Next token is token '\n' (10.0: 4)
+Next token is token '\n' (10.0: 4)
+Next token is token '\n' (10.0: 4)
+Next token is token "number" (10.1: 1)
+Next token is token '-' (10.2: 1)
+Next token is token '(' (10.3: 1)
+Next token is token "number" (10.4: 2)
+Next token is token '-' (10.5: 2)
+Next token is token "number" (10.6: 3)
+Next token is token ')' (10.7: 3)
+Next token is token ')' (10.7: 3)
+Next token is token '=' (10.8: 3)
+Next token is token '=' (10.8: 3)
+Next token is token "number" (10.9: 2)
+Next token is token '\n' (11.0: 2)
+Next token is token '\n' (11.0: 2)
+Next token is token '\n' (12.0: 2)
+Next token is token "number" (12.1: 2)
+Next token is token '^' (12.2: 2)
+Next token is token "number" (12.3: 2)
+Next token is token '^' (12.4: 2)
+Next token is token "number" (12.5: 3)
+Next token is token '=' (12.6: 3)
+Next token is token '=' (12.6: 3)
+Next token is token '=' (12.6: 3)
+Next token is token "number" (12.7: 256)
+Next token is token '\n' (13.0: 256)
+Next token is token '\n' (13.0: 256)
+Next token is token '(' (13.1: 256)
+Next token is token "number" (13.2: 2)
+Next token is token '^' (13.3: 2)
+Next token is token "number" (13.4: 2)
+Next token is token ')' (13.5: 2)
+Next token is token ')' (13.5: 2)
+Next token is token '^' (13.6: 2)
+Next token is token "number" (13.7: 3)
+Next token is token '=' (13.8: 3)
+Next token is token '=' (13.8: 3)
+Next token is token "number" (13.9: 64)
+Next token is token '\n' (14.0: 64)
+Next token is token '\n' (14.0: 64)
+Next token is token $end (14.1: 64)
+]])
+
+# Define the calculator input.
+# Warning: if you changes the input file
+# then the locations test file position numbers
+# may be incorrect and you will have
+# to modify that file as well.
+
+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_BISON_CHECK([PUSHPULLFLAG [-o Calc.java Calc.y]])
+AT_JAVA_COMPILE([[Calc.java]])
+# Verify that this is a push parser
+AT_CHECK_JAVA_GREP([[Calc.java]],
+                   [[.*public void push_parse_initialize().*]])
+# Capture the  stdout and stderr output for comparison purposes.
+AT_JAVA_PARSER_CHECK([Calc input], 0, [stdout-nolog], [stderr-nolog])
+# 1. Check that the token locations are correct
+AT_CHECK([[cp -f ./locations ./expout]],[ignore],[ignore-nolog],[ignore-nolog])
+AT_CHECK([[sed -e '/^Next token.*$/p' -e d ./stderr]],[ignore],[expout],[ignore-nolog])
+# 2. Check that the calculator output matches that of a pull parser
+AT_CHECK([[rm -f ./expout; cp -f ./output ./expout]],[ignore],[ignore-nolog],[ignore-nolog])
+AT_CHECK([[cat ./stdout]],[ignore],[expout],[ignore-nolog])
+AT_CLEANUP
diff --git a/tests/linear b/tests/linear
new file mode 100755
index 0000000..fb5512b
--- /dev/null
+++ b/tests/linear
@@ -0,0 +1,94 @@
+#! /usr/bin/env ruby
+
+# Build a grammar whose LALR(1) parser has a given number of states.
+# Useful to test edge cases (e.g., 256 and 257 states, etc.).
+
+class Linear
+  def initialize(states)
+    @states = states - 4
+    @cols = Math.sqrt(@states).to_i
+    @lines = @states / @cols
+    @rest = @states % @cols
+
+    @n = @lines * (@cols - 1) + (@rest == 0 ? 1 : @rest == 1 ? 2 : @rest)
+  end
+
+  def nterms
+    last = @lines + ([0, 1].include?(@rest) ? 0 : 1)
+    (0...last).map { |i| "t#{i}" }.join(' ')
+  end
+
+  def rules
+    res = (0...@lines).map { |i| "t#{i}:#{' N' * (@cols - 1)}" }.join("\n")
+    case @rest
+    when 0
+      res += ' N'
+    when 1
+      res += ' N N'
+    else
+      res += "\nt#{@lines}:#{" N" * @rest}"
+    end
+    res
+  end
+
+  def to_s
+    puts <<~EOF
+      // states: #{@states}
+      // cols: #{@cols}
+      // lines: #{@lines}
+      // rest: #{@rest}
+      // n: #{@n}
+
+      %code {
+        #include <stdio.h>
+        #include <stdlib.h>
+
+        static int yylex (void);
+        static void yyerror (const char *msg);
+       }
+
+      %debug
+      %define api.value.type union
+      %define parse.lac full
+      %define parse.error verbose
+      %printer { fprintf (yyo, "%ld", $$); } <long>
+      %token <long> N
+
+      %%
+
+      exp: #{nterms}
+
+      #{rules}
+
+      %%
+
+      static
+      int yylex (void)
+      {
+        static long count = 0;
+        if (count++ < #{@n})
+          {
+            yylval.N = count;
+            return N;
+          }
+        else
+          return 0;
+      }
+
+      static
+      void yyerror (const char *msg)
+      {
+        fprintf (stderr, "%s\\n", msg);
+      }
+
+      int
+      main (void)
+      {
+        yydebug = !!getenv ("YYDEBUG");
+        return yyparse ();
+      }
+      EOF
+  end
+end
+
+puts Linear.new(ARGV[0].to_i).to_s
diff --git a/tests/local.at b/tests/local.at
index 68a7eca..152c462 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -2,7 +2,7 @@
 
 # Macros for the GNU Bison Test suite.
 
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015, 2018-2019 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
@@ -29,19 +29,81 @@
          [],  [$2],
          [$3])])
 
+
+# AT_SETUP_STRIP(TITLE)
+# ---------------------
+# Abbreviate the TITLE to be passed to AT_SETUP.  Remove new-lines
+# that completely break AT_SETUP.
+m4_define([AT_SETUP_STRIP],
+[m4_bpatsubsts([$1],
+      [%\(language\|skeleton\) "?\([^\" ]*\)"?],
+        [\2],
+      [%define "?\([-A-Za-z0-9_.]+\)"? \({[^\}]+}\|"[^\"]+"\|[-A-Za-z0-9_.]+\)],
+        [\1=\2],
+      [%define "?\([-A-Za-z0-9_.]+\)"?],
+        [\1],
+      [ *
++ *],    [ ])dnl
+])
+
+
+# AT_DATA_NO_FINAL_EOL(FILE, CONTENT)
+# -----------------------------------
+# Same as AT_DATA, except that CONTENT has no the final end of line.
+#
+# 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>.
+m4_define([AT_DATA_NO_FINAL_EOL],
+[AT_DATA([$1], [$2
+])
+AT_REQUIRE([
+set x `LC_ALL=C ls -l '$1'` &&
+  size=$][6 &&
+  { test $size -eq 0 || dd obs=1 seek=`expr $size - 1` if=/dev/null of='$1'; }],
+  [], [ignore], [ignore])
+])
+
+
+
 ## ------------- ##
 ## Basic tests.  ##
 ## ------------- ##
 
+
+# AT_PERL_CHECK(PERL-ARGS, ...)
+# -----------------------------
+# If Perl is available, run this test.
+m4_define([AT_PERL_CHECK],
+[if test x"$PERL" != x; then
+  AT_CHECK(["$PERL" $1], [$2], [$3], [$4])
+fi
+])
+
+
+# AT_REQUIRE(CMD, ...)
+# --------------------
+# Same as AT_CHECK(...) but skip this test if we failed.
+m4_define([AT_REQUIRE],
+[AT_CHECK([$1 || exit 77], [$2], [$3], [$4])])
+
+
+# AT_PERL_REQUIRE(PERL-ARGS, ...)
+# -------------------------------
+# Run this Perl program, or skip the test if Perl is not available.
+m4_define([AT_PERL_REQUIRE],
+[AT_REQUIRE(["$PERL" $1], [$2], [$3], [$4])])
+
+
 # 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_PERL_CHECK([-0777 -ne '
+    my $count = 0;
+    s{$2}{ ++$count; "" }gem;
+    printf "$count\n";' $1], [0], [$3
 ])])
 
 
@@ -80,21 +142,30 @@
 
 # AT_LOC_PUSHDEF(FIRST-LINE, FIRST-COLUMN, LAST-LINE, LAST-COLUMN)
 # ----------------------------------------------------------------
-# Pushdef AT_LOC_(FIRST|LAST)_(LINE|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])])
+[m4_pushdef([AT_FIRST_LINE],  [$1])
+m4_pushdef([AT_FIRST_COLUMN], [$2])
+m4_pushdef([AT_LAST_LINE],    [$3])
+m4_pushdef([AT_LAST_COLUMN],  [$4])
+m4_pushdef([AT_LOC_FIRST_LINE],   [AT_LOC.AT_FIRST_LINE])
+m4_pushdef([AT_LOC_FIRST_COLUMN], [AT_LOC.AT_FIRST_COLUMN])
+m4_pushdef([AT_LOC_LAST_LINE],    [AT_LOC.AT_LAST_LINE])
+m4_pushdef([AT_LOC_LAST_COLUMN],  [AT_LOC.AT_LAST_COLUMN])])
 
 # AT_LOC_POPDEF
 # -------------
-# Popdef AT_LOC_(FIRST|LAST)_(LINE|COL).
+# Popdef AT(_LOC)?_(FIRST|LAST)_(LINE|COLUMN).
 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])])
+m4_popdef([AT_LOC_LAST_COLUMN])
+m4_popdef([AT_FIRST_LINE])
+m4_popdef([AT_FIRST_COLUMN])
+m4_popdef([AT_LAST_LINE])
+m4_popdef([AT_LAST_COLUMN])
+])
 
 
 
@@ -108,28 +179,39 @@
 # _AT_BISON_OPTION_PUSHDEFS($1, $2, [BISON-OPTIONS])
 # --------------------------------------------------
 # 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.
+# inside macros, because issuing '[$1]' is not possible in M4 :(.
+# This sucks hard, GNU M4 should really provide M5-like $$1.
 m4_define([_AT_BISON_OPTION_PUSHDEFS],
-[m4_if([$1$2], $[1]$[2], [],
-       [m4_fatal([$0: Invalid arguments: $@])])dnl
+[m4_pushdef([AT_BISON_OPTIONS], [$3])
+
+m4_if([$1$2], $[1]$[2], [],
+       [m4_fatal([$0: invalid arguments: $@])])dnl
+m4_pushdef([AT_AUTOMOVE_IF],
+[m4_bmatch([$3], [%define api\.value\.automove], [$1], [$2])])
 m4_pushdef([AT_DEFINES_IF],
 [m4_bmatch([$3], [%defines], [$1], [$2])])
-m4_pushdef([AT_SKEL_CC_IF],
+m4_pushdef([AT_DEBUG_IF],
+[m4_bmatch([$3], [%debug\|%define parse.trace], [$1], [$2])])
+m4_pushdef([AT_CXX_IF],
 [m4_bmatch([$3], [%language "[Cc]\+\+"\|%skeleton "[a-z0-9]+\.cc"], [$1], [$2])])
-m4_pushdef([AT_SKEL_JAVA_IF],
+m4_pushdef([AT_D_IF],
+[m4_bmatch([$3], [%language "[Dd]"\|%skeleton "[a-z0-9]+\.d"], [$1], [$2])])
+m4_pushdef([AT_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])])])
+[AT_JAVA_IF([java],
+            [AT_CXX_IF([c++],
+                       [AT_D_IF([d],
+                                [c])])])])
+m4_pushdef([AT_C_IF],
+[m4_if(AT_LANG, [c], [$1], [$2])])
 m4_pushdef([AT_GLR_IF],
 [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])])
+[AT_CXX_IF([AT_GLR_IF([$2], [$1])], [$2])])
 m4_pushdef([AT_GLR_CC_IF],
-[AT_SKEL_CC_IF([AT_GLR_IF([$1], [$2])], [$2])])
+[AT_CXX_IF([AT_GLR_IF([$1], [$2])], [$2])])
 # Using yacc.c?
 m4_pushdef([AT_YACC_IF],
 [m4_bmatch([$3], [%language\|%glr-parser\|%skeleton], [$2], [$1])])
@@ -137,28 +219,53 @@
 [m4_bmatch([$3], [%lex-param], [$1], [$2])])
 m4_pushdef([AT_LOCATION_IF],
 [m4_bmatch([$3], [%locations], [$1], [$2])])
-m4_pushdef([AT_LOCATION_TYPE_IF],
-[m4_bmatch([$3], [%define \(api\.location\.type\|location_type\)], [$1], [$2])])
+# Whether we use the Span location type (see calc.at), whose members are
+# not named like those of the default location type (on purpose, to make
+# sure we can use a user type).
+m4_pushdef([AT_LOCATION_TYPE_SPAN_IF],
+[m4_bmatch([$3], [%define \(api\.location\.type\|location_type\) \{Span\}], [$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, ".
+# E.g., %parse-param { int x } %parse-param {int y} -> "int x, int y, ".
+# FIXME: Support grouped parse-param.
 m4_pushdef([AT_PARSE_PARAMS])
 m4_bpatsubst([$3], [%parse-param { *\([^{}]*[^{} ]\) *}],
              [m4_append([AT_PARSE_PARAMS], [\1, ])])
 
 m4_pushdef([AT_PURE_IF],
 [m4_bmatch([$3], [%define  *api\.pure\|%pure-parser],
-           [m4_bmatch([$3], [%define  *api\.pure *"?false"?], [$2], [$1])],
+           [m4_bmatch([$3], [%define  *api\.pure *false], [$2], [$1])],
            [$2])])
+m4_pushdef([AT_PUSH_IF],
+[m4_bmatch([$3], [%define api.push-pull \(both\|pull\)], [$1], [$2])])
+# AT_NAME_PREFIX.
 m4_pushdef([AT_NAME_PREFIX],
-[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
-           [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
-           [yy])])
+[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) .*],
+   [m4_bregexp([$3],
+     [\(%define api\.prefix\|%name-prefix\) [\{\"]\([^\"\}]*\)[\"\}]],
+     [\2])],
+   [AT_JAVA_IF([YY], [yy])])])
+# AT_NAMESPACE: also consider api.prefix.  FIXME: Stop that confusion.
+m4_pushdef([AT_NAMESPACE],
+[m4_bmatch([$3], [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) .*],
+   [m4_bregexp([$3],
+     [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) [\{\"]\([^\"\}]*\)[\"\}]],
+     [\3])],
+   [yy])])
+m4_pushdef([AT_TOKEN_CTOR_IF],
+[m4_bmatch([$3], [%define api\.token\.constructor], [$1], [$2])])
+m4_pushdef([AT_TOKEN_PREFIX],
+[m4_bmatch([$3], [%define api\.token\.prefix {.*}],
+           [m4_bregexp([$3], [%define api\.token\.prefix {\(.*\)}], [\1])])])
+m4_pushdef([AT_TOKEN_RAW_IF],
+[m4_bmatch([$3], [%define api\.token\.raw], [$1], [$2])])
+m4_pushdef([AT_VARIANT_IF],
+[m4_bmatch([$3], [%define api\.value\.type variant], [$1], [$2])])
 m4_pushdef([AT_API_prefix],
-[m4_bmatch([$3], [%define api\.prefix ".*"],
-           [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])],
-           [yy])])
+[m4_bmatch([$3], [%define api\.prefix {.*}],
+           [m4_bregexp([$3], [%define api\.prefix {\([^\}]*\)}], [\1])],
+           [AT_JAVA_IF([YY], [yy])])])
 m4_pushdef([AT_API_PREFIX],
 [m4_toupper(AT_API_prefix)])
 # yyerror receives the location if %location, and if the parser is pure. For
@@ -168,13 +275,13 @@
 m4_pushdef([AT_YYERROR_ARG_LOC_IF],
 [AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
                                        m4_quote(m4_join([\|],
-                                                        [%define api.pure "?full"?],
+                                                        [%define api\.pure full],
                                                         [%glr-parser],
                                                         [%parse-param],
                                                         [%skeleton "?glr.c"?])),
                                        [$1], [$2])],
                             [$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
@@ -189,47 +296,58 @@
 # are using the C++ parsers.
 m4_pushdef([AT_PURE_LEX_IF],
 [AT_PURE_IF([$1],
-	    [AT_SKEL_CC_IF([$1], [$2])])])
+            [AT_CXX_IF([$1], [$2])])])
 
 m4_pushdef([AT_YYSTYPE],
-[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::semantic_type]],
+[AT_CXX_IF([AT_NAMESPACE[::parser::semantic_type]],
                [AT_API_PREFIX[STYPE]])])
 m4_pushdef([AT_YYLTYPE],
-[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::location_type]],
+[AT_CXX_IF([AT_NAMESPACE[::parser::location_type]],
                [AT_API_PREFIX[LTYPE]])])
 
-
-AT_PURE_LEX_IF(
+AT_TOKEN_CTOR_IF(
+[m4_pushdef([AT_LOC], [[(]AT_NAME_PREFIX[lloc)]])
+ m4_pushdef([AT_VAL], [[(]AT_NAME_PREFIX[lval)]])
+ m4_pushdef([AT_YYLEX_FORMALS],     [])
+ m4_pushdef([AT_YYLEX_RETURN],      [yy::parser::symbol_type])
+ m4_pushdef([AT_YYLEX_ARGS],        [])
+ m4_pushdef([AT_USE_LEX_ARGS],      [])
+ m4_pushdef([AT_YYLEX_PRE_FORMALS], [])
+ m4_pushdef([AT_YYLEX_PRE_ARGS],    [])],
+[AT_PURE_LEX_IF(
 [m4_pushdef([AT_LOC], [(*llocp)])
  m4_pushdef([AT_VAL], [(*lvalp)])
  m4_pushdef([AT_YYLEX_FORMALS],
-	    [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])])
+            [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])])
+ m4_pushdef([AT_YYLEX_RETURN], [int])
  m4_pushdef([AT_YYLEX_ARGS],
-	    [lvalp[]AT_LOCATION_IF([, llocp])])
+            [lvalp[]AT_LOCATION_IF([, llocp])])
  m4_pushdef([AT_USE_LEX_ARGS],
-	    [(void) lvalp;AT_LOCATION_IF([(void) llocp])])
+            [(void) lvalp;AT_LOCATION_IF([(void) llocp;])])
  m4_pushdef([AT_YYLEX_PRE_FORMALS],
-	    [AT_YYLEX_FORMALS, ])
+            [AT_YYLEX_FORMALS, ])
  m4_pushdef([AT_YYLEX_PRE_ARGS],
-	    [AT_YYLEX_ARGS, ])
+            [AT_YYLEX_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_RETURN],      [int])
  m4_pushdef([AT_YYLEX_ARGS],        [])
- m4_pushdef([AT_USE_LEX_ARGS],    [])
+ m4_pushdef([AT_USE_LEX_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_LOCATION_TYPE_SPAN_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_CXX_IF([AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])],
+               [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])])
 
+
+AT_GLR_IF([AT_KEYWORDS([glr])])
 ])# _AT_BISON_OPTION_PUSHDEFS
 
 
@@ -237,7 +355,9 @@
 # -----------------------
 m4_define([AT_BISON_OPTION_POPDEFS],
 [m4_divert_text([KILL],
-[m4_popdef([AT_YYLEX_PRE_ARGS])
+[m4_popdef([AT_BISON_OPTIONS])
+
+m4_popdef([AT_YYLEX_PRE_ARGS])
 m4_popdef([AT_YYLEX_PRE_FORMALS])
 m4_popdef([AT_USE_LEX_ARGS])
 m4_popdef([AT_YYLEX_ARGS])
@@ -251,20 +371,29 @@
 m4_popdef([AT_YYERROR_ARG_LOC_IF])
 m4_popdef([AT_API_PREFIX])
 m4_popdef([AT_API_prefix])
+m4_popdef([AT_VARIANT_IF])
+m4_popdef([AT_TOKEN_RAW_IF])
+m4_popdef([AT_TOKEN_PREFIX])
+m4_popdef([AT_TOKEN_CTOR_IF])
+m4_popdef([AT_NAMESPACE])
 m4_popdef([AT_NAME_PREFIX])
-m4_popdef([AT_LOCATION_TYPE_IF])
+m4_popdef([AT_LOCATION_TYPE_SPAN_IF])
 m4_popdef([AT_LOCATION_IF])
 m4_popdef([AT_PARSE_PARAMS])
+m4_popdef([AT_PUSH_IF])
+m4_popdef([AT_PURE_IF])
 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_CXX_IF])
+m4_popdef([AT_C_IF])
 m4_popdef([AT_LANG])
-m4_popdef([AT_SKEL_JAVA_IF])
+m4_popdef([AT_JAVA_IF])
 m4_popdef([AT_GLR_CC_IF])
 m4_popdef([AT_LALR1_CC_IF])
 m4_popdef([AT_DEFINES_IF])
+m4_popdef([AT_DEBUG_IF])
 AT_LOC_POPDEF])dnl
 ])# AT_BISON_OPTION_POPDEFS
 
@@ -274,21 +403,46 @@
 ## Generating Grammar Files.  ##
 ## -------------------------- ##
 
+# AT_LANG_CASE(LANG1, IF-LANG1, LANG2, IF-LANG2, ..., DEFAULT)
+# ------------------------------------------------------------
+m4_define([AT_LANG_CASE],
+[m4_case(AT_LANG, $@)])
+
+
+# _AT_LANG_DISPATCH(LANG, MACRO, ARGS)
+# ------------------------------------
+# Call the specialization of MACRO for LANG with ARGS.  Complain if
+# unavailable.
+m4_define([_AT_LANG_DISPATCH],
+[m4_ifdef([$2($1)],
+       [m4_indir([$2($1)], m4_shift2($@))],
+       [m4_fatal([$2: unknown language: $1])])])
+
+
+# AT_LANG_DISPATCH(MACRO, ARGS)
+# -----------------------------
+# Call the specialization of MACRO for AT_LANG with ARGS.  Complain if
+# unavailable.
+m4_define([AT_LANG_DISPATCH],
+[_AT_LANG_DISPATCH(AT_LANG, $@)])
+
+
+
 # AT_DATA_SOURCE_PROLOGUE
-# ------------------------
+# -----------------------
 # The prologue that should be included in any source code that is
-# meant to be compiled.
+# meant to be compiled.  Keep atlocal.in sync (BISON_CXX_WORKS).
 m4_define([AT_DATA_SOURCE_PROLOGUE],
-[[#include <config.h>
-/* We don't need perfect functions for these tests. */
-#undef malloc
-#undef memcmp
-#undef realloc
+[[/* Adjust to the compiler.
+  We used to do it here, but each time we add a new line,
+  we have to adjust all the line numbers in error messages.
+  It's simpler to use a constant include to a varying file.  */
+#include <testsuite.h>
 ]])
 
 # AT_DATA_GRAMMAR_PROLOGUE
 # ------------------------
-# The prologue that should be included in any grammar which parser is
+# The prologue that should be included in any grammar whose parser is
 # meant to be compiled.
 m4_define([AT_DATA_GRAMMAR_PROLOGUE],
 [[%code top {
@@ -298,7 +452,7 @@
 
 # AT_DATA_SOURCE(NAME, CONTENT)
 # -----------------------------
-# Generate the file NAME, which CONTENT is preceded by
+# Generate the file NAME, whose CONTENT is preceded by
 # AT_DATA_SOURCE_PROLOGUE.
 m4_define([AT_DATA_SOURCE],
 [AT_DATA([$1],
@@ -306,15 +460,13 @@
 $2])
 ])
 
+
 # AT_DATA_GRAMMAR(NAME, CONTENT)
 # ------------------------------
-# Generate the file NAME, which CONTENT is preceded by
+# Generate the file NAME, whose CONTENT is preceded by
 # AT_DATA_GRAMMAR_PROLOGUE.
-m4_define([AT_DATA_GRAMMAR],
-[AT_DATA([$1],
-[AT_DATA_GRAMMAR_PROLOGUE
-$2])
-])
+m4_define([AT_DATA_GRAMMAR], [AT_LANG_DISPATCH([$0], $@)])
+
 
 # AT_YYLEX_PROTOTYPE
 # AT_YYLEX_DECLARE_EXTERN
@@ -325,7 +477,7 @@
 # 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
+[AT_YYLEX_RETURN AT_NAME_PREFIX[]lex (]AT_YYLEX_FORMALS[)[]dnl
 ])
 
 m4_define([AT_YYLEX_DECLARE_EXTERN],
@@ -336,25 +488,10 @@
 [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_YYLEX_DEFINE([INPUT], [ACTION])
+m4_define([AT_YYLEX_DEFINE],  [AT_LANG_DISPATCH([$0], $@)])
+
 
 # AT_YYERROR_FORMALS
 # AT_YYERROR_PROTOTYPE
@@ -363,29 +500,85 @@
 # 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_FORMALS],  [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_YYERROR_PROTOTYPE],[AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_YYERROR_DECLARE_EXTERN], [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_YYERROR_DECLARE],  [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_YYERROR_DEFINE],   [AT_LANG_DISPATCH([$0], $@)])
+
+# AT_MAIN_DEFINE
+# --------------
+m4_define([AT_MAIN_DEFINE],   [AT_LANG_DISPATCH([$0], $@)])
+
+
+
+## --- ##
+## C.  ##
+## --- ##
+
+# AT_DATA_GRAMMAR(c)(NAME, CONTENT)
+# ---------------------------------
+# Generate the file NAME, with CONTENT.
+m4_define([AT_DATA_GRAMMAR(c)],
+[AT_DATA([$1],
+[AT_DATA_GRAMMAR_PROLOGUE
+$2])
 ])
 
-m4_define([AT_YYERROR_PROTOTYPE],
-[m4_case(AT_LANG,
-[c], [[void ]AT_NAME_PREFIX[error (]AT_YYERROR_FORMALS[)]])[]dnl
-])
+m4_define([AT_YYERROR_FORMALS(c)],
+[AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE const * const llocp, ])AT_PARSE_PARAMS[const char *msg]])
 
-m4_define([AT_YYERROR_DECLARE_EXTERN],
-[m4_case(AT_LANG,
-[c], [AT_YYERROR_PROTOTYPE;])[]dnl
-])
+m4_define([AT_YYERROR_PROTOTYPE(c)],
+[[void ]AT_NAME_PREFIX[error (]AT_YYERROR_FORMALS[)]])
 
-m4_define([AT_YYERROR_DECLARE],
-[m4_case(AT_LANG,
-[c], [static AT_YYERROR_DECLARE_EXTERN])[]dnl
-])
+m4_define([AT_YYERROR_DECLARE_EXTERN(c)],
+[AT_YYERROR_PROTOTYPE;])
 
-m4_define([AT_YYERROR_DEFINE],
-[m4_case(AT_LANG,
-[c], [[#include <stdio.h>
+m4_define([AT_YYERROR_DECLARE(c)],
+[#include <stdio.h>
+]AT_LOCATION_IF([[
+#if defined ]AT_YYLTYPE[_IS_TRIVIAL && ]AT_YYLTYPE[_IS_TRIVIAL
+static int location_print (FILE *yyo, ]AT_YYLTYPE[ const * const yylocp);
+# ifndef LOCATION_PRINT
+#  define LOCATION_PRINT(File, Loc) location_print (File, &(Loc))
+# endif
+#endif
+]])[
+static AT_YYERROR_DECLARE_EXTERN])
+
+
+m4_define([AT_YYERROR_DEFINE(c)],
+[[
+]AT_LOCATION_IF([[
+# if defined ]AT_YYLTYPE[_IS_TRIVIAL && ]AT_YYLTYPE[_IS_TRIVIAL
+/* Print *YYLOCP on YYO. */
+__attribute__((__unused__))
+static int
+location_print (FILE *yyo, ]AT_YYLTYPE[ const * const yylocp)
+{
+  int 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;
+}
+#endif
+]])[
 /* A C error reporting function.  */
 static
 ]AT_YYERROR_PROTOTYPE[
@@ -393,32 +586,258 @@
               [[^,]+[^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[);
+  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)
+}]])
+
+
+m4_define([AT_YYLEX_DEFINE(c)],
+[[#include <assert.h>
+static
+]AT_YYLEX_PROTOTYPE[
 {
-  (void) l;
-  std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
-}]],
-[java], [AT_LOCATION_IF([[public void yyerror (Calc.Location l, String s)
+  ]m4_bmatch([$1], [^\(".*"\)?$],
+             [[static char const input[] = ]m4_default([$1], [""])],
+             [[static int const input[] = ]$1])[;
+  static int toknum = 0;
+  int res;
+  ]AT_USE_LEX_ARGS[
+  enum { input_elts = sizeof input / sizeof input[0] };
+  (void) input_elts;
+  assert (0 <= toknum && toknum < input_elts);
+  res = input[toknum++];
+  ]$2[;]AT_TOKEN_CTOR_IF([], [[
+  ]AT_LOCATION_IF([[
+  ]AT_LOC_FIRST_LINE[ = ]AT_LOC_LAST_LINE[ = 1;
+  ]AT_LOC_FIRST_COLUMN[ = ]AT_LOC_LAST_COLUMN[ = toknum;]])[
+  return res;]])[
+}]])
+
+
+m4_define([AT_MAIN_DEFINE(c)],
+[[#include <stdlib.h> /* getenv. */
+#include <string.h> /* strcmp. */
+int
+main (int argc, char const* argv[])
+{]AT_DEBUG_IF([[
+  yydebug = !!getenv ("YYDEBUG");
+  for (int i = 1; i < argc; ++i)
+    if (!strcmp (argv[i], "-p")
+        || !strcmp (argv[i], "-d") || !strcmp (argv[i], "--debug"))
+      yydebug |= 1;
+    else if (!strcmp (argv[i], "-s") || !strcmp (argv[i], "--stat"))
+      yydebug |= 2;]], [[
+  (void) argc;
+  (void) argv;]])[
+  return ]AT_NAME_PREFIX[parse ();
+}]])
+
+m4_define([AT_LANG_FOR_EACH_STD(c)],
+[$1])
+
+
+## ----- ##
+## C++.  ##
+## ----- ##
+
+
+# AT_DATA_GRAMMAR(NAME, CONTENT)
+# ------------------------------
+m4_copy([AT_DATA_GRAMMAR(c)], [AT_DATA_GRAMMAR(c++)])
+
+# No need to declare, it's part of the class interface.
+m4_define([AT_YYERROR_DECLARE(c++)],        [])
+m4_define([AT_YYERROR_DECLARE_EXTERN(c++)], [])
+
+m4_define([AT_YYERROR_DEFINE(c++)],
+[[/* A C++ error reporting function.  */
+void
+]AT_NAMESPACE[::parser::error (]AT_LOCATION_IF([[const location_type& l, ]])[const std::string& m)
+{
+  std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << '\n';
+}]])
+
+
+# AT_YYERROR_DEFINE(c++)([INPUT], [ACTION])
+# -----------------------------------------
+# Same as in C.
+m4_copy([AT_YYLEX_DEFINE(c)], [AT_YYLEX_DEFINE(c++)])
+
+
+m4_define([AT_MAIN_DEFINE(c++)],
+[[#include <cstdlib> // getenv.
+#include <cstring> // strcmp.
+int
+main (int argc, char const* argv[])
+{
+  ]AT_NAMESPACE[::parser p;]AT_DEBUG_IF([[
+  int debug = !!getenv ("YYDEBUG");
+  for (int i = 1; i < argc; ++i)
+    if (!strcmp (argv[i], "-p")
+        || !strcmp (argv[i], "-d") || !strcmp (argv[i], "--debug"))
+      debug |= 1;
+    else if (!strcmp (argv[i], "-s") || !strcmp (argv[i], "--stat"))
+      debug |= 2;
+  p.set_debug_level (debug);]], [[
+  (void) argc;
+  (void) argv;]])[
+  return p.parse ();
+}]])
+
+m4_define([AT_LANG_FOR_EACH_STD(c++)],
+[AT_FOR_EACH_CXX([$1])])
+
+m4_define([AT_FOR_EACH_CXX],
+[[at_for_each_std_CXXFLAGS_save=$CXXFLAGS
+for at_std in '' \
+              ${CXX98_CXXFLAGS:+"$CXX98_CXXFLAGS"} \
+              ${CXX03_CXXFLAGS:+"$CXX03_CXXFLAGS"} \
+              ${CXX11_CXXFLAGS:+"$CXX11_CXXFLAGS"} \
+              ${CXX14_CXXFLAGS:+"$CXX14_CXXFLAGS"} \
+              ${CXX17_CXXFLAGS:+"$CXX17_CXXFLAGS"} \
+              ${CXX2A_CXXFLAGS:+"$CXX2A_CXXFLAGS"}
+do
+  ]AS_ECHO(["======== Testing with C++ standard flags: '$at_cxx_std'"])[
+  CXXFLAGS="$at_for_each_std_CXXFLAGS_save $at_std"
+  ]$1[
+done
+CXXFLAGS=$at_for_each_std_CXXFLAGS_save
+]])
+
+
+
+## --- ##
+## D.  ##
+## --- ##
+
+# AT_DATA_GRAMMAR(NAME, CONTENT)
+# ------------------------------
+m4_copy([AT_DATA], [AT_DATA_GRAMMAR(d)])
+
+
+# No need to declare, it's part of the class interface.
+m4_define([AT_YYERROR_DECLARE(d)],        [])
+m4_define([AT_YYERROR_DECLARE_EXTERN(d)], [])
+
+m4_define([AT_YYERROR_DEFINE(d)],
+[[/* An error reporting function.  */
+public void yyerror (]AT_LOCATION_IF([[YYLocation l, ]])[string m)
+{
+  stderr.writeln (]AT_LOCATION_IF([[l, ": ", ]])[m);
+}]])
+
+
+m4_define([AT_MAIN_DEFINE(d)],
+[[int main ()
+{
+  auto l = new ]AT_API_prefix[Lexer ();
+  auto p = new ]AT_API_PREFIX[Parser (l);
+  return p.parse ();
+}]])
+
+
+
+## ------ ##
+## Java.  ##
+## ------ ##
+
+
+# AT_DATA_GRAMMAR(NAME, CONTENT)
+# ------------------------------
+m4_copy([AT_DATA], [AT_DATA_GRAMMAR(java)])
+
+
+# AT_JAVA_POSITION_DEFINE
+# -----------------------
+m4_define([AT_JAVA_POSITION_DEFINE],
+[[class Position {
+  public int line;
+  public int token;
+
+  public Position ()
   {
-    if (l == null)
-      System.err.println (s);
-    else
-      System.err.println (l + ": " + s);
+    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;
+  }
+}]])
+
+
+m4_define([AT_YYERROR_DEFINE(java)],
+[AT_LOCATION_IF([[public void yyerror (Calc.Location l, String m)
+{
+  if (l == null)
+    System.err.println (m);
+  else
+    System.err.println (l + ": " + m);
   }
 ]], [[
-  public void yyerror (String s)
+  public void yyerror (String m)
   {
-    System.err.println (s);
-  }]])],
-[m4_fatal([$0: invalid language: ]AT_LANG)])dnl
+    System.err.println (m);
+  }
+]])
 ])
 
+m4_define([AT_YYLEX_DEFINE(java)],
+[[
+  /*--------.
+  | yylex.  |
+  `--------*/
+
+  public String input = "]$1[";
+  public int index = 0;
+  public int yylex ()
+  {
+    if (index < input.length ())
+      return input.charAt (index++);
+    else
+      return 0;
+  }
+  public Object getLVal ()
+  {
+    ]$2[;
+  }
+]])
+
+m4_define([AT_MAIN_DEFINE(java)],
+[[class input
+{
+  public static void main (String args[]) throws IOException
+  {
+    ]AT_API_prefix[Parser p = new ]AT_API_prefix[Parser ();
+    System.exit (p.parse () ? 0 : 1);
+  }
+}]])
+
+m4_define([AT_LANG_FOR_EACH_STD(java)],
+[$1])
 
 ## --------------- ##
 ## Running Bison.  ##
@@ -429,7 +848,7 @@
 # High-level routine that may call bison several times, under different
 # conditions.
 #
-# Check Bison by invoking `bison BISON_ARGS'.  BISON_ARGS should not contain
+# 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.
@@ -452,31 +871,30 @@
 [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_CHECK(AT_SET_ENV[[ bison --color=no -fno-caret ]]$@)])
 
 
 # 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.
+#
+# When -Wno-error is used, the rules are really different, don't try.
 m4_define([AT_BISON_CHECK_WARNINGS],
 [m4_if(m4_bregexp([$4], [: warning: ]), [-1], [],
-      [m4_null_if([$2], [AT_BISON_CHECK_WARNINGS_($@)])])])
+       m4_bregexp([$1], [-Wno-error=]), [-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[
+          ]AT_SAVE_SPECIAL_FILES[
 
   # To avoid expanding it repeatedly, store specified stdout.
   ]AT_DATA([expout], [$3])[
@@ -484,45 +902,26 @@
   # 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
+  if test x"$PERL" != x; then
+    # Build expected stderr up to and including the "warnings being
+    # treated as errors" message.
+    ]AT_DATA([[experr]], [$4])[
+    "$PERL" -pi -e 's{(.*): warning:}{$][1: error:};' \
+                -e 's{\[-W(.*)\]$}{@<:@-Werror=$][1@:>@}' \
+                    experr
+    ]AT_CHECK([[sed 's,.*/$,,' stderr 1>&2]], [[0]], [[]], [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 --warnings=error.
+    cp stderr experr
+    ]AT_BISON_CHECK_([$1[ --warnings=error]], [[1]], [expout], [experr])[
+  fi
 
   # 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])[
+  # --warnings=none is specified.  With traces disabled, there should
+  # be no output on stderr.
+  ]AT_BISON_CHECK_([$1[ -Wnone,none -Werror --trace=none]], [[0]], [expout])[
+  ]AT_BISON_CHECK_([$1[ --warnings=none -Werror --trace=none]], [[0]], [expout])[
 
   ]AT_RESTORE_SPECIAL_FILES[
 fi]dnl
@@ -534,7 +933,7 @@
 # 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_CHECK(AT_SET_ENV_IF([$2]) [[bison --color=no -fno-caret ]]$@)
 AT_BISON_CHECK_WARNINGS($@)])
 
 # AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
@@ -554,27 +953,31 @@
   # 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])
+             --graph=xml-tests/test.gv ]]AT_BISON_ARGS,
+           [[0]], [ignore], [ignore])
   AT_BISON_CHECK_([[--xml=xml-tests/test.xml ]]AT_BISON_ARGS,
-                 [[0]], [ignore], [ignore])
+           [[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 \
+             `]]AT_SET_ENV[[ bison --print-datadir`/xslt/xml2text.xsl \
              xml-tests/test.xml]], [[0]], [expout])
-  [sort xml-tests/test.dot > expout]
+  [sort xml-tests/test.gv > expout]
   AT_CHECK([[$XSLTPROC \
-             `]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2dot.xsl \
+             `]]AT_SET_ENV[[ 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.
+
+# AT_SET_ENV_IF(EXIT-STATUS)
+# --------------------------
+# Put this before a Bison invocation to set the environment to:
+# - define COLUMNS to make the test suite independant of the user's
+#   environment;
+# - keep Valgrind from complaining about reachable memory (when
+#   EXIT-STATUS is not 0).
 #
 # 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
@@ -582,51 +985,77 @@
 # 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;]]])
+m4_define([AT_SET_ENV_IF],
+[[[COLUMNS=1000; export COLUMNS;]] m4_null_if($1, [], [[[VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; ]]])])
 
 
+# AT_SET_ENV
+# ----------
+# See above.
+m4_define([AT_SET_ENV],
+[AT_SET_ENV_IF([1])])
 
 ## ------------------------ ##
 ## Compiling C, C++ Files.  ##
 ## ------------------------ ##
 
 
-# AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c])
-# ----------------------------------------
+# AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
+# ----------------------------------------------------------------
 # 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([$BISON_C_WORKS], 0, ignore, ignore)
+[AT_SKIP_IF([[! $BISON_C_WORKS]])
 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])])
+                 [$CC $CFLAGS $CPPFLAGS $3],
+                 [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])
-# ---------------------------------------------
+
+# AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc], [EXTRA-COMPILER-FLAGS])
+# ---------------------------------------------------------------------
 # 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.
+# with trailing ".o" removed, and ".cc" appended.
 m4_define([AT_COMPILE_CXX],
 [AT_KEYWORDS(c++)
-AT_CHECK([$BISON_CXX_WORKS], 0, ignore, ignore)
+AT_SKIP_IF([[! $BISON_CXX_WORKS]])
 AT_CHECK(m4_join([ ],
-                 [$CXX $CXXFLAGS $CPPFLAGS],
+                 [$CXX $CXXFLAGS $CPPFLAGS $3],
                  [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
                  [-o $1],
                  [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).cc])],
                  [m4_bmatch([$1], [[.]], [], [$LIBS])]),
-	 0, [ignore], [ignore])])
+         0, [ignore], [ignore])])
+
+
+# AT_COMPILE_D(OUTPUT, [SOURCES = OUTPUT.d], [EXTRA-COMPILER-FLAGS])
+# -------------------------------------------------------------------
+# 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_D],
+[AT_KEYWORDS(d)
+AT_SKIP_IF([[! $BISON_DC_WORKS]])
+AT_CHECK(m4_join([ ],
+                 [$DC $DCFLAGS $3],
+                 [m4_bmatch([$1], [[.]], [-c])],
+                 [-of$1],
+                 [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).d])]),
+         0, [ignore], [ignore])])
+
 
 # AT_JAVA_COMPILE(SOURCES)
 # ------------------------
@@ -639,52 +1068,60 @@
 AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
          [[0]], [ignore], [ignore])])
 
-# AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c]
-# --------------------------------------------
+
+# AT_LANG_FOR_EACH_STD(BODY)
+# --------------------------
+m4_define([AT_LANG_FOR_EACH_STD],  [AT_LANG_DISPATCH([$0], $@)])
+
+
+# AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
+# ---------------------------------------------------------------------
 # 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
-])
+m4_define([AT_LANG_COMPILE],  [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_LANG_COMPILE(c)],    [AT_COMPILE([$1], [$2], [$3])])
+m4_define([AT_LANG_COMPILE(c++)],  [AT_COMPILE_CXX([$1], [$2], [$3])])
+m4_define([AT_LANG_COMPILE(d)],    [AT_COMPILE_D([$1], [$2], [$3])])
+m4_define([AT_LANG_COMPILE(java)], [AT_JAVA_COMPILE([$1.java], [$2], [$3])])
 
-# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2])
-# -------------------------------------------
+
+# AT_LANG_EXT
+# -----------
+# The file extension corresponding to the language: c, cc, or java.
+m4_define([AT_LANG_EXT],  [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_LANG_EXT(c)],    [c])
+m4_define([AT_LANG_EXT(c++)],  [cc])
+m4_define([AT_LANG_EXT(d)],    [d])
+m4_define([AT_LANG_EXT(java)], [java])
+
+
+# AT_LANG_HDR
+# -----------
+# The header file extension corresponding to the language: c, cc.
+m4_define([AT_LANG_HDR],  [AT_LANG_DISPATCH([$0], $@)])
+m4_define([AT_LANG_HDR(c)],    [h])
+m4_define([AT_LANG_HDR(c++)],  [hh])
+
+
+# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2],
+#                 [$4: EXTRA-COMPILER-FLAGS, [$5: EXTRA-BISON-FLAGS])
+# -------------------------------------------------------------------
 # 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.
+# OUTPUT.java along with it.  Relies on AT_CXX_IF and
+# AT_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_BISON_CHECK([$5 -o $1.AT_LANG_EXT $1.y])
+ AT_LANG_COMPILE([$1],
+                 m4_join([ ],
+                         [$1.AT_LANG_EXT],
+                         m4_ifval($2, [[$1-$2.]AT_LANG_EXT]),
+                         m4_ifval($3, [[$1-$3.]AT_LANG_EXT])),
+                 [$4])])
 
 
 
@@ -720,8 +1157,82 @@
 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])
+          exit 77], [0], [ignore], [ignore])
+AT_C_PARSER_CHECK([c-and-cxx])
+])
+
+
+# AT_REQUIRE_CXX_STD(STD, [IF-FAIL = SKIP])
+# -----------------------------------------
+# Skip unless this compiler supports at least C++ STD (e.g., "11",
+# "14", etc.).
+m4_define([AT_REQUIRE_CXX_STD],
+[AT_DATA([check.cc],
+[[int main ()
+{
+#if !defined __cplusplus || __cplusplus < ]m4_case([$1],
+    [98], [199711],
+    [03], [199711],
+    [11], [201103],
+    [14], [201402],
+    [17], [201703],
+    [2a], [201709],
+    [m4_fatal([$0: invalid arguments: $@])])[
+  return 1;
+#else
+  return 0;
+#endif
+}
+]])
+AT_COMPILE_CXX([check])
+AT_CHECK([@&t@./check], [ignore])
+m4_ifval([$2],
+         [if test $at_status != 0; then
+            $2
+          fi],
+         [AT_SKIP_IF([test $at_status != 0])])
+])
+
+
+# AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR
+# ------------------------------------
+# Check that we can expect exceptions to be handled properly.
+# GCC 4.3 and 4.4 fail https://trac.macports.org/ticket/40853.
+m4_define([AT_SKIP_IF_EXCEPTION_SUPPORT_IS_POOR],
+[AT_DATA_SOURCE([exceptions.cc],
+[[#include <iostream>
+#include <stdexcept>
+
+void foo ()
+{
+  try
+    {
+      throw std::runtime_error ("foo");
+    }
+  catch (...)
+    {
+      std::cerr << "Inner caught\n";
+      throw;
+    }
+}
+
+int main ()
+{
+  try
+    {
+      foo ();
+    }
+  catch (...)
+    {
+      std::cerr << "Outer caught\n";
+      return 0;
+    }
+  return 1;
+}
+]])
+AT_COMPILE_CXX([exceptions])
+# The "empty" quadrigraph is to protect from cfg.mk's sc_at_parser_check.
+AT_CHECK([@&t@./exceptions || exit 77], [0], [], [ignore])
 ])
 
 
@@ -730,14 +1241,14 @@
 ## ---------------------------- ##
 
 
-# AT_PARSER_CHECK(COMMAND, EXIT-STATUS, EXPOUT, EXPERR, [PRE])
-# ------------------------------------------------------------
-# So that we can run `./testsuite PREPARSER='valgrind -q' for instance.
+# AT_C_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])
+m4_define([AT_C_PARSER_CHECK],
+[AT_CHECK([$5 $PREPARSER ./$1], [$2], [$3], [stderr])
 AT_CHECK([sed >&2 -e '/^profiling:.*:Merge mismatch for summaries/d' stderr],
          [0], [], [$4])
 ])
@@ -749,6 +1260,17 @@
 [AT_CHECK([$5[ $SHELL ../../../javaexec.sh ]$1], [$2], [$3], [$4])])
 
 
+# AT_PARSER_CHECK(COMMAND, EXIT-STATUS, EXPOUT, EXPERR, [PRE])
+# ------------------------------------------------------------
+# If we know we are in Java (via AT_BISON_OPTION_PUSHDEFS/POPDEFS),
+# run AT_JAVA_PARSER_CHECK, otherwise AT_C_PARSER_CHECK.
+m4_define([AT_PARSER_CHECK],
+[m4_ifdef([AT_JAVA_IF],
+          [AT_JAVA_IF([AT_JAVA_PARSER_CHECK($@)],
+                      [AT_C_PARSER_CHECK($@)])],
+          [AT_C_PARSER_CHECK($@)])])
+
+
 # AT_TEST_TABLES_AND_PARSE(TITLE, COND-VALUE, TEST-SPEC,
 #                          DECLS, GRAMMAR, INPUT,
 #                          BISON-STDERR, TABLES-OR-LAST-STATE,
@@ -774,16 +1296,16 @@
 # 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
+# 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
+# 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'.
+# '.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
@@ -805,11 +1327,11 @@
 #   # ---------------------------------------------------------------------
 #   m4_define([AT_TEST_SYNTAX_ERROR],
 #   [
-#     AT_TEST_TABLES_AND_PARSE([$1[ with %error-verbose]], [[verbose]],
+#     AT_TEST_TABLES_AND_PARSE([$1[ with %define parse.error verbose]], [[verbose]],
 #                              [[last-state]],
-#                              [[%error-verbose ]$2], [$3], [$4],
+#                              [[%define parse.error verbose ]$2], [$3], [$4],
 #                              [[]], [$5], [], [$6], [$7], [$8])
-#     AT_TEST_TABLES_AND_PARSE([$1[ with no %error-verbose]], [[no verbose]],
+#     AT_TEST_TABLES_AND_PARSE([$1[ with no %define parse.error verbose]], [[no verbose]],
 #                              [[last-state]],
 #                              [$2], [$3], [$4],
 #                              [[]], [$5], [], [$6], [$7], [$8])
@@ -831,7 +1353,6 @@
 AT_BISON_OPTION_PUSHDEFS([$4])
 AT_DATA_GRAMMAR([[input.y]],
 [[%code {
-  #include <stdio.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 }
@@ -854,11 +1375,7 @@
   return *inputp++;
 }
 
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 # In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before
@@ -869,7 +1386,7 @@
 
 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]],
+      [AT_BISON_CHECK_NO_XML])([[-Wall --report=all --defines -o input.c input.y]],
                                [0], [], m4_dquote($7))
 
 m4_if(m4_index(m4_quote($3), [last-state]), -1,
@@ -889,12 +1406,12 @@
 # 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 //'`
+  CFLAGS=`echo " $CFLAGS " | sed -e 's/ -pedantic / /'`
+  CXXFLAGS=`echo " $CXXFLAGS " | sed -e 's/ -pedantic / /'`
 fi])
 AT_COMPILE([[input]])
 
-AT_PARSER_CHECK([[./input]],
+AT_PARSER_CHECK([[input]],
                 m4_ifval([$10], [m4_dquote($10)]),
                 m4_ifval([$11], [m4_dquote($11)]),
                 m4_ifval([$12], [m4_dquote($12)]))
@@ -906,12 +1423,43 @@
 
 
 
+# AT_SETS_CHECK(INPUT, SETS, EXPECTED)
+# ------------------------------------
+# Extract the information about the grammar sets from a bison
+# trace output (INPUT), and compare to EXPECTED.
+#
+# And remember, there is no alternation in portable sed.
+m4_define([AT_SETS_CHECK],
+[AT_DATA([extract.sed],
+[[#n
+]m4_foreach([m4_Set], [$2], [[
+/^]m4_Set[/ {
+   :]m4_substr(m4_Set, 0, 7)[
+   p
+   n
+   /^ *$/ !b ]m4_substr(m4_Set, 0, 7)[
+}
+]])])
+
+AT_CHECK([sed -f extract.sed $1], 0, [$3])
+])
+
+
+
+
 ## ----------------------- ##
 ## Launch the test suite.  ##
 ## ----------------------- ##
 
 AT_INIT
 
+# AT_SETUP([TITLE])
+# -----------------
+# Redefine AT_SETUP to be more concise.  Must be done after AT_INIT.
+m4_copy_force([AT_SETUP], [B4_SETUP])
+m4_define([AT_SETUP],
+[B4_SETUP(m4_expand([AT_SETUP_STRIP([[$1]])]))])
+
 # 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.
diff --git a/tests/local.mk b/tests/local.mk
new file mode 100644
index 0000000..91fd324
--- /dev/null
+++ b/tests/local.mk
@@ -0,0 +1,143 @@
+## Makefile for Bison testsuite.
+
+## Copyright (C) 2000-2015, 2018-2019 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 += %D%/linear $(TESTSUITE_AT) %D%/testsuite %D%/testsuite.h
+
+DISTCLEANFILES       += %D%/atconfig $(check_SCRIPTS)
+MAINTAINERCLEANFILES += $(TESTSUITE)
+
+## ------------ ##
+## package.m4.  ##
+## ------------ ##
+
+$(top_srcdir)/%D%/package.m4: $(top_srcdir)/configure
+	$(AM_V_GEN)rm -f $@ $@.tmp
+	$(AM_V_at){ \
+	  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)])'; \
+	} >$@.tmp
+	$(AM_V_at)mv $@.tmp $@
+
+## ------------------------- ##
+## Generate the test suite.  ##
+## ------------------------- ##
+
+TESTSUITE_AT =                                \
+  %D%/testsuite.at                            \
+                                              \
+  %D%/actions.at                              \
+  %D%/c++.at                                  \
+  %D%/calc.at                                 \
+  %D%/conflicts.at                            \
+  %D%/cxx-type.at                             \
+  %D%/diagnostics.at                          \
+  %D%/existing.at                             \
+  %D%/glr-regression.at                       \
+  %D%/headers.at                              \
+  %D%/input.at                                \
+  %D%/java.at                                 \
+  %D%/javapush.at                             \
+  %D%/local.at                                \
+  %D%/named-refs.at                           \
+  %D%/output.at                               \
+  %D%/package.m4                              \
+  %D%/push.at                                 \
+  %D%/reduce.at                               \
+  %D%/regression.at                           \
+  %D%/report.at                               \
+  %D%/scanner.at                              \
+  %D%/sets.at                                 \
+  %D%/skeletons.at                            \
+  %D%/synclines.at                            \
+  %D%/torture.at                              \
+  %D%/types.at
+
+TESTSUITE = $(top_srcdir)/%D%/testsuite
+
+AUTOTEST = $(AUTOM4TE) --language=autotest
+AUTOTESTFLAGS = -I $(top_srcdir)/%D%
+$(TESTSUITE): $(TESTSUITE_AT)
+	$(AM_V_GEN) \
+	  $(AUTOTEST) $(AUTOTESTFLAGS) $(srcdir)/%D%/testsuite.at -o $@.tmp
+	$(AM_V_at)"$(PERL)" -pi -e 's/\@tb\@/\t/g' $@.tmp
+	$(AM_V_at)mv $@.tmp $@
+
+
+## -------------------- ##
+## Run the test suite.  ##
+## -------------------- ##
+
+# Move into %D%/ so that testsuite.dir etc. be created there.
+RUN_TESTSUITE = $(SHELL) $(TESTSUITE) -C %D% $(TESTSUITEFLAGS)
+check_SCRIPTS += $(BISON) %D%/atconfig %D%/atlocal
+RUN_TESTSUITE_deps = all $(TESTSUITE) $(check_SCRIPTS)
+
+clean-local: clean-local-tests
+clean-local-tests:
+	test ! -f $(TESTSUITE) || $(TESTSUITE) -C %D% --clean
+
+.PHONY: recheck
+recheck: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE)							\
+	  $$(perl -n								\
+	     -e 'if (/Summary of the failures/../Detailed failed tests/)'	\
+	     -e '{ /^ *[0-9]+:/ && s/:.*//s && print }' %D%/testsuite.log)
+
+check-local: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE)
+
+# Run the test suite on the *installed* tree.
+installcheck-local: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) AUTOTEST_PATH='$(bindir)'
+
+# Be real mean with it.
+.PHONY: maintainer-check-g++
+maintainer-check-g++: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) --compile-c-with-cxx
+
+.PHONY: maintainer-check-posix
+maintainer-check-posix: $(RUN_TESTSUITE_deps)
+	$(RUN_TESTSUITE) POSIXLY_CORRECT=1 _POSIX2_VERSION=200112
+
+.PHONY: maintainer-check-valgrind
+VALGRIND_OPTS = --leak-check=full --show-reachable=yes --gen-suppressions=all \
+  $(VALGRIND_OPTS_SUPPRESSION)
+maintainer-check-valgrind: $(RUN_TESTSUITE_deps)
+	test 'x$(VALGRIND)' == x ||					\
+	  $(RUN_TESTSUITE)						\
+	    PREBISON='$(VALGRIND) -q' PREPARSER='$(VALGRIND) -q'	\
+	    VALGRIND_OPTS="$(VALGRIND_OPTS)"
+
+.PHONY: maintainer-check
+maintainer-check: maintainer-check-posix maintainer-check-valgrind maintainer-check-g++
+
+.PHONY: maintainer-check-push
+maintainer-check-push:
+	$(MAKE) $(AM_MAKEFLAGS) maintainer-check			\
+	  TESTSUITEFLAGS='BISON_USE_PUSH_FOR_PULL=1 $(TESTSUITEFLAGS)'
+
+.PHONY: maintainer-check-xml
+maintainer-check-xml:
+	$(MAKE) $(AM_MAKEFLAGS) maintainer-check		\
+	  TESTSUITEFLAGS='BISON_TEST_XML=1 $(TESTSUITEFLAGS)'
+
+.PHONY: maintainer-check-release
+maintainer-check-release: maintainer-check maintainer-check-push maintainer-check-xml
diff --git a/tests/named-refs.at b/tests/named-refs.at
index 46b0159..e6a3656 100644
--- a/tests/named-refs.at
+++ b/tests/named-refs.at
@@ -1,6 +1,6 @@
 # Named references test.                           -*- Autotest -*-
 
-# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2015, 2018-2019 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
@@ -18,6 +18,7 @@
 # FIXME: Duplication with calc.at.
 AT_BANNER([[Named references tests.]])
 
+# FIXME: large duplication with calc.at.
 AT_SETUP([Tutorial calculator])
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
@@ -46,10 +47,10 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '='   /* comparison	       */
+%nonassoc '='   /* comparison          */
 %left '-' '+'
 %left '*' '/'
-%left NEG       /* negation--unary minus */
+%precedence NEG /* negation--unary minus */
 %right '^'      /* exponentiation        */
 
 %%
@@ -69,7 +70,7 @@
   {
     if ($l != $r)
       fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
-    $$ = $l;
+   $$ = $l;
   }
 | exp[x] '+' { $<ival>$ = $x; } [l] exp[r]  { $$ = $<ival>l + $r;    }
 | exp[l] '-' exp[r]  { $$ = $l - $r;        }
@@ -86,8 +87,7 @@
 ]AT_YYERROR_DEFINE[
 static int get_char (void)
 {
-  int res = getc (input);
-  return res;
+  return getc (input);
 }
 
 static void unget_char (int c)
@@ -162,8 +162,8 @@
     }
   status = yyparse ();
   fclose (input);
-  assert (global_result == result);
-  assert (global_count == count);
+  assert (global_result == result); (void) global_result; (void) result;
+  assert (global_count == count);   (void) global_count;  (void) count;
   return status;
 }
 ]])
@@ -181,15 +181,16 @@
 (2^2)^3 = 64
 ]])
 
-AT_BISON_CHECK([-o test.c test.y])
-AT_COMPILE([[test]])
-AT_PARSER_CHECK([./test input.txt], 0, [], [stderr])
+AT_FULL_COMPILE([[test]])
+AT_PARSER_CHECK([test input.txt], 0, [], [stderr])
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
 
-#######################################################################
+## ------------------------------------ ##
+## Undefined and ambiguous references.  ##
+## ------------------------------------ ##
 
 
 AT_SETUP([Undefined and ambiguous references])
@@ -211,10 +212,10 @@
 %token <ival> NUM "number"
 %type  <ival> exp
 
-%nonassoc '='   /* comparison	       */
+%nonassoc '='   /* comparison          */
 %left '-' '+'
 %left '*' '/'
-%left NEG       /* negation--unary minus */
+%precedence NEG /* negation--unary minus */
 %right '^'      /* exponentiation        */
 
 %%
@@ -234,7 +235,7 @@
   {
     if ($l != $r)
       fprintf (stderr, "calc: error: %d != %d\n", $l, $r);
-    $$ = $l;
+   $$ = $l;
   }
 | exp[x] '+' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>lo9 + $r; }
 | exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
@@ -250,25 +251,51 @@
 %%
 ]])
 
-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_CHECK([-fcaret -o test.c test.y], 1, [],
+[[test.y:52.51-60: error: invalid reference: '$<ival>lo9'
+   52 | | exp[x] '+' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>lo9 + $r; }
+      |                                                   ^~~~~~~~~~
+test.y:52.3-68:      symbol not found in production: lo9
+   52 | | exp[x] '+' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>lo9 + $r; }
+      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+test.y:53.51-60: warning: misleading reference: '$<ival>exp' [-Wother]
+   53 | | exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
+      |                                                   ^~~~~~~~~~
+test.y:44.1-3:       refers to: $exp at $$
+   44 | exp:
+      | ^~~
+test.y:53.7:         possibly meant: $x, hiding $exp at $1
+   53 | | exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
+      |       ^
+test.y:53.41:        possibly meant: $r, hiding $exp at $4
+   53 | | exp[x] '-' { $<ival>$ = $x; } [l] exp[r] { $$ = $<ival>exp - $r; }
+      |                                         ^
+test.y:54.51-52: error: $l of 'exp' has no declared type
+   54 | | exp[x] '*' { $<ival>$ = $x; } [l] exp[r] { $$ = $l * $r; }
+      |                                                   ^~
+test.y:57.40-43: error: invalid reference: '$r12'
+   57 | | exp[l] '^' exp[r]  { $$ = power ($l, $r12); }
+      |                                        ^~~~
+test.y:57.3-47:      symbol not found in production: r12
+   57 | | exp[l] '^' exp[r]  { $$ = power ($l, $r12); }
+      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+test.y:58.29-33: error: invalid reference: '$expo'
+   58 | | '(' exp ')'        { $$ = $expo;           }
+      |                             ^~~~~
+test.y:58.3-46:      symbol not found in production: expo
+   58 | | '(' exp ')'        { $$ = $expo;           }
+      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ]])
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
-#######################################################################
+
+## ----------------------- ##
+## Misleading references.  ##
+## ----------------------- ##
 
 AT_SETUP([Misleading references])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -277,15 +304,17 @@
 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.22-29: warning: misleading reference: '$foo.bar' [-Wother]
 test.y:11.8-10:      refers to: $foo at $1
 test.y:11.12-18:     possibly meant: $[foo.bar] at $2
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Many kinds of errors])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %token IDENT
@@ -396,129 +425,131 @@
 
 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); };
-                                    ^^^^^^
+   24 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   23 | 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); };
-                                           ^^^^^^^^^^^
+   26 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   25 | 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
-                                   ^^^^
+   25 | 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); };
-                                           ^^^^^^^^^^
+   28 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   27 | 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
-                              ^^^^^^^^^
+   27 | 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); };
-                                           ^^^^
+   30 |           { $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
-                                   ^^^
+   29 | 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
-                                                  ^^^
+   29 | 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); };
-                                           ^^^^^^^^^^
+   32 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   31 | 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
-                                        ^^^^
+   31 | 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
-                                                             ^^^^
+   31 | 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); };
-                                           ^^^^^^^^^^^^^^^^
+   34 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   33 | 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
-                                        ^^^^
+   33 | 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
-                                                             ^^^^
+   33 | 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); };
-                                           ^^^^^^^^^^^^
+   36 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   35 | 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
-                                        ^^^^
+   35 | 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
-                                                             ^^^^
+   35 | 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); };
-                                           ^^^^^^^
+   38 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   37 | 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
-                                        ^^^^^^
+   37 | 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); };
-                                           ^^^^^^^^^^^^^
+   40 |           { $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
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   39 | 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
-                                        ^^^^^^
+   39 | 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); };
-                                            ^^^^^^^
+   42 |           { $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
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   41 | 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
-                                    ^^^^^^
+   41 | 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
-                                    ^^^^^^
+   41 | 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); };
-             ^^^^^^^^^^
+   44 |           { $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
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   43 | 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
- ^^^^^^^^^
+   43 | 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); };
-                                              ^^^^^^^^^
+   46 |           { $[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
-            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   45 | 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
-                                         ^^^^^^
+   45 | if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI
+      |                                         ^~~~~~
 ]])
 
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Missing identifiers in brackets])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -528,11 +559,13 @@
 AT_BISON_CHECK([-o test.c test.y], 1, [],
 [[test.y:11.12: error: an identifier expected
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Redundant words in brackets])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -542,11 +575,13 @@
 AT_BISON_CHECK([-o test.c test.y], 1, [],
 [[test.y:11.15: error: unexpected identifier in bracketed name: 'd'
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Comments in brackets])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -556,28 +591,32 @@
 AT_BISON_CHECK([-o test.c test.y], 1, [],
 [[test.y:11.25: error: an identifier expected
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Stray symbols in brackets])
+AT_BISON_OPTION_PUSHDEFS
 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_PERL_REQUIRE([[-pi -e 's/\\(\d{3})/chr(oct($1))/ge' test.y]])
 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_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Redundant words in LHS brackets])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -586,6 +625,7 @@
 AT_BISON_CHECK([-o test.c test.y], 1, [],
 [[test.y:11.9: error: unexpected identifier in bracketed name: 's'
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
@@ -593,17 +633,20 @@
 # Bison used to free twice the named ref for "a", since a single copy
 # was used in two rules.
 AT_SETUP([Factored LHS])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
 start[a]: "foo" | "bar";
 ]])
 AT_BISON_CHECK([-o test.c test.y])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
 
 AT_SETUP([Unresolved references])
+AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([test.y],
 [[
 %%
@@ -664,6 +707,7 @@
 test.y:28.52-61: error: invalid reference: '$<aa>[sym]'
 test.y:28.3-65:      symbol not found in production: sym
 ]])
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 #######################################################################
@@ -694,7 +738,7 @@
 ;
 ]])
 AT_BISON_CHECK([[test.y]], [[0]], [],
-[[test.y:4.9: warning: stray '$'
-test.y:5.9: warning: stray '@'
+[[test.y:4.9: warning: stray '$' [-Wother]
+test.y:5.9: warning: stray '@' [-Wother]
 ]])
 AT_CLEANUP
diff --git a/tests/output.at b/tests/output.at
index 657903a..c945149 100644
--- a/tests/output.at
+++ b/tests/output.at
@@ -1,6 +1,7 @@
 # Checking the output filenames.                    -*- Autotest -*-
 
-# Copyright (C) 2000-2002, 2005-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2002, 2005-2015, 2018-2019 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
@@ -17,90 +18,133 @@
 
 AT_BANNER([[Output file names.]])
 
+# AT_CHECK_FILES(EXPECTED-FILES, [IGNORED-FILES])
+# -----------------------------------------------
+# Check that the current directory contains FILE... (sorted).
+m4_define([AT_CHECK_FILES],
+[AT_REQUIRE([[find . -type f |
+           "$PERL" -ne '
+      s,\./,,; chomp;
+      push @file, $_ unless m{^($2|testsuite.log)$};
+      END { print join (" ", sort @file), "\n" }']],
+          [], [$1
+])])
 
-# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [SHELLIO],
+# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [STATUS],
 #                 [ADDITIONAL-TESTS], [PRE-TESTS])
 # -----------------------------------------------------------------------------
 m4_define([AT_CHECK_OUTPUT],
-[AT_SETUP([[Output files: $2 $3 $5]])
-$7
-for file in $1 $4; do
-  case "$file" in
-    */*) mkdir -p `echo "$file" | sed 's,/.*,,'`;;
+[AT_SETUP([[Output files: ]$2 $3])[
+]$7[
+for file in ]$1 $4[; do
+  case $file in
+    */*) mkdir -p `echo "$file" | sed 's,/[^/]*,,'`;;
   esac
 done
-AT_DATA([$1],
-[[$2
+]AT_DATA([$1],
+[$2[
 %%
-foo: {};
+foo: '0' {};
 ]])
 
-AT_BISON_CHECK([$3 $1 $5], 0)
-AT_CHECK([ls $4], [], [ignore])
-$6
-AT_CLEANUP
-])
+# There is no AT_DATA_UNQUOTED.
+if $EGREP 'at_dir' $1 >/dev/null; then
+   AT_PERL_REQUIRE([-pi -e 's{\$at_dir}'"{$at_group_dir}g" $1])
+   # On Cygwin, up to Perl 5.28, 'perl -pi' left a foo.bak file.
+   AT_CHECK([rm -f $1.bak])
+fi
+
+
+AT_BISON_CHECK([$3 $1], [$5], [], [ignore])[
+# Ignore the files non-generated files
+]AT_CHECK_FILES([$4], [$1])[
+]$6[
+]AT_CLEANUP[
+]])
 
 AT_CHECK_OUTPUT([foo.y], [], [-dv],
-		[foo.output foo.tab.c foo.tab.h])
+                [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 >&-],
+                [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])
+                [foo.c foo.h foo.output])
 AT_CHECK_OUTPUT([foo.y], [], [-dv -o foo.tab.c],
-		[foo.output foo.tab.c foo.tab.h])
-AT_CHECK_OUTPUT([foo.y], [], [-dv -y],
-		[y.output y.tab.c y.tab.h])
+                [foo.output foo.tab.c foo.tab.h])
+
+AT_CHECK_OUTPUT([foo.y], [], [-dv -g --xml --fixed-output-files],
+                [y.dot y.output y.tab.c y.tab.h y.xml])
+AT_CHECK_OUTPUT([foo.y], [], [-dv -g --xml -y],
+                [y.dot y.output y.tab.c y.tab.h y.xml])
+AT_CHECK_OUTPUT([foo.y], [%require "3.4"], [-dv -g --xml -y],
+                [y.gv y.output y.tab.c y.tab.h y.xml])
+# With '-o y.tab.c', we expect 'y.output' etc. (for compatibility with Yacc).
+AT_CHECK_OUTPUT([foo.y], [], [-dv -g --xml -o y.tab.c],
+                [y.dot y.output y.tab.c y.tab.h y.xml])
+
 AT_CHECK_OUTPUT([foo.y], [], [-dv -b bar],
-		[bar.output bar.tab.c bar.tab.h])
+                [bar.output bar.tab.c bar.tab.h])
 AT_CHECK_OUTPUT([foo.y], [], [-dv -g -o foo.c],
-		[foo.c foo.dot foo.h foo.output])
+                [foo.c foo.dot foo.h foo.output])
 
 
 AT_CHECK_OUTPUT([foo.y], [%defines %verbose],      [],
-		[foo.output foo.tab.c foo.tab.h])
+                [foo.output foo.tab.c foo.tab.h])
 AT_CHECK_OUTPUT([foo.y], [%defines %verbose %yacc],[],
-		[y.output y.tab.c y.tab.h])
+                [y.output y.tab.c y.tab.h])
 
 AT_CHECK_OUTPUT([foo.yy], [%defines %verbose %yacc],[],
-		[y.output y.tab.c y.tab.h])
+                [y.output y.tab.c y.tab.h])
 
 # 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])
+                [bar.output bar.tab.c bar.tab.h])
+AT_CHECK_OUTPUT([foo.y], [%output "bar.c" %defines %verbose %yacc],[],
+                [bar.c bar.h bar.output])
 AT_CHECK_OUTPUT([foo.y],
-		[%file-prefix="baz" %output "bar.c" %defines %verbose %yacc],
-		[],
-		[bar.output bar.c bar.h])
+                [%file-prefix "baz" %output "bar.c" %defines %verbose %yacc],
+                [],
+                [bar.c bar.h bar.output])
 
 
 # Check priorities of extension control.
 AT_CHECK_OUTPUT([foo.yy], [%defines %verbose], [],
-		[foo.output foo.tab.cc foo.tab.hh])
+                [foo.output foo.tab.cc foo.tab.hh])
 
 AT_CHECK_OUTPUT([foo.yy], [%defines %verbose ], [-o foo.c],
-		[foo.c foo.h foo.output])
+                [foo.c foo.h foo.output])
 
 AT_CHECK_OUTPUT([foo.yy], [],
-		[--defines=foo.hpp -o foo.c++],
-		[foo.c++ foo.hpp])
+                [--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])
+                [-o foo.c++],
+                [foo.c++ foo.hpp])
 
 AT_CHECK_OUTPUT([foo.yy], [],
-		[-o foo.c++ --graph=foo.gph],
-		[foo.c++ foo.gph])
+                [-o foo.c++ --graph=foo.gph],
+                [foo.c++ foo.gph])
+
+# Do not generate code when there are early errors (even warnings as
+# errors).
+AT_CHECK_OUTPUT([foo.y], [%type <foo> useless],
+                [--defines --graph --xml --report=all -Wall -Werror],
+                [foo.dot foo.output foo.xml],
+                [1])
+
+# Do not generate code when there are late errors (even warnings as
+# errors).
+AT_CHECK_OUTPUT([foo.y], [%define useless],
+                [--defines --graph --xml --report=all -Wall -Werror],
+                [foo.dot foo.output foo.xml],
+                [1])
 
 
 ## ------------ ##
@@ -113,22 +157,56 @@
 AT_CHECK([grep 'include .subdir/' $1.hh], 1, [])
 ])
 
+AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc"], [],
+                [foo.tab.cc])
+
+AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %verbose], [],
+                [foo.output foo.tab.cc])
+
 AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
-		[foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh])
+                [foo.output foo.tab.cc foo.tab.hh stack.hh])
+
+AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %verbose %locations], [],
+                [foo.output foo.tab.cc])
+
+AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %defines %verbose %locations], [],
+                [foo.output foo.tab.cc foo.tab.hh location.hh position.hh stack.hh])
 
 AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
-		[foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh],
-		[], [AT_CHECK_NO_SUBDIR_PART([foo.tab])])
+                [foo.output foo.tab.cc foo.tab.hh stack.hh],
+                [], [AT_CHECK_NO_SUBDIR_PART([foo.tab])])
 
-AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose],
-		[-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([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose %locations],
+                [-o subdir/foo.cc],
+                [subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/position.hh subdir/stack.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])
+                [output_dir/foo.output output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/stack.hh])
+
+AT_CHECK_OUTPUT([gram_dir/foo.yy],
+                [%skeleton "lalr1.cc" %defines %locations %verbose %file-prefix "output_dir/foo"],
+                [],
+                [output_dir/foo.output output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/location.hh output_dir/position.hh output_dir/stack.hh])
+
+# %require "3.2" => no position.hh not stack.hh.
+AT_CHECK_OUTPUT([foo.yy],
+                [%skeleton "lalr1.cc" %defines %locations %define api.location.file none %require "3.2"],
+                [],
+                [foo.tab.cc foo.tab.hh])
+
+AT_CHECK_OUTPUT([foo.yy],
+                [%skeleton "lalr1.cc" %defines %locations %define api.location.file "foo.loc.hh" %require "3.2"],
+                [],
+                [foo.loc.hh foo.tab.cc foo.tab.hh])
+
+# Absolute paths.
+AT_CHECK_OUTPUT([foo.yy],
+                [%skeleton "lalr1.cc" %defines %locations %define api.location.file "$at_dir/foo.loc.hh" %require "3.2"],
+                [],
+                [foo.loc.hh foo.tab.cc foo.tab.hh])
 
 
 # AT_CHECK_CONFLICTING_OUTPUT(INPUT-FILE, DIRECTIVES, FLAGS, STDERR,
@@ -157,22 +235,22 @@
 
 AT_CHECK_CONFLICTING_OUTPUT([foo.y],
 [], [--graph="foo.tab.c"],
-[foo.y: warning: conflicting outputs to file 'foo.tab.c'
-])
+[[foo.y: warning: conflicting outputs to file 'foo.tab.c' [-Wother]
+]])
 
 AT_CHECK_CONFLICTING_OUTPUT([foo.y],
 [%defines "foo.output"], [-v],
-[foo.y: warning: conflicting outputs to file 'foo.output'
-])
+[[foo.y: warning: conflicting outputs to file 'foo.output' [-Wother]
+]])
 
 AT_CHECK_CONFLICTING_OUTPUT([foo.y],
-[%skeleton "lalr1.cc" %defines], [--graph="location.hh"],
-[foo.y: warning: conflicting outputs to file 'location.hh'
-])
+[%skeleton "lalr1.cc" %defines %locations], [--graph="location.hh"],
+[[foo.y: warning: conflicting outputs to file 'location.hh' [-Wother]
+]])
 
 AT_CHECK_CONFLICTING_OUTPUT([foo.y], [], [-o foo.y],
-[foo.y: error: refusing to overwrite the input file 'foo.y'
-], 1)
+[[foo.y: error: refusing to overwrite the input file 'foo.y'
+]], 1)
 
 
 # AT_CHECK_OUTPUT_FILE_NAME(FILE-NAME-PREFIX, [ADDITIONAL-TESTS])
@@ -183,7 +261,7 @@
 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_REQUIRE([[touch "]AS_ESCAPE([$1[.tmp]])["]])
 
 AT_DATA_GRAMMAR([glr.y],
 [[%glr-parser
@@ -205,9 +283,9 @@
 %%
 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])"])
+AT_BISON_CHECK([-o "AS_ESCAPE([$1.cc])" --defines="AS_ESCAPE([$1.hh])" cxx.y])
+AT_CHECK([ls "AS_ESCAPE([$1.cc])" "AS_ESCAPE([$1.hh])"], [], [ignore])
+AT_COMPILE_CXX([cxx.o], [-c "AS_ESCAPE([$1.cc])"])
 $2
 
 AT_BISON_OPTION_POPDEFS
@@ -264,7 +342,7 @@
 b: 'b';
 ]],
 [[
-  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a '?' b\l  2 a: .\l"]
+  0 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a '?' b\l  2 a: . %empty\l"]
   0 -> 1 [style=dashed label="exp"]
   0 -> 2 [style=dashed label="a"]
   0 -> "0R2" [style=solid]
@@ -306,7 +384,7 @@
 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 [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: . %empty  ['a']\l  8 empty_b: . %empty  ['b']\l  9 empty_c: . %empty  ['c']\l"]
   0 -> 1 [style=solid label="'a'"]
   0 -> 2 [style=solid label="'b'"]
   0 -> 3 [style=solid label="'c'"]
@@ -373,7 +451,7 @@
 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 [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: . %empty  ['a']\l  8 empty_b: . %empty  []\l  9 empty_c: . %empty  []\l"]
   0 -> 1 [style=solid label="'b'"]
   0 -> 2 [style=solid label="'c'"]
   0 -> 3 [style=dashed label="start"]
@@ -421,7 +499,7 @@
 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 [label="State 0\n\l  0 $accept: . exp $end\l  1 exp: . a\l  2    | . b\l  3 a: . %empty  [$end]\l  4 b: . %empty  [$end]\l"]
   0 -> 1 [style=dashed label="exp"]
   0 -> 2 [style=dashed label="a"]
   0 -> 3 [style=dashed label="b"]
@@ -454,7 +532,7 @@
 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 [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: . %empty  [';', '.']\l  9 b: . %empty  ['?', '!']\l 10 c: . %empty  [';', '?']\l"]
   0 -> 1 [style=dashed label="exp"]
   0 -> 2 [style=dashed label="a"]
   0 -> 3 [style=dashed label="b"]
@@ -569,7 +647,7 @@
  "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 [label="State 12\n\l  4 ifexp: \"if\" exp \"then\" exp . elseexp\l  5 elseexp: . \"else\" exp\l  6        | . %empty  [$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"]
diff --git a/tests/package.m4 b/tests/package.m4
index 3b599c0..5d7afeb 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.7])
-m4_define([AT_PACKAGE_STRING],    [GNU Bison 2.7])
+m4_define([AT_PACKAGE_VERSION],   [3.5])
+m4_define([AT_PACKAGE_STRING],    [GNU Bison 3.5])
 m4_define([AT_PACKAGE_BUGREPORT], [bug-bison@gnu.org])
diff --git a/tests/push.at b/tests/push.at
index 1b99397..bf47774 100644
--- a/tests/push.at
+++ b/tests/push.at
@@ -1,6 +1,7 @@
 # Checking Push Parsing.                            -*- Autotest -*-
 
-# Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2015, 2018-2019 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
@@ -57,12 +58,12 @@
   /* 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);
+  assert (yypush_parse (ps, 'a', YY_NULLPTR) == 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);
+  assert (yypush_parse (ps, 'a', YY_NULLPTR) == YYPUSH_MORE);
+  assert (yypush_parse (ps, 'b', YY_NULLPTR) == YYPUSH_MORE);
   yypstate_delete (ps);
 
   return 0;
@@ -72,7 +73,7 @@
 
 AT_BISON_CHECK([[-o input.c input.y]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]])
+AT_PARSER_CHECK([[input]])
 
 AT_CLEANUP
 
@@ -111,11 +112,11 @@
     {
       yypstate *ps = yypstate_new ();
       assert (ps);
-      assert (yypstate_new () == YY_NULL);
+      assert (yypstate_new () == YY_NULLPTR);
       ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
       yychar = 0;
       assert (yypush_parse (ps) == 0);
-      assert (yypstate_new () == YY_NULL);
+      assert (yypstate_new () == YY_NULLPTR);
       ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
       yypstate_delete (ps);
     }
@@ -126,7 +127,7 @@
 
 AT_BISON_CHECK([[-o input.c input.y]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]])
+AT_PARSER_CHECK([[input]])
 AT_BISON_OPTION_POPDEFS
 ])
 
@@ -153,7 +154,7 @@
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([[input.y]], [[1]], [],
-[[input.y:2.9-21: error: %define variable 'api.push-pull' is not used
+[[input.y:2.1-26: error: %define variable 'api.push-pull' is not used
 ]])
 
 AT_CLEANUP
diff --git a/tests/reduce.at b/tests/reduce.at
index 47f923c..fb098a6 100644
--- a/tests/reduce.at
+++ b/tests/reduce.at
@@ -1,6 +1,7 @@
 # Exercising Bison Grammar Reduction.                      -*- Autotest -*-
 
-# Copyright (C) 2001-2002, 2007-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2002, 2007-2015, 2018-2019 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
@@ -47,15 +48,15 @@
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
 [[Terminals unused in grammar
-   useless1
-   useless2
-   useless3
-   useless4
-   useless5
-   useless6
-   useless7
-   useless8
-   useless9
+    useless1
+    useless2
+    useless3
+    useless4
+    useless5
+    useless6
+    useless7
+    useless8
+    useless9
 ]])
 
 AT_CLEANUP
@@ -67,52 +68,47 @@
 ## ---------------------- ##
 
 AT_SETUP([Useless Nonterminals])
+AT_BISON_OPTION_PUSHDEFS
 
 AT_DATA([[input.y]],
-[[%verbose
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
+%verbose
 %output "input.c"
 
-%nterm useless1
-%nterm useless2
-%nterm useless3
-%nterm useless4
-%nterm useless5
-%nterm useless6
-%nterm useless7
-%nterm useless8
-%nterm useless9
-
 %token useful
 %%
 exp: useful;
+useless1:
+useless2:
+useless3:
 ]])
 
 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
+[[input.y: warning: 3 nonterminals useless in grammar [-Wother]
+input.y: warning: 3 rules useless in grammar [-Wother]
+input.y:11.1-8: warning: nonterminal useless in grammar: useless1 [-Wother]
+input.y:12.1-8: warning: nonterminal useless in grammar: useless2 [-Wother]
+input.y:13.1-8: warning: nonterminal useless in grammar: useless3 [-Wother]
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
 [[Nonterminals useless in grammar
-   useless1
-   useless2
-   useless3
-   useless4
-   useless5
-   useless6
-   useless7
-   useless8
-   useless9
+    useless1
+    useless2
+    useless3
+Rules useless in grammar
+    2 useless1: %empty
+    3 useless2: %empty
+    4 useless3: %empty
 ]])
 
+# Make sure the generated parser is correct.
+AT_COMPILE([input.o])
+
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -123,10 +119,15 @@
 
 AT_SETUP([Useless Rules])
 
+AT_BISON_OPTION_PUSHDEFS
 AT_KEYWORDS([report])
 
 AT_DATA([[input.y]],
-[[%verbose
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
+%verbose
 %output "input.c"
 %token useful
 %%
@@ -143,108 +144,59 @@
 ]])
 
 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';
-           ^^^
+[[input.y: warning: 9 nonterminals useless in grammar [-Wother]
+input.y: warning: 9 rules useless in grammar [-Wother]
+input.y:10.1-8: warning: nonterminal useless in grammar: useless1 [-Wother]
+   10 | useless1: '1';
+      | ^~~~~~~~
+input.y:11.1-8: warning: nonterminal useless in grammar: useless2 [-Wother]
+   11 | useless2: '2';
+      | ^~~~~~~~
+input.y:12.1-8: warning: nonterminal useless in grammar: useless3 [-Wother]
+   12 | useless3: '3';
+      | ^~~~~~~~
+input.y:13.1-8: warning: nonterminal useless in grammar: useless4 [-Wother]
+   13 | useless4: '4';
+      | ^~~~~~~~
+input.y:14.1-8: warning: nonterminal useless in grammar: useless5 [-Wother]
+   14 | useless5: '5';
+      | ^~~~~~~~
+input.y:15.1-8: warning: nonterminal useless in grammar: useless6 [-Wother]
+   15 | useless6: '6';
+      | ^~~~~~~~
+input.y:16.1-8: warning: nonterminal useless in grammar: useless7 [-Wother]
+   16 | useless7: '7';
+      | ^~~~~~~~
+input.y:17.1-8: warning: nonterminal useless in grammar: useless8 [-Wother]
+   17 | useless8: '8';
+      | ^~~~~~~~
+input.y:18.1-8: warning: nonterminal useless in grammar: useless9 [-Wother]
+   18 | 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,
 [[Nonterminals useless in grammar
-   useless1
-   useless2
-   useless3
-   useless4
-   useless5
-   useless6
-   useless7
-   useless8
-   useless9
+    useless1
+    useless2
+    useless3
+    useless4
+    useless5
+    useless6
+    useless7
+    useless8
+    useless9
 Terminals unused in grammar
-   '1'
-   '2'
-   '3'
-   '4'
-   '5'
-   '6'
-   '7'
-   '8'
-   '9'
+    '1'
+    '2'
+    '3'
+    '4'
+    '5'
+    '6'
+    '7'
+    '8'
+    '9'
 Rules useless in grammar
     2 useless1: '1'
     3 useless2: '2'
@@ -257,6 +209,95 @@
    10 useless9: '9'
 ]])
 
+# Make sure the generated parser is correct.
+AT_COMPILE([input.o])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
+
+## --------------- ##
+## Useless Parts.  ##
+## --------------- ##
+
+AT_SETUP([Useless Parts])
+
+# We used to emit code that used symbol numbers before the useless
+# symbol elimination, hence before the renumbering of the useful
+# symbols.  As a result, the evaluation of the skeleton failed because
+# it used non existing symbol numbers.  Which is the happy scenario:
+# we could use numbers of other existing symbols...
+# http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00044.html
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[input.y]],
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
+%union { void* ptr; }
+%type <ptr> used1
+%type <ptr> used2
+
+%%
+start
+ : used1
+ ;
+
+used1
+ : used2 { $$ = $1; }
+ ;
+
+unused
+ : used2
+ ;
+
+used2
+ : { $$ = YY_NULLPTR; }
+ ;
+]])
+
+AT_BISON_CHECK([[-fcaret -rall -o input.c input.y]], 0, [],
+[[input.y: warning: 1 nonterminal useless in grammar [-Wother]
+input.y: warning: 1 rule useless in grammar [-Wother]
+input.y:18.1-6: warning: nonterminal useless in grammar: unused [-Wother]
+   18 | unused
+      | ^~~~~~
+]])
+
+
+AT_CHECK([[sed -n '/^State 0/q;/^$/!p' input.output]], 0,
+[[Nonterminals useless in grammar
+    unused
+Rules useless in grammar
+    4 unused: used2
+Grammar
+    0 $accept: start $end
+    1 start: used1
+    2 used1: used2
+    3 used2: %empty
+Terminals, with rules where they appear
+    $end (0) 0
+    error (256)
+Nonterminals, with rules where they appear
+    $accept (3)
+        on left: 0
+    start (4)
+        on left: 1
+        on right: 0
+    used1 <ptr> (5)
+        on left: 2
+        on right: 1
+    used2 <ptr> (6)
+        on left: 3
+        on right: 2
+]])
+
+# Make sure the generated parser is correct.
+AT_COMPILE([input.o])
+
+AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
 
 
@@ -298,41 +339,25 @@
 ]])
 
 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
+[[not-reduced.y: warning: 2 nonterminals useless in grammar [-Wother]
+not-reduced.y: warning: 3 rules useless in grammar [-Wother]
+not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable [-Wother]
+   14 | not_reachable: useful  { /* A not reachable action. */ }
+      | ^~~~~~~~~~~~~
+not-reduced.y:17.1-14: warning: nonterminal useless in grammar: non_productive [-Wother]
+   17 | non_productive: non_productive useless_token
+      | ^~~~~~~~~~~~~~
+not-reduced.y:11.6-57: warning: rule useless in grammar [-Wother]
+   11 |    | non_productive    { /* A non productive action. */ }
+      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' not-reduced.output]], 0,
 [[Nonterminals useless in grammar
-   not_reachable
-   non_productive
+    not_reachable
+    non_productive
 Terminals unused in grammar
-   useless_token
+    useless_token
 Rules useless in grammar
     2 exp: non_productive
     3 not_reachable: useful
@@ -392,20 +417,24 @@
 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_BISON_CHECK([[-fcaret input.y]], 0, [],
+[[input.y: warning: 2 nonterminals useless in grammar [-Wother]
+input.y: warning: 3 rules useless in grammar [-Wother]
+input.y:6.1-11: warning: nonterminal useless in grammar: underivable [-Wother]
+    6 | underivable: indirection;
+      | ^~~~~~~~~~~
+input.y:7.1-11: warning: nonterminal useless in grammar: indirection [-Wother]
+    7 | indirection: underivable;
+      | ^~~~~~~~~~~
+input.y:5.15-25: warning: rule useless in grammar [-Wother]
+    5 | exp: useful | underivable;
+      |               ^~~~~~~~~~~
 ]])
 
 AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
 [[Nonterminals useless in grammar
-   underivable
-   indirection
+    underivable
+    indirection
 Rules useless in grammar
     2 exp: underivable
     3 underivable: indirection
@@ -429,8 +458,8 @@
 ]])
 
 AT_BISON_CHECK([[input.y]], 1, [],
-[[input.y: warning: 2 nonterminals useless in grammar
-input.y: warning: 2 rules useless in grammar
+[[input.y: warning: 2 nonterminals useless in grammar [-Wother]
+input.y: warning: 2 rules useless in grammar [-Wother]
 input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
 ]])
 
@@ -474,8 +503,8 @@
 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]],
+// keep it so that the parser table diff is easier to code.
+%define lr.keep-unreachable-state]],
 [[
 S: 'a' A 'a' /* rule 1 */
  | 'b' A 'b' /* rule 2 */
@@ -707,8 +736,8 @@
 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]],
+// keep it so that the parser table diff is easier to code.
+%define lr.keep-unreachable-state]],
 [[
 /* Similar to the last test case set but two states must be split.  */
 S: 'a' A 'a' /* rule 1 */
@@ -951,8 +980,8 @@
 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]],
+// keep it so that the parser table diff is easier to code.
+%define lr.keep-unreachable-state]],
 [[
 /* 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
@@ -965,7 +994,7 @@
 A: 'a' 'a' B
  ;
 B: 'a'
- | %prec 'a'
+ | %empty %prec 'a'
  ;
 c: 'a' 'a' 'b'
  | A
@@ -1089,7 +1118,7 @@
 
     4 A: 'a' 'a' . B
     5 B: . 'a'
-    6  | .  ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
+    6  | . %empty  ]AT_COND_CASE([[LALR]], [[['a', 'b']]], [[['a']]])[
 
     ]AT_COND_CASE([[canonical LR]], [['a']],
                   [[$default]])[  reduce using rule 6 (B)
@@ -1119,7 +1148,7 @@
 
     4 A: 'a' 'a' . B
     5 B: . 'a'
-    6  | .  [$end]
+    6  | . %empty  [$end]
     7 c: 'a' 'a' . 'b'
 
     'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[20]],
@@ -1182,7 +1211,7 @@
 
     4 A: 'a' 'a' . B
     5 B: . 'a'
-    6  | .  ['b']
+    6  | . %empty  ['b']
 
     'a'  shift, and go to state ]AT_COND_CASE([[canonical LR]], [[23]],
                                               [[16]])[
@@ -1218,7 +1247,7 @@
 ]])])
 
 AT_TEST_LR_TYPE([[Split During Added Lookahead Propagation]],
-[[%define lr.keep-unreachable-states]],
+[[%define lr.keep-unreachable-state]],
 [[
 /* 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.
@@ -1270,7 +1299,7 @@
 
 dnl BISON-STDERR
 [AT_COND_CASE([[LALR]],
-[[input.y: conflicts: 1 reduce/reduce
+[[input.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
 ]], [])],
 
 dnl TABLES
@@ -1521,29 +1550,29 @@
 
 
 
-## ------------------------------- ##
-## %define lr.default-reductions.  ##
-## ------------------------------- ##
+## ------------------------------ ##
+## %define lr.default-reduction.  ##
+## ------------------------------ ##
 
 # 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]],
+AT_TEST_TABLES_AND_PARSE([[no %define lr.default-reduction]],
                          [[most]], [[]],
                          [[]],
                          [$1], [$2], [[]], [$3])
-AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions most]],
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reduction most]],
                          [[most]], [[]],
-                         [[%define lr.default-reductions most]],
+                         [[%define lr.default-reduction most]],
                          [$1], [$2], [[]], [$3])
-AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions consistent]],
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reduction consistent]],
                          [[consistent]], [[]],
-                         [[%define lr.default-reductions consistent]],
+                         [[%define lr.default-reduction consistent]],
                          [$1], [$2], [[]], [$3])
-AT_TEST_TABLES_AND_PARSE([[%define lr.default-reductions accepting]],
+AT_TEST_TABLES_AND_PARSE([[%define lr.default-reduction accepting]],
                          [[accepting]], [[]],
-                         [[%define lr.default-reductions accepting]],
+                         [[%define lr.default-reduction accepting]],
                          [$1], [$2], [[]], [$3])
 ])
 
@@ -1565,8 +1594,8 @@
    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: ;
+b: %empty;
+c: %empty;
 ]],
 dnl Visit each state mentioned above.
 [['a', 'a']],
@@ -1607,8 +1636,8 @@
     1 start: a . b
     2      | a . b 'a'
     3      | a . c 'b'
-    5 b: .  [$end, 'a']
-    6 c: .  ['b']]AT_COND_CASE([[most]], [[
+    5 b: . %empty  [$end, 'a']
+    6 c: . %empty  ['b']]AT_COND_CASE([[most]], [[
 
     'b'       reduce using rule 6 (c)
     $default  reduce using rule 5 (b)]], [[
diff --git a/tests/regression.at b/tests/regression.at
index db6c3b9..a1a85e1 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -1,6 +1,6 @@
 # Bison Regressions.                               -*- Autotest -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015, 2018-2019 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
@@ -32,7 +32,7 @@
 #define YYSTYPE int *
 %}
 
-%error-verbose
+%define parse.error verbose
 
 %%
 
@@ -88,7 +88,9 @@
 # prologue, so that they can use the token definitions in it.
 
 AT_BISON_OPTION_PUSHDEFS
-AT_DATA_GRAMMAR([input.y],
+
+# Not AT_DATA_GRAMMAR, which uses %code, which is not supported by Yacc.
+AT_DATA([input.y],
 [[%{
 ]AT_YYERROR_DECLARE_EXTERN[
 ]AT_YYLEX_DECLARE_EXTERN[
@@ -130,7 +132,6 @@
 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);
@@ -141,6 +142,7 @@
   int val;
 };
 %{
+#include <stdio.h>
 void
 print_my_token (void)
 {
@@ -186,35 +188,6 @@
 AT_CLEANUP
 
 
-## ------------------ ##
-## Duplicate string.  ##
-## ------------------ ##
-
-
-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
-   string, as LE and GE below. */
-
-%token NUM
-%token LE "<="
-%token GE "<="
-
-%%
-exp: '(' exp ')' | NUM ;
-%%
-]])
-AT_BISON_OPTION_POPDEFS
-
-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
-
-
 ## ------------------- ##
 ## Rule Line Numbers.  ##
 ## ------------------- ##
@@ -263,34 +236,37 @@
 
     0 $accept: expr $end
 
-    1 $@1: /* empty */
+    1 $@1: %empty
 
     2 expr: 'a' $@1 'b'
 
-    3 $@2: /* empty */
+    3 $@2: %empty
 
     4 expr: $@2 'c'
 
 
 Terminals, with rules where they appear
 
-$end (0) 0
-'a' (97) 2
-'b' (98) 2
-'c' (99) 4
-error (256)
+    $end (0) 0
+    'a' (97) 2
+    'b' (98) 2
+    'c' (99) 4
+    error (256)
 
 
 Nonterminals, with rules where they appear
 
-$accept (6)
-    on left: 0
-expr (7)
-    on left: 2 4, on right: 0
-$@1 (8)
-    on left: 1, on right: 2
-$@2 (9)
-    on left: 3, on right: 4
+    $accept (6)
+        on left: 0
+    expr (7)
+        on left: 2 4
+        on right: 0
+    $@1 (8)
+        on left: 1
+        on right: 2
+    $@2 (9)
+        on left: 3
+        on right: 4
 
 
 State 0
@@ -373,62 +349,13 @@
 %token  <operator>  LE 134  "<="
 %left  OR  "<="
 %%
-exp: ;
+exp: %empty;
 %%
 ]])
 
-AT_BISON_CHECK([-v -o input.c input.y])
-
-AT_CLEANUP
-
-
-
-## ---------------- ##
-## Invalid inputs.  ##
-## ---------------- ##
-
-
-AT_SETUP([Invalid inputs])
-
-AT_DATA([input.y],
-[[%%
-?
-default: 'a' }
-%&
-%a-does-not-exist
-%-
-%{
-]])
-
-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
-
-
-AT_SETUP([Invalid inputs with {}])
-
-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_BISON_CHECK([-v -Wall -o input.c input.y], 0, [],
+[[input.y:3.1-5: warning: useless precedence and associativity for "||" [-Wprecedence]
+input.y:3.1-5: warning: useless precedence and associativity for "<=" [-Wprecedence]
 ]])
 
 AT_CLEANUP
@@ -443,17 +370,15 @@
 AT_SETUP([Token definitions])
 
 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>
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
 %}
-[%error-verbose
+[%define parse.error verbose
 %token MYEOF 0 "end of file"
-%token 'a' "a"
+%token 'a' "a"  // Bison managed, when fed with '%token 'f' "f"' to #define 'f'!
 %token B_TOKEN "b"
 %token C_TOKEN 'c'
 %token 'd' D_TOKEN
@@ -464,12 +389,7 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE([{ SPECIAL }])[
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
@@ -477,18 +397,18 @@
 # 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??!"
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+[[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother]
+   22 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+      |        ^~~~~~~
+input.y:21.8-14:     previous declaration
+   21 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+      |        ^~~~~~~
+input.y:22.16-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother]
+   22 | %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
@@ -498,7 +418,7 @@
 AT_DATA([experr],
 [[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!", expecting a
 ]])
-AT_PARSER_CHECK([./input], 1, [], [experr])
+AT_PARSER_CHECK([input], 1, [], [experr])
 AT_CLEANUP
 
 
@@ -546,7 +466,7 @@
 AT_KEYWORDS([report])
 
 AT_DATA([input.y],
-[[%token	undef_id_tok const_id_tok
+[[%token        undef_id_tok const_id_tok
 
 %start CONST_DEC_PART
 
@@ -556,12 +476,12 @@
         ;
 
 CONST_DEC_LIST:
-	  CONST_DEC
+          CONST_DEC
         | CONST_DEC_LIST CONST_DEC
         ;
 
 CONST_DEC:
-	  { } undef_id_tok '=' const_id_tok ';'
+          { } undef_id_tok '=' const_id_tok ';'
         ;
 %%
 ]])
@@ -577,33 +497,37 @@
     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 ';'
 
 
 Terminals, with rules where they appear
 
-$end (0) 0
-';' (59) 5
-'=' (61) 5
-error (256)
-undef_id_tok (258) 5
-const_id_tok (259) 5
+    $end (0) 0
+    ';' (59) 5
+    '=' (61) 5
+    error (256)
+    undef_id_tok (258) 5
+    const_id_tok (259) 5
 
 
 Nonterminals, with rules where they appear
 
-$accept (7)
-    on left: 0
-CONST_DEC_PART (8)
-    on left: 1, on right: 0
-CONST_DEC_LIST (9)
-    on left: 2 3, on right: 1 3
-CONST_DEC (10)
-    on left: 5, on right: 2 3
-$@1 (11)
-    on left: 4, on right: 5
+    $accept (7)
+        on left: 0
+    CONST_DEC_PART (8)
+        on left: 1
+        on right: 0
+    CONST_DEC_LIST (9)
+        on left: 2 3
+        on right: 1 3
+    CONST_DEC (10)
+        on left: 5
+        on right: 2 3
+    $@1 (11)
+        on left: 4
+        on right: 5
 
 
 State 0
@@ -725,7 +649,7 @@
 AT_DATA([input.y],
 [[%%
 statement:  struct_stat;
-struct_stat:  /* empty. */ | if else;
+struct_stat:  %empty | if else;
 if: "if" "const" "then" statement;
 else: "else" statement;
 %%
@@ -737,7 +661,7 @@
 [sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c]
 
 AT_CHECK([[cat tables.c]], 0,
-[[static const yytype_uint8 yytranslate[] =
+[[static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -767,55 +691,38 @@
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        5,     6
 };
-static const yytype_uint8 yyprhs[] =
-{
-       0,     0,     3,     5,     6,     9,    14
-};
-static const yytype_int8 yyrhs[] =
-{
-       8,     0,    -1,     9,    -1,    -1,    10,    11,    -1,     3,
-       4,     5,     8,    -1,     6,     8,    -1
-};
-static const yytype_uint8 yyrline[] =
+static const yytype_int8 yyrline[] =
 {
        0,     2,     2,     3,     3,     4,     5
 };
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "\"if\"", "\"const\"", "\"then\"",
-  "\"else\"", "$accept", "statement", "struct_stat", "if", "else", YY_NULL
+  "\"else\"", "$accept", "statement", "struct_stat", "if", "else", YY_NULLPTR
 };
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261
 };
-static const yytype_uint8 yyr1[] =
-{
-       0,     7,     8,     9,     9,    10,    11
-};
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     0,     2,     4,     2
-};
-static const yytype_uint8 yydefact[] =
-{
-       3,     0,     0,     2,     0,     0,     1,     3,     4,     3,
-       6,     5
-};
-static const yytype_int8 yydefgoto[] =
-{
-      -1,     2,     3,     4,     8
-};
 static const yytype_int8 yypact[] =
 {
       -2,    -1,     4,    -8,     0,     2,    -8,    -2,    -8,    -2,
       -8,    -8
 };
+static const yytype_int8 yydefact[] =
+{
+       3,     0,     0,     2,     0,     0,     1,     3,     4,     3,
+       6,     5
+};
 static const yytype_int8 yypgoto[] =
 {
       -8,    -7,    -8,    -8,    -8
 };
-static const yytype_uint8 yytable[] =
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     2,     3,     4,     8
+};
+static const yytype_int8 yytable[] =
 {
       10,     1,    11,     5,     6,     0,     7,     9
 };
@@ -823,11 +730,19 @@
 {
        7,     3,     9,     4,     0,    -1,     6,     5
 };
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
 {
        0,     3,     8,     9,    10,     4,     0,     6,    11,     5,
        8,     8
 };
+static const yytype_int8 yyr1[] =
+{
+       0,     7,     8,     9,     9,    10,    11
+};
+static const yytype_int8 yyr2[] =
+{
+       0,     2,     1,     0,     2,     4,     2
+};
 ]])
 
 AT_CLEANUP
@@ -853,9 +768,8 @@
 }
 $1
 %token ARROW INVALID NUMBER STRING DATA
-%defines
 %verbose
-%error-verbose
+%define parse.error verbose
 /* Grammar follows */
 %%
 line: header body
@@ -883,7 +797,7 @@
    | INVALID
    ;
 
-body: /* empty */
+body: %empty
    | body member
    ;
 
@@ -897,23 +811,7 @@
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE([":"])[
-]AT_LALR1_CC_IF(
-[int
-yyparse ()
-{
-  yy::parser parser;
-#if YYDEBUG
-  parser.set_debug_level (YYDEBUG);
-#endif
-  return parser.parse ();
-}
-])[
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 ])# _AT_DATA_DANCER_Y
 
@@ -926,7 +824,7 @@
 AT_BISON_OPTION_PUSHDEFS([$1])
 _AT_DATA_DANCER_Y([$1])
 AT_FULL_COMPILE([dancer])
-AT_PARSER_CHECK([./dancer], 1, [],
+AT_PARSER_CHECK([dancer], 1, [],
 [syntax error, unexpected ':'
 ])
 AT_BISON_OPTION_POPDEFS
@@ -947,21 +845,19 @@
 # --------------------------------
 m4_define([_AT_DATA_EXPECT2_Y],
 [AT_DATA_GRAMMAR([expect2.y],
-[[%{
-static int yylex (]AT_LALR1_CC_IF([int *], [void]));
-AT_LALR1_CC_IF([],
-[[#include <stdio.h>
-#include <stdlib.h>
+[%{
+static int yylex (AT_LALR1_CC_IF([int *], [void]));
+AT_LALR1_CC_IF([[#include <cstdlib>]],
+[[
 ]AT_YYERROR_DECLARE])[
 %}
 $1
-%defines
-%error-verbose
+%define parse.error verbose
 %token A 1000
 %token B
 
 %%
-program: /* empty */
+program: %empty
  | program e ';'
  | program error ';';
 
@@ -992,12 +888,7 @@
   assert (toknum < sizeof tokens / sizeof *tokens);
   return tokens[toknum++];
 }
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 ])# _AT_DATA_EXPECT2_Y
 
@@ -1010,7 +901,7 @@
 AT_BISON_OPTION_PUSHDEFS([$1])
 _AT_DATA_EXPECT2_Y([$1])
 AT_FULL_COMPILE([expect2])
-AT_PARSER_CHECK([./expect2], 1, [],
+AT_PARSER_CHECK([expect2], 1, [],
 [syntax error, unexpected '+', expecting A or B
 ])
 AT_BISON_OPTION_POPDEFS
@@ -1031,44 +922,36 @@
 
 # Bison once mistook braced code in a declaration in the rules section to be a
 # rule action.
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([input.y],
 [[%{
-#include <stdio.h>
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
 %}
-
-%error-verbose
-
+%debug
+%define parse.error verbose
 %%
 
 start:
   {
     printf ("Bison would once convert this action to a midrule because of the"
-	    " subsequent braced code.\n");
+            " subsequent braced code.\n");
   }
   ;
 
 %destructor { fprintf (stderr, "DESTRUCTOR\n"); } 'a';
-%printer { fprintf (yyoutput, "PRINTER"); } 'a';
+%printer { fprintf (yyo, "PRINTER"); } 'a';
 
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["a"])[
-
-int
-main (void)
-{
-  yydebug = 1;
-  return !yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-t -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([input --debug], 1,
 [[Bison would once convert this action to a midrule because of the subsequent braced code.
 ]],
 [[Starting parse
@@ -1107,7 +990,7 @@
 %token 'a' "A";
 ]])
 
-AT_BISON_CHECK([-t -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
 
 AT_CLEANUP
 
@@ -1164,15 +1047,14 @@
 # we lost this in Bison 1.50.
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
-[[%{
-  #include <stdio.h>
+[[%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
-
-%error-verbose
+}
+%define parse.error verbose
+%token TK_ALIAS 3 "tok alias"
 %right END 0
-%left TK1 1 TK2 2 "tok alias" 3
+%left TK1 1 TK2 2 "tok alias"
 
 %%
 
@@ -1189,21 +1071,17 @@
 
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE([{ 1, 2, 3, 0 }])[
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
-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_BISON_CHECK([[-Wall -o input.c input.y]], [[0]],,
+[[input.y:24.5-19: warning: rule useless in parser due to conflicts [-Wother]
+input.y:28.5-19: warning: rule useless in parser due to conflicts [-Wother]
+input.y:18.1-5: warning: useless precedence and associativity for TK1 [-Wprecedence]
 ]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]])
+AT_PARSER_CHECK([[input]])
+AT_BISON_OPTION_POPDEFS
 
 AT_CLEANUP
 
@@ -1218,8 +1096,9 @@
 
 AT_SETUP([[parse-gram.y: LALR = IELR]])
 
-# Avoid differences in synclines by telling bison that the output files
-# have the same name.
+# Avoid tests/bison's dark magic by processing a local copy of the
+# grammar.  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]
@@ -1233,22 +1112,21 @@
 
 
 
-## --------------------------------------- ##
-## %error-verbose and YYSTACK_USE_ALLOCA.  ##
-## --------------------------------------- ##
+## -------------------------------------------- ##
+## parse.error=verbose and YYSTACK_USE_ALLOCA.  ##
+## -------------------------------------------- ##
 
-AT_SETUP([[%error-verbose and YYSTACK_USE_ALLOCA]])
+AT_SETUP([[parse.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
+%define parse.error verbose
 
 %%
 
@@ -1281,21 +1159,17 @@
 %%
 
 ]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.  */
+  /* 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_MAIN_DEFINE[
 ]])
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([[-o input.c input.y]])
 AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], [[1]], [],
+AT_PARSER_CHECK([[input]], [[1]], [],
 [[syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
 syntax error, unexpected $end, expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B
 ]])
@@ -1304,9 +1178,9 @@
 
 
 
-## ------------------------- ##
-## %error-verbose overflow.  ##
-## ------------------------- ##
+## ------------------------------ ##
+## parse.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
@@ -1316,11 +1190,11 @@
 # 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_SETUP([[parse.error=verbose overflow]])
+
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([input.y],
 [[%code {
-  #include <stdio.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 
@@ -1341,7 +1215,7 @@
   #define YYMAXDEPTH 100
 }
 
-%error-verbose
+%define parse.error verbose
 
 %%
 
@@ -1389,8 +1263,8 @@
 %%
 
 ]AT_YYERROR_DEFINE[
-/* Induce two syntax error messages (which requires full error
-   recovery by shifting 3 tokens).  */
+  /* Induce two syntax error messages (which requires full error
+     recovery by shifting 3 tokens).  */
 ]AT_YYLEX_DEFINE(["abc"])[
 int
 main (void)
@@ -1412,7 +1286,7 @@
 [CFLAGS="$NO_WERROR_CFLAGS"]
 AT_COMPILE([[input]])
 
-AT_PARSER_CHECK([[./input]], [[2]], [],
+AT_PARSER_CHECK([[input]], [[2]], [],
 [[syntax error, unexpected 'a', expecting 123456789112345678921234567893123456789412345678951234567896123A or 123456789112345678921234567893123456789412345678951234567896123B or 123456789112345678921234567893123456789412345678951234567896123C
 syntax error
 memory exhausted
@@ -1427,22 +1301,23 @@
 ## ------------------------ ##
 
 AT_SETUP([[LAC: Exploratory stack]])
+AT_KEYWORDS([lac])
 
 m4_pushdef([AT_LAC_CHECK], [
 
-AT_BISON_OPTION_PUSHDEFS([$1])
+AT_BISON_OPTION_PUSHDEFS([%debug $1])
 
 AT_DATA_GRAMMAR([input.y],
 [[%code {
-  #include <stdio.h>
+#include <stdio.h> /* printf */
   ]AT_YYERROR_DECLARE[
-  int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[);
+  ]AT_YYLEX_DECLARE[
 }
-
+%debug
 ]$1[
-%error-verbose
+%define parse.error verbose
 %token 'c'
-
+%expect 21
 %%
 
 // default reductions in inconsistent states
@@ -1451,35 +1326,23 @@
 //       ^                     ^                               ^
 // LAC reallocs
 
-A: 'a' | /*empty*/ { printf ("inconsistent default reduction\n"); } ;
+A: 'a' | %empty { printf ("inconsistent default reduction\n"); } ;
 B: 'b' ;
-C: /*empty*/ { printf ("consistent default reduction\n"); } ;
+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++;
-}
+]AT_YYLEX_DEFINE(["bbbbc"])[
 
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
-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]])
+AT_FULL_COMPILE([[input]], [], [], [],
+                [[-Dparse.lac=full]AT_C_IF([ \
+                 -Dparse.lac.es-capacity-initial=1 \
+                 -Dparse.lac.memory-trace=full])])
+
+AT_PARSER_CHECK([[input --debug > stdout.txt 2> stderr.txt]], [[1]])
 
 # Make sure syntax error doesn't forget that 'a' is expected.  It would
 # be forgotten without lookahead correction.
@@ -1489,18 +1352,19 @@
 
 # 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]])
+AT_PERL_CHECK([[-0777 -ne 'print s/inconsistent default reduction//g;' stdout.txt]],
+              [[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]])
+AT_PERL_CHECK([[-0777 -ne 'print s/\bconsistent default reduction//g;' stdout.txt]],
+              [[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_C_IF([[
+  # Check number of reallocs to be sure reallocated memory isn't somehow
+  # lost between LAC invocations.
+  AT_PERL_CHECK([[-0777 -ne 'print s/\(realloc//g;' < stderr.txt]], [[0]], [[3]])
+]])[
 
 AT_BISON_OPTION_POPDEFS
 ])
@@ -1510,6 +1374,8 @@
 AT_LAC_CHECK([[%define api.push-pull both]])
 AT_LAC_CHECK([[%define api.push-pull both %define api.pure]])
 
+AT_LAC_CHECK([[%skeleton "lalr1.cc"]])
+
 m4_popdef([AT_LAC_CHECK])
 
 AT_CLEANUP
@@ -1521,46 +1387,39 @@
 ## ------------------------ ##
 
 AT_SETUP([[LAC: Memory exhaustion]])
+AT_KEYWORDS([lac])
 
 m4_pushdef([AT_LAC_CHECK],
-[AT_BISON_OPTION_PUSHDEFS
+[AT_BISON_OPTION_PUSHDEFS([%debug])
 AT_DATA_GRAMMAR([input.y],
 [[%code {
-  #include <stdio.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   #define YYMAXDEPTH 8
 }
-
-%error-verbose
-
+%debug
+%define parse.error verbose
+%expect 8
 %%
 
 S: A A A A A A A A A ;
-A: /*empty*/ | 'a' ;
+A: %empty | 'a' ;
 
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["$1"])[
-int
-main (void)
-{
-  yydebug = 1;
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
-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_FULL_COMPILE([input], [], [], [],
+                [[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1]])
 AT_COMPILE([[input]])
 AT_BISON_OPTION_POPDEFS
 ])
 
 # Check for memory exhaustion during parsing.
 AT_LAC_CHECK([])
-AT_PARSER_CHECK([[./input]], [[2]], [],
+AT_PARSER_CHECK([[input --debug]], [[2]], [],
 [[Starting parse
 Entering state 0
 Reading a token: Now at end of input.
@@ -1574,7 +1433,7 @@
 # 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]], [],
+AT_PARSER_CHECK([[input --debug]], [[2]], [],
 [[Starting parse
 Entering state 0
 Reading a token: Next token is token $undefined ()
@@ -1605,38 +1464,34 @@
 m4_pushdef([AT_TEST],
 [AT_SETUP([[Lex and parse params: $1]])
 
+## FIXME: Improve parsing of parse-param.
 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
+[[%locations
 %skeleton "$1"
 %union { int ival; }
 %parse-param { int x }
 // Spaces, tabs, and new lines.
 %parse-param { @&t@
-	 int y	 @&t@
+@tb@ int y@tb@ @&t@
          @&t@
  @&t@
 }
 
 %{
-#include <stdio.h>
-#include <stdlib.h>
-
+#include <stdio.h> /* printf. */
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 %}
 
 %%
-exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
+exp: 'a' { printf ("x: %d, y: %d\n", x, y); };
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["a"])[
 
-]AT_SKEL_CC_IF(
+]AT_CXX_IF(
 [int
 yyparse (int x, int y)
 {
@@ -1648,12 +1503,12 @@
 int
 main (void)
 {
-  return !!yyparse(1, 2);
+  return yyparse(1, 2);
 }
 ]])
 
 AT_FULL_COMPILE([input])
-AT_PARSER_CHECK([./input], 0, [[x: 1, y: 2
+AT_PARSER_CHECK([input], 0, [[x: 1, y: 2
 ]])
 AT_BISON_OPTION_POPDEFS
 
@@ -1667,3 +1522,33 @@
 AT_TEST([glr.cc])
 
 m4_popdef([AT_TEST])
+
+
+## ----------------------- ##
+## stdio.h is not needed.  ##
+## ----------------------- ##
+
+# At some point, by accident, yy_location_print_ was using fprintf and
+# FILE which are from stdio.h, which we do not require.
+AT_SETUP([[stdio.h is not needed]])
+
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA_GRAMMAR([input.y],
+[[%locations
+%code
+{
+  static int yylex (void) { return 0; }
+  static void yyerror (const char* msg) { (void) msg; }
+}
+%%
+exp: {}
+%%
+]AT_MAIN_DEFINE[
+]])
+
+AT_FULL_COMPILE([input])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
diff --git a/tests/report.at b/tests/report.at
new file mode 100644
index 0000000..ebc80e1
--- /dev/null
+++ b/tests/report.at
@@ -0,0 +1,1142 @@
+# Bison Reports.                               -*- Autotest -*-
+
+# Copyright (C) 2018-2019 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([[Test reports.]])
+
+## --------- ##
+## Reports.  ##
+## --------- ##
+
+AT_SETUP([Reports])
+
+AT_KEYWORDS([report])
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([input.yy],
+[[%token
+  END  0  "end of file"
+  ASSIGN  ":="
+  INCR    "incr"
+;
+
+%token <std::string> IDENTIFIER "identifier"
+%type <std::string> id
+%token <int> NUMBER "number"
+%type  <int> exp
+
+%%
+%start unit;
+unit: assignments exp  { driver.result = $2; };
+
+assignments:
+  %empty                 {}
+| assignments assignment {};
+
+assignment:
+  id ":=" exp { driver.variables[$id] = $exp; };
+
+id:
+  "identifier";
+
+exp:
+  "incr" exp <int>{ $$ = 1; } <int>{ $$ = 10; } exp   { $$ = $2 + $3 + $4 + $5; }
+| "(" exp ")"   { std::swap ($$, $2); }
+| "identifier"  { $$ = driver.variables[$1]; }
+| "number"      { std::swap ($$, $1); };
+]])
+
+AT_BISON_CHECK([-o input.cc -v --graph=input.gv --xml input.yy])
+
+# Check the contents of the report.
+AT_CHECK([cat input.output], [],
+[[Grammar
+
+    0 $accept: unit "end of file"
+
+    1 unit: assignments exp
+
+    2 assignments: %empty
+    3            | assignments assignment
+
+    4 assignment: id ":=" exp
+
+    5 id: "identifier"
+
+    6 @1: %empty
+
+    7 @2: %empty
+
+    8 exp: "incr" exp @1 @2 exp
+    9    | "(" exp ")"
+   10    | "identifier"
+   11    | "number"
+
+
+Terminals, with rules where they appear
+
+    "end of file" (0) 0
+    error (256)
+    ":=" (258) 4
+    "incr" (259) 8
+    "identifier" <std::string> (260) 5 10
+    "number" <int> (261) 11
+    "(" (262) 9
+    ")" (263) 9
+
+
+Nonterminals, with rules where they appear
+
+    $accept (9)
+        on left: 0
+    unit (10)
+        on left: 1
+        on right: 0
+    assignments (11)
+        on left: 2 3
+        on right: 1 3
+    assignment (12)
+        on left: 4
+        on right: 3
+    id <std::string> (13)
+        on left: 5
+        on right: 4
+    exp <int> (14)
+        on left: 8 9 10 11
+        on right: 1 4 8 9
+    @1 <int> (15)
+        on left: 6
+        on right: 8
+    @2 <int> (16)
+        on left: 7
+        on right: 8
+
+
+State 0
+
+    0 $accept: . unit "end of file"
+
+    $default  reduce using rule 2 (assignments)
+
+    unit         go to state 1
+    assignments  go to state 2
+
+
+State 1
+
+    0 $accept: unit . "end of file"
+
+    "end of file"  shift, and go to state 3
+
+
+State 2
+
+    1 unit: assignments . exp
+    3 assignments: assignments . assignment
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 5
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    assignment  go to state 8
+    id          go to state 9
+    exp         go to state 10
+
+
+State 3
+
+    0 $accept: unit "end of file" .
+
+    $default  accept
+
+
+State 4
+
+    8 exp: "incr" . exp @1 @2 exp
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 12
+
+
+State 5
+
+    5 id: "identifier" .
+   10 exp: "identifier" .
+
+    "end of file"  reduce using rule 10 (exp)
+    $default       reduce using rule 5 (id)
+
+
+State 6
+
+   11 exp: "number" .
+
+    $default  reduce using rule 11 (exp)
+
+
+State 7
+
+    9 exp: "(" . exp ")"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 13
+
+
+State 8
+
+    3 assignments: assignments assignment .
+
+    $default  reduce using rule 3 (assignments)
+
+
+State 9
+
+    4 assignment: id . ":=" exp
+
+    ":="  shift, and go to state 14
+
+
+State 10
+
+    1 unit: assignments exp .
+
+    $default  reduce using rule 1 (unit)
+
+
+State 11
+
+   10 exp: "identifier" .
+
+    $default  reduce using rule 10 (exp)
+
+
+State 12
+
+    8 exp: "incr" exp . @1 @2 exp
+
+    $default  reduce using rule 6 (@1)
+
+    @1  go to state 15
+
+
+State 13
+
+    9 exp: "(" exp . ")"
+
+    ")"  shift, and go to state 16
+
+
+State 14
+
+    4 assignment: id ":=" . exp
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 17
+
+
+State 15
+
+    8 exp: "incr" exp @1 . @2 exp
+
+    $default  reduce using rule 7 (@2)
+
+    @2  go to state 18
+
+
+State 16
+
+    9 exp: "(" exp ")" .
+
+    $default  reduce using rule 9 (exp)
+
+
+State 17
+
+    4 assignment: id ":=" exp .
+
+    $default  reduce using rule 4 (assignment)
+
+
+State 18
+
+    8 exp: "incr" exp @1 @2 . exp
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 19
+
+
+State 19
+
+    8 exp: "incr" exp @1 @2 exp .
+
+    $default  reduce using rule 8 (exp)
+]])
+
+
+# Now generate verbose reports.
+AT_BISON_CHECK([-o input.cc -rall --graph=input.gv --xml input.yy])
+
+# Check the contents of the report.
+AT_CHECK([cat input.output], [],
+[[Grammar
+
+    0 $accept: unit "end of file"
+
+    1 unit: assignments exp
+
+    2 assignments: %empty
+    3            | assignments assignment
+
+    4 assignment: id ":=" exp
+
+    5 id: "identifier"
+
+    6 @1: %empty
+
+    7 @2: %empty
+
+    8 exp: "incr" exp @1 @2 exp
+    9    | "(" exp ")"
+   10    | "identifier"
+   11    | "number"
+
+
+Terminals, with rules where they appear
+
+    "end of file" (0) 0
+    error (256)
+    ":=" (258) 4
+    "incr" (259) 8
+    "identifier" <std::string> (260) 5 10
+    "number" <int> (261) 11
+    "(" (262) 9
+    ")" (263) 9
+
+
+Nonterminals, with rules where they appear
+
+    $accept (9)
+        on left: 0
+    unit (10)
+        on left: 1
+        on right: 0
+    assignments (11)
+        on left: 2 3
+        on right: 1 3
+    assignment (12)
+        on left: 4
+        on right: 3
+    id <std::string> (13)
+        on left: 5
+        on right: 4
+    exp <int> (14)
+        on left: 8 9 10 11
+        on right: 1 4 8 9
+    @1 <int> (15)
+        on left: 6
+        on right: 8
+    @2 <int> (16)
+        on left: 7
+        on right: 8
+
+
+State 0
+
+    0 $accept: . unit "end of file"
+    1 unit: . assignments exp
+    2 assignments: . %empty
+    3            | . assignments assignment
+
+    $default  reduce using rule 2 (assignments)
+
+    unit         go to state 1
+    assignments  go to state 2
+
+
+State 1
+
+    0 $accept: unit . "end of file"
+
+    "end of file"  shift, and go to state 3
+
+
+State 2
+
+    1 unit: assignments . exp
+    3 assignments: assignments . assignment
+    4 assignment: . id ":=" exp
+    5 id: . "identifier"
+    8 exp: . "incr" exp @1 @2 exp
+    9    | . "(" exp ")"
+   10    | . "identifier"
+   11    | . "number"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 5
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    assignment  go to state 8
+    id          go to state 9
+    exp         go to state 10
+
+
+State 3
+
+    0 $accept: unit "end of file" .
+
+    $default  accept
+
+
+State 4
+
+    8 exp: . "incr" exp @1 @2 exp
+    8    | "incr" . exp @1 @2 exp
+    9    | . "(" exp ")"
+   10    | . "identifier"
+   11    | . "number"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 12
+
+
+State 5
+
+    5 id: "identifier" .  [":="]
+   10 exp: "identifier" .  ["end of file"]
+
+    "end of file"  reduce using rule 10 (exp)
+    $default       reduce using rule 5 (id)
+
+
+State 6
+
+   11 exp: "number" .
+
+    $default  reduce using rule 11 (exp)
+
+
+State 7
+
+    8 exp: . "incr" exp @1 @2 exp
+    9    | . "(" exp ")"
+    9    | "(" . exp ")"
+   10    | . "identifier"
+   11    | . "number"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 13
+
+
+State 8
+
+    3 assignments: assignments assignment .
+
+    $default  reduce using rule 3 (assignments)
+
+
+State 9
+
+    4 assignment: id . ":=" exp
+
+    ":="  shift, and go to state 14
+
+
+State 10
+
+    1 unit: assignments exp .
+
+    $default  reduce using rule 1 (unit)
+
+
+State 11
+
+   10 exp: "identifier" .
+
+    $default  reduce using rule 10 (exp)
+
+
+State 12
+
+    6 @1: . %empty
+    8 exp: "incr" exp . @1 @2 exp
+
+    $default  reduce using rule 6 (@1)
+
+    @1  go to state 15
+
+
+State 13
+
+    9 exp: "(" exp . ")"
+
+    ")"  shift, and go to state 16
+
+
+State 14
+
+    4 assignment: id ":=" . exp
+    8 exp: . "incr" exp @1 @2 exp
+    9    | . "(" exp ")"
+   10    | . "identifier"
+   11    | . "number"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 17
+
+
+State 15
+
+    7 @2: . %empty
+    8 exp: "incr" exp @1 . @2 exp
+
+    $default  reduce using rule 7 (@2)
+
+    @2  go to state 18
+
+
+State 16
+
+    9 exp: "(" exp ")" .
+
+    $default  reduce using rule 9 (exp)
+
+
+State 17
+
+    4 assignment: id ":=" exp .
+
+    $default  reduce using rule 4 (assignment)
+
+
+State 18
+
+    8 exp: . "incr" exp @1 @2 exp
+    8    | "incr" exp @1 @2 . exp
+    9    | . "(" exp ")"
+   10    | . "identifier"
+   11    | . "number"
+
+    "incr"        shift, and go to state 4
+    "identifier"  shift, and go to state 11
+    "number"      shift, and go to state 6
+    "("           shift, and go to state 7
+
+    exp  go to state 19
+
+
+State 19
+
+    8 exp: "incr" exp @1 @2 exp .
+
+    $default  reduce using rule 8 (exp)
+]])
+
+
+
+AT_CHECK([sed -e '1s/GNU Bison .*\.$/GNU Bison VERSION./' input.gv], [],
+[[// Generated by GNU Bison VERSION.
+// Report bugs to <bug-bison@gnu.org>.
+// Home page: <http://www.gnu.org/software/bison/>.
+
+digraph "input.yy"
+{
+  node [fontname = courier, shape = box, colorscheme = paired6]
+  edge [fontname = courier]
+
+  0 [label="State 0\n\l  0 $accept: . unit \"end of file\"\l  1 unit: . assignments exp\l  2 assignments: . %empty\l  3            | . assignments assignment\l"]
+  0 -> 1 [style=dashed label="unit"]
+  0 -> 2 [style=dashed label="assignments"]
+  0 -> "0R2" [style=solid]
+ "0R2" [label="R2", fillcolor=3, shape=diamond, style=filled]
+  1 [label="State 1\n\l  0 $accept: unit . \"end of file\"\l"]
+  1 -> 3 [style=solid label="\"end of file\""]
+  2 [label="State 2\n\l  1 unit: assignments . exp\l  3 assignments: assignments . assignment\l  4 assignment: . id \":=\" exp\l  5 id: . \"identifier\"\l  8 exp: . \"incr\" exp @1 @2 exp\l  9    | . \"(\" exp \")\"\l 10    | . \"identifier\"\l 11    | . \"number\"\l"]
+  2 -> 4 [style=solid label="\"incr\""]
+  2 -> 5 [style=solid label="\"identifier\""]
+  2 -> 6 [style=solid label="\"number\""]
+  2 -> 7 [style=solid label="\"(\""]
+  2 -> 8 [style=dashed label="assignment"]
+  2 -> 9 [style=dashed label="id"]
+  2 -> 10 [style=dashed label="exp"]
+  3 [label="State 3\n\l  0 $accept: unit \"end of file\" .\l"]
+  3 -> "3R0" [style=solid]
+ "3R0" [label="Acc", fillcolor=1, shape=diamond, style=filled]
+  4 [label="State 4\n\l  8 exp: . \"incr\" exp @1 @2 exp\l  8    | \"incr\" . exp @1 @2 exp\l  9    | . \"(\" exp \")\"\l 10    | . \"identifier\"\l 11    | . \"number\"\l"]
+  4 -> 4 [style=solid label="\"incr\""]
+  4 -> 11 [style=solid label="\"identifier\""]
+  4 -> 6 [style=solid label="\"number\""]
+  4 -> 7 [style=solid label="\"(\""]
+  4 -> 12 [style=dashed label="exp"]
+  5 [label="State 5\n\l  5 id: \"identifier\" .  [\":=\"]\l 10 exp: \"identifier\" .  [\"end of file\"]\l"]
+  5 -> "5R5" [style=solid]
+ "5R5" [label="R5", fillcolor=3, shape=diamond, style=filled]
+  5 -> "5R10" [label="[\"end of file\"]", style=solid]
+ "5R10" [label="R10", fillcolor=3, shape=diamond, style=filled]
+  6 [label="State 6\n\l 11 exp: \"number\" .\l"]
+  6 -> "6R11" [style=solid]
+ "6R11" [label="R11", fillcolor=3, shape=diamond, style=filled]
+  7 [label="State 7\n\l  8 exp: . \"incr\" exp @1 @2 exp\l  9    | . \"(\" exp \")\"\l  9    | \"(\" . exp \")\"\l 10    | . \"identifier\"\l 11    | . \"number\"\l"]
+  7 -> 4 [style=solid label="\"incr\""]
+  7 -> 11 [style=solid label="\"identifier\""]
+  7 -> 6 [style=solid label="\"number\""]
+  7 -> 7 [style=solid label="\"(\""]
+  7 -> 13 [style=dashed label="exp"]
+  8 [label="State 8\n\l  3 assignments: assignments assignment .\l"]
+  8 -> "8R3" [style=solid]
+ "8R3" [label="R3", fillcolor=3, shape=diamond, style=filled]
+  9 [label="State 9\n\l  4 assignment: id . \":=\" exp\l"]
+  9 -> 14 [style=solid label="\":=\""]
+  10 [label="State 10\n\l  1 unit: assignments exp .\l"]
+  10 -> "10R1" [style=solid]
+ "10R1" [label="R1", fillcolor=3, shape=diamond, style=filled]
+  11 [label="State 11\n\l 10 exp: \"identifier\" .\l"]
+  11 -> "11R10" [style=solid]
+ "11R10" [label="R10", fillcolor=3, shape=diamond, style=filled]
+  12 [label="State 12\n\l  6 @1: . %empty\l  8 exp: \"incr\" exp . @1 @2 exp\l"]
+  12 -> 15 [style=dashed label="@1"]
+  12 -> "12R6" [style=solid]
+ "12R6" [label="R6", fillcolor=3, shape=diamond, style=filled]
+  13 [label="State 13\n\l  9 exp: \"(\" exp . \")\"\l"]
+  13 -> 16 [style=solid label="\")\""]
+  14 [label="State 14\n\l  4 assignment: id \":=\" . exp\l  8 exp: . \"incr\" exp @1 @2 exp\l  9    | . \"(\" exp \")\"\l 10    | . \"identifier\"\l 11    | . \"number\"\l"]
+  14 -> 4 [style=solid label="\"incr\""]
+  14 -> 11 [style=solid label="\"identifier\""]
+  14 -> 6 [style=solid label="\"number\""]
+  14 -> 7 [style=solid label="\"(\""]
+  14 -> 17 [style=dashed label="exp"]
+  15 [label="State 15\n\l  7 @2: . %empty\l  8 exp: \"incr\" exp @1 . @2 exp\l"]
+  15 -> 18 [style=dashed label="@2"]
+  15 -> "15R7" [style=solid]
+ "15R7" [label="R7", fillcolor=3, shape=diamond, style=filled]
+  16 [label="State 16\n\l  9 exp: \"(\" exp \")\" .\l"]
+  16 -> "16R9" [style=solid]
+ "16R9" [label="R9", fillcolor=3, shape=diamond, style=filled]
+  17 [label="State 17\n\l  4 assignment: id \":=\" exp .\l"]
+  17 -> "17R4" [style=solid]
+ "17R4" [label="R4", fillcolor=3, shape=diamond, style=filled]
+  18 [label="State 18\n\l  8 exp: . \"incr\" exp @1 @2 exp\l  8    | \"incr\" exp @1 @2 . exp\l  9    | . \"(\" exp \")\"\l 10    | . \"identifier\"\l 11    | . \"number\"\l"]
+  18 -> 4 [style=solid label="\"incr\""]
+  18 -> 11 [style=solid label="\"identifier\""]
+  18 -> 6 [style=solid label="\"number\""]
+  18 -> 7 [style=solid label="\"(\""]
+  18 -> 19 [style=dashed label="exp"]
+  19 [label="State 19\n\l  8 exp: \"incr\" exp @1 @2 exp .\l"]
+  19 -> "19R8" [style=solid]
+ "19R8" [label="R8", fillcolor=3, shape=diamond, style=filled]
+}
+]])
+
+
+AT_CHECK([[sed -e 's/bison-xml-report version="[^"]*"/bison-xml-report version="VERSION"/g' input.xml]], [],
+[[<?xml version="1.0"?>
+
+<bison-xml-report version="VERSION" bug-report="bug-bison@gnu.org" url="http://www.gnu.org/software/bison/">
+
+  <filename>input.yy</filename>
+
+  <grammar>
+    <rules>
+      <rule number="0" usefulness="useful">
+        <lhs>$accept</lhs>
+        <rhs>
+          <symbol>unit</symbol>
+          <symbol>&quot;end of file&quot;</symbol>
+        </rhs>
+      </rule>
+      <rule number="1" usefulness="useful">
+        <lhs>unit</lhs>
+        <rhs>
+          <symbol>assignments</symbol>
+          <symbol>exp</symbol>
+        </rhs>
+      </rule>
+      <rule number="2" usefulness="useful">
+        <lhs>assignments</lhs>
+        <rhs>
+          <empty/>
+        </rhs>
+      </rule>
+      <rule number="3" usefulness="useful">
+        <lhs>assignments</lhs>
+        <rhs>
+          <symbol>assignments</symbol>
+          <symbol>assignment</symbol>
+        </rhs>
+      </rule>
+      <rule number="4" usefulness="useful">
+        <lhs>assignment</lhs>
+        <rhs>
+          <symbol>id</symbol>
+          <symbol>&quot;:=&quot;</symbol>
+          <symbol>exp</symbol>
+        </rhs>
+      </rule>
+      <rule number="5" usefulness="useful">
+        <lhs>id</lhs>
+        <rhs>
+          <symbol>&quot;identifier&quot;</symbol>
+        </rhs>
+      </rule>
+      <rule number="6" usefulness="useful">
+        <lhs>@1</lhs>
+        <rhs>
+          <empty/>
+        </rhs>
+      </rule>
+      <rule number="7" usefulness="useful">
+        <lhs>@2</lhs>
+        <rhs>
+          <empty/>
+        </rhs>
+      </rule>
+      <rule number="8" usefulness="useful">
+        <lhs>exp</lhs>
+        <rhs>
+          <symbol>&quot;incr&quot;</symbol>
+          <symbol>exp</symbol>
+          <symbol>@1</symbol>
+          <symbol>@2</symbol>
+          <symbol>exp</symbol>
+        </rhs>
+      </rule>
+      <rule number="9" usefulness="useful">
+        <lhs>exp</lhs>
+        <rhs>
+          <symbol>&quot;(&quot;</symbol>
+          <symbol>exp</symbol>
+          <symbol>&quot;)&quot;</symbol>
+        </rhs>
+      </rule>
+      <rule number="10" usefulness="useful">
+        <lhs>exp</lhs>
+        <rhs>
+          <symbol>&quot;identifier&quot;</symbol>
+        </rhs>
+      </rule>
+      <rule number="11" usefulness="useful">
+        <lhs>exp</lhs>
+        <rhs>
+          <symbol>&quot;number&quot;</symbol>
+        </rhs>
+      </rule>
+    </rules>
+    <terminals>
+      <terminal symbol-number="0" token-number="0" name="&quot;end of file&quot;" usefulness="useful"/>
+      <terminal symbol-number="1" token-number="256" name="error" usefulness="useful"/>
+      <terminal symbol-number="3" token-number="258" name="&quot;:=&quot;" usefulness="useful"/>
+      <terminal symbol-number="4" token-number="259" name="&quot;incr&quot;" usefulness="useful"/>
+      <terminal symbol-number="5" token-number="260" name="&quot;identifier&quot;" usefulness="useful"/>
+      <terminal symbol-number="6" token-number="261" name="&quot;number&quot;" usefulness="useful"/>
+      <terminal symbol-number="7" token-number="262" name="&quot;(&quot;" usefulness="useful"/>
+      <terminal symbol-number="8" token-number="263" name="&quot;)&quot;" usefulness="useful"/>
+    </terminals>
+    <nonterminals>
+      <nonterminal symbol-number="9" name="$accept" usefulness="useful"/>
+      <nonterminal symbol-number="10" name="unit" usefulness="useful"/>
+      <nonterminal symbol-number="11" name="assignments" usefulness="useful"/>
+      <nonterminal symbol-number="12" name="assignment" usefulness="useful"/>
+      <nonterminal symbol-number="13" name="id" usefulness="useful"/>
+      <nonterminal symbol-number="14" name="exp" usefulness="useful"/>
+      <nonterminal symbol-number="15" name="@1" usefulness="useful"/>
+      <nonterminal symbol-number="16" name="@2" usefulness="useful"/>
+    </nonterminals>
+  </grammar>
+
+  <automaton>
+
+    <state number="0">
+      <itemset>
+        <item rule-number="0" point="0"/>
+        <item rule-number="1" point="0"/>
+        <item rule-number="2" point="0"/>
+        <item rule-number="3" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="goto" symbol="unit" state="1"/>
+          <transition type="goto" symbol="assignments" state="2"/>
+        </transitions>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="2" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="1">
+      <itemset>
+        <item rule-number="0" point="1"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;end of file&quot;" state="3"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="2">
+      <itemset>
+        <item rule-number="1" point="1"/>
+        <item rule-number="3" point="1"/>
+        <item rule-number="4" point="0"/>
+        <item rule-number="5" point="0"/>
+        <item rule-number="8" point="0"/>
+        <item rule-number="9" point="0"/>
+        <item rule-number="10" point="0"/>
+        <item rule-number="11" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;incr&quot;" state="4"/>
+          <transition type="shift" symbol="&quot;identifier&quot;" state="5"/>
+          <transition type="shift" symbol="&quot;number&quot;" state="6"/>
+          <transition type="shift" symbol="&quot;(&quot;" state="7"/>
+          <transition type="goto" symbol="assignment" state="8"/>
+          <transition type="goto" symbol="id" state="9"/>
+          <transition type="goto" symbol="exp" state="10"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="3">
+      <itemset>
+        <item rule-number="0" point="2"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="accept" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="4">
+      <itemset>
+        <item rule-number="8" point="0"/>
+        <item rule-number="8" point="1"/>
+        <item rule-number="9" point="0"/>
+        <item rule-number="10" point="0"/>
+        <item rule-number="11" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;incr&quot;" state="4"/>
+          <transition type="shift" symbol="&quot;identifier&quot;" state="11"/>
+          <transition type="shift" symbol="&quot;number&quot;" state="6"/>
+          <transition type="shift" symbol="&quot;(&quot;" state="7"/>
+          <transition type="goto" symbol="exp" state="12"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="5">
+      <itemset>
+        <item rule-number="5" point="1">
+          <lookaheads>
+            <symbol>&quot;:=&quot;</symbol>
+          </lookaheads>
+        </item>
+        <item rule-number="10" point="1">
+          <lookaheads>
+            <symbol>&quot;end of file&quot;</symbol>
+          </lookaheads>
+        </item>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="&quot;end of file&quot;" rule="10" enabled="true"/>
+          <reduction symbol="$default" rule="5" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="6">
+      <itemset>
+        <item rule-number="11" point="1"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="11" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="7">
+      <itemset>
+        <item rule-number="8" point="0"/>
+        <item rule-number="9" point="0"/>
+        <item rule-number="9" point="1"/>
+        <item rule-number="10" point="0"/>
+        <item rule-number="11" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;incr&quot;" state="4"/>
+          <transition type="shift" symbol="&quot;identifier&quot;" state="11"/>
+          <transition type="shift" symbol="&quot;number&quot;" state="6"/>
+          <transition type="shift" symbol="&quot;(&quot;" state="7"/>
+          <transition type="goto" symbol="exp" state="13"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="8">
+      <itemset>
+        <item rule-number="3" point="2"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="3" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="9">
+      <itemset>
+        <item rule-number="4" point="1"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;:=&quot;" state="14"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="10">
+      <itemset>
+        <item rule-number="1" point="2"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="1" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="11">
+      <itemset>
+        <item rule-number="10" point="1"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="10" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="12">
+      <itemset>
+        <item rule-number="6" point="0"/>
+        <item rule-number="8" point="2"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="goto" symbol="@1" state="15"/>
+        </transitions>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="6" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="13">
+      <itemset>
+        <item rule-number="9" point="2"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;)&quot;" state="16"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="14">
+      <itemset>
+        <item rule-number="4" point="2"/>
+        <item rule-number="8" point="0"/>
+        <item rule-number="9" point="0"/>
+        <item rule-number="10" point="0"/>
+        <item rule-number="11" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;incr&quot;" state="4"/>
+          <transition type="shift" symbol="&quot;identifier&quot;" state="11"/>
+          <transition type="shift" symbol="&quot;number&quot;" state="6"/>
+          <transition type="shift" symbol="&quot;(&quot;" state="7"/>
+          <transition type="goto" symbol="exp" state="17"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="15">
+      <itemset>
+        <item rule-number="7" point="0"/>
+        <item rule-number="8" point="3"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="goto" symbol="@2" state="18"/>
+        </transitions>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="7" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="16">
+      <itemset>
+        <item rule-number="9" point="3"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="9" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="17">
+      <itemset>
+        <item rule-number="4" point="3"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="4" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="18">
+      <itemset>
+        <item rule-number="8" point="0"/>
+        <item rule-number="8" point="4"/>
+        <item rule-number="9" point="0"/>
+        <item rule-number="10" point="0"/>
+        <item rule-number="11" point="0"/>
+      </itemset>
+      <actions>
+        <transitions>
+          <transition type="shift" symbol="&quot;incr&quot;" state="4"/>
+          <transition type="shift" symbol="&quot;identifier&quot;" state="11"/>
+          <transition type="shift" symbol="&quot;number&quot;" state="6"/>
+          <transition type="shift" symbol="&quot;(&quot;" state="7"/>
+          <transition type="goto" symbol="exp" state="19"/>
+        </transitions>
+        <errors/>
+        <reductions/>
+      </actions>
+      <solved-conflicts/>
+    </state>
+
+    <state number="19">
+      <itemset>
+        <item rule-number="8" point="5"/>
+      </itemset>
+      <actions>
+        <transitions/>
+        <errors/>
+        <reductions>
+          <reduction symbol="$default" rule="8" enabled="true"/>
+        </reductions>
+      </actions>
+      <solved-conflicts/>
+    </state>
+  </automaton>
+</bison-xml-report>
+]])
+
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
diff --git a/tests/scanner.at b/tests/scanner.at
new file mode 100644
index 0000000..c03dbbb
--- /dev/null
+++ b/tests/scanner.at
@@ -0,0 +1,250 @@
+# Interface with the scanner.                           -*- Autotest -*-
+
+# Copyright (C) 2019 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([[Interface with the scanner.]])
+
+
+# -------------- #
+# AT_RAW_YYLEX.  #
+# -------------- #
+
+m4_pushdef([AT_RAW_YYLEX],   [AT_LANG_DISPATCH([$0], $@)])
+
+m4_define([AT_RAW_YYLEX(c)],
+[#include <stdlib.h> /* abort */
+AT_YYLEX_PROTOTYPE[
+{
+  static const char* input = "0-(1+2)*3/9";
+  int c = *input++;
+  switch (c)
+    {
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      ]AT_VAL[.val = c - '0';
+      return NUM;
+    case '+': return PLUS;
+    case '-': return MINUS;
+    case '*': return STAR;
+    case '/': return SLASH;
+    case '(': return LPAR;
+    case ')': return RPAR;
+    case 0:   return 0;
+    }
+  abort ();
+}
+]])
+
+m4_define([AT_RAW_YYLEX(c++)],
+[#include <stdlib.h> /* abort */
+AT_YYLEX_PROTOTYPE[
+{
+  static const char* input = "0-(1+2)*3/9";
+  int c = *input++;
+  switch (c)
+    {
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':]AT_TOKEN_CTOR_IF([[
+      return yy::parser::make_NUM (c - '0');]], [[
+      ]AT_VAL[.val = c - '0';
+      return yy::parser::token::NUM;]])[
+    case '+': return yy::parser::]AT_TOKEN_CTOR_IF([make_PLUS ()],  [token::PLUS])[;
+    case '-': return yy::parser::]AT_TOKEN_CTOR_IF([make_MINUS ()], [token::MINUS])[;
+    case '*': return yy::parser::]AT_TOKEN_CTOR_IF([make_STAR ()],  [token::STAR])[;
+    case '/': return yy::parser::]AT_TOKEN_CTOR_IF([make_SLASH ()], [token::SLASH])[;
+    case '(': return yy::parser::]AT_TOKEN_CTOR_IF([make_LPAR ()],  [token::LPAR])[;
+    case ')': return yy::parser::]AT_TOKEN_CTOR_IF([make_RPAR ()],  [token::RPAR])[;
+    case 0:   return yy::parser::]AT_TOKEN_CTOR_IF([make_END ()],   [token::END])[;
+    }
+  abort ();
+}
+]])
+
+m4_define([AT_RAW_YYLEX(d)],
+[[import std.range.primitives;
+import std.stdio;
+
+auto yyLexer(R)(R range)
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  return new YYLexer!R(range);
+}
+
+auto yyLexer ()
+{
+  return yyLexer("0-(1+2)*3/9");
+}
+
+class YYLexer(R) : Lexer
+  if (isInputRange!R && is (ElementType!R : dchar))
+{
+  R input;
+
+  this(R r) {
+    input = r;
+  }
+
+  ]AT_YYERROR_DEFINE[
+
+  YYSemanticType semanticVal_;
+  public final @property YYSemanticType semanticVal ()
+  {
+    return semanticVal_;
+  }
+
+  int yylex ()
+  {
+    import std.uni : isNumber;
+    // Handle EOF.
+    if (input.empty)
+      return YYTokenType.EOF;
+
+    auto c = input.front;
+    input.popFront;
+
+    // Numbers.
+    switch (c)
+    {
+    case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
+      semanticVal_.val = c - '0';
+      return YYTokenType.NUM;
+    case '+': return YYTokenType.PLUS;
+    case '-': return YYTokenType.MINUS;
+    case '*': return YYTokenType.STAR;
+    case '/': return YYTokenType.SLASH;
+    case '(': return YYTokenType.LPAR;
+    case ')': return YYTokenType.RPAR;
+    default: assert(0);
+    }
+  }
+}
+]])
+
+m4_pushdef([AT_MAIN_DEFINE(d)],
+[[int main ()
+{
+  auto l = yyLexer ();
+  auto p = new YYParser (l);
+  return !p.parse ();
+}]])
+
+
+## ------------------- ##
+## Raw token numbers.  ##
+## ------------------- ##
+
+m4_pushdef([AT_TEST],
+[
+AT_SETUP([Token numbers: $1])
+
+AT_BISON_OPTION_PUSHDEFS([%debug $1])
+AT_DATA_GRAMMAR([[input.y]],
+[[$1
+%debug
+]AT_D_IF([], [[
+%code
+{
+#include <stdio.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}]])[
+
+]AT_VARIANT_IF([[
+%token <int> NUM "number"
+%nterm <int> exp
+]], [[
+%union {
+  int val;
+}
+%token <val> NUM "number"
+%nterm <val> exp
+]])[
+
+%token
+  PLUS  "+"
+  MINUS "-"
+  STAR  "*"
+  SLASH "/"
+  LPAR  "("
+  RPAR  ")"
+  END   0
+
+%left "+" "-"
+%left "*" "/"
+
+%%
+
+input
+: exp         { printf ("%d\n", $][1); }
+;
+
+exp
+: exp "+" exp { $][$][ = $][1 + $][3; }
+| exp "-" exp { $][$][ = $][1 - $][3; }
+| exp "*" exp { $][$][ = $][1 * $][3; }
+| exp "/" exp { $][$][ = $][1 / $][3; }
+| "(" exp ")" { $][$][ = $][2; }
+| "number"    { $][$][ = $][1; }
+;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_RAW_YYLEX[
+]AT_MAIN_DEFINE[
+]])
+
+AT_FULL_COMPILE([input])
+
+# yacc.c, glr.c and glr.cc use 'yytranslate' (and YYTRANSLATE).
+# lalr1.cc uses 'translate_table' (and yytranslate_).
+# lalr1.d uses 'byte[] translate_table =' (and yytranslate_).
+AT_CHECK([[$EGREP -c 'yytranslate\[\]|translate_table\[\]|translate_table =' input.]AT_LANG_EXT],
+         [ignore],
+         [AT_TOKEN_RAW_IF([0], [1])[
+]])
+
+AT_PARSER_CHECK([input], 0,
+[[-1
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc], [lalr1.d]],
+[AT_TEST([%skeleton "]b4_skel["])
+ AT_TEST([%skeleton "]b4_skel[" %define api.token.raw])])
+
+AT_TEST([%skeleton "lalr1.cc" %define api.token.raw %define api.value.type variant %define api.token.constructor])])
+
+m4_popdef([AT_MAIN_DEFINE(d)])
+m4_popdef([AT_TEST])
diff --git a/tests/sets.at b/tests/sets.at
index 4cbdfd6..a694cc9 100644
--- a/tests/sets.at
+++ b/tests/sets.at
@@ -1,7 +1,7 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
 
-# Copyright (C) 2001-2002, 2005, 2007, 2009-2012 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2002, 2005, 2007, 2009-2015, 2018-2019 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
@@ -17,45 +17,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-# AT_EXTRACT_SETS(INPUT, OUTPUT)
-# ------------------------------
-# Extract the information about the grammar sets from a bison
-# trace output (INPUT), and save it in OUTPUT.
-# And remember, there is no alternation in portable sed.
-m4_define([AT_EXTRACT_SETS],
-[AT_DATA([extract.sed],
-[[#n
-/^NULLABLE$/ {
-   :null
-   p
-   n
-   /^[	 ]*$/ !b null
-}
-/^FIRSTS$/ {
-   :firsts
-   p
-   n
-   /^[	 ]*$/ !b firsts
-}
-/^FDERIVES$/ {
-   :fderiv
-   p
-   n
-   /^[	 ]*$/ !b fderiv
-}
-/^DERIVES$/ {
-   :deriv
-   p
-   n
-   /^[	 ]*$/ !b deriv
-}
-]])
-AT_CHECK([sed -f extract.sed $1], 0, [stdout])
-AT_CHECK([mv stdout $2])
-])
-
-
-
 AT_BANNER([[Grammar Sets (Firsts etc.).]])
 
 
@@ -79,31 +40,30 @@
 ]])
 
 AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
-AT_EXTRACT_SETS([stderr], [sets])
-AT_CHECK([[cat sets]], [],
+AT_SETS_CHECK([stderr], [[DERIVES], [NULLABLE], [FIRSTS], [FDERIVES]],
 [[DERIVES
-	$accept derives
-		  0  e $end
-	e derives
-		  1  'e'
-		  2  /* empty */
+  $accept derives
+      0  e $end
+  e derives
+      1  'e'
+      2  %empty
 NULLABLE
-	$accept: no
-	e: yes
+  $accept: no
+  e: yes
 FIRSTS
-	$accept firsts
-		$accept
-		e
-	e firsts
-		e
+  $accept firsts
+    $accept
+    e
+  e firsts
+    e
 FDERIVES
-	$accept derives
-		  0  e $end
-		  1  'e'
-		  2  /* empty */
-	e derives
-		  1  'e'
-		  2  /* empty */
+  $accept derives
+      0  e $end
+      1  'e'
+      2  %empty
+  e derives
+      1  'e'
+      2  %empty
 ]])
 
 AT_CLEANUP
@@ -113,7 +73,7 @@
 ## Broken Closure.  ##
 ## ---------------- ##
 
-# TC was once broken during a massive `simplification' of the code.
+# TC was once broken during a massive 'simplification' of the code.
 # It resulted in bison dumping core on the following grammar (the
 # computation of FIRSTS uses TC).  It managed to produce a pretty
 # exotic closure:
@@ -164,7 +124,7 @@
 
 AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 
-AT_CHECK([[sed -n 's/[	 ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
+AT_CHECK([[sed -n 's/[   ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
 [[RTC: Firsts Output BEGIN
 
    012345678
@@ -209,46 +169,45 @@
 ]])
 
 AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
-AT_EXTRACT_SETS([stderr], [sets])
-AT_CHECK([[cat sets]], [],
+AT_SETS_CHECK([stderr], [[DERIVES], [NULLABLE], [FIRSTS], [FDERIVES]],
 [[DERIVES
-	$accept derives
-		  0  exp $end
-	exp derives
-		  1  exp '<' exp
-		  2  exp '>' exp
-		  3  exp '+' exp
-		  4  exp '-' exp
-		  5  exp '^' exp
-		  6  exp '=' exp
-		  7  "exp"
+  $accept derives
+      0  exp $end
+  exp derives
+      1  exp '<' exp
+      2  exp '>' exp
+      3  exp '+' exp
+      4  exp '-' exp
+      5  exp '^' exp
+      6  exp '=' exp
+      7  "exp"
 NULLABLE
-	$accept: no
-	exp: no
+  $accept: no
+  exp: no
 FIRSTS
-	$accept firsts
-		$accept
-		exp
-	exp firsts
-		exp
+  $accept firsts
+    $accept
+    exp
+  exp firsts
+    exp
 FDERIVES
-	$accept derives
-		  0  exp $end
-		  1  exp '<' exp
-		  2  exp '>' exp
-		  3  exp '+' exp
-		  4  exp '-' exp
-		  5  exp '^' exp
-		  6  exp '=' exp
-		  7  "exp"
-	exp derives
-		  1  exp '<' exp
-		  2  exp '>' exp
-		  3  exp '+' exp
-		  4  exp '-' exp
-		  5  exp '^' exp
-		  6  exp '=' exp
-		  7  "exp"
+  $accept derives
+      0  exp $end
+      1  exp '<' exp
+      2  exp '>' exp
+      3  exp '+' exp
+      4  exp '-' exp
+      5  exp '^' exp
+      6  exp '=' exp
+      7  "exp"
+  exp derives
+      1  exp '<' exp
+      2  exp '>' exp
+      3  exp '+' exp
+      4  exp '-' exp
+      5  exp '^' exp
+      6  exp '=' exp
+      7  "exp"
 ]])
 
 AT_CLEANUP
@@ -263,7 +222,7 @@
 # In some weird cases Bison could compute an incorrect final state
 # number.  This happens only if the $end token is used in the user
 # grammar, which is a very suspicious accidental feature introduced as
-# a side effect of allowing the user to name $end using `%token END 0
+# a side effect of allowing the user to name $end using '%token END 0
 # "end of file"'.
 
 AT_SETUP([Accept])
@@ -288,15 +247,223 @@
 # Get the final state in the report, from the "accept" action..
 AT_CHECK([sed -n '
            /^State \(.*\)/{
-	     s//final state \1/
-	     x
-	   }
-	   / accept/{
-	     x
-	     p
-	     q
-	   }
-	' input.output],
-	0, [expout])
+             s//final state \1/
+             x
+           }
+           / accept/{
+             x
+             p
+             q
+           }
+        ' input.output],
+        0, [expout])
+
+AT_CLEANUP
+
+
+
+## ----------------- ##
+## Build relations.  ##
+## ----------------- ##
+
+AT_SETUP([Build relations])
+
+# The "includes" relation [DeRemer 1982] is between gotos, so of
+# course, for a given goto, there cannot be more that ngotos (number
+# of gotos) images.  But we manipulate the set of images of a goto as
+# a list, without checking that an image was not already introduced.
+# So we can "register" way more images than ngotos, leading to a crash
+# (heap buffer overflow).
+#
+# http://lists.gnu.org/archive/html/bug-bison/2019-03/msg00007.html
+
+AT_DATA([input.y],
+[[%%
+expr: term | term | term | term | term | term
+term: 'n'
+]])
+
+AT_BISON_CHECK([[-fcaret input.y]], [], [],
+[[input.y: warning: 5 reduce/reduce conflicts [-Wconflicts-rr]
+input.y:2.14-17: warning: rule useless in parser due to conflicts [-Wother]
+    2 | expr: term | term | term | term | term | term
+      |              ^~~~
+input.y:2.21-24: warning: rule useless in parser due to conflicts [-Wother]
+    2 | expr: term | term | term | term | term | term
+      |                     ^~~~
+input.y:2.28-31: warning: rule useless in parser due to conflicts [-Wother]
+    2 | expr: term | term | term | term | term | term
+      |                            ^~~~
+input.y:2.35-38: warning: rule useless in parser due to conflicts [-Wother]
+    2 | expr: term | term | term | term | term | term
+      |                                   ^~~~
+input.y:2.42-45: warning: rule useless in parser due to conflicts [-Wother]
+    2 | expr: term | term | term | term | term | term
+      |                                          ^~~~
+]])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## Reduced Grammar.  ##
+## ----------------- ##
+
+# Check information about the grammar, once reduced.
+
+AT_SETUP([Reduced Grammar])
+
+AT_DATA([input.y],
+[[%%
+expr: expr "+" term | term
+term: term "*" fact | fact
+useless: "useless"
+fact: "num"
+]])
+
+AT_BISON_CHECK([[--trace=grammar -o input.c input.y]], [], [],
+[[input.y: warning: 1 nonterminal useless in grammar [-Wother]
+input.y: warning: 1 rule useless in grammar [-Wother]
+input.y:4.1-7: warning: nonterminal useless in grammar: useless [-Wother]
+Reduced Grammar
+
+ntokens = 7, nvars = 4, nsyms = 11, nrules = 6, nritems = 17
+
+Tokens
+------
+
+Value  Sprec  Sassoc  Tag
+    0      0       0  $end
+    1      0       0  error
+    2      0       0  $undefined
+    3      0       0  "+"
+    4      0       0  "*"
+    5      0       0  "useless"
+    6      0       0  "num"
+
+
+Non terminals
+-------------
+
+Value  Tag
+    7  $accept
+    8  expr
+    9  term
+   10  fact
+
+
+Rules
+-----
+
+Num (Prec, Assoc, Useful, UselessChain) Lhs -> (Ritem Range) Rhs
+  0 ( 0,  0,  t,  f)    7 -> ( 0- 1)   8   0
+  1 ( 0,  0,  t,  f)    8 -> ( 3- 5)   8   3   9
+  2 ( 0,  0,  t,  t)    8 -> ( 7- 7)   9
+  3 ( 0,  0,  t,  f)    9 -> ( 9-11)   9   4  10
+  4 ( 0,  0,  t,  t)    9 -> (13-13)  10
+  5 ( 0,  0,  t,  t)   10 -> (17-17)   6
+  6 ( 0,  0,  f,  t)   11 -> (15-15)   5
+
+
+Rules interpreted
+-----------------
+
+0      $accept: expr $end
+1      expr: expr "+" term
+2      expr: term
+3      term: term "*" fact
+4      term: fact
+5      fact: "num"
+6      useless: "useless"
+
+
+reduced input.y defines 7 terminals, 4 nonterminals, and 6 productions.
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------- ##
+## Reduced Grammar with prec and assoc.  ##
+## ------------------------------------- ##
+
+# Check information about the grammar, once reduced.
+
+AT_SETUP([Reduced Grammar with prec and assoc])
+
+AT_DATA([input.y],
+[[%nonassoc '<' '>'
+%left '+' '-'
+%right '^' '='
+%%
+exp:
+   exp '<' exp
+ | exp '>' exp
+ | exp '+' exp
+ | exp '-' exp
+ | exp '^' exp
+ | exp '=' exp
+ | "exp"
+ ;
+]])
+
+AT_BISON_CHECK([[--trace=grammar -o input.c input.y]], [], [],
+[[Reduced Grammar
+
+ntokens = 10, nvars = 2, nsyms = 12, nrules = 8, nritems = 29
+
+Tokens
+------
+
+Value  Sprec  Sassoc  Tag
+    0      0       0  $end
+    1      0       0  error
+    2      0       0  $undefined
+    3      1       3  '<'
+    4      1       3  '>'
+    5      2       2  '+'
+    6      2       2  '-'
+    7      3       1  '^'
+    8      3       1  '='
+    9      0       0  "exp"
+
+
+Non terminals
+-------------
+
+Value  Tag
+   10  $accept
+   11  exp
+
+
+Rules
+-----
+
+Num (Prec, Assoc, Useful, UselessChain) Lhs -> (Ritem Range) Rhs
+  0 ( 0,  0,  t,  f)   10 -> ( 0- 1)  11   0
+  1 ( 1,  3,  t,  f)   11 -> ( 3- 5)  11   3  11
+  2 ( 1,  3,  t,  f)   11 -> ( 7- 9)  11   4  11
+  3 ( 2,  2,  t,  f)   11 -> (11-13)  11   5  11
+  4 ( 2,  2,  t,  f)   11 -> (15-17)  11   6  11
+  5 ( 3,  1,  t,  f)   11 -> (19-21)  11   7  11
+  6 ( 3,  1,  t,  f)   11 -> (23-25)  11   8  11
+  7 ( 0,  0,  t,  t)   11 -> (27-27)   9
+
+
+Rules interpreted
+-----------------
+
+0      $accept: exp $end
+1      exp: exp '<' exp
+2      exp: exp '>' exp
+3      exp: exp '+' exp
+4      exp: exp '-' exp
+5      exp: exp '^' exp
+6      exp: exp '=' exp
+7      exp: "exp"
+
+
+reduced input.y defines 10 terminals, 2 nonterminals, and 8 productions.
+]])
 
 AT_CLEANUP
diff --git a/tests/skeletons.at b/tests/skeletons.at
index fa496c9..7dbf2ba 100644
--- a/tests/skeletons.at
+++ b/tests/skeletons.at
@@ -1,6 +1,7 @@
 # Checking skeleton support.                     -*- Autotest -*-
 
-# Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2015, 2018-2019 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
@@ -91,7 +92,7 @@
   int yylex (void);
 %}
 
-%error-verbose
+%define parse.error verbose
 %token 'a'
 
 %%
@@ -106,12 +107,7 @@
 {
   return 'a';
 }
-
-int
-main (void)
-{
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 ]])
 
 AT_DATA_GRAMMAR([[input-cmd-line.y]],
@@ -123,13 +119,13 @@
 
 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]], [],
+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]], [],
+AT_PARSER_CHECK([[input-gram]], [[1]], [],
 [[syntax error, unexpected 'a', expecting $end
 ]])
 
@@ -191,8 +187,8 @@
 ]])
 
 AT_BISON_CHECK([[input1.y]], [[1]], [[]],
-[[input1.y: warning: foow fubar
-foow.y:2.3-5.3: warning: foowat fubar
+[[input1.y: warning: foow fubar [-Wother]
+foow.y:2.3-5.3: warning: foowat fubar [-Wother]
 input1.y: error: fooc fubar
 fooc.y:1.1-10.5: error: foocat fubar
 input1.y: fatal error: foof fubar
@@ -281,7 +277,7 @@
 ]])
 
 AT_BISON_CHECK([[input2.y]], [[1]], [[]],
-[[input2.y: warning: morning
+[[input2.y: warning: morning [-Wother]
 foo.y:1.5-6: fatal error: M4 should exit immediately here
 ]])
 
@@ -311,11 +307,11 @@
 my $M4 = "m4";
 my $DNL = "d"."nl";
 print "${M4}_divert_push(0)$DNL\n";
-print '@output(@,@)', "\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_PERL_REQUIRE([[gen-skel.pl > skel.c]])
 
 AT_DATA([[input.y]],
 [[%skeleton "./skel.c"
diff --git a/tests/synclines.at b/tests/synclines.at
index 6b84719..9b58560 100644
--- a/tests/synclines.at
+++ b/tests/synclines.at
@@ -1,7 +1,7 @@
 # Executing Actions.                               -*- Autotest -*-
 
-# Copyright (C) 2002, 2004-2005, 2007, 2009-2012 Free Software
-# Foundation, Inc.
+# Copyright (C) 2002, 2004-2005, 2007, 2009-2015, 2018-2019 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,19 +16,19 @@
 # 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([[User Actions.]])
+AT_BANNER([[Sync Lines.]])
 
 
-# AT_SYNCLINES_COMPILE(FILE)
-# --------------------------
+# _AT_SYNCLINES_COMPILE(FILE)
+# ---------------------------
 # 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) trigger warnings on `#error', instead of
+# (e.g. c89 on IRIX 6.5) trigger warnings on '#error', instead of
 # errors.
-m4_define([AT_SYNCLINES_COMPILE],
+m4_define([_AT_SYNCLINES_COMPILE],
 [AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])
 
-# Transform stderr into something like this:
+# Transform the file 'stderr' into something like this:
 #
 #   input.y:4: #error "4"
 #
@@ -75,8 +75,32 @@
 # 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
+#
+#
+# xlc reports things like:
+#
+#    "input.yy", line 80.21: 1540-0218 (S) The call does not match any parameter list for "operator<<".
+#    "/usr/vacpp/include/iosfwd", line 32.6: 1506-205 (S) #error This file to be used only with IBM VisualAge C++ v4 and later compilers
+#
+# Newer GCCs go further and if the function is declared static, complain
+# that it's not used.
+#
+# GCC 7 also underlines the error.
+#
+#    syncline.c:4:2: error: #error "4"
+#     #error "4"
+#      ^~~~~
+#
+# GCC 9 displays a left-hand margin with the line number:
+#
+#    syncline.c: In function 'foo':
+#    syncline.c:4:2: error: #error "4"
+#        4 | #error "4"
+#          |  ^~~~~
+AT_CHECK([["$PERL" -p -0777 - stderr <<\EOF || exit 77
+  # Remove left-hand margin.
+  s/^[\d ]{6}\| //gm;
 
-AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
   # 1. Remove useless lines.
 
   # distcc clutter.
@@ -85,13 +109,15 @@
   s/^clang: warning: treating 'c' input as 'c\+\+'.*\n//gm;
   # Function context.
   s/^[^:]*: In function '[^']+':\n//gm;
-  # Caret error.
-  s/^ *#error.*\n *\^\n//gm;
+  # Caret error (with possible '~' to underline).
+  s/^ *#error.*\n *\^~*\n//gm;
   # Number of errors.
   s/^1 error generated\.\n//gm;
 
   # 2. Normalize the lines we kept.
 
+  # xlc messages.  Remove also error identifier (e.g., "1540-0218 (S)").
+  s/^"(.*?)", line ([\w.]*): \d+-\d+ \(.\) /$][1:$][2: /gm;
   # Remove column.
   s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
   # Map all combinations of "error: " and "#error: " to "#error ".
@@ -101,13 +127,14 @@
   0, [stdout])
 ])
 
-# AT_TEST(TITLE, INPUT, ERROR-MSG)
-# --------------------------------
-# Check that compiling the parser produced from INPUT cause GCC
-# to issue ERROR-MSG.
-m4_pushdef([AT_TEST],
-[AT_SETUP([$1])
-AT_BISON_OPTION_PUSHDEFS
+
+
+# AT_SYNCLINES_COMPILE(FILE)
+# --------------------------
+# Compile FILE expecting an error, and save in the file 'stdout' the
+# normalized output.  If we can't get a trustable location
+# from the compiler, just skip the test.
+#
 # 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:
@@ -124,14 +151,31 @@
 #
 # | input.y:2: "2"
 # | cpp-precomp: warning: errors during smart preprocessing, retrying in basic mode
-
+m4_define([AT_SYNCLINES_COMPILE],
+[# Check if we can trust location translation.
 AT_DATA([syncline.c],
-[[#error "1"
-int i; /* avoids -pedantic warning about an empty translation unit. */
+[[void foo (void);
+void foo (void)
+{
+#error "4"
+}
 ]])
 
-AT_SYNCLINES_COMPILE([syncline.c])
-AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
+_AT_SYNCLINES_COMPILE([syncline.c])
+AT_REQUIRE([[test "`cat stdout`" = 'syncline.c:4: @%:@error "4"']])
+
+# Then work for real.
+_AT_SYNCLINES_COMPILE([$1])
+])
+
+
+# AT_TEST(TITLE, INPUT, ERROR-MSG)
+# --------------------------------
+# Check that compiling the parser produced from INPUT cause GCC
+# to issue ERROR-MSG.
+m4_pushdef([AT_TEST],
+[AT_SETUP([$1])
+AT_BISON_OPTION_PUSHDEFS
 
 AT_DATA([[input.y]], [$2])
 AT_BISON_CHECK([-o input.c input.y])
@@ -150,9 +194,11 @@
 AT_TEST([Prologue syncline],
 [[%{
 #error "2"
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
 %}
+%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
 %%
 exp: '0';
 %%
@@ -170,10 +216,10 @@
 #error "2"
   char dummy;
 }
-%{
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
-%}
+%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
 %%
 exp: '0';
 %%
@@ -182,27 +228,59 @@
 ])
 
 
+## ---------------------- ##
+## %union name syncline.  ##
+## ---------------------- ##
+
+# Check that invalid union names are properly reported in the
+# source file.
+AT_SETUP([%union name syncline])
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([[input.y]],
+[[%union break
+{
+  char dummy;
+}
+%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+%}
+%%
+exp: '0';
+%%
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_SYNCLINES_COMPILE([input.c])
+AT_CHECK([[grep '^input.y:1' stdout]], 0, [ignore])
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+
+
 ## ----------------------- ##
 ## Postprologue syncline.  ##
 ## ----------------------- ##
 
 AT_TEST([Postprologue syncline],
-[[%{
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
+%{
+  /* Preprologue.  */
 %}
 %union
 {
   int ival;
 }
 %{
-#error "10"
+#error "13"
 %}
 %%
 exp: '0';
 %%
 ]],
-[input.y:10: #error "10"
+[input.y:13: #error "13"
 ])
 
 
@@ -211,10 +289,10 @@
 ## ----------------- ##
 
 AT_TEST([Action syncline],
-[[%{
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
-%}
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
 %%
 exp:
 {
@@ -230,10 +308,10 @@
 ## ------------------- ##
 
 AT_TEST([Epilogue syncline],
-[[%{
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
-%}
+[[%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
 %%
 exp: '0';
 %%
@@ -250,10 +328,10 @@
 [[%code top {
 #error "2"
 }
-%{
-]AT_YYERROR_DECLARE_EXTERN[
-]AT_YYLEX_DECLARE_EXTERN[
-%}
+%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
 %%
 exp: '0';
 %%
@@ -261,35 +339,226 @@
 [input.y:2: #error "2"
 ])
 
-m4_popdef([AT_TEST])
+## ---------------------- ##
+## %destructor syncline.  ##
+## ---------------------- ##
 
-## ----------- ##
-## %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_TEST([%destructor syncline],
+[[%destructor {
+#error "2"
+} <ival>
 %{
 ]AT_YYERROR_DECLARE_EXTERN[
 ]AT_YYLEX_DECLARE_EXTERN[
 %}
+%union {
+  int ival;
+}
+%type <ival> exp
+%%
+exp: '0' { $$ = 0; };
+%%
+]],
+[input.y:2: #error "2"
+])
+
+
+## ------------------- ##
+## %printer syncline.  ##
+## ------------------- ##
+
+AT_TEST([%printer syncline],
+[[%printer {
+#error "2"
+} <ival>
+%debug
+%code {
+  ]AT_YYERROR_DECLARE_EXTERN[
+  ]AT_YYLEX_DECLARE_EXTERN[
+}
+%union {
+  int ival;
+}
+%type <ival> exp
+%%
+exp: '0' { $$ = 0; };
+%%
+]],
+[input.y:2: #error "2"
+])
+
+m4_popdef([AT_TEST])
+
+
+
+## ------------------ ##
+## syncline escapes.  ##
+## ------------------ ##
+
+# AT_TEST([SKELETON])
+# -------------------
+m4_pushdef([AT_TEST],
+[AT_SETUP([syncline escapes: $1])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1"])
+
+# ICC is unable to handle these file names: it fails to pass them
+# properly to the linker, and is unable to save a file named this way.
+# Don't try with such compilers.
+AT_DATA([\"\\\"\".AT_LANG_EXT],
+[[int main (void) { return 0; }
+]])
+
+AT_REQUIRE([AT_CXX_IF([$CXX $CXXFLAGS], [$CC $CFLAGS]) $CPPFLAGS \"\\\"\".]AT_LANG_EXT[ -o \"\\\"\"],
+                 [0], [ignore], [ignore])
+
+AT_DATA_GRAMMAR([\"\\\"\".y],
+[[%skeleton "$1"
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+}
+%destructor {} <>
+%printer {} <>
 %%
 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_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE[
+]AT_MAIN_DEFINE[
+]])
+
+# Maybe we tried to create a file name that the file system does not
+# support.
+AT_SKIP_IF([[test ! -f \"\\\"\".y]])
+AT_FULL_COMPILE([\"\\\"\"])
 AT_BISON_OPTION_POPDEFS
 
 AT_CLEANUP
 ])
 
-AT_TEST([yacc.c])
-AT_TEST([glr.c])
-AT_TEST([lalr1.cc])
-AT_TEST([glr.cc])
+m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
 
 m4_popdef([AT_TEST])
+
+
+
+## ----------- ##
+## %no-lines.  ##
+## ----------- ##
+
+# AT_TEST([SKELETON])
+# -------------------
+m4_pushdef([AT_TEST],
+[AT_SETUP([%no-lines: $1])
+
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1" %defines])
+AT_DATA_GRAMMAR([input.y],
+[[%skeleton "$1" %defines
+%{
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+%}
+%union {
+  int ival;
+}
+%%
+exp: '0'
+]])
+
+# Generate without.* without the #line.  Don't use -o without.c which
+# would change the content (e.g., CPP guard depend on the output file
+# name).
+AT_BISON_CHECK([--no-lines -o input.AT_LANG_EXT -d input.y])
+AT_CHECK([mv input.]AT_LANG_EXT[ without.]AT_LANG_EXT[])
+AT_CHECK([mv input.]AT_LANG_HDR[ without.]AT_LANG_HDR[])
+# There is no #line at all.
+AT_CHECK([grep '#line' *.]AT_LANG_EXT[ *.]AT_LANG_HDR[], 1)
+
+# Generate with.* without the #line.
+AT_BISON_CHECK([-o input.AT_LANG_EXT -d input.y])
+AT_CHECK([mv input.]AT_LANG_EXT[ with.]AT_LANG_EXT[])
+AT_CHECK([mv input.]AT_LANG_HDR[ with.]AT_LANG_HDR[])
+
+# The implementation file with --no-line is exactly the
+# original one with #lines removed.
+AT_CHECK([grep -v '#line' with.]AT_LANG_EXT[ >expout])
+AT_CHECK([cat without.AT_LANG_EXT], 0, [expout])
+
+# Likewise for the header.
+AT_CHECK([grep -v '#line' with.]AT_LANG_HDR[ >expout])
+AT_CHECK([cat without.AT_LANG_HDR], 0, [expout])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP
+])
+
+m4_map_args([AT_TEST], [yacc.c], [glr.c], [lalr1.cc], [glr.cc])
+
+m4_popdef([AT_TEST])
+
+
+
+## ---------------- ##
+## Output columns.  ##
+## ---------------- ##
+
+AT_SETUP([Output columns])
+
+# This test is fragile: its point is to check the compiler's error
+# message, but it seems too hard to do portability (even between
+# version of GCC).  So instead, let's just check the generated code
+# itself.
+
+AT_BISON_OPTION_PUSHDEFS
+AT_DATA([input.y],
+[[%{
+]AT_YYERROR_DECLARE_EXTERN[
+]AT_YYLEX_DECLARE_EXTERN[
+%}
+%define api.value.type union
+%type <int> '0' exp
+%destructor { /* --BEGIN */
+              destructor
+              /* --END   */ } <*>
+%printer { /* --BEGIN */
+           printer
+           /* --END   */ } <*>
+
+
+
+%left '+'
+%%
+exp: exp '+' exp {  /* --BEGIN */
+                    $$ = $1 + $3;
+                    @$ = @1 + @3;
+                    /* --END */ }
+   | '0'
+]])
+
+AT_BISON_CHECK([-o input.c input.y])
+AT_CHECK([[sed -ne '/--BEGIN/,/--END/{' \
+    -e '/input.c/s/ [0-9]* / LINE /;' \
+    -e 'p;}' \
+    input.c]], 0,
+[[         { /* --BEGIN */
+           printer
+           /* --END   */ }
+         { /* --BEGIN */
+           printer
+           /* --END   */ }
+            { /* --BEGIN */
+              destructor
+              /* --END   */ }
+            { /* --BEGIN */
+              destructor
+              /* --END   */ }
+                 {  /* --BEGIN */
+                    (yyval.exp) = (yyvsp[-2].exp) + (yyvsp[0].exp);
+                    (yyloc) = (yylsp[-2]) + (yylsp[0]);
+                    /* --END */ }
+]])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
diff --git a/tests/testsuite b/tests/testsuite
index 2e62268..d04c654 100755
--- a/tests/testsuite
+++ b/tests/testsuite
Binary files differ
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 2a5211a..4ccbfd1 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -1,6 +1,6 @@
-# Test suite for GNU Bison.				-*- Autotest -*-
+# Test suite for GNU Bison.                             -*- Autotest -*-
 
-# Copyright (C) 2000-2004, 2006-2007, 2009-2012 Free Software
+# Copyright (C) 2000-2004, 2006-2007, 2009-2015, 2018-2019 Free Software
 # Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
@@ -17,35 +17,47 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-# Testing resistance to user bugs.
+# Resistance to user bugs.
 m4_include([input.at])
 
-# Testing named references.
+# Named references.
 m4_include([named-refs.at])
 
-# Testing output file names.
+# Output file names.
 m4_include([output.at])
 
-# Testing skeleton support.
+# Diagnostics.
+m4_include([diagnostics.at])
+
+# Skeleton support.
 m4_include([skeletons.at])
 
-# Testing the part of the engine that computes FOLLOW etc.
+# The part of the engine that computes FOLLOW etc.
 m4_include([sets.at])
 
-# Testing grammar reduction.
+# Grammar reduction.
 m4_include([reduce.at])
 
-# Testing that #lines are correct.
+# Generated reports.
+m4_include([report.at])
+
+# Conflicts detection and resolution.
+m4_include([conflicts.at])
+
+# Support for #lines.
 m4_include([synclines.at])
 
-# Testing that headers are sane.
+# Generated headers sanity.
 m4_include([headers.at])
 
-# Testing that user actions are properly performed.
+# User actions.
 m4_include([actions.at])
 
-# Testing conflicts detection and resolution.
-m4_include([conflicts.at])
+# Semantic types support.
+m4_include([types.at])
+
+# Interface with the scanner.
+m4_include([scanner.at])
 
 # Fulling testing (compilation and execution of the parser) on calc.
 m4_include([calc.at])
@@ -54,23 +66,24 @@
 # Torturing the stack expansion at runtime.
 m4_include([torture.at])
 
-# Checking big, real world grammars.
+# Big, real world grammars.
 m4_include([existing.at])
 
 # Some old bugs.
 m4_include([regression.at])
 
-# Some C++ specific tests.
+# Push parser.
+m4_include([push.at])
+
+# Parsers in C++.
 m4_include([c++.at])
 
-# And some Java specific tests.
+# Parsers in Java.
 m4_include([java.at])
+m4_include([javapush.at])
 
-# GLR tests:
+# GLR.
 # 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/testsuite.h b/tests/testsuite.h
new file mode 100644
index 0000000..46e99df
--- /dev/null
+++ b/tests/testsuite.h
@@ -0,0 +1,12 @@
+/* Common definitions to include in the generated parsers.  See
+   AT_DATA_SOURCE_PROLOGUE. */
+
+/* In C++ pre C++11 it is standard practice to use 0 for the null
+   pointer.  But GCC -std=c++98 with -Wzero-as-null-pointer-constant
+   warns about this, although this is just no alternative!  Warning
+   introduced in GCC 4.7. */
+#if defined __cplusplus && __cplusplus < 201103L
+# if defined __GNUC__ && ! defined __clang__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#  pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+# endif
+#endif
diff --git a/tests/torture.at b/tests/torture.at
index ac9e91e..a8ba0cc 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -1,6 +1,6 @@
 # Torturing Bison.                                    -*- Autotest -*-
 
-# Copyright (C) 2001-2002, 2004-2007, 2009-2012 Free Software
+# Copyright (C) 2001-2002, 2004-2007, 2009-2015, 2018-2019 Free Software
 # Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
@@ -27,7 +27,7 @@
 case $data_limit in
 [[0-9]]*)
   if test "$data_limit" -lt $1; then
-    AT_CHECK([ulimit -S -d $1 || exit 77])
+    AT_REQUIRE([ulimit -S -d $1])
     ulimit -S -d $1
   fi
 esac])
@@ -51,7 +51,7 @@
 
 print <<EOF;
 ]AT_DATA_GRAMMAR_PROLOGUE[
-%error-verbose
+%define parse.error verbose
 %debug
 %{
 #include <stdio.h>
@@ -91,9 +91,9 @@
   {
     use Text::Wrap;
     print wrap ("| ", "   ",
-		(map { "\"$_\"" } (1 .. $size)),
-		" END \n"),
-		  "    { \$\$ = $size; }\n";
+                (map { "\"$_\"" } (1 .. $size)),
+                " END \n"),
+                  "    { \$\$ = $size; }\n";
   };
 print ";\n";
 
@@ -115,17 +115,12 @@
     }
   return inner++;
 }
-int
-main (void)
-{
-  yydebug = !!getenv ("YYDEBUG");
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 EOF
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_PERL_REQUIRE([-w ./gengram.pl $2], 0, [stdout])
 mv stdout $1
 ])
 
@@ -143,7 +138,7 @@
 AT_DATA_TRIANGULAR_GRAMMAR([input.y], [200])
 AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input])
+AT_PARSER_CHECK([input])
 
 AT_CLEANUP
 
@@ -163,7 +158,7 @@
 
 print <<EOF;
 ]AT_DATA_GRAMMAR_PROLOGUE[
-%error-verbose
+%define parse.error verbose
 %debug
 %{
 #include <stdio.h>
@@ -188,7 +183,7 @@
 use Text::Wrap;
 print
   wrap ("exp: ", "  ",
-	(map { "\"$_\"" } (1 .. $max)), ";"),
+        (map { "\"$_\"" } (1 .. $max)), ";"),
   "\n";
 
 print <<\EOF;
@@ -204,17 +199,11 @@
   assert (counter++ == MAX + 1);
   return 0;
 }
-
-int
-main (void)
-{
-  yydebug = !!getenv ("YYDEBUG");
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 EOF
 ]])
 
-AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_PERL_REQUIRE([-w ./gengram.pl $2], 0, [stdout])
 mv stdout $1
 AT_BISON_OPTION_POPDEFS
 ])
@@ -244,14 +233,56 @@
 # Ask for 200 MiB, which should be plenty even on a 64-bit host.
 AT_INCREASE_DATA_SIZE(204000)
 
-AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
+AT_BISON_CHECK_NO_XML([-o input.c input.y])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input])
+AT_PARSER_CHECK([input])
 
 AT_CLEANUP
 
 
 
+## ------------------- ##
+## State number type.  ##
+## ------------------- ##
+
+# AT_TEST(NUM-STATES, TYPE)
+# -------------------------
+# Check that automaton with NUM-STATES uses TYPE has state number type.
+# Check that parser works.
+
+m4_pushdef([AT_TEST],
+[AT_SETUP([State number type: $1 states])
+
+AT_BISON_OPTION_PUSHDEFS
+
+AT_REQUIRE([ruby $abs_top_srcdir/tests/linear $1 >input.y])
+# Old versions of GCC reject large values given to #line.
+AT_FULL_COMPILE([input], [], [], [], [--no-line])
+AT_CHECK([[sed -ne 's/#define YYNSTATES  *\([0-9]*\)/\1/p' input.c]],   [], [$1
+])
+AT_CHECK([[sed -ne 's/typedef \(.*\) yy_state_t;/\1/p' input.c]], [], [$2
+])
+AT_PARSER_CHECK([input])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP])
+
+AT_TEST(  [128], [yytype_int8])
+AT_TEST(  [129], [yytype_uint8])
+AT_TEST(  [256], [yytype_uint8])
+AT_TEST(  [257], [yytype_int16])
+AT_TEST([32768], [yytype_int16])
+AT_TEST([65536], [yytype_uint16])
+AT_TEST([65537], [int])
+
+m4_popdef([AT_TEST])
+
+
+
+## ------------------------ ##
+## Many lookahead tokens.   ##
+## ------------------------ ##
+
 # AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR(FILE-NAME, SIZE)
 # --------------------------------------------------
 # Create FILE-NAME, containing a self checking parser for a grammar
@@ -266,7 +297,7 @@
 my $max = $ARGV[0] || 10;
 
 print <<EOF;
-%error-verbose
+%define parse.error verbose
 %debug
 %{
 ]AT_DATA_SOURCE_PROLOGUE[
@@ -288,8 +319,8 @@
 
 print
   wrap ("%type <val> ",
-	"            ",
-	map { "n$_" } (1 .. $max)),
+        "            ",
+        map { "n$_" } (1 .. $max)),
   "\n";
 
 print "%token\n";
@@ -342,25 +373,15 @@
   return counter++;
 }
 
-int
-main (void)
-{
-  yydebug = !!getenv ("YYDEBUG");
-  return yyparse ();
-}
+]AT_MAIN_DEFINE[
 EOF
 ]])
 
-AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout])
+AT_PERL_REQUIRE([-w ./gengram.pl $2], 0, [stdout])
 mv stdout $1
 AT_BISON_OPTION_POPDEFS
 ])
 
-
-## ------------------------ ##
-## Many lookahead tokens.   ##
-## ------------------------ ##
-
 AT_SETUP([Many lookahead tokens])
 
 AT_DATA_LOOKAHEAD_TOKENS_GRAMMAR([input.y], [1000])
@@ -371,7 +392,7 @@
 
 AT_BISON_CHECK([-v -o input.c input.y])
 AT_COMPILE([input])
-AT_PARSER_CHECK([./input])
+AT_PARSER_CHECK([input])
 
 AT_CLEANUP
 
@@ -395,7 +416,7 @@
   ]AT_YYERROR_DECLARE[
 %}
 ]$2[
-%error-verbose
+%define parse.error verbose
 %debug
 %token WAIT_FOR_EOF
 %%
@@ -417,15 +438,15 @@
 static int
 get_args (int argc, const char **argv)
 {
-  int res;
+  long res;
   char *endp;
-  assert (argc == 2);
+  assert (argc == 2); (void) argc;
   res = strtol (argv[1], &endp, 10);
   assert (argv[1] != endp);
   assert (0 <= res);
   assert (res <= INT_MAX);
   assert (errno != ERANGE);
-  return res;
+  return YY_CAST (int, res);
 }
 
 int
@@ -475,14 +496,14 @@
 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
@@ -491,11 +512,11 @@
 AT_DATA_STACK_TORTURE([AT_USE_ALLOCA],
 [[%define api.push-pull both
 ]])
-AT_PARSER_CHECK([./input 20], 0, [], [ignore],
+AT_PARSER_CHECK([input 20], 0, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
-AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+AT_PARSER_CHECK([input 900], 0, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
-AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+AT_PARSER_CHECK([input 10000], 2, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 
 m4_popdef([AT_USE_ALLOCA])
@@ -516,24 +537,24 @@
 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],
+AT_PARSER_CHECK([input 20], 0, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
-AT_PARSER_CHECK([./input 900], 0, [], [ignore],
+AT_PARSER_CHECK([input 900], 0, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
-AT_PARSER_CHECK([./input 10000], 2, [], [ignore],
+AT_PARSER_CHECK([input 10000], 2, [], [ignore],
                 [[VALGRIND_OPTS="$VALGRIND_OPTS --log-fd=1"]])
 
 m4_popdef([AT_USE_ALLOCA])
diff --git a/tests/types.at b/tests/types.at
new file mode 100644
index 0000000..1c41293
--- /dev/null
+++ b/tests/types.at
@@ -0,0 +1,388 @@
+# Value type.                                     -*- Autotest -*-
+
+# Copyright (C) 2013-2015, 2018-2019 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([[Value type tests.]])
+
+
+## ----------------------------------- ##
+## %union vs. %define api.value.type.  ##
+## ----------------------------------- ##
+
+AT_SETUP([[%union vs. %define api.value.type]])
+
+AT_DATA([[input.y]],
+[[%union { int ival; }
+%define api.value.type union-directive
+%%
+exp: %empty;
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[input.y:2.1-38: error: '%union' and '%define api.value.type' cannot be used together
+]])
+
+AT_CLEANUP
+
+## ---------------------------------------- ##
+## %yacc vs. %define api.value.type union.  ##
+## ---------------------------------------- ##
+
+AT_SETUP([[%yacc vs. %define api.value.type union]])
+
+AT_DATA([[input.y]],
+[[%yacc
+%define api.value.type union
+%%
+exp: %empty;
+]])
+
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
+[[input.y:2.1-28: error: '%yacc' and '%define api.value.type "union"' cannot be used together
+]])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## api.value.type.  ##
+## ---------------- ##
+
+# _AT_TEST($1: BISON-DIRECTIVES,
+#          $2: MORE-BISON-DIRECTIVES,
+#          $3: PARSER-ACTION,
+#          $4: INPUT,
+#          $5: SCANNER-ACTION,
+#          $6: RESULT,
+#          $7: REQUIREMENT)
+# --------------------------------------
+# Compile the grammar and check the expected result.
+# BISON-DIRECTIVES are passed to AT_SETUP, contrary to MORE-BISON-DIRECTIVES.
+#
+# Use REQUIREMENT e.g. skip the test if the compiler does not meet the
+# requirements.
+m4_pushdef([_AT_TEST],
+[
+AT_SETUP([$1])
+AT_KEYWORDS([api.value.type])
+
+AT_BISON_OPTION_PUSHDEFS([%debug $1 $2])
+AT_DATA_GRAMMAR([test.y],
+[[%debug
+
+%code
+{
+# include <stdio.h>
+# include <stdlib.h>
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
+}
+
+]$1[
+]$2[
+
+%%
+
+start: $3;
+
+%%
+]AT_YYERROR_DEFINE[
+]AT_YYLEX_DEFINE([$4], [$5])[
+]AT_MAIN_DEFINE[
+]])
+
+AT_LANG_FOR_EACH_STD([
+  $7
+  AT_FULL_COMPILE([[test]])
+  AT_PARSER_CHECK([[test]], 0, [[$6
+]])
+])
+
+AT_BISON_OPTION_POPDEFS
+AT_CLEANUP
+])
+
+# AT_TEST($1: BISON-DIRECTIVES,
+#         $2: MORE-BISON-DIRECTIVES,
+#         $3: PARSER-ACTION,
+#         $4: INPUT,
+#         $5: SCANNER-ACTION,
+#         $6: RESULT,
+#         $7: REQUIREMENT)
+# --------------------------------------
+# Check with and without %defines, to avoid regressions.  It turns out
+# that in that case yacc.c calls the set-up of the %union twice,
+# because YYSTYPE is defined once in the header, and once in the
+# implementation file (eventually it'd be better to include the header
+# file, but that's another story).  Unfortunately running these macros
+# a second time doubled the side-effects and resulted in a double
+# definition of the union members.
+m4_pushdef([AT_TEST],
+[_AT_TEST([$1],          [$2], [$3], [$4], [$5], [$6], [$7])
+ _AT_TEST([$1 %defines], [$2], [$3], [$4], [$5], [$6], [$7])
+])
+
+m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc]],
+ [# A built-in type.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type {double}],
+          [],
+          ['1' '2' { printf ("%2.1f\n", $1 + $2); }],
+          ["12"],
+          [if (res)
+             AT_VAL = (res - '0') / 10.0],
+          [0.3])
+
+  # A typedef which looks like a Bison keyword, but it's using braces.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type {variant}],
+          [%code requires { typedef double variant; }],
+          ['1' '2' { printf ("%2.1f\n", $1 + $2); }],
+          ["12"],
+          [if (res)
+             AT_VAL = (res - '0') / 10.0],
+          [0.3])
+
+  # A user defined struct.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type {struct foo}],
+          [%code requires { struct foo { float fval; int ival; }; }],
+          ['1' '2'
+             { printf ("%d %2.1f\n", $1.ival + $2.ival, $1.fval + $2.fval); }],
+          ["12"],
+          [if (res)
+             {
+               AT_VAL.ival = (res - '0') * 10;
+               AT_VAL.fval = YY_CAST (float, res - '0') / 10.f;
+             }],
+          [30 0.3])
+
+  # A user defined struct that uses pointers.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type {struct bar}],
+          [%code requires
+           {
+             struct u
+             {
+               int ival;
+             };
+             struct bar
+             {
+               struct u *up;
+             };
+           }
+           %token <up->ival> '1' '2'
+           %printer { ]AT_CXX_IF([[yyo << $$]],
+                                 [[fprintf (yyo, "%d", $$)]])[; } <up->ival>
+           ],
+          ['1' '2'
+           {
+             printf ("%d %d\n", $1, $<up->ival>2);
+             free ($<up>1);
+             free ($<up>2);
+           }],
+          ["12"],
+          [if (res)
+             {
+               AT_VAL.up = YY_CAST (struct u *, malloc (sizeof *AT_VAL.up));
+               assert (AT_VAL.up);
+               AT_VAL.up->ival = res - '0';
+             }
+          ],
+          [1 2])
+
+  # A user defined union.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type {union foo}],
+          [%code requires { union foo { float fval; int ival; }; }],
+          ['1' '2' { printf ("%d %2.1f\n", $1.ival, $2.fval); }],
+          ["12"],
+          [if (res == '1')
+             AT_VAL.ival = 10;
+           else if (res == '2')
+             AT_VAL.fval = .2f],
+          [10 0.2])
+
+  # A %union and a named %union.  In C++ named %union is an error.
+  m4_foreach([b4_union],
+             [m4_bmatch(b4_skel, [\.cc$],
+                       [[%union]],
+                        [[%union], [%union foo],
+                         [%define api.value.union.name foo; %union]])],
+   [AT_TEST([%skeleton "]b4_skel["
+             ]b4_union[ { float fval; int ival; };],
+            [%token <ival> '1';
+             %token <fval> '2';],
+            ['1' '2' { printf ("%d %2.1f\n", $1, $2); }],
+            ["12"],
+            [if (res == '1')
+               AT_VAL.ival = 10;
+             else if (res == '2')
+               AT_VAL.fval = 0.2f],
+            [10 0.2])])
+
+  # A Bison-defined union.
+  # The tokens names are not available directly in C++, we use their
+  # user number to keep it simple between C and C++.
+  AT_TEST([%skeleton "]b4_skel["
+           %define api.value.type union],
+          [%token <int> ONE 101;
+           %token <float> TWO 102 THREE 103;
+           %printer { ]AT_CXX_IF([[yyo << $$]],
+                                 [[fprintf (yyo, "%d", $$)]])[; } <int>
+           %printer { ]AT_CXX_IF([[yyo << $$]],
+                                 [[fprintf (yyo, "%f", $$)]])[; } <float>
+          ],
+          [ONE TWO THREE { printf ("%d %2.1f %2.1f\n", $1, $2, $3); }],
+          [{ 101, 102, 103, EOF }],
+          [if (res == 101)
+             AT_VAL.ONE = 10;
+           else if (res == 102)
+             AT_VAL.TWO = .2f;
+           else if (res == 103)
+             AT_VAL.THREE = 3.3f],
+          [10 0.2 3.3])
+
+  # A Bison-defined variant, for lalr1.cc only.
+  m4_if(b4_skel, [lalr1.cc], [
+    AT_TEST([%skeleton "]b4_skel["
+             %define api.value.type variant],
+            [%token <int> '1';
+             %token <std::string> '2';],
+            ['1' '2' { std::cout << $1 << ", " << $2 << '\n'; }],
+            ["12"],
+            [if (res == '1')
+               AT_VAL.build (10);
+             else if (res == '2')
+               AT_VAL.build<std::string> ("two");],
+            [10, two])
+
+    # Test a regression where we passed user types (we can include
+    # commas) to a CPP macro.
+    AT_TEST([%skeleton "]b4_skel["
+             %define api.value.type variant],
+            [%token <std::pair<int, int>> '1';
+             %token <std::pair<std::string, std::string>> '2';],
+            ['1' '2'
+              {
+                std::cout << $1.first << ':' << $1.second << ", "
+                          << $2.first << ':' << $2.second << '\n';
+              }],
+            ["12"],
+            [if (res == '1')
+               AT_VAL.build (std::make_pair (10, 11));
+             else if (res == '2')
+               AT_VAL.build (std::pair<std::string, std::string> ("two", "deux"));],
+            [10:11, two:deux])
+
+    # Type-based token constructors on move-only types, and types with commas.
+    AT_TEST([%skeleton "]b4_skel["
+             %define api.value.type variant
+             %define api.token.constructor],
+            [[%token <std::pair<int, int>> '1' '2';]],
+            ['1' '2'
+              {
+                std::cout << $1.first << ':' << $1.second << ", "
+                          << $2.first << ':' << $2.second << '\n';
+              }],
+            ["12"],
+            [[typedef yy::parser::symbol_type symbol;
+             if (res)
+               return symbol (res, std::make_pair (res - '0', res - '0' + 1));
+             else
+               return symbol (res)]],
+            [1:2, 2:3])
+
+    # Move-only types, and variadic emplace.
+    AT_TEST([%skeleton "]b4_skel["
+             %code requires { #include <memory> }
+             %define api.value.type variant],
+            [[%token <std::unique_ptr<int>> '1';
+             %token <std::pair<int, int>> '2';]],
+            ['1' '2' { std::cout << *$1 << ", "
+                                 << $2.first << ':' << $2.second << '\n'; }],
+            ["12"],
+            [[if (res == '1')
+               ]AT_VAL[.emplace <std::unique_ptr<int>>
+                 (std::make_unique <int> (10));
+             else if (res == '2')
+               ]AT_VAL[.emplace <std::pair<int, int>> (21, 22);]],
+            [10, 21:22],
+            [AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; continue])])
+
+    # Token constructors on move-only types, and types with commas.
+    AT_TEST([%skeleton "]b4_skel["
+             %code requires { #include <memory> }
+             %define api.value.type variant
+             %define api.token.constructor],
+            [[%token <std::unique_ptr<int>> ONE;
+             %token <std::pair<int, int>> TWO;
+             %token EOI 0;]],
+            [ONE TWO { std::cout << *$1 << ", "
+                                 << $2.first << ':' << $2.second << '\n'; }],
+            ["12"],
+            [[if (res == '1')
+               return yy::parser::make_ONE (std::make_unique<int> (10));
+             else if (res == '2')
+               return yy::parser::make_TWO (std::make_pair (21, 22));
+             else
+               return yy::parser::make_EOI ()]],
+            [10, 21:22],
+            [AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; continue])])
+
+    # Type-based token constructors on move-only types, and types with commas.
+    AT_TEST([%skeleton "]b4_skel["
+             %code requires { #include <memory> }
+             %define api.value.type variant
+             %define api.token.constructor],
+            [[%token <std::unique_ptr<int>> '1';
+             %token <std::pair<int, int>> '2';]],
+            ['1' '2' { std::cout << *$1 << ", "
+                                 << $2.first << ':' << $2.second << '\n'; }],
+            ["12"],
+            [[if (res == '1')
+               return {res, std::make_unique<int> (10)};
+             else if (res == '2')
+               return {res, std::make_pair (21, 22)};
+             else
+               return res]],
+            [10, 21:22],
+            [AT_REQUIRE_CXX_STD(14, [echo "$at_std not supported"; continue])])
+
+  ])
+])
+
+m4_popdef([AT_TEST])
+m4_popdef([_AT_TEST])
+
+
+## ------------------- ##
+## C++: Named %union.  ##
+## ------------------- ##
+
+m4_foreach([b4_skel], [[lalr1.cc], [glr.cc]],
+[AT_SETUP([b4_skel: Named %union])
+AT_DATA([input.y],
+[%skeleton "]b4_skel["
+%union foo { float fval; int ival; };
+%%
+exp: %empty;
+])
+AT_BISON_CHECK([input.y], 1, [],
+[[input.y:2.8-10: error: named %union is invalid in C++
+]])
+AT_CLEANUP
+])